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.
You're an OTA / marketplace (Viator, GetYourGuide, a tourism board…): sign in at partners.rentaltide.com → Reseller & OTA API → Register. 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 — platform | Channel API — direct partner | |
|---|---|---|---|
| Best for | Blogs, tourism sites, concierges | OTAs & marketplaces with their own checkout | A hotel desk / agency working with one operator |
| Integration | Link or embed with your referral code | REST, four calls | REST, four calls |
| Guest pays | The operator | You | You |
| Commission set by | RentalTide (network rate) | You | The operator |
| You get paid | By RentalTide with your partner payouts | You keep it and remit to the operator | You keep it and remit to the operator |
| Fee | none | $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:
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:
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.
| Code | Meaning |
|---|---|
missing_api_key / invalid_api_key | No key, or a key that doesn't exist (rotated keys stop working instantly) |
connection_paused | The operator paused your connection |
rate_limited | Over 300 requests/minute — back off until X-RateLimit-Reset |
1. Pull the catalog
Returns every product you've been offered:
seasons carries the operator's retail pricing so you can price your own listings:
- Both maps are keyed by weekday name (
Monday…Sunday). dailyPricesvalues are the full-day rate.hourlyPricesvalues are a rule object —basePriceis the per-hour rate,minimumHours/maximumHoursbound the rental length, andmultiHourDiscounts(if any) lists{ hours, discountPercentage }breaks. Older listings may carry a bare number instead of the object; treat it asbasePrice.startingPrice+priceUnitis the cheapest of the above, pre-computed for card display.- Tax: prices are pre-tax.
taxeslists the rates the operator applies to this product (already narrowed to the ones that apply — some products are exempt from some taxes) andtotalTaxRateis their sum in percent. Charge the guestprice × (1 + totalTaxRate / 100)and send that tax-inclusive figure astotalPricewhen 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.
locationIdis 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
productIdsper request; lines come back in the order you asked. unitsFreeisnullfor seat-based products (tours) — trustavailable.unknown_productmeans 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.
201 Created:
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:
| Response | Meaning |
|---|---|
200 + "idempotentReplay": true | This key already created a booking — here it is again. Safe to retry on any timeout. |
409 booking_in_progress | Same key, still mid-flight. Wait a second and retry. |
422 idempotency_key_reuse | Same key, different request (product, window, quantity, or price changed). Use a new key. |
409 unavailable | Real conflict — someone booked it first. The key is freed; re-check availability. |
503 idempotency_unavailable / inventory_locked | Transient. 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
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.
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_keyby 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.

