diff --git a/docs/SDKs/quote-go.md b/docs/SDKs/quote-go.md index 39aeb724..adda15f7 100644 --- a/docs/SDKs/quote-go.md +++ b/docs/SDKs/quote-go.md @@ -289,6 +289,10 @@ quote, err := qc.UpdateQuote(ctx, "quote-uuid", req) Available null-clear helpers: `ClearPriceBookID`, `ClearValidUntil`, `ClearTaxRate`, `ClearRenewalPeriod`. +:::info `Name` is trimmed, and renaming is draft-only +`Name` is trimmed on both `CreateQuote` and `UpdateQuote` — `" Acme "` is stored as `"Acme"` — and a name that is empty once trimmed returns a `400`. A quote can only be renamed while it is a **draft**; on any other status the update is rejected with `Cannot update quote that is not in draft status` (`TemplateID` is the only field exempt from that rule). Rename before you send, because **sending snapshots the quote's current name onto the TurboSign document** — that is the name signers see in the request email and on the signed PDF. +::: + #### DeleteQuote ```go @@ -304,6 +308,8 @@ Creates a new draft quote as a copy of the specified quote. copy, err := qc.DuplicateQuote(ctx, "quote-uuid") ``` +The copy is named **`Copy of `**, truncated to the name column's 255-character limit. Rename it with `UpdateQuote` before sending if that is not what you want signers to see. + The copy is attributed to **whoever ran the duplicate**, not to the original quote's creator — duplicating with an API key produces a quote whose "Prepared by" resolves through that API key and your org quote template. #### ApplyPriceBook @@ -468,18 +474,22 @@ quote, err := qc.VoidQuote(ctx, "quote-uuid", &turbodocx.VoidQuoteRequest{ Handles a `sent` quote that has passed its `validUntil` date. The endpoint **closes out the original quote** — voiding or declining it depending on `Action` — and then **creates a duplicate carrying `NewValidUntil`** as its new validity date. The returned quote is the new duplicate; the original stays terminal. -`Action` is `"void"` or `"decline"`. All three fields are **required**: `Action`, `Reason` (max 190 characters), and `NewValidUntil` (ISO date). +`Action` (`"void"`, `"decline"` or `"renew"`) and `NewValidUntil` (ISO date) are **required**. `Reason` (max 190 characters) is required for `"void"` and `"decline"`, and optional for `"renew"` — a renewal closes nothing out, so there is nothing to give a reason for. Use `"renew"` when the quote's signature request has already expired on its own; use `"void"` or `"decline"` when the quote is merely past its `ValidUntil` and you are closing it yourself. ```go quote, err := qc.HandleExpiredQuote(ctx, "quote-uuid", &turbodocx.HandleExpiredQuoteRequest{ - Action: "void", // required — "void" or "decline" only - Reason: "Customer requested more time", // required — max 190 characters + Action: "void", // required — "void", "decline" or "renew" + Reason: "Customer requested more time", // required for void/decline, optional for renew NewValidUntil: "2026-10-01", // required — ISO date, carried onto the duplicate }) ``` :::warning There is no `extend` or `resend` action -`Action` accepts **only** `"void"` and `"decline"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `NewValidUntil` and it lands on the duplicate it creates. +`Action` accepts **only** `"void"`, `"decline"` and `"renew"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `NewValidUntil` and it lands on the duplicate it creates. +::: + +:::info The replacement draft keeps the original name +Unlike `DuplicateQuote`, the draft this endpoint creates is **not** prefixed with `Copy of ` — re-issuing the same deal keeps the original quote's name, so repeated renewals cannot compound into `Copy of Copy of …`. That matters because the next send snapshots the name onto the TurboSign document. ::: #### DownloadQuotePdf diff --git a/docs/SDKs/quote-java.md b/docs/SDKs/quote-java.md index 554c1b99..0499372c 100644 --- a/docs/SDKs/quote-java.md +++ b/docs/SDKs/quote-java.md @@ -326,6 +326,10 @@ req.setTermDays(60); Quote updated = tq.updateQuote(quoteId, req); ``` +:::info `name` is trimmed, and renaming is draft-only +`name` is trimmed on both `createQuote` and `updateQuote` — `" Acme "` is stored as `"Acme"` — and a name that is empty once trimmed returns a `400`. A quote can only be renamed while it is a **draft**; on any other status the update is rejected with `Cannot update quote that is not in draft status` (`templateId` is the only field exempt from that rule). Rename before you send, because **sending snapshots the quote's current name onto the TurboSign document** — that is the name signers see in the request email and on the signed PDF. +::: + #### `deleteQuote` ```java @@ -352,6 +356,8 @@ Quote copy = tq.duplicateQuote(quoteId); System.out.println("New quote: " + copy.getId()); ``` +The copy is named **`Copy of `**, truncated to the name column's 255-character limit. Rename it with `updateQuote` before sending if that is not what you want signers to see. + The copy is attributed to **whoever ran the duplicate**, not to the original quote's creator — duplicating with an API key produces a quote whose "Prepared by" resolves through that API key and your org quote template. #### `applyPriceBook` @@ -559,19 +565,23 @@ Quote handleExpiredQuote(String id, HandleExpiredQuoteRequest request) Handle a quote that has passed its `validUntil` date. The endpoint **closes out the original quote** — voiding or declining it depending on the action — and then **creates a duplicate carrying `newValidUntil`** as its new validity date. The returned `Quote` is the new duplicate; the original stays terminal. -All three fields are **required**: `action` (`"void"` or `"decline"`), `reason` (max 190 characters), and `newValidUntil` (ISO date). +`action` (`"void"`, `"decline"` or `"renew"`) and `newValidUntil` (ISO date) are **required**. `reason` (max 190 characters) is required for `"void"` and `"decline"`, and optional for `"renew"` — a renewal closes nothing out, so there is nothing to give a reason for. Use `"renew"` when the quote's signature request has already expired on its own; use `"void"` or `"decline"` when the quote is merely past its `validUntil` and you are closing it yourself. ```java HandleExpiredQuoteRequest req = new HandleExpiredQuoteRequest(); -req.setAction("void"); // required — "void" or "decline" only -req.setReason("Expired — re-quoting"); // required — max 190 characters +req.setAction("void"); // required — "void", "decline" or "renew" +req.setReason("Expired — re-quoting"); // required for void/decline, optional for renew req.setNewValidUntil("2026-12-31"); // required — ISO date, carried onto the duplicate Quote quote = tq.handleExpiredQuote(quoteId, req); ``` :::warning There is no `extend` or `resend` action -`action` accepts **only** `"void"` and `"decline"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — set `newValidUntil` and it lands on the duplicate it creates. +`action` accepts **only** `"void"`, `"decline"` and `"renew"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — set `newValidUntil` and it lands on the duplicate it creates. +::: + +:::info The replacement draft keeps the original name +Unlike `duplicateQuote`, the draft this endpoint creates is **not** prefixed with `Copy of ` — re-issuing the same deal keeps the original quote's name, so repeated renewals cannot compound into `Copy of Copy of …`. That matters because the next send snapshots the name onto the TurboSign document. ::: :::note Terminal statuses diff --git a/docs/SDKs/quote-javascript.md b/docs/SDKs/quote-javascript.md index 18e4f2d2..91d3a862 100644 --- a/docs/SDKs/quote-javascript.md +++ b/docs/SDKs/quote-javascript.md @@ -308,6 +308,10 @@ const updated = await TurboQuote.updateQuote('quote-uuid', { }); ``` +:::info `name` is trimmed, and renaming is draft-only +`name` is trimmed on both `createQuote` and `updateQuote` — `' Acme '` is stored as `'Acme'` — and a name that is empty once trimmed returns a `400`. A quote can only be renamed while it is a **draft**; on any other status the update is rejected with `Cannot update quote that is not in draft status` (`templateId` is the only field exempt from that rule). Rename before you send, because **sending snapshots the quote's current name onto the TurboSign document** — that is the name signers see in the request email and on the signed PDF. +::: + #### deleteQuote Soft-delete a quote. @@ -324,6 +328,8 @@ Copy a quote (and its line items) into a new draft. const copy = await TurboQuote.duplicateQuote('quote-uuid'); ``` +The copy is named **`Copy of `**, truncated to the name column's 255-character limit. Rename it with `updateQuote` before sending if that is not what you want signers to see. + The copy is attributed to **whoever ran the duplicate**, not to the original quote's creator — duplicating with an API key produces a quote whose "Prepared by" resolves through that API key and your org quote template. #### applyPriceBook @@ -494,18 +500,22 @@ const quote = await TurboQuote.voidQuote('quote-uuid', { Handle a quote that has passed its `validUntil` date. The endpoint **closes out the original quote** — voiding or declining it depending on `action` — and then **creates a duplicate draft carrying `newValidUntil`** as its new validity date. The returned quote is the new duplicate; the original stays terminal. -All three fields are **required**: `action` (`'void'` or `'decline'`), `reason` (≤ 190 characters), and `newValidUntil` (ISO date). +`action` (`'void'`, `'decline'` or `'renew'`) and `newValidUntil` (ISO date) are **required**. `reason` (≤ 190 characters) is required for `'void'` and `'decline'`, and optional for `'renew'` — a renewal closes nothing out, so there is nothing to give a reason for. Use `'renew'` when the quote's signature request has already expired on its own; use `'void'` or `'decline'` when the quote is merely past its `validUntil` and you are closing it yourself. ```typescript const quote = await TurboQuote.handleExpiredQuote('quote-uuid', { - action: 'void', // 'void' | 'decline' — the only two valid actions - reason: 'Expired — re-quoting', // required, max 190 chars + action: 'void', // 'void' | 'decline' | 'renew' + reason: 'Expired — re-quoting', // required for void/decline, optional for renew newValidUntil: '2026-08-31', // required, ISO date carried onto the duplicate }); ``` :::warning There is no `extend` or `resend` action -`action` accepts **only** `"void"` and `"decline"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does for you — pass `newValidUntil` and it lands on the duplicate it creates. +`action` accepts **only** `"void"`, `"decline"` and `"renew"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does for you — pass `newValidUntil` and it lands on the duplicate it creates. +::: + +:::info The replacement draft keeps the original name +Unlike `duplicateQuote`, the draft this endpoint creates is **not** prefixed with `Copy of ` — re-issuing the same deal keeps the original quote's name, so repeated renewals cannot compound into `Copy of Copy of …`. That matters because the next send snapshots the name onto the TurboSign document. ::: --- diff --git a/docs/SDKs/quote-php.md b/docs/SDKs/quote-php.md index 0399dcc5..ae9741ae 100644 --- a/docs/SDKs/quote-php.md +++ b/docs/SDKs/quote-php.md @@ -260,6 +260,10 @@ $quote = TurboQuote::updateQuote('quote-uuid', new UpdateQuoteRequest( )); ``` +:::info `name` is trimmed, and renaming is draft-only +`name` is trimmed on both `createQuote` and `updateQuote` — `' Acme '` is stored as `'Acme'` — and a name that is empty once trimmed returns a `400`. A quote can only be renamed while it is a **draft**; on any other status the update is rejected with `Cannot update quote that is not in draft status` (`templateId` is the only field exempt from that rule). Rename before you send, because **sending snapshots the quote's current name onto the TurboSign document** — that is the name signers see in the request email and on the signed PDF. +::: + #### deleteQuote ```php @@ -274,6 +278,8 @@ $copy = TurboQuote::duplicateQuote('quote-uuid'); echo "Copy id: {$copy->id}"; ``` +The copy is named **`Copy of `**, truncated to the name column's 255-character limit. Rename it with `updateQuote` before sending if that is not what you want signers to see. + The copy is attributed to **whoever ran the duplicate**, not to the original quote's creator — duplicating with an API key produces a quote whose "Prepared by" resolves through that API key and your org quote template. #### downloadQuotePdf @@ -372,20 +378,24 @@ $quote = TurboQuote::voidQuote('quote-uuid', new VoidQuoteRequest( Handles a quote that has passed its `validUntil` date. The endpoint **closes out the original quote** — voiding or declining it depending on `action` — and then **creates a duplicate carrying `newValidUntil`** as its new validity date. The returned quote is the new duplicate; the original stays terminal. -All three arguments are **required**: `action` (`'void'` or `'decline'`), `reason` (max 190 characters), and `newValidUntil` (ISO date). +`action` (`'void'`, `'decline'` or `'renew'`) and `newValidUntil` (ISO date) are **required**. `reason` (max 190 characters) is required for `'void'` and `'decline'`, and optional for `'renew'` — a renewal closes nothing out, so there is nothing to give a reason for. Use `'renew'` when the quote's signature request has already expired on its own; use `'void'` or `'decline'` when the quote is merely past its `validUntil` and you are closing it yourself. ```php use TurboDocx\Types\Requests\Quote\HandleExpiredQuoteRequest; $quote = TurboQuote::handleExpiredQuote('quote-uuid', new HandleExpiredQuoteRequest( - action: 'void', // required — 'void' or 'decline' only - reason: 'Customer requested more time to review', // required — max 190 characters + action: 'void', // required — 'void', 'decline' or 'renew' + reason: 'Customer requested more time to review', // required for void/decline, optional for renew newValidUntil: '2026-12-31', // required — ISO date, carried onto the duplicate )); ``` :::warning There is no `extend` or `resend` action -`action` accepts **only** `'void'` and `'decline'`. `'extend'` and `'resend'` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `newValidUntil` and it lands on the duplicate it creates. +`action` accepts **only** `'void'`, `'decline'` and `'renew'`. `'extend'` and `'resend'` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `newValidUntil` and it lands on the duplicate it creates. +::: + +:::info The replacement draft keeps the original name +Unlike `duplicateQuote`, the draft this endpoint creates is **not** prefixed with `Copy of ` — re-issuing the same deal keeps the original quote's name, so repeated renewals cannot compound into `Copy of Copy of …`. That matters because the next send snapshots the name onto the TurboSign document. ::: :::note Terminal statuses diff --git a/docs/SDKs/quote-python.md b/docs/SDKs/quote-python.md index fec8d8f1..9e15b43c 100644 --- a/docs/SDKs/quote-python.md +++ b/docs/SDKs/quote-python.md @@ -262,6 +262,10 @@ updated = await TurboQuote.update_quote("quote-uuid", { }) ``` +:::info `name` is trimmed, and renaming is draft-only +`name` is trimmed on both `create_quote` and `update_quote` — `" Acme "` is stored as `"Acme"` — and a name that is empty once trimmed returns a `400`. A quote can only be renamed while it is a **draft**; on any other status the update is rejected with `Cannot update quote that is not in draft status` (`templateId` is the only field exempt from that rule). Rename before you send, because **sending snapshots the quote's current name onto the TurboSign document** — that is the name signers see in the request email and on the signed PDF. +::: + #### `delete_quote` ```python @@ -276,6 +280,8 @@ new_quote = await TurboQuote.duplicate_quote("quote-uuid") # returns new Quote in draft status ``` +The copy is named **`Copy of `**, truncated to the name column's 255-character limit. Rename it with `update_quote` before sending if that is not what you want signers to see. + The copy is attributed to **whoever ran the duplicate**, not to the original quote's creator — duplicating with an API key produces a quote whose "Prepared by" resolves through that API key and your org quote template. #### `download_quote_pdf` @@ -421,18 +427,22 @@ quote = await TurboQuote.void_quote("quote-uuid", { Handles a quote that has passed its `validUntil` date. The endpoint **closes out the original quote** — voiding or declining it depending on `action` — and then **creates a duplicate carrying `newValidUntil`** as its new validity date. The returned quote is the new duplicate; the original stays terminal. -All three keys are **required**: `action` (`"void"` or `"decline"`), `reason` (max 190 characters), and `newValidUntil` (ISO date). +`action` (`"void"`, `"decline"` or `"renew"`) and `newValidUntil` (ISO date) are **required**. `reason` (max 190 characters) is required for `"void"` and `"decline"`, and optional for `"renew"` — a renewal closes nothing out, so there is nothing to give a reason for. Use `"renew"` when the quote's signature request has already expired on its own; use `"void"` or `"decline"` when the quote is merely past its `validUntil` and you are closing it yourself. ```python quote = await TurboQuote.handle_expired_quote("quote-uuid", { - "action": "void", # required — "void" or "decline" only - "reason": "Quote expired", # required — max 190 characters + "action": "void", # required — "void", "decline" or "renew" + "reason": "Quote expired", # required for void/decline, optional for renew "newValidUntil": "2026-12-31", # required — ISO date carried onto the duplicate }) ``` :::warning There is no `extend` or `resend` action -`action` accepts **only** `"void"` and `"decline"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `newValidUntil` and it lands on the duplicate it creates. +`action` accepts **only** `"void"`, `"decline"` and `"renew"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `newValidUntil` and it lands on the duplicate it creates. +::: + +:::info The replacement draft keeps the original name +Unlike `duplicate_quote`, the draft this endpoint creates is **not** prefixed with `Copy of ` — re-issuing the same deal keeps the original quote's name, so repeated renewals cannot compound into `Copy of Copy of …`. That matters because the next send snapshots the name onto the TurboSign document. ::: :::note Terminal statuses diff --git a/docs/SDKs/quote-ruby.md b/docs/SDKs/quote-ruby.md index 900aab3d..ad26f84f 100644 --- a/docs/SDKs/quote-ruby.md +++ b/docs/SDKs/quote-ruby.md @@ -258,6 +258,10 @@ updated = TurboDocxSdk::TurboQuote.update_quote("quote-uuid", ) ``` +:::info `name` is trimmed, and renaming is draft-only +`name` is trimmed on both `create_quote` and `update_quote` — `" Acme "` is stored as `"Acme"` — and a name that is empty once trimmed returns a `400`. A quote can only be renamed while it is a **draft**; on any other status the update is rejected with `Cannot update quote that is not in draft status` (`templateId` is the only field exempt from that rule). Rename before you send, because **sending snapshots the quote's current name onto the TurboSign document** — that is the name signers see in the request email and on the signed PDF. +::: + #### `delete_quote` ```ruby @@ -272,6 +276,8 @@ new_quote = TurboDocxSdk::TurboQuote.duplicate_quote("quote-uuid") # returns new Quote in draft status ``` +The copy is named **`Copy of `**, truncated to the name column's 255-character limit. Rename it with `update_quote` before sending if that is not what you want signers to see. + The copy is attributed to **whoever ran the duplicate**, not to the original quote's creator — duplicating with an API key produces a quote whose "Prepared by" resolves through that API key and your org quote template. #### `download_quote_pdf` @@ -418,18 +424,22 @@ quote = TurboDocxSdk::TurboQuote.void_quote("quote-uuid", Handles a quote that has passed its `validUntil` date. The endpoint **closes out the original quote** — voiding or declining it depending on `action` — and then **creates a duplicate carrying `newValidUntil`** as its new validity date. The returned quote is the new duplicate; the original stays terminal. -All three keys are **required**: `action` (`"void"` or `"decline"`), `reason` (max 190 characters), and `newValidUntil` (ISO date). +`action` (`"void"`, `"decline"` or `"renew"`) and `newValidUntil` (ISO date) are **required**. `reason` (max 190 characters) is required for `"void"` and `"decline"`, and optional for `"renew"` — a renewal closes nothing out, so there is nothing to give a reason for. Use `"renew"` when the quote's signature request has already expired on its own; use `"void"` or `"decline"` when the quote is merely past its `validUntil` and you are closing it yourself. ```ruby quote = TurboDocxSdk::TurboQuote.handle_expired_quote("quote-uuid", - "action" => "void", # required — "void" or "decline" only - "reason" => "Quote expired", # required — max 190 characters + "action" => "void", # required — "void", "decline" or "renew" + "reason" => "Quote expired", # required for void/decline, optional for renew "newValidUntil" => "2026-12-31" # required — ISO date, carried onto the duplicate ) ``` :::warning There is no `extend` or `resend` action -`action` accepts **only** `"void"` and `"decline"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `newValidUntil` and it lands on the duplicate it creates. +`action` accepts **only** `"void"`, `"decline"` and `"renew"`. `"extend"` and `"resend"` do not exist in the API and return a `400`. Extending is what the endpoint already does — pass `newValidUntil` and it lands on the duplicate it creates. +::: + +:::info The replacement draft keeps the original name +Unlike `duplicate_quote`, the draft this endpoint creates is **not** prefixed with `Copy of ` — re-issuing the same deal keeps the original quote's name, so repeated renewals cannot compound into `Copy of Copy of …`. That matters because the next send snapshots the name onto the TurboSign document. ::: :::note Terminal statuses diff --git a/docs/TurboQuote/Renaming a Quote.md b/docs/TurboQuote/Renaming a Quote.md new file mode 100644 index 00000000..bb101340 --- /dev/null +++ b/docs/TurboQuote/Renaming a Quote.md @@ -0,0 +1,130 @@ +--- +title: Renaming a Quote +sidebar_position: 7 +description: Rename a draft quote from the quotes list or the quote page, and understand how a quote's name reaches the signer when you send it for signature. +keywords: + - turboquote + - rename quote + - rename a quote + - quote name + - duplicate quote + - copy of quote + - turbosign + - signature document name + - TurboDocx +--- + +# Renaming a Quote + +A quote's name is not just a label in your quotes list. When you send a quote for signature, that +name is **copied onto the signature document** — it is what your signer sees in the request email +and on the signed PDF. This guide shows you where to rename a quote, and when you can still do it. + +## What You'll Accomplish + +By the end of this guide, you will know how to: + +- ✏️ **Rename a quote in place** from the quote page +- 📋 **Rename a quote from the quotes list**, without opening it +- 🧾 **Clean up a duplicated quote's name** before it reaches a client +- ⏱️ **Recognise when it is too late** to rename + +:::caution Rename before you send +Renaming is only available while a quote is a **draft**. Once you send a quote, its name is locked +— the signature request has already gone out under that name. If you spot a wrong name after +sending, void the request and send a new one. +::: + +
+ +## Why the name matters + +Two ordinary actions produce a name you probably don't want a client to read: + +| How you got here | The name you end up with | +|---|---| +| You **duplicated** a quote to reuse its line items | `Copy of Acme Q3 Proposal` | +| You duplicated the copy again | `Copy of Copy of Acme Q3 Proposal` | + +If you send either of those without renaming, `Copy of Acme Q3 Proposal` is the title on the +signature request your client receives. Renaming takes a couple of seconds and happens before the +send, so it never reaches them. + +:::tip Renewals don't do this +Renewing an expired quote is different from duplicating one. A renewal is the **same deal +re-issued**, so it keeps the original quote's name — no `Copy of` prefix, no matter how many times +you renew it. Only an explicit duplicate adds the prefix. +::: + +
+ +## Option 1: Rename from the quote page + +Use this when you already have the quote open — for example, right after duplicating it. + +**Instruction:** + +- Open the quote you want to rename. +- Click the **quote name** in the page header. It turns into an editable text field. +- Type the new name. +- Press **Enter**, or click anywhere outside the field, to save. + +The name saves immediately — there is no separate Save button. If the save fails, the field stays +open with your text still in it so you can try again without retyping. + +
+ +## Option 2: Rename from the quotes list + +Use this when you want to fix a name without opening the quote. + +**Instruction:** + +- Go to your **quotes list**. +- Find the quote you want to rename. +- Click the **⋮ (three dots)** action menu on that quote's card or row. +- Choose **Rename**. +- Type the new name in the dialog and click **Rename**. + +
+ +## Naming rules + +A few rules apply wherever you rename: + +| Rule | What happens | +|---|---| +| Blank names are not allowed | A name of only spaces is rejected — a quote must have a real name | +| Extra spaces are removed | ` Acme Q3 ` is saved as `Acme Q3` | +| Spaces inside the name are kept | `Acme Corp` keeps both spaces — only the ends are trimmed | +| Maximum length is 255 characters | Longer names are rejected; the check runs after trimming | + +
+ +## When renaming is unavailable + +The **Rename** option is visible but greyed out once a quote leaves draft status — after it has +been sent, accepted, declined, or voided. This is deliberate: the signature request has already +been delivered under the current name, and quietly changing the title of a document someone has +already received would be misleading. + +If you need a different name on a quote you have already sent: + +1. **Void** the existing signature request. +2. **Duplicate** the quote. +3. **Rename** the new draft. +4. **Send** the renamed draft. + +
+ +## Summary + +Here's what to remember: + +1. A quote's name becomes the **signature document's name** when you send it +2. Rename from the **quote page header** or the **⋮ menu** in the quotes list +3. Duplicates arrive as `Copy of …` — rename them before sending +4. Renewals keep the original name and never accumulate `Copy of` prefixes +5. Renaming is **draft-only**; after sending, void and re-send instead + +Your quote now carries a name you're happy for a client to read.