Quick connect
Choose your platform. Every option below works without an API key or authentication.
Claude (MCP Server)
Add to Claude Desktop or Claude Code. SSE transport, 7 tools, no auth.
claude mcp add weavify https://weavify.io/mcp/sse
ChatGPT (Custom GPT Action)
Import this OpenAPI spec URL in the GPT Action editor.
https://weavify.io/openapi-gpt.json
Gemini CLI · Cursor · Windsurf · any MCP client
Connect to Weavify's MCP server via SSE transport.
https://weavify.io/mcp/sse
Direct REST API
Call endpoints directly. JSON in, JSON out.
Base URL: https://weavify.io/api/v1
Machine-readable specs /openapi-gpt.json /llms.txt /.well-known/mcp.json /.well-known/agent-manifest.json
Endpoints
GET /search/businesses
Find restaurants, bars, or nightclubs in Bangkok. Returns businesses ranked by distance when coordinates are provided. Supports filtering by cuisine, business type, ambiance, and price range.
Parameters
| Name | Type | Description |
|---|---|---|
| q | string | Free text search — matches business name, description, cuisine, and district. |
| lat | number | Latitude for proximity search. Use with lon for distance-ranked results. |
| lon | number | Longitude for proximity search. |
| radius_km | number | Search radius in km. Default: 5. Use 1-2 for "nearby", 10 for "anywhere in Bangkok". |
| business_type | string | Filter: restaurant, bar_or_pub, or night_club. |
| cuisine | string | Cuisine filter: Thai, Japanese, Indian, Italian, French, German, Seafood, etc. |
| ambiance | string | Vibe filter: rooftop, speakeasy, fine-dining, live-jazz, casual, street-food, underground, intimate, etc. |
| min_price | integer (1-4) | Minimum price tier. 1=$ (under 200 THB), 2=$$ (200-500), 3=$$$ (500-2000), 4=$$$$ (2000+). |
| max_price | integer (1-4) | Maximum price tier. |
| limit | integer | Number of results. Default: 10. Use 3-5 for recommendations, 10-20 for browsing. |
200 Array of matching businesses with id, name, slug, business_type, cuisine_type, district, coordinates, price_range, ambiance_tags, distance_m, and description.
GET /search/availability
Check real-time table availability before booking. Returns available time slots with remaining capacity. Call this before attempting a reservation.
Parameters
| Name | Type | Description |
|---|---|---|
| business_id | uuid | Business UUID from search results. Required |
| date | date (YYYY-MM-DD) | Date to check availability for. |
| party_size | integer | Number of guests. Tables have min/max party size constraints. |
| block_type | string | standard_table (default), vip_booth, or bar_seat. |
| lat, lon | number | For area-wide availability search across nearby businesses. |
| radius_km | number | Radius for area search. Default: 5. |
200 Array of available slots with block_id, business_id, business_name, date, block_type, available_count, time_slot_start, time_slot_end. Empty array = fully booked.
POST /bookings/hold
Lock a table with a 10-minute hold. Call this when the user has chosen a business, date, and party size. You must call the confirm endpoint within 10 minutes or the hold expires automatically.
Request Body (JSON)
| Field | Type | Description |
|---|---|---|
| business_id | uuid | Business UUID from search results. Required |
| date | date (YYYY-MM-DD) | Reservation date. Required |
| party_size | integer | Number of guests. Required |
| guest_name | string | Name for the reservation. Required |
| time | string (HH:MM) | Preferred time. Optional. |
| block_type | string | standard_table (default) or vip_booth. |
| contact_phone | string | Optional phone number. |
| contact_email | string | Optional email. |
201 Hold created. Returns hold id, status="held", hold_expires_at (UTC). Call confirm next.
409 Conflict: NO_AVAILABILITY, FULLY_BOOKED, PARTY_TOO_SMALL, or PARTY_TOO_LARGE.
POST /bookings/holds/{hold_id}/confirm
Finalize a held reservation. Converts the temporary hold into a confirmed booking and returns a human-readable confirmation code (e.g., WV-A3K9X2). Must be called within 10 minutes of the hold.
Path Parameters
| Name | Type | Description |
|---|---|---|
| hold_id | uuid | The hold id from the hold response. Required |
Request Body (JSON, optional)
| Field | Type | Description |
|---|---|---|
| special_requests | string | Allergies, birthday, window seat, high chair, etc. |
200 Confirmed. Returns confirmation_code (WV-XXXXXX), booking_date, party_size, block_type, guest_name, status="confirmed".
409 HOLD_EXPIRED (create a new hold) or HOLD_INVALID (already confirmed).
PATCH /bookings/{booking_id}/cancel
Cancel a confirmed reservation. Releases the table back to the availability pool.
Path Parameters
| Name | Type | Description |
|---|---|---|
| booking_id | uuid | The booking UUID. Required |
200 Cancelled. status="cancelled".
404 Booking not found or already cancelled.
GET /bookings/by-code/{confirmation_code}
Look up a reservation by its confirmation code (format: WV-XXXXXX). Returns full booking details and current status.
Path Parameters
| Name | Type | Description |
|---|---|---|
| confirmation_code | string | Confirmation code in WV-XXXXXX format. Required |
200 Booking details: guest_name, party_size, booking_date, block_type, status, business_id.
404 No booking found with this code.
GET /businesses/{slug}/md
Get a complete business profile in Markdown format. Includes menu with prices, current availability for the next 7 days, address, hours, ambiance, and booking instructions.
Path Parameters
| Name | Type | Description |
|---|---|---|
| slug | string | Business slug from search results (e.g., rabbit-hole, gaggan-anand, sky-bar-lebua). Required |
200 Complete business profile in Markdown format.
404 Business not found.
Rate limits & authentication
No authentication is required for any agent-facing endpoint. All seven endpoints are completely open.
| Tier | Rate limit | How |
|---|---|---|
| Anonymous | 30 requests / minute per IP | No header needed |
| Authenticated | 120 requests / minute per key | Send X-API-Key header |
Geographic coverage. Bangkok, Thailand. 56+ bookable businesses across Sukhumvit, Silom, Sathorn, Thonglor, Ekkamai, Rattanakosin, Riverside, Chinatown, Ari, Ploenchit, and Siam.
Recommended booking flow
The typical agent booking flow uses three or four API calls.
- 01Search
Find matching businesses by location, cuisine, ambiance, or price.
- 02Check availability
See open time slots for a date and party size.
- 03Hold
Lock the table for ten minutes while you confirm details with the user.
- 04Confirm
Convert the hold into a confirmed booking. Returns a WV-XXXXXX confirmation code.
For business details at any point, call GET /businesses/{slug}/md. To manage existing bookings, use GET /bookings/by-code/{code} and PATCH /bookings/{id}/cancel.