Skip to main content

Accept Quote

Accept a quote on the customer's behalf (e.g. they confirmed by phone). Converts the quote into a normal confirmed booking at the quoted total โ€” all or nothing โ€” and fires the usual new-booking notifications: booking confirmation email, any waiver requests, and supplier notifications.

POST /v1/quotes/{id}/accept

Authenticationโ€‹

Requires a valid API key with quotes:write scope.

Path Parametersโ€‹

ParameterTypeDescription
idintegerQuote ID

Request Exampleโ€‹

curl -X POST "https://app.equipdash.com/api/v1/quotes/123/accept" \
-H "Authorization: Bearer YOUR_API_KEY"

Responseโ€‹

Returns 200 OK with the quote resource โ€” state is now accepted and the underlying record is a confirmed booking (same ID). Use the Bookings API for everything that happens next: payments, fulfillment, cancellation.

{
"data": {
"id": 123,
"quote_number": "Q-123",
"state": "accepted",
"decided_at": "2026-02-05T14:00:00+00:00",
"...": "..."
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-05T14:00:00+00:00"
}
}

Availability re-checkโ€‹

A quote that holds its dates (reserves_dates: true) accepts unconditionally โ€” the items and spots were reserved when the quote was created.

A quote that does not hold its dates is re-checked against live availability at acceptance. If the dates have been taken in the meantime, nothing is booked and the request returns 409 with code dates_unavailable (the supplier is also emailed so they can offer new dates โ€” typically via Duplicate Quote):

{
"error": {
"code": "dates_unavailable",
"message": "The quoted dates are no longer available.",
"details": []
},
"meta": {
"request_id": "req_abc123"
}
}

Error Responsesโ€‹

StatusCodeDescription
401authentication_requiredMissing or invalid API key
403insufficient_scopeAPI key lacks quotes:write scope
404not_foundQuote not found (or belongs to another account)
409dates_unavailableA non-reserving quote's dates were taken โ€” nothing was booked
422quote_accept_failedThe quote cannot be accepted (already decided, expired, etc.)

Payment at acceptanceโ€‹

When the business has Require online payment when a quote is accepted turned on (Settings โ†’ Quotes), the API cannot run an interactive card step โ€” acceptance still promotes the booking, and the customer is emailed a secure payment link for the amount due. The amount follows the booking widget's payment settings (deposit or full; deposit terms are stamped onto the booking). The response carries a top-level payment object:

{
"data": { "...": "the accepted quote resource" },
"payment": {
"required": true,
"method": "payment_link",
"amount": 45.00,
"is_deposit": true,
"url": "https://app.equipdash.com/pay/AbC123...",
"note": "Online payment is required at acceptance for this business. The customer has been emailed a secure payment link for the amount shown; the booking is confirmed and currently unpaid."
},
"meta": { "request_id": "...", "timestamp": "..." }
}
FieldTypeDescription
payment.requiredbooleanWhether the business requires online payment at acceptance
payment.methodstringpayment_link when required (the customer pays via the emailed link); none otherwise
payment.amountnumberThe amount due now (the widget-resolved deposit, or the full total)
payment.is_depositbooleanWhether the amount is a deposit (balance due later)
payment.urlstring|nullThe payment link URL (also emailed to the customer); null when no payment is required or the link could not be created

The booking is confirmed and unpaid until the customer pays โ€” identical to the state the booking widget leaves when online payment cannot complete.