Subway API endpoint
Returns one Subway store's forward-looking pickup schedule -- every time slot the store is currently accepting orders for, as RFC3339 UTC instants, earliest first. Slots begin at the store's next orderable time (roughly half an hour out, not immediately) and run through closing, so the list reflects real remaining capacity for today rather than the store's advertised opening hours. Store IDs come from a GET /subway/store or GET /subway/nearby result's store_id field. A store that is closed or past its last slot for the day returns an empty slots array, which is a valid answer rather than an error. interval_minutes reports the spacing between consecutive slots as measured from the response itself.
/subway/available-timesQuery parameters:
store_id (required) — store ID from a /api/v1/subway/store or /api/v1/subway/nearby result's store_id, e.g. 75376-0.limit (optional, 1–200) — maximum slots to return. Defaults to every slot the store offers. Applied after fetching, so earliest_slot/latest_slot still describe the store's full window even when the returned list is truncated.Response includes store_id, slots[], count, interval_minutes, earliest_slot, latest_slot, source_url, and fetched_at.
slots[] are UTC instants (e.g. 2026-09-05T13:15:00Z), not store-local times — convert using the timezone field from /api/v1/subway/nearby if you need local wall-clock times. interval_minutes is the spacing between consecutive slots, measured from the response itself rather than assumed; it is omitted when fewer than two slots are returned.
A store that is closed, fully booked, or past its last slot for the day returns an empty slots list with count: 0. That is a valid answer, not an error. An unknown store ID returns 404.
| Field | In the sample | Value in the sample |
|---|---|---|
| store_id | Has a value | |
| slots | Has a value | 20 entries |
| count | Has a value | 20 |
| interval_minutes | Has a value | 5 |
| earliest_slot | Has a value | 2026-10-13 |
| latest_slot | Has a value | 2026-10-14 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| store_id | string | Yes | Store ID from a /subway/store or /subway/nearby result's store_id | 75376-0 | |
| limit | integer | No | every slot the store offers | Maximum slots to return (1-200). Defaults to every slot the store offers. | 20 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/subway/available-times?store_id=75376-0&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_id": "75376-0",
"slots": [
"2026-09-05T13:15:00Z",
"2026-09-05T13:20:00Z",
"2026-09-05T13:25:00Z"
],
"count": 3,
"interval_minutes": 5,
"earliest_slot": "2026-09-05T13:15:00Z",
"latest_slot": "2026-09-06T03:55:00Z",
"source_url": "https://www.subway.com/api/order/available-times/75376-0",
"fetched_at": "2026-09-05T12:39:35Z"
}
}Request schema
No body schema
Response schema
#/definitions/subway.availableTimesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | subway.AvailableTimesResponse | No | ||||
| data.count | integer | No | 177 | |||
| data.earliest_slot | string | No | 2026-09-05T13:15:00Z | EarliestSlot and LatestSlot bracket Slots, kept as their own fields so a caller can read the window without scanning the array. | ||
| data.fetched_at | string | No | ||||
| data.interval_minutes | integer | No | 5 | IntervalMinutes is the spacing between consecutive slots, derived from the returned data rather than assumed. It is 0 when fewer than two slots came back. | ||
| data.latest_slot | string | No | 2026-09-06T03:55:00Z | |||
| data.slots | array | No | Slots are RFC3339 UTC instants, earliest first, spaced by IntervalMinutes. They start at the store's next orderable time -- roughly half an hour out, not immediately -- and run to closing. | |||
| data.source_url | string | No | ||||
| data.store_id | string | No | 75376-0 | |||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/subway/available-times?store_id=75376-0&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"