Papa John's API endpoint
Returns Papa John's **El Salvador** menu with prices in US dollars. Each pizza lists its full size and crust price matrix — every combination of size (Grande, Gigante) and crust (Masa Original, Masa Delgada, Orilla Rellena de Queso) with that combination's own price — while sides, desserts and extras carry a single price. El Salvador runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Colombia and Peru, so it has its own endpoint. This is El Salvador's national menu; the site itself notes that choosing a restaurant can reveal further items.
/papajohns/elsalvador/menuEl Salvador runs its own ordering platform, independent of the six markets behind
/papajohns/intl/menuand of Colombia and Peru.
Query parameters:
category (optional) — return only categories whose name contains this
text, case-insensitive. The current sections are Pizzas, Entradas,
Postres and Extras. This is a substring match rather than a fixed enum
because the site renames its sections seasonally.Notable response behavior:
GRANDE, GIGANTE) and crust (Masa Original, Masa Delgada,
Orilla Rellena de Queso) is returned as its own priced variant. The
storefront shows only one headline price per card; this endpoint returns the
whole matrix.category that matches nothing returns a 404.| Field | Filled in, of 4 checked | Values in the sample |
|---|---|---|
| name | 4 | “Entradas” and 3 other values |
| products | 4 | median 4 entries |
| product_count | 4 | 4 to 9, median 4 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category | string | No | Return only categories whose name contains this text, case-insensitive. One of: Pizzas, Entradas, Postres, Extras | Pizzas | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/elsalvador/menu" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": "el-salvador",
"currency": "USD",
"categories": [
{
"name": "Favoritas",
"products": [
{
"id": "2",
"name": "The Works",
"category": "Favoritas",
"image_url": "https://pjsv-images.nyc3.digitaloceanspaces.com/common-files/product-2/the-works.jpg",
"url": "https://www.papajohns.com.sv/site/producto/v/2/pizzas/the-works.html",
"price_from": 11.99,
"currency": "USD",
"variants": [
{
"name": "Grande",
"size": "GRANDE",
"crust": "Masa Original",
"price": 11.99,
"currency": "USD",
"available": true,
"sku": "397"
},
{
"name": "Gigante",
"size": "GIGANTE",
"crust": "Masa Original",
"price": 14.99,
"currency": "USD",
"available": true,
"sku": "398"
},
{
"name": "Orilla Rellena de Queso",
"size": "GIGANTE",
"crust": "Orilla Rellena de Queso",
"price": 16.99,
"currency": "USD",
"available": true,
"sku": "714"
}
]
}
],
"product_count": 25
}
],
"product_count": 25,
"source_url": "https://www.papajohns.com.sv/site/menu",
"fetched_at": "2026-09-06T09:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/papajohns.latamMenuResponseDoc
| 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.LatamMenuResponse | No | ||||
| data.categories | array | No | LatamCategory record, 23 fields: id, name, product_count, products. Described under Papa John's Peru Menu API. | |||
| data.category | string | No | ||||
| data.currency | string | No | USD | |||
| data.fetched_at | string | No | ||||
| data.market | string | No | el-salvador | |||
| data.partial | boolean | No | false | Partial is true when a paginated upstream failed part-way and the response carries only the pages that were retrieved. A menu that is quietly short is indistinguishable from one that genuinely has fewer items, so it is flagged rather than left to look complete. | ||
| data.product_count | integer | No | 25 | ProductCount is how many products the response carries. Where the upstream paginates, every page is followed before returning. | ||
| 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/elsalvador/menu" \
-H "x-api-key: $CRAWLORA_API_KEY"