Developer reference

API documentation.

Seven agent-optimised endpoints for discovering and booking Bangkok restaurants, bars, and nightclubs. No authentication required for any agent-facing endpoint.

BASE URL
https://weavify.io/api/v1
SPEC
OpenAPI 3.1
AUTH
None for agent-facing endpoints
01

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

02

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

NameTypeDescription
qstringFree text search — matches business 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".
business_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 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

NameTypeDescription
business_iduuidBusiness 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 businesses.
radius_kmnumberRadius 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)

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

NameTypeDescription
slugstringBusiness 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.

03

Rate limits & authentication

No authentication is required for any agent-facing endpoint. All seven 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 businesses across Sukhumvit, Silom, Sathorn, Thonglor, Ekkamai, Rattanakosin, Riverside, Chinatown, Ari, Ploenchit, and Siam.

04

Recommended booking flow

The typical agent booking flow uses three or four API calls.

  1. 01
    SearchGET /search/businesses

    Find matching businesses by location, cuisine, ambiance, or price.

  2. 02
    Check availabilityGET /search/availability

    See open time slots for a date and party size.

  3. 03
    HoldPOST /bookings/hold

    Lock the table for ten minutes while you confirm details with the user.

  4. 04
    ConfirmPOST /bookings/holds/{id}/confirm

    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.