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โ
| Parameter | Type | Description |
|---|---|---|
id | integer | Quote ID to duplicate |
Request Bodyโ
All fields are optional overrides โ omit the body to copy the quote as-is.
| Field | Type | Description |
|---|---|---|
customer_id | integer | Quote the same cart for a different customer |
start_date | date | New start date/time |
end_date | date | New end date/time (on or after start_date) |
quote_valid_until | date | Expiry for the new quote (YYYY-MM-DD, today or later). Omitted = the new quote never expires. |
quote_reserves | boolean | Hold 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โ
| 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) |
| 422 | validation_error | Invalid overrides (bad dates, customer from another account) |
| 422 | quote_creation_failed | The new quote could not be built (e.g. an item no longer exists, or dates unavailable when quote_reserves is true) |