Papa John's API endpoint
Returns the promotions currently running in one of six international markets: Chile, Costa Rica, Guatemala, Panama, Portugal, and Spain, for either delivery or pickup. Each promotion carries its headline product, description, artwork, the weekdays it runs on, and its start and end dates. Offers that upstream has marked inactive are omitted rather than returned as live.
/papajohns/intl/dealsQuery parameters:
market (required) — one of chile, costa-rica, guatemala, panama, portugal, spain.dispatch_method (required) — one of pj_delivery (delivery offers) or
in_store (pickup/dine-in offers).Notable response behavior:
offer_id is present when the promotion is backed by a structured offer;
pass it to /papajohns/intl/offer for the
offer's full composition — its price, choice steps, and eligible products.
It is absent when the banner points at something else.availability lists the weekdays the offer runs on; start_date and
end_date bound its overall run.deals array with count 0, not an error.market or dispatch_method returns a 400. Note that
delivery is not a valid dispatch_method here — use
pj_delivery.| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| id | 3 | |
| name | 3 | “Semana Redonda” and 2 other values |
| product | 3 | “Trío Bestial.” and 2 other values |
| description | 2 | “3 Medianas que tú elijas para disfrutar cualquier plan a lo…” and 1 other value |
| category | 3 | “app” |
| dispatch_method | 3 | “both” |
| start_date | 3 | 2026-09-02 to 2026-10-06 |
| end_date | 3 | 2026-10-30 to 2028-12-28 |
| availability | 3 | median 5 entries |
| image_url | 3 | cdn.new.papajohns.es |
| offer_id | 1 |
| 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 | |
| dispatch_method | string | Yes | One of: pj_delivery (delivery offers), in_store (pickup/dine-in offers) Allowed values: pj_delivery, in_store. | pj_delivery | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/intl/deals?market=spain&dispatch_method=pj_delivery" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": "spain",
"dispatch_method": "pj_delivery",
"deals": [
{
"id": 955,
"name": "Combo Veranito delivery",
"product": "Combo Veranito",
"description": "1 Familiar + 2 complementos",
"category": "app",
"dispatch_method": "pj_delivery",
"start_date": "2025-10-24T00:00:00Z",
"end_date": "2026-09-30T23:45:00Z",
"availability": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
],
"image_url": "https://cdn.new.papajohns.es/pictures/banners/376x450_a_domicilio.webp"
}
],
"count": 1,
"source_url": "https://api.papajohns.es/v1/deal_pictures?dispatch_method=pj_delivery",
"fetched_at": "2026-09-06T09:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/papajohns.intlDealsResponseDoc
| 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.IntlDealsResponse | No | ||||
| data.count | integer | No | 1 | |||
| data.deals | array | No | ||||
| data.deals[].availability | array | No | Availability lists the weekdays the offer runs on. | |||
| data.deals[].category | string | No | app | |||
| data.deals[].description | string | No | ||||
| data.deals[].dispatch_method | string | No | pj_delivery | DispatchMethod is the fulfillment this offer applies to. | ||
| data.deals[].end_date | string | No | 2026-09-30T23:45:00Z | |||
| data.deals[].id | integer | No | 955 | |||
| data.deals[].image_url | string | No | ||||
| data.deals[].name | string | No | Combo Veranito delivery | |||
| data.deals[].offer_id | integer | No | 660 | OfferID is set when this promotion is backed by a structured offer, and is the id GET /papajohns/intl/offer takes to return its full composition. Absent when the banner points at something else. | ||
| data.deals[].product | string | No | Combo Veranito | Product is the offer's headline product name. | ||
| data.deals[].start_date | string | No | 2025-10-24T00:00:00Z | |||
| data.deals[].url | string | No | ||||
| data.dispatch_method | string | No | pj_delivery | |||
| data.fetched_at | string | No | ||||
| data.market | string | No | spain | |||
| 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/deals?market=spain&dispatch_method=pj_delivery" \
-H "x-api-key: $CRAWLORA_API_KEY"