Skip to main content
Glama

update_ticket

Destructive

Update the attendee details (name and email) and metadata held on one event ticket. Use list_tickets first to discover the ticket ID by attendee name, email, or ticket short ID. Only supplied fields change, the booking and customer records are untouched, and the booking ticket PDF is regenerated when attendee details change. Metadata operations are per-entry: a value adds or overwrites its key, null deletes it, other entries survive. Mutating - confirm the target ticket before calling.

Input Schema

NameRequiredDescriptionDefault
metadataNoPer-entry metadata operations, matching the ticket validation endpoint: each entry adds or overwrites its key, `null` deletes it, and entries not named are left untouched. A ticket holds at most 20 entries. Door staff also write metadata during check-in, so avoid replace-everything sync patterns.
ticketIdYesThe ID of the ticket to update. Use `list_tickets` first if you need to discover the ticket ID by attendee name, email, or ticket short ID.
attendeeNameNoAttendee name held on the ticket. Shown on the ticket PDF and the guest list. Send `null` to clear.
attendeeEmailNoAttendee email held on the ticket. Trimmed and lowercased before storage. Cannot be cleared via this endpoint. Changing it does not affect the booking or customer records.

Output Schema

NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / data / properties / cancelReason
      Added value: +{
      +  "description": "Why the seller canceled this ticket. Set only when the ticket was canceled on its own: when the whole booking is canceled, the reason is kept on the booking.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / data / properties / canceledBy
      Added value: +{
      +  "description": "ID of the dashboard user who canceled this ticket. Set only when the ticket was canceled on its own.",
      +  "type": "string"
      +}
  2. Changed3 schema fields changed
    • removedOutput schema / properties / data / properties / attendee
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "The attendee this ticket is for, with their answers, on events that collect attendee details. Absent until the booker or seller adds them. `attendeeName` and `attendeeEmail` follow it.",
      -  "properties": {
      -    "answers": {
      -      "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "element": {
      -            "anyOf": [
      -              {
      -                "enum": [
      -                  "checkbox",
      -                  "quantity",
      -                  "multiple-choice",
      -                  "select",
      -                  "multi-select",
      -                  "po-number",
      -                  "text",
      -                  "textarea",
      -                  "number",
      -                  "date-time",
      -                  "date",
      -                  "time",
      -                  "address",
      -                  "email",
      -                  "tax-id",
      -                  "phone",
      -                  "country"
      -                ],
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "fieldId": {
      -            "description": "Unique field ID.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "label": {
      -            "description": "Label shown for the field.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "meta": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "reference": {
      -            "description": "Reference key for the field.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "type": {
      -            "anyOf": [
      -              {
      -                "enum": [
      -                  "",
      -                  "company-name",
      -                  "po-number",
      -                  "name",
      -                  "first-name",
      -                  "last-name",
      -                  "email",
      -                  "billing-email",
      -                  "phone",
      -                  "address-line1",
      -                  "address-city",
      -                  "address-country",
      -                  "address-line2",
      -                  "address-postal_code",
      -                  "address-state",
      -                  "shipping-name",
      -                  "shipping-phone",
      -                  "shipping-address-line1",
      -                  "shipping-address-city",
      -                  "shipping-address-country",
      -                  "shipping-address-line2",
      -                  "shipping-address-postal_code",
      -                  "shipping-address-state",
      -                  "tax-id"
      -                ],
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "value": {
      -            "description": "Submitted value for the field.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "values": {
      -            "anyOf": [
      -              {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "email": {
      -      "description": "The attendee's email address.",
      -      "type": "string"
      -    },
      -    "flagged": {
      -      "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
      -      "type": "boolean"
      -    },
      -    "name": {
      -      "description": "The attendee's name.",
      -      "type": "string"
      -    },
      -    "reviewedAt": {
      -      "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
      -      "format": "date-time",
      -      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • changedOutput schema / properties / data / properties / attendeeEmail / description
      Previous value: -"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."New value: +"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time; editable via the ticket update endpoint."
    • changedOutput schema / properties / data / properties / attendeeName / description
      Previous value: -"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."New value: +"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time; editable via the ticket update endpoint."
  3. Changed1 schema field changed
    • changedOutput schema / properties / data / properties / status / description
      Previous value: -"Lifecycle state of the ticket. `PAID` is valid for admission, `CANCELED` was voided by refund or cancellation and must not be admitted."New value: +"Lifecycle state of the ticket. `PAID` is valid for admission, `CANCELED` was canceled by the seller and must not be admitted. A refund alone never cancels a ticket."
  4. Changed3 schema fields changed
    • addedOutput schema / properties / data / properties / attendee
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The attendee this ticket is for, with their answers, on events that collect attendee details. Absent until the booker or seller adds them. `attendeeName` and `attendeeEmail` follow it.",
      +  "properties": {
      +    "answers": {
      +      "description": "The attendee's answers to the event's attendee questions, in the same shape as the booking's `fields`. `reference` matches the question's reference. Name and email are not repeated here.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "element": {
      +            "anyOf": [
      +              {
      +                "enum": [
      +                  "checkbox",
      +                  "quantity",
      +                  "multiple-choice",
      +                  "select",
      +                  "multi-select",
      +                  "po-number",
      +                  "text",
      +                  "textarea",
      +                  "number",
      +                  "date-time",
      +                  "date",
      +                  "time",
      +                  "address",
      +                  "email",
      +                  "tax-id",
      +                  "phone",
      +                  "country"
      +                ],
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "fieldId": {
      +            "description": "Unique field ID.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "label": {
      +            "description": "Label shown for the field.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "meta": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "reference": {
      +            "description": "Reference key for the field.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "type": {
      +            "anyOf": [
      +              {
      +                "enum": [
      +                  "",
      +                  "company-name",
      +                  "po-number",
      +                  "name",
      +                  "first-name",
      +                  "last-name",
      +                  "email",
      +                  "billing-email",
      +                  "phone",
      +                  "address-line1",
      +                  "address-city",
      +                  "address-country",
      +                  "address-line2",
      +                  "address-postal_code",
      +                  "address-state",
      +                  "shipping-name",
      +                  "shipping-phone",
      +                  "shipping-address-line1",
      +                  "shipping-address-city",
      +                  "shipping-address-country",
      +                  "shipping-address-line2",
      +                  "shipping-address-postal_code",
      +                  "shipping-address-state",
      +                  "tax-id"
      +                ],
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "value": {
      +            "description": "Submitted value for the field.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "values": {
      +            "anyOf": [
      +              {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "Chosen option values of a multi-select field (an option without a value is named by its label), in the order the options are defined. `value` holds the same values joined with \", \". The matching labels, as they were when the answer was written, are in `meta.selectedOptionLabels` and joined in `meta.selectedOptionLabel`. Absent on every other field type."
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "email": {
      +      "description": "The attendee's email address.",
      +      "type": "string"
      +    },
      +    "flagged": {
      +      "description": "True when the event's email domain rule flagged this attendee for the seller to review. It stays true after review; see `reviewedAt`.",
      +      "type": "boolean"
      +    },
      +    "name": {
      +      "description": "The attendee's name.",
      +      "type": "string"
      +    },
      +    "reviewedAt": {
      +      "description": "ISO-8601 UTC timestamp the seller marked this flagged attendee as reviewed. The booking counts as `flagged` while any flagged attendee has none.",
      +      "format": "date-time",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedOutput schema / properties / data / properties / attendeeEmail / description
      Previous value: -"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time; editable via the ticket update endpoint."New value: +"Attendee email held on the ticket. The ticket is delivered here. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."
    • changedOutput schema / properties / data / properties / attendeeName / description
      Previous value: -"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time; editable via the ticket update endpoint."New value: +"Attendee name held on the ticket, shown on the ticket PDF and the guest list. Set from the purchaser at booking time, or from the ticket's `attendee` on events that collect attendee details; editable via the ticket update endpoint."
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint=true annotation, it discloses the real blast radius: only supplied fields change, booking and customer records are untouched, and the ticket PDF is regenerated on attendee changes. It also explains per-entry metadata merge semantics and warns about concurrent door-staff writes, which a caller could not infer from the schema alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the purpose and the discovery prerequisite, then the non-obvious side effects. The metadata merge rule is stated twice (description and schema), a modest redundancy, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-ticket mutation with 4 parameters and an output schema, the description covers prerequisites, side effects, partial-update behavior, and metadata merge rules. Nothing an agent needs to avoid a bad write is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuinely useful meaning: null semantics for clearing, that attendeeEmail cannot be cleared, and that partial updates leave unspecified fields intact. It does not restate formats or the email regex, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ("Update the attendee details ... and metadata held on one event ticket") and scopes it to a single ticket, which cleanly separates it from siblings like update_ticket_type and update_ticket_group. An agent can identify exactly what this tool mutates without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes discovery through `list_tickets` (by attendee name, email, or short ID) and warns to confirm the target ticket before calling. It stops short of stating when a different update tool is appropriate, but the prerequisite guidance is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources