Enquiries Channel manager Bookings Your website Booking engine Pricing
v2026-09

The booking object

One representation, returned by every booking endpoint and carried as the data block of every booking.changed webhook. Write one parser.

Fields

Field Type Description
id integer Doorloom's booking id. Use it in the REST paths.
external_booking_id string|null The id you supplied at create.
external_reference string|null Your source.reference, e.g. the OTA confirmation code.
revision integer Increments on every change, from either side.
origin string "partner" or "doorloom" — who made the latest change.
status string pending, confirmed, cancelled, completed or refunded.
property.doorloom_id integer The booked property.
property.external_id string|null Your alias for it.
check_in string Y-m-d.
check_out string Y-m-d. Exclusive — the guest leaves this morning.
guests.adults integer Total adults across all units.
guests.children integer Total children across all units.
guest.name string Lead guest name.
guest.phone_code string Dialling code, e.g. "+91".
guest.mobile string Mobile number without the dialling code.
units[].property object {doorloom_id, external_id} for the unit's property.
units[].inventory_id integer The allocated unit.
units[].external_unit_id string|null Your alias for it.
units[].adults integer Adults in this unit.
units[].children integer Children in this unit.
units[].meal_plan string|null EP, CP, MP or AP.
units[].stay_price number Room money for this unit across the stay.
units[].meal_total number Meal money for this unit across the stay.
units[].line_total number stay_price plus meal_total.
pricing.currency string Always "INR".
pricing.total number Booking total. For a booking you created, this is the total you sent.
pricing.advance number Recorded as collected.
pricing.balance number Still owed.
pricing.partner_breakdown object|null The pricing.breakdown you sent at create, stored verbatim and never interpreted.
payment object|null The payment object you sent, stored verbatim.
source.channel string|null The channel you named at create, e.g. "airbnb".
source.reference string|null Your reference on that channel.
notes string|null Free-text note on the booking.
cancelled_at string|null ISO-8601 in Asia/Kolkata. Non-null once cancelled.
cancellation_note string|null Why it was cancelled.
created_at string ISO-8601 in Asia/Kolkata.
updated_at string ISO-8601 in Asia/Kolkata.

Example

json
{
    "id": 55231,
    "external_booking_id": "PMS-100234",
    "external_reference": "HM-77",
    "revision": 2,
    "origin": "doorloom",
    "status": "confirmed",
    "property": {
        "doorloom_id": 902,
        "external_id": "VILLA-9"
    },
    "check_in": "2026-10-12",
    "check_out": "2026-10-14",
    "guests": {
        "adults": 4,
        "children": 1
    },
    "guest": {
        "name": "Asha Rao",
        "phone_code": "+91",
        "mobile": "9876543210"
    },
    "units": [
        {
            "property": {
                "doorloom_id": 902,
                "external_id": "VILLA-9"
            },
            "inventory_id": 31,
            "external_unit_id": "ROOM-A",
            "adults": 2,
            "children": 1,
            "meal_plan": "CP",
            "stay_price": 8000,
            "meal_total": 2600,
            "line_total": 10600
        },
        {
            "property": {
                "doorloom_id": 902,
                "external_id": "VILLA-9"
            },
            "inventory_id": 32,
            "external_unit_id": "ROOM-B",
            "adults": 2,
            "children": 0,
            "meal_plan": "EP",
            "stay_price": 8000,
            "meal_total": 0,
            "line_total": 8000
        }
    ],
    "pricing": {
        "currency": "INR",
        "total": 18600,
        "advance": 4000,
        "balance": 14600,
        "partner_breakdown": {
            "room": 16000,
            "meals": 2600
        }
    },
    "payment": {
        "status": "partial",
        "amount_collected": 4000,
        "collected_by": "partner",
        "reference": "pay_123"
    },
    "source": {
        "channel": "airbnb",
        "reference": "HM-77"
    },
    "notes": "Late arrival, around 11pm",
    "cancelled_at": null,
    "cancellation_note": null,
    "created_at": "2026-10-01T15:58:12+05:30",
    "updated_at": "2026-10-01T16:22:40+05:30"
}

Three fields worth understanding

revision

Starts at 1 and increments on every change, from either side. It is what If-Match compares against on update, and it is the cheapest way to tell whether a booking you hold is stale.

origin

Who made the most recent change. "partner" is you; "doorloom" is the host editing in the app. On a webhook this is the field that separates an echo of your own write from a change you actually need to apply.

status

Field Type Description
pending string Held but not confirmed. Holds inventory exactly as a confirmed booking does.
confirmed string The normal state of a live booking.
cancelled string Terminal. Inventory is released. The booking cannot be modified.
completed string The stay has finished.
refunded string Money was returned.

What is not here

  • The guest\'s email and country. They can be sent at create and are stored, but are not returned. Keep your own copy.
  • Anything Doorloom computed about the price. pricing.total is the number you supplied. partner_breakdown and payment are your own objects handed back verbatim, never interpreted.
  • Per-night detail. A booking carries totals per unit, not a nightly breakdown. Nightly prices live in rates.changed.

Where you get it

  • Create — as data on a 201, or on a 200 with duplicate: true added.
  • Retrieve — singly, or as an array in a paged list.
  • Update and cancel — the state after the change.
  • booking.changed — as the event\'s data block.

Something unclear or wrong on this page? Write to [email protected] and tell us which page — we would rather fix the doc than answer the ticket twice.