Papa John's API endpoint
Use Crawlora's Papa John's Menu Item API to extract supported public Papa John's data as structured JSON. This page includes request parameters, cURL examples, response schema, error behavior, credit cost, and a Playground link for testing before integration.
/papajohns/menu/itemReturns one Papa John's US or Canada menu SKU with that restaurant's price for it, together with the full customization axes of the product group it belongs to: every size and crust the product is sold in, and every preparation instruction with its choices and default. The response also names the category and section the item sits under. Pass a store_id so the price is that restaurant's; omitting it returns the national default price. SKUs come from GET /papajohns/menu. Developers commonly use this endpoint for data enrichment, monitoring, research dashboards, internal automation, and agent-native workflows that need repeatable structured public web data. Authentication uses the documented Crawlora headers, and usage is metered with the credit cost shown on this page.
Request parameters are generated from the active endpoint catalog. Required values must be sent before Crawlora can call the upstream public web data source.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| sku | string | Yes | Product sku from GET /papajohns/menu | ||
| store_id | string | No | Restaurant id from GET /papajohns/store or GET /papajohns/nearby. Omit for the national default price. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/menu/item" \ -H "x-api-key: $CRAWLORA_API_KEY"
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
This endpoint is executed through Crawlora's managed scraping infrastructure.
- `group` carries every size and crust the product is sold in and every preparation instruction (how much cheese, how well done) with its choices and which one is the default. Unlike [`/papajohns/menu`](papajohns-menu.md), these are always included — that is the point of this endpoint. - `category` and `section` name where the item sits in the menu. - An unknown `sku` returns a `404`. A sku that upstream prices but does not display in any menu group also returns a `404`, with a message saying so — it is not orderable from the menu even though a price exists. Example response: ```json {"code":200,"msg":"OK","data":{"store_id":5054,"national_default":false,"category":"pizza","section":"Most Popular","group":{"id":"cyo","title":"Create Your Own Pizza","customizable":"full","max_toppings":7,"allow_half_toppings":true,"sizes":[{"id":2,"name":"Small","measure":"10\"","default":false},{"id":4,"name":"Large","measure":"14\"","default":true}],"crusts":[{"id":1,"name":"Original Crust","code":"PIZZA_ORIGINAL","sub_type":"Original","default":true}],"instructions":[{"id":2,"name":"CHEESE","description":"How much cheese?","choices":[{"id":6,"name":"Light Cheese","code":"ILC"},{"id":5,"name":"Regular Cheese","default":true}]}],"products":[]},"product":{"sku":"1-1-2-115","name":"10 Inch Original Pepperoni Pizza","size":"Small","price":14.99,"calories":210,"serving_label":"/slice, 6 slices","slices":6},"source_url":"https://www.papajohns.com/api/trpc/product.getByStore?input={\"json\":{\"storeId\":5054}}","fetched_at":"2026-09-06T09:00:00Z"}} ```
Crawlora does not silently return bad data when the upstream page cannot be used.
| Status | Common failure case |
|---|---|
| 400 | Invalid input or missing required parameter |
| 429 | Plan or endpoint rate limit exceeded |
| 500 | Internal execution error |
| 502 | Upstream platform failed, returned unusable HTML, or served a challenge page that could not be resolved |
When possible, Crawlora returns structured error context so your integration can retry, back off, or inspect the request.
| 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 |
{
"code": 200,
"msg": "OK",
"data": {
"store_id": 5054,
"national_default": false,
"category": "pizza",
"section": "Most Popular",
"group": {
"id": "cyo",
"title": "Create Your Own Pizza",
"customizable": "full",
"max_toppings": 7,
"allow_half_toppings": true,
"sizes": [
{
"id": 2,
"name": "Small",
"measure": "10\"",
"default": false
},
{
"id": 4,
"name": "Large",
"measure": "14\"",
"default": true
}
],
"crusts": [
{
"id": 1,
"name": "Original Crust",
"code": "PIZZA_ORIGINAL",
"sub_type": "Original",
"default": true
}
],
"instructions": [
{
"id": 2,
"name": "CHEESE",
"description": "How much cheese?",
"choices": [
{
"id": 6,
"name": "Light Cheese",
"code": "ILC"
},
{
"id": 5,
"name": "Regular Cheese",
"default": true
}
]
}
],
"products": []
},
"product": {
"sku": "1-1-2-115",
"name": "10 Inch Original Pepperoni Pizza",
"size": "Small",
"price": 14.99,
"calories": 210,
"serving_label": "/slice, 6 slices",
"slices": 6
},
"source_url": "https://www.papajohns.com/api/trpc/product.getByStore?input={\"json\":{\"storeId\":5054}}",
"fetched_at": "2026-09-06T09:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/papajohns.menuItemResponseDoc
| 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 | papajohns.MenuItemResponse | No | ||||
| data.category | string | No | pizza | |||
| data.fetched_at | string | No | ||||
| data.group | unknown | No | Group is the product group this SKU belongs to, carrying the full customization axes for it. | |||
| data.national_default | boolean | No | false | |||
| data.product | papajohns.MenuProduct | No | ||||
| data.product.calories | integer | No | 210 | Calories is per the serving described by serving_label. | ||
| data.product.code | string | No | PR10Q1 | |||
| data.product.crust_id | integer | No | 1 | |||
| data.product.description | string | No | ||||
| data.product.disclaimer | string | No | ||||
| data.product.image_url | string | No | ||||
| data.product.name | string | No | 10 Inch Original Pepperoni Pizza | |||
| data.product.price | number | No | 14.99 | Price is this store's price. A build-your-own SKU whose price depends entirely on the customer's choices reports 0. | ||
| data.product.regular_price | number | No | 14.99 | RegularPrice is the pre-promotion menu price where it differs. | ||
| data.product.serving_label | string | No | /slice, 6 slices | ServingLabel describes what calories are counted per, e.g. "/slice, 6 slices". | ||
| data.product.size | string | No | Small | Size is the size label this SKU represents within its group. | ||
| data.product.size_id | integer | No | 2 | |||
| data.product.sku | string | No | 1-1-2-115 | |||
| data.product.slices | integer | No | 6 | |||
| data.product.surcharge | number | No | ||||
| data.product.title | string | No | Title is the shorter in-menu label, e.g. "Small Original Crust - Pepperoni". | |||
| data.section | string | No | Most Popular | |||
| data.source_url | string | No | ||||
| data.store_id | integer | No | 5054 | |||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/papajohns/menu/item" \
-H "x-api-key: $CRAWLORA_API_KEY"Crawlora is designed for responsible structured public web data workflows. Customers are responsible for using Crawlora in compliance with applicable laws, third-party rights, target-platform rules, and Crawlora terms.
Read Crawlora terms