Endpoints for managing marina slip inventory, reservations, contracts, waitlists, guest access, subscriptions, and tenant portal operations.
Slips
Get all slips for a location
GET /slips
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
locationId | query | string | Yes | |
status | query | string | No | |
unitType | query | string | No | |
section | query | string | No |
Create a new slip
POST /slips
Creates a new slip. Requires an active slip subscription. If adding this slip exceeds the current quota, additional slips ($10/slip/month) will be automatically billed.
Get available slips matching criteria
GET /slips/availability
Get distinct sections for a location
GET /slips/sections
Get slip status counts for a location
GET /slips/stats
Search slips by unit number or name
GET /slips/search
Bulk create slips with a prefix and number range
POST /slips/bulk-create
Bulk update multiple slips
PUT /slips/bulk
Rename a section across all slips
PUT /slips/sections/rename
Get sections with slip counts for a location
GET /slips/sections/counts
Delete a section (clear section from all slips)
DELETE /slips/sections/{name}
Get a single slip by ID
GET /slips/{id}
Update a slip
PUT /slips/{id}
Delete a slip (soft delete by setting status to out_of_service)
DELETE /slips/{id}
Update slip status
PATCH /slips/{id}/status
Slip Reservations
Get reservations with filters
GET /slip-reservations
Create a new reservation
POST /slip-reservations
Get reservation statistics
GET /slip-reservations/stats
Get reservations due for billing
GET /slip-reservations/due-billing
Get reservations expiring soon
GET /slip-reservations/expiring
Check if a unit is available for dates
GET /slip-reservations/check-availability
Get reservation by reservation number
GET /slip-reservations/by-number/{reservationNumber}
Get a single reservation by ID
GET /slip-reservations/{id}
Update a reservation
PUT /slip-reservations/{id}
Permanently delete a cancelled reservation and all associated data
DELETE /slip-reservations/{id}
Recalculate totalAmount based on current pricing fields
POST /slip-reservations/{id}/recalculate-total
Confirm a pending reservation
POST /slip-reservations/{id}/confirm
Send bill to customer with hold timer
POST /slip-reservations/{id}/send-bill
Check in a reservation
POST /slip-reservations/{id}/check-in
Check out a reservation
POST /slip-reservations/{id}/check-out
Cancel a reservation
POST /slip-reservations/{id}/cancel
Transfer reservation to a different unit
POST /slip-reservations/{id}/transfer
Mark contract as signed
POST /slip-reservations/{id}/contract-signed
Send a message to slip reservation customer (staff)
POST /slip-reservations/{id}/messages
Get messages for a slip reservation (staff)
GET /slip-reservations/{id}/messages
Record a payment for a slip reservation
POST /slip-reservations/{id}/record-payment
Get payment history for a slip reservation
GET /slip-reservations/{id}/payments
Charge a saved credit card for a slip reservation
POST /slip-reservations/{id}/charge-card
Record a terminal or tap-to-pay payment for a slip reservation
POST /slip-reservations/{id}/terminal-charge
Recognize deferred revenue for a slip reservation
POST /slip-reservations/{id}/recognize-revenue
Refund a slip reservation payment
POST /slip-reservations/{id}/refund
Slip Contracts
Get contract templates for a location
GET /slip-contracts/templates
Create a new contract template
POST /slip-contracts/templates
Get available template variables
GET /slip-contracts/templates/variables
Get a specific contract template
GET /slip-contracts/templates/{id}
Update a contract template
PUT /slip-contracts/templates/{id}
Delete a contract template
DELETE /slip-contracts/templates/{id}
Duplicate a contract template (including defaults)
POST /slip-contracts/templates/{id}/duplicate
Get all contracts for a reservation
GET /slip-contracts/reservation/{reservationId}
Get reservations with pending contracts
GET /slip-contracts/pending
Get reservations with signed contracts
GET /slip-contracts/signed
Get contract statistics
GET /slip-contracts/stats
Generate a contract for a reservation
POST /slip-contracts/generate
Send contract for signature
POST /slip-contracts/send
Mark contract as signed
POST /slip-contracts/sign
Resend contract for signature
POST /slip-contracts/resend
Void a contract
POST /slip-contracts/void
Regenerate PDF for a signed contract
POST /slip-contracts/regenerate-pdf
Slip Waitlist
Get waitlist entries for a location
GET /slips/waitlist
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
locationId | query | string | Yes | |
status | query | string | No |
Add to waitlist
POST /slips/waitlist
Get waitlist statistics for a location
GET /slips/waitlist/stats
Get waitlist entries for a specific renter
GET /slips/waitlist/renter/{renterId}
Get a single waitlist entry
GET /slips/waitlist/{id}
Update a waitlist entry
PUT /slips/waitlist/{id}
Delete a waitlist entry
DELETE /slips/waitlist/{id}
Make an offer to a waitlist entry
POST /slips/waitlist/{id}/offer
Accept an offer
POST /slips/waitlist/{id}/accept
Decline an offer
POST /slips/waitlist/{id}/decline
Cancel a waitlist entry
POST /slips/waitlist/{id}/cancel
Find matching waitlist entries for an available unit
GET /slips/waitlist/match/{unitId}
Slip Guest Access
Get guest access entries for a location
GET /slips/guest-access
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
locationId | query | string | Yes | |
reservationId | query | string | No | |
status | query | string | No |
Create a new guest access pass
POST /slips/guest-access
Get guest access statistics
GET /slips/guest-access/stats
Verify a guest access code
GET /slips/guest-access/verify/{accessCode}
Get a single guest access entry
GET /slips/guest-access/{id}
Update a guest access entry
PUT /slips/guest-access/{id}
Delete a guest access entry
DELETE /slips/guest-access/{id}
Record a guest check-in
POST /slips/guest-access/{id}/check-in
Mark guest ID as verified
POST /slips/guest-access/{id}/verify-id
Revoke guest access
POST /slips/guest-access/{id}/revoke
Expire old guest passes for a location
POST /slips/guest-access/expire
Slip Settings
Get slip booking settings for a location
GET /slip-settings/{locationId}
Returns the slip booking configuration with defaults merged
Update slip booking settings for a location
PUT /slip-settings/{locationId}
Get available contract templates for a location
GET /slip-settings/{locationId}/templates
Reset slip booking settings to defaults
POST /slip-settings/{locationId}/reset
Slip Subscription
Get current slip subscription status
GET /slip-subscription/status
Create Stripe checkout session for slip subscription
POST /slip-subscription/create-checkout
Add more slips to existing subscription (auto-bill per slip)
POST /slip-subscription/add-slips
Create Stripe customer portal session for subscription management
POST /slip-subscription/portal
Cancel slip subscription at end of billing period
POST /slip-subscription/cancel
Slip Customer Portal
Get current session info
GET /slip-portal/session
Get customer's reservations
GET /slip-portal/reservations
Get reservation details
GET /slip-portal/reservations/:id
Update vessel information for a reservation
PUT /slip-portal/reservations/:id/vessel
Get contract for signing
GET /slip-portal/reservations/:id/contract
Sign contract
POST /slip-portal/reservations/:id/contract/sign
Get document requirements and submitted documents
GET /slip-portal/reservations/:id/documents
Upload a document
POST /slip-portal/reservations/:id/documents
Get message thread
GET /slip-portal/reservations/:id/messages
Send a message
POST /slip-portal/reservations/:id/messages
Upload a document file to S3
POST /slip-portal/upload
Get saved payment methods
GET /slip-portal/payment-methods
Create a SetupIntent to add a new payment method
POST /slip-portal/setup-intent
Pay for a reservation
POST /slip-portal/reservations/:id/pay
Create a PaymentIntent for a reservation (for Stripe Elements)
POST /slip-portal/reservations/:id/create-payment-intent
Get guest access list for a reservation
GET /slip-portal/reservations/:id/guest-access
Add a guest access pass
POST /slip-portal/reservations/:id/guest-access
Revoke guest access
DELETE /slip-portal/reservations/:id/guest-access/:guestId
Get haul services for a reservation
GET /slip-portal/reservations/:id/haul-services
Request a haul service
POST /slip-portal/reservations/:id/haul-services
Cancel a haul service request
POST /slip-portal/reservations/:id/haul-services/:serviceId/cancel
Confirm a scheduled haul service
POST /slip-portal/reservations/:id/haul-services/:serviceId/confirm
Public Slips
Get all active maps with pins for a location
GET /public/slips/maps/{locationId}
Get slips as a list (for list view)
GET /public/slips/list/{locationId}
Get single slip details
GET /public/slips/{slipId}
Check slip availability for date range
GET /public/slips/{slipId}/availability
Join the waitlist for a slip
POST /public/slips/{slipId}/waitlist
Calculate price for a date range
POST /public/slips/calculate-price
Create a slip reservation (initiates checkout flow)
POST /public/slips/book
Creates a reservation using location-level booking settings for payment, approval, and documents
Get document requirements and submission status
GET /public/slips/reservations/{reservationId}/documents
Submit a document for a reservation
POST /public/slips/reservations/{reservationId}/documents
Accepts document metadata (actual file upload handled separately via S3 presigned URL)
Get location info for slip booking widget
GET /public/slips/location/{locationId}
Returns location details with slip booking configuration

