Waitwhile MCP by usefulapi
Read Waitwhile visits, bookings, customers, services and analytics; add, update and cancel visits.
我该使用它吗
质量与安全性
发现(2)
- LOW在 waitwhile_first_available_slots 中
- LOW在 waitwhile_resources_availability 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"waitwhile": {
"url": "https://waitwhile.usefulapi.io/mcp"
}
}
}远程端点
https://waitwhile.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(29)
🟢waitwhile_list_locations(external_id, country_code, desc, limit, start_after)
List the account's locations (businesses/sites): id, name, short name, address, time zone, opening hours and waitlist/booking settings. Use the ids to filter visits, services and resources. GET /locations.
输入模式
{
"type": "object",
"properties": {
"external_id": {
"description": "Only the location with this external id.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"country_code": {
"description": "Two-letter country code.",
"type": "string",
"minLength": 2,
"maxLength": 2
},
"desc": {
"description": "Newest first.",
"type": "boolean"
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_location(location)
One location by id or short name (the part of its public Waitwhile URL). GET /locations/{shortNameOrId}.
输入模式
{
"type": "object",
"properties": {
"location": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Location id or short name."
}
},
"required": [
"location"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_location_status(limit, start_after)
Live status of every location: open/closed, number of people waiting and being served, current estimated wait time, and booking counters. GET /location-status.
输入模式
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_location_status(location_id)
Live status of one location: open/closed, waiting and serving counts, estimated wait. GET /location-status/{locationId}.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Location id."
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_visits(location_id, state, tag, customer_id, external_customer_id, ...)
List visits: waitlist entries (people in line) and bookings (appointments), with customer, state (PENDING, DRAFT, BOOKED, WAITING, SERVING, COMPLETE), tags (e.g. NO-SHOW, CANCELLED, ARRIVED), services, resources, party size, position and timestamps. Filter by location, state, tag, customer, service, resource, booking date (local time) or created/updated date. Cursor-paged. Contains customer contact details. GET /visits.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"description": "Only visits at this location.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"state": {
"type": "string",
"enum": [
"PENDING",
"DRAFT",
"BOOKED",
"WAITING",
"SERVING",
"COMPLETE"
]
},
"tag": {
"type": "string",
"enum": [
"NO-SHOW",
"CANCELLED",
"REMOVED",
"ALERTED",
"ARRIVED",
"DELAYED",
"CONFIRMED",
"EXPIRED",
"FLAGGED",
"IMPORTED",
"PRIORITIZED",
"CAPACITY",
"REJECTED",
"QUICK"
]
},
"customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"external_customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"service_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"resource_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"from_booking_date": {
"description": "Bookings starting at or after this local date-time, YYYY-MM-DDThh:mm.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"to_booking_date": {
"description": "Bookings starting at or before this local date-time, YYYY-MM-DDThh:mm.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"from_date": {
"description": "Visits created from this date-time (ISO 8601 or epoch ms).",
"type": "string"
},
"to_date": {
"description": "Visits created up to this date-time (ISO 8601 or epoch ms).",
"type": "string"
},
"desc": {
"description": "Newest first.",
"type": "boolean"
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_search_visits(q, location_id, state, tag, exclude_tags, ...)
Search visits by a prefix match on customer name, phone, e-mail or customer id, optionally filtered by location, state, tag and excluded tags. Page-numbered. Contains customer contact details. GET /visits/search.
输入模式
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Prefix match on name, phone, e-mail or customer id."
},
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"state": {
"type": "string",
"enum": [
"PENDING",
"DRAFT",
"BOOKED",
"WAITING",
"SERVING",
"COMPLETE"
]
},
"tag": {
"type": "string",
"enum": [
"NO-SHOW",
"CANCELLED",
"REMOVED",
"ALERTED",
"ARRIVED",
"DELAYED",
"CONFIRMED",
"EXPIRED",
"FLAGGED",
"IMPORTED",
"PRIORITIZED",
"CAPACITY",
"REJECTED",
"QUICK"
]
},
"exclude_tags": {
"description": "Leave out visits carrying any of these tags.",
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"enum": [
"NO-SHOW",
"CANCELLED",
"REMOVED",
"ALERTED",
"ARRIVED",
"DELAYED",
"CONFIRMED",
"EXPIRED",
"FLAGGED",
"IMPORTED",
"PRIORITIZED",
"CAPACITY",
"REJECTED",
"QUICK"
]
}
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 1,
"maximum": 1000000
}
},
"required": [
"q"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_visit(visit_id)
One visit (waitlist entry or booking) by id: customer, state, tags, services, resources, party size, position, estimated wait and all timestamps. GET /visits/{visitId}.
输入模式
{
"type": "object",
"properties": {
"visit_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Visit id."
}
},
"required": [
"visit_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_booking_slots(location_id, from_date, to_date, service_ids, resource_ids, ...)
Booking slots of a location for a date range with the free spots per resource and service, so you can see when an appointment can be booked. Dates are local to the location, YYYY-MM-DDThh:mm. GET /visits/availability.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Location id."
},
"from_date": {
"description": "Local start, YYYY-MM-DDThh:mm.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"to_date": {
"description": "Local end, YYYY-MM-DDThh:mm.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"service_ids": {
"description": "Only slots for these services.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"resource_ids": {
"description": "Only slots for these resources.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"service_duration": {
"description": "Service duration in seconds, to size the slots.",
"type": "integer",
"minimum": 60,
"maximum": 86400
},
"show_min_spots": {
"description": "Only slots with at least this many free spots.",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_first_available_slots(location_id, from_date, to_date, max_num_slots, party_size, ...)
The first available booking slots of a location (optionally for a party size, services and resources) from a date. Use it to propose appointment times. GET /visits/first-available-slots.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Location id."
},
"from_date": {
"description": "Local start, YYYY-MM-DDThh:mm.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"to_date": {
"description": "Local end, YYYY-MM-DDThh:mm.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"max_num_slots": {
"description": "Max number of slots to return.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"party_size": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"service_ids": {
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"resource_ids": {
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"service_duration": {
"description": "Service duration in seconds.",
"type": "integer",
"minimum": 60,
"maximum": 86400
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_customers(location_id, external_id, from_date, to_date, desc, ...)
List customers (name, phone, e-mail, tags, last visit per location, created/updated). Cursor-paged, 20 per page by default; filter by location, external id or created/updated date. Contains personal data. GET /customers.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"description": "Only customers with visits at this location.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"from_date": {
"type": "string",
"description": "ISO 8601 date or date-time (e.g. 2026-10-01T00:00:00Z), or epoch milliseconds."
},
"to_date": {
"type": "string",
"description": "ISO 8601 date or date-time (e.g. 2026-10-01T00:00:00Z), or epoch milliseconds."
},
"desc": {
"description": "Newest first.",
"type": "boolean"
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_search_customers(q, location_id, state, tag, limit, ...)
Search customers by a prefix match on name, phone, e-mail or customer id; optionally narrowed by location, visit state or tag. Page-numbered. Contains personal data. GET /customers/search.
输入模式
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Prefix match on name, phone, e-mail or customer id."
},
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"state": {
"type": "string",
"enum": [
"PENDING",
"DRAFT",
"BOOKED",
"WAITING",
"SERVING",
"COMPLETE"
]
},
"tag": {
"type": "string",
"enum": [
"NO-SHOW",
"CANCELLED",
"REMOVED",
"ALERTED",
"ARRIVED",
"DELAYED",
"CONFIRMED",
"EXPIRED",
"FLAGGED",
"IMPORTED",
"PRIORITIZED",
"CAPACITY",
"REJECTED",
"QUICK"
]
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 1,
"maximum": 1000000
}
},
"required": [
"q"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_customer(customer_id)
One customer by id: contact details, tags, per-location state and last visit. Contains personal data. GET /customers/{customerId}.
输入模式
{
"type": "object",
"properties": {
"customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Customer id."
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_customer_notes(customer_id)
The staff notes recorded on a customer (content, author, visit and location, timestamps). GET /customers/{customerId}/notes.
输入模式
{
"type": "object",
"properties": {
"customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Customer id."
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_services(location_id, q, external_id, limit, start_after, ...)
List services (what customers book or queue for): name, duration, price, locations, resources and category structure. GET /services.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"description": "Only items offered at these locations.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"q": {
"description": "Prefix match on name or display name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"is_category": {
"description": "Only service categories (true) or only services (false).",
"type": "boolean"
},
"parent_id": {
"description": "Only children of this category.",
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_service(service_id)
One service by id. GET /services/{serviceId}.
输入模式
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Service id."
}
},
"required": [
"service_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_resources(location_id, q, external_id, limit, start_after, ...)
List resources — the people, rooms, tables or equipment that serve customers: name, locations, services, availability flag and category structure. GET /resources.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"description": "Only items offered at these locations.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"q": {
"description": "Prefix match on name or display name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"is_category": {
"description": "Only resource categories (true) or only resources (false).",
"type": "boolean"
},
"parent_id": {
"description": "Only children of this category.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"description": "Only the resource with this e-mail.",
"type": "string",
"minLength": 3,
"maxLength": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_resource(resource_id)
One resource by id. GET /resources/{resourceId}.
输入模式
{
"type": "object",
"properties": {
"resource_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Resource id."
}
},
"required": [
"resource_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_resources_availability(location_id, date, resource_ids)
Working hours/availability of a location's resources on a date (e.g. who is working today). GET /resources/availability.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Location id."
},
"date": {
"description": "Date (yyyy-mm-dd) or ISO 8601 date-time; default today.",
"type": "string"
},
"resource_ids": {
"description": "Only these resources.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_data_fields(location_id, q, external_id, limit, start_after)
List the custom data fields (intake/booking form questions) with type, options and where they apply. Use the ids to read answers on visits. GET /data-fields.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"description": "Only items offered at these locations.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"q": {
"description": "Prefix match on name or display name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_data_field(data_field_id)
One data field by id. GET /data-fields/{dataFieldId}.
输入模式
{
"type": "object",
"properties": {
"data_field_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Data field id."
}
},
"required": [
"data_field_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_users(location_id, role, q, external_id, limit, ...)
List the staff users of the account: name, e-mail, roles, locations. Password data and tokens are never returned. GET /users.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"description": "Only users with access to these locations.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"role": {
"description": "Only users with these roles.",
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 50
}
},
"q": {
"description": "Prefix match on name or e-mail.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_messages(location_id, visit_id, customer_id, external_customer_id, state, ...)
List the SMS/e-mail messages Waitwhile sent to and received from customers: channel, recipient, body, delivery state (PENDING, BLOCKED, FAILED, DELIVERED, UNCONFIRMED, RECEIVED) and error. Filter by location, visit, customer, state or date. Contains personal data. This only reads; it cannot send. GET /messages.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"visit_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"external_customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"state": {
"type": "string",
"enum": [
"PENDING",
"BLOCKED",
"FAILED",
"DELIVERED",
"UNCONFIRMED",
"RECEIVED"
]
},
"from_date": {
"type": "string",
"description": "ISO 8601 date or date-time (e.g. 2026-10-01T00:00:00Z), or epoch milliseconds."
},
"to_date": {
"type": "string",
"description": "ISO 8601 date or date-time (e.g. 2026-10-01T00:00:00Z), or epoch milliseconds."
},
"desc": {
"description": "Newest first.",
"type": "boolean"
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_get_message(message_id)
One message by id. Contains personal data. GET /messages/{messageId}.
输入模式
{
"type": "object",
"properties": {
"message_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Message id."
}
},
"required": [
"message_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_visit_analytics(location_id, from_date, to_date)
Aggregated visit statistics for a period: visits, waitlisted, bookings, served, no-shows, cancellations, wait and serve duration quantiles, and breakdowns by location, resource, service, party size, user, day of week and hour of day. GET /analytics/visits (JSON).
输入模式
{
"type": "object",
"properties": {
"location_id": {
"description": "Only this location (default: all).",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"from_date": {
"description": "Period start (ISO 8601 or epoch ms).",
"type": "string"
},
"to_date": {
"description": "Period end (ISO 8601 or epoch ms).",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢waitwhile_list_audit_entries(type, event, entity_id, location_id, from_date, ...)
The account's audit log: who changed what and when (visits, customers, locations, services, resources, users, messages). Filter by type, event, entity, location or date. GET /audit-entries.
输入模式
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"ACCOUNT",
"CUSTOMER",
"DATA-FIELD",
"MESSAGE",
"LOCATION",
"RESOURCE",
"SERVICE",
"USER",
"VISIT"
]
},
"event": {
"description": "Audit event type.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"entity_id": {
"description": "Id of the changed object.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"from_date": {
"type": "string",
"description": "ISO 8601 date or date-time (e.g. 2026-10-01 or 2026-10-01T00:00:00Z)."
},
"to_date": {
"type": "string",
"description": "ISO 8601 date or date-time (e.g. 2026-10-01 or 2026-10-01T00:00:00Z)."
},
"desc": {
"description": "Newest first.",
"type": "boolean"
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"start_after": {
"description": "Cursor: pass the previous reply's next_start_after to get the next page.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴waitwhile_create_visit(location_id, name, first_name, last_name, phone, ...)
WRITE: create ONE visit at a location. Without a date it adds the customer to the waitlist; with a local date-time (YYYY-MM-DDThh:mm) it creates a booking. Needs a location and at least a name, phone or e-mail. Not idempotent: calling it twice creates two visits. Visit notes are not supported here (the field is deprecated): use waitwhile_add_customer_note. By default the request asks Waitwhile to suppress the customer message; this may only stop the immediate confirmation, and scheduled reminders/follow-ups can still go out per the location's settings. With send_notifications=true Waitwhile may text/e-mail this ONE customer. POST /visits.
输入模式
{
"type": "object",
"properties": {
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Location id (see waitwhile_list_locations)."
},
"name": {
"description": "Customer name.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"phone": {
"description": "Customer phone, E.164 (+16005551234).",
"type": "string",
"pattern": "^\\+[1-9]\\d{6,14}$"
},
"email": {
"description": "Customer e-mail.",
"type": "string",
"maxLength": 100,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"party_size": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"date": {
"description": "Booking start in the location's local time, YYYY-MM-DDThh:mm. Omit to join the waitlist.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"duration": {
"description": "Booking duration in seconds.",
"type": "integer",
"minimum": 0,
"maximum": 86400
},
"service_ids": {
"description": "Services the customer wants.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"resource_ids": {
"description": "Preferred resources (staff, rooms).",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"send_notifications": {
"description": "Default false: the request asks Waitwhile not to send the immediate confirmation/status message. This may not stop everything: scheduled reminders and follow-ups can still go out according to the location's own settings. Set true to let Waitwhile send its normal messages to the customer.",
"type": "boolean"
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴waitwhile_update_visit(visit_id, state, add_tags, remove_tags, date, ...)
WRITE: change ONE visit — its state (e.g. WAITING to SERVING to COMPLETE, or BOOKED), add/remove tags (e.g. ARRIVED, CONFIRMED, NO-SHOW), booking date/duration or party size. Only the fields you pass change. By default the request asks Waitwhile to suppress the customer message; this may only stop the immediate status message, and scheduled reminders/follow-ups can still go out per the location's settings. With send_notifications=true Waitwhile may text/e-mail this ONE customer. Use waitwhile_cancel_visit to cancel. POST /visits/{visitId}.
输入模式
{
"type": "object",
"properties": {
"visit_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Visit id."
},
"state": {
"description": "New state.",
"type": "string",
"enum": [
"PENDING",
"DRAFT",
"BOOKED",
"WAITING",
"SERVING",
"COMPLETE"
]
},
"add_tags": {
"description": "Tags to add.",
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"enum": [
"NO-SHOW",
"CANCELLED",
"REMOVED",
"ALERTED",
"ARRIVED",
"DELAYED",
"CONFIRMED",
"EXPIRED",
"FLAGGED",
"IMPORTED",
"PRIORITIZED",
"CAPACITY",
"REJECTED",
"QUICK"
]
}
},
"remove_tags": {
"description": "Tags to remove.",
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"enum": [
"NO-SHOW",
"CANCELLED",
"REMOVED",
"ALERTED",
"ARRIVED",
"DELAYED",
"CONFIRMED",
"EXPIRED",
"FLAGGED",
"IMPORTED",
"PRIORITIZED",
"CAPACITY",
"REJECTED",
"QUICK"
]
}
},
"date": {
"description": "New booking start, local time YYYY-MM-DDThh:mm.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
},
"duration": {
"description": "New booking duration in seconds.",
"type": "integer",
"minimum": 0,
"maximum": 86400
},
"party_size": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"send_notifications": {
"description": "Default false: the request asks Waitwhile not to send the immediate confirmation/status message. This may not stop everything: scheduled reminders and follow-ups can still go out according to the location's own settings. Set true to let Waitwhile send its normal messages to the customer.",
"type": "boolean"
}
},
"required": [
"visit_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴waitwhile_cancel_visit(visit_id, send_notifications)
WRITE: cancel ONE visit (a waitlist entry or booking). Waitwhile sets its state to COMPLETE and adds the CANCELLED tag; the visit is kept, not deleted. By default the request asks Waitwhile to suppress the customer message; this may only stop the immediate cancellation notice, and scheduled reminders/follow-ups can still go out per the location's settings. With send_notifications=true Waitwhile may text/e-mail this ONE customer. POST /visits/{visitId}/cancel.
输入模式
{
"type": "object",
"properties": {
"visit_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Visit id."
},
"send_notifications": {
"description": "Default false: the request asks Waitwhile not to send the immediate confirmation/status message. This may not stop everything: scheduled reminders and follow-ups can still go out according to the location's own settings. Set true to let Waitwhile send its normal messages to the customer.",
"type": "boolean"
}
},
"required": [
"visit_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡waitwhile_add_customer_note(customer_id, content, location_id, visit_id)
WRITE: add one staff note to a customer's record (optionally tied to a visit and location). Adds only; nothing is edited or sent to the customer. POST /customers/{customerId}/notes.
输入模式
{
"type": "object",
"properties": {
"customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Customer id."
},
"content": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "The note text."
},
"location_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"visit_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"customer_id",
"content"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据