Skip to main content

Send Quote

Send (or resend) the quote to the customer. Mints the private customer link on first send, emails it, and stamps sent_at. Resending after an edit restamps sent_at, so the quote list always reflects the latest send.

POST /v1/quotes/{id}/send

The customer's email shows a private link (no login required) to a page with everything included, the price, any deposit due on acceptance, and the agreement to read and sign โ€” plus Accept and Decline buttons.

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/send" \
-H "Authorization: Bearer YOUR_API_KEY"

Responseโ€‹

Returns 200 OK with the updated quote. customer_url is now populated and state is sent (until the customer opens the page, which moves it to viewed).

{
"data": {
"id": 123,
"quote_number": "Q-123",
"state": "sent",
"sent_at": "2026-02-01T10:05:00+00:00",
"customer_url": "https://app.equipdash.com/quote/AbC123dEf456...",
"...": "..."
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-01T10:05:00+00:00"
}
}

Error Responsesโ€‹

Send fails with 422 quote_send_failed when:

  • The quote has already been decided (accepted or declined)
  • The quote has expired โ€” extend its quote_valid_until first via Update Quote
  • The customer has no email address on file
StatusCodeDescription
401authentication_requiredMissing or invalid API key
403insufficient_scopeAPI key lacks quotes:write scope
404not_foundQuote not found (or belongs to another account)
422quote_send_failedThe quote cannot be sent (see reasons above)