{"openapi":"3.1.0","info":{"title":"Vezeli Public API","version":"1.0.0","summary":"Book beauty & wellness professionals online — instant confirmation, no phone calls.","description":"Read-only JSON API for discovering beauty & wellness professionals on Vezeli and reading their availability. The same endpoints power the native mobile app. Endpoints marked *authenticated* require a Better Auth session cookie. For a tool-calling interface, use the MCP server at `/mcp` (see `/llms.txt`).","contact":{"name":"Vezeli developers","url":"https://vezeli.com/fr/developers"}},"servers":[{"url":"https://vezeli.com"}],"tags":[{"name":"businesses","description":"Search and read professional profiles"},{"name":"availability","description":"Open appointment slots"},{"name":"account","description":"The signed-in client (authenticated)"},{"name":"mcp","description":"Model Context Protocol server"}],"paths":{"/api/mobile/v1":{"get":{"tags":["businesses"],"operationId":"apiIndex","summary":"JSON index of the public API (endpoints, docs, MCP links)","responses":{"200":{"description":"API index JSON"}}}},"/api/mobile/v1/businesses":{"get":{"tags":["businesses"],"operationId":"searchBusinesses","summary":"Search published professionals","parameters":[{"name":"q","in":"query","description":"Free-text query over name, description and services","schema":{"type":"string"}},{"name":"city","in":"query","description":"City or neighbourhood name","schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string","enum":["SPA","BARBER","HAMMAM","BEAUTY_INSTITUTE","NAILS","MAKEUP","TATTOO","NUTRITION"]}},{"name":"clientele","in":"query","schema":{"type":"string","enum":["WOMEN_ONLY","MEN_ONLY","MIXED"]}},{"name":"sort","in":"query","schema":{"type":"string","enum":["relevance","priceAsc","priceDesc"]}},{"name":"featured","in":"query","description":"Any truthy value returns a curated set instead of a search","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/mobile/v1/businesses/{slug}":{"get":{"tags":["businesses"],"operationId":"getBusiness","summary":"Full public profile for one professional","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessDetailResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/mobile/v1/availability":{"get":{"tags":["availability"],"operationId":"getAvailability","summary":"Open slots for a business on a day, or the next available day","parameters":[{"name":"businessId","in":"query","required":true,"schema":{"type":"string"}},{"name":"durationMinutes","in":"query","required":true,"schema":{"type":"integer","minimum":1}},{"name":"date","in":"query","description":"ISO date for single-day mode (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"from","in":"query","description":"ISO datetime to walk forward from (next-available mode)","schema":{"type":"string"}},{"name":"next","in":"query","description":"Any truthy value switches to next-available mode","schema":{"type":"string"}},{"name":"staffId","in":"query","description":"Restrict to one staff member","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlotsResponse"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/mobile/v1/bookings":{"get":{"tags":["account"],"operationId":"listMyBookings","summary":"The signed-in client's bookings (authenticated)","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyBookingsResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"tags":["account"],"operationId":"createBooking","summary":"Create a booking (authenticated)","security":[{"sessionCookie":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBookingRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBookingResponse"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"The request could not be processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/mobile/v1/favorites":{"get":{"tags":["account"],"operationId":"listFavorites","summary":"Saved professionals (authenticated)","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FavoritesResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"tags":["account"],"operationId":"toggleFavorite","summary":"Add or remove a saved professional (authenticated)","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToggleFavoriteResponse"}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/mobile/v1/me":{"get":{"tags":["account"],"operationId":"getMe","summary":"The signed-in user (authenticated)","security":[{"sessionCookie":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/mcp":{"post":{"tags":["mcp"],"operationId":"mcpRpc","summary":"Model Context Protocol endpoint (Streamable HTTP, JSON-RPC 2.0)","description":"Send `initialize`, then `tools/list` / `tools/call`. Tools: search_businesses, get_business, check_availability, list_categories, list_cities, get_booking_link. Also reachable at `/.well-known/mcp`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"JSON-RPC response"}}},"get":{"tags":["mcp"],"operationId":"mcpManifest","summary":"MCP server manifest (discovery)","responses":{"200":{"description":"Server manifest JSON"}}}}},"components":{"securitySchemes":{"sessionCookie":{"type":"apiKey","in":"cookie","name":"better-auth.session_token","description":"Better Auth session cookie, obtained via the sign-in flow."}},"schemas":{"ApiError":{"type":"object","description":"Structured error envelope. `error` is a legacy alias of `message`.","required":["error","code","message","hint","status","documentation"],"properties":{"error":{"type":"string"},"code":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","method_not_allowed","conflict","unprocessable_entity","rate_limited","internal_error","error"]},"message":{"type":"string"},"hint":{"type":"string"},"status":{"type":"integer"},"documentation":{"type":"string","format":"uri-reference"}}},"Service":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"category":{"type":["string","null"]},"durationMinutes":{"type":"integer"},"priceCents":{"type":"integer"},"currency":{"type":"string"}}},"BusinessCard":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"category":{"type":"string","enum":["SPA","BARBER","HAMMAM","BEAUTY_INSTITUTE","NAILS","MAKEUP","TATTOO","NUTRITION"]},"clientele":{"type":"string","enum":["WOMEN_ONLY","MEN_ONLY","MIXED"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"description":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"languages":{"type":"array","items":{"type":"string"}},"instantBooking":{"type":"boolean"},"priceFromCents":{"type":["integer","null"]},"currency":{"type":"string"},"rating":{"type":["number","null"]},"reviewCount":{"type":"integer"},"services":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}}},"BusinessDetail":{"allOf":[{"$ref":"#/components/schemas/BusinessCard"},{"type":"object","properties":{"addressLine":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"]},"whatsapp":{"type":["string","null"]},"instagram":{"type":["string","null"]},"facebook":{"type":["string","null"]},"tiktok":{"type":["string","null"]},"timezone":{"type":"string"},"requiresPrepayment":{"type":"boolean"}}}]},"SearchResponse":{"type":"object","properties":{"businesses":{"type":"array","items":{"$ref":"#/components/schemas/BusinessCard"}}}},"BusinessDetailResponse":{"type":"object","properties":{"business":{"$ref":"#/components/schemas/BusinessDetail"}}},"SlotsResponse":{"type":"object","properties":{"slots":{"type":"array","items":{"type":"string","format":"date-time"}},"nextAvailable":{"type":["object","null"],"properties":{"dateISO":{"type":"string"},"slots":{"type":"array","items":{"type":"string"}}}}}},"CreateBookingRequest":{"type":"object","required":["businessId","serviceIds","startAt","clientName","clientEmail","clientPhone"],"properties":{"businessId":{"type":"string"},"serviceIds":{"type":"array","items":{"type":"string"}},"staffId":{"type":"string"},"startAt":{"type":"string","format":"date-time"},"clientName":{"type":"string"},"clientEmail":{"type":"string","format":"email"},"clientPhone":{"type":"string","description":"E.164, e.g. +212600000000"},"notes":{"type":"string"},"promoCode":{"type":"string"}}},"CreateBookingResponse":{"type":"object","properties":{"bookingId":{"type":"string"},"checkoutUrl":{"type":"string"}}},"FavoritesResponse":{"$ref":"#/components/schemas/SearchResponse"},"ToggleFavoriteResponse":{"type":"object","properties":{"favorited":{"type":"boolean"}}},"MyBookingsResponse":{"type":"object","properties":{"bookings":{"type":"array","items":{"type":"object"}}}},"MeResponse":{"type":"object"}}}}