Deriv API
Migration guide/Contracts for

Contracts for

Data

Get available contracts for a symbol. Request parameters reduced, market data removed from response, and several contract metadata fields removed.

Quick comparison

AspectLegacyNewAction required
Endpoint
✅ Same
contracts_forcontracts_forNone
Auth Required
✅ Same
NoNoNone
Request Complexity
⚠️ Changed
8 parameters3 parametersRemove filtering parameters
Response Structure
⚠️ Changed
Nested with market dataSimplifiedUpdate response parsing

Breaking changes

1. Request parameters removed

What Changed: Multiple filtering parameters have been removed from the request:

  • currency (removed) - Currency filtering no longer supported in request
  • landing_company (deprecated in Legacy, now removed)
  • landing_company_short (removed) - Landing company filtering no longer available
  • product_type (removed) - Product type filtering no longer available
  • loginid (removed) - Multi-account support removed

2. Market data fields removed from response

What Changed: Market timing and spot price fields removed from the contracts_for object:

  • spot (removed) - Current spot price no longer included
  • open (removed) - Market open time no longer included
  • close (removed) - Market close time no longer included
  • feed_license (removed) - Feed license info no longer included
  • non_available (removed) - List of non-available contracts no longer included

3. Display fields removed from contract items

What Changed: Display-specific fields removed from contract item objects:

  • contract_display (removed) - e.g., "Higher", "Lower"
  • contract_category_display (removed) - e.g., "Up/Down", "Asians"

4. Contract metadata fields removed

What Changed: Several contract metadata fields removed from contract item objects:

  • barrier_category (removed) - Was required in Legacy, e.g., "euro_atm", "american"
  • start_type (removed) - Was required in Legacy, e.g., "spot", "forward"
  • forward_starting_options (removed) - Forward starting session info no longer included
  • trading_period (removed) - Predefined trading period info no longer included

5. Specialized contract options removed

What Changed: Specialized configuration fields for certain contract types removed:

  • duration_choices (removed) - Snowball contract durations no longer included
  • trade_risk_profile_choices (removed) - Snowball risk profile options no longer included

Request structure

Legacy Request Example

1{
2  "contracts_for": "frxEURUSD",
3  "currency": "USD",  // ❌ Removed in New
4  "landing_company_short": "svg",  // ❌ Removed in New
5  "product_type": "basic",  // ❌ Removed in New
6  "loginid": "CR123456"  // ❌ Removed in New
7}

New Request Example

1{
2  "contracts_for": "frxEURUSD"
3}

Response structure

Legacy Response Example

1{
2  "contracts_for": {
3    "available": [
4      {
5        "barrier_category": "euro_atm",  // ❌ Not in New
6        "barriers": 0,
7        "contract_category": "callput",
8        "contract_category_display": "Up/Down",  // ❌ Not in New
9        "contract_display": "Higher",  // ❌ Not in New
10        "contract_type": "CALL",
11        "exchange_name": "FOREX",
12        "expiry_type": "intraday",
13        "market": "forex",
14        "sentiment": "up",
15        "start_type": "spot",  // ❌ Not in New
16        "submarket": "major_pairs",
17        "underlying_symbol": "frxEURUSD"
18      }
19    ],
20    "close": 1699574400,  // ❌ Not in New
21    "feed_license": "realtime",  // ❌ Not in New
22    "hit_count": 1,
23    "open": 1699488000,  // ❌ Not in New
24    "spot": 1.0850  // ❌ Not in New
25  },
26  "msg_type": "contracts_for"
27}

New Response Example

1{
2  "contracts_for": {
3    "available": [
4      {
5        "barriers": 0,
6        "contract_category": "callput",
7        "contract_type": "CALL",
8        "exchange_name": "FOREX",
9        "expiry_type": "intraday",
10        "market": "forex",
11        "sentiment": "up",
12        "submarket": "major_pairs",
13        "underlying_symbol": "frxEURUSD"
14      }
15    ],
16    "hit_count": 1
17  },
18  "msg_type": "contracts_for"
19}

Code examples

Legacy Implementation

1async function getContractsFor(symbol) {
2  const request = {
3    contracts_for: symbol,
4    currency: "USD",
5    landing_company_short: "svg",
6    product_type: "basic"
7  };
8
9  ws.send(JSON.stringify(request));
10
11  ws.onmessage = (event) => {
12    const response = JSON.parse(event.data);
13    if (response.msg_type === 'contracts_for') {
14      const { spot, open, close } = response.contracts_for;
15      console.log(`Spot: ${spot}, Open: ${open}, Close: ${close}`);
16      
17      response.contracts_for.available.forEach(c => {
18        console.log(`Type: ${c.contract_type}`);
19        console.log(`Display: ${c.contract_display}`);
20        console.log(`Barrier Category: ${c.barrier_category}`);
21      });
22    }
23  };
24}

New Implementation

1async function getContractsFor(symbol) {
2  // Simplified request - only symbol required
3  const request = {
4    contracts_for: symbol
5  };
6
7  ws.send(JSON.stringify(request));
8
9  ws.onmessage = (event) => {
10    const response = JSON.parse(event.data);
11    if (response.msg_type === 'contracts_for') {
12      // spot, open, close no longer available
13      // Use ticks endpoint for spot prices
14      
15      response.contracts_for.available.forEach(c => {
16        console.log(`Type: ${c.contract_type}`);
17        // contract_display, barrier_category no longer available
18      });
19    }
20  };
21}