Update a quote
The update_quote MCP tool: update a quote.
update_quote · writes
REST: PATCH /v1/quotes/{quoteId}
What the model reads
Changes the quote's own fields: name, travelers (must equal the trip's headcount), marginPct (a % of the sale price), finalPriceOverride (the rounded price asked of the customer; null = the computed total), validUntil, ctaUrl, templateId, and the template's editable texts and images (textOverrides, imageOverrides: merged key by key, null restores the template's). metadata merges key by key. Lines: use edit_quote_lines.
Permissions: quotes:write.
Set dryRun: true to preview the effect without writing anything.
Undo: the result names a change id; undo_change reverts it.
Input
| Field | Type | Required | Description |
|---|---|---|---|
quoteId |
uuid | yes | |
name |
string | max 200 chars | |
travelers |
integer | Must equal the trip's headcount. 1–40 | |
marginPct |
number | A % of the SALE price. 0–99 | |
finalPriceOverride |
string | null | The rounded price the customer is asked to pay; null = the computed total. | |
validUntil |
string | null | ||
ctaUrl |
string | null | Where the public page's button leads (WhatsApp, email, a URL). | |
templateId |
uuid | null | A quote template; null = the agency's default. | |
textOverrides |
object | The template's editable texts, by key; null restores the template's text. | |
imageOverrides |
object | The template's editable images (URLs), by key; null restores the template's image. | |
expectedUpdatedAt |
datetime | The quote's updatedAt as you read it; the write is refused (409) if the quote changed since. | |
metadata |
object | ||
dryRun |
boolean | Preview only: plan the change and return its effect without writing. |
Input schema (JSON)
{
"type": "object",
"properties": {
"quoteId": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"travelers": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"description": "Must equal the trip's headcount."
},
"marginPct": {
"type": "number",
"minimum": 0,
"maximum": 99,
"description": "A % of the SALE price."
},
"finalPriceOverride": {
"anyOf": [
{
"type": "string",
"pattern": "^-?\\d{1,9}(\\.\\d{1,2})?$"
},
{
"type": "null"
}
],
"description": "The rounded price the customer is asked to pay; null = the computed total."
},
"validUntil": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
]
},
"ctaUrl": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Where the public page's button leads (WhatsApp, email, a URL)."
},
"templateId": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"description": "A quote template; null = the agency's default."
},
"textOverrides": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 4000
},
{
"type": "null"
}
]
},
"propertyNames": {
"minLength": 1,
"maxLength": 100
},
"description": "The template's editable texts, by key; null restores the template's text."
},
"imageOverrides": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
]
},
"propertyNames": {
"minLength": 1,
"maxLength": 100
},
"description": "The template's editable images (URLs), by key; null restores the template's image."
},
"expectedUpdatedAt": {
"type": "string",
"format": "date-time",
"description": "The quote's updatedAt as you read it; the write is refused (409) if the quote changed since."
},
"metadata": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
]
},
"propertyNames": {
"pattern": "^[A-Za-z0-9_.-]{1,40}$"
}
},
"dryRun": {
"type": "boolean",
"description": "Preview only: plan the change and return its effect without writing."
}
},
"required": [
"quoteId"
],
"additionalProperties": false
}