curl --request GET \
--url https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}import requests
url = "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"eventId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"eventSlug": "fifa-world-cup-2026-winner",
"homeCountry": "<string>",
"awayCountry": "<string>",
"tags": [
{
"slug": "<string>",
"name": "<string>"
}
],
"symbol": "FRIENDLI-LIT-AND-MW-20260930-LIT",
"slug": "friendli-lithuania-andorra-2026-09-30-lit",
"title": "<string>",
"question": "<string>",
"groupItemTitle": "<string>",
"groupItemSubtitle": "<string>",
"groupItemImageUrl": "<string>",
"conditionId": "<string>",
"questionId": "<string>",
"yesTokenId": "<string>",
"noTokenId": "<string>",
"outcomes": [
{
"outcomeIndex": 123,
"label": "<string>",
"tokenId": "<string>",
"noTokenId": "<string>",
"conditionId": "<string>"
}
],
"outcomeCount": 2,
"outcomeLabels": [
"YES",
"NO"
],
"sourceSelections": [
{
"outcomeLabel": "<string>",
"outcomeIndex": 123,
"providerOutcomeId": "MATCH_WINNER:side=home",
"marketType": "<string>",
"selector": {
"side": "home"
},
"providerOutcomeName": "<string>"
}
],
"outcomePrices": [
"0.610000",
"0.420000"
],
"chances": [
"0.595000",
"0.405000"
],
"status": "OPEN",
"tradable": true,
"tradingMode": "open",
"notTradableReason": "closed_at_cutoff",
"currentReviewRound": 1,
"feeTakerBps": 600,
"executionDelayMs": 0,
"liveTick": "0.05",
"line": 8.5,
"lineGroup": {
"id": "CRICKET_TEAM_TOTAL_RUNS:home",
"title": "Jamaica Kingsmen Total Runs",
"kind": "total",
"order": 0
},
"kickoff": "2023-11-07T05:31:56Z",
"tradingWindow": {
"preMarketStartsAt": "<string>",
"opensAt": "<string>",
"closesAt": "<string>"
},
"lifecycle": {
"closedAt": "<string>",
"pausedAt": "<string>",
"resolvedAt": "<string>",
"voidedAt": "<string>"
},
"resolutionWindowHours": 2,
"resolution": {
"proposedAt": "<string>",
"challengeWindowClosesAt": "<string>",
"disputedAt": "<string>",
"proposedOutcome": "<string>",
"proposedOutcomeIndex": 123,
"resolvedOutcome": "<string>",
"resolvedOutcomeIndex": 123,
"disputeBondUsdcRaw": "<string>",
"disputeReason": "<string>",
"resolutionKind": "WINNER",
"proposalKind": "WINNER",
"proposedFairPriceSplit": {
"yes": "<string>",
"no": "<string>"
}
},
"payoutNumerators": [
1,
0
],
"officialDataSource": "lsports",
"sourceMatchId": "<string>",
"additionalSources": [
{
"provider": "api-football",
"externalEventId": "12345",
"scope": "FIXTURE"
}
],
"resolutionCriteria": "<string>",
"prediction": {
"provider": "<string>",
"questionId": "<string>",
"question": "<string>",
"kind": "<string>",
"version": 1,
"line": "<string>",
"rulesText": "<string>",
"threshold": {
"comparator": "<string>",
"value": "<string>",
"source": "<string>",
"upperValue": "<string>",
"unit": "<string>"
},
"endsAt": "2023-11-07T05:31:56Z",
"capturedAt": "2023-11-07T05:31:56Z"
},
"crypto": {
"productType": "<string>",
"direction": "ABOVE",
"targetPrice": "<string>",
"instrumentId": "<string>",
"benchmarkInstrumentId": "<string>",
"deadlineAt": "<string>",
"month": "<string>",
"coinId": "<string>",
"thresholdUsd": "<string>",
"observationStart": "<string>",
"deadline": "<string>",
"sourcePolicyVersion": 123
},
"cryptoWindow": {
"seriesId": "<string>",
"windowStartAt": "<string>",
"windowEndAt": "<string>",
"openPrice": "<string>",
"streamDecimals": 123,
"openPriceIsFinal": true,
"closePrice": "<string>",
"closePriceIsFinal": true,
"outcome": "UP"
},
"negRiskEligible": true,
"negRiskMarketId": "<string>",
"negRiskQuestionIndex": 123,
"isNewMarketType": true,
"marketType": "MATCH_WINNER",
"sport": "soccer",
"vertical": "football",
"volume24h": "1234.50",
"totalVolume": "98765.00",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"live": {
"state": "<string>",
"minute": 123,
"addedMinute": 123,
"score": {
"home": 123,
"away": 123
},
"scoreText": "<string>",
"inPlay": true,
"provider": "<string>",
"asOf": "<string>",
"significantEvent": "<string>",
"penaltyScore": {
"home": 123,
"away": 123
},
"penaltyScoreText": "<string>",
"sport": "<string>",
"setScores": "160-0 0-164",
"homeCountry": "<string>",
"awayCountry": "<string>",
"inningHalf": "top",
"balls": 123,
"strikes": 123,
"outs": 123,
"bases": [
true
],
"periodClock": "07:27"
},
"probabilityChange": {
"window": "24h",
"unit": "percentage_points",
"asOf": "2023-11-07T05:31:56Z",
"outcomes": [
{
"outcomeIndex": 0,
"change": 4,
"baselineAt": "2023-11-07T05:31:56Z"
}
]
},
"tradeCount": 123,
"totalShares": "<string>"
}Fetch a single market by CTF conditionId
Resolves a market from a CTF conditionId (0x bytes32). Binary markets carry it at the market level; N-way markets carry it per outcome — both are matched. Resolves any public lifecycle state, like by-token.
curl --request GET \
--url https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}import requests
url = "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/by-condition/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"eventId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"eventSlug": "fifa-world-cup-2026-winner",
"homeCountry": "<string>",
"awayCountry": "<string>",
"tags": [
{
"slug": "<string>",
"name": "<string>"
}
],
"symbol": "FRIENDLI-LIT-AND-MW-20260930-LIT",
"slug": "friendli-lithuania-andorra-2026-09-30-lit",
"title": "<string>",
"question": "<string>",
"groupItemTitle": "<string>",
"groupItemSubtitle": "<string>",
"groupItemImageUrl": "<string>",
"conditionId": "<string>",
"questionId": "<string>",
"yesTokenId": "<string>",
"noTokenId": "<string>",
"outcomes": [
{
"outcomeIndex": 123,
"label": "<string>",
"tokenId": "<string>",
"noTokenId": "<string>",
"conditionId": "<string>"
}
],
"outcomeCount": 2,
"outcomeLabels": [
"YES",
"NO"
],
"sourceSelections": [
{
"outcomeLabel": "<string>",
"outcomeIndex": 123,
"providerOutcomeId": "MATCH_WINNER:side=home",
"marketType": "<string>",
"selector": {
"side": "home"
},
"providerOutcomeName": "<string>"
}
],
"outcomePrices": [
"0.610000",
"0.420000"
],
"chances": [
"0.595000",
"0.405000"
],
"status": "OPEN",
"tradable": true,
"tradingMode": "open",
"notTradableReason": "closed_at_cutoff",
"currentReviewRound": 1,
"feeTakerBps": 600,
"executionDelayMs": 0,
"liveTick": "0.05",
"line": 8.5,
"lineGroup": {
"id": "CRICKET_TEAM_TOTAL_RUNS:home",
"title": "Jamaica Kingsmen Total Runs",
"kind": "total",
"order": 0
},
"kickoff": "2023-11-07T05:31:56Z",
"tradingWindow": {
"preMarketStartsAt": "<string>",
"opensAt": "<string>",
"closesAt": "<string>"
},
"lifecycle": {
"closedAt": "<string>",
"pausedAt": "<string>",
"resolvedAt": "<string>",
"voidedAt": "<string>"
},
"resolutionWindowHours": 2,
"resolution": {
"proposedAt": "<string>",
"challengeWindowClosesAt": "<string>",
"disputedAt": "<string>",
"proposedOutcome": "<string>",
"proposedOutcomeIndex": 123,
"resolvedOutcome": "<string>",
"resolvedOutcomeIndex": 123,
"disputeBondUsdcRaw": "<string>",
"disputeReason": "<string>",
"resolutionKind": "WINNER",
"proposalKind": "WINNER",
"proposedFairPriceSplit": {
"yes": "<string>",
"no": "<string>"
}
},
"payoutNumerators": [
1,
0
],
"officialDataSource": "lsports",
"sourceMatchId": "<string>",
"additionalSources": [
{
"provider": "api-football",
"externalEventId": "12345",
"scope": "FIXTURE"
}
],
"resolutionCriteria": "<string>",
"prediction": {
"provider": "<string>",
"questionId": "<string>",
"question": "<string>",
"kind": "<string>",
"version": 1,
"line": "<string>",
"rulesText": "<string>",
"threshold": {
"comparator": "<string>",
"value": "<string>",
"source": "<string>",
"upperValue": "<string>",
"unit": "<string>"
},
"endsAt": "2023-11-07T05:31:56Z",
"capturedAt": "2023-11-07T05:31:56Z"
},
"crypto": {
"productType": "<string>",
"direction": "ABOVE",
"targetPrice": "<string>",
"instrumentId": "<string>",
"benchmarkInstrumentId": "<string>",
"deadlineAt": "<string>",
"month": "<string>",
"coinId": "<string>",
"thresholdUsd": "<string>",
"observationStart": "<string>",
"deadline": "<string>",
"sourcePolicyVersion": 123
},
"cryptoWindow": {
"seriesId": "<string>",
"windowStartAt": "<string>",
"windowEndAt": "<string>",
"openPrice": "<string>",
"streamDecimals": 123,
"openPriceIsFinal": true,
"closePrice": "<string>",
"closePriceIsFinal": true,
"outcome": "UP"
},
"negRiskEligible": true,
"negRiskMarketId": "<string>",
"negRiskQuestionIndex": 123,
"isNewMarketType": true,
"marketType": "MATCH_WINNER",
"sport": "soccer",
"vertical": "football",
"volume24h": "1234.50",
"totalVolume": "98765.00",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"live": {
"state": "<string>",
"minute": 123,
"addedMinute": 123,
"score": {
"home": 123,
"away": 123
},
"scoreText": "<string>",
"inPlay": true,
"provider": "<string>",
"asOf": "<string>",
"significantEvent": "<string>",
"penaltyScore": {
"home": 123,
"away": 123
},
"penaltyScoreText": "<string>",
"sport": "<string>",
"setScores": "160-0 0-164",
"homeCountry": "<string>",
"awayCountry": "<string>",
"inningHalf": "top",
"balls": 123,
"strikes": 123,
"outs": 123,
"bases": [
true
],
"periodClock": "07:27"
},
"probabilityChange": {
"window": "24h",
"unit": "percentage_points",
"asOf": "2023-11-07T05:31:56Z",
"outcomes": [
{
"outcomeIndex": 0,
"change": 4,
"baselineAt": "2023-11-07T05:31:56Z"
}
]
},
"tradeCount": 123,
"totalShares": "<string>"
}Path Parameters
CTF conditionId (0x-prefixed bytes32 hex).
Response
Full public market row. Returned by GET /api/markets (list items, which also carry tradeCount / totalShares) and GET /api/markets/{slug}, in markets[] by GET /api/events/{slug} and GET /api/events/featured, and by GET /api/markets/by-token/{id}, GET /api/markets/by-condition/{id} and GET /api/markets/disputable. probabilityChange is only on the Events endpoints. The GET /api/events list carries a slimmer row — see EventListMarketDto.
Internal market UUID.
UUID of the parent event.
Canonical slug of the parent event (the key for GET /api/events/{slug}).
"fifa-world-cup-2026-winner"
Home participant's country of the parent event, ISO-3166-1 alpha-2 (tennis: the player's flag). Null when unknown — normal for events without participants and for uneven feed coverage.
Away participant's country, ISO-3166-1 alpha-2 — see homeCountry.
The parent event's active tags (slug, name), featured first. Always an array; empty when the event has none.
Show child attributes
Show child attributes
Public market symbol — the key for the market sub-resources (/api/markets/{symbol}/orderbook, /trades, /ohlc, /traders).
"FRIENDLI-LIT-AND-MW-20260930-LIT"
Canonical market slug — the key for GET /api/markets/{slug}.
"friendli-lithuania-andorra-2026-09-30-lit"
Display title.
Precise yes/no question for this market row (on a neg-risk leg, the per-outcome question, e.g. "Will France win the 2026 World Cup?"). Null ⇒ fall back to title.
Per-outcome label inside a multi-market event (e.g. Lithuania, <20). Null on standalone markets.
Display-only second line under groupItemTitle (e.g. the artist of a song outcome). Never part of the outcome's identity.
Team or contestant image URL for this row (per outcome on neg-risk legs). Display-only; null ⇒ use your own flag or placeholder.
CTF conditionId (0x-prefixed bytes32) of a two-outcome market. Null on markets with more than two outcomes — read outcomes[].conditionId there.
CTF questionId (0x-prefixed bytes32).
ERC-1155 token id of the YES outcome (uint256 as a decimal string) on a two-outcome market. Null on markets with more than two outcomes — read outcomes[].tokenId.
ERC-1155 token id of the NO outcome (uint256 as a decimal string) on a two-outcome market. Null on markets with more than two outcomes — read outcomes[].tokenId.
Per-outcome chain identifiers in outcome-index order: 2 entries on a two-outcome market, N on an N-outcome market. The primary source of token ids and condition ids. Empty [] on some legacy markets.
Show child attributes
Show child attributes
Number of outcomes (2 on a binary market).
2
Canonical outcome labels in index order — the market's immutable on-chain identity. Not overlaid with display labels, so outcomeLabels[i] can differ from outcomes[i].label. Never string-match on it; join by index.
["YES", "NO"]
Machine-readable bindings between outcomes and the data provider's selections ("this side means Over 8.5"). Join to outcomes[] by outcomeIndex, never by label. Empty on manual and legacy markets.
Show child attributes
Show child attributes
Cost to buy per outcome, in outcome-index order: the best ask when the book has an offer, else the last trade; null when neither exists. Decimal string in USDC. For the implied probability use chances.
["0.610000", "0.420000"]
The mark (implied probability) per outcome, in outcome-index order: the book midpoint when the book is two-sided and the spread is at most $0.10, else the last trade. 1/outcomeCount per outcome before any trade. Never null.
["0.595000", "0.405000"]
Lifecycle status. The open view of GET /api/events returns PRE_MARKET, OPEN, PAUSED and POSTPONED; closed statuses (SUSPENDED … VOIDED) appear on the closed view (closed=true), on in-play or postponed events, and on the detail endpoints. Use tradable to decide whether orders are accepted.
PRE_MARKET, OPEN, PAUSED, POSTPONED, SUSPENDED, CLOSED, PENDING_RESOLUTION, DELAYED, DISPUTED, RESOLVED, VOIDED "OPEN"
Whether the market accepts new orders right now (derived from status; a PAUSED market is not tradable). Use this to enable order entry instead of switching on status.
Trading-mode code derived from status, for banners and order-entry affordances.
open, pre_market_post_only, closed, paused, under_review, awaiting_settlement, resolved, voided, delayed Machine code for why trading is unavailable; null when tradable is true. Distinguishes, e.g., a routine operator pause (paused) from an escalated suspension (suspended).
closed_at_cutoff, paused, suspended, postponed, awaiting_settlement, under_review, awaiting_data, resolved, voided, null Current resolution review round (≥ 1).
1
Per-fill taker fee rate in basis points (k × 10 000; the peak fee at P = 0.5 is feeTakerBps / 4 / 10 000). Null ⇒ the platform default rate applies.
600
In-play taker execution delay in milliseconds. While it is in force, an aggressive order on a live market returns status=PENDING with an empty trades[] and the fills arrive asynchronously on the user WebSocket channel (user_fills). 0 or null = no delay.
0
In-play price tick (decimal string). While the fixture is in play, order prices must be a multiple of it or the order is rejected with in_play_tick_violation. Null ⇒ the base 0.01 tick applies.
"0.05"
The market's numeric line (totals and handicaps) — do not parse it out of title. On handicaps this is the YES-side line. Null on line-less types (winners, BTTS) and on manual or legacy markets. Not the same field as prediction.line (a string).
8.5
The line family this market belongs to: markets of one event that differ only by their line (Total Runs 7.5 / 8.5 / 9.5, Run Line ±1.5, Total Maps 2.5 / 3.5, …). Group by lineGroup.id to render one card with a line strip, ordering families by lineGroup.order. Null for line-less types — and for a team-scoped line market whose binding names no single side, which still has a non-null line.
Show child attributes
Show child attributes
Real-world start time of the fixture this market is about. Null on non-fixture markets.
Scheduled trading window: preMarketStartsAt, opensAt, closesAt.
Show child attributes
Show child attributes
Actual lifecycle transition timestamps (closedAt, pausedAt, resolvedAt, voidedAt); each is null until that transition happens.
Show child attributes
Show child attributes
Resolution window in hours after kickoff.
2
Oracle proposal, dispute and final-outcome state. All fields are null until the oracle acts.
Show child attributes
Show child attributes
Per-outcome payout numerators, set when the market resolves (e.g. [1, 0] = outcome 0 won). Null until then.
[1, 0]
Primary data provider the market settles from.
"lsports"
The provider's id of the fixture or question.
Secondary data sources for multi-source resolution (0–1 entries today). Empty on single-source markets.
Show child attributes
Show child attributes
Plain-text settlement rules.
The vendor prediction question this market was listed on (politics, economics, climate, culture, financials, science): question text, rung, verbatim resolution rule and a best-effort threshold — the structured counterpart of resolutionCriteria, as crypto is for crypto markets. Descriptive only; settlement follows the vendor verdict. Null on every other market.
Show child attributes
Show child attributes
Machine-readable price rule of a crypto market (product type, direction, strike, instrument, window anchor) — the structured counterpart of resolutionCriteria. Null on every non-crypto market. Branch crypto handling on this block being non-null, not on marketType.
Show child attributes
Show child attributes
Up/Down window facts: bounds, the frozen open price (the price to beat), the settled close and the direction. Non-null only on short-crypto Up/Down window markets, where it comes with crypto.productType = "UP_DOWN_WINDOW".
Show child attributes
Show child attributes
True when this market is one leg of a neg-risk (mutually exclusive) group.
Shared id (bytes32) of the neg-risk group — group sibling legs by it. Null on standalone markets.
This leg's index (0 … N−1) within its neg-risk group. Null on standalone markets.
Reserved flag for the v2 market schema.
Canonical market type (MATCH_WINNER, BTTS, TOTAL_GOALS, MATCH_WINNER_AET, CRYPTO_PRICE_EVENT, …). Null is common and expected: automatically listed crypto Up/Down windows and manual or older markets have no type. New values are added over time — treat an unknown value as "other", never as an error. Detect crypto markets via crypto, not this field.
"MATCH_WINNER"
Sport in the live-score vocabulary (soccer, tennis, baseball, politics, …) — the same word live.sport carries, but available before and after the game. For navigation use vertical.
"soccer"
This market's vertical (football, tennis, crypto, politics, …) — the value /api/events?vertical= filters on.
"football"
Traded volume on this market over the last 24 h (USDC notional, decimal string); "0" when there were no trades.
"1234.50"
Lifetime traded volume on this market (USDC notional, decimal string); "0" when there were no trades.
"98765.00"
Creation time.
Last update time.
Live clock + score frame while the fixture is in play. After the game a settled market can keep its final-score frame (provider: "final", inPlay: false). Null when there is no frame (pre-match, non-fixture market, no live feed). The key is always present.
Show child attributes
Show child attributes
Signed per-outcome movement of chances over window, in percentage points. Returned by the Events endpoints; may be absent on other market surfaces. Null when the lookup degraded (best-effort — it never fails the request). A per-outcome change: null means no usable history, not zero.
Show child attributes
Show child attributes
Lifetime trade count. Present only on GET /api/markets list items — absent on every Events endpoint and on market detail.
Lifetime sum of trade quantities (decimal string). Present only on GET /api/markets list items — absent on every Events endpoint and on market detail.