Market Data Integration

Retrieve tournaments, sport events, markets, prices, and available quantities for a market-data or price-display application.

Retrieve tournaments, sport events, and live markets from ProphetX for your market-data or price-display application.

The Market Data API is read-only and uses JSON over HTTPS. Use it to retrieve the tournaments, events, markets, prices, and available quantities you need for your application.


Table of contents

  1. What you'll be working with
  2. Environments
  3. Authentication
  4. Endpoints
  5. Response data reference
  6. Errors
  7. A full walkthrough
  8. Quick reference card

1. What you'll be working with

Four endpoints, all returning JSON wrapped in a {"data": …} envelope:

What you wantEndpointMethod
Browse tournaments/affiliate/get_tournamentsGET
Browse sport events/affiliate/get_sport_eventsGET
Get markets for one event/{version}/affiliate/get_marketsGET
Get markets for many events/{version}/affiliate/get_multiple_marketsGET

The typical flow is tournaments → events → markets: pick a tournament, list its events, then pull live markets and prices for the events you care about.


2. Environments

We run two environments. Start in sandbox while you're integrating, then flip to production when you're ready to go live.

EnvironmentBase URLUse it for
Sandboxhttps://api.sandbox.prophetx.dev/partnerDevelopment and testing. Same API surface, isolated data.
Productionhttps://cash.api.prophetx.co/partnerLive odds and real data.

Every endpoint path below is relative to the base URL.


3. Authentication

Contact our Market Data team at [email protected] to be issued an affiliate API key.

You'll get a single API key. Send it as the Authorization header on every request. No Bearer prefix — just the raw key.

GET /affiliate/get_tournaments HTTP/1.1
Host: api.sandbox.prophetx.dev
Authorization: your-affiliate-api-key
Accept: application/json

4. Endpoints

4.1 List tournaments

GET /affiliate/get_tournaments

Returns all tournaments available on the platform.

Query parameters

ParamTypeRequiredWhat it does
has_active_eventsboolnoWhen true, only return tournaments that currently have active sport events. Skip it (or false) to see everything.

Example

curl -H "Authorization: $API_KEY" \
     "https://api.sandbox.prophetx.dev/partner/affiliate/get_tournaments?has_active_events=true"

Response

{
  "data": {
    "tournaments": [
      {
        "id": 123,
        "name": "NFL — Regular Season",
        "sport": { "id": 1, "name": "Football" },
        "category": { "id": 10, "name": "USA", "countryCode": "US" },
        "updated_at": 1735689600000000000
      }
    ]
  }
}

4.2 List sport events

GET /affiliate/get_sport_events

Returns sport events. Filter by tournament or by a specific list of event IDs — or pass no filter to get everything.

Query parameters

ParamTypeRequiredWhat it does
tournament_idintnoOnly events belonging to this tournament.
event_idsint[]noOnly the specific events you ask for. Repeat the parameter, e.g. event_ids=101&event_ids=102.

Example

curl -H "Authorization: $API_KEY" \
     "https://api.sandbox.prophetx.dev/partner/affiliate/get_sport_events?tournament_id=123"

Response

{
  "data": {
    "sport_events": [
      {
        "event_id": 101,
        "tournament_id": 123,
        "tournament_name": "NFL — Regular Season",
        "name": "Patriots vs. Jets",
        "sport_name": "Football",
        "scheduled": "2026-06-01T17:00:00Z",
        "status": "scheduled",
        "competitors": [
          { "id": 11, "name": "Patriots", "side": "home" },
          { "id": 20, "name": "Jets", "side": "away" }
        ]
      }
    ]
  }
}

scheduled is ISO 8601 in UTC.


4.3 Get markets for an event

GET /{version}/affiliate/get_markets

Returns all markets for a single event, including moneylines, spreads, totals, and available selections with current prices and quantities.

API versions

The path is version-prefixed. Use v4 unless you have a reason not to — it returns CFTC-compliant field names (price, strike, strike_id, quantity).

VersionPathStatus
v1/affiliate/get_marketsDeprecated — please migrate.
v2/v2/affiliate/get_marketsStable.
v3/v3/affiliate/get_marketsStable.
v4/v4/affiliate/get_marketsLatest — recommended.

Query parameters

ParamTypeRequiredWhat it does
event_idintyesThe event to fetch markets for.
market_typesstringnoComma-separated allowlist, e.g. moneyline,spread,total. Only markets of these types are returned.
min_liquidityfloatnoOnly return markets at or above this liquidity threshold. Useful for filtering out thinly-priced lines.

Example

curl -H "Authorization: $API_KEY" \
     "https://api.sandbox.prophetx.dev/partner/v4/affiliate/get_markets?event_id=101&market_types=moneyline,spread&min_liquidity=100"

Response (v4)

{
  "data": [
    {
      "id": 555,
      "name": "Moneyline",
      "display_name": "Moneyline",
      "type": "moneyline",
      "category_name": "Game Lines",
      "sub_type": "moneyline",
      "selections": [
        [
          { "outcome_id": 1, "name": "Patriots", "price": -110, "strike": null, "strike_id": "line_1", "quantity": 2100.0 }
        ],
        [
          { "outcome_id": 2, "name": "Jets", "price": 105, "strike": null, "strike_id": "line_2", "quantity": 2150.0 }
        ]
      ]
    }
  ]
}

Note on selections: In v3 and v4, each entry inside selections is itself a list (selections grouped by side/team). In v1 and v2, selections is a flat array of objects. This shape difference is independent of the field-naming difference below.

price uses American odds (e.g. +120, -150), the same format across v1 through v4. strike is the point spread or total (null on moneyline markets). Preserve the literal strike_id field when you use it in API requests or responses.

How to think about sides. ProphetX doesn't have a shared buy/sell order book per market. Every outcome is its own independent, buy-only instrument, orders are always a buy against one specific outcome, never a sell against the other. Buying "Patriots" and buying "Jets" are two separate orders against two separate instruments, not two sides of the same book. strike_id is that instrument identifier, it's what you pass into order placement (the REST strike_id param, or Symbol on FIX). outcome_id is useful for display and grouping, but strike_id is what you actually trade against.


4.4 Get markets for multiple events

GET /{version}/affiliate/get_multiple_markets

Same data as get_markets, but batched across many events in a single call. Great for refreshing prices on a list of upcoming games.

API versions — same scheme as get_markets:

VersionPath
v1/affiliate/get_multiple_markets
v2/v2/affiliate/get_multiple_markets
v3/v3/affiliate/get_multiple_markets
v4/v4/affiliate/get_multiple_markets

Query parameters

ParamTypeRequiredWhat it does
event_idsint[]yesEvents to fetch markets for. Repeat the parameter for each ID.

Example

curl -H "Authorization: $API_KEY" \
     "https://api.sandbox.prophetx.dev/partner/v4/affiliate/get_multiple_markets?event_ids=101&event_ids=102&event_ids=103"

Response — typical shape

{
  "data": {
    "101": [ { /* market */ }, { /* market */ } ],
    "102": [ { /* market */ } ],
    "103": []
  }
}

Each market object has the same fields as in §4.3.

Heads up: A small number of responses may come back as a flat list of markets rather than a keyed object. If you're parsing defensively, check the type and, in the flat-list case, group by each market's event_id field.


5. Response data reference

A complete field-by-field reference for everything you'll receive.

Tournament

FieldTypeDescription
idintTournament ID. Use this to filter events.
namestringDisplay name, e.g. "NFL — Regular Season".
sportobject | nullThe sport, as { id, name }.
categoryobject | nullThe category/region, as { id, name, countryCode }.
updated_atint (nanoseconds)Last-updated timestamp.

Sport event

FieldTypeDescription
event_idintEvent ID. Use this with the markets endpoints.
tournament_idint | nullParent tournament.
tournament_namestring | nullParent tournament's display name.
namestring | nullDisplay name.
sport_namestring | nullThe sport's display name.
scheduledstring | nullISO 8601 UTC scheduled start time.
statusstring | nullLifecycle status, e.g. "scheduled", "live", "finished".
competitorsarrayEach entry has id, name, side ("home"/"away"), and optionally display_name, abbreviation, country.

Market

FieldTypeDescription
idintMarket ID.
namestringMarket name.
display_namestring | nullDisplay name, if different from name.
typestring | nulle.g. "moneyline", "spread", "total", "sup_moneyline".
category_namestring | nullThe market's category, e.g. "Game Lines".
sub_typestring | nullThe market's sub-type.
strikefloat | nullMarket-level point spread or total, if applicable.
selectionsarrayAvailable outcomes. See note in §4.3 about v1/v2 vs v3/v4 shape.

Selection

FieldTypeDescription
outcome_idint | nullSelection outcome ID. Always present; useful for display and grouping.
namestring | nullDisplay label, e.g. "Patriots", "Over".
competitor_idint | nullThe competitor this selection belongs to, if any. Null on markets with no single team (Yes/No, Over/Under, props).
strikefloat | nullPoint spread or total. null for moneyline.
strike_idstring | nullThe tradeable instrument identifier. This is what you pass to place an order, not outcome_id. See "How to think about sides" in §4.3.
pricefloat | nullAmerican odds, e.g. 120, -150. Same format across all API versions.
quantityfloat | nullAvailable quantity for this specific selection.

6. Errors

The API uses standard HTTP status codes. Error bodies are JSON when available.

StatusWhat it meansWhat to do
200Success.—
400Bad request — usually a malformed or missing parameter.Check your query string.
401Unauthorized — bad key or missing header.Verify your Authorization header.
404The resource (e.g. an event_id) doesn't exist.Double-check the ID.
429Rate-limited.Back off and retry with exponential delay.
5xxServer-side issue.Retry with backoff. If it persists, reach out to your ProphetX contact.

7. A full walkthrough

The typical "fetch live prices for a slate of games" flow, in three calls:

  ┌───────────────────────┐    1. List active tournaments
  │   get_tournaments     │       → pick the ones you care about
  └──────────┬────────────┘
             │
             ▼
  ┌───────────────────────┐    2. List events in those tournaments
  │   get_sport_events    │       → collect event_ids
  └──────────┬────────────┘
             │
             ▼
  ┌───────────────────────┐    3. Batch-fetch live markets & prices
  │ get_multiple_markets  │       → render prices in your product
  └───────────────────────┘

Step 1 — active tournaments:

curl -H "Authorization: $API_KEY" \
     "https://api.sandbox.prophetx.dev/partner/affiliate/get_tournaments?has_active_events=true"

Step 2 — events for the tournament(s) you picked:

curl -H "Authorization: $API_KEY" \
     "https://api.sandbox.prophetx.dev/partner/affiliate/get_sport_events?tournament_id=123"

Step 3 — markets for a batch of events:

curl -H "Authorization: $API_KEY" \
     "https://api.sandbox.prophetx.dev/partner/v4/affiliate/get_multiple_markets?event_ids=101&event_ids=102&event_ids=103"

For high-frequency price refreshes, re-run step 3 on whatever cadence your product needs — and keep an eye on rate limits.


8. Quick reference card

Base URL (sandbox)     : https://api.sandbox.prophetx.dev/partner
Base URL (production)  : https://cash.api.prophetx.co/partner
Auth header            : Authorization: <api-key>     (no "Bearer " prefix)

GET  /affiliate/get_tournaments                   [?has_active_events]
GET  /affiliate/get_sport_events                  [?tournament_id] [?event_ids]
GET  /{v1|v2|v3|v4}/affiliate/get_markets            ?event_id [&market_types] [&min_liquidity]
GET  /{v1|v2|v3|v4}/affiliate/get_multiple_markets   ?event_ids

Need access, a higher rate limit, or a feature that isn't covered here? Get in touch with your ProphetX contact — we're happy to help you ship.


Did this page help you?