RentalTideRentalTideDocs
Dashboard

Reseller & OTA API

Connect to a RentalTide operator as a reseller, OTA, or agent — pull their catalog and live availability, and push confirmed bookings with one API key.

Sell a RentalTide operator's rentals and tours from your own platform — an OTA, a hotel concierge desk, a travel agency, or any booking site. The Channel API is a small, purpose-built surface: one key, four calls, and you're selling.

HTTP
GET https://v3.api.rentaltide.com/channel/v1/products
Authorization: Bearer rtc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
How you get a key — two ways

You're an OTA / marketplace (Viator, GetYourGuide, a tourism board…): sign in at partners.rentaltide.com Reseller & OTA APIRegister. You get one API key instantly, and your channel appears in every RentalTide operator's Settings → OTAs & Resellers. Operators click Connect and set their commission and offer set — no key exchange. Your one key sees all of them.

You're a single operator's partner (hotel desk, local agency): the operator creates a connection for you in Settings → OTAs & Resellers and sends you the generated key. Same API, one merchant.

Three ways to resell

RTDN (no code)Channel API — platformChannel API — direct partner
Best forBlogs, tourism sites, conciergesOTAs & marketplaces with their own checkoutA hotel desk / agency working with one operator
IntegrationLink or embed with your referral codeREST, four callsREST, four calls
Guest paysThe operatorYouYou
Commission set byRentalTide (network rate)YouThe operator
You get paidBy RentalTide with your partner payoutsYou keep it and remit to the operatorYou keep it and remit to the operator
Feenone$5/booking to the operator$5/booking to the operator

No code? Read RTDN — you'll be live in five minutes. The rest of this page is the Channel API, for platforms that run their own checkout and need live availability plus programmatic bookings.

Five-minute quickstart

You have a key. This is a complete integration test — run the three commands and you've listed, checked, and sold:

Bash

Then DELETE $BASE/bookings/<bookingId> to clean up your test. That's the whole API — everything below is detail. (Coordinate test bookings with the operator: they land on the real calendar.)

The model in one paragraph

You are the merchant of record: you take the guest's payment on your side, then push a confirmed booking to RentalTide with the price you charged. The booking lands on the operator's calendar as fully paid, appears on tour manifests, and counts toward capacity like any direct sale. Your commission rate is stamped on every booking you create, so both sides settle from the same numbers. There are no holds to manage and no payment webhooks to handle — availability, book, cancel.

Authentication

Every call sends the key the operator gave you, either way works:

Bash

GET /channel/v1/me is the smoke test. A single-operator key returns { "connection": { connectionId, channelName, merchantId, commissionRate, … } }. A platform (OTA) key returns { "channel": { slug, name, merchants: [ { merchantId, commissionRate, offerAllInventory, … } ] } } — one entry per operator that has opted in to you, each with their commission rate. Errors always come back as { "error": "<machine_code>", "message": "<human text>" }; branch on the code.

CodeMeaning
missing_api_key / invalid_api_keyNo key, or a key that doesn't exist (rotated keys stop working instantly)
connection_pausedThe operator paused your connection
rate_limitedOver 300 requests/minute — back off until X-RateLimit-Reset

1. Pull the catalog

Bash

Returns every product you've been offered:

JSON

seasons carries the operator's retail pricing so you can price your own listings:

  • Both maps are keyed by weekday name (MondaySunday).
  • dailyPrices values are the full-day rate.
  • hourlyPrices values are a rule object — basePrice is the per-hour rate, minimumHours/maximumHours bound the rental length, and multiHourDiscounts (if any) lists { hours, discountPercentage } breaks. Older listings may carry a bare number instead of the object; treat it as basePrice.
  • startingPrice + priceUnit is the cheapest of the above, pre-computed for card display.
  • Tax: prices are pre-tax. taxes lists the rates the operator applies to this product (already narrowed to the ones that apply — some products are exempt from some taxes) and totalTaxRate is their sum in percent. Charge the guest price × (1 + totalTaxRate / 100) and send that tax-inclusive figure as totalPrice when you book; the operator remits the tax.

Every product carries merchantId / merchantName. With an OTA key you get the union of every opted-in operator's offer set — group by merchantId for your supplier pages. Cache the catalog and refresh it daily; it changes when an operator edits listings, changes their offer set, or connects/disconnects — not per booking.

2. Check availability

Real time, and answered by the same engine the operator's own checkout uses turnaround buffers, maintenance blocks, and capacity overrides included. If this endpoint says available, the booking call will succeed moments later.

Bash
JSON
  • locationId is optional — omit it and each product's own location is used (an OTA key spans many operators, so one locationId rarely fits).
  • Timestamps are ISO 8601 with an offset; the window may span up to 366 days.
  • Up to 25 productIds per request; lines come back in the order you asked.
  • unitsFree is null for seat-based products (tours) — trust available.
  • unknown_product means the id isn't offered to your connection. Products the merchant hasn't offered you answer exactly like products that don't exist.

3. Create a booking

You've collected the guest's payment — now push the confirmed sale. Idempotency-Key is required: pick a unique string per checkout (your own order id is perfect) and reuse it on retries.

Bash

201 Created:

JSON

Store bookingId — it's what you'll use to read or cancel. commissionRate is the operator's rate for you (with an OTA key each operator sets their own), so settlement numbers come straight off the booking.

Idempotency, precisely:

ResponseMeaning
200 + "idempotentReplay": trueThis key already created a booking — here it is again. Safe to retry on any timeout.
409 booking_in_progressSame key, still mid-flight. Wait a second and retry.
422 idempotency_key_reuseSame key, different request (product, window, quantity, or price changed). Use a new key.
409 unavailableReal conflict — someone booked it first. The key is freed; re-check availability.
503 idempotency_unavailable / inventory_lockedTransient. Retry with the same key.

Bookings are created under the same lock the operator's checkout holds, so a race against a direct customer can't double-book — one of you wins, the other gets unavailable.

4. Read or cancel

Bash

Cancel is idempotent — cancelling an already-cancelled booking returns 200 with "alreadyCancelled": true. You can only see and cancel bookings your connection created; anything else is a 404. A booking the operator has already checked in or completed returns 409 not_cancellable — call them.

Refunds are yours

You took the guest's payment, so you issue the refund. Cancelling here only releases the operator's inventory (and tour seats cascade to their waitlist).

Fees

RentalTide charges the operator a flat $5 platform fee per booking you send (added to their RentalTide account, reversed if you cancel). Nothing is charged to you and nothing is deducted from what you remit — your commission is the only thing between the sale price and the operator's payout.

Getting the operator paid

You collected the guest's money, so you owe the operator sale price − your commission for every non-cancelled booking. Both sides read the same numbers:

  • You: partners.rentaltide.com → Reseller & OTA API → Settlement — per operator, per month (by rental date): bookings, gross, your commission, owed.
  • The operator: the same figures under Settings → OTAs & Resellers.

Declare how you pay on your portal page (method, cadence, net days, and an optional payout-enrolment link such as Hyperwallet / Tipalti / PayPal Payouts) — operators see it on your card before they connect. Then pay on that cadence; each booking's reference and bookingId reconcile line by line. Automated payouts through RentalTide are on the roadmap.

Managing operators

From the same portal page you can, per operator: set a custom commission (overrides your default; the operator sees it read-only), pause (their listings drop out of your catalog until you resume — they cannot un-pause themselves), or remove (they'd need to click Connect again). Pause channel stops your key for everyone at once.

Staying in sync

Two complementary options:

  • Poll availability before showing a checkout — it's cheap and always right.
  • Webhooks: ask the operator to add your endpoint under Settings → Webhooks subscribed to booking.* events. You'll be notified when any booking is created, cancelled, or rescheduled — including direct sales that consume capacity you were about to sell. See Webhooks for signatures and retries.

Sandbox etiquette & limits

  • 300 requests per minute per connection (X-RateLimit-* headers on every response).
  • Timestamps: ISO 8601 with offset in, UTC out.
  • Prices are decimal dollars in the connection's currency.
  • Keys can be rotated by the operator at any time — handle invalid_api_key by contacting them, not by retrying.

Building a deeper integration? The Channel API is for reselling. If you're building an app that lives inside RentalTide or needs broader account access, see the Developer platform and the server-to-server API.

Was this page helpful?
Need help? Contact Support.See what’s new. Check out changelog.Questions? Book a video chat.
Ask AI
Responses are generated using AI and may contain mistakes.
Ask questions about RentalTide and get help with your integration.