Upload promotions file (S3)

See the Promotions API Guides for prerequisites and the full upload lifecycle.

The Request a Presigned Upload URL endpoint returns a presigned upload_url that you use to upload your promotions file directly to S3. The upload_url is valid for a single file upload only and expires 1 hour after issue (see expires_at in the response).

Do not route this request through the Deliveroo API gatewayPUT directly to the upload_url returned by the previous step.

No authentication header on the S3 PUT

The presigned URL already contains AWS authentication parameters in its query string. Do not send the Authorization: Bearer ... header to S3 — S3 may reject the request.

File format

The body is a JSON object with a promotions array. Each entry is one promotion — a single mechanic and reward for a partner-controlled promotion_id. Each promotion_id must be unique within a file.

File size limit

Maximum file size: 50 MB. Files exceeding this limit will fail schema validation and the job will transition to status: failed with a FILE_TOO_LARGE entry in the status response.

Sync semantics and duplicate detection

Each upload is treated as the canonical state for the brand. Promotions absent from the new file are removed; only promotions whose content actually changed are updated. If the new file's content_hash matches your most recent successful upload for this brand_id, the job terminates with status: failed and error_code: DUPLICATE_FILE (no promotions are re-processed). Inspect the outcome via GET /brands/{brand_id}/promotions/jobs/{job_id}/status.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params

Canonical promotion set for the brand. Each entry in promotions is a single promotion — one mechanic and one reward for a partner-controlled promotion_id. Sync semantics: promotions absent from a subsequent upload are removed automatically. An empty array removes all promotions for this brand.

promotions
array of objects
required
promotions*
Responses
200

File accepted by S3. Poll the job_id returned by the Request Upload URL endpoint to track processing.

400

Malformed request to S3 — check Content-Type and HTTP method.

403

Presigned URL expired or signature mismatch — request a new URL.

Language
LoadingLoading…