Your website. Tulo's bookings.

Show live rates and availability on your own site, and take bookings that land in the same rack as everything else. A night taken on your website is taken in the app too.

OpenAPI 1.1.0 · api.tulo.homes/partner/v1

POST /partner/v1/bookings
Host: api.tulo.homes
Authorization: Bearer tulo_pk_••••••••
X-Tulo-Key-Id: ••••••••
X-Tulo-Timestamp: 1800000000
X-Tulo-Nonce: 3f1c9a52-…
X-Tulo-Signature: ••••••••••••••
Idempotency-Key: 9b2e41c0
Fig. 1 · Booking a stay from your website's server

Keys

A manager issues keys in the Tulo property dashboard. Every key belongs to one place. Keys are stored hashed; the full key is shown once.

TypePrefixWhere it livesScopes
Secrettulo_pk_The website's server onlyread, bookings.read, bookings.write
Publishabletulo_pub_The visitor's browser, bound to your exact https originsread

Routes

Reading is unsigned. Everything under /bookings is signed by your server with an Ed25519 key you registered with Tulo, and POST /bookings needs an Idempotency-Key.

RouteWhat it doesKey
GET /placeThe place's website contentPublishable or secret
GET /calendarAvailability, nightly rates and stay rules per room type per night, up to 90 nightsPublishable or secret
GET /quotePrice a stayPublishable or secret
POST /bookingsBook a staySecret, signed
GET /bookingsThe website's own bookings, for reconciliationSecret, signed
GET /bookings/{id}One of the website's own bookingsSecret, signed
POST /bookings/{id}/cancelCancel one of the website's own bookings for the guestSecret, signed
GET /signing-keysTulo's webhook signing public keysNone

Webhooks

Tulo posts booking events to your site and signs every delivery with its own Ed25519 key. Verify it against the public keys at GET /signing-keys, which need no key to read.

For the full reference, signing strings and test vectors, write to hello@mail.tulo.homes.

Questions? Email support@mail.tulo.homes.