Decline Quote
Decline a quote on the customer's behalf. Any held dates come free immediately and the supplier is notified. Equivalent to Delete Quote.
POST /v1/quotes/{id}/decline
Authenticationโ
Requires a valid API key with quotes:write scope.
Path Parametersโ
| Parameter | Type | Description |
|---|---|---|
id | integer | Quote ID |
Request Bodyโ
| Field | Type | Required | Description |
|---|---|---|---|
reason | string | No | Decline reason (max 1000 chars) |
Request Exampleโ
curl -X POST "https://app.equipdash.com/api/v1/quotes/123/decline" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "reason": "Budget changed" }'
Responseโ
Returns 200 OK with the updated quote โ state is declined, decided_at is stamped, and any date hold has been released.
{
"data": {
"id": 123,
"quote_number": "Q-123",
"state": "declined",
"reserves_dates": false,
"decided_at": "2026-02-05T14:00:00+00:00",
"decline_reason": "Budget changed",
"...": "..."
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-05T14:00:00+00:00"
}
}
note
decline_reason is stored as an empty string when no reason is given โ that is how a decline is distinguished from an automatic expiry in the derived state.
Error Responsesโ
| Status | Code | Description |
|---|---|---|
| 401 | authentication_required | Missing or invalid API key |
| 403 | insufficient_scope | API key lacks quotes:write scope |
| 404 | not_found | Quote not found (or belongs to another account) |
| 409 | conflict | The quote has already been decided |
| 422 | validation_error | reason exceeds 1000 characters |