Overview
The Promotions API is a programmatic interface that allows grocery and retail partners to upload, schedule, manage and synchronise large-scale promotions on Deliveroo.
What is the Promotions API?
The Promotions API enables partners to upload, schedule and manage bulk promotions across their Deliveroo estate through a single asynchronous workflow. A typical upload can contain tens of thousands of item-level promotions spanning hundreds of sites, multiple promotion mechanics and customer-targeted campaigns such as loyalty-member promotions.
The API is designed for large-scale promotional operations where manual workflows become difficult to manage reliably and consistently.
Each promotion uses a consistent structure:
promotion_typedefines the promotion mechanicconditiondefines what the customer basket must satisfyrewarddefines what the customer receives
This model supports item, basket, multibuy and delivery promotions while keeping the file format consistent across promotion types.
Benefits for Partners
Scale large promotion rollouts
Upload and manage promotions across hundreds of sites through a single integration workflow.
Async processing and visibility
Track uploads and updates using asynchronous jobs and status polling.
Flexible promotion support
Create item, basket, multibuy and delivery promotions using a consistent schema.
Customer targeting support
Target specific customer segments such as loyalty members, subscribers, students or new customers.
Common Use Cases
| Use case | How the API helps |
|---|---|
| Multi-store promotion rollouts | Apply promotions across hundreds of sites |
| Loyalty promotions | Target loyalty customers using user_target |
| Scheduled campaigns | Configure future start_at and end_at windows |
| Multibuy promotions | Support “buy N for £X” style mechanics |
| Free delivery campaigns | Create time-bound free delivery promotions |
| Promotion lifecycle management | Update promotions programmatically |
High-Level Workflow
The Promotions API uses an asynchronous upload model designed for high-volume promotion processing.
A typical workflow is:
- Request a presigned upload URL
- Upload the promotion file directly to S3
- Deliveroo validates and processes the file asynchronously
- Optionally poll the job-status endpoint to track processing outcomes
- Optionally update individual promotions using full replacement requests, or end promotions by setting
end_atto a past timestamp
Supported Promotion Types
Every promotion includes a root-level promotion_type field. The promotion_type defines the mechanic, while condition defines what the basket must satisfy and reward defines what the customer receives.
| Promotion Type | Description |
|---|---|
PERCENTAGE_OFF_ON_ITEMS | Percentage discount on selected items |
AMOUNT_OFF_ON_ITEMS | Fixed amount discount on selected items |
PERCENTAGE_OFF_ON_SECOND_ITEM | Percentage discount on the second qualifying item |
PERCENTAGE_OFF_ON_SINGLE_ITEM_MULTIBUY | Percentage discount when buying multiple units of the same item |
FIXED_PRICE_ON_SINGLE_ITEM_MULTIBUY | Fixed price when buying multiple units of the same item |
PERCENTAGE_OFF_ON_MULTIPLE_ITEM_MULTIBUY | Percentage discount when buying a bundle of different items |
FIXED_PRICE_ON_MULTIPLE_ITEM_MULTIBUY | Fixed price when buying a bundle of different items |
PERCENTAGE_OFF_ON_BASKET | Percentage discount on basket total |
FREE_DELIVERY | Free delivery promotion |
BUY_X_FOR_Y | Buy X qualifying items and receive reward items |
BUY_X_PLUS_SAVE_Y_PERCENT | Buy X or more qualifying items and save Y% |
Key Concepts
promotion_id
The partner-defined identifier for a promotion. Used for reconciliation, updates and synchronisation.
Partners must provide a promotion_id for every promotion. Each promotion_id must be unique within a file and identifies one promotion with one mechanic, one condition model and one reward mode
promotion_type
The promotion mechanic.
For example, PERCENTAGE_OFF_ON_ITEMS means the promotion gives a percentage discount on selected items.
The promotion_type is set at the top level of each promotion object.
condition
The condition object defines what the customer basket must satisfy before the promotion can apply.
Depending on the promotion type, condition can include:
items— qualifying partner catalogue item identifiersquantity— number of qualifying items requiredmin_order_value— minimum basket subtotal required before the promotion appliesalcohol_allowed— whether the promotion may apply to baskets containing alcoholic items
For example, a percentage-off item promotion uses condition.items to define the qualifying items:
"condition": {
"items": [
"5000169816246",
"5000169816247"
]
}A basket promotion can use condition.min_order_value and condition.alcohol_allowed:
"condition": {
"min_order_value": 2000,
"alcohol_allowed": false
}reward
The reward object defines what the customer receives when the promotion condition is met.
Depending on the promotion type, reward can include:
percentage— percentage discountamount_off— fixed discount amount in minor currency unitsfixed_price— fixed final price in minor currency unitsquantity— reward quantity, where applicablemax_discount— maximum discount cap in minor currency units
For example, a percentage-off item promotion uses:
"promotion_type": "PERCENTAGE_OFF_ON_ITEMS",
"condition": {
"items": [
"5000169816246"
]
},
"reward": {
"percentage": 20
}job_id
The identifier returned for asynchronous operations such as uploads and updates. Use it to poll the job-status endpoint and inspect processing outcomes.
Async processing
Promotion uploads and updates are processed asynchronously. Partners can poll a status endpoint to track progress and outcomes.
brand_id
Defines the brand scope the OAuth client is allow-listed to manage.
sites
Partner location identifiers. Sites must already be synced with Deliveroo before promotions are uploaded.
condition.items
Partner catalogue item identifiers used as qualifying items for item-level promotions. Items must already exist in Deliveroo’s catalogue before promotions are uploaded.
Item-level promotion types use condition.items. Basket and delivery promotions do not require item identifiers.
Promotion synchronisation
Promotion uploads use a synchronisation model. Each successful upload represents the desired promotion state for the brand.
When a new file is processed:
- new promotions are created
- changed promotions are updated
- unchanged promotions are left as they are
- promotions missing from the file are removed
Partners should submit a complete file for the brand unless they intentionally want omitted promotions to be removed.
Scale and Limits
| Limit | Value |
|---|---|
| Maximum upload file size | 50 MB |
| Presigned upload URL expiry | 1 hour |
| Duplicate upload detection | Compared with the most recent successful upload for the brand |
| Target processing time | Less than 120 minutes per upload |
Maximum items per promotion_id | 2,000 |
What the Promotions API Does Not Manage
The Promotions API does not create or update catalogue items, item prices, sites or branches. These must already exist in Deliveroo systems before promotions are uploaded.
When to Use the Promotions API
The Promotions API is best suited for:
- Large-scale promotion automation
- Multi-store operations
- Scheduled campaign management
- High-volume recurring workflows
When Not to Use the Promotions API
Partner Hub may be more suitable for:
- Small one-off promotions
- Manual promotional experimentation
- Single-store ad hoc campaigns
- Low-volume workflows
Authentication
All endpoints use OAuth2 client credentials authentication.
Every request must include:
Authorization: Bearer <access_token>Detailed authentication examples and endpoint walkthroughs are covered in the Integration Guide.
Next Steps
- Read the Integration Guide for endpoint documentation, authentication and upload workflows
- Read the Guidelines for best practices, promotion modelling and operational recommendations
