Skip to main content

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โ€‹

ParameterTypeDescription
idintegerQuote ID

Request Bodyโ€‹

All fields are optional โ€” send only what you want to change.

Quote metadataโ€‹

FieldTypeDescription
quote_reservesbooleanTurn the date hold on or off
quote_valid_untildate|nullNew expiry date (YYYY-MM-DD). Extend it to revive an expired quote, or send null so the quote never expires.
quote_agreement_form_idsinteger[]|nullReplace 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_idinteger|nullLegacy 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.

Resend after editing

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": []
}
}
StatusCodeDescription
401authentication_requiredMissing or invalid API key
403insufficient_scopeAPI key lacks quotes:write scope
404not_foundQuote not found (or belongs to another account)
409conflictThe quote has already been accepted, declined or cancelled
422validation_errorInvalid request body
422quote_update_failedThe edit could not be applied (bad ids, unavailable dates)