---
title: "Reject quote"
method: POST
path: "/api/v1/quotes/{quote_id}/reject"
tags: ["quotes"]
---

# Reject quote

`POST /api/v1/quotes/{quote_id}/reject`

## Request

- Base URL: `https://devs.adaptyvbio.com`
- URL: `https://devs.adaptyvbio.com/api/v1/quotes/{quote_id}/reject`
- Auth: HTTP bearer

Cancels the quote on Stripe and records the rejection reason and
optional feedback in the database. The linked experiment reverts to
`Draft` so it can be modified and re-submitted.

## Path parameters

- `quote_id` string, required

## Request body

- RejectQuoteRequest: Request payload for rejecting a quote. Provide a reason for rejection to help improve future quotes.
  - `feedback` string, nullable: Additional feedback or specific concerns (optional but helpful)
  - `reason` 'price' | 'scope' | 'timeline' | 'budget' | 'other', required: Allowed reasons for rejecting a quote.

## Response `200`

Quote successfully rejected

- RejectQuoteResponse: Response after rejecting a quote Confirms the quote rejection has been recorded.
  - `id` string, required: Quote ID that was rejected
  - `status` 'draft' | 'open' | 'accepted' | 'canceled' | 'stale', required: Quote status from Stripe's API.

## Other responses

- `403`: Insufficient permissions to reject this quote
- `404`: Quote not found
- `409`: Quote cannot be rejected (wrong status or already has invoice)
- `429`: Stripe rate-limited the quote call; retry after `Retry-After` seconds
- `500`: Internal server error
- `502`: Stripe refused or failed a call on the quote. The cause is on Adaptyv's side and Adaptyv has been alerted; the message says whether retrying can help

---

[API](https://skmtc.dev/adaptyvbio/apis/adaptyv-foundry-api.md) - [All operations](https://skmtc.dev/adaptyvbio/apis/adaptyv-foundry-api/llms.txt) - [OpenAPI document](https://skmtc.dev/adaptyvbio/apis/adaptyv-foundry-api/revisions/5a2228f4bd59?raw)
