KFC API endpoint
Returns one restaurant's current public promotions -- current deals and offers KFC's storefront marks as public, with each promotion's id, internal and display name, description, whether it applies automatically, and active redemption codes when KFC exposes them. The returned codes can be passed to kfc-promotion. A store with no active public promotions returns an empty list rather than an error.
/kfc/promotionsQuery parameters:
store_number (required) — KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby, e.g. I824001.Response includes store_number, promotions[], count, source_url, and fetched_at. Each promotion has promotion_id, name (KFC's internal campaign label), display_name (the customer-facing name), description, automatic (whether it applies automatically or requires a redemption code), and redemption_codes when the public storefront exposes active codes. Pass one of those returned codes to kfc-promotion; this is the discovery path for a current code and avoids guessing stale campaign values.
| Field | Filled in, of 15 checked | Values in the sample |
|---|---|---|
| promotion_id | 15 | |
| name | 15 | “Digital - 2026_Q4_1101_Partnership_Buy Two $25 gift cards a…” and 14 other values |
| display_name | 15 | |
| description | 15 | “$5 off” and 14 other values |
| automatic | 15 | true in 0 of 15 |
| redemption_codes | 15 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| store_number | string | Yes | KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby | I824001 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/kfc/promotions?store_number=I824001" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_number": "I824001",
"promotions": [
{
"promotion_id": "d8da51c0-3497-485a-b68d-a8aa464da799",
"name": "Digital - 2026_Q4_1101_Partnership_Buy Two $25 gift cards and get $5 off your next digital purchase",
"display_name": "$5 off",
"description": "$5 off",
"automatic": false,
"redemption_codes": [
"WALMART5DOLLARSOFF"
]
}
],
"count": 15,
"source_url": "https://www.kfc.com/api/kfc_us/storefront/graphql",
"fetched_at": "2026-09-21T03:38:05Z"
}
}Request schema
No body schema
Response schema
#/definitions/kfc.promotionsResponseDoc
| 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 | kfc.PromotionsResponse | No | ||||
| data.count | integer | No | 15 | |||
| data.fetched_at | string | No | ||||
| data.promotions | array | No | ||||
| data.promotions[].automatic | boolean | No | true | |||
| data.promotions[].description | string | No | ||||
| data.promotions[].display_name | string | No | 50% off Chicken Sandwich | |||
| data.promotions[].name | string | No | Digital-Q324 - 50% off Chicken Sandwich | |||
| data.promotions[].promotion_id | string | No | 6815f409-5b1e-44dc-9f99-26b1c1a2699a | |||
| data.promotions[].redemption_codes | array | No | WALMART5DOLLARSOFF | RedemptionCodes is populated from the public promotion's active code connection. It gives callers a durable discovery path for PromotionByCode instead of requiring a guessed or stale code. | ||
| data.source_url | string | No | ||||
| data.store_number | string | No | I824001 | |||
| 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 |
| 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/kfc/promotions?store_number=I824001" \
-H "x-api-key: $CRAWLORA_API_KEY"