Update Quote
Update a quote while it is still open (not yet accepted, declined or cancelled). Quote metadata updates in place; line-item edits use the same keys as Update Booking and are repriced by the same engine.
PATCH /v1/quotes/{id}
Authenticationโ
Requires a valid API key with quotes:write scope.
Path Parametersโ
| Parameter | Type | Description |
|---|---|---|
id | integer | Quote ID |
Request Bodyโ
All fields are optional โ send only what you want to change.
Quote metadataโ
| Field | Type | Description |
|---|---|---|
quote_reserves | boolean | Turn the date hold on or off |
quote_valid_until | date|null | New expiry date (YYYY-MM-DD). Extend it to revive an expired quote, or send null so the quote never expires. |
quote_agreement_form_ids | integer[]|null | Replace the FULL agreement set (published waiver/form documents). Send [] (or null) to remove all agreements โ none are required. Takes precedence over quote_agreement_form_id |
quote_agreement_form_id | integer|null | Legacy single-form equivalent: attach one document, or null to remove it |
Booking fieldsโ
The same update keys as Update Booking: customer_id, start_date, end_date, notes, products, bundles, experiences, store_products, custom_charges, rebuild, discount, discount_type, discount_value. Line edits flow through the shared booking update path, so the quote reprices exactly as a booking would.
Request Exampleโ
curl -X PATCH "https://app.equipdash.com/api/v1/quotes/123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"quote_valid_until": "2026-03-15",
"quote_reserves": false
}'
Responseโ
Returns 200 OK with the updated quote โ see Quotes Overview โ The Quote Object.
Editing does not notify the customer. Call Send Quote again โ the customer's existing link always shows the latest version, and resending restamps sent_at.
Error Responsesโ
Quote already decidedโ
Accepted, declined and cancelled quotes cannot be updated:
{
"error": {
"code": "conflict",
"message": "Cannot update a quote that has been accepted.",
"details": []
}
}
| 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 accepted, declined or cancelled |
| 422 | validation_error | Invalid request body |
| 422 | quote_update_failed | The edit could not be applied (bad ids, unavailable dates) |