Pulse for Booking.com Partners icon

Pulse Data API: Endpoints and Fields

Booking.com Hotels & Vacation Rentals · Business

Pulse for Booking.com Partners is the property-manager app from Booking.com Hotels & Vacation Rentals, the accommodation arm of Booking Holdings, for hotels, B&Bs and vacation-rental hosts who list on Booking.com. After a partner signs in with the same extranet account used on admin.booking.com, the home screen is a day board of arrivals, departures and stay-overs; from there staff open the availability calendar to set rooms to sell and occupancy prices, search a reservation by guest name or booking number, open the guest-message inbox (including Request to Book rows that expire in hours), check payouts and payment transactions, read guest reviews and pull a daily report of yesterday's bookings and sold-out rooms. It is published worldwide for front-desk and revenue staff who need to open or close rooms, reply to guests and see what they will be paid without sitting at the desktop extranet, and it fills the same supply-side role as Expedia Partner Central and Airbnb's host app on the other OTAs.

A partner payout window returns uuid, dateFrom/dateUntil, amountFormatted and flags such as hasPayoutIssued and hasPayoutPending, with nextWithdrawalDate on the metadata; opened, a single payout adds totalPayoutAmount, totalCommission, totalCityTax, totalWithheldTaxes and per-stay reservationAmount. The day board groups stays into arrivals, departures, stayOvers, cancelled and noShows, each carrying guestName and stayPeriod; the detail card adds totalPrice, commissionAmount, totalEarnings, paymentStatus and payoutMethod.

Room inventory is a calendar of roomsToSell, availableRooms, netBooked and occupancy prices in hotelCurrencyCode. Guest threads attach reservationId, checkinDate and an isReplyNeeded flag; Request to Book rows add rtbRequestStatus, totalPartnerPrice and hoursToExpire. PMS and finance teams reconcile those payouts against the property ledger, revenue managers push closed dates and occupancy rates into a channel manager, and front-desk tools surface arrivals plus unanswered guest threads. openData Studio turns that partner surface into callable open data.

Screenshots

  • Pulse for Booking.com Partners screenshot 1
  • Pulse for Booking.com Partners screenshot 2
  • Pulse for Booking.com Partners screenshot 3
  • Pulse for Booking.com Partners screenshot 4
  • Pulse for Booking.com Partners screenshot 5
  • Pulse for Booking.com Partners screenshot 6
  • Pulse for Booking.com Partners screenshot 7
  • Pulse for Booking.com Partners screenshot 8

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • OAuth2 token issue

    POST /v1/pulse/auth/token opendata

    Exchanges an Accounts Portal authorization code for the partner access_token and refresh_token that every GraphQL and XY call then carries as Authorization: Bearer.

    Auth: OAuth2 authorization-code exchange; client posts grant_type, code and redirect_uri.

    • access_token
    • refresh_token
    • expires_in
    POST /v1/pulse/auth/token HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code&code=spl_xxxx&redirect_uri=com.booking.pulse://oauth2callback
    {
      "access_token": "eyJhbGciOiJSUzI1NiIs...",
      "refresh_token": "rt_7f3a...",
      "expires_in": 3600
    }
  • Partner user info

    GET /v1/pulse/auth/partner osint

    Reads the signed-in partner's loginName and partnerAuthName after token issue — the identity shown on the Pulse home account switcher.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • loginName
    • partnerAuthName
    GET /v1/pulse/auth/partner HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    {
      "loginName": "[email protected]",
      "partnerAuthName": "Seaside Inn Extranet"
    }
  • Payout history by year

    POST /v1/pulse/finance/payouts openfinance

    Pages the partner's yearly payout windows with issued/pending/on-hold flags, formatted and raw amounts, and the nextWithdrawalDate shown on the finance tab.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • uuid
    • dateFrom
    • dateUntil
    • amountFormatted
    • amount
    • currency
    • hasPayoutIssued
    • hasPayoutPending
    • hasPspRefusal
    • hasBankDetailError
    • hasPayoutsOnHold
    • nextWithdrawalDate
    • operatingYears
    POST /v1/pulse/finance/payouts HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PayoutHistory",
      "query": "query PayoutHistory($input: PayoutsInYear!, $includeRawAmount: Boolean!) { payoutHistory(input: $input) { payoutHistoryMonths { payouts { uuid dateFrom dateUntil amount { amountFormatted amount currency } payoutFlags { hasPayoutIssued hasPayoutPending } } } payoutMetadata { nextWithdrawalDate operatingYears } } }",
      "variables": {"input": {"year": 2026}, "includeRawAmount": true}
    }
    {
      "data": {
        "payoutHistory": {
          "payoutHistoryMonths": [{
            "month": 9,
            "year": 2026,
            "payouts": [{
              "uuid": "po_9c21e4",
              "dateFrom": "2026-09-01",
              "dateUntil": "2026-09-15",
              "hasFailed": false,
              "amount": {"amountFormatted": "EUR 4,812.40", "amount": 4812.4, "currency": "EUR"},
              "payoutFlags": {"hasPayoutIssued": true, "hasPayoutPending": false, "hasPspRefusal": false, "hasBankDetailError": false, "hasPayoutsOnHold": false}
            }]
          }],
          "payoutMetadata": {"nextWithdrawalDate": "2026-10-03", "operatingYears": [2024, 2025, 2026]}
        }
      }
    }
  • Single payout breakdown

    POST /v1/pulse/finance/payouts/{payoutId} openfinance

    Opens one payout uuid into commission, city tax, VAT, withheld-tax and per-reservation reservationAmount rows used on the payout-detail screen.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • totalPayoutAmount
    • totalCommission
    • totalCityTax
    • totalWithheldTaxes
    • totalVat
    • totalCostOfPayments
    • totalResAmountWithoutCommission
    • isNetting
    • bookerName
    • reservationAmount
    • checkinDate
    • checkoutDate
    POST /v1/pulse/finance/payouts/{payoutId} HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PayoutDetails",
      "variables": {"payoutInput": {"uuid": "po_9c21e4"}, "includeReservationDetails": true}
    }
    {
      "data": {
        "payout": {
          "isNetting": false,
          "summaryInfo": {
            "totalPayoutAmount": {"amountFormatted": "EUR 4,812.40"},
            "totalCommission": {"amountFormatted": "EUR 721.86"},
            "totalCityTax": {"amountFormatted": "EUR 96.00"},
            "totalWithheldTaxes": {"amountFormatted": "EUR 0.00"},
            "totalVat": {"amountFormatted": "EUR 144.37"},
            "totalCostOfPayments": {"amountFormatted": "EUR 38.50"},
            "totalResAmountWithoutCommission": {"amountFormatted": "EUR 5,534.26"}
          },
          "reservations": [{
            "id": "3819201456",
            "bookerName": "M. Rossi",
            "checkinDate": "2026-09-04",
            "checkoutDate": "2026-09-07",
            "reservationAmount": {"amountFormatted": "EUR 612.00"}
          }]
        }
      }
    }
  • Availability calendar fetch

    POST /v1/pulse/inventory/calendar opendata

    Loads the Pulse availability calendar: per-date roomsToSell, netBooked, closed flags and occupancy prices in hotelCurrencyCode.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • hotelCurrencyCode
    • roomsToSell
    • availableRooms
    • netBooked
    • closed
    • occupancy
    • minStayThrough
    • minAdvanceRes
    POST /v1/pulse/inventory/calendar HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PulseAvailabilityFetch",
      "variables": {"request": {"propertyId": 1234567, "dateFrom": "2026-10-01", "dateTo": "2026-10-31"}}
    }
    {
      "data": {
        "pulseAvailabilityFetch": {
          "hotelInfo": {
            "id": 1234567,
            "currencyCode": {"hotelCurrencyCode": "EUR"},
            "rooms": [{"id": 42, "name": "Double Deluxe", "editability": {"closed": true, "roomsToSell": true}}]
          },
          "dates": [{
            "date": "2026-10-12",
            "roomInfo": [{"roomId": 42, "netBooked": 2, "closed": false, "roomsToSell": 3, "availableRooms": 1, "status": "open"}],
            "rateInfo": [{"rateId": 9, "closed": false, "prices": [{"occupancy": 2, "value": 148.0}], "minStayThrough": 1}]
          }]
        }
      }
    }
  • Availability calendar update

    POST /v1/pulse/inventory/calendar/update opendata

    Writes closed flags, roomsToSell and occupancy prices back to the calendar; returns per-field success plus errors and warnings.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • success
    • dates
    • roomId
    • rateId
    • occupancy
    • fieldName
    • fieldValue
    • errors
    • warnings
    POST /v1/pulse/inventory/calendar/update HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "PulseAvailabilityUpdate",
      "variables": {"input": {"propertyId": 1234567, "updates": [{"roomId": 42, "date": "2026-10-12", "roomsToSell": 0, "closed": true}]}}
    }
    {
      "data": {
        "pulseAvailabilityUpdate": {
          "result": [{
            "success": true,
            "dates": ["2026-10-12"],
            "roomId": 42,
            "rateId": null,
            "occupancy": null,
            "fieldName": "roomsToSell",
            "fieldValue": "0",
            "errors": [],
            "warnings": []
          }]
        }
      }
    }
  • Reservation search

    POST /v1/pulse/stays/search opendata

    Searches reservations by guest or booking number over a date window, returning reservationStatus, checkin and bookerCountryCode for the search screen.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • reservationId
    • reservationStatus
    • checkin
    • guestNames
    • bookerCountryCode
    POST /v1/pulse/stays/search HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "ReservationsSearch",
      "variables": {"searchTerm": "Rossi", "dateFrom": "2026-10-01", "dateTo": "2026-10-31", "lang": "en"}
    }
    {
      "data": {
        "reservations": {
          "reservations": [{
            "reservationId": "3819201456",
            "reservationStatus": "ok",
            "checkin": "2026-10-12",
            "guestInfo": {"guestNames": "M. Rossi", "bookerCountryCode": "IT"}
          }]
        }
      }
    }
  • Guest inbox conversations

    POST /v1/pulse/inbox/threads osint

    Lists guest-message threads with stay dates, reservationId and the isReplyNeeded flag that drives the Pulse inbox badge.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • guestName
    • hotelName
    • reservationId
    • checkinDate
    • checkoutDate
    • isCancelled
    • isReplyNeeded
    • content
    • hasAttachments
    POST /v1/pulse/inbox/threads HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "ListConversations",
      "variables": {"input": {"propertyId": 1234567, "first": 20}}
    }
    {
      "data": {
        "chatConversation": {
          "listConversations": {
            "conversations": [{
              "attributes": {
                "__typename": "ChatAccommodationDetails",
                "guestName": "M. Rossi",
                "hotelName": "Seaside Inn",
                "reservationId": "3819201456",
                "checkinDate": "2026-10-12",
                "checkoutDate": "2026-10-15",
                "isCancelled": false
              },
              "flags": {"isReplyNeeded": true},
              "lastMessage": {"content": "What time is breakfast?", "created": "2026-10-02T08:14:00Z", "flags": {"hasAttachments": false}}
            }],
            "pagination": {"hasAfter": true}
          }
        }
      }
    }
  • Request-to-Book pending list

    POST /v1/pulse/booking-requests opendata

    Lists pending Request to Book rows with partner price, occupancy, hoursToExpire and guest-verification status so staff can accept or decline from the phone.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • requestId
    • rtbRequestStatus
    • checkIn
    • checkOut
    • hoursToExpire
    • lengthOfStay
    • nbAdults
    • childrenAges
    • totalGuest
    • totalPartnerPrice
    • isVerified
    POST /v1/pulse/booking-requests HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "operationName": "RtbRequestListPage",
      "variables": {"rtbRequestListInput": {"propertyId": 1234567}, "rtbBannerRequestInput": {"context": "LIST"}}
    }
    {
      "data": {
        "rtbRequests": {
          "rtbRequestListPage": {
            "rtbRequestList": [{
              "requestId": "rtb_4412",
              "rtbRequestStatus": "PENDING",
              "checkIn": "2026-11-02",
              "checkOut": "2026-11-05",
              "hoursToExpire": 18,
              "lengthOfStay": 3,
              "nbAdults": 2,
              "childrenAges": [4],
              "totalGuest": 3,
              "totalPartnerPrice": {"amount": 420.0, "currency": "EUR"},
              "guestVerificationStatus": {"isVerified": true}
            }],
            "pageInfo": {"hasNextPage": false}
          }
        }
      }
    }
  • Reservation detail

    POST /v1/pulse/stays/{reservationId} openfinance

    Fetches one booking number (bn) into the reservation-detail card: guest identity, Genius flag, totalPrice, commissionAmount, totalEarnings and paymentStatus / payoutMethod.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • id
    • hotelId
    • guestName
    • bookerName
    • bookerCc1
    • isGuestVerified
    • isGeniusBooker
    • nNights
    • totalPrice
    • commissionAmount
    • commissionableAmount
    • totalEarnings
    • paymentStatus
    • payoutMethod
    • isCancelled
    • isNoShow
    POST /v1/pulse/stays/{reservationId} HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_booking_detail.4",
        "payload": {"bn": "3819201456", "removeBookerTitle": 1, "sendSmpCancellationPolicy": 1}
      }
    }
    {
      "id": "3819201456",
      "hotelId": "1234567",
      "hotelName": "Seaside Inn",
      "guestName": "M. Rossi",
      "bookerName": "M. Rossi",
      "bookerCc1": "IT",
      "isGuestVerified": "1",
      "isGeniusBooker": 1,
      "nNights": "3",
      "nRooms": 1,
      "totalPrice": "EUR 612.00",
      "commissionAmount": "EUR 91.80",
      "commissionableAmount": "EUR 612.00",
      "totalEarnings": "EUR 520.20",
      "cancellationFee": "EUR 0.00",
      "payment": {"method": "Online", "paymentStatus": "paid", "payoutMethod": "Bank transfer"},
      "isCancelled": 0,
      "isNoShow": 0
    }
  • Daily arrivals dashboard

    POST /v1/pulse/front-desk/dayboard opendata

    Loads the home-screen day board: arrivals, departures, stayOvers, cancelled and noShows, each with guestName, stayPeriod and Genius / verified flags.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • arrivals
    • departures
    • stayOvers
    • cancelled
    • noShows
    • guestName
    • stayPeriod
    • stayDuration
    • occupancyDetails
    • isBookerGenius
    • isGuestVerified
    • groupHa
    POST /v1/pulse/front-desk/dayboard HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_dashboard.6",
        "payload": {"date": "2026-10-12"}
      }
    }
    {
      "groupHa": false,
      "dashboards": {
        "1234567": {
          "arrivals": [{
            "id": 3819201456,
            "guestName": "M. Rossi",
            "title": "Double Deluxe",
            "stayPeriod": "12–15 Oct",
            "stayDuration": "3 nights",
            "occupancyDetails": "2 adults",
            "isBookerGenius": true,
            "isGuestVerified": true
          }],
          "departures": [],
          "stayOvers": [],
          "cancelled": [],
          "noShows": []
        }
      }
    }
  • Daily report card

    POST /v1/pulse/reports/daily-card opendata

    Returns the daily-report card: today's arrivals/departures/stays, yesterdayGrossValue and yesterdayBookings, sold-out rooms and yesterday's review scores.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • hotelName
    • today
    • yesterday
    • arrivals
    • departures
    • stays
    • yesterdayGrossValue
    • yesterdayBookings
    • soldOutRooms
    • score
    • positive
    • negative
    POST /v1/pulse/reports/daily-card HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_daily_report_card.1",
        "payload": {"hotelId": "1234567", "date": "2026-10-12", "sendRateIntelReport": false}
      }
    }
    {
      "hotelName": "Seaside Inn",
      "today": "2026-10-12",
      "yesterday": "2026-10-11",
      "arrivals": 6,
      "departures": 4,
      "stays": 11,
      "yesterdayGrossValue": "EUR 1,940.00",
      "yesterdayBookings": "5",
      "soldOutRooms": [{"roomName": "Double Deluxe", "date": "2026-10-12"}],
      "yesterdayReviewDetails": [{
        "id": "rev_8821",
        "title": "Quiet room",
        "guestInfo": "Couple, Italy",
        "score": 9.2,
        "positive": "Great location",
        "negative": ""
      }]
    }
  • Payment transaction list

    POST /v1/pulse/finance/guest-payments openfinance

    Pages guest payment transactions against the property, with amountForPayout, nextPayoutDate, stripeId and bookingNumber on each row.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • amountForPayout
    • nextPayoutDate
    • nextPageId
    • amount
    • timestamp
    • stripeId
    • bookingNumber
    • status
    • statusFormatted
    POST /v1/pulse/finance/guest-payments HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_get_transaction_list.1",
        "payload": {"hotelId": "1234567", "maxPageSize": 20, "nextPageId": null}
      }
    }
    {
      "amountForPayout": "EUR 1,204.00",
      "nextPayoutDate": "2026-10-03",
      "nextPageId": "pg_14",
      "transactions": [{
        "title": "Reservation 3819201456",
        "subtitle": "Online payment",
        "amount": "EUR 612.00",
        "timestamp": 1759420800,
        "stripeId": "ch_3Qabc",
        "bookingNumber": "3819201456",
        "status": "captured",
        "statusFormatted": "Paid"
      }]
    }
  • Guest review list

    POST /v1/pulse/reputation/reviews opendata

    Lists guest reviews for the property with reviewAverageScore, Genius flag, guestDetailsSummary and a paginationClue for the next page.

    Auth: Bearer access_token from POST /v1/pulse/auth/token.

    • paginationClue
    • id
    • reviewAverageScore
    • title
    • date
    • isNew
    • isGeniusUser
    • guestDetailsSummary
    POST /v1/pulse/reputation/reviews HTTP/1.1
    Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
    Content-Type: application/json
    
    {
      "context": {"hotel_id": "1234567"},
      "call": {
        "macroName": "pulse.context_get_hotel_reviews.1",
        "payload": {"hotelId": "1234567"}
      }
    }
    {
      "paginationClue": "after:rev_8821",
      "reviews": [{
        "id": "rev_8821",
        "reviewAverageScore": "9.2",
        "title": "Quiet room",
        "date": 1759334400,
        "isNew": true,
        "isGeniusUser": true,
        "guestDetailsSummary": "Couple · 3 nights · Italy",
        "reply": {"text": "Thank you for staying with us.", "date": 1759420800}
      }]
    }

Data categories

  • payouts
  • reservations
  • availability
  • guest messages
  • reviews
  • payment transactions

Where teams use this data

  • Payout-to-ledger reconciliation

    A property PMS or hotel-group finance bot pulls yearly payout windows (uuid, amount, currency, hasPayoutIssued) and the per-payout reservationAmount / totalCommission breakdown, then matches them to bank credits and the in-house folio so missing or on-hold payouts surface before the nextWithdrawalDate.

  • Channel-manager availability sync

    A channel manager reads roomsToSell, netBooked, closed flags and occupancy prices in hotelCurrencyCode for a date range, then writes PulseAvailabilityUpdate when the property closes a room type or changes a BAR — keeping Booking.com in lockstep with the on-property PMS without a desktop extranet session.

  • Front-desk arrivals and inbox

    A front-desk tablet lists today's arrivals / departures / stayOvers with guestName and stayPeriod, opens the reservation detail for totalPrice and paymentStatus, and flags guest threads where isReplyNeeded is true or Request to Book rows whose hoursToExpire is running out.

  • Review-score operations feed

    A reputation desk pages GuestReview rows (reviewAverageScore, isGeniusUser, guestDetailsSummary) together with the daily-report yesterdayReviewDetails so new scores and sold-out-room alerts land in the same ops channel as the occupancy calendar.

Frequently asked questions

What payout data does Pulse expose for Booking.com partners?

The finance tab is backed by yearly payout windows (uuid, dateFrom/dateUntil, amountFormatted, hasPayoutIssued, nextWithdrawalDate) and payout details (totalPayoutAmount, totalCommission, totalCityTax, withheld taxes and per-reservation reservationAmount). A separate payments list pages guest payment transactions with amountForPayout, stripeId and bookingNumber.

Can availability and prices be read and written?

Yes. The availability calendar returns per-date roomsToSell, availableRooms, netBooked, closed flags and occupancy prices in hotelCurrencyCode. A matching update writes those same fields back and returns per-field success, errors and warnings.

How does Pulse authenticate property staff?

Partners sign in through Booking.com Accounts Portal. An OAuth2 authorization-code exchange returns access_token and refresh_token; later partner calls send Authorization: Bearer. A user-info call returns loginName and partnerAuthName.

What guest-facing data sits behind the inbox and Request to Book screens?

The inbox lists guestName, reservationId, checkinDate/checkoutDate and isReplyNeeded. The Request to Book list adds requestId, rtbRequestStatus, totalPartnerPrice, occupancy and hoursToExpire so staff can accept or decline a pending request from the phone.

Topics

  • Pulse Booking.com API
  • Booking.com partner payout API
  • hotel availability calendar API
  • Pulse reservation detail
  • Request to Book partner API
  • Booking.com extranet mobile data
  • hotel guest inbox API
  • Pulse for Booking.com Partners

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote