JimmyJohns API endpoint
Returns Jimmy John's restaurants within a radius of a coordinate, nearest first, using Jimmy John's own Olo-backed ordering API (a separate host from the locator this family's sitemap and store endpoints read). Each result carries restaurant_id -- pass it to GET /jimmy-johns/menu for that restaurant's full menu. The upstream's own radius parameter does not narrow its result set, so distance filtering and sorting happen here.
/jimmy-johns/nearbyQuery parameters:
latitude (required) — search center latitude.longitude (required) — search center longitude.radius (optional, default 15, max 100) — search radius in miles.limit (optional, default 10, max 50) — maximum restaurants to return.The upstream's own radius parameter does not actually narrow its result set — it always returns the full national restaurant list. This endpoint computes distance from the requested coordinate itself and filters/sorts to the nearest matches, so the radius and limit parameters behave as documented from the caller's side.
Response includes restaurants[], count, radius_miles, source_url, and fetched_at. Each restaurant has restaurant_id, slug, name, address, phone_number, latitude, longitude, distance_miles, is_open, accepts_delivery, accepts_pickup, timezone, and order_url.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| restaurant_id | 10 | |
| slug | 10 | |
| name | 10 | “JJ2726” and 9 other values |
| address | 10 | |
| phone_number | 10 | |
| latitude | 10 | |
| longitude | 10 | |
| distance_miles | 10 | 0.46 to 5.81, median 2.4 |
| is_open | 10 | true in 10 of 10 |
| accepts_delivery | 10 | true in 10 of 10 |
| accepts_pickup | 10 | true in 10 of 10 |
| timezone | 10 | America/New_York in all 10 |
| order_url | 10 | online.jimmyjohns.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| latitude | number | Yes | Search center latitude | 39.9612 | |
| longitude | number | Yes | Search center longitude | -82.9988 | |
| radius | integer | No | Search radius in miles, 1-100 (default 15) | 15 | |
| limit | integer | No | Maximum restaurants to return, 1-50 (default 10) | 10 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/jimmy-johns/nearby?latitude=39.9612&longitude=-82.9988&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurants": [
{
"restaurant_id": 67182,
"slug": "jj0004",
"name": "JJ0004",
"address": {
"street": "975 Grand Ave",
"city": "St Paul",
"region": "MN",
"postal_code": "55105",
"country": "US"
},
"phone_number": "(651) 222-2221",
"latitude": 44.9401301,
"longitude": -93.1411487,
"distance_miles": 0.4,
"is_open": true,
"accepts_delivery": true,
"accepts_pickup": true,
"timezone": "America/Chicago",
"order_url": "https://online.jimmyjohns.com/menu/jj0004/"
}
],
"count": 1,
"radius_miles": 15,
"source_url": "https://jj.ordering.api.olo.com/v1.1/restaurants/near",
"fetched_at": "2026-09-02T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/jimmyjohns.nearbyResponseDoc
| 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 | jimmyjohns.NearbyResponse | No | ||||
| data.count | integer | No | 10 | |||
| data.fetched_at | string | No | ||||
| data.radius_miles | integer | No | 15 | |||
| data.restaurants | array | No | ||||
| data.restaurants[].accepts_delivery | boolean | No | ||||
| data.restaurants[].accepts_pickup | boolean | No | ||||
| data.restaurants[].address | jimmyjohns.StoreAddress | No | StoreAddress record, 5 fields: city, country, postal_code, region, street. Described under Jimmy John's Store API. | |||
| data.restaurants[].distance_miles | number | No | 0.4 | |||
| data.restaurants[].is_open | boolean | No | ||||
| data.restaurants[].latitude | number | No | 44.9401301 | |||
| data.restaurants[].longitude | number | No | -93.1411487 | |||
| data.restaurants[].name | string | No | JJ0004 | |||
| data.restaurants[].order_url | string | No | https://online.jimmyjohns.com/menu/jj0004/ | |||
| data.restaurants[].phone_number | string | No | (651) 222-2221 | |||
| data.restaurants[].restaurant_id | integer | No | 67182 | |||
| data.restaurants[].slug | string | No | jj0004 | |||
| data.restaurants[].timezone | string | No | America/Chicago | |||
| data.source_url | string | No | ||||
| 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/jimmy-johns/nearby?latitude=39.9612&longitude=-82.9988&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"