quote.updated
A quote changed. changed names the fields.
Needs: quotes:read on the subscription's key · Subject: quote
Envelope
{
"id": "evt_…",
"type": "quote.updated",
"timestamp": "2027-05-01T09:00:00Z",
"subject": {
"object": "quote",
"id": "<id>",
"tripId": "<tripId>"
},
"changed": [
"title"
],
"data": {}
}
data
data is the quote exactly as Get a quote returns it, read at delivery time with the subscription key's permissions.
| Field | Type | Required | Description |
|---|---|---|---|
object |
"quote" | yes | |
id |
uuid | yes | |
tripId |
uuid | yes | |
code |
string | yes | |
name |
string | yes | |
mode |
"package" | "per_item" | yes | |
status |
"draft" | "sent" | "accepted" | "rejected" | "expired" | "superseded" | yes | |
travelers |
integer | yes | |
marginPct |
number | yes | |
finalPriceOverride |
string | null | yes | |
validUntil |
string | null | yes | |
ctaUrl |
string | null | yes | |
templateId |
string | null | yes | |
packages |
object[] | yes | |
packages[].id |
string | yes | |
packages[].name |
string | yes | |
lines |
object | object | object[] | yes | |
totals |
object | yes | |
totals.currency |
"EUR" | yes | |
totals.net |
string | yes | |
totals.marginAmount |
string | yes | |
totals.total |
string | yes | |
totals.finalPrice |
string | yes | |
totals.perPax |
string | yes | |
totals.finalMargin |
string | yes | |
totals.packages |
object[] | yes | |
totals.packages[].id |
string | yes | |
totals.packages[].name |
string | yes | |
totals.packages[].deltaNet |
string | yes | |
totals.packages[].deltaPvp |
string | yes | |
totals.packages[].lineIds |
string[] | yes | |
textOverrides |
object | yes | |
imageOverrides |
object | yes | |
sentAt |
string | null | yes | |
modifiedSinceSent |
boolean | yes | |
acceptedAt |
string | null | yes | |
acceptedVia |
"prospect_link" | "agent" | null | yes | |
acceptedPackageId |
string | null | yes | |
acceptedLineIds |
string[] | yes | |
acceptance |
object | null | yes | What the customer typed when accepting on the quote page — personal data: present only for a key holding travelers:read, only on quote reads (a write's response carries null; read the quote), and every such read is audited. |
acceptance.name |
string | null | yes | |
acceptance.email |
string | null | yes | |
acceptance.phone |
string | null | yes | |
acceptance.message |
string | null | yes | |
engagement |
object | yes | |
engagement.views |
integer | yes | |
engagement.uniqueSessions |
integer | yes | |
engagement.activeSeconds |
integer | yes | |
engagement.ctaClicks |
integer | yes | |
engagement.maxScrollPct |
number | yes | |
engagement.sectionsSeen |
integer | yes | |
engagement.interactions |
integer | yes | |
engagement.lastSeenAt |
string | null | yes | |
engagement.lastCtaAt |
string | null | yes | |
metadata |
object | yes | |
appUrl |
string | null | yes | |
publicUrl |
string | null | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes |
Verify the signature before trusting the body: Webhooks guide.