Skip to main content

Reserve Pool Risk API Reference

The following API endpoints expose Reserve Pool risk state data to partner dashboards, internal monitoring systems, and operations tooling. All endpoints require Bearer token authentication as documented in the FX Engine.

GET /v1/reserve/risk-status — Current VaR Status

Returns the current risk assessment snapshot for all corridors. Use for real-time monitoring dashboards and ops tooling.

Request:

GET /v1/reserve/risk-status
Authorization: Bearer {token}

Response:

{
"snapshot_time": "2026-02-27T10:05:00Z",
"reserve_capital_usd": 4850000,
"portfolio_var_usd": 142500,
"portfolio_var_pct": 2.94,
"overall_status": "NORMAL",
"corridors": {
"USD-IDR": {
"inventory_units": 30000000,
"waop": 16000,
"oracle_mid": 16050,
"gross_exposure_usd": 1875,
"unrealised_pnl_usd": -3.12,
"var_1d_usd": 1820,
"var_pct_of_capital": 0.038,
"concentration_pct": 12.4,
"status": "NORMAL",
"oldest_batch_age_hours": 4.2
},
"USD-SGD": {
"status": "NORMAL"
},
"MYR-IDR": {
"status": "PROTECT",
"var_pct_of_capital": 5.8,
"breach_type": "VAR_WARNING"
}
},
"last_emergency_rfq": null
}

Response Fields:

FieldTypeDescription
snapshot_timeISO 8601Timestamp of the snapshot used for this calculation
reserve_capital_usdnumberTotal USD-equivalent value of all Reserve Pool assets
portfolio_var_usdnumberPortfolio VaR in USD (after diversification discount)
portfolio_var_pctnumberPortfolio VaR as percentage of reserve capital
overall_statusstringWorst status across all corridors: NORMAL, PROTECT, RESTRICT, HALT
corridorsobjectPer-corridor breakdown with full risk metrics
last_emergency_rfqobject or nullDetails of last emergency RFQ if one has occurred

GET /v1/reserve/batches — Open Rebalancing Batches

Returns all open rebalancing batches with their WAOP, accumulated inventory, unrealised PnL, and lifecycle status.

Request:

GET /v1/reserve/batches?corridor=USD-IDR&status=OPEN
Authorization: Bearer {token}

Query Parameters:

ParameterRequiredDescription
corridorNoFilter by corridor (USD-IDR, USD-SGD, MYR-IDR)
statusNoFilter by status: OPEN, CLOSED, EMERGENCY_CLEARED

Response:

{
"batches": [
{
"batch_id": "BATCH-101",
"corridor": "USD-IDR",
"status": "OPEN",
"inventory_units": 30000000,
"waop": 16000,
"current_oracle_mid": 16050,
"unrealised_pnl_usd": -93.75,
"gross_exposure_usd": 1875,
"swap_count": 42,
"opened_at": "2026-02-27T06:00:00Z",
"oldest_swap_at": "2026-02-27T06:05:00Z"
}
]
}

POST /v1/reserve/emergency-rfq — Manual Emergency RFQ Trigger

Allows the operations team to manually trigger an Emergency RFQ for a corridor without waiting for an automated threshold breach. Requires ops-level authentication scope.

Request:

POST /v1/reserve/emergency-rfq
Authorization: Bearer {ops_token}
Content-Type: application/json
{
"corridor": "USD-IDR",
"reason": "Manual risk reduction — large one-sided flow detected",
"price_floor_override_bps": 75
}

Request Fields:

FieldRequiredDescription
corridorYesTarget corridor for emergency clearance
reasonYesFree-text reason for manual trigger (logged to audit trail)
price_floor_override_bpsNoOverride default 50 bps tolerance. Must be between 10–300 bps.

Response:

{
"rfq_id": "EMRFQ-2026-0227-001",
"corridor": "USD-IDR",
"status": "DISPATCHED",
"total_inventory_units": 30000000,
"waop": 16000,
"price_floor": 15988,
"timeout_seconds": 60,
"mm_recipients": ["binance", "wintermute", "otc_partner_1"],
"dispatched_at": "2026-02-27T10:15:00Z"
}

POST /v1/reserve/state-override — Manual State Override

Allows the operations team to manually set the FX Engine state for a corridor. Used for post-emergency recovery or pre-emptive risk management.

Request:

POST /v1/reserve/state-override
Authorization: Bearer {ops_token}
Content-Type: application/json
{
"corridor": "USD-IDR",
"target_state": "PROTECT",
"reason": "Manual override post-emergency clearance",
"override_duration_minutes": 60
}

Request Fields:

FieldRequiredDescription
corridorYesTarget corridor
target_stateYesNORMAL, PROTECT, RESTRICT, or HALT
reasonYesFree-text reason for override (logged to audit trail)
override_duration_minutesNoAuto-revert to previous state after duration. Omit for permanent override.

Response:

{
"corridor": "USD-IDR",
"previous_state": "RESTRICT",
"new_state": "PROTECT",
"override_id": "OVERRIDE-2026-0227-003",
"expires_at": "2026-02-27T11:15:00Z",
"set_by": "ops_admin@ratio.com"
}

Error Codes

For the complete error code reference, see the Unified Error Codes page.