Public API · v1.0.0
Build on Tripistic
Read tours and availability, then create and track bookings for your workspace — the same operations layer the Tripistic dashboard runs on. JSON in, JSON out, every response enveloped and request-traced.
Quickstart
List the published tours of the workspace your API key belongs to. Every authenticated call is one bearer header away.
curl -sS \ -H "Authorization: Bearer tk_live_YOUR_KEY" \ "https://api.tripistic.com/v1/tours?limit=20"
Authentication
Workspace API keys, created in the Tripistic dashboard, act on behalf of exactly one workspace.
Bearer API keys
Send Authorization: Bearer <key> on every call except /health and /version. Keys carry scopes (for example tours:read, bookings:write); a valid key without the right scope gets the same 403 FORBIDDEN as any other denial — the API never says which check failed.
Idempotent booking creation
POST /bookings accepts an optional Idempotency-Key header. Retrying with the same key returns the original booking instead of creating a duplicate — safe for flaky networks and checkout retries.
Endpoints
All paths are relative to https://api.tripistic.com/v1. System endpoints are open; everything else requires a workspace API key.
System
Catalog
Bookings & operations
Response envelopes
Successes and errors never share a shape. Every envelope carries meta.requestId (errors inline it) — quote it when reporting a problem.
Success
{
"data": {
"tours": [ { "id": "tour_9f2a", "title": "Coastal Cycling & Vineyard Ride", "priceMinor": 11000, "priceCurrency": "USD" } ]
},
"pagination": { "nextCursor": null, "hasMore": false },
"meta": { "requestId": "req_219dbebd-27e7-4997-bb0c-04a98c7ee24e" }
}
Error
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The request query is not valid.",
"details": [ { "field": "limit", "issue": "unrecognized_keys" } ],
"requestId": "req_219dbebd-27e7-4997-bb0c-04a98c7ee24e"
}
}
Error codes
Stable machine-readable codes on every JSON error. Retry only on 429 and 5xx, and back off.
| Code | HTTP | Meaning |
|---|---|---|
VALIDATION_ERROR | 400 | Query or body failed schema validation — see details[]. |
UNAUTHORIZED | 401 | Invalid or missing API key. |
FORBIDDEN | 403 | The key is valid but not allowed to perform this action. |
NOT_FOUND | 404 | The requested resource does not exist in this workspace. |
METHOD_NOT_ALLOWED | 405 | The endpoint exists but not for this HTTP method. |
RATE_LIMITED | 429 | Too many requests — slow down and retry. |
UPSTREAM_ERROR | 502 | The API could not process this request. |
UPSTREAM_UNAVAILABLE | 503 | Temporary unavailability — retry shortly. |
INTERNAL_ERROR | 500 | Unexpected failure on our side. |