---
title: "offer.cancelled delivery"
method: POST
path: "offer.cancelled"
---

# offer.cancelled delivery

`POST offer.cancelled` (webhook)

The bid was withdrawn (also delivered as offer.status_changed).

## Headers

- `X-UpgradeAgent-Signature` string, required: `t=<unix>,v1=<hex HMAC-SHA256(secret, `${t}.${body}`)>`
- `X-UpgradeAgent-Event` 'offer.cancelled', required
- `X-UpgradeAgent-Idempotency-Key` string, required: Stable per (quote, offer, status) — dedupe on it.
- `X-UpgradeAgent-Webhook-Id` string, required

## Payload

- object: Non-PII by construction: never a booking reference, last name, or contact detail.
  - `event` 'offer.status_changed' | 'offer.accepted' | 'offer.declined' | 'offer.cancelled' | 'checkout.paid' | 'ping', required: Event name (or `ping` for test deliveries).
  - `quoteId` string, nullable, required: The quote the offer belongs to.
  - `offerReference` string, nullable, required: Operator order-change id (the offerReference on GET /offers); null for checkout.paid when ambiguous.
  - `status` string, nullable, required: New normalized status: submitted | pending | accepted | declined | cancelled | paid | unknown.
  - `previousStatus` string, nullable, required: Previous normalized status; null on first observation.
  - `amount` number, nullable, required: Offer amount.
  - `currency` string, nullable, required: ISO currency, or PTS for points.
  - `cabin` string, nullable, required: Cabin / product name.
  - `segment` string, nullable, required: Route, e.g. NCE-ZRH.
  - `occurredAt` string, required: ISO-8601 time of the observation.
  - `id` string, required: Event id.

## Acknowledgement `2XX`

Acknowledge within 10s. Anything else (or a timeout) is retried with backoff.

---

[API](https://skmtc.dev/upgradeagent/apis/upgrade-agent-rest-api.md) · [All operations](https://skmtc.dev/upgradeagent/apis/upgrade-agent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/upgradeagent/apis/upgrade-agent-rest-api/revisions/fbed715712c1?raw)
