First queries
These three queries walk the canonical race-card flow: from a date you pick → the meetings running that day → a single race in detail → every runner entered. Each example has a live runner inline and an Open in Playground button that hands the query — and its variables — over to GraphiQL with introspection-aware autocomplete and your portal session.
Use your active docs key for live examples
If you opened these docs from the developer portal, the key from the reveal dialog is available in this browser tab automatically. Otherwise, paste a key here to run live examples.
Checking browser session…
1. Meetings for a date
Section titled “1. Meetings for a date”meetingsForDate returns every Meeting running on the given day, with its Course, MeetingConditions, and the full list of Races on the card.
This is usually the first call you’ll make: pick a date, pull every meeting and race surface, then drill into the IDs that matter.
query MeetingsForDate($date: Date!) { meetingsForDate(date: $date) { id name meetingDate status raceCount conditions { going { official } } course { name countryCode timeZone } races { id raceNumber scheduledTime title raceType class distance { displayText } } }}Variables
{ "date": "2026-04-13" }Run meetings for a date
Edit the date or the selection set, then call the live GraphQL endpoint with the active key from this tab.
Checking active API key…
Run the query to inspect the JSON response.
curl -X POST https://api.podium.pagroup.com/graphql \ -H "Content-Type: application/json" \ -H "x-api-key: std_your_key_here" \ -d '{ "query": "query MeetingsForDate($date: Date!) { meetingsForDate(date: $date) { id name meetingDate status raceCount course { name countryCode timeZone } races { id raceNumber scheduledTime title raceType class distance { displayText } } } }", "variables": { "date": "2026-04-13" } }'const QUERY = ` query MeetingsForDate($date: Date!) { meetingsForDate(date: $date) { id name meetingDate status raceCount course { name countryCode timeZone } races { id raceNumber scheduledTime title raceType class distance { displayText } } } }`;
const res = await fetch('https://api.podium.pagroup.com/graphql', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.PODIUM_API_KEY, }, body: JSON.stringify({ query: QUERY, variables: { date: '2026-04-13' } }),});const { data } = await res.json();console.log(data.meetingsForDate);2. Inspect a single race
Section titled “2. Inspect a single race”race takes any races[].id from the first query and returns the full Race: surface, Distance, PrizeMoney, going override, PatternType, and parent Meeting context for breadcrumbs.
query RaceDetail($raceId: ID!) { race(id: $raceId) { id raceNumber scheduledTime status title raceType surface distance { displayText yards } class pattern handicap goingOfficial prizeMoney { currency total } meeting { id name course { name countryCode } } }}Variables
{ "raceId": "race_abc123" }Fetch one race
Paste a real race ID from query #1 above and edit the selection set.
Checking active API key…
Run the query to inspect the JSON response.
3. Runners in a race
Section titled “3. Runners in a race”The same race query, this time selecting runners — every Runner entered, with its Horse, Jockey, Trainer, draw, Weight, Price, recent form, and official rating.
query RaceRunners($raceId: ID!) { race(id: $raceId) { id title scheduledTime runners { id cloth stall status horse { id name yearBorn sex colour } jockey { id name allowance } trainer { id name location } weight { pounds displayText } startingPrice { numerator denominator decimal } recentForm officialRating } }}Variables
{ "raceId": "race_abc123" }Load runners for a race
The runner list grows as declarations come in — final fields drop on the morning of the race.
Checking active API key…
Run the query to inspect the JSON response.