# Create a quote

> The create_quote MCP tool: create a quote.

`create_quote` · writes

[REST: `POST /v1/trips/{tripId}/quotes`](https://api.bymundi.com/docs/reference/quotes.create.md)

## What the model reads

Creates a draft quote on a trip, as the quote editor's + button does: seeded with one line per journey and one hotel per stop of the trip's design (unless `seedFromDesign: false`), priced for the trip's headcount at the agency's default margin (unless `marginPct`). Choose `mode` now — it cannot change. Then price and add lines with 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 |
|---|---|---|---|
| `tripId` | uuid | yes |  |
| `name` | string |  | Defaults to `Propuesta N`, as the quote editor names them. max 200 chars |
| `mode` | "package" \| "per_item" |  | `package`: one price, with up to 3 upgrade packages. `per_item`: a basket the customer picks lines from. Cannot change later. default "package" |
| `seedFromDesign` | boolean |  | Start with one line per journey and one hotel per stop of the trip's design, as the quote editor does. default true |
| `templateId` | uuid |  |  |
| `marginPct` | number |  | Defaults to the agency's default margin. 0–99 |
| `finalPriceOverride` | string |  |  |
| `validUntil` | string |  | YYYY-MM-DD |
| `ctaUrl` | string |  | max 500 chars |
| `metadata` | object |  |  |
| `dryRun` | boolean |  | Preview only: plan the change and return its effect without writing. |

## Input schema (JSON)

```json
{
  "type": "object",
  "properties": {
    "tripId": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Defaults to `Propuesta N`, as the quote editor names them."
    },
    "mode": {
      "type": "string",
      "enum": [
        "package",
        "per_item"
      ],
      "default": "package",
      "description": "`package`: one price, with up to 3 upgrade packages. `per_item`: a basket the customer picks lines from. Cannot change later."
    },
    "seedFromDesign": {
      "type": "boolean",
      "default": true,
      "description": "Start with one line per journey and one hotel per stop of the trip's design, as the quote editor does."
    },
    "templateId": {
      "type": "string",
      "format": "uuid"
    },
    "marginPct": {
      "type": "number",
      "minimum": 0,
      "maximum": 99,
      "description": "Defaults to the agency's default margin."
    },
    "finalPriceOverride": {
      "type": "string",
      "pattern": "^-?\\d{1,9}(\\.\\d{1,2})?$"
    },
    "validUntil": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "ctaUrl": {
      "type": "string",
      "maxLength": 500
    },
    "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": [
    "tripId"
  ],
  "additionalProperties": false
}
```
