Endpoints for managing the booking lifecycle -- from creation through checkout and return.
Core Booking
Create a new booking
POST /coreBooking/book
Main booking endpoint that handles the complete booking workflow including:
- Customer creation/updates
- Payment processing (full or installment plans)
- Inventory management and asset assignment
- Booking record creation
- Notifications and accounting entries
- Loyalty points awarding
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rentalDetails | object | Yes | Core rental information |
rentalPricing | object | Yes | Pricing breakdown |
customerInfo | object | Yes | Customer details |
depositInformation | object | No | Deposit configuration |
discountDetails | object | No | Applied discounts |
paymentMethodId | string | No | Stripe payment method ID |
paymentPlan | object | No | Payment plan type (full or installments) |
selectedBoatAddons | array | No | |
globalAddons | array | No | |
extendedData | object | Yes | Additional booking data including location and customer info |
Responses
| Code | Description |
|---|---|
201 | Booking created successfully |
400 | Invalid request data or validation error |
402 | Payment authorization failed |
409 | Time slot unavailable or fully booked |
500 | Internal server error |
Booking Schedule
Get booking schedule for an inventory
GET /schedule/schedule
Retrieves booking schedule with date range optimization, filtering, sorting, and pagination support
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
inventory_id | query | string | Yes | The inventory ID to get schedule for |
start_date | query | string | No | Filter bookings from this date |
end_date | query | string | No | Filter bookings until this date |
extend | query | string | No | Include extended record data |
dates_only | query | string | No | Return only date information |
page | query | integer | No | Page number for pagination |
limit | query | integer | No | Number of items per page |
include_drydock | query | string | No | Include drydock bookings |
use_parallel | query | string | No | Enable parallel loading |
use_scan | query | string | No | Force table scan if GSI issues |
search_rental_id | query | string | No | Search for specific rental ID |
sort_by | query | string | No | Sort field |
sort_order | query | string | No | Sort direction |
status_filter | query | string | No | Filter by booking status (comma-separated) |
Responses
| Code | Description |
|---|---|
200 | Successfully retrieved booking schedule |
400 | Missing required inventory_id parameter |
500 | Internal server error |
Search bookings
GET /schedule/schedule/search
Quick search endpoint to find specific bookings by rental ID, customer name, or email
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
inventory_id | query | string | Yes | The inventory ID to search within |
rental_id | query | string | No | Partial rental ID to search for |
customer_name | query | string | No | Customer name to search for |
email | query | string | No | Customer email to search for |
Responses
| Code | Description |
|---|---|
200 | Search results returned successfully |
400 | Missing required inventory_id parameter |
500 | Search failed |
Get inventory items by location
GET /schedule/location
Retrieves inventory items for specified location IDs
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
location_ids | query | string | Yes | JSON array string of location IDs |
Responses
| Code | Description |
|---|---|
200 | Successfully retrieved inventory items |
400 | Missing or invalid location_ids parameter |
500 | Internal server error |
Get bookings by customer and status
GET /schedule/by-customer-status
Query bookings by customerId and optionally filter by Status using the customerId-Status-index GSI
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
customer_id | query | string | No | Customer ID (defaults to authenticated user) |
status | query | string | No | Filter by specific booking status |
start_date | query | string | No | Filter bookings from this date |
end_date | query | string | No | Filter bookings until this date |
page | query | integer | No | Page number for pagination |
limit | query | integer | No | Number of items per page |
sort_order | query | string | No | Sort direction |
lightweight | query | string | No | Return minimal data for boards |
Responses
| Code | Description |
|---|---|
200 | Successfully retrieved bookings |
400 | Missing required customer_id |
500 | Internal server error |
Get bookings by location and status
GET /schedule/by-location-status
Query bookings by locationId and optionally filter by Status using the locationId-Status-index GSI
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
location_id | query | string | Yes | Location ID to query |
status | query | string | No | Filter by specific booking status |
start_date | query | string | No | Filter bookings from this date |
end_date | query | string | No | Filter bookings until this date |
page | query | integer | No | Page number for pagination |
limit | query | integer | No | Number of items per page |
sort_order | query | string | No | Sort direction |
lightweight | query | string | No | Return minimal data for boards |
Responses
| Code | Description |
|---|---|
200 | Successfully retrieved bookings |
400 | Missing required location_id |
500 | Internal server error |
Get paginated schedules with cursor-based pagination
GET /schedule/schedules/paginated
Retrieves schedules with smart pagination and advanced filtering support
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | No | Number of items per page |
cursor | query | string | No | Base64 encoded cursor for pagination |
filters | query | string | No | JSON encoded filter criteria |
Responses
| Code | Description |
|---|---|
200 | Successfully retrieved paginated schedules |
400 | Invalid cursor or filters format |
401 | Customer ID not found |
500 | Failed to fetch schedules |
Get total count of schedules
GET /schedule/schedules/count
Returns the total count of schedules for the authenticated customer with optional filtering
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
filters | query | string | No | JSON encoded filter criteria |
Responses
| Code | Description |
|---|---|
200 | Successfully retrieved count |
400 | Invalid filters format |
401 | Customer ID not found |
500 | Failed to count schedules |
Booking Payments
Authorize a deposit
POST /preAuth/authorize-deposit
Creates a pre-authorization for a security/damage deposit using Stripe or terminal payment
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rentalId | string | Yes | The ID of the rental/booking |
authorizeAmount | number | Yes | Amount to authorize in dollars |
currency | string | No | Currency code |
description | string | No | Description for the payment |
customer | string | No | Stripe customer ID |
paymentMethodType | string | Yes | Payment method type |
paymentMethodId | string | No | Stripe payment method ID (required for stripe type) |
notes | string | No | Notes for the deposit |
readerId | string | No | Terminal reader ID (for terminal payments) |
connectedAccountId | string | No | Stripe connected account ID |
platformFeePercent | number | No | Platform fee percentage |
customerId | string | No | Customer ID |
locationId | string | No | Location ID |
Responses
| Code | Description |
|---|---|
200 | Deposit pre-authorization successful |
400 | Missing required fields or unsupported payment method |
500 | Server error |
Finalize a deposit
POST /preAuth/post-deposit
Records the deposit information in the booking record after terminal payment completes
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rentalId | string | Yes | The ID of the rental/booking |
authorizeAmount | number | No | Amount that was authorized |
customerId | string | No | Customer ID |
locationId | string | No | Location ID |
notes | string | No | Notes for the deposit |
intentId | string | Yes | Stripe PaymentIntent ID |
connectId | string | No | Stripe connected account ID |
Responses
| Code | Description |
|---|---|
200 | Deposit finalized successfully |
400 | Missing required fields or payment not successful |
500 | Server error |
Capture a deposit
POST /preAuth/capture-deposit
Captures a pre-authorized deposit payment for checkout or damage claims
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rentalId | string | Yes | The ID of the rental/booking |
paymentIntentId | string | Yes | Stripe PaymentIntent ID to capture |
captureAmount | number | Yes | Amount to capture in dollars |
connectedAccountId | string | No | Stripe connected account ID |
description | string | No | Description for the capture |
claimType | string | No | Type of claim |
feeInCents | number | No | Platform fee in cents |
locationId | string | No | Location ID |
Responses
| Code | Description |
|---|---|
200 | Deposit captured successfully |
400 | Missing required fields or payment cannot be captured |
404 | Payment intent not found |
500 | Server error |
Release a deposit
POST /preAuth/release-deposit
Releases (cancels) a pre-authorized deposit that won't be charged
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rentalId | string | Yes | The ID of the rental/booking |
paymentIntentId | string | Yes | Stripe PaymentIntent ID to release |
amount | number | No | Amount being released |
customerId | string | No | Customer ID for notification |
locationId | string | No | Location ID for notification |
connectedAccountId | string | No | Stripe connected account ID |
Responses
| Code | Description |
|---|---|
200 | Deposit released successfully |
400 | Missing required fields |
500 | Server error |
Sync missing pre-authorization
POST /preAuth/sync-missing-preauth/{paymentIntentId}
Recovery endpoint to manually sync a missing pre-authorization from Stripe to database
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
paymentIntentId | path | string | Yes | Stripe PaymentIntent ID to sync |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rentalId | string | No | Override rental ID if not in metadata |
locationId | string | No | Location ID for Stripe region |
Responses
| Code | Description |
|---|---|
200 | Pre-authorization synced successfully |
400 | Missing paymentIntentId or rentalId |
404 | PaymentIntent not found |
500 | Server error |
Audit pre-authorizations
GET /preAuth/audit-preauths/{rentalId}
Retrieves all pre-authorizations for a rental from Stripe with status and expiration details
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
rentalId | path | string | Yes | The rental ID to audit |
locationId | query | string | No | Location ID for Stripe region |
connected_account_id | query | string | No | Stripe connected account ID for direct charges |
Responses
| Code | Description |
|---|---|
200 | Audit results returned successfully |
500 | Server error |
Create terminal connection token
POST /preAuth/connection-token
Creates a Stripe Terminal connection token for terminal payments
Request body
| Field | Type | Required | Description |
|---|---|---|---|
locationId | string | No | Location ID for Stripe region |
Responses
| Code | Description |
|---|---|
200 | Connection token created successfully |
500 | Server error |

