curl --request POST \
--url https://api.rook.pm/v1/fair-values:batchUpsert \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scope_id": "rates_desk",
"fair_values": [
{
"outcome_id": "out_fed_dec_2026_cut_yes",
"market_version": "1",
"value_type": "PROBABILITY",
"probability_event": "FULL_PAYOUT",
"value": "0.46",
"source": "rates-desk-model-v3",
"observed_at": "2026-10-19T11:45:00Z",
"valid_until": "2026-10-19T18:00:00Z"
}
]
}
'import requests
url = "https://api.rook.pm/v1/fair-values:batchUpsert"
payload = {
"scope_id": "rates_desk",
"fair_values": [
{
"outcome_id": "out_fed_dec_2026_cut_yes",
"market_version": "1",
"value_type": "PROBABILITY",
"probability_event": "FULL_PAYOUT",
"value": "0.46",
"source": "rates-desk-model-v3",
"observed_at": "2026-10-19T11:45:00Z",
"valid_until": "2026-10-19T18:00:00Z"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scope_id: 'rates_desk',
fair_values: [
{
outcome_id: 'out_fed_dec_2026_cut_yes',
market_version: '1',
value_type: 'PROBABILITY',
probability_event: 'FULL_PAYOUT',
value: '0.46',
source: 'rates-desk-model-v3',
observed_at: '2026-10-19T11:45:00Z',
valid_until: '2026-10-19T18:00:00Z'
}
]
})
};
fetch('https://api.rook.pm/v1/fair-values:batchUpsert', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"items": [
{
"fair_value_id": "fv_rates_cut_desk",
"scope_id": "rates_desk",
"outcome_id": "out_fed_dec_2026_cut_yes",
"market_version": "1",
"value_type": "PROBABILITY",
"probability_event": "FULL_PAYOUT",
"value": "0.46",
"source": "rates-desk-model-v3",
"observed_at": "2026-10-19T11:45:00Z",
"valid_until": "2026-10-19T18:00:00Z",
"updated_at": "2026-10-19T12:00:00Z",
"revision": "1",
"status": "CURRENT"
}
],
"updated_at": "2026-10-19T12:00:00Z"
}Save fair values
Future extension. Save your own outcome probabilities or expected per-unit payouts in an authorized private scope_id. Each estimate pins a Rook outcome and market version and records your source, observation time and optional expiry.
The batch is atomic: validation or revision conflicts reject the entire batch. PROBABILITY requires a value in [0,1] and an explicit FULL_PAYOUT event; EXPECTED_PAYOUT requires its payout currency. Saved records return private IDs, server revisions and timestamps. These are customer estimates, not venue prices or Rook forecasts, and marginal values do not define joint scenario probabilities.
curl --request POST \
--url https://api.rook.pm/v1/fair-values:batchUpsert \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scope_id": "rates_desk",
"fair_values": [
{
"outcome_id": "out_fed_dec_2026_cut_yes",
"market_version": "1",
"value_type": "PROBABILITY",
"probability_event": "FULL_PAYOUT",
"value": "0.46",
"source": "rates-desk-model-v3",
"observed_at": "2026-10-19T11:45:00Z",
"valid_until": "2026-10-19T18:00:00Z"
}
]
}
'import requests
url = "https://api.rook.pm/v1/fair-values:batchUpsert"
payload = {
"scope_id": "rates_desk",
"fair_values": [
{
"outcome_id": "out_fed_dec_2026_cut_yes",
"market_version": "1",
"value_type": "PROBABILITY",
"probability_event": "FULL_PAYOUT",
"value": "0.46",
"source": "rates-desk-model-v3",
"observed_at": "2026-10-19T11:45:00Z",
"valid_until": "2026-10-19T18:00:00Z"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scope_id: 'rates_desk',
fair_values: [
{
outcome_id: 'out_fed_dec_2026_cut_yes',
market_version: '1',
value_type: 'PROBABILITY',
probability_event: 'FULL_PAYOUT',
value: '0.46',
source: 'rates-desk-model-v3',
observed_at: '2026-10-19T11:45:00Z',
valid_until: '2026-10-19T18:00:00Z'
}
]
})
};
fetch('https://api.rook.pm/v1/fair-values:batchUpsert', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"items": [
{
"fair_value_id": "fv_rates_cut_desk",
"scope_id": "rates_desk",
"outcome_id": "out_fed_dec_2026_cut_yes",
"market_version": "1",
"value_type": "PROBABILITY",
"probability_event": "FULL_PAYOUT",
"value": "0.46",
"source": "rates-desk-model-v3",
"observed_at": "2026-10-19T11:45:00Z",
"valid_until": "2026-10-19T18:00:00Z",
"updated_at": "2026-10-19T12:00:00Z",
"revision": "1",
"status": "CURRENT"
}
],
"updated_at": "2026-10-19T12:00:00Z"
}Authorizations
Proposed server-to-server API key. No client request HMAC signing scheme is specified.
Headers
Caller correlation reference; not an idempotency guarantee.