RentalTideRentalTideDocs
Dashboard

Integrations API

Connect with Google Calendar, Viator, Wave, and more

Endpoints for managing third-party integrations including Google Calendar sync, Google Things to Do, Viator, vQuip fleet management, Wave accounting, voice services, and shipment tracking.

Integrations

Get GPS alerts for a location

GET /integrations/alerts

Retrieves OneStepGPS alerts from a specific location within a time range

Parameters

NameInTypeRequiredDescription
minutesqueryintegerNoNumber of minutes to look back for alerts
limitqueryintegerNoMaximum number of alerts to return

Responses

CodeDescription
200List of alerts
500Internal server error

Get GPS alerts for a specific device

GET /integrations/device-alerts/{deviceName}

Retrieves OneStepGPS alerts for a specific device within a time range

Parameters

NameInTypeRequiredDescription
deviceNamepathstringYesThe name of the GPS device
minutesqueryintegerNoNumber of minutes to look back for alerts
limitqueryintegerNoMaximum number of alerts to return

Responses

CodeDescription
200List of device alerts
500Internal server error

Get alert summary by device

GET /integrations/alert-summary

Retrieves a summary of alert counts grouped by device name for a location

Parameters

NameInTypeRequiredDescription
hoursqueryintegerNoNumber of hours to look back for alert summary

Responses

CodeDescription
200Alert summary by device
500Internal server error

Google Calendar

Initiate Google Calendar OAuth flow

GET /integrations/google-calendar/connect

Starts the Google Calendar OAuth2 authorization flow. Returns an authorization URL to redirect the user to.

Parameters

NameInTypeRequiredDescription
userIdquerystringYesThe user ID initiating the connection
customerIdquerystringYesThe customer/business ID

Responses

CodeDescription
200Authorization URL generated successfully
400Missing userId or customerId
500Failed to initiate Google Calendar connection

Google Calendar OAuth callback

GET /integrations/google-calendar/callback

Handles the OAuth2 callback from Google, exchanges the code for tokens, and stores the encrypted credentials

Parameters

NameInTypeRequiredDescription
codequerystringYesAuthorization code from Google
statequerystringYesState token to validate the request
errorquerystringNoError code if authorization was denied

Responses

CodeDescription
200Returns HTML page with postMessage to close popup
302Redirects to frontend with error if authorization denied
400Missing code/state or invalid state token

Disconnect Google Calendar

POST /integrations/google-calendar/disconnect

Revokes Google Calendar access and removes stored credentials for a user

Request body

FieldTypeRequiredDescription
userIdstringYesThe user ID to disconnect

Responses

CodeDescription
200Google Calendar disconnected successfully
400Missing userId
500Failed to disconnect Google Calendar

Get calendar connection status

GET /integrations/google-calendar/status

Returns the Google Calendar connection status for a user

Parameters

NameInTypeRequiredDescription
userIdquerystringYesThe user ID to check

Responses

CodeDescription
200Connection status retrieved successfully
400Missing userId
500Failed to get calendar status

Get available calendars

GET /integrations/google-calendar/calendars

Returns the list of Google Calendars available to the user

Parameters

NameInTypeRequiredDescription
userIdquerystringYesThe user ID

Responses

CodeDescription
200Calendars retrieved successfully
400Missing userId or Google Calendar not connected
500Failed to fetch calendars

Update selected calendar

POST /integrations/google-calendar/update-calendar

Changes the calendar used for syncing bookings

Request body

FieldTypeRequiredDescription
userIdstringYesThe user ID
calendarIdstringYesThe Google Calendar ID to use

Responses

CodeDescription
200Calendar updated successfully
400Missing userId/calendarId or Google Calendar not connected
500Failed to update calendar

Trigger manual calendar sync

POST /integrations/google-calendar/sync

Manually triggers a full calendar sync job. Primarily for testing and debugging.

Responses

CodeDescription
200Sync job started
500Failed to trigger sync

Google Things To Do

Get schema for inventory item

GET /schema/inventory/{inventoryId}

Returns JSON-LD structured data for a single inventory item, formatted for Google Search rich results (Things to Do)

Parameters

NameInTypeRequiredDescription
inventoryIdpathstringYesThe inventory item ID
baseUrlquerystringNoBase URL for generating links

Responses

CodeDescription
200JSON-LD schema for the inventory item
403Inventory is not publicly visible
404Inventory or location not found
500Internal server error

Get schema for location

GET /schema/location/{locationId}

Returns JSON-LD LocalBusiness schema for a location including all its public inventory items

Parameters

NameInTypeRequiredDescription
locationIdpathstringYesThe location ID
baseUrlquerystringNoBase URL for generating links

Responses

CodeDescription
200JSON-LD LocalBusiness schema for the location
404Location not found
500Internal server error

Get all schemas for customer

GET /schema/all/{customerId}

Returns an array of JSON-LD schemas for all locations and their public inventory belonging to a customer

Parameters

NameInTypeRequiredDescription
customerIdpathstringYesThe customer/business ID
baseUrlquerystringNoBase URL for generating links

Responses

CodeDescription
200Array of JSON-LD schemas
404No locations found for customer
500Internal server error

Viator Integration

Configure Viator integration

POST /viator/admin/configure

Create or update the Viator marketplace configuration for a customer. Uses JWT auth (admin only).

Request body

FieldTypeRequiredDescription
customerIdstringYes
supplierIdstringYes
apiKeystringYesInbound API key for Viator to authenticate with RentalTide
viatorApiKeystringNoOutbound API key for sending notifications to Viator
currencystringNo
isActivebooleanNo

Responses

CodeDescription
200Configuration saved successfully
400Missing required fields
500Internal server error

Tour List (V1)

POST /viator/tourlist

Returns the full product catalog for this supplier. Authenticated via Viator API key.

Responses

CodeDescription
200List of tours/products
401Unauthorized

Calendar availability (V2)

POST /viator/v2/availability/calendar

Returns availability and pricing for a date range across products.

Request body

FieldTypeRequiredDescription
productOptionIdsarrayYes
startDatestringYes
endDatestringYes

Responses

CodeDescription
200Calendar availability data
400Missing required fields

Availability check (V2)

POST /viator/v2/availability/check

Real-time capacity check for specific products, dates, and traveler counts.

Request body

FieldTypeRequiredDescription
productOptionsarrayYes
travelDatestringYes

Responses

CodeDescription
200Availability status per product
400Missing required fields

Reserve inventory (V2)

POST /viator/v2/reserve

Hold inventory for 15+ minutes while Viator processes payment.

Request body

FieldTypeRequiredDescription
productOptionIdstringYes
travelDatestringYes
startTimestringNo
ticketsarrayNo
totalTravelersintegerNo

Responses

CodeDescription
200Reservation created with expiration time
400Missing required fields
404Product not found

Confirm booking (V1)

POST /viator/booking

Confirm a previously reserved booking after Viator has processed payment.

Responses

CodeDescription
200Booking confirmed or rejected

Cancel booking (V1)

POST /viator/booking-cancellation

Cancel a confirmed Viator booking.

Responses

CodeDescription
200Cancellation confirmed or rejected

Special offers (V2)

POST /viator/v2/product/special-offers

Returns active promotions and special offers.

Responses

CodeDescription
200List of special offers (currently returns empty)

Amend booking (V1)

POST /viator/booking-amendment

Modify an existing booking (date change, traveler details).

Responses

CodeDescription
200Amendment confirmed or rejected

Unified dispatcher (all request types)

POST /viator/api

Single endpoint that accepts all Viator request types via a requestType discriminator. Auth is read from data.ApiKey in the request body instead of headers.

Request body

FieldTypeRequiredDescription
requestTypestringYes
dataobjectYes

Responses

CodeDescription
200Response from the dispatched handler
400Missing or unknown requestType
401Invalid or missing ApiKey in data

vQuip

Check vQuip integration status

GET /vquip/status

Check if the current customer has an active vQuip integration.

Parameters

NameInTypeRequiredDescription
customerIdquerystringYesThe customer ID

Responses

CodeDescription
200Integration status retrieved successfully
400customerId is required
500Failed to check vQuip status

Connect vQuip integration

POST /vquip/connect

Save vQuip credentials, test the connection, and activate the integration.

Request body

FieldTypeRequiredDescription
customerIdstringYes
clientIdstringYes
clientSecretstringYes
tokenUrlstringYes

Responses

CodeDescription
200vQuip connected successfully
400Missing required parameters or connection test failed
500Failed to connect vQuip

Disconnect vQuip integration

DELETE /vquip/disconnect

Deactivate the vQuip integration for the customer.

Parameters

NameInTypeRequiredDescription
customerIdquerystringYesThe customer ID

Responses

CodeDescription
200vQuip disconnected successfully
400customerId is required
500Failed to disconnect vQuip

Get vQuip inventory types

GET /vquip/inventory-types

Fetch all inventory types from the connected vQuip account.

Parameters

NameInTypeRequiredDescription
customerIdquerystringYesThe customer ID

Responses

CodeDescription
200Inventory types retrieved successfully
400vQuip not configured for this customer
500Failed to get inventory types

Get vQuip products

GET /vquip/products

Fetch all products from the connected vQuip account.

Parameters

NameInTypeRequiredDescription
customerIdquerystringYesThe customer ID

Responses

CodeDescription
200Products retrieved successfully
400vQuip not configured for this customer
500Failed to get products

Get vQuip reservations

GET /vquip/reservations

Fetch reservations from vQuip by external booking ID.

Parameters

NameInTypeRequiredDescription
customerIdquerystringYesThe customer ID
externalBookingIdquerystringYesThe RentalTide booking ID to look up in vQuip

Responses

CodeDescription
200Reservations retrieved successfully
400Missing required parameters or vQuip not configured
500Failed to get reservations

Create a vQuip reservation

POST /vquip/reservations

Push a RentalTide booking to vQuip as a new reservation.

Request body

FieldTypeRequiredDescription
customerIdstringYes
externalBookingIdstringYes
startDatestringYes
endDatestringYes
productIdstringYes
customerNamestringYes
customerEmailstringNo
customerPhonestringNo
totalAmountnumberNo
notesstringNo

Responses

CodeDescription
201Reservation created successfully
400Missing required parameters or vQuip not configured
500Failed to create reservation

Update a vQuip reservation

PUT /vquip/reservations/{reservationId}

Update an existing reservation in vQuip.

Parameters

NameInTypeRequiredDescription
reservationIdpathstringYesThe vQuip reservation ID

Request body

FieldTypeRequiredDescription
customerIdstringYes
startDatestringNo
endDatestringNo
productIdstringNo
customerNamestringNo
customerEmailstringNo
customerPhonestringNo
totalAmountnumberNo
notesstringNo
statusstringNo

Responses

CodeDescription
200Reservation updated successfully
400vQuip not configured for this customer
500Failed to update reservation

Cancel a vQuip reservation

PUT /vquip/reservations/{reservationId}/cancel

Cancel an existing reservation in vQuip.

Parameters

NameInTypeRequiredDescription
reservationIdpathstringYesThe vQuip reservation ID

Request body

FieldTypeRequiredDescription
customerIdstringYes

Responses

CodeDescription
200Reservation cancelled successfully
400vQuip not configured for this customer
500Failed to cancel reservation

Create an external invoice on a vQuip reservation

POST /vquip/reservations/{reservationId}/invoice

Create an external invoice linked to a vQuip reservation.

Parameters

NameInTypeRequiredDescription
reservationIdpathstringYesThe vQuip reservation ID

Request body

FieldTypeRequiredDescription
customerIdstringYes
amountnumberYes
descriptionstringNo

Responses

CodeDescription
201Invoice created successfully
400Missing required parameters or vQuip not configured
500Failed to create invoice

Sync a RentalTide booking to vQuip

POST /vquip/sync-booking

Load a booking and create vQuip reservations for each assigned asset with a product mapping. Creates an invoice on the first reservation if totalPrice > 0.

Request body

FieldTypeRequiredDescription
rentalIdstringYes
customerIdstringYes
locationIdstringYes

Responses

CodeDescription
200Sync completed
400Missing parameters or vQuip not configured
500Sync failed

Wave Integration

Initiate Wave OAuth2 flow

GET /auth/wave/connect

Generates an authorization URL to start the Wave OAuth2 connection process.

Parameters

NameInTypeRequiredDescription
businessIdquerystringYesThe business ID to connect Wave to

Responses

CodeDescription
200Authorization URL generated successfully
400Business ID required
500Failed to initiate Wave connection

Handle Wave OAuth2 callback

GET /auth/wave/callback

Handles the OAuth2 callback from Wave, exchanges authorization code for tokens.

Parameters

NameInTypeRequiredDescription
codequerystringYes
statequerystringYes

Responses

CodeDescription
302Redirects to frontend with connection status

Get Wave integration status

GET /wave/integration-status

Parameters

NameInTypeRequiredDescription
businessIdquerystringYes

Responses

CodeDescription
200Integration status retrieved successfully

Disconnect Wave integration

DELETE /wave/disconnect

Disconnects the Wave integration while preserving GL mappings.

Request body

FieldTypeRequiredDescription
businessIdstringYes

Responses

CodeDescription
200Wave disconnected successfully

Fetch chart of accounts from Wave

GET /wave/chart-of-accounts

Parameters

NameInTypeRequiredDescription
businessIdquerystringYes

Responses

CodeDescription
200Chart of accounts fetched successfully

Get Wave businesses for the connected account

GET /wave/businesses

Parameters

NameInTypeRequiredDescription
businessIdquerystringYes

Responses

CodeDescription
200Businesses fetched successfully

Select which Wave business to use

PUT /wave/select-business

Request body

FieldTypeRequiredDescription
businessIdstringYes
waveBusinessIdstringYes
waveBusinessNamestringYes

Responses

CodeDescription
200Business selected successfully

Set bank account for invoice payments

PUT /wave/bank-account

Request body

FieldTypeRequiredDescription
businessIdstringYes
bankAccountIdstringYes

Responses

CodeDescription
200Bank account updated successfully

Get current GL code mappings

GET /wave/gl-mappings

Parameters

NameInTypeRequiredDescription
businessIdquerystringYes

Responses

CodeDescription
200GL mappings retrieved successfully

Update GL code mappings

PUT /wave/gl-mappings

Request body

FieldTypeRequiredDescription
businessIdstringYes
glMappingsobjectYes

Responses

CodeDescription
200GL mappings updated successfully

Voice

Handle incoming phone call

POST /communication/voice/incoming-call

Twilio webhook endpoint that handles incoming phone calls. Looks up the location by Twilio phone number, identifies the caller, and generates IVR menu response.

Responses

CodeDescription
200TwiML response with IVR menu

Handle IVR key press

POST /communication/voice/handle-key

Processes DTMF key presses from the IVR menu and executes the corresponding action (dial, voicemail, say message, etc.).

Parameters

NameInTypeRequiredDescription
locationIdquerystringYesThe location ID
callSidquerystringYesThe Twilio call SID

Responses

CodeDescription
200TwiML response with action result

Handle sequential dial progression

POST /communication/voice/sequential-dial-next

Handles the progression of sequential dialing when a number doesn't answer. Moves to the next number in the ring list.

Parameters

NameInTypeRequiredDescription
locationIdquerystringYesThe location ID
callSidquerystringYesThe Twilio call SID
currentIndexqueryintegerYesThe current index in the ring list
ringListquerystringYesJSON-encoded array of phone numbers

Responses

CodeDescription
200TwiML response for next dial or message

Handle recording webhook from Twilio

POST /communication/voice/recording-webhook

Webhook endpoint that receives call recording notifications from Twilio. Processes and uploads recordings to S3.

Responses

CodeDescription
200Recording processed successfully
400Missing required recording data
500Error processing recording

Handle voicemail recording completion

POST /communication/voice/handle-recording

Processes a completed voicemail recording and saves it to the database.

Parameters

NameInTypeRequiredDescription
locationIdquerystringYesThe location ID

Responses

CodeDescription
200TwiML response with thank you message

Get recorded calls with pagination

GET /communication/voice/recordings/{locationId}

Retrieves call recordings for a location with pagination and optional type filtering.

Parameters

NameInTypeRequiredDescription
locationIdpathstringYesThe location ID
pagequeryintegerNoPage number
limitqueryintegerNoNumber of items per page (max 50)
typequerystringNoFilter by recording type

Responses

CodeDescription
200Recordings retrieved successfully
500Failed to fetch recordings

Get voicemails for a location

GET /communication/voice/voicemails/{locationId}

Legacy endpoint that retrieves voicemails for a specific location, sorted by timestamp descending.

Parameters

NameInTypeRequiredDescription
locationIdpathstringYesThe location ID

Responses

CodeDescription
200Voicemails retrieved successfully
500Failed to fetch voicemails

Delete a voicemail

DELETE /communication/voice/voicemails/{voicemailId}

Permanently deletes a voicemail recording by its ID.

Parameters

NameInTypeRequiredDescription
voicemailIdpathstringYesThe voicemail ID

Responses

CodeDescription
200Voicemail deleted successfully
500Failed to delete voicemail

Test OpenAI voice generation

GET /communication/voice/test-openai-voice

Test endpoint to verify OpenAI voice generation is working correctly.

Parameters

NameInTypeRequiredDescription
textquerystringNoThe text to convert to speech
voicequerystringNoThe OpenAI voice to use

Responses

CodeDescription
200Voice generated successfully
500OpenAI voice test failed

Generate voice preview for IVR configuration

GET /communication/voice/voice-preview/{voice}

Generates a preview of a specific OpenAI voice for IVR configuration purposes.

Parameters

NameInTypeRequiredDescription
voicepathstringYesThe OpenAI voice identifier (e.g., alloy, echo, fable)

Responses

CodeDescription
200Voice preview generated successfully
500Voice preview generation failed

Configure location to use OpenAI voice

POST /communication/voice/configure-openai/{locationId}

Updates a location's IVR configuration to use OpenAI voice engine with the specified voice.

Parameters

NameInTypeRequiredDescription
locationIdpathstringYesThe location ID

Request body

FieldTypeRequiredDescription
voicestringNoThe OpenAI voice to use

Responses

CodeDescription
200Location configured for OpenAI voice successfully
404Location not found
500Failed to configure OpenAI voice

Get call logs for a location with pagination

GET /communication/voice/logs/{locationId}

Retrieves call logs for a specific location with pagination support.

Parameters

NameInTypeRequiredDescription
locationIdpathstringYesThe location ID
pagequeryintegerNoPage number
limitqueryintegerNoNumber of items per page (max 50)

Responses

CodeDescription
200Call logs retrieved successfully
500Failed to fetch call logs

Get all call logs (admin view)

GET /communication/voice/call-logs

Retrieves all call logs across all locations for admin purposes.

Parameters

NameInTypeRequiredDescription
limitqueryintegerNoMaximum number of logs to return

Responses

CodeDescription
200Call logs retrieved successfully
500Failed to fetch call logs

Handle call status webhook from Twilio

POST /communication/voice/call-status

Webhook endpoint that receives call status updates from Twilio and updates the call log.

Responses

CodeDescription
200Call status update processed
500Error updating call status

Initiate callback call

POST /communication/voice/initiate-callback

Initiates a callback call where the user is called first, then connected to the destination number. Requires authentication.

Request body

FieldTypeRequiredDescription
userPhonestringYesThe user's phone number to call first
destinationPhonestringYesThe destination phone number to connect to
locationIdstringYesThe location ID for caller ID and authorization

Responses

CodeDescription
200Callback call initiated successfully
400Missing required parameters
403Unauthorized - location doesn't belong to user's account
404Location not found
500Failed to initiate callback call

Handle callback call answer

POST /communication/voice/callback-answer

Twilio webhook called when the user answers the callback call. Dials the destination number.

Parameters

NameInTypeRequiredDescription
sessionIdquerystringYesThe callback session ID
destinationPhonequerystringYesThe destination phone number to connect to

Responses

CodeDescription
200TwiML response to dial destination

Handle callback call completion

POST /communication/voice/callback-complete

Twilio webhook called when the callback call is completed. Updates call log with final status.

Parameters

NameInTypeRequiredDescription
sessionIdquerystringYesThe callback session ID

Responses

CodeDescription
200TwiML response with completion message

Search for customer by phone number

GET /communication/voice/search-renter/{phoneNumber}

Searches for a customer by phone number within the authenticated user's customer records. Requires authentication.

Parameters

NameInTypeRequiredDescription
phoneNumberpathstringYesThe phone number to search for

Responses

CodeDescription
200Search result
500Failed to search for customer

Shipments

Create a new incoming shipment

POST /shipments

Creates a new incoming shipment record to track inventory deliveries.

Request body

FieldTypeRequiredDescription
locationIdstringYesThe location ID for the shipment
expectedArrivalDatestringYesExpected arrival date (ISO string)
trackingNumberstringNoShipping tracking number
notesstringNoAdditional notes
itemsarrayYes
shippingCostnumberNo
importCostnumberNo
taxesnumberNo

Responses

CodeDescription
201Shipment created successfully
400Missing required fields
500Internal server error

List all shipments for a location

GET /shipments

Retrieves all shipments for a given location.

Parameters

NameInTypeRequiredDescription
locationIdquerystringYesThe location ID to get shipments for

Responses

CodeDescription
200Shipments retrieved successfully
400Missing locationId parameter
500Internal server error

Get a single shipment

GET /shipments/{shipmentId}

Retrieves details for a specific shipment.

Parameters

NameInTypeRequiredDescription
shipmentIdpathstringYesThe shipment ID

Responses

CodeDescription
200Shipment retrieved successfully
400Missing shipmentId parameter
404Shipment not found
500Internal server error

Delete a shipment

DELETE /shipments/{shipmentId}

Deletes a shipment if it has not been marked as arrived/received.

Parameters

NameInTypeRequiredDescription
shipmentIdpathstringYesThe shipment ID

Responses

CodeDescription
200Shipment deleted successfully
400Missing shipmentId or cannot delete arrived shipment
404Shipment not found
500Internal server error

Mark shipment as arrived

PUT /shipments/{shipmentId}/arrived

Marks a shipment as arrived and updates inventory quantities accordingly.

Parameters

NameInTypeRequiredDescription
shipmentIdpathstringYesThe shipment ID

Responses

CodeDescription
200Shipment marked as arrived and inventory updated
400Missing shipmentId or shipment already arrived
404Shipment not found
500Internal server error

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.