Panera API endpoint
Returns one level of Panera Bread's US cafe locator tree. Omit both state and city to list every US state and territory Panera serves, each with its cafe count. Pass state to list every city in that state, each with its full cafe list -- id, name, street address, city, state, postal code, phone, coordinates and per-cafe amenity flags (for example hasDriveThru, hasDelivery, hasCurbside, hasKiosk). Pass both state and city to narrow to that one city's cafes. A state Panera does not serve, or a city with no match, returns an empty list rather than an error.
/panera/locationsQuery parameters:
state (optional) — two-letter US state abbreviation, e.g. IL. Omit to list every state Panera serves.city (optional) — city name, e.g. Chicago. Requires state. Omit to list every city in the state.Behavior by parameter combination:
states[] lists every US state and territory Panera serves, each with its cafe_count.state only — response's cities[] lists every city in that state, each with its full cafe list.state and city — response's cities[] is narrowed to that one city's cafes.A state Panera does not serve, or a city with no match, returns an empty list rather than an error — this is a real "no cafes here" result, not a failure.
Each entry in cities[].cafes[] has cafe_id, name, street, city, state, postal_code, phone, country_code, latitude, longitude, and features[] — Panera's own per-cafe amenity flags that are true for that cafe (for example hasDriveThru, hasDelivery, hasCurbside, hasKiosk, hasDineIn). cafe_id is what /panera/cafe and /panera/menu take.
Example response (state=IL, city=Addison):
{"code":200,"msg":"OK","data":{"state":"IL","city":"Addison","cities":[{"city":"Addison","cafe_count":1,"cafes":[{"cafe_id":601447,"name":"Addison - W Lake St east of Rohlwing Rd","street":"1600 West Lake Street","city":"Addison","state":"IL","postal_code":"60101","phone":"630-250-4952","country_code":"US","latitude":41.948594,"longitude":-88.026398,"features":["hasCateringDelivery","hasCateringPickUp","hasDelivery","hasDineIn","hasEcommerceEnabled","hasInCafePickup","hasKiosk","hasPickup"]}]}],"count":1,"source_url":"https://www-api.panerabread.com/www-api/public/cafe/location/IL/Addison","fetched_at":"2026-09-01T12:00:00Z"}}
| Field | Filled in, of 49 checked | Values in the sample |
|---|---|---|
| state | 49 | “AL” and 48 other values |
| cafe_count | 49 | 1 to 196, median 30 |
| country_code | 49 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| state | string | No | Two-letter US state abbreviation. Omit to list every state. | IL | |
| city | string | No | City name. Requires state. Omit to list every city in the state. | Chicago | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/panera/locations" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"state": "IL",
"city": "Addison",
"cities": [
{
"city": "Addison",
"cafe_count": 1,
"cafes": [
{
"cafe_id": 601447,
"name": "Addison - W Lake St east of Rohlwing Rd",
"street": "1600 West Lake Street",
"city": "Addison",
"state": "IL",
"postal_code": "60101",
"phone": "630-250-4952",
"country_code": "US",
"latitude": 41.948594,
"longitude": -88.026398,
"features": [
"hasCateringDelivery",
"hasCateringPickUp",
"hasDelivery",
"hasDineIn",
"hasEcommerceEnabled",
"hasInCafePickup",
"hasKiosk",
"hasPickup"
]
}
]
}
],
"count": 1,
"source_url": "https://www-api.panerabread.com/www-api/public/cafe/location/IL/Addison",
"fetched_at": "2026-09-01T12:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/panera.locationsResponseDoc
| 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 | panera.LocationsResponse | No | ||||
| data.cities | array | No | Cities lists every city in the requested state (or just the one matching city, when both are given), each with its cafes. Populated only when state is given. | |||
| data.cities[].cafe_count | integer | No | 1 | |||
| data.cities[].cafes | array | No | ||||
| data.cities[].cafes[].cafe_id | integer | No | 601447 | |||
| data.cities[].cafes[].city | string | No | Addison | |||
| data.cities[].cafes[].country_code | string | No | US | |||
| data.cities[].cafes[].features | array | No | Features are Panera's own per-cafe capability flags that are true for this cafe (e.g. hasDriveThru, hasDelivery, hasCurbside, hasKiosk). | |||
| data.cities[].cafes[].latitude | number | No | 41.948594 | |||
| data.cities[].cafes[].longitude | number | No | -88.026398 | |||
| data.cities[].cafes[].name | string | No | Addison - W Lake St east of Rohlwing Rd | |||
| data.cities[].cafes[].phone | string | No | 630-250-4952 | |||
| data.cities[].cafes[].postal_code | string | No | 60101 | |||
| data.cities[].cafes[].state | string | No | IL | |||
| data.cities[].cafes[].street | string | No | 1600 West Lake Street | |||
| data.cities[].city | string | No | Addison | |||
| data.city | string | No | Addison | |||
| data.count | integer | No | 50 | |||
| data.fetched_at | string | No | ||||
| data.source_url | string | No | ||||
| data.state | string | No | IL | |||
| data.states | array | No | States lists every state Panera serves, with its cafe count. Populated only when neither state nor city is given. | |||
| data.states[].cafe_count | integer | No | 85 | |||
| data.states[].country_code | string | No | US | |||
| data.states[].state | string | No | IL | |||
| 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 |
| 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/panera/locations" \
-H "x-api-key: $CRAWLORA_API_KEY"