Skip to main content
← Resources

Public booking API

Book a consultation with an AI agent.

Any agent that can make HTTP requests can check availability and book an authorized consultation. No signup or API key is needed for the public flow.

Interactive booking in chat

MCP Apps-compatible hosts can open a project form with Photo & Video, Web & App, and Marketing & Ops choices. Buyers share their project and contact details first, then choose a time in their timezone and review before confirming. The integration must be connected in the host; finding this page in web search does not automatically load a calendar.

https://werz.ai/api/agent/public/mcp

Use Streamable HTTP with no authentication. Tools: werz_check_availability, werz_open_booking_calendar and werz_confirm_booking. MCP confirmation requires a service selection; use FULL_SERVICE for multiple services and list them in the notes. The interface also records minimal progress events without contact details. Booking requests follow the same validation, rate limits and retry rules as the public API.

From availability to confirmation

  1. 1. Discover

    Read /agent-booking.json or import the OpenAPI schema. The public endpoints require no API key, account, browser cookie, or admin access.

  2. 2. Find a time

    GET /api/agent/public/availability. With no parameters it checks the next 14 days. Optional start and end dates use YYYY-MM-DD; ranges are limited to 30 days within the next 60 days. Choose a slot whose available flag is true.

  3. 3. Confirm with the buyer

    Collect their name, email and real callback number with country code. Show the exact appointment in their local timezone and obtain permission to book it. The API's date and startTime must remain in America/Los_Angeles, which observes daylight saving time.

  4. 4. Book

    Generate a fresh random UUID v4 and keep it private as idempotencyKey. POST JSON with userConfirmed: true, timezone: America/Los_Angeles, and source naming your agent. A successful request reserves a real 30-minute consultation and uses the normal confirmation and calendar workflow. It does not opt the buyer into SMS.

  5. 5. Report the result

    Only report a confirmed booking when success is true and booking.status is CONFIRMED. Show the returned date, time, timezone, meeting link and any warning. Email acceptance is not proof of inbox delivery. Keep cancellation links and retry keys private.

Booking fields

name, email, phone
Required. Real buyer details. Phone should include +country code; US and German numbers are supported.
date, startTime
Required. An offered YYYY-MM-DD date and HH:MM time in America/Los_Angeles. Do not submit a German local time as a Pacific time.
timezone
Required: America/Los_Angeles.
userConfirmed
Required: true, only after the buyer authorizes this booking.
idempotencyKey
Required. A fresh random UUID v4 for a new booking intent. Reuse it on every retry.
source
Required. Your caller label, such as chatgpt, claude or a workflow name. This is self-reported attribution.
company, notes
Optional project context. Notes may contain up to 2,000 characters.
service
Optional: VIDEO_PRODUCTION, WEB_DEVELOPMENT, MARKETING or FULL_SERVICE.
budget
Optional: UNDER_5K, 5K_10K, 10K_25K, 25K_50K, 50K_PLUS or NOT_SURE.
locale
Optional: en or de, for confirmation language.

Example requests

The placeholders below are not valid bookings. Read live availability and use the buyer's confirmed details.

curl https://werz.ai/agent-booking.json
curl https://werz.ai/api/agent/public/availability

# Replace placeholders with buyer-approved details and an offered Pacific slot.
# Generate a fresh UUID v4 once; keep it unchanged on retries.
curl -X POST https://werz.ai/api/agent/public/booking \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "BUYER_NAME",
    "email": "BUYER_EMAIL",
    "phone": "BUYER_PHONE_WITH_COUNTRY_CODE",
    "date": "OFFERED_YYYY-MM-DD",
    "startTime": "OFFERED_HH:MM",
    "timezone": "America/Los_Angeles",
    "userConfirmed": true,
    "idempotencyKey": "FRESH_PRIVATE_UUID_V4",
    "source": "your-agent-name",
    "service": "VIDEO_PRODUCTION",
    "locale": "en"
  }'

Retries and errors

A used retry key returns its original reservation, including its actual slot, even when a later request names a different slot. It does not move the appointment. For changes, use the booking management link or contact WERZ.

400
Read error/details and correct the fields. Do not invent buyer details or confirmation.
403 / 415
Use a server-side HTTP client and Content-Type: application/json. The endpoint does not allow cross-site browser submissions.
409
Read code. SLOT_TAKEN or DAILY_LIMIT_REACHED needs a different offered slot and renewed buyer confirmation. BOOKING_BUSY means retry the same intent after a short delay.
413
Reduce the request body; the limit is 16 KiB.
429
Wait for Retry-After seconds. Limits: 60 availability requests/minute/IP; 5 booking attempts/hour/IP and 5/hour/email. Retries count toward these limits.
Timeout / 5xx
The booking may already exist. Retry the same payload, email and idempotencyKey. Do not generate a new key just because the response was lost.

Existing keyed integrations

Existing keys with the bookings scope continue to use /api/agent/capabilities, /api/agent/booking/availability, /api/agent/booking and /api/agent/rate-limit. These routes require a bearer key. Internal management scopes remain separate from public consultation booking.

Manage existing integration keysKeyed integration contract

Full API reference

The public OpenAPI contract contains the complete request and response schemas and can be imported directly into an HTTP-capable agent or API client.

Open the public OpenAPI contract