Skip to main content
The external arbitrage endpoint delivers the same scored opportunity data as the session-auth endpoint, but it authenticates with an API key instead of a JWT. This design allows trading bots, automated pipelines, and server-side integrations to fetch opportunities without maintaining a browser session. Every request is logged for usage tracking, and consumption is visible in your Developer Console.

Endpoint

GET https://api.predexy.com/api/v1/external/arbitrage/opportunities

Authentication

Pass your API key in the X-API-Key header. Keys are prefixed with pdx_ and can be created in the Developer Console.
X-API-Key: pdx_a1b2c3d4e5f6...
Your API key is shown only once at creation. Store it in a secrets manager or environment variable — it cannot be retrieved again through the API.

Rate limits

API key requests are subject to the paid-tier rate limit:
TierRequests / minBurst
API key60050
If you exceed this limit, the API returns 429 RATE_LIMITED with X-RateLimit-Reset indicating when the window resets.

Query parameters

min_score
number
default:"40"
Minimum arbitrage score to include. Range 0–100.
classification
string
Filter by tier: actionable, informational, or noise.
category
string
Filter by market category, e.g. crypto, politics.
status
string
Filter by lifecycle status: active, stale, or resolved.
guarantee
string
Filter by policy guarantee class: STRICT or QUASI.
risk_gate
string
Filter by runtime risk gate: allowed, degraded, or blocked.
limit
number
default:"50"
Maximum items to return (1–200).

Example request

cURL
curl "https://api.predexy.com/api/v1/external/arbitrage/opportunities?classification=actionable&min_score=70&limit=20" \
  -H "X-API-Key: pdx_a1b2c3d4e5f6..."

Response

The response shape is identical to the session-auth endpoint. data.opportunities is an array of ArbitrageOpportunity objects, and data.stats provides aggregate scan statistics. See ArbitrageOpportunity schema for the full field reference.
{
  "data": {
    "opportunities": [
      {
        "id": "arb_poly_limit_abc123",
        "canonical_question_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "question_title": "Will BTC reach $100k by 2026?",
        "question_slug": "will-btc-reach-100k-by-2026",
        "category": "crypto",
        "end_time": "2026-01-01T00:00:00Z",
        "type": "direct",
        "buy_platform": { "id": "...", "slug": "limitless", "name": "Limitless" },
        "sell_platform": { "id": "...", "slug": "polymarket", "name": "Polymarket" },
        "buy_price": 0.58,
        "sell_price": 0.65,
        "spread": 0.07,
        "spread_bps": 700,
        "net_spread": 0.03,
        "estimated_profit": 3.00,
        "arbitrage_score": 78,
        "classification": "actionable",
        "liquidity": 15000.00,
        "volume24h": 52000.00,
        "status": "active",
        "guarantee": "STRICT",
        "risk_gate_state": "allowed",
        "risk_gate_reason": null,
        "detected_at": "2026-04-25T14:22:00Z",
        "fees": {
          "buy_fee": 0.02,
          "sell_fee": 0.02,
          "total_fees": 0.04
        }
      }
    ],
    "stats": {
      "total_opportunities": 14,
      "actionable_count": 5,
      "informational_count": 9,
      "avg_spread": 0.031,
      "max_profit": 6.40,
      "scanned_at": "2026-04-25T14:25:00Z"
    }
  },
  "meta": {
    "count": 14,
    "offset": 0,
    "limit": 20
  }
}

Usage tracking

Every request to this endpoint is logged to your account’s usage record. You can inspect call counts, latency, and per-endpoint breakdowns in the Developer Console using the usage stats endpoints.
For high-frequency trading bots, filter aggressively at the query parameter level rather than in your application code. Requesting only classification=actionable&risk_gate=allowed&status=active dramatically reduces response size and parse time, and keeps you within rate limits for more polling cycles per minute.