Skip to content

API ReferenceCross-Venue Intelligence

Live executable-arbitrage assessment of discrepancy clusters. Router only.

GET
/api/{exchange}/fetchArbitrage
curl --request GET \
--url 'https://data.predictefy.com/api/router/fetchArbitrage?contracts=100&executableOnly=false&limit=5&offset=0&snapshotTTL=60000' \
--header 'Authorization: Bearer <token>'

Prices a page of discrepancy clusters against LIVE order books at the requested contracts size: buy YES on the cheap venue's real asks + buy NO on the dear venue's real asks, for a locked $1/contract payout at resolution.

A row is labeled "arbitrage" ONLY when EVERY gate passes:

  • Books — live non-synthetic asks on both legs.
  • Market — open market status.
  • Depth — full depth at the requested size.
  • Fees — a VERIFIED per-venue fee model, walked per level, with settlement commissions charged at the worst-case winning leg.
  • Resolution — the resolution-equivalence gate: an affirmative persisted verdict for the current rule-content hashes, plus threshold, stage and settlement-source vetoes.
  • Edge — a positive net edge after all costs.

Every other row is served as "indicative price discrepancy" with machine-readable reasons:

  • Per leg — see ArbitrageLeg.reasons; market_not_open covers stale status, an inactive flag, or a passed close time.
  • Per pair — threshold, stage and source conflicts, close_time_mismatch, resolution_equivalence_unverified, same_venue, *_leg_not_executable, no_positive_edge.

The fingerprint conflict vetoes AND the close-time bar are re-applied live at claim time.

The fresh published surface pages filtered assessment rows. If that surface is unavailable, the computed fallback scans at most 10 candidate clusters and may emit multiple ordered venue pairs per cluster. Fallback pagination advances before executable, venue, edge and sports filters, so an empty data page can still carry page.hasMore and page.nextCursor. Rows are ordered executable first, then by netEdge descending; at one contracts size that is the same order as roi descending.

exchange
required
string
Allowed values: router

Must be router for this cross-venue operation. Market anchors must use the canonical venue:marketId form; event anchors must use the canonical venue:eventId form.

contracts
integer
default: 100 >= 1 <= 10000

Position size to assess; depth and fees are judged AT this size.

stake
number
> 0 <= 1000000

USD budget for an optional whole-contract allocation from the recorded executable fills. One decimal number with at most 2 decimal places; repeated values, signs and exponents are rejected. Requires READS_ENABLE_ARBITRAGE_STAKE; while off, answers 400 VALIDATION_ERROR with "stake is not enabled". With stake, limit must be <= 100. Adds no credits to the existing request weight. Does not change the assessed contracts size or fetch deeper books.

category
string
executableOnly
boolean

True = serve ONLY rows that earned the "arbitrage" label.

venue
string

Keep a row when either leg touches this case-insensitive venue id. Repeated and comma-separated values are accepted, trimmed, and de-duplicated. For cursor walks, put all ids in one comma-separated value because the cursor fingerprints only the first repeated occurrence.

venues
string

Alias of venue; keeps a row when either leg touches any listed id. Repeated values work on the first page, but cursor walks must use one comma-separated value because only the first repeated occurrence is fingerprinted.

minEdge
number

Minimum finite netEdge in dollars, inclusive. Rows with null or non-finite net edge do not match.

pairsPerCluster
integer
>= 1 <= 9007199254740991

Keep at most this many best-ranked ordered venue pairs per base cluster after executable, venue, minEdge and sports filters.

sport
string
/^[a-z0-9_.-]{1,64}$/

Keep a row only when the markets of BOTH legs are keyed by the sports catalog to this canonical sport slug (as fetchSportsFacets serves it). A row whose legs are not both keyed, or whose keys disagree, never matches a sports filter. One exact value; a repeated key answers 400. Unknown valid values return an empty page. Requires the sports family (READS_ENABLE_SPORTS); while it is off, this parameter answers 400 VALIDATION_ERROR sports filters are not enabled.

competition
string
/^[a-z0-9_.-]{1,64}$/

Keep a row only when the markets of BOTH legs are keyed by the sports catalog to this competition id (as fetchSportsCompetitions serves it). A row whose legs are not both keyed, or whose keys disagree, never matches a sports filter. One exact value; a repeated key answers 400. Unknown valid values return an empty page. Requires the sports family (READS_ENABLE_SPORTS); while it is off, this parameter answers 400 VALIDATION_ERROR sports filters are not enabled.

marketType
string
/^[a-z0-9_]{1,32}$/

Keep a row only when the markets of BOTH legs are keyed by the sports catalog to this market type (moneyline, match_result, spread, total, team_total, btts, halftime_result, first_to_score, exact_score, outright, advance, player_prop, other; the vocabulary can grow). A row whose legs are not both keyed, or whose keys disagree, never matches a sports filter. One exact value; a repeated key answers 400. Unknown valid values return an empty page. Requires the sports family (READS_ENABLE_SPORTS); while it is off, this parameter answers 400 VALIDATION_ERROR sports filters are not enabled.

period
string
/^[a-z0-9_]{1,32}$/

Keep a row only when the markets of BOTH legs are keyed by the sports catalog to this period (full, regulation, 1h, 2h, q1 to q4, p1 to p3, map1 to map5). A row whose legs are not both keyed, or whose keys disagree, never matches a sports filter. One exact value; a repeated key answers 400. Unknown valid values return an empty page. Requires the sports family (READS_ENABLE_SPORTS); while it is off, this parameter answers 400 VALIDATION_ERROR sports filters are not enabled.

limit
integer
default: 5 >= 1 <= 500

Published assessment rows requested per page. The computed fallback accepts the same value but scans at most 10 candidate clusters; one cluster can emit multiple pair rows.

offset
integer
0 <= 10000

Zero-based offset. An explicit offset wins over page; a valid cursor overrides both after they are validated. Offsets above the maximum are rejected; use cursor pagination for deep walks.

page
integer
>= 1

One-based page used to derive offset as (page - 1) * limit; the derived offset must be a safe integer. Explicit offset wins; a valid cursor overrides both.

cursor
string

Opaque page.nextCursor from a prior response. It overrides offset/page and records this route plus the first serialized value of each non-pagination filter (category, contracts, executableOnly, venue/venues, minEdge, pairsPerCluster, sport, competition, marketType, period, stake); changing a recorded value answers 400. Repeated values after the first are not fingerprinted, so encode multi-venue filters as one comma-separated value. Published cursors also record the exact surface sequence. A published cursor keeps paging that exact sequence (same rows, same order) for 60 seconds after a newer sequence replaces it; a caller-chosen longer snapshotTTL, or 0, cannot extend retention. After that it answers 400 Cursor has expired and the walk restarts from page 1. Snapshot/offset cursors are signed by the server; a tampered or foreign cursor is rejected as VALIDATION_ERROR.

snapshotTTL
integer
default: 60000 <= 86400000

Lifetime in milliseconds recorded when a cursor chain starts. 0 disables time expiry. A supplied cursor carries its original TTL, so a later snapshotTTL value is ignored.

Live executable-arbitrage assessments (honestly labeled per row).

Media typeapplication/json
object
success
required
boolean
data
required
Array<object>

A discrepancy cluster's best cross-venue pair priced against LIVE books. label is "arbitrage" IFF executable — every gate passed at the requested size; otherwise "indicative price discrepancy" with the failing gates in reasons (hard rule 2: the claim is earned, never assumed).

object
clusterId
required
string
question
required
string
similarity
required

Candidate similarity from matching, distinct from matchScore.

number
<= 1
contracts
required

The assessed size; depth/fees judged AT this size.

number
legs
required
object
buyYes
required

One taker-BUY leg of the assessed pair. Pricing fields are null whenever the leg cannot honestly be priced AS THE CLAIMED TRADE (missing/synthetic/thin book, or no verified fee model) — reasons carries the machine-readable WHY.

object
venue
required
string
canonicalMarketId
required

Composite "{venue}:{marketId}".

string
side
required
string
Allowed values: yes no
executable
required
boolean
reasons
required
Array<string>
Allowed values: unverified_fees market_not_open synthetic_book book_unavailable no_asks insufficient_depth
note

Research note for unverified-fee venues (why no model exists).

string
vwap
required

VWAP of the full requested fill, $/contract.

number | null
cost
required

Walked cost of the full requested fill, $.

number | null
fee
required

VERIFIED taker fee for the fill, $ (0 for settlement-commission venues).

number | null
feeBasis

Which fee rate applied (general, sports, conservative-max, …).

string
filled
required

Contracts available on the walked asks (≤ requested).

number
fullyFilled
required
boolean
outcomeId

The outcome whose live book priced this leg; the outcome an order for this leg names. Served only when the sports family is enabled on the deployment.

string
selection

The canonical sports selection this outcome pays on (home, away, draw, over, under, yes, no, team:<team_id>). Served on leg-paired rows, and on every leg the sports catalog maps when the sports family is enabled; omitted otherwise.

string
sizeAtPrice

Contracts resting at the best usable ask of the same live book, summed across levels at that price; null when the book is unavailable, synthetic or has no usable ask. Read in the same pricing pass as the row asOf. Served only when the sports family is enabled on the deployment.

number | null
buyNo
required

One taker-BUY leg of the assessed pair. Pricing fields are null whenever the leg cannot honestly be priced AS THE CLAIMED TRADE (missing/synthetic/thin book, or no verified fee model) — reasons carries the machine-readable WHY.

object
venue
required
string
canonicalMarketId
required

Composite "{venue}:{marketId}".

string
side
required
string
Allowed values: yes no
executable
required
boolean
reasons
required
Array<string>
Allowed values: unverified_fees market_not_open synthetic_book book_unavailable no_asks insufficient_depth
note

Research note for unverified-fee venues (why no model exists).

string
vwap
required

VWAP of the full requested fill, $/contract.

number | null
cost
required

Walked cost of the full requested fill, $.

number | null
fee
required

VERIFIED taker fee for the fill, $ (0 for settlement-commission venues).

number | null
feeBasis

Which fee rate applied (general, sports, conservative-max, …).

string
filled
required

Contracts available on the walked asks (≤ requested).

number
fullyFilled
required
boolean
outcomeId

The outcome whose live book priced this leg; the outcome an order for this leg names. Served only when the sports family is enabled on the deployment.

string
selection

The canonical sports selection this outcome pays on (home, away, draw, over, under, yes, no, team:<team_id>). Served on leg-paired rows, and on every leg the sports catalog maps when the sports family is enabled; omitted otherwise.

string
sizeAtPrice

Contracts resting at the best usable ask of the same live book, summed across levels at that price; null when the book is unavailable, synthetic or has no usable ask. Read in the same pricing pass as the row asOf. Served only when the sports family is enabled on the deployment.

number | null
resolutionEquivalence
required

Whether a high-confidence affirmative persisted verdict matches both legs' current resolution-rule content hashes.

string
Allowed values: verified unverified
matchScore
required

Deterministic rules comparison score. Null when no current verdict exists. Verification still requires an equivalent high-confidence verdict; the score alone never permits execution. Hidden rows are excluded from the feed.

integer | null
<= 100
matchBand
required
string
Allowed values: verified minor material hidden unscored
matchDifferences
required

Each difference kind is deducted once; explanations of that kind are joined.

Array<object>

A listed score deduction. Confidence costs 5 points for medium and 10 for low. A date veto accounts for all 100 points as deadline_handling; that row is hidden.

object
kind
required
string
Allowed values: event_identity resolution_authority cancellation_handling deadline_handling successor_handling polarity other confidence
detail
required
string
points
required
integer
sports

The sports catalog key that the markets of BOTH legs share. fixtureId is null for a competition-level market such as an outright. Omitted when either leg is not keyed or the two keys disagree; such a row never matches a sports filter. Served only when the sports family is enabled on the deployment. Catalog identity is Predictefy data, not a venue statement and not a settlement claim.

object
fixtureId
required
string | null
sport
required
string
competitionId
required
string
marketType
required
string
period
required
string
stake

Optional USD allocation projection, emitted only when stake is supplied. A null allocation carries the reason it cannot be priced; no deeper book is fetched.

object
requested
required

Requested budget in USD.

number
reason
required
string | null
Allowed values: not_executable fills_unavailable below_one_contract
allocation
required
Any of:

Largest affordable whole-contract allocation within the recorded assessed fills. Small allocations can lose money because of per-order minimum fees; profitable states the result.

object
contracts
required
integer
exact
required

The allocation equals the assessed contracts size.

boolean
capped
required

The budget exceeds the assessed total cost; recorded depth caps the allocation.

boolean
legs
required
object
buyYes
required
object
venue
required
string
canonicalMarketId
required

Composite "{venue}:{marketId}".

string
side
required
string
Allowed values: yes no
selection

Canonical sports selection when present on the source leg.

string
contracts
required
integer
cost
required

Re-walked ask cost in USD before fees.

number
fee
required

Verified taker fee in USD, including any per-order minimum.

number
buyNo
required
object
venue
required
string
canonicalMarketId
required

Composite "{venue}:{marketId}".

string
side
required
string
Allowed values: yes no
selection

Canonical sports selection when present on the source leg.

string
contracts
required
integer
cost
required

Re-walked ask cost in USD before fees.

number
fee
required

Verified taker fee in USD, including any per-order minimum.

number
settlementFee
required

Worst-case winning-leg settlement commission in USD.

number
totalCost
required

Both legs plus fees and worst-case settlement commission in USD.

number
payout
required

Contracts times the locked USD 1 payout.

number
profit
required

Payout minus totalCost in USD.

number
profitable
required

True only when payout exceeds totalCost.

boolean
roi
required

(payout − totalCost) / totalCost, rounded down to 4 decimal places; null when totalCost is zero.

number | null
unallocated
required

Requested budget minus totalCost in USD.

number
resolution
required

Cheap fingerprint conflict veto (compatible ≠ verified equivalent).

object
compatible
required
boolean
reason
required
string
Allowed values: "" threshold_conflict stage_conflict source_conflict
auditReasons
required
Array<string>
settlementFee
required

Worst-case settlement commission across legs (only one leg wins), $.

number | null
totalCost
required

Legs + fees + settlement worst case, $; null when unknowable.

number | null
payout
required

The locked payout: contracts × $1.

number
netEdge
required

Payout − totalCost, $; null when unknowable.

number | null
roi
required
number | null
executable
required
boolean
reasons
required

Pair-level failing gates (empty when executable).

Array<string>
label
required
string
Allowed values: arbitrage indicative price discrepancy
asOf
required

EARLIEST leg-book freshness; null when either live book is missing.

string | null format: date-time
meta
required

Live-book provenance and the source of this response. asOf/seq exist only on the published path; totalUnavailable explains a null page.total on fallback.

object
live
required
boolean
contracts
required

The requested position size used for every assessment.

integer
>= 1 <= 10000
provenance
required
object
source
required

Predictefy-live — served from the live WebSocket hub or live order book.

string
Allowed values: predictefy-live
asOf

Published surface timestamp; omitted on computed fallback.

string format: date-time
seq

Published surface sequence; omitted on computed fallback.

integer
>= 1
source
required

Whether rows came from the fresh published surface or bounded on-demand computation.

string
Allowed values: published computed-fallback
totalUnavailable

Why page.total is null; present only when the fallback count is unavailable.

string
stake

Requested USD budget; omitted without stake.

number
degraded

Present and true when the fills sidecar is unavailable.

boolean
degradedReason

Omitted when the fills sidecar read has not failed.

string
Allowed values: fills_sidecar_unavailable
page
required
object
limit
required
integer
offset
required
integer
total
required

Total matching rows, or null when the total was NOT computed — never a fabricated 0. The data page is the product and the count is metadata, so routes may warm an exact total off-request or abandon a count that exceeds its short budget while the page is still served. null is always accompanied by meta.totalUnavailable, which says why; use hasMore / nextCursor to walk the result set.

integer | null
hasMore
required

Whether another page exists. Determined by fetching one row beyond the requested limit, so it stays correct even when total is null.

boolean
nextCursor

Opaque cursor for the next page. Omitted on the final page.

string
nextCursor

Compatibility alias of page.nextCursor; omitted on the final page.

string
Example
{
"data": [
{
"legs": {
"buyYes": {
"side": "yes",
"reasons": [
"unverified_fees"
]
},
"buyNo": {
"side": "yes",
"reasons": [
"unverified_fees"
]
}
},
"resolutionEquivalence": "verified",
"matchBand": "verified",
"matchDifferences": [
{
"kind": "event_identity"
}
],
"stake": {
"reason": null,
"allocation": {
"legs": {
"buyYes": {
"side": "yes"
},
"buyNo": {
"side": "yes"
}
}
}
},
"resolution": {
"reason": ""
},
"label": "arbitrage"
}
],
"meta": {
"live": true,
"provenance": {
"source": "predictefy-live"
},
"source": "published",
"degradedReason": "fills_sidecar_unavailable"
}
}

VALIDATION_ERROR (incl. non-router exchange, contracts/limit out of range, a sports filter while the sports family is off)

Media typeapplication/json
object
success
required
boolean
error
required
object
message
required
string
code
required
string
Allowed values: VALIDATION_ERROR NOT_SUPPORTED ACCOUNTS_UNSUPPORTED VENUE_NOT_AVAILABLE EXCHANGE_NOT_AVAILABLE MARKET_NOT_FOUND EVENT_NOT_FOUND TRADERS_UNSUPPORTED TRADER_NOT_FOUND CLUSTER_NOT_FOUND OUTCOME_NOT_FOUND SNAPSHOT_NOT_FOUND CATALOG_UNAVAILABLE CATALOG_QUERY_TOO_BROAD HISTORY_UNAVAILABLE SPORTS_SCREEN_UNAVAILABLE SPORTS_FIXTURE_NOT_FOUND SPORTS_BLOCK_NOT_FOUND ROUTE_NOT_FOUND INTERNAL AUTHENTICATION_ERROR PERMISSION_DENIED RATE_LIMIT_EXCEEDED NETWORK_ERROR NOT_FOUND BAD_REQUEST BRIDGE_UNSUPPORTED BRIDGE_NO_ROUTE BRIDGE_UPSTREAM BRIDGE_PROVIDER_UNAVAILABLE BRIDGE_TRANSACTION_NOT_FOUND BRIDGE_SESSION_NOT_FOUND TRANSFER_PLAN_UNSUPPORTED UNAUTHORIZED SCOPE_MISSING PLAN_REQUIRED INSUFFICIENT_CREDITS RATE_LIMITED GEO_BLOCKED VENUE_REGION_BLOCKED IDEMPOTENCY_KEY_REQUIRED RESERVED_IDEMPOTENCY_KEY IDEMPOTENCY_CONFLICT ARTIFACT_VERSION_CONFLICT SPEND_CAP_EXCEEDED RESERVATION_REQUIRED RESERVATION_CONSUMED RESERVATION_MISMATCH RESERVATION_EXPIRED RESERVATION_RELEASED ARTIFACT_BOUNDS_VIOLATION ARTIFACT_INTEGRITY_MISMATCH CLAIM_GENERATION_UNDETERMINED VENUE_NOT_SUPPORTED EXECUTION_NOT_FOUND EXECUTION_TERMINAL CONDITIONAL_NOT_FOUND CONDITIONAL_NOT_ARMED CONDITIONAL_ATTEMPT_CONFLICT CONDITIONAL_ARMED CONDITIONAL_CLOSED_NOT_SUBMITTED OCO_GROUP_CLOSED HOSTED_FIRE_NOT_ELIGIBLE HOSTED_FIRE_UNAVAILABLE NOT_IMPLEMENTED VENUE_CREDENTIAL_REJECTED VENUE_CREDENTIAL_BREAKER_OPEN GEMINI_TIME_NONCE_REQUIRED GEMINI_HEARTBEAT_KEY_UNSUPPORTED VENUE_RELAY_FAILED EXEC_UNAVAILABLE RAIN_INVALID_OPTION RAIN_INVALID_SIDE RAIN_INVALID_PRICE RAIN_INVALID_AMOUNT RAIN_SLIPPAGE_REQUIRED RAIN_INVALID_DEADLINE RAIN_PHASE_NOT_OPEN RAIN_ORDER_LIMIT_REACHED RAIN_POOL_SAFETY_CHECK_FAILED PLATFORM_UNAVAILABLE PACK_NOT_FOUND BILLING_UNAVAILABLE BILLING_CUSTOMER_REQUIRED PLAN_NOT_FOUND SUBSCRIPTION_EXISTS WEBHOOK_NOT_FOUND INVALID_SIGNATURE PAPER_INSUFFICIENT_CASH PAPER_POSITION_TOO_SMALL PAPER_MARKET_CLOSED PAPER_WORKING_ORDER_CAP PAPER_NO_LIVE_BOOK PAPER_ORDER_NOT_FOUND PAPER_ORDER_NOT_OPEN SQL_QUERY_FAILED SQL_TIMEOUT FEED_NOT_FOUND FEEDS_UNAVAILABLE FEED_UPSTREAM MATCHES_UNAVAILABLE ARBITRAGE_UNAVAILABLE
retryable
required
boolean
requestId
required

Always present on errors; quote this id when reporting a failed request.

string
exchange

Present only when a venue error is attributed to a specific exchange.

string
Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR"
}
}

UNAUTHORIZED — platform lane (READS_ENABLE_AUTH)

Media typeapplication/json
object
success
required
boolean
error
required
object
message
required
string
code
required
string
Allowed values: VALIDATION_ERROR NOT_SUPPORTED ACCOUNTS_UNSUPPORTED VENUE_NOT_AVAILABLE EXCHANGE_NOT_AVAILABLE MARKET_NOT_FOUND EVENT_NOT_FOUND TRADERS_UNSUPPORTED TRADER_NOT_FOUND CLUSTER_NOT_FOUND OUTCOME_NOT_FOUND SNAPSHOT_NOT_FOUND CATALOG_UNAVAILABLE CATALOG_QUERY_TOO_BROAD HISTORY_UNAVAILABLE SPORTS_SCREEN_UNAVAILABLE SPORTS_FIXTURE_NOT_FOUND SPORTS_BLOCK_NOT_FOUND ROUTE_NOT_FOUND INTERNAL AUTHENTICATION_ERROR PERMISSION_DENIED RATE_LIMIT_EXCEEDED NETWORK_ERROR NOT_FOUND BAD_REQUEST BRIDGE_UNSUPPORTED BRIDGE_NO_ROUTE BRIDGE_UPSTREAM BRIDGE_PROVIDER_UNAVAILABLE BRIDGE_TRANSACTION_NOT_FOUND BRIDGE_SESSION_NOT_FOUND TRANSFER_PLAN_UNSUPPORTED UNAUTHORIZED SCOPE_MISSING PLAN_REQUIRED INSUFFICIENT_CREDITS RATE_LIMITED GEO_BLOCKED VENUE_REGION_BLOCKED IDEMPOTENCY_KEY_REQUIRED RESERVED_IDEMPOTENCY_KEY IDEMPOTENCY_CONFLICT ARTIFACT_VERSION_CONFLICT SPEND_CAP_EXCEEDED RESERVATION_REQUIRED RESERVATION_CONSUMED RESERVATION_MISMATCH RESERVATION_EXPIRED RESERVATION_RELEASED ARTIFACT_BOUNDS_VIOLATION ARTIFACT_INTEGRITY_MISMATCH CLAIM_GENERATION_UNDETERMINED VENUE_NOT_SUPPORTED EXECUTION_NOT_FOUND EXECUTION_TERMINAL CONDITIONAL_NOT_FOUND CONDITIONAL_NOT_ARMED CONDITIONAL_ATTEMPT_CONFLICT CONDITIONAL_ARMED CONDITIONAL_CLOSED_NOT_SUBMITTED OCO_GROUP_CLOSED HOSTED_FIRE_NOT_ELIGIBLE HOSTED_FIRE_UNAVAILABLE NOT_IMPLEMENTED VENUE_CREDENTIAL_REJECTED VENUE_CREDENTIAL_BREAKER_OPEN GEMINI_TIME_NONCE_REQUIRED GEMINI_HEARTBEAT_KEY_UNSUPPORTED VENUE_RELAY_FAILED EXEC_UNAVAILABLE RAIN_INVALID_OPTION RAIN_INVALID_SIDE RAIN_INVALID_PRICE RAIN_INVALID_AMOUNT RAIN_SLIPPAGE_REQUIRED RAIN_INVALID_DEADLINE RAIN_PHASE_NOT_OPEN RAIN_ORDER_LIMIT_REACHED RAIN_POOL_SAFETY_CHECK_FAILED PLATFORM_UNAVAILABLE PACK_NOT_FOUND BILLING_UNAVAILABLE BILLING_CUSTOMER_REQUIRED PLAN_NOT_FOUND SUBSCRIPTION_EXISTS WEBHOOK_NOT_FOUND INVALID_SIGNATURE PAPER_INSUFFICIENT_CASH PAPER_POSITION_TOO_SMALL PAPER_MARKET_CLOSED PAPER_WORKING_ORDER_CAP PAPER_NO_LIVE_BOOK PAPER_ORDER_NOT_FOUND PAPER_ORDER_NOT_OPEN SQL_QUERY_FAILED SQL_TIMEOUT FEED_NOT_FOUND FEEDS_UNAVAILABLE FEED_UPSTREAM MATCHES_UNAVAILABLE ARBITRAGE_UNAVAILABLE
retryable
required
boolean
requestId
required

Always present on errors; quote this id when reporting a failed request.

string
exchange

Present only when a venue error is attributed to a specific exchange.

string
Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR"
}
}

INSUFFICIENT_CREDITS — endpoint-weighted credits

Media typeapplication/json
object
success
required
boolean
error
required
object
message
required
string
code
required
string
Allowed values: VALIDATION_ERROR NOT_SUPPORTED ACCOUNTS_UNSUPPORTED VENUE_NOT_AVAILABLE EXCHANGE_NOT_AVAILABLE MARKET_NOT_FOUND EVENT_NOT_FOUND TRADERS_UNSUPPORTED TRADER_NOT_FOUND CLUSTER_NOT_FOUND OUTCOME_NOT_FOUND SNAPSHOT_NOT_FOUND CATALOG_UNAVAILABLE CATALOG_QUERY_TOO_BROAD HISTORY_UNAVAILABLE SPORTS_SCREEN_UNAVAILABLE SPORTS_FIXTURE_NOT_FOUND SPORTS_BLOCK_NOT_FOUND ROUTE_NOT_FOUND INTERNAL AUTHENTICATION_ERROR PERMISSION_DENIED RATE_LIMIT_EXCEEDED NETWORK_ERROR NOT_FOUND BAD_REQUEST BRIDGE_UNSUPPORTED BRIDGE_NO_ROUTE BRIDGE_UPSTREAM BRIDGE_PROVIDER_UNAVAILABLE BRIDGE_TRANSACTION_NOT_FOUND BRIDGE_SESSION_NOT_FOUND TRANSFER_PLAN_UNSUPPORTED UNAUTHORIZED SCOPE_MISSING PLAN_REQUIRED INSUFFICIENT_CREDITS RATE_LIMITED GEO_BLOCKED VENUE_REGION_BLOCKED IDEMPOTENCY_KEY_REQUIRED RESERVED_IDEMPOTENCY_KEY IDEMPOTENCY_CONFLICT ARTIFACT_VERSION_CONFLICT SPEND_CAP_EXCEEDED RESERVATION_REQUIRED RESERVATION_CONSUMED RESERVATION_MISMATCH RESERVATION_EXPIRED RESERVATION_RELEASED ARTIFACT_BOUNDS_VIOLATION ARTIFACT_INTEGRITY_MISMATCH CLAIM_GENERATION_UNDETERMINED VENUE_NOT_SUPPORTED EXECUTION_NOT_FOUND EXECUTION_TERMINAL CONDITIONAL_NOT_FOUND CONDITIONAL_NOT_ARMED CONDITIONAL_ATTEMPT_CONFLICT CONDITIONAL_ARMED CONDITIONAL_CLOSED_NOT_SUBMITTED OCO_GROUP_CLOSED HOSTED_FIRE_NOT_ELIGIBLE HOSTED_FIRE_UNAVAILABLE NOT_IMPLEMENTED VENUE_CREDENTIAL_REJECTED VENUE_CREDENTIAL_BREAKER_OPEN GEMINI_TIME_NONCE_REQUIRED GEMINI_HEARTBEAT_KEY_UNSUPPORTED VENUE_RELAY_FAILED EXEC_UNAVAILABLE RAIN_INVALID_OPTION RAIN_INVALID_SIDE RAIN_INVALID_PRICE RAIN_INVALID_AMOUNT RAIN_SLIPPAGE_REQUIRED RAIN_INVALID_DEADLINE RAIN_PHASE_NOT_OPEN RAIN_ORDER_LIMIT_REACHED RAIN_POOL_SAFETY_CHECK_FAILED PLATFORM_UNAVAILABLE PACK_NOT_FOUND BILLING_UNAVAILABLE BILLING_CUSTOMER_REQUIRED PLAN_NOT_FOUND SUBSCRIPTION_EXISTS WEBHOOK_NOT_FOUND INVALID_SIGNATURE PAPER_INSUFFICIENT_CASH PAPER_POSITION_TOO_SMALL PAPER_MARKET_CLOSED PAPER_WORKING_ORDER_CAP PAPER_NO_LIVE_BOOK PAPER_ORDER_NOT_FOUND PAPER_ORDER_NOT_OPEN SQL_QUERY_FAILED SQL_TIMEOUT FEED_NOT_FOUND FEEDS_UNAVAILABLE FEED_UPSTREAM MATCHES_UNAVAILABLE ARBITRAGE_UNAVAILABLE
retryable
required
boolean
requestId
required

Always present on errors; quote this id when reporting a failed request.

string
exchange

Present only when a venue error is attributed to a specific exchange.

string
Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR"
}
}

SCOPE_MISSING — API key lacks the route's required scope (RBAC v1); PLAN_REQUIRED — see credits.md

Media typeapplication/json
object
success
required
boolean
error
required
object
message
required
string
code
required
string
Allowed values: VALIDATION_ERROR NOT_SUPPORTED ACCOUNTS_UNSUPPORTED VENUE_NOT_AVAILABLE EXCHANGE_NOT_AVAILABLE MARKET_NOT_FOUND EVENT_NOT_FOUND TRADERS_UNSUPPORTED TRADER_NOT_FOUND CLUSTER_NOT_FOUND OUTCOME_NOT_FOUND SNAPSHOT_NOT_FOUND CATALOG_UNAVAILABLE CATALOG_QUERY_TOO_BROAD HISTORY_UNAVAILABLE SPORTS_SCREEN_UNAVAILABLE SPORTS_FIXTURE_NOT_FOUND SPORTS_BLOCK_NOT_FOUND ROUTE_NOT_FOUND INTERNAL AUTHENTICATION_ERROR PERMISSION_DENIED RATE_LIMIT_EXCEEDED NETWORK_ERROR NOT_FOUND BAD_REQUEST BRIDGE_UNSUPPORTED BRIDGE_NO_ROUTE BRIDGE_UPSTREAM BRIDGE_PROVIDER_UNAVAILABLE BRIDGE_TRANSACTION_NOT_FOUND BRIDGE_SESSION_NOT_FOUND TRANSFER_PLAN_UNSUPPORTED UNAUTHORIZED SCOPE_MISSING PLAN_REQUIRED INSUFFICIENT_CREDITS RATE_LIMITED GEO_BLOCKED VENUE_REGION_BLOCKED IDEMPOTENCY_KEY_REQUIRED RESERVED_IDEMPOTENCY_KEY IDEMPOTENCY_CONFLICT ARTIFACT_VERSION_CONFLICT SPEND_CAP_EXCEEDED RESERVATION_REQUIRED RESERVATION_CONSUMED RESERVATION_MISMATCH RESERVATION_EXPIRED RESERVATION_RELEASED ARTIFACT_BOUNDS_VIOLATION ARTIFACT_INTEGRITY_MISMATCH CLAIM_GENERATION_UNDETERMINED VENUE_NOT_SUPPORTED EXECUTION_NOT_FOUND EXECUTION_TERMINAL CONDITIONAL_NOT_FOUND CONDITIONAL_NOT_ARMED CONDITIONAL_ATTEMPT_CONFLICT CONDITIONAL_ARMED CONDITIONAL_CLOSED_NOT_SUBMITTED OCO_GROUP_CLOSED HOSTED_FIRE_NOT_ELIGIBLE HOSTED_FIRE_UNAVAILABLE NOT_IMPLEMENTED VENUE_CREDENTIAL_REJECTED VENUE_CREDENTIAL_BREAKER_OPEN GEMINI_TIME_NONCE_REQUIRED GEMINI_HEARTBEAT_KEY_UNSUPPORTED VENUE_RELAY_FAILED EXEC_UNAVAILABLE RAIN_INVALID_OPTION RAIN_INVALID_SIDE RAIN_INVALID_PRICE RAIN_INVALID_AMOUNT RAIN_SLIPPAGE_REQUIRED RAIN_INVALID_DEADLINE RAIN_PHASE_NOT_OPEN RAIN_ORDER_LIMIT_REACHED RAIN_POOL_SAFETY_CHECK_FAILED PLATFORM_UNAVAILABLE PACK_NOT_FOUND BILLING_UNAVAILABLE BILLING_CUSTOMER_REQUIRED PLAN_NOT_FOUND SUBSCRIPTION_EXISTS WEBHOOK_NOT_FOUND INVALID_SIGNATURE PAPER_INSUFFICIENT_CASH PAPER_POSITION_TOO_SMALL PAPER_MARKET_CLOSED PAPER_WORKING_ORDER_CAP PAPER_NO_LIVE_BOOK PAPER_ORDER_NOT_FOUND PAPER_ORDER_NOT_OPEN SQL_QUERY_FAILED SQL_TIMEOUT FEED_NOT_FOUND FEEDS_UNAVAILABLE FEED_UPSTREAM MATCHES_UNAVAILABLE ARBITRAGE_UNAVAILABLE
retryable
required
boolean
requestId
required

Always present on errors; quote this id when reporting a failed request.

string
exchange

Present only when a venue error is attributed to a specific exchange.

string
Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR"
}
}

RATE_LIMITED — per-key rps limit

Media typeapplication/json
object
success
required
boolean
error
required
object
message
required
string
code
required
string
Allowed values: VALIDATION_ERROR NOT_SUPPORTED ACCOUNTS_UNSUPPORTED VENUE_NOT_AVAILABLE EXCHANGE_NOT_AVAILABLE MARKET_NOT_FOUND EVENT_NOT_FOUND TRADERS_UNSUPPORTED TRADER_NOT_FOUND CLUSTER_NOT_FOUND OUTCOME_NOT_FOUND SNAPSHOT_NOT_FOUND CATALOG_UNAVAILABLE CATALOG_QUERY_TOO_BROAD HISTORY_UNAVAILABLE SPORTS_SCREEN_UNAVAILABLE SPORTS_FIXTURE_NOT_FOUND SPORTS_BLOCK_NOT_FOUND ROUTE_NOT_FOUND INTERNAL AUTHENTICATION_ERROR PERMISSION_DENIED RATE_LIMIT_EXCEEDED NETWORK_ERROR NOT_FOUND BAD_REQUEST BRIDGE_UNSUPPORTED BRIDGE_NO_ROUTE BRIDGE_UPSTREAM BRIDGE_PROVIDER_UNAVAILABLE BRIDGE_TRANSACTION_NOT_FOUND BRIDGE_SESSION_NOT_FOUND TRANSFER_PLAN_UNSUPPORTED UNAUTHORIZED SCOPE_MISSING PLAN_REQUIRED INSUFFICIENT_CREDITS RATE_LIMITED GEO_BLOCKED VENUE_REGION_BLOCKED IDEMPOTENCY_KEY_REQUIRED RESERVED_IDEMPOTENCY_KEY IDEMPOTENCY_CONFLICT ARTIFACT_VERSION_CONFLICT SPEND_CAP_EXCEEDED RESERVATION_REQUIRED RESERVATION_CONSUMED RESERVATION_MISMATCH RESERVATION_EXPIRED RESERVATION_RELEASED ARTIFACT_BOUNDS_VIOLATION ARTIFACT_INTEGRITY_MISMATCH CLAIM_GENERATION_UNDETERMINED VENUE_NOT_SUPPORTED EXECUTION_NOT_FOUND EXECUTION_TERMINAL CONDITIONAL_NOT_FOUND CONDITIONAL_NOT_ARMED CONDITIONAL_ATTEMPT_CONFLICT CONDITIONAL_ARMED CONDITIONAL_CLOSED_NOT_SUBMITTED OCO_GROUP_CLOSED HOSTED_FIRE_NOT_ELIGIBLE HOSTED_FIRE_UNAVAILABLE NOT_IMPLEMENTED VENUE_CREDENTIAL_REJECTED VENUE_CREDENTIAL_BREAKER_OPEN GEMINI_TIME_NONCE_REQUIRED GEMINI_HEARTBEAT_KEY_UNSUPPORTED VENUE_RELAY_FAILED EXEC_UNAVAILABLE RAIN_INVALID_OPTION RAIN_INVALID_SIDE RAIN_INVALID_PRICE RAIN_INVALID_AMOUNT RAIN_SLIPPAGE_REQUIRED RAIN_INVALID_DEADLINE RAIN_PHASE_NOT_OPEN RAIN_ORDER_LIMIT_REACHED RAIN_POOL_SAFETY_CHECK_FAILED PLATFORM_UNAVAILABLE PACK_NOT_FOUND BILLING_UNAVAILABLE BILLING_CUSTOMER_REQUIRED PLAN_NOT_FOUND SUBSCRIPTION_EXISTS WEBHOOK_NOT_FOUND INVALID_SIGNATURE PAPER_INSUFFICIENT_CASH PAPER_POSITION_TOO_SMALL PAPER_MARKET_CLOSED PAPER_WORKING_ORDER_CAP PAPER_NO_LIVE_BOOK PAPER_ORDER_NOT_FOUND PAPER_ORDER_NOT_OPEN SQL_QUERY_FAILED SQL_TIMEOUT FEED_NOT_FOUND FEEDS_UNAVAILABLE FEED_UPSTREAM MATCHES_UNAVAILABLE ARBITRAGE_UNAVAILABLE
retryable
required
boolean
requestId
required

Always present on errors; quote this id when reporting a failed request.

string
exchange

Present only when a venue error is attributed to a specific exchange.

string
Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR"
}
}

Unexpected internal error. Retryable; error.requestId identifies the failure.

Media typeapplication/json
object
success
required
boolean
error
required
object
message
required
string
code
required
string
Allowed values: VALIDATION_ERROR NOT_SUPPORTED ACCOUNTS_UNSUPPORTED VENUE_NOT_AVAILABLE EXCHANGE_NOT_AVAILABLE MARKET_NOT_FOUND EVENT_NOT_FOUND TRADERS_UNSUPPORTED TRADER_NOT_FOUND CLUSTER_NOT_FOUND OUTCOME_NOT_FOUND SNAPSHOT_NOT_FOUND CATALOG_UNAVAILABLE CATALOG_QUERY_TOO_BROAD HISTORY_UNAVAILABLE SPORTS_SCREEN_UNAVAILABLE SPORTS_FIXTURE_NOT_FOUND SPORTS_BLOCK_NOT_FOUND ROUTE_NOT_FOUND INTERNAL AUTHENTICATION_ERROR PERMISSION_DENIED RATE_LIMIT_EXCEEDED NETWORK_ERROR NOT_FOUND BAD_REQUEST BRIDGE_UNSUPPORTED BRIDGE_NO_ROUTE BRIDGE_UPSTREAM BRIDGE_PROVIDER_UNAVAILABLE BRIDGE_TRANSACTION_NOT_FOUND BRIDGE_SESSION_NOT_FOUND TRANSFER_PLAN_UNSUPPORTED UNAUTHORIZED SCOPE_MISSING PLAN_REQUIRED INSUFFICIENT_CREDITS RATE_LIMITED GEO_BLOCKED VENUE_REGION_BLOCKED IDEMPOTENCY_KEY_REQUIRED RESERVED_IDEMPOTENCY_KEY IDEMPOTENCY_CONFLICT ARTIFACT_VERSION_CONFLICT SPEND_CAP_EXCEEDED RESERVATION_REQUIRED RESERVATION_CONSUMED RESERVATION_MISMATCH RESERVATION_EXPIRED RESERVATION_RELEASED ARTIFACT_BOUNDS_VIOLATION ARTIFACT_INTEGRITY_MISMATCH CLAIM_GENERATION_UNDETERMINED VENUE_NOT_SUPPORTED EXECUTION_NOT_FOUND EXECUTION_TERMINAL CONDITIONAL_NOT_FOUND CONDITIONAL_NOT_ARMED CONDITIONAL_ATTEMPT_CONFLICT CONDITIONAL_ARMED CONDITIONAL_CLOSED_NOT_SUBMITTED OCO_GROUP_CLOSED HOSTED_FIRE_NOT_ELIGIBLE HOSTED_FIRE_UNAVAILABLE NOT_IMPLEMENTED VENUE_CREDENTIAL_REJECTED VENUE_CREDENTIAL_BREAKER_OPEN GEMINI_TIME_NONCE_REQUIRED GEMINI_HEARTBEAT_KEY_UNSUPPORTED VENUE_RELAY_FAILED EXEC_UNAVAILABLE RAIN_INVALID_OPTION RAIN_INVALID_SIDE RAIN_INVALID_PRICE RAIN_INVALID_AMOUNT RAIN_SLIPPAGE_REQUIRED RAIN_INVALID_DEADLINE RAIN_PHASE_NOT_OPEN RAIN_ORDER_LIMIT_REACHED RAIN_POOL_SAFETY_CHECK_FAILED PLATFORM_UNAVAILABLE PACK_NOT_FOUND BILLING_UNAVAILABLE BILLING_CUSTOMER_REQUIRED PLAN_NOT_FOUND SUBSCRIPTION_EXISTS WEBHOOK_NOT_FOUND INVALID_SIGNATURE PAPER_INSUFFICIENT_CASH PAPER_POSITION_TOO_SMALL PAPER_MARKET_CLOSED PAPER_WORKING_ORDER_CAP PAPER_NO_LIVE_BOOK PAPER_ORDER_NOT_FOUND PAPER_ORDER_NOT_OPEN SQL_QUERY_FAILED SQL_TIMEOUT FEED_NOT_FOUND FEEDS_UNAVAILABLE FEED_UPSTREAM MATCHES_UNAVAILABLE ARBITRAGE_UNAVAILABLE
retryable
required
boolean
requestId
required

Always present on errors; quote this id when reporting a failed request.

string
exchange

Present only when a venue error is attributed to a specific exchange.

string
Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR"
}
}

ARBITRAGE_UNAVAILABLE (dark lane) / CATALOG_UNAVAILABLE (store outage)

Media typeapplication/json
object
success
required
boolean
error
required
object
message
required
string
code
required
string
Allowed values: VALIDATION_ERROR NOT_SUPPORTED ACCOUNTS_UNSUPPORTED VENUE_NOT_AVAILABLE EXCHANGE_NOT_AVAILABLE MARKET_NOT_FOUND EVENT_NOT_FOUND TRADERS_UNSUPPORTED TRADER_NOT_FOUND CLUSTER_NOT_FOUND OUTCOME_NOT_FOUND SNAPSHOT_NOT_FOUND CATALOG_UNAVAILABLE CATALOG_QUERY_TOO_BROAD HISTORY_UNAVAILABLE SPORTS_SCREEN_UNAVAILABLE SPORTS_FIXTURE_NOT_FOUND SPORTS_BLOCK_NOT_FOUND ROUTE_NOT_FOUND INTERNAL AUTHENTICATION_ERROR PERMISSION_DENIED RATE_LIMIT_EXCEEDED NETWORK_ERROR NOT_FOUND BAD_REQUEST BRIDGE_UNSUPPORTED BRIDGE_NO_ROUTE BRIDGE_UPSTREAM BRIDGE_PROVIDER_UNAVAILABLE BRIDGE_TRANSACTION_NOT_FOUND BRIDGE_SESSION_NOT_FOUND TRANSFER_PLAN_UNSUPPORTED UNAUTHORIZED SCOPE_MISSING PLAN_REQUIRED INSUFFICIENT_CREDITS RATE_LIMITED GEO_BLOCKED VENUE_REGION_BLOCKED IDEMPOTENCY_KEY_REQUIRED RESERVED_IDEMPOTENCY_KEY IDEMPOTENCY_CONFLICT ARTIFACT_VERSION_CONFLICT SPEND_CAP_EXCEEDED RESERVATION_REQUIRED RESERVATION_CONSUMED RESERVATION_MISMATCH RESERVATION_EXPIRED RESERVATION_RELEASED ARTIFACT_BOUNDS_VIOLATION ARTIFACT_INTEGRITY_MISMATCH CLAIM_GENERATION_UNDETERMINED VENUE_NOT_SUPPORTED EXECUTION_NOT_FOUND EXECUTION_TERMINAL CONDITIONAL_NOT_FOUND CONDITIONAL_NOT_ARMED CONDITIONAL_ATTEMPT_CONFLICT CONDITIONAL_ARMED CONDITIONAL_CLOSED_NOT_SUBMITTED OCO_GROUP_CLOSED HOSTED_FIRE_NOT_ELIGIBLE HOSTED_FIRE_UNAVAILABLE NOT_IMPLEMENTED VENUE_CREDENTIAL_REJECTED VENUE_CREDENTIAL_BREAKER_OPEN GEMINI_TIME_NONCE_REQUIRED GEMINI_HEARTBEAT_KEY_UNSUPPORTED VENUE_RELAY_FAILED EXEC_UNAVAILABLE RAIN_INVALID_OPTION RAIN_INVALID_SIDE RAIN_INVALID_PRICE RAIN_INVALID_AMOUNT RAIN_SLIPPAGE_REQUIRED RAIN_INVALID_DEADLINE RAIN_PHASE_NOT_OPEN RAIN_ORDER_LIMIT_REACHED RAIN_POOL_SAFETY_CHECK_FAILED PLATFORM_UNAVAILABLE PACK_NOT_FOUND BILLING_UNAVAILABLE BILLING_CUSTOMER_REQUIRED PLAN_NOT_FOUND SUBSCRIPTION_EXISTS WEBHOOK_NOT_FOUND INVALID_SIGNATURE PAPER_INSUFFICIENT_CASH PAPER_POSITION_TOO_SMALL PAPER_MARKET_CLOSED PAPER_WORKING_ORDER_CAP PAPER_NO_LIVE_BOOK PAPER_ORDER_NOT_FOUND PAPER_ORDER_NOT_OPEN SQL_QUERY_FAILED SQL_TIMEOUT FEED_NOT_FOUND FEEDS_UNAVAILABLE FEED_UPSTREAM MATCHES_UNAVAILABLE ARBITRAGE_UNAVAILABLE
retryable
required
boolean
requestId
required

Always present on errors; quote this id when reporting a failed request.

string
exchange

Present only when a venue error is attributed to a specific exchange.

string
Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR"
}
}