Waitwhile MCP by usefulapi

Read Waitwhile visits, bookings, customers, services and analytics; add, update and cancel visits.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
93%
Calidad de los nombres
99%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (2)

  • LOWTool 'waitwhile_first_available_slots' name length outside 3-30 rangeen waitwhile_first_available_slots
  • LOWTool 'waitwhile_resources_availability' name length outside 3-30 rangeen waitwhile_resources_availability

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~7,804Tokens (definiciones de herramientas)
~2.0 KBTamaño de respuesta típico
Impacto significativo en la atención (6.10% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "waitwhile": {
      "url": "https://waitwhile.usefulapi.io/mcp"
    }
  }
}

Puntos de conexión remotos

https://waitwhile.usefulapi.io/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (29)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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).

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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}.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada29 herramientas