Simpli

API Reference

Internal API documentation for Simpli. Base URL: https://livesimpli.app

All mutating endpoints require Origin header validation (CSRF). Authenticated routes use Supabase JWT cookie.

SimpliFly — Flights

Search cash fares and award availability.

GET/api/fly/searchauth optional

Search flights

Returns cash fares (Amadeus) and award availability. Authenticated users track against daily quota. Streams NDJSON chunks.

Parameters

NameTypeReq.Description
originstring (IATA)3-letter departure airport code
destinationstring (IATA)3-letter arrival airport code
departDateYYYY-MM-DDOutbound departure date
returnDateYYYY-MM-DDReturn date (round trip only)
adultsinteger 1–9Number of adult passengers (default 1)
cabineconomy|premium_economy|business|firstCabin class (default economy)

Responses

200Streaming NDJSON: chunks of { type: 'result', data: NormalizedSearchResult[] } | { type: 'done' } | { type: 'error', message: string }
400Invalid query params (Zod validation error)
429{ "error": "rate_limit", "remaining": 0, "resetAt": "<ISO>" }
GET/api/fly/price-predictionauth optional

Get price prediction

Parameters

NameTypeReq.Description
originstring (IATA)Departure airport
destinationstring (IATA)Arrival airport
departDateYYYY-MM-DDTravel date

Responses

200{ signal: "low"|"typical"|"high", percentile: number, recommendation: string }
400Invalid params

SimpliStay — Hotels

Search hotels, get weather, and autocomplete destinations.

GET/api/stay/searchauth optional

Search hotels

Parameters

NameTypeReq.Description
destinationstringCity or area (min 2 chars)
checkInYYYY-MM-DDCheck-in date
checkOutYYYY-MM-DDCheck-out date
adultsinteger 1–9Adults (default 1)
roomsinteger 1–5Rooms (default 1)

Responses

200Streaming NDJSON: { type: 'properties', data: NormalizedProperty[] } | { type: 'meta', lat, lon, destination } | { type: 'done' }
400Validation error
429Rate limit exceeded
GET/api/stay/autocompletepublic

Destination autocomplete

Parameters

NameTypeReq.Description
qstringPartial destination query (min 2 chars)

Responses

200{ suggestions: string[] }
GET/api/stay/weatherpublic

Get weather forecast

Parameters

NameTypeReq.Description
latnumberLatitude
lonnumberLongitude
checkInYYYY-MM-DDCheck-in date
checkOutYYYY-MM-DDCheck-out date

Responses

200{ days: WeatherDay[] } — up to 16 days via Open-Meteo

SimpliPoints

User loyalty point balance management.

GET/api/pointsauth required

Get all balances

Responses

200Array of { program, balance, source, synced_at, updated_at }
POST/api/pointsauth required

Upsert a balance

Request body

{ "program": "chase_ur", "balance": 75000 }

Responses

200Updated row
400Validation error

Auth

Authentication helpers.

GET/auth/callbackpublic

Auth callback

Supabase OAuth/magic-link callback. Validates x-forwarded-host to prevent open redirect. Redirects to / on success or /login on error.

Responses

302Redirect to / (success) or /login?error=... (failure)
400Invalid or missing code