All Collections
Webhooks and API integration
Webhooks for reservations in
Webhooks for reservations in

Webhooks are a way to receive reservation details from to your server.

Pierre-Camille Hamana avatar
Written by Pierre-Camille Hamana
Updated over a week ago

Webhooks are a way to receive data to your server (or another service like Zapier).

To set up a webhook:

  1. Go to Apps

  2. Click on Webbooks

  3. Type in a URL where you'd like a webhook sent and click Add

Webhooks can be sent whenever you receive a new reservation, and every time the "status" of the reservation has changed. This status change can include:

  • Pending

  • Accepted

  • Booking

  • Staying (only for Vrbo - a reservation is currently in progress)

  • Waiting for payment

  • Cancelled

  • Check-in or check-out date change

  • Number of guest change

Webhooks are sent to the given URL with a POST request. The data is in the request body, encoded in a JSON format.

In PHP for example, you can extract the webhook data as an array with:

$reservation = json_decode(file_get_contents('php://input'), true);  

The webhook will look like this, with the relevant reservation id for your host profile, the guest's profile, and the listing's id.

    "user_id": 123457890,
    "code": "HMABCDEF124",
  "channel": "airbnb-official",
"start_date": "2022-11-27",
"end_date": "2022-12-09",
"checkin_time": "2022-11-27T15:00:00-05:00",
"checkout_time": "2022-12-09T11:00:00-05:00",
"nights": 12,
"guests": 3,
"adults": 2,
"children": 1,
"infants": 0,
"pets": 0,
    "status": "accepted",
    "listing": {
        "id": 12346789,
"property_id": 123456,
        "name": "Nice and functional private room",
"nickname": "Brannan St Room",
        "address": "888 Brannan Street, San Francisco, CA 94107",
        "picture_url": "",
        "lat": -35.8442,
        "lng": 100.98848
"child_reservations": [],
    "guest": {
        "id": 12345,
        "first_name": "Pierre",
        "last_name": "Hamana",
        "picture_url": "",
        "location": "Bruxelles, Belgium",
        "phone": "+33 X XX XX XX XX"
"phone_last_4": 1234,
"email": "[email protected]"
    "currency": "USD",
    "security_price": "0.00",
"security_price_formatted": "$0.00",
"per_night_price": 128.08,
"per_night_price_formatted": "$128.08",
"base_price": 1462,
"base_price_formatted": "$1,462.00",
"extras_price": 75,
"extras_price_formatted": "$75.00",
"subtotal": "1537.00",
"subtotal_formatted": "$1,537.00",
"tax_amount": "285.20",
"tax_amount_formatted": "$285.20",
"guest_fee": 216.99,
"guest_fee_formatted": "$216.99",
"total_price": 2039.19,
"total_price_formatted": "$2,039.19",
"host_service_fee": 46.11,
"host_service_fee_formatted": "$46.11",
"payout_price": 1490.89,
"payout_price_formatted": "$1,490.89",
"created_at": 1668787867,
"updated_at": 1668787867,
"sent_at": 1668787871

The extras_price data point is the cleaning fee.

The confirmation code, provided by the platform, is always identical in relation with the same reservation and can be treated as a unique ID.

If a webhook takes longer than 30 seconds to respond, it is considered a timeout and will be retried. We will resend webhook notifications progressively for up to 24 hours, until the webhook responds with a successful HTTP response code (i.e. ‘2xx’) within 30 seconds.

All webhooks include a "Content-Type: application/json" header in every POST request that is sent to your server. 

The webhooks are sent from IP addresses within the range. This means you can expect requests from addresses between and

Did this answer your question?