---
title: "Withdraw a placed offer"
method: DELETE
path: "/api/v1/offers/{offerReference}"
tags: ["Execute"]
---

# Withdraw a placed offer

`DELETE /api/v1/offers/{offerReference}`

## Request

- Base URL: `https://www.upgradeagent.ai`
- URL: `https://www.upgradeagent.ai/api/v1/offers/{offerReference}`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://www.upgradeagent.ai/api/oauth/authorize`, token URL `https://www.upgradeagent.ai/api/oauth/token`, scopes: `mcp`)
  - HTTP bearer

The MCP `cancel_bid` tool. Requires `confirm=true` (query or body) once the traveler has agreed; without it nothing is withdrawn (409 CONFIRMATION_REQUIRED).

## Path parameters

- `offerReference` string, required

## Query parameters

- `quoteId` string, required
- `confirm` boolean: Must be true to withdraw.

## Response `200`

Offer withdrawn.

- CancelledOffer
  - `quoteId` string, required
  - `offerReference` string, nullable, required
  - `stage` 'cancelled', required
  - `status` 'cancelled', required
  - `ok` boolean, required
  - `message` string, required
  - `changesRemaining` integer, required

## Other responses

- `400`: More than one placed offer — pass the specific offerReference.
- `401`: Missing, invalid, expired, or revoked bearer token. The WWW-Authenticate challenge points at the OAuth protected-resource metadata.
- `404`: Unknown quote/offer, or owned by another caller.
- `409`: Confirmation required, quote not ready, or cancel not possible here.
- `429`: Per-caller rate limit exceeded.

---

[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)
