Zenbooker MCP by usefulapi
Read Zenbooker jobs, customers, invoices and timeslots; add customers and job notes.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- LOWzenbooker_list_recurring_bookings에서
- LOWzenbooker_get_recurring_booking에서
- LOWzenbooker_list_service_requests에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"zenbooker": {
"url": "https://zenbooker.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://zenbooker.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (21)
🟢zenbooker_list_jobs(customer, assigned, territory, recurring_booking, status, ...)
List jobs (booked appointments), by start time by default, with filters: customer id, assigned team member id, territory id, recurring booking id, status, canceled flag, creation time and scheduled start window. Returns { results, count, has_more, next_cursor }; pass next_cursor as cursor for the next page. GET /v1/jobs.
입력 스키마
{
"type": "object",
"properties": {
"customer": {
"description": "Only jobs of this customer id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"assigned": {
"description": "Only jobs assigned to this team member (service provider) id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"territory": {
"description": "Only jobs in this service territory id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"recurring_booking": {
"description": "Only jobs that belong to this recurring booking id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"status": {
"description": "Only jobs with this status.",
"type": "string",
"enum": [
"Scheduled",
"En-route",
"Started",
"Complete"
]
},
"canceled": {
"description": "true = only canceled jobs, false = only jobs that are not canceled.",
"type": "boolean"
},
"start_date_min": {
"description": "Only jobs scheduled to start on or after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"start_date_max": {
"description": "Only jobs scheduled to start on or before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_by": {
"description": "Sort field (default start_time).",
"type": "string",
"enum": [
"start_time",
"creation_date"
]
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_job(job_id)
One job by id: appointment time, status, customer, service address, services and fields, assigned providers, notes and invoice summary. GET /v1/jobs/{id}.
입력 스키마
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴zenbooker_add_job_note(job_id, text)
WRITE: add an internal note (text) to a job. Notes are appended, never replaced, and cannot be deleted through this server, so check the job first. POST /v1/jobs/{id}/notes.
입력 스키마
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 5000,
"description": "The note text."
}
},
"required": [
"job_id",
"text"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_recurring_bookings(status, customer, assigned, territory, created_after, ...)
List recurring bookings (repeating job series), by status (active or canceled), customer id, assigned team member id, territory id or creation time. Max 40 per page. Returns { results, count, has_more, next_cursor }. GET /v1/recurring.
입력 스키마
{
"type": "object",
"properties": {
"status": {
"description": "Only recurring bookings with this status.",
"type": "string",
"enum": [
"active",
"canceled"
]
},
"customer": {
"description": "Only recurring bookings of this customer id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"assigned": {
"description": "Only recurring bookings assigned to this team member id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"territory": {
"description": "Only recurring bookings in this service territory id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-40 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 40
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_recurring_booking(recurring_booking_id)
One recurring booking by id: first job date, job count, time slot, status, territory, service, pricing and its job ids. GET /v1/recurring/{id}.
입력 스키마
{
"type": "object",
"properties": {
"recurring_booking_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"recurring_booking_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_customers(name, email, phone, location, radius, ...)
List or search customers by name, email or phone, by creation time, or by default address near a place (location + radius in miles). Returns { results, count, has_more, next_cursor }. GET /v1/customers.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"description": "Search by customer name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"email": {
"description": "Search by customer email.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"phone": {
"description": "Search by phone number.",
"type": "string",
"minLength": 1,
"maxLength": 60
},
"location": {
"description": "A place or address; finds customers whose default address is near it (geocoded by Zenbooker).",
"type": "string",
"minLength": 1,
"maxLength": 300
},
"radius": {
"description": "Search radius in miles, used with location.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_customer(customer_id)
One customer by id: contact details, notes, addresses, job and recurring booking ids and linked Stripe customer. GET /v1/customers/{id}.
입력 스키마
{
"type": "object",
"properties": {
"customer_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴zenbooker_create_customer(name, phone, email)
WRITE: create a new customer record in Zenbooker (name required; phone and email optional). It does not look for an existing customer, so search with zenbooker_list_customers first to avoid duplicates. POST /v1/customers.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The customer's name."
},
"phone": {
"description": "The customer's default phone number.",
"type": "string",
"minLength": 1,
"maxLength": 60
},
"email": {
"description": "The customer's email address.",
"type": "string",
"minLength": 3,
"maxLength": 200
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_invoices(status, customer, territory, created_after, created_before, ...)
List invoices, optionally by status (draft, unpaid, partial_paid, paid, void), customer id, territory id or creation time. Each invoice has line items, totals, amount paid and due and its transactions. Returns { results, count, has_more, next_cursor }. GET /v1/invoices.
입력 스키마
{
"type": "object",
"properties": {
"status": {
"description": "Only invoices in this status (default: any status).",
"type": "string",
"enum": [
"draft",
"unpaid",
"partial_paid",
"paid",
"void"
]
},
"customer": {
"description": "Only invoices of this customer id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"territory": {
"description": "Only invoices in this service territory id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_by": {
"description": "Sort field (default creation_date).",
"type": "string",
"enum": [
"creation_date",
"total_paid",
"total_due"
]
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_invoice(invoice_id)
One invoice by id: recipient, line items, discounts, tax, totals, amount paid and due, status and transactions. GET /v1/invoices/{id}.
입력 스키마
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_transactions(type, payment_method, status, customer, territory, ...)
List payment transactions, optionally by type (stripe_payment, external_transaction), payment method, status (succeeded, failed, voided), customer id, territory id, creation time or payment date. Returns { results, count, has_more, next_cursor }. GET /v1/transactions.
입력 스키마
{
"type": "object",
"properties": {
"type": {
"description": "Only transactions of this type.",
"type": "string",
"enum": [
"stripe_payment",
"external_transaction"
]
},
"payment_method": {
"description": "Only transactions paid by this method.",
"type": "string",
"enum": [
"stripe",
"credit_card",
"check",
"cash",
"custom"
]
},
"status": {
"description": "Only transactions in this status.",
"type": "string",
"enum": [
"succeeded",
"failed",
"voided"
]
},
"customer": {
"description": "Only transactions of this customer id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"territory": {
"description": "Only transactions in this service territory id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"transaction_date_after": {
"description": "Only transactions dated after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"transaction_date_before": {
"description": "Only transactions dated before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_by": {
"description": "Sort field (default creation_date).",
"type": "string",
"enum": [
"creation_date",
"total_paid",
"total_due"
]
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_transaction(transaction_id)
One payment transaction by id: status, type, method, amount, invoice and customer ids, Stripe references. GET /v1/transactions/{id}.
입력 스키마
{
"type": "object",
"properties": {
"transaction_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"transaction_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_services(is_visible, category_id, created_after, created_before, sort_order, ...)
List the services a business offers, with pricing method, base price and duration, option sections and recurring frequencies. GET /v1/services.
입력 스키마
{
"type": "object",
"properties": {
"is_visible": {
"description": "true = only services visible in online booking.",
"type": "boolean"
},
"category_id": {
"description": "Only services in this category id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_service(service_id)
One service by id: pricing, duration, option sections and their options. GET /v1/services/{id}.
입력 스키마
{
"type": "object",
"properties": {
"service_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"service_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_territories(enabled, name, created_after, created_before, sort_order, ...)
List the service territories (areas a business serves) with timezone, service area, providers and operating hours. Use the ids to filter jobs and invoices or to look up time slots. GET /v1/territories.
입력 스키마
{
"type": "object",
"properties": {
"enabled": {
"description": "true = only active territories, false = only deactivated ones (default both).",
"type": "boolean"
},
"name": {
"description": "Search by territory name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_territory(territory_id)
One service territory by id. GET /v1/territories/{id}.
입력 스키마
{
"type": "object",
"properties": {
"territory_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"territory_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_team_members(service_provider, deactivated, territory, email, created_after, ...)
List team members (staff and service providers) with role, status, assigned territories, skill tags and work hours. Use the ids to filter jobs by assigned provider. GET /v1/team_members.
입력 스키마
{
"type": "object",
"properties": {
"service_provider": {
"description": "true = only team members who can be assigned jobs.",
"type": "boolean"
},
"deactivated": {
"description": "true = only deactivated team members, false = only active ones.",
"type": "boolean"
},
"territory": {
"description": "Only providers assigned to this service territory id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"email": {
"description": "Find a team member by email address.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_team_member(team_member_id)
One team member by id: contact details, role, status, territories, skill tags and work hours. GET /v1/team_members/{id}.
입력 스키마
{
"type": "object",
"properties": {
"team_member_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The Zenbooker id (the id field of a list result)."
}
},
"required": [
"team_member_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_list_service_requests(request_type, customer, territory, created_after, created_before, ...)
List incoming service requests (booking requests and quote requests) with status, customer, territory, duration, requested dates, services and pricing. Returns { results, count, has_more, next_cursor }. GET /v1/service_requests.
입력 스키마
{
"type": "object",
"properties": {
"request_type": {
"description": "Only this kind of request.",
"type": "string",
"enum": [
"booking_request",
"quote_request"
]
},
"customer": {
"description": "Only requests of this customer id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"territory": {
"description": "Only requests in this service territory id.",
"type": "string",
"minLength": 1,
"maxLength": 128
},
"created_after": {
"description": "Only items created after this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"created_before": {
"description": "Only items created before this ISO 8601 date-time.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"sort_order": {
"description": "Sort order (default ascending).",
"type": "string",
"enum": [
"ascending",
"descending"
]
},
"cursor": {
"description": "Where to start in the list (default 0). Pass the previous reply's next_cursor.",
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"description": "Results per page, 1-100 (default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_check_service_area(postal_code, address, lat, lng)
Check whether a location is inside the business's service area: returns in_service_area, the matching territory and other territories that serve it (or the closest territory when it is outside every area). Give a postal code, an address, or lat + lng. GET /v1/scheduling/service_area_check.
입력 스키마
{
"type": "object",
"properties": {
"postal_code": {
"description": "ZIP or postal code.",
"type": "string",
"minLength": 1,
"maxLength": 20
},
"address": {
"description": "Street address (needed only when there is no postal code or lat/lng).",
"type": "string",
"minLength": 1,
"maxLength": 300
},
"lat": {
"description": "Latitude; send together with lng.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"description": "Longitude; send together with lat.",
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢zenbooker_get_timeslots(territory, duration, date, days, lat, ...)
Available booking time slots for a service territory, grouped by day (days[].timeslots[] with start, end and id). Needs the territory id (zenbooker_list_territories or zenbooker_check_service_area) and the service duration in minutes. GET /v1/scheduling/timeslots.
입력 스키마
{
"type": "object",
"properties": {
"territory": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "The service territory id (required)."
},
"duration": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"description": "Service length in minutes (required)."
},
"date": {
"description": "First day to check, yyyy-mm-dd (default today).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"days": {
"description": "How many days to return (default 7, max 60).",
"type": "integer",
"minimum": 1,
"maximum": 60
},
"lat": {
"description": "Customer latitude (for drive-time aware availability); send with lng.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"description": "Customer longitude; send with lat.",
"type": "number",
"minimum": -180,
"maximum": 180
},
"min_providers_needed": {
"description": "Minimum number of providers a slot needs (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"service_providers": {
"description": "Comma-separated team member ids to restrict slots to.",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"required_skills": {
"description": "Comma-separated skill tag ids a provider must have.",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"timeslot_template": {
"description": "A timeslot template id.",
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"territory",
"duration"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거