When to use
- “Book me nails tomorrow” (default city: Thessaloniki)
- “Book a face treatment at Yamena on Friday”
- Suggest open times, then give a URL — never claim the booking is confirmed
Discovery
Tools
| operationId | HTTP | Use |
|---|---|---|
| search_stores | GET /api/v1/stores/search | Find partners by name or service (nails, Yamena). Defaults to Thessaloniki. |
| get_store | GET /api/v1/stores/{slug} | Partner profile, hours, booking URL. |
| list_services | GET /api/v1/stores/{slug}/services | Active catalog. Use bookable_via_api services with availability. |
| get_availability | GET /api/v1/stores/{slug}/availability | Open HH:MM slots for one local day. Not a hold. |
| create_booking_intent | POST /api/v1/booking-intents | Returns checkout_url. User logs in and pays in the app. |
Checkout URL
create_booking_intent returns https://app.planoora.com/store/{slug}?intent={token}. The intent expires in 60 minutes and does not hold the calendar. The existing 15-minute slot hold starts after the user is logged in at checkout.
Errors and limits
JSON errors use RFC 9457 application/problem+json with a stable code, detail, and hint. Public quota is per IP (search 60/min, availability 30/min, intent create 20/min). No API key in v1.
Not in v1
Events, multi-day stays, subscriptions, in-chat payment, and anonymous slot holds. Send those users to the store booking URL instead.
