Predictions
Historical Predictions
Every published prediction with its outcome, wins and losses alike. Nothing is deleted or rewritten.
Overview
GET
/ v1/ history/ {asset}/ {timeframe}Developer PreviewPro plan and aboveapi.probora.xyz
Paginated history of predictions published before settlement, with outcomes, settlement prices and model versions. Nothing is deleted, nothing is rewritten.
Parameters
| Parameter | In | Type | Description |
|---|---|---|---|
| assetrequired | path | string | Asset symbol. One of BTC, ETH, SOL, XRP, DOGE, HYPE, BNB, GOLD, SILVER, OIL.Example: BTC |
| timeframerequired | path | string | Window length. One of 5m, 15m, 1h, 4h, 1d.Example: 15m |
| agent | query | string | Filter by agent slug.Example: meta |
| from | query | ISO-8601 | Only include windows starting at or after this instant.Example: 2026-11-01T00:00:00Z |
| to | query | ISO-8601 | Only include windows starting before this instant. |
| limit | query | integer | Page size, 1–500. Defaults to 100.Example: 100 |
| cursor | query | string | Opaque pagination cursor returned as next_cursor. |
Request
# export PROBORA_API_KEY=prb_live_…
curl "https://api.probora.xyz/v1/history/BTC/15m?agent=meta&limit=2" \
-H "Authorization: Bearer $PROBORA_API_KEY"Response
200 OK, returned as application/json. Example:
Response · 200
{
"data": [
{
"market_id": "btc-15m-20261114-1945",
"agent_slug": "meta",
"direction": "UP",
"up_probability": 0.64,
"published_at": "2026-11-14T19:45:00.380Z",
"settled_at": "2026-11-14T20:00:00.000Z",
"price_to_beat": 76188.12,
"settlement_price": 76230,
"outcome": "UP",
"result": "WIN",
"model_version": "meta-btc15-v18"
},
{
"market_id": "btc-15m-20261114-1930",
"agent_slug": "meta",
"direction": "UP",
"up_probability": 0.58,
"published_at": "2026-11-14T19:30:00.402Z",
"settled_at": "2026-11-14T19:45:00.000Z",
"price_to_beat": 76201.5,
"settlement_price": 76188.12,
"outcome": "DOWN",
"result": "LOSS",
"model_version": "meta-btc15-v18"
}
],
"next_cursor": "eyJ0IjoiMjAyNi0xMS0xNFQxOTozMDowMFoifQ",
"data_mode": "live"
}Response fields
| Field | Type | Description |
|---|---|---|
| data | array | Page of results, newest first. |
| next_cursor | string | Opaque cursor for the next page; null when there are no more results. |
| data_mode | string | "live" for real price sources, "demo" for the simulated network. The two are never mixed. |
Fields of each item in data
| Field | Type | Description |
|---|---|---|
| market_id | string | Deterministic market id {asset}-{timeframe}-{YYYYMMDD}-{HHMM} (UTC window start). |
| agent_slug | string | Agent identifier used in paths and filters. |
| direction | string | Called direction: UP or DOWN. |
| up_probability | number | Probability that the window settles UP, in [0, 1]. |
| published_at | string | — |
| settled_at | string | — |
| price_to_beat | number | Probora Price Index at the window start, rounded to the asset's tick size. |
| settlement_price | number | Probora Price Index at the window end; null until settled. |
| outcome | string | UP, DOWN, FLAT (exact tie) or VOID (index quorum not met); null while live. |
| result | string | — |
| model_version | string | Frozen model version that produced the prediction. |
Errors
Errors use the standard error envelope. Codes this endpoint can return:
| Code | Status | Meaning |
|---|---|---|
| invalid_request | 400 | Invalid request. A parameter is missing or malformed. |
| invalid_asset | 400 | Invalid asset. The asset symbol is not supported. |
| invalid_timeframe | 400 | Invalid timeframe. The timeframe is not one of 5m, 15m, 1h, 4h, 1d. |
| invalid_agent | 400 | Invalid agent. The agent slug is not recognized. |
| unauthorized | 401 | Unauthorized. The API key is missing, malformed or revoked. |
| plan_required | 403 | Plan required. Your plan does not include this endpoint or history depth. |
| rate_limited | 429 | Rate limited. Too many requests. Retry after the time in the Retry-After header. |
| internal_error | 500 | Internal error. Something went wrong on our side. The request id helps us investigate. |
Pagination
- Results are ordered by window start, newest first.
limitaccepts 1–500 (default 100). Passnext_cursorback as?cursor=to fetch the next page; it isnullon the last page.- Cursors are stable: settled history is immutable, so pages never shift underneath you.
- Combine
from/towithagentto build backtests over exact periods.
Nothing is removed
Losing predictions are never deleted and published predictions are never edited. FLAT windows appear with resultPUSH and VOID windows with result VOID; both are excluded from accuracy.History depth by plan
| Plan | History depth | Historical analytics |
|---|---|---|
| Free | 7 days | — |
| Pro | 90 days | Included |
| Trader | 365 days | Included |
| API | Full history | Included |
| Enterprise | Full history | Included |
Requests reaching beyond your plan's depth return 403 plan_required.
Questions or feedback on the API? [email protected]