KFC API endpoint
Checks whether a KFC restaurant's delivery integration can deliver to a given address and, when it can, the estimated delivery fee (broken down by fee line item) and pickup/dropoff time. This reads the same checkout-time estimate KFC's own site calls -- it does not add an item to a cart or place an order, and takes no payment or account information. serviceable is true only when the upstream returned a real estimate; a false value with reason populated covers every other case seen live: the delivery provider not enabled at this store, the address being outside the delivery zone, or the delivery marketplace itself reporting the store temporarily inactive. order_subtotal materially affects the fee estimate (KFC's own fee schedules can vary by order size), so it is required rather than defaulted. pickup_at defaults to 30 minutes from now (an "order now" style estimate) when omitted.
/kfc/delivery-estimateQuery parameters:
store_number (required) — KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby, e.g. K750015.address1 (required) — delivery address line 1.address2 (optional) — delivery address line 2.city (required) — delivery address city.state (required) — delivery address state, two-letter code.postal_code (required) — delivery address postal code.country_code (optional, default US) — delivery address country code.latitude (required) — delivery address latitude.longitude (required) — delivery address longitude.order_subtotal (required) — order subtotal before fees, in dollars. This materially affects the fee estimate (KFC's own fee schedules can vary by order size), so it is required rather than defaulted.pickup_at (optional, RFC3339) — pickup time. Defaults to 30 minutes from now (an "order now" style estimate) when omitted.delivery_provider (optional, default DOORDASH) — one of DOORDASH, MOCK_DOORDASH, INTERNAL.Response includes store_number, delivery_provider, serviceable, reason, pickup_at, dropoff_at, fee, fees[], source_url, and fetched_at. serviceable is true only when the upstream returned a real estimate; a false value with reason populated covers every other case confirmed live: the delivery provider not enabled at this store, the address being outside the delivery zone, or the delivery marketplace itself reporting the store temporarily inactive — KFC's own schema represents these as distinct typed results, not one boolean. fee is the total delivery fee; fees[] breaks it down by line item (name, type, amount), each amount given in cents and as a decimal dollar value.
Example response (serviceable):
{"code":200,"msg":"OK","data":{"store_number":"K750015","delivery_provider":"DOORDASH","serviceable":true,"pickup_at":"2026-09-03T20:00:00Z","dropoff_at":"2026-09-03T20:35:00Z","fee":{"amount_cents":499,"amount":4.99,"currency_code":"USD"},"fees":[{"name":"Delivery Fee","type":"DELIVERY","amount":{"amount_cents":399,"amount":3.99,"currency_code":"USD"}},{"name":"Service Fee","type":"SERVICE","amount":{"amount_cents":100,"amount":1.00,"currency_code":"USD"}}],"source_url":"https://www.kfc.com/api/kfc_us/storefront/graphql","fetched_at":"2026-09-03T00:00:00Z"}}
Example response (not serviceable, a real live result — this delivery provider was not enabled at the given store):
{"code":200,"msg":"OK","data":{"store_number":"I824001","delivery_provider":"DOORDASH","serviceable":false,"reason":"The requested StoreDeliveryProvider has not be enabled at this store","source_url":"https://www.kfc.com/api/kfc_us/storefront/graphql","fetched_at":"2026-09-03T00:00:00Z"}}
| Field | In the sample | Value in the sample |
|---|---|---|
| store_number | Has a value | “K750015” |
| delivery_provider | Has a value | “DOORDASH” |
| serviceable | Has a value | false |
| reason | Has a value | “Marketplace store is inactive” |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| store_number | string | Yes | KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby | K750015 | |
| address1 | string | Yes | Delivery address line 1 | 2600 Preston Highway | |
| address2 | string | No | Delivery address line 2 | ||
| city | string | Yes | Delivery address city | Louisville | |
| state | string | Yes | Delivery address state, two-letter code | KY | |
| postal_code | string | Yes | Delivery address postal code | 40217 | |
| country_code | string | No | Delivery address country code (default US) | US | |
| latitude | number | Yes | Delivery address latitude | 38.21 | |
| longitude | number | Yes | Delivery address longitude | -85.7415 | |
| order_subtotal | number | Yes | Order subtotal before fees, in dollars | 10 | |
| pickup_at | string | No | RFC3339 pickup time (default 30 minutes from now) | 2026-09-03T20:00:00Z | |
| delivery_provider | string | No | Delivery provider to check (default DOORDASH) Allowed values: DOORDASH, MOCK_DOORDASH, INTERNAL. | DOORDASH | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/kfc/delivery-estimate?store_number=K750015&address1=2600+Preston+Highway&city=Louisville&state=KY&postal_code=40217&latitude=38.21&longitude=-85.7415&order_subtotal=10&delivery_provider=DOORDASH" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_number": "K750015",
"delivery_provider": "DOORDASH",
"serviceable": true,
"pickup_at": "2026-09-03T20:00:00Z",
"dropoff_at": "2026-09-03T20:35:00Z",
"fee": {
"amount_cents": 499,
"amount": 4.99,
"currency_code": "USD"
},
"fees": [
{
"name": "Delivery Fee",
"type": "DELIVERY",
"amount": {
"amount_cents": 399,
"amount": 3.99,
"currency_code": "USD"
}
},
{
"name": "Service Fee",
"type": "SERVICE",
"amount": {
"amount_cents": 100,
"amount": 1,
"currency_code": "USD"
}
}
],
"source_url": "https://www.kfc.com/api/kfc_us/storefront/graphql",
"fetched_at": "2026-09-03T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/kfc.deliveryEstimateResponseDoc
| 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.DeliveryEstimateResponse | No | ||||
| data.delivery_provider | string | No | DOORDASH | |||
| data.dropoff_at | string | No | ||||
| data.fee | object | No | Fee is the total delivery fee; Fees breaks it down by line item. | |||
| data.fee.amount | number | No | 4.99 | |||
| data.fee.amount_cents | integer | No | 499 | |||
| data.fee.currency_code | string | No | USD | |||
| data.fees | array | No | ||||
| data.fees[].amount | kfc.Money | No | ||||
| data.fees[].amount.amount | number | No | 4.99 | |||
| data.fees[].amount.amount_cents | integer | No | 499 | |||
| data.fees[].amount.currency_code | string | No | USD | |||
| data.fees[].name | string | No | Delivery Fee | |||
| data.fees[].type | string | No | DELIVERY | |||
| data.fetched_at | string | No | ||||
| data.pickup_at | string | No | ||||
| data.reason | string | No | Marketplace store is inactive | |||
| data.serviceable | boolean | No | false | Serviceable is true only when the upstream returned a real estimate. A false value with Reason populated covers every other case this family has seen live: the provider not enabled at this store, the address being outside the delivery zone, or the upstream delivery marketplace itself reporting the store inactive -- KFC's schema represents all of these as distinct typed results, not one boolean. | ||
| data.source_url | string | No | ||||
| data.store_number | string | No | K750015 | |||
| 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/kfc/delivery-estimate?store_number=K750015&address1=2600+Preston+Highway&city=Louisville&state=KY&postal_code=40217&latitude=38.21&longitude=-85.7415&order_subtotal=10&delivery_provider=DOORDASH" \
-H "x-api-key: $CRAWLORA_API_KEY"