Mapping OpticOdds IDs to ProphetX IDs
Translate OpticOdds provider IDs to ProphetX IDs, and the reverse, for sport events, players, competitors, markets, and strikes.
If you already integrate with OpticOdds for sports data, GET /v4/mm/get_mappings translates their IDs into ProphetX IDs — or the other direction — so you don't need to maintain your own mapping table. provider is the only query parameter that names the data source, and opticodds is the only value it accepts today; more providers may be added later.
Request
GET /partner/v4/mm/get_mappings
| Param | Required | Notes |
|---|---|---|
provider | Y | Data provider. Only opticodds today. |
entity_type | Y | sport_event, player, competitor, market, or strike. |
event_id | Required for market/strike, not allowed otherwise | The ProphetX event ID to scope the lookup to. |
provider_ids | N | Comma-separated OpticOdds IDs, up to 100 unique (duplicates are dropped before the cap is checked). |
prophetx_ids | N | Comma-separated ProphetX IDs, up to 100 unique. Not valid for entity_type=strike — use prophetx_strike_ids instead. |
prophetx_strike_ids | N | Comma-separated ProphetX strike IDs, up to 100 unique. Only valid for entity_type=strike. |
limit | N | Default 20, max 1000. |
next_cursor | N | From the previous response's next_cursor — treat it as opaque. |
If you set both a provider_ids filter and a prophetx_ids (or prophetx_strike_ids) filter on the same call, a mapping must match both lists, not either — the filters are ANDed together.
Results are ordered by provider_id, descending.
Response
{
"data": {
"mappings": [
{
"provider": "opticodds",
"entity_type": "market",
"provider_id": "point_spread",
"prophetx_id": 219,
"event_id": 10078829
}
],
"next_cursor": "<opaque string, omitted on the last page>"
}
}prophetx_id is set for sport_event, player, competitor, and market. A strike has no single integer ID — use prophetx_strike_id instead, which matches the strike_id you already see on market selections.
Markets and strikes are only mapped for events that actually came from the given provider, and only once that market or strike has a provider key. Don't expect a mapping for every ProphetX market — only the ones ProphetX actually sourced from OpticOdds.
What provider_id and the ProphetX ID mean, by entity_type
provider_id and the ProphetX ID mean, by entity_typeentity_type | The ProphetX side (prophetx_id / prophetx_strike_id) | The OpticOdds side (provider_id) |
|---|---|---|
sport_event | the sport event ID | the OpticOdds fixture ID |
player | the player ID returned by get_players | the OpticOdds player ID |
competitor | the competitor ID — the same value as competitor_id on market selections | the OpticOdds team ID, or, in individual sports such as tennis, the OpticOdds player ID |
market | the market ID within the event given by event_id | depends on the market shape — see below |
strike | the strike_id on market selections (via prophetx_strike_id) | <fixture_id>:<market provider_id>:<outcome>:<points> — see below |
Market provider_id formats
provider_id formatsOne OpticOdds market can become more than one ProphetX market, so the format depends on the shape:
| Market shape | provider_id format | Example |
|---|---|---|
| A plain main market | the OpticOdds market_id directly | point_spread |
| A player or team prop | <OpticOdds player/team ID>:<OpticOdds market_id>:<ProphetX sub type> | <player_id>:player_points:player_total_points |
| 3-way moneyline (splits into three separate ProphetX markets) | <home team ID>:<market_id>, <away team ID>:<market_id>, draw:<market_id> | draw:moneyline_3-way |
| Tennis "player to win a set" (one market per player) | <OpticOdds competitor ID>:player_to_win_a_set | <competitor_id>:player_to_win_a_set |
Strike provider_id format
provider_id format<fixture_id>:<market provider_id>:<outcome>:<points>
outcomeis lowercase:over,under,home,away,yes, orno.pointsis the strike, to one decimal. A market with no strike value — moneyline, or a yes/no market — uses0.0.
Examples:
<fixture_id>:point_spread:home:-3.5<fixture_id>:draw:moneyline_3-way:yes:0.0
Pagination
Pass the next_cursor from a response back in as the next_cursor query param to fetch the next page. The last page has no next_cursor.
Updated 16 days ago
