Papa John's API endpoint
Returns Papa John's **Poland** menu with prices in Polish zloty. Russia and Poland run one franchise platform of their own, separate from the six markets behind GET /papajohns/intl/menu and from Colombia, Peru and El Salvador, so each has its own endpoint. The catalog is national -- it does not vary by city -- and every product lists its priced variants with size, dough and any stuffed crust. Prices are zloty and are not comparable with any other market.
/papajohns/poland/menuPoland and Russia run one franchise platform of their own, separate from the six markets behind
/papajohns/intl/menuand from Colombia, Peru and El Salvador. Prices are Polish zloty and are not comparable with any other market.
Query parameters:
category (optional) — return only sections whose name or slug contains
this text, case-insensitive. Matching the slug means one value works in both
markets even though the display names are in different languages: pizza,
combo, zakuski, deserty, napitki, sauce are shared. Poland also publishes papadias, papiekanki, vegan and a seasonal promotion section.Notable response behavior:
product_count and variant_count report what the response carries. A
product is listed once, with every priced variant under variants.size carries the market's own unit as published (23 см, 29 cm).crust is the dough, where the market publishes one.stuffed_crust names a filling baked into the rim: cheese, sausage or
sausage_cheese. Upstream marks a plain variant none; that is reported
here as an absent field rather than the literal word.category matching no section returns a 404, so an empty filter result
is distinguishable from an empty menu.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| id | 1 | |
| name | 1 | “Pizza” |
| alias | 1 | “pizza” |
| products | 1 | median 24 entries |
| product_count | 1 | 24 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category | string | No | Return only sections whose name or slug contains this text, case-insensitive. Slugs work in either market, e.g. pizza, combo, deserty, napitki, sauce, zakuski | pizza | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/poland/menu" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": "poland",
"currency": "PLN",
"categories": [
{
"id": "1",
"name": "Pizza",
"alias": "pizza",
"products": [
{
"id": "1588",
"name": "Italian Sausage",
"category": "Pizza",
"price_from": 49.99,
"currency": "PLN",
"variants": [
{
"size": "29 cm",
"crust": "tradycyjna",
"price": 58.98,
"currency": "PLN",
"available": true,
"sku": "1588"
},
{
"size": "34 cm",
"crust": "tradycyjna",
"price": 67.98,
"currency": "PLN",
"available": true,
"sku": "1541"
}
]
}
],
"product_count": 23
}
],
"product_count": 84,
"variant_count": 292,
"source_url": "https://papajohns.pl/warszawa",
"fetched_at": "2026-09-07T09:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/papajohns.storefrontMenuResponseDoc
| 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.StorefrontMenuResponse | No | ||||
| data.categories | array | No | Categories carry the whole national catalog. The menu does not vary by city, so there is no city to report. | |||
| data.categories[].alias | string | No | pizza | Alias is upstream's own stable slug for the section, which survives the display name being renamed for a season. | ||
| data.categories[].id | string | No | 1 | |||
| data.categories[].name | string | No | Пицца | |||
| data.categories[].product_count | integer | No | 25 | |||
| data.categories[].products | array | No | ||||
| data.categories[].products[].category | string | No | Пицца | |||
| data.categories[].products[].currency | string | No | RUB | |||
| data.categories[].products[].description | string | No | ||||
| data.categories[].products[].id | string | No | 12345 | |||
| data.categories[].products[].image_url | string | No | ||||
| data.categories[].products[].name | string | No | Прайм говядина Барбекю | |||
| data.categories[].products[].price_from | number | No | 680 | PriceFrom is the cheapest priced variant, so a caller can rank products without walking every variant. | ||
| data.categories[].products[].url | string | No | ||||
| data.categories[].products[].variants | array | No | ||||
| data.categories[].products[].variants[].available | boolean | No | true | |||
| data.categories[].products[].variants[].crust | string | No | Традиционное | Crust is the dough the variant is made with. Russia publishes two (Традиционное, Тонкое); Poland publishes none, so this is empty there. | ||
| data.categories[].products[].variants[].currency | string | No | RUB | |||
| data.categories[].products[].variants[].price | number | No | 680 | |||
| data.categories[].products[].variants[].size | string | No | 23 см | Size is the pizza diameter where the market publishes one, with its own unit ("23 см"). | ||
| data.categories[].products[].variants[].sku | string | No | 172764 | |||
| data.categories[].products[].variants[].stuffed_crust | string | No | cheese | StuffedCrust names the filling baked into the rim, where the variant has one. Upstream reports none/cheese/sausage/sausage_cheese; "none" is reported here as an empty value rather than the literal word. | ||
| data.category | string | No | ||||
| data.currency | string | No | RUB | |||
| data.fetched_at | string | No | ||||
| data.market | string | No | russia | |||
| data.product_count | integer | No | 185 | |||
| data.source_url | string | No | ||||
| data.variant_count | integer | No | 892 | |||
| 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/poland/menu" \
-H "x-api-key: $CRAWLORA_API_KEY"