bymundi API

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
}