Skip to main content

Payloads

The event body's data object is a rich snapshot of the booking assembled at publish time. It is the same regardless of event type — booking.cancelled simply carries the cancelled state, booking.updated / payment_collected carries the new paid/outstanding figures, and so on.

data
├── booking – the full bookings row
├── agent – the owning agent (or null)
├── agentGroup – the agent's group (or null)
├── cancellationPlan – parsed cancellation plan object (or null)
├── cancellationPolicies – parsed dated refund windows (array/object, or null)
├── properties[] – per-property stay lines
├── meals[] – per-property meal add-ons
├── vas[] – per-property value-added services
├── primaryGuest – the lead guest (or null)
└── secondaryGuests[] – additional guests

Field names are camelCase (Jackson defaults). A section is null when the related record doesn't exist (e.g. agent for an agent-less booking); a null inner field means that column is unset. cancellationPlan / cancellationPolicies are the booking's JSONB columns parsed into objects — not escaped strings.

data.booking

The full bookings row.

FieldTypeFieldType
idstringcouponCodestring
codestringcouponDiscountAmountnumber
bookingDatedatetimecouponDiscountPercentagenumber
checkinDatedatebankOfferCodestring
checkoutDatedatepromotionCodestring
numberOfNightsintpromotionDiscountAmountnumber
adultsintcancellationPlanstring (raw JSON; parsed copy in data.cancellationPlan)
childrenintcancellationPoliciesstring (raw JSON; parsed copy in data.cancellationPolicies)
infantsintcancellationPlanInstantDiscountAmountnumber
numberOfGuestintcancellationPlanOfferTypestring
propertyQuantityintcancellationPlanOfferValuenumber
channelIdstringoriginalNetAmountBeforeTaxnumber
bookingStatusstringoriginalNetAmountAfterTaxnumber
paymentStatusstringnetAmountBeforeTaxnumber
bookingPaymentTermstringnetAmountAfterTaxnumber
splitPaymentTypestringnetBookingAmountBeforeTaxnumber
paymentGatewaystringnetBookingAmountAfterTaxnumber
paymentModestringgstAmountnumber
propertyIdstringbookingGstAmountnumber
propertyUnitIdlongmealCostnumber
guestIdstringnetVasAmountBeforeTaxnumber
agentIdstringplatformFeeAmountnumber
guestManagerstringplatformFeePercentagenumber
sourcestringpaidAmountnumber
bookingTypestringactualPaidAmountnumber
businessCategorystringoutstandingAmountnumber
hasMigratedboolisOtaBookingbool
remarksstringcreatedBy / updatedBystring

data.agent

FieldTypeFieldType
idstringdesignationstring
namestringfocusRegionstring
emailstringmanagerIdstring
phonestringagentGroupIdlong
firstNamestringcountryCodestring
lastNamestringpicturestring
activeboolrolesCsvstring

data.agentGroup

FieldTypeFieldType
idlongagentGroupCategoryIdlong
namestringcitystring
contactPersonNamestringstatestring
emailstringgstIdstring
phonestringactivebool

data.cancellationPlan / data.cancellationPolicies

The booking's cancellation JSONB columns, parsed. cancellationPlan is the plan/offer; cancellationPolicies is the set of dated refund windows. Shape is passed through verbatim from what was stored at booking time (free-form object/array). If a column isn't valid JSON it is passed through as the raw string.

data.properties[]

Per-property stay lines (booking_properties).

FieldTypeFieldType
idlongmealPlanstring
bookingIdstringmealCostnumber
propertyIdstringcouponDiscountAmountnumber
pricenumberpromotionDiscountAmountnumber
totalPricenumberquantityint
taxnumbersecurityDepositAmountnumber
valueAddedServiceCostnumbercheckin / checkoutdate
adultsintplatformFeeAmountnumber
childrenintplatformFeePercentagenumber
metadatastring (JSON)

data.meals[]

Per-property meal add-ons (booking_property_meal).

FieldTypeFieldType
idlongperAdultCostnumber
bookingIdstringperChildCostnumber
bookingPropertyIdlongpricingTypestring
mealIdstringpricingConfigstring (JSON)
mealDatedatenamestring
adultsintattributesstring (JSON)
childrenintmetastring (JSON)

data.vas[]

Per-property value-added services (booking_property_vas).

FieldTypeFieldType
idlongunitPricenumber
bookingIdstringpricingTypestring
bookingPropertyIdlongpricingConfigstring (JSON)
vasIdstringnamestring
variantIdstringdescriptionstring
vasDatedateattributesstring (JSON)
quantityintmetastring (JSON)

data.primaryGuest

FieldTypeFieldType
idstringlastNamestring
namestringcitystring
emailstringdobdate
phonestringanniversarydate
salutationstringcreatedAtdatetime
firstNamestringupdatedAtdatetime

data.secondaryGuests[]

FieldTypeFieldType
iduuidemailstring
bookingIdstringphonestring
positionintcountryCodestring
guestIdstringcitystring
salutationstringdobdate
firstNamestringanniversarydate
lastNamestringcreatedAt / updatedAtdatetime

Full example — booking.updated / payment_collected

{
"id": "9f1c8e2a-6b3d-4e7a-9c10-2f5b8a1d4e33",
"event": "booking.updated",
"occurredAt": "2026-07-23T09:14:05.482Z",
"bookingId": "GWVFXCDFFO",
"reason": "payment_collected",
"data": {
"booking": {
"id": "GWVFXCDFFO",
"code": "GWVFXCDFFO",
"bookingDate": "2026-07-14T10:57:10",
"checkinDate": "2026-09-16",
"checkoutDate": "2026-09-17",
"numberOfNights": 1,
"adults": 2,
"children": 0,
"bookingStatus": "CONFIRMED",
"paymentStatus": "PAID",
"agentId": "user_PZTidD1RNlhnE6",
"guestId": "guest_8b21",
"netBookingAmountAfterTax": 15643.36,
"paidAmount": 15643.36,
"actualPaidAmount": 15643.36,
"outstandingAmount": 0.00,
"cancellationPlan": "{\"type\":\"FLEXIBLE\"}",
"isOtaBooking": false
},
"agent": {
"id": "user_PZTidD1RNlhnE6",
"name": "Akhand Pratap Singh",
"email": "[email protected]",
"phone": "98xxxxxx01",
"agentGroupId": 42,
"designation": "Sales",
"active": true,
"rolesCsv": "ROLE_AGENT,ROLE_SUPER_POWER_AGENT"
},
"agentGroup": {
"id": 42,
"name": "North Sales Group",
"contactPersonName": "R. Sharma",
"email": "[email protected]",
"city": "Delhi",
"state": "DL",
"active": true
},
"cancellationPlan": { "type": "FLEXIBLE" },
"cancellationPolicies": [
{ "from": "2026-07-14", "to": "2026-09-09", "refundPct": 100 },
{ "from": "2026-09-10", "to": "2026-09-15", "refundPct": 50 }
],
"properties": [
{
"id": 90211,
"bookingId": "GWVFXCDFFO",
"propertyId": "prop_1123",
"price": 13256.00,
"totalPrice": 15643.36,
"tax": 2387.36,
"adults": 2,
"children": 0,
"mealPlan": "CP",
"quantity": 1,
"securityDepositAmount": 0,
"checkin": "2026-09-16",
"checkout": "2026-09-17"
}
],
"meals": [
{
"id": 5501,
"bookingId": "GWVFXCDFFO",
"bookingPropertyId": 90211,
"mealId": "meal_breakfast",
"mealDate": "2026-09-16",
"adults": 2,
"children": 0,
"perAdultCost": 350.00,
"pricingType": "PER_PERSON",
"name": "Breakfast"
}
],
"vas": [
{
"id": 7801,
"bookingId": "GWVFXCDFFO",
"bookingPropertyId": 90211,
"vasId": "vas_airport_pickup",
"vasDate": "2026-09-16",
"quantity": 1,
"unitPrice": 1200.00,
"pricingType": "PER_UNIT",
"name": "Airport Pickup"
}
],
"primaryGuest": {
"id": "guest_8b21",
"name": "Rohit Verma",
"email": "[email protected]",
"phone": "99xxxxxx23",
"firstName": "Rohit",
"lastName": "Verma",
"city": "Mumbai"
},
"secondaryGuests": [
{
"id": "b84d3ced-88cd-4c76-894e-a4de42571a1b",
"bookingId": "GWVFXCDFFO",
"position": 2,
"firstName": "Neha",
"lastName": "Verma",
"countryCode": "+91"
}
]
}
}
SNS envelope vs raw delivery

By default (raw message delivery off) SQS receives the standard SNS envelope — your body above is the JSON string in the Message field, and eventType is under MessageAttributes:

{ "Type": "Notification", "MessageId": "…", "TopicArn": "…",
"Message": "{\"id\":\"9f1c…\",\"event\":\"booking.updated\", … }",
"MessageAttributes": { "eventType": { "Type": "String", "Value": "booking.updated" } } }

Subscribe with rawMessageDelivery: true to receive the payload JSON directly as the SQS message body (the eventType attribute is then delivered as an SQS message attribute). See Subscriptions.