Skip to main content

Duplicate Quote

Duplicate a quote as a fresh one โ€” the re-quote path after a quote expired, was declined, or its dates were taken. Line items carry over and are repriced from the live catalog; the new quote records where it came from.

POST /v1/quotes/{id}/duplicate

Authenticationโ€‹

Requires a valid API key with quotes:write scope.

Path Parametersโ€‹

ParameterTypeDescription
idintegerQuote ID to duplicate

Request Bodyโ€‹

All fields are optional overrides โ€” omit the body to copy the quote as-is.

FieldTypeDescription
customer_idintegerQuote the same cart for a different customer
start_datedateNew start date/time
end_datedateNew end date/time (on or after start_date)
quote_valid_untildateExpiry for the new quote (YYYY-MM-DD, today or later). Omitted = the new quote never expires.
quote_reservesbooleanHold the new quote's dates (default: false โ€” the hold is not carried over from the original)

Request Exampleโ€‹

curl -X POST "https://app.equipdash.com/api/v1/quotes/123/duplicate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"start_date": "2026-03-10T09:00:00Z",
"end_date": "2026-03-12T17:00:00Z",
"quote_valid_until": "2026-03-05"
}'

Responseโ€‹

Returns 201 Created with the new quote (a new id and quote_number) in the draft state โ€” send it with Send Quote. The original quote is untouched.

{
"data": {
"id": 130,
"quote_number": "Q-130",
"state": "draft",
"reserves_dates": false,
"valid_until": "2026-03-05",
"customer_url": null,
"start_date": "2026-03-10T09:00:00+00:00",
"end_date": "2026-03-12T17:00:00+00:00",
"...": "..."
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-06T09:00:00+00:00"
}
}

What carries overโ€‹

  • All line items (products, bundles with their variation picks, experiences, store products, custom charges), repriced at current catalog rates
  • Customer, dates, and pickup/return locations (unless overridden)
  • Discount and tax-exempt settings
  • Every attached agreement form (override with quote_agreement_form_ids)

Not carried over: the date hold (defaults to false), the expiry date (defaults to no expiry), and the send/view/decision history โ€” the new quote starts fresh.

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)
422validation_errorInvalid overrides (bad dates, customer from another account)
422quote_creation_failedThe new quote could not be built (e.g. an item no longer exists, or dates unavailable when quote_reserves is true)