Papa John's API endpoint
Returns one product's own catalog record in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain -- its description, imagery, dietary markers, and customization rules (whether toppings may be changed, how many extra ingredients are included free, and whether it can be used as one half of a half-and-half pizza). This record carries no price, because pricing is per restaurant: use GET /papajohns/intl/menu for prices. Product ids come from that same endpoint.
/papajohns/intl/productThis record carries no price. Pricing on this platform is per restaurant — use
/papajohns/intl/menu.
Query parameters:
market (required) — one of chile, costa-rica, guatemala, panama, portugal, spain.product_id (required) — a product id from
/papajohns/intl/menu.Notable response behavior:
food_type carries the dietary markers the market publishes, e.g.
vegetarian.available_as_half reports whether the product may be used as one half of
a half-and-half pizza, and cheese_changeable whether its cheese may be
modified. Both are stated positively here; upstream expresses them as
negations.free_extras is how many extra ingredients are included at no charge.product_id returns a 404; an unknown market or a
non-numeric id returns a 400.| Field | In the sample | Value in the sample |
|---|---|---|
| market | Has a value | “spain” |
| id | Has a value | |
| name | Has a value | “Super Papa” |
| category | Has a value | “pizza” |
| description | Has a value | 199 characters |
| food_type | Has a value | 1 entry |
| customizable | Has a value | true |
| available_as_half | Has a value | true |
| cheese_changeable | Has a value | true |
| image_url | Has a value | cdn.new.papajohns.es |
| image_urls | Has a value | 3 entries |
| slug | Has a value |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| market | string | Yes | Market. One of: chile, costa-rica, guatemala, panama, portugal, spain Allowed values: chile, costa-rica, guatemala, panama, portugal, spain. | spain | |
| product_id | string | Yes | Product id from GET /papajohns/intl/menu | 8 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/intl/product?market=spain&product_id=8" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": "spain",
"id": 8,
"name": "Super Papa",
"category": "pizza",
"description": "Salsa de tomate natural, carne de cerdo especiada, pepperoni crujiente, york XL, pimiento verde fresco…",
"customizable": true,
"available_as_half": true,
"cheese_changeable": true,
"image_url": "https://cdn.new.papajohns.es/pictures/pizzas/superpapa750x600.webp",
"slug": "super-papa",
"source_url": "https://api.papajohns.es/v1/pizzas/8",
"fetched_at": "2026-09-06T09:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/papajohns.intlProductResponseDoc
| 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.IntlProductResponse | No | ||||
| data.available_as_half | boolean | No | true | AvailableAsHalf reports whether this product may be used as one half of a half-and-half pizza. | ||
| data.category | string | No | pizza | |||
| data.cheese_changeable | boolean | No | true | |||
| data.customizable | boolean | No | true | Customizable reports whether toppings may be changed on this product. | ||
| data.description | string | No | ||||
| data.fetched_at | string | No | ||||
| data.food_type | array | No | ||||
| data.free_extras | integer | No | 2 | FreeExtras is how many extra ingredients are included at no charge. | ||
| data.id | integer | No | 8 | |||
| data.image_url | string | No | ||||
| data.image_urls | array | No | ||||
| data.market | string | No | spain | |||
| data.name | string | No | Super Papa | |||
| data.slug | string | No | super-papa | |||
| 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 |
| 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/papajohns/intl/product?market=spain&product_id=8" \
-H "x-api-key: $CRAWLORA_API_KEY"