Papa John's API endpoint
Returns Papa John's **Colombia** menu with prices in Colombian pesos. Every product lists its priced SKU variants across the four axes Colombia sells on — size, dough, crust and sauce — each with its own price and availability. Colombia runs its own ordering platform, independent of the six markets behind GET /papajohns/intl/menu and of Peru and El Salvador, so it has its own endpoint. Prices are Colombian pesos and are not comparable with any other market. The full catalog is paged through before returning, so the response is complete rather than a first page.
/papajohns/colombia/menuColombia runs its own ordering platform, independent of the six markets behind
/papajohns/intl/menuand of Peru and El Salvador. Prices are Colombian pesos and are not comparable with any other market.
Query parameters:
category (optional) — return only categories whose name contains this
text, case-insensitive. Colombia publishes its sections in Spanish and
changes them seasonally, so this is a substring match rather than a fixed
enum: Pizzas, Bebidas, Postres, Acompañamientos,
Lasagnas y Pastas, Sandwich Pizza, Extras are the current ones.include_variants (optional, default true) — include every priced SKU
variant. Set false for a lighter response carrying only each product's
cheapest price.Notable response behavior:
size, crust (dough and border joined when they differ),
sauce, and fulfillment.fulfillment matters. Colombia prices delivery and pickup separately —
the same item is commonly ~15% dearer for Domicilio than for
Recoger en Tienda. It is the most common specification in the catalog, so
two variants that differ only by it are not duplicates.partial is set to true — a quietly short menu is
indistinguishable from a genuinely small one, so it is flagged rather than
left to look complete. partial is absent on a complete response.category that matches nothing returns a 404, which distinguishes a bad
filter from a genuinely empty menu.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| name | 1 | “Pizzas” |
| products | 1 | median 39 entries |
| product_count | 1 | 39 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category | string | No | Return only categories whose name contains this text, case-insensitive, e.g. Pizzas or Bebidas | Pizzas | |
| include_variants | boolean | No | Include every priced SKU variant. Default true; set false for a lighter response carrying only each product's cheapest price. | true | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/colombia/menu?include_variants=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": "colombia",
"currency": "COP",
"categories": [
{
"name": "Acompañamientos",
"products": [
{
"id": "58",
"name": "Garlic Knots",
"category": "Acompañamientos",
"price_from": 13277.31,
"currency": "COP",
"variants": [
{
"fulfillment": "Recoger en Tienda",
"price": 13277.31,
"currency": "COP",
"available": true,
"sku": "1700"
},
{
"fulfillment": "Domicilio",
"price": 15882.35,
"currency": "COP",
"available": true,
"sku": "598"
}
]
}
],
"product_count": 5
}
],
"product_count": 83,
"source_url": "https://www.papajohns.com.co/api/catalog_system/pub/products/search",
"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/colombia/menu?include_variants=true" \
-H "x-api-key: $CRAWLORA_API_KEY"