Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/v1/arbitrage/opportunities | List opportunities with filters |
GET | /api/v1/arbitrage/opportunities/{id} | Single opportunity by ID |
GET | /api/v1/arbitrage/opportunities/{id}/certificate | Governance certificate bundle |
GET | /api/v1/arbitrage/opportunities/{id}/execution-advisory | Execution advisory |
GET | /api/v1/arbitrage/opportunities/{id}/policy-decision | Policy decision record |
Authentication
All endpoints require a session JWT:List opportunities
Query parameters
Minimum arbitrage score to include. Range 0–100. The default of 40 excludes noise-tier opportunities.
Filter by classification tier. One of
actionable, informational, or noise.actionable— Score ≥ 70, positive net spread, liquidity above $500.informational— Score 40–69 or low liquidity. Worth monitoring but not immediately executable.noise— Score below 40. Likely ephemeral or uneconomical.
Filter by market category, e.g.
crypto, politics, sports.Filter by lifecycle status:
active, stale, or resolved.Filter by policy guarantee class:
STRICT or QUASI. STRICT indicates the opportunity passed all policy checks cleanly.Filter by runtime risk gate state:
allowed, degraded, or blocked.Maximum items to return (1–200).
Example request
cURL
Response structure
The response contains adata object with two keys:
data.opportunities— array ofArbitrageOpportunityobjects.data.stats—ScanStatsfor the filtered result set.data.stats_all—ScanStatsfor the unfiltered result set (useful for dashboard summaries).meta— pagination state plussource(database,cache, orempty) and adisclaimernote about guarantee interpretation.
ArbitrageOpportunity schema
Unique opportunity identifier, e.g.
"arb_poly_limit_abc123".UUID of the canonical question this opportunity belongs to.
Human-readable question text, e.g.
"Will BTC reach $100k by 2026?".URL-safe question slug.
Market category.
ISO 8601 market expiry timestamp.
null for perpetual markets.Arbitrage strategy:
direct (same outcome priced differently across platforms) or dutch_book (buy Yes on one platform and No on another for a combined cost below $1).Platform where you buy the outcome. Contains
id, slug, and name.Platform where you sell (or buy the opposite outcome). Contains
id, slug, and name.Price to buy the outcome, expressed as a probability from 0 to 1.
Price to sell the outcome on the other platform, from 0 to 1.
Raw price spread (
sell_price – buy_price).Spread in basis points (1 bps = 0.01%).
Spread after deducting platform fees from both legs.
Estimated profit per $100 deployed, in USD.
Annualized return based on time remaining to market expiry.
Multi-factor quality score from 0 to 100. Combines execution quality (spread, fees), market quality (liquidity, volume), and temporal quality (time to expiry).
actionable, informational, or noise.Combined available liquidity across both legs in USD.
Combined 24-hour trading volume across both legs in USD.
Number of platforms listing this question.
ISO 8601 timestamp when this opportunity was first detected.
Last timestamp when this opportunity was observed in a scan cycle.
Lifecycle state:
active, stale, or resolved.Fee breakdown for both legs.
Estimated probability of execution fill, from 0 to 1.
Estimated slippage in basis points.
Net expected edge after accounting for fill probability and slippage.
Advisory position size in USD.
Advisory portfolio allocation weight from 0 to 1.
Runtime risk gate:
allowed, degraded, or blocked.Machine-readable reason when the gate is
degraded or blocked. null when allowed.Policy guarantee class:
STRICT or QUASI.Certificate identifier when governance evidence exists.
Freshness metadata for this opportunity.
Per-dimension quality scores that feed into the final
arbitrage_score.Get single opportunity
Path parameters
Opportunity identifier, e.g.
arb_poly_limit_abc123.Example request
cURL
Get certificate
guarantee class. Only opportunities with a non-null certificate_id have a certificate.
