Docs/Knowledge Base/PMS Guides

Cloudbeds API

Cloudbeds exposes a REST API (v1.3 at api.cloudbeds.com) covering properties, room types, rooms, rates, reservations, guests and webhooks, authenticated with a property or organization API key sent as x-api-key.

Written from running this integration in production. Last checked against the Cloudbeds API on 27 September 2026.

What the Cloudbeds API is

Cloudbeds is a PMS for hotels, hostels and vacation rentals, with a REST API at https://api.cloudbeds.com/api/v1.3. It covers the property, room types, rooms, rate plans, availability, reservations, guests and webhooks.

Like Mews, it is built on the hotel model: a room type has rooms under it, and a reservation can hold several rooms, each of a different type. Repull maps a room type to a listing and each room to a unit, and splits a multi-room booking into one reservation per room.

A property can create its own API key without a partner agreement, which makes Cloudbeds quick to connect for a single property.

Through Repull: GET /v1/listings/{id}/units lists a room type’s rooms, every reservation carries unit, and availability reports availableUnits per night. Calendar edits and bookings (POST /v1/reservations, PATCH /v1/reservations/{id}, POST /v1/reservations/{id}/cancel) are made in Cloudbeds first.

How to get Cloudbeds API access

  1. 1.In Cloudbeds, open Apps & Marketplace → API Credentials and create credentials (name, category, and a redirect URI; https://localhost is fine for an API key).
  2. 2.In the new row, choose API Key → Create, select the scopes you need, and approve them. Cloudbeds may ask the user to verify with a one-time code.
  3. 3.Copy the key when it is shown; it is not shown again. It starts with cbat_.
  4. 4.Send it to POST /v1/connect/cloudbeds/credentials (or paste it into Repull Connect).

A key that is not used for 30 days expires. A connected property’s regular sync keeps it alive.

What will bite you

From running this integration in production, not from their documentation.

Errors can arrive as 200

Cloudbeds often answers a refused request with HTTP 200 and { "success": false, "message": ... }. Code that trusts the status code records a failure as a success.

Rate updates are jobs, not writes

patchRate and putRate queue a job and return a job reference; the change is applied afterwards and can still fail. One request takes at most 30 intervals, and derived rate plans cannot be written at all.

Writes are form-encoded with nesting

Reads are GET with query parameters; writes are application/x-www-form-urlencoded with bracketed nesting such as rooms[0][roomTypeID]. A JSON body is not what the write endpoints expect.

A booking can hold several rooms

One reservation id can cover rooms of different types, each with its own dates and guest counts. The total is per booking, not per room.

No room-count adjustment and no messaging

Availability can be opened or closed per night, but there is no API to hold back a number of rooms, and there is no guest-messaging API.

What it costs to keep working

Connecting one property is quick. The work is in the rate jobs and the multi-room bookings.

  • •Every rate write needs a follow-up to confirm the job ran.
  • •Multi-room bookings have to be split and their money apportioned consistently.
  • •Unused keys expire after 30 days, so an idle connection silently stops working.
  • •Organization keys cover several properties, and each property has its own webhooks to manage.

The same job, both ways

Cloudbeds directly

curl -s 'https://api.cloudbeds.com/api/v1.3/getReservationsWithRateDetails?pageSize=100' \
  -H 'x-api-key: cbat_...'

# Then split multi-room bookings, check success:false on every 200,
# and poll getRateJobs after every price change.

Through Repull

curl -s 'https://api.repull.dev/v1/reservations?limit=100' \
  -H 'Authorization: Bearer sk_live_YOUR_KEY'

# One reservation per room, each naming its room type and room.

Why use Repull for Cloudbeds

Your next property may not be on Cloudbeds

For a single Cloudbeds property, use its API key and API directly — we would be a layer you do not need. The cost arrives with the second system.

One hotel model

Room types, rooms, room counts and assigned rooms come back the same way for Cloudbeds and Mews.

Channels next to the PMS

The same Repull key reaches Airbnb and Booking.com directly, alongside the PMS.

Connect Cloudbeds through Repull

Create a key, connect a Cloudbeds account with its Client ID and Secret, and read reservations in the same shape as every other system you support.

Frequently asked questions

Does Cloudbeds have a public API?

Yes. The Cloudbeds API (v1.3) is documented at developers.cloudbeds.com and published as OpenAPI specs. It covers properties, room types, rooms, rates, reservations, guests and webhooks.

How do I get a Cloudbeds API key?

In Cloudbeds, go to Apps & Marketplace → API Credentials, create credentials, then choose API Key → Create, select scopes and approve them. The key starts with cbat_ and is shown once.

Why did my Cloudbeds API key stop working?

Keys that are not used for 30 days expire. Create a new key and reconnect.

Can I message guests through the Cloudbeds API?

No. The Cloudbeds API has no guest-messaging endpoints.

How are multi-room bookings handled?

Repull returns one reservation per room, each with its own room type, room and share of the booking’s money.

The other systems Repull connects

Reference

Auth Type

API key

Required Fields

apiKey

Supported Operations

✓ listings
✓ reservations
✓ calendar
— messages
✓ webhooks
✓ guests

Connection Guide

In Cloudbeds, open Apps & Marketplace → API Credentials, create credentials, then create an API key and approve its scopes. Paste the key (it starts with cbat_) into Repull Connect.

Notes

  • • A listing is a room type; its rooms are units
  • • A booking with several rooms becomes one reservation per room
  • • Writes prices, restrictions and reservations back to Cloudbeds
  • • Guest messaging is not available through the Cloudbeds API
  • • Additional items and taxes come as totals per booking, not itemized
AI