post
https://api.developers.deliveroo.com/brands//promotions/upload_url
See the Promotions API Guides for prerequisites and the full upload lifecycle.
Summary
Requests a presigned S3 upload URL for a new promotions file. The partner then PUTs the JSON file directly to S3 — that upload is not routed through this API.
Usage scenario
Partner wants to create or sync promotions in bulk by uploading a JSON file rather than calling the API per-promotion.
Business constraints
- The file must be uploaded to the returned
upload_urlbeforeexpires_at(1 hour). - The S3 PUT must not include an
Authorization: Bearerheader — the presigned URL already contains AWS auth parameters in its query string. - Maximum file size: 50 MB.
- Maximum 2,000 items per
promotion_id. Large promotions (many sites or many items) are split internally during processing — there is no partner-facing block-size cap to manage; submit the file as-is. - Sync semantics: each upload replaces the brand's current promotion set. Promotions absent from the new file are removed automatically; only promotions whose content actually changed are updated.
- Duplicate-file detection is always on. If the new file's
content_hashmatches your most recent successful upload for thisbrand_id— regardless of how long ago — the job terminates withstatus: failedanderror_code: DUPLICATE_FILE(no promotions are re-processed). The originaljob_idappears indetails.original_job_id. - Only one upload is processed per
brand_idat a time. If you submit a second file for the same brand while a previous upload is still processing, it is rejected with409 JOB_IN_PROGRESS— poll the job status and retry once the in-flight upload reaches a terminal state. (This is separate fromDUPLICATE_FILE, which is content-based, not timing-based.) Uploads for differentbrand_ids run in parallel.
Operational constraints
- Rate limit: 6 requests per brand per hour.
- End-to-end processing target: under 120 minutes per upload.
- Currency for
amount_off/fixed_price/max_discount/min_order_valueis derived from thebrand_id(a brand is bound to a single market at onboarding).
Recent Requests
Log in to see full request history
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Loading…
