{"openapi":"3.1.0","info":{"title":"Tripistic API","version":"1.0.0","description":"BETA — Tripistic public API. Tours, availability, bookings, customers, guides and vehicles are authenticated by workspace API keys. Webhook configuration remains in beta.","x-status":"beta"},"components":{"schemas":{},"parameters":{}},"paths":{"/v1/health":{"get":{"operationId":"getHealth","summary":"API worker health","description":"Live API Worker health check.","tags":["System"],"responses":{"200":{"description":"The API Worker is healthy.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]}},"required":["status"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["data","meta"]}}}}}}},"/v1/version":{"get":{"operationId":"getVersion","summary":"API contract version","description":"Live public API contract version metadata.","tags":["System"],"responses":{"200":{"description":"The current public API contract version.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"version":{"type":"string","enum":["1.0.0"]}},"required":["version"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["data","meta"]}}}}}}},"/v1/tours":{"get":{"operationId":"listTours","summary":"List tours","description":"BETA. Returns the workspace's public, active tours, newest first. Cursor-paginated. Authenticated with a workspace API key bearing the tours:read scope.","tags":["Tours"],"parameters":[{"schema":{"type":"string","pattern":"^[1-9][0-9]{0,2}$"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"A page of tours.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tours":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string"},"description":{"type":["string","null"]},"durationMinutes":{"type":"integer"},"durationDays":{"type":["integer","null"]},"location":{"type":["string","null"]},"meetingPoint":{"type":["string","null"]},"capacity":{"type":"integer"},"priceMinor":{"type":"integer"},"priceCurrency":{"type":"string","minLength":3,"maxLength":3},"visibility":{"type":"string"},"status":{"type":"string"},"coverImageUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","title","slug","kind","description","durationMinutes","durationDays","location","meetingPoint","capacity","priceMinor","priceCurrency","visibility","status","coverImageUrl","createdAt","updatedAt"]}}},"required":["tours"]},"pagination":{"type":"object","properties":{"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"]},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["data","pagination","meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the tours:read scope."}}}},"/v1/tours/{tourId}":{"get":{"operationId":"getTour","summary":"Get a tour","description":"BETA. Returns one tour by id, including drafts that belong to the authenticated workspace. Out-of-workspace ids are indistinguishable from unknown ones. Requires tours:read.","tags":["Tours"],"responses":{"200":{"description":"The tour.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string"},"description":{"type":["string","null"]},"durationMinutes":{"type":"integer"},"durationDays":{"type":["integer","null"]},"location":{"type":["string","null"]},"meetingPoint":{"type":["string","null"]},"capacity":{"type":"integer"},"priceMinor":{"type":"integer"},"priceCurrency":{"type":"string","minLength":3,"maxLength":3},"visibility":{"type":"string"},"status":{"type":"string"},"coverImageUrl":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","title","slug","kind","description","durationMinutes","durationDays","location","meetingPoint","capacity","priceMinor","priceCurrency","visibility","status","coverImageUrl","createdAt","updatedAt"]},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the tours:read scope."},"404":{"description":"No such tour in the authenticated workspace."}}}},"/v1/availability":{"get":{"operationId":"listAvailability","summary":"List departure availability","description":"BETA. Returns bookable departures for the workspace, earliest first. Cancelled departures never appear. Filter by tour_id and/or a from/to window on departure start. Requires availability:read.","tags":["Availability"],"parameters":[{"schema":{"type":"string","pattern":"^[1-9][0-9]{0,2}$"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tour_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"}],"responses":{"200":{"description":"A page of departures.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tourId":{"type":"string"},"tour":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"slug":{"type":"string"}},"required":["id","title","slug"]},"startsAt":{"type":"string"},"endsAt":{"type":"string"},"capacity":{"type":"integer"},"booked":{"type":"integer"},"spotsLeft":{"type":"integer"},"priceMinor":{"type":["integer","null"]},"priceCurrency":{"type":"string","minLength":3,"maxLength":3},"status":{"type":"string"}},"required":["id","tourId","tour","startsAt","endsAt","capacity","booked","spotsLeft","priceMinor","priceCurrency","status"]}},"pagination":{"type":"object","properties":{"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"}},"required":["nextCursor","hasMore"]},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["data","pagination","meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the availability:read scope."}}}},"/v1/departures":{"get":{"description":"Authenticated public API resource endpoint.","operationId":"listDepartures","summary":"List departures","tags":["Availability"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tour_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"string"},"required":false,"name":"when","in":"query"}],"responses":{"200":{"description":"Resource collection.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"pagination":{},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the required scope."}}}},"/v1/bookings":{"get":{"description":"Authenticated public API resource endpoint.","operationId":"listBookings","summary":"List bookings","tags":["Bookings"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tour_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"string"},"required":false,"name":"when","in":"query"}],"responses":{"200":{"description":"Resource collection.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"pagination":{},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the required scope."}}},"post":{"operationId":"createBooking","summary":"Create a booking","tags":["Bookings"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"responses":{"200":{"description":"Idempotent replay."},"201":{"description":"Booking created.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"pagination":{},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["meta"]}}}},"400":{"description":"Invalid booking."},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the required scope."}}}},"/v1/bookings/{bookingId}":{"get":{"operationId":"getBooking","summary":"Get a booking","tags":["Bookings"],"responses":{"200":{"description":"Booking detail.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"pagination":{},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the required scope."},"404":{"description":"Booking not found."}}}},"/v1/customers":{"get":{"description":"Authenticated public API resource endpoint.","operationId":"listCustomers","summary":"List customers","tags":["Customers"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tour_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"string"},"required":false,"name":"when","in":"query"}],"responses":{"200":{"description":"Resource collection.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"pagination":{},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the required scope."}}}},"/v1/guides":{"get":{"description":"Authenticated public API resource endpoint.","operationId":"listGuides","summary":"List guides","tags":["Operations"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tour_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"string"},"required":false,"name":"when","in":"query"}],"responses":{"200":{"description":"Resource collection.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"pagination":{},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the required scope."}}}},"/v1/vehicles":{"get":{"description":"Authenticated public API resource endpoint.","operationId":"listVehicles","summary":"List vehicles","tags":["Operations"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tour_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"string"},"required":false,"name":"when","in":"query"}],"responses":{"200":{"description":"Resource collection.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{},"pagination":{},"meta":{"type":"object","properties":{"requestId":{"type":"string","minLength":1}},"required":["requestId"]}},"required":["meta"]}}}},"401":{"description":"Invalid or missing API key."},"403":{"description":"The API key lacks the required scope."}}}}},"webhooks":{}}