Developer Reference

API Documentation

7 agent-optimized endpoints for discovering and booking Bangkok restaurants, bars, and nightclubs. No authentication required.

Quick Connect

Choose your platform to start using Weavify's API. All endpoints are open — no API key or authentication needed.

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 JSON · llms.txt · MCP discovery · Agent manifest

Endpoints

GET /search/venues

Find restaurants, bars, or nightclubs in Bangkok. Returns venues ranked by distance when coordinates are provided. Supports filtering by cuisine, venue type, ambiance, and price range.

Parameters

NameTypeDescription
qstringFree text search — matches venue name, description, cuisine, and district.
latnumberLatitude for proximity search. Use with lon for distance-ranked results.
lonnumberLongitude for proximity search.
radius_kmnumberSearch radius in km. Default: 5. Use 1-2 for "nearby", 10 for "anywhere in Bangkok".
venue_typestringFilter: restaurant, bar_or_pub, or night_club.
cuisinestringCuisine filter: Thai, Japanese, Indian, Italian, French, German, Seafood, etc.
ambiancestringVibe filter: rooftop, speakeasy, fine-dining, live-jazz, casual, street-food, underground, intimate, etc.
min_priceinteger (1-4)Minimum price tier. 1=$ (under 200 THB), 2=$$ (200-500), 3=$$$ (500-2000), 4=$$$$ (2000+).
max_priceinteger (1-4)Maximum price tier.
limitintegerNumber of results. Default: 10. Use 3-5 for recommendations, 10-20 for browsing.

200 Array of matching venues with id, name, slug, venue_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

NameTypeDescription
venue_iduuidVenue UUID from search results. Required
datedate (YYYY-MM-DD)Date to check availability for.
party_sizeintegerNumber of guests. Tables have min/max party size constraints.
block_typestringstandard_table (default), vip_booth, or bar_seat.
lat, lonnumberFor area-wide availability search across nearby venues.
radius_kmnumberRadius for area search. Default: 5.

200 Array of available slots with block_id, venue_id, venue_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 venue, date, and party size. You must call the confirm endpoint within 10 minutes or the hold expires automatically.

Request Body (JSON)

FieldTypeDescription
venue_iduuidVenue UUID from search results. Required
datedate (YYYY-MM-DD)Reservation date. Required
party_sizeintegerNumber of guests. Required
guest_namestringName for the reservation. Required
timestring (HH:MM)Preferred time. Optional.
block_typestringstandard_table (default) or vip_booth.
contact_phonestringOptional phone number.
contact_emailstringOptional 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

NameTypeDescription
hold_iduuidThe hold id from the hold response. Required

Request Body (JSON, optional)

FieldTypeDescription
special_requestsstringAllergies, 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

NameTypeDescription
booking_iduuidThe 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

NameTypeDescription
confirmation_codestringConfirmation code in WV-XXXXXX format. Required

200 Booking details: guest_name, party_size, booking_date, block_type, status, venue_id.

404 No booking found with this code.

GET /venues/{slug}/md

Get a complete venue profile in Markdown format. Includes menu with prices, current availability for the next 7 days, address, hours, ambiance, and booking instructions.

Path Parameters

NameTypeDescription
slugstringVenue slug from search results (e.g., rabbit-hole, gaggan-anand, sky-bar-lebua). Required

200 Complete venue profile in Markdown format.

404 Venue not found.

Rate Limits & Authentication

No authentication is required for any agent-facing endpoint. All 7 endpoints are completely open.

TierRate LimitHow
Anonymous30 requests/minute per IPNo header needed
Authenticated120 requests/minute per keySend X-API-Key header

Geographic coverage: Bangkok, Thailand. 56+ bookable venues across all major districts: Sukhumvit, Silom, Sathorn, Thonglor, Ekkamai, Rattanakosin, Riverside, Chinatown, Ari, Ploenchit, and Siam.

Recommended Booking Flow

The typical agent booking flow uses 3-4 API calls:

  1. SearchGET /search/venues to find matching venues
  2. Check availabilityGET /search/availability to see open time slots
  3. HoldPOST /bookings/hold to lock the table (10-minute hold)
  4. ConfirmPOST /bookings/holds/{id}/confirm to get the WV-XXXXXX code

For venue details at any point, call GET /venues/{slug}/md. To manage existing bookings, use GET /bookings/by-code/{code} and PATCH /bookings/{id}/cancel.