Developer Platform

    Build on RentalTide

    Integrate with the RentalTide REST API to build custom integrations, automate workflows, and extend your rental operations programmatically.

    • RESTful API
    • OAuth 2.0
    • Webhook Events
    • 99.5% Uptime Target
    GET /v3/bookings
    1{
    2 "data": [
    3 {
    4 "id": "bk_2xK9mP4vL7",
    5 "status": "confirmed",
    6 "asset": {
    7 "name": "Pontoon Sunset Cruiser",
    8 "type": "boat"
    9 },
    10 "customer": {
    11 "name": "Jane Cooper",
    12 "email": "jane@example.com"
    13 },
    14 "start_time": "2026-03-15T10:00:00Z",
    15 "end_time": "2026-03-15T14:00:00Z",
    16 "total": 24900,
    17 "currency": "usd"
    18 }
    19 ],
    20 "has_more": true
    21}

    Get Started in Four Steps

    From sign-up to your first API call in minutes.

    1. Create Account

      Sign up for a free RentalTide account at app.rentaltide.com.

    2. Register Your App

      Navigate to Settings > API & Integrations to register a new application.

    3. Get Credentials

      Copy your Client ID and Client Secret from the app dashboard.

    4. Start Building

      Authenticate via OAuth 2.0 and start making API calls.

    Manage Your API Credentials

    Securely manage your API keys, rotate secrets, and control access scopes from a single dashboard.

    • Client ID & Secret

      Unique credentials generated per application to authenticate API requests securely.

    • Token Rotation

      Rotate your client secret at any time without downtime. Old tokens remain valid during the grace period.

    • Scopes & Permissions

      Fine-grained access control, request only the permissions your integration needs.

    • Rate Limits

      Generous rate limits with clear headers so you can build reliable integrations.

    API Credentials

    Client ID

    rt_live_ck_2xK9mP4v...L7qR

    Client Secret

    ••••••••••••••••••••••••••••

    Authorized Scopes

    bookings:readbookings:writeassets:readcustomers:readwebhooks:manage

    Rotate SecretCopy Client ID

    Make Your First API Call

    Authenticate with OAuth 2.0 and fetch bookings in just a few lines of code.

    terminal
    1# 1. Get an OAuth token
    2curl -X POST https://v3.api.rentaltide.com/oauth/token \
    3 -H "Content-Type: application/json" \
    4 -d '{
    5 "grant_type": "client_credentials",
    6 "client_id": "rt_live_ck_2xK9mP4vL7qR",
    7 "client_secret": "rt_live_sk_••••••••••"
    8 }'
    9
    10# 2. Fetch bookings
    11curl https://v3.api.rentaltide.com/v3/bookings \
    12 -H "Authorization: Bearer ACCESS_TOKEN" \
    13 -H "Content-Type: application/json"
    index.js
    1// 1. Get an OAuth token
    2const tokenRes = await fetch(
    3 "https://v3.api.rentaltide.com/oauth/token",
    4 {
    5 method: "POST",
    6 headers: { "Content-Type": "application/json" },
    7 body: JSON.stringify({
    8 grant_type: "client_credentials",
    9 client_id: process.env.RT_CLIENT_ID,
    10 client_secret: process.env.RT_CLIENT_SECRET,
    11 }),
    12 }
    13);
    14const { access_token } = await tokenRes.json();
    15
    16// 2. Fetch bookings
    17const bookings = await fetch(
    18 "https://v3.api.rentaltide.com/v3/bookings",
    19 {
    20 headers: {
    21 Authorization: `Bearer ${access_token}`,
    22 "Content-Type": "application/json",
    23 },
    24 }
    25);
    26const data = await bookings.json();
    27console.log(data);
    main.py
    1import requests
    2
    3# 1. Get an OAuth token
    4token_res = requests.post(
    5 "https://v3.api.rentaltide.com/oauth/token",
    6 json={
    7 "grant_type": "client_credentials",
    8 "client_id": "rt_live_ck_2xK9mP4vL7qR",
    9 "client_secret": "rt_live_sk_••••••••••",
    10 },
    11)
    12access_token = token_res.json()["access_token"]
    13
    14# 2. Fetch bookings
    15bookings = requests.get(
    16 "https://v3.api.rentaltide.com/v3/bookings",
    17 headers={
    18 "Authorization": f"Bearer {access_token}",
    19 "Content-Type": "application/json",
    20 },
    21)
    22print(bookings.json())

    Sample Response

    response.json
    1{
    2 "data": [
    3 {
    4 "id": "bk_2xK9mP4vL7",
    5 "status": "confirmed",
    6 "asset": {
    7 "id": "ast_8nRj3Kw2",
    8 "name": "Pontoon Sunset Cruiser"
    9 },
    10 "customer": {
    11 "id": "cus_4mQp7Yx9",
    12 "name": "Jane Cooper"
    13 },
    14 "start_time": "2026-03-15T10:00:00Z",
    15 "end_time": "2026-03-15T14:00:00Z",
    16 "total": 24900,
    17 "currency": "usd"
    18 }
    19 ],
    20 "has_more": true,
    21 "next_cursor": "cur_9vZk2Lm8"
    22}
    New: Two-Way Audio API

    Build With Two-Way Audio

    Integrate real-time voice communication directly into your app. Initiate phone calls or walkie-talkie sessions, look up renters by phone, and take action on bookings, all through the API.

    Phone Calls

    Initiate full-duplex voice calls between your app and any RentalTide location or staff member.

    Walkie-Talkie Mode

    Push-to-talk communication for instant coordination across teams on the water.

    Renter Lookup

    Search renters by phone number to instantly pull up customer profiles during calls.

    Booking Context

    Fetch active bookings for any renter to give your agents full context before they speak.

    Real-Time Events

    Receive WebSocket events for call:incoming, call:answered, call:ended, and more.

    AI-Ready

    Purpose-built for AI calling assistants, look up, connect, and take action in a single flow.

    Required OAuth scopes:
    read:customers
    read:bookings
    write:bookings
    audio:call

    Audio API in Action

    Explore the endpoints you need to build voice-enabled integrations.

    initiate-call.js
    1// Initiate a call into a rental location
    2const call = await fetch(
    3 "https://v3.api.rentaltide.com/calls/partner/initiate",
    4 {
    5 method: "POST",
    6 headers: {
    7 Authorization: `Bearer ${access_token}`,
    8 "Content-Type": "application/json",
    9 },
    10 body: JSON.stringify({
    11 customerId: "cus_4mQp7Yx9",
    12 locationId: "loc_8nRj3Kw2",
    13 targetType: "location",
    14 targetId: "loc_8nRj3Kw2",
    15 callerName: "AI Assistant",
    16 callerPhone: "+15551234567",
    17 callMode: "phone", // or "walkie_talkie"
    18 context: {
    19 reason: "booking_followup",
    20 bookingId: "bk_2xK9mP4vL7",
    21 },
    22 }),
    23 }
    24);
    25
    26const { call: callData, token, roomName } = await call.json();
    27// Connect to the Twilio room with the returned token
    28console.log(`Call initiated: ${callData.callId}`);
    renter-lookup.js
    1// Look up a renter by phone number
    2const renters = await fetch(
    3 "https://v3.api.rentaltide.com/calls/partner/renters/search?" +
    4 new URLSearchParams({ phone: "+15551234567" }),
    5 {
    6 headers: {
    7 Authorization: `Bearer ${access_token}`,
    8 },
    9 }
    10);
    11
    12const { renters: results } = await renters.json();
    13// [{ id, firstName, lastName, email, phoneNumber, ... }]
    14
    15if (results.length > 0) {
    16 // Fetch their active bookings
    17 const bookings = await fetch(
    18 `https://v3.api.rentaltide.com/calls/partner/renters/${results[0].id}/bookings?status=active`,
    19 {
    20 headers: {
    21 Authorization: `Bearer ${access_token}`,
    22 },
    23 }
    24 );
    25
    26 const { bookings: activeBookings } = await bookings.json();
    27 console.log(`Found ${activeBookings.length} active rentals`);
    28}
    booking-action.js
    1// Add a note to a booking during a call
    2await fetch(
    3 `https://v3.api.rentaltide.com/calls/partner/renters/${renterId}/bookings/${rentalId}/action`,
    4 {
    5 method: "POST",
    6 headers: {
    7 Authorization: `Bearer ${access_token}`,
    8 "Content-Type": "application/json",
    9 },
    10 body: JSON.stringify({
    11 action: "add_note",
    12 data: {
    13 content: "Customer called to extend rental by 1 hour. Approved by manager.",
    14 },
    15 }),
    16 }
    17);
    call-events.json
    1// Incoming call webhook payload
    2{
    3 "event": "call:incoming",
    4 "data": {
    5 "callId": "call_9vZk2Lm8",
    6 "callerName": "AI Phone Assistant",
    7 "callerType": "partner_app",
    8 "callerPhone": "+15551234567",
    9 "callMode": "phone",
    10 "status": "ringing",
    11 "partnerContext": {
    12 "reason": "booking_followup",
    13 "bookingId": "bk_2xK9mP4vL7"
    14 },
    15 "createdAt": "2026-03-09T14:30:00Z"
    16 }
    17}
    18
    19// Other events: call:answered, call:rejected,
    20// call:ended, call:missed

    Example: AI Calling Assistant

    End-to-end flow: customer calls in, AI looks up their info, connects to the location.

    ai-calling-assistant.js
    1const API = "https://v3.api.rentaltide.com";
    2
    3// Full AI calling assistant flow
    4// 1. Customer calls in - look up their info
    5const phone = incomingCall.callerPhone; // e.g. "+15551234567"
    6
    7const renterRes = await fetch(
    8 `${API}/calls/partner/renters/search?phone=${encodeURIComponent(phone)}`,
    9 { headers: { Authorization: `Bearer ${access_token}` } }
    10);
    11const { renters } = await renterRes.json();
    12
    13if (renters.length > 0) {
    14 const renter = renters[0];
    15
    16 // 2. Fetch their active bookings for full context
    17 const bookingRes = await fetch(
    18 `${API}/calls/partner/renters/${renter.id}/bookings?status=active`,
    19 { headers: { Authorization: `Bearer ${access_token}` } }
    20 );
    21 const { bookings } = await bookingRes.json();
    22 const activeRental = bookings[0];
    23
    24 // 3. Initiate two-way audio with the location
    25 const callRes = await fetch(`${API}/calls/partner/initiate`, {
    26 method: "POST",
    27 headers: {
    28 Authorization: `Bearer ${access_token}`,
    29 "Content-Type": "application/json",
    30 },
    31 body: JSON.stringify({
    32 customerId: renter.customerId,
    33 locationId: activeRental.locationId,
    34 targetType: "location",
    35 targetId: activeRental.locationId,
    36 callerName: `${renter.firstName} (via AI)`,
    37 callerPhone: phone,
    38 callMode: "phone",
    39 context: {
    40 renterId: renter.id,
    41 activeBooking: activeRental.rentalId,
    42 },
    43 }),
    44 });
    45
    46 const { token, roomName } = await callRes.json();
    47
    48 // 4. Connect to the Twilio room with the token
    49 const { connect } = await import("twilio-video");
    50 await connect(token, { name: roomName, audio: true, video: false });
    51}

    What You Can Build

    AI Phone Agents

    Build an AI that answers customer calls, looks up their rentals, and routes to the right location.

    Fleet Dispatch Radio

    Walkie-talkie channels for real-time coordination between dock staff and boats on the water.

    Automated Follow-ups

    Trigger outbound calls for booking confirmations, weather alerts, or check-in reminders.

    CRM Call Logging

    Log every call with full renter context, booking status, and call duration back to your CRM.

    Explore the Complete API Documentation

    Comprehensive reference for every endpoint, webhook event, and data model in the RentalTide API.

    • 50+ Endpoints
    • Webhook Events
    • SDKs Coming Soon