Proposal
TradingNo AuthGet the price of a contract. symbol is renamed to underlying_symbol, request parameters and contract types are removed, and display_value and Snowball fields are no longer returned.
6 Breaking Changes
symbol is renamed to underlying_symbol, loginid and five other request parameters are removed, contract_type accepts different values, and display_value and the Snowball contract details are no longer returned.Quick comparison
Breaking changes
1. symbol renamed to underlying_symbol
The required symbol parameter is renamed to underlying_symbol.
Required change: Send underlying_symbol instead of symbol.
2. loginid parameter removed
In the Legacy API, loginid selected the account when you authorised several accounts. The New API does not accept it.
Required change: Remove loginid from your proposal requests.
3. Request parameters removed
The request no longer accepts barrier_range, date_start, product_type, trade_risk_profile or trading_period_start.
Required change: Remove these parameters from your proposal requests.
4. contract_type values changed
contract_type no longer accepts CALLSPREAD, PUTSPREAD, LBFLOATCALL, LBFLOATPUT, LBHIGHLOW, SNOWUP or SNOWDOWN, and adds HIGHER and LOWER.
Required change: Stop requesting prices for the contract types the New API no longer accepts.
5. display_value removed from the response
The Legacy API returned display_value, the formatted price, in every proposal. The New API does not return it. ask_price, date_start, id, longcode, payout, spot and spot_time are still always returned.
Required change: Format ask_price yourself if you showed display_value.
6. Snowball contract details removed
contract_details no longer returns caution_price, coupon_rate, num_of_coupons, profit_price or trade_risk_profile, which described Snowball contracts.
Required change: Stop reading these fields.
Request structure
{
"proposal": 1,
"amount": 10,
"basis": "stake",
"contract_type": "CALL",
"currency": "USD",
"duration": 5,
"duration_unit": "m",
"product_type": "basic",
"symbol": "R_100",
"loginid": "CR123456",
"req_id": 1
}{
"proposal": 1,
"amount": 10,
"basis": "stake",
"contract_type": "CALL",
"currency": "USD",
"duration": 5,
"duration_unit": "m",
"underlying_symbol": "R_100",
"req_id": 1
}Response structure
{
"echo_req": {
"proposal": 1,
"amount": 10,
"basis": "stake",
"contract_type": "CALL",
"currency": "USD",
"duration": 5,
"duration_unit": "m",
"product_type": "basic",
"symbol": "R_100",
"loginid": "CR123456",
"req_id": 1
},
"msg_type": "proposal",
"proposal": {
"ask_price": 10,
"date_expiry": 1760000300,
"date_start": 1760000000,
"id": "c84a793b-8a87-7999-ce10-9b22f7ceead3",
"longcode": "Win payout if Volatility 100 Index is strictly higher than entry spot at 5 minutes after contract start time.",
"payout": 19.55,
"spot": 1234.56,
"spot_time": 1760000000,
"display_value": "10.00"
},
"req_id": 1
}{
"echo_req": {
"proposal": 1,
"amount": 10,
"basis": "stake",
"contract_type": "CALL",
"currency": "USD",
"duration": 5,
"duration_unit": "m",
"underlying_symbol": "R_100",
"req_id": 1
},
"msg_type": "proposal",
"proposal": {
"ask_price": 10,
"date_expiry": 1760000300,
"date_start": 1760000000,
"id": "c84a793b-8a87-7999-ce10-9b22f7ceead3",
"longcode": "Win payout if Volatility 100 Index is strictly higher than entry spot at 5 minutes after contract start time.",
"payout": 19.55,
"spot": 1234.56,
"spot_time": 1760000000
},
"req_id": 1
}Code examples
function getPrice(loginId) {
ws.send(JSON.stringify({
proposal: 1,
amount: 10,
basis: "stake",
contract_type: "CALL",
currency: "USD",
duration: 5,
duration_unit: "m",
symbol: "R_100",
loginid: loginId
}));
ws.onmessage = (event) => {
const response = JSON.parse(event.data);
if (response.msg_type !== "proposal" || !response.proposal) return;
console.log("Price:", response.proposal.display_value);
console.log("Payout:", response.proposal.payout);
};
}Any other questions? Get in touch