Subway API endpoint
Returns one Subway store's detail: address, coordinates, phone (display and E.164), opening hours, and the locator's own entity profile -- IANA timezone, Google Place ID and CID for joining to Google Maps data, franchise number, price range, published services and meal types, and explicit online-ordering/catering/drive-through flags. Boolean flags are omitted entirely when the locator does not publish them, so an absent flag is not a false one. open reflects the location's published status (a store flagged closed long-term), which is distinct from whether it is currently within its opening hours. store_id is the value GET /subway/menu and GET /subway/available-times take. Paths come from a GET /subway/sitemap entry.
/subway/storeReturns one Subway store's detail. Store paths come from the deepest entries in /api/v1/subway/sitemap.
Query parameters:
path (required) — store path, e.g. united-states/ny/new-york/1-penn-plaza.Passing a country, region or city directory path returns a 404 rather than a hollow record, since those pages carry no street address.
Response includes name, address, store_id, phone_number, latitude, longitude, hours[], path, source_url, and fetched_at. Each hours entry has day_of_week, closed, opens, closes, and segments[], ordered Monday first. store_id is this store's ordering-platform ID — pass it to /api/v1/subway/menu as store_id to get this store's menu.
Most days have exactly one segment, matching opens/closes. Stores with split or overnight hours have more than one — opens/closes then describe only the first segment, so read segments[] when a day may have a lunch/dinner gap or a close time past midnight recorded as a separate early-morning window.
The response also carries the locator's own entity profile, all of which arrives with the same page fetch (no extra upstream request):
phone_e164 — dialable form of phone_number, e.g. +12122440101.timezone — IANA zone, e.g. America/New_York. Use it to read /api/v1/subway/available-times UTC slots as local wall-clock times.google_place_id, google_cid — this store's identifiers in Google's data, for joining to a Google Maps place without geocoding.franchise_number — franchise identifier, distinct from store_id (which carries a -0 ordering suffix).open — the location's published status. false means flagged closed long-term; this is not the same as being outside today's opening hours.services[], pickup_and_delivery_services[], meals_served[] — the locator's own separate groupings, kept distinct.has_online_ordering, has_catering, has_drive_through — explicit booleans. Omitted entirely when the locator does not publish them, so an absent field is not a false one.price_range (e.g. $), description, menu_url, order_url.Fields vary per store — confirmed live: one store publishes price_range while another omits it, and has_catering differs between stores.
| Field | Filled in, of 7 checked | Values in the sample |
|---|---|---|
| day_of_week | 7 | “Monday” and 6 other values |
| closed | 7 | true in 0 of 7 |
| opens | 7 | 08:00 (5), 09:00 (2) |
| closes | 7 | 23:30 (4), 02:30 (2), 23:00 (1) |
| segments | 7 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| path | string | Yes | Store path from a /subway/sitemap entry | united-states/ny/new-york/1-penn-plaza | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/subway/store?path=united-states%2Fny%2Fnew-york%2F1-penn-plaza" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"name": "Subway",
"address": {
"street": "1 Penn Plaza",
"city": "New York",
"region": "NY",
"postal_code": "10119",
"country": "US"
},
"store_id": "75376-0",
"phone_number": "(212) 244-0101",
"latitude": 40.7517026,
"longitude": -73.9925826,
"hours": [
{
"day_of_week": "Monday",
"closed": false,
"opens": "09:00",
"closes": "23:00",
"segments": [
{
"opens": "09:00",
"closes": "23:00"
}
]
},
{
"day_of_week": "Friday",
"closed": false,
"opens": "00:00",
"closes": "02:30",
"segments": [
{
"opens": "00:00",
"closes": "02:30"
},
{
"opens": "08:00",
"closes": "23:30"
}
]
}
],
"path": "united-states/ny/new-york/1-penn-plaza",
"source_url": "https://restaurants.subway.com/united-states/ny/new-york/1-penn-plaza",
"fetched_at": "2026-08-31T17:30:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/subway.storeResponseDoc
| 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.StoreResponse | No | ||||
| data.address | subway.StoreAddress | No | ||||
| data.address.city | string | No | New York | |||
| data.address.country | string | No | US | |||
| data.address.postal_code | string | No | 10119 | |||
| data.address.region | string | No | NY | |||
| data.address.street | string | No | 1 Penn Plaza | |||
| data.description | string | No | Description is the store's marketing blurb. | |||
| data.fetched_at | string | No | ||||
| data.franchise_number | string | No | 75376 | FranchiseNumber is the store's franchise identifier, distinct from StoreID (which carries a "-0" ordering suffix). | ||
| data.google_cid | string | No | 7950893118019215099 | |||
| data.google_place_id | string | No | ChIJcXhciqhZwokR-x6iSio_V24 | GooglePlaceID and GoogleCID identify this store in Google's own data, so a caller can join a Subway location to a Google Maps place without geocoding it themselves. | ||
| data.has_catering | boolean | No | ||||
| data.has_drive_through | boolean | No | ||||
| data.has_online_ordering | boolean | No | HasOnlineOrdering, HasCatering and HasDriveThrough are the locator's explicit booleans. They are pointers so "not published" stays distinguishable from a published false. | |||
| data.hours | array | No | ||||
| data.hours[].closed | boolean | No | false | |||
| data.hours[].closes | string | No | 23:00 | |||
| data.hours[].day_of_week | string | No | Monday | |||
| data.hours[].opens | string | No | 09:00 | |||
| data.hours[].segments | array | No | ||||
| data.hours[].segments[].closes | string | No | 23:00 | |||
| data.hours[].segments[].opens | string | No | 09:00 | |||
| data.latitude | number | No | 40.7517026 | |||
| data.longitude | number | No | -73.9925826 | |||
| data.meals_served | array | No | ||||
| data.menu_url | string | No | https://order.subway.com/en-us/restaurant/75376-0/menu/ | MenuURL and OrderURL point at the store's ordering pages. | ||
| data.name | string | No | Subway | |||
| data.open | boolean | No | true | Open reports the location's own published status. False means the store is flagged closed (permanently or long-term), which is not the same as being outside today's opening hours. | ||
| data.order_url | string | No | ||||
| data.path | string | No | ||||
| data.phone_e164 | string | No | +12122440101 | PhoneE164 is the same number in dialable E.164 form. | ||
| data.phone_number | string | No | (212) 244-0101 | |||
| data.pickup_and_delivery_services | array | No | PickupAndDeliveryServices and MealsServed are the locator's own separate groupings, kept distinct rather than merged into Services. | |||
| data.price_range | string | No | $ | PriceRange is the locator's own band, e.g. "$". | ||
| data.services | array | No | Services lists the amenities the locator publishes for this store, e.g. "online ordering", "delivery", "catering". | |||
| data.source_url | string | No | ||||
| data.store_id | string | No | 75376-0 | StoreID is the numeric ordering identifier (e.g. "75376-0") this store uses on subway.com's ordering app -- pass it to GET /subway/menu as store_id. It comes free with this same page fetch; the locator and ordering platforms share one store ID. | ||
| data.timezone | string | No | America/New_York | Timezone is the store's IANA zone -- needed to read the UTC slots from GET /subway/available-times as local wall-clock times. | ||
| 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/store?path=united-states%2Fny%2Fnew-york%2F1-penn-plaza" \
-H "x-api-key: $CRAWLORA_API_KEY"