Browse vehicles, create bookings, and integrate with Joyryde programmatically. Designed for developers and AI agents alike.
Base URL
https://joy-ryde-platform-v2-production.up.railway.app
🔒
Authentication
Public endpoints (vehicles, contact, leads, ask) require no authentication. Booking management and admin endpoints require a bearer token via the Authorization: Bearer <token> header. The /api/checkout/* endpoints are public but create Stripe sessions server-side.
AI Agent Access
Joyryde is built agent-first. Every endpoint returns structured JSON. AI agents can discover our API via these dedicated resources.
Agent Discovery
AI agents and LLMs can discover Joyryde's capabilities through these machine-readable files:
/llms.txt — Plain-text summary of Joyryde's services, endpoints, and capabilities for LLM context windows
/api-docs — Full OpenAPI 3.0 specification (JSON) documenting every endpoint, parameter, and response schema
POST /api/ask — Natural language query endpoint. Send a plain English question, get structured JSON back. Agents can use this before learning our API schema.
POST/api/askNatural language query for AI agents▾
Accepts a plain English question and returns structured JSON with the answer or a pointer to the right endpoint. This is the primary entry point for AI agents that haven't learned the API schema yet.
Request Body
Field
Type
Required
Description
query
string
Yes
Plain English question (e.g., "What SUVs do you have available next week?")
{
"query": "What vehicles do you have for long-term rental?"
}
200 OK
{
"received_query": "What vehicles do you have for long-term rental?",
"status": "nl_processing_not_yet_implemented",
"suggestion": "Use structured endpoints directly",
"available_endpoints": {
"vehicles": "GET /api/vehicles",
"availability": "GET /api/availability?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD",
"booking": "POST /api/bookings"
},
"docs": "https://joy-ryde.com/api-docs"
}
GET/healthHealth check▾
Returns current service status, version, and environment. Use this to verify the API is online before making other calls.
Browse the Joyryde fleet. Vehicle data is sourced live from our master fleet spreadsheet with a 15-minute cache. Eight categories for short-term, two for long-term.
GET/api/vehiclesList vehicle categories with live fleet counts▾
Returns all vehicle categories with real-time availability counts from the live fleet inventory. Use the type query parameter to filter by rental type.
GET/api/checkout/successVerify booking after payment▾
Verify that a booking's payment completed successfully. Called after Stripe redirect.
Query Parameters
Param
Type
Required
Description
ref
string
Yes
Booking reference number
Contact
Submit inquiries and messages to the Joyryde team.
POST/api/contactSubmit contact form message▾
Rate limited: 10 requests per hour
Request Body
Field
Type
Required
Description
name
string
Yes
Sender's full name
email
string
Yes
Sender's email address
phone
string
No
Sender's phone number
message
string
No
Message body
source
string
No
Where the contact came from (default: "website")
Leads
Capture leads and manage newsletter subscriptions. Leads are scored automatically and enter nurture email sequences based on contact preference.
POST/api/leadsCapture lead from form▾
Captures a lead with automatic scoring. The lead enters a nurture sequence based on their contact preference.
Rate limited: 20 requests per 15 minutes
Request Body
Field
Type
Required
Description
contact_preference
string
Yes
newsletteremailtextcall
name
string
No
Lead's name
email
string
No
Lead's email (required for newsletter/email preference)
phone
string
No
Lead's phone (required for text/call preference)
monthly_miles
number
No
Monthly miles driven (from calculator)
car_payment
number
No
Current monthly car payment (from calculator)
utm_source
string
No
UTM source parameter
utm_medium
string
No
UTM medium parameter
utm_campaign
string
No
UTM campaign parameter
200 OK
{
"success": true,
"leadId": 17
}
POST/api/leads/unsubscribeUnsubscribe from newsletter▾
Unsubscribe an email address from the newsletter using a CAN-SPAM compliant token.
Request Body
Field
Type
Required
Description
token
string
Yes
Unsubscribe token (from email link)
POST/api/leads/resubscribeResubscribe to newsletter▾
Re-subscribe a previously unsubscribed email using their token.
Request Body
Field
Type
Required
Description
token
string
Yes
Unsubscribe token
AI Chat
AI-powered financial advisor for comparing car ownership vs. renting. Powered by Claude Haiku with per-IP and global daily cost caps.
POST/api/smart/chatAI financial advisor chatbot▾
Send a conversation to the AI advisor. It specializes in comparing car ownership/lease costs against renting, with a focus on total cost of ownership for gig economy drivers.
Request Body
Field
Type
Required
Description
messages
array
Yes
Array of message objects with role (user or assistant) and content (string, max 2000 chars)
{
"messages": [
{ "role": "user", "content": "I drive Uber 40 hours a week. Is it cheaper to rent or buy?" }
]
}
200 OK
{
"content": "Great question! Let's break down the numbers...",
"usage": {
"input_tokens": 142,
"output_tokens": 387
}
}
Check-In
Self-service check-in portal for short-term rentals. Token-gated — customers receive a unique check-in link after booking approval. Handles identity verification, payment authorization, and vehicle handoff.
Validates a check-in token and returns booking state. Used to initialize the check-in portal.
Request Body
Field
Type
Required
Description
token
string
Yes
64-character hex check-in token from email link
POST/api/checkin/upload-photoUpload identity or vehicle photo▾
Upload a photo as part of the check-in process. Accepts driver's license (front/back), selfie, and vehicle condition photos. Max 10MB, JPEG/PNG/HEIC. Rate limited to 20 uploads per token.
Request Body (multipart/form-data)
Field
Type
Required
Description
token
string
Yes
Check-in token
photo_type
string
Yes
One of: license_front, license_back, selfie, vehicle_front, vehicle_back, vehicle_left, vehicle_right
Places an authorization hold on the customer's saved card for the remaining 80% balance. Requires identity verification to be complete first. Hold is captured when vehicle photos are submitted.
POST/api/checkin/vehicle-photos-completeComplete check-in and reveal lockbox code▾
Verifies all 4 vehicle condition photos are uploaded, captures the payment hold, and returns the lockbox code. This is the only endpoint that reveals the lockbox code.
GET/api/checkin/statusCheck-in progress status▾
Returns current check-in progress including which photos have been uploaded and payment authorization state. Query param: ?token=xxx
General Notes
For Developers & Integrators
All responses are JSON with Content-Type: application/json
All dates use ISO 8601 format (YYYY-MM-DD)
All prices are in USD
Rate limits return 429 Too Many Requests with a retry message
Booking reference numbers follow the pattern JR-XXXXXX
CORS is enabled for joy-ryde.com and Vercel preview deployments