Contracts for
Get available contracts for a symbol. Request parameters reduced, market data removed from response, and several contract metadata fields removed.
5 breaking changes - code updates required
Critical Change:
The currency request parameter has been removed, market data fields (spot, open, close) removed from response, and required fields barrier_category and start_type removed from contract items.
Quick comparison
| Aspect | Legacy | New | Action required |
|---|---|---|---|
Endpoint ✅ Same | contracts_for | contracts_for | None |
Auth Required ✅ Same | No | No | None |
Request Complexity ⚠️ Changed | 8 parameters | 3 parameters | Remove filtering parameters |
Response Structure ⚠️ Changed | Nested with market data | Simplified | Update 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 requestlanding_company(deprecated in Legacy, now removed)landing_company_short(removed) - Landing company filtering no longer availableproduct_type(removed) - Product type filtering no longer availableloginid(removed) - Multi-account support removed
Currency Handling Changed
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 includedopen(removed) - Market open time no longer includedclose(removed) - Market close time no longer includedfeed_license(removed) - Feed license info no longer includednon_available(removed) - List of non-available contracts no longer included
Alternatives
ticks endpoint for spot prices and trading_times for market hours.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 includedtrading_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 includedtrade_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}