Race Day
Read the aid station log
Read an authorized event's aid station log: every In, Out, Drop and sweep report with its station, who relayed it (net control, the station's own phone, or an outside system) and whether it stands, is a second report of the same thing, or was undone. Pass since (the newest receivedAt you have seen) to read only what arrived or was undone after your last read. Requires race-day:read and timing or course access on the event.
Method
GET
Path
/v1/events/{eventId}/station-log
Required scope
race-day:readRequest
curl -X GET "https://api.endurancehq.app/v1/events/{eventId}/station-log" \
-H "Authorization: Bearer $EHQ_API_KEY"Path parameters
eventIdstring, requiredQuery schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"since": {
"description": "Only reports received, or undone, after this instant. Pass the newest receivedAt you have seen.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"station": {
"description": "One station only, by code, exact name or course number.",
"type": "string",
"minLength": 1,
"maxLength": 120
},
"limit": {
"default": 500,
"type": "integer",
"minimum": 1,
"maximum": 2000
}
},
"required": [
"limit"
],
"additionalProperties": false
}Response
Success status: 200
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"stations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"code": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"number": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"miles": {
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"code",
"name",
"number",
"miles"
],
"additionalProperties": false
}
},
"entries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"clientEntryId": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"in",
"out",
"drop",
"sweep"
]
},
"bib": {
"type": [
"string",
"null"
]
},
"runnerName": {
"type": [
"string",
"null"
]
},
"station": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"code": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"number": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"miles": {
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"code",
"name",
"number",
"miles"
],
"additionalProperties": false
},
"recordedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
"receivedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
"source": {
"type": "string",
"enum": [
"net_control",
"station",
"external"
]
},
"standing": {
"type": "string",
"enum": [
"counted",
"duplicate",
"voided"
]
},
"voidedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
{
"type": "null"
}
]
},
"note": {
"type": [
"string",
"null"
]
},
"dropReason": {
"type": [
"string",
"null"
]
},
"transportNeeded": {
"type": "boolean"
}
},
"required": [
"id",
"clientEntryId",
"kind",
"bib",
"runnerName",
"station",
"recordedAt",
"receivedAt",
"source",
"standing",
"voidedAt",
"note",
"dropReason",
"transportNeeded"
],
"additionalProperties": false
}
},
"nextSince": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
{
"type": "null"
}
]
}
},
"required": [
"stations",
"entries",
"nextSince"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
}Other surfaces
CLI: ehq race-day station-log list --event <event_id> [--since <iso>] [--station <code>]
MCP tool: ehq_station_log_list