Everything about the APPOINTMENT is explicit: the service, the professional,
the appointment type, both ends of the window, and the timezone they are
written in. Nothing is auto-assigned — an unmatched or ambiguous value is
refused, and the refusal names what would have been accepted.
Everything about the MESSAGING is not: whether reminders go out, and
when, comes from the calendar’s own Notifications settings, so an
appointment booked here behaves exactly like the same appointment booked
in the dashboard.
The customer is matched on their phone number and created if unknown.
Availability is never a reason to fail here: the appointment is booked
even if it falls outside declared working hours or overlaps another one. The
calling system owns the schedule.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Dialtu","description":"Documentación de Dialtu, la plataforma de automatización comercial con IA: guías de producto y referencia de la API pública","colors":{"primary":"#6633FF","light":"#9966FF","dark":"#5229CC"},"logo":{"light":"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/logo/light.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=d6c7d6e992583a882baffad77a34e714","dark":"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/logo/dark.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=53346d8a0b194cd0f5570ab69399758e","href":"https://www.dialtu.com"},"favicon":"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/favicon.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=0315cca2c3d3b259239699a32b2ba0c2","api":{"openapi":"https://api.dialtu.com/api/v2/public/openapi.json","params":{"expanded":"closed"},"playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["curl","python","javascript"]}},"navbar":{"primary":{"type":"button","label":"Ir al panel","href":"https://app.dialtu.com"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/dialtu"}},"seo":{"metatags":{"og:site_name":"Dialtu Documentation","og:type":"website","twitter:card":"summary_large_image"},"indexing":"navigable"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"es","href":"es/getting-started/what-is-dialtu"},{"language":"en","href":"en/getting-started/what-is-dialtu"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dialtu-0be120d3","hasAudioNarration":false,"actualSubdomain":"dialtu-0be120d3","customDomains":["docs.dialtu.com"],"gitSource":{"type":"github","owner":"davidbo99","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad1c47d4608008ddf98398c","collectionId":"c9ae7c78-1224-4dac-bb8d-c887c34731cc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad1c47d4608008ddf98398c"},"feedback":{"edits":false,"issues":false},"entitlements":{},"buildId":"6ad1c47d4608008ddf98398c","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"en","tag":"Guides","count":80},{"language":"es","tag":"Guías","count":80},{"language":"en","tag":"API Reference","count":27},{"language":"es","tag":"Referencia de API","count":27},{"language":"en","tag":"Calendar","count":23},{"language":"en","tag":"Endpoints","count":21},{"language":"es","tag":"Endpoints","count":21},{"language":"es","tag":"Calendario","count":15},{"language":"en","tag":"Salesflow","count":12},{"language":"en","tag":"WhatsApp agents","count":12},{"language":"es","tag":"Salesflow","count":12},{"language":"es","tag":"Agentes de WhatsApp","count":12},{"language":"en","tag":"SMS agents","count":11},{"language":"es","tag":"Agentes de SMS","count":11},{"language":"en","tag":"Organizations","count":9},{"language":"es","tag":"Organizaciones","count":9},{"language":"es","tag":"Calendar","count":8},{"language":"en","tag":"Getting started","count":7},{"language":"en","tag":"Salesflow pipelines","count":7},{"language":"es","tag":"Salesflow pipelines","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/api-reference/endpoints/calendar/book-an-appointment","slug":"/en/api-reference/endpoints/calendar/book-an-appointment","pageMetadata":{"title":"Book an appointment","openapi":"POST /api/v2/public/calendar/events","description":"Book one appointment.\n\nEverything about the APPOINTMENT is explicit: the service, the professional,\nthe appointment type, both ends of the window, and the timezone they are\nwritten in. Nothing is auto-assigned — an unmatched or ambiguous value is\nrefused, and the refusal names what would have been accepted.\n\nEverything about the MESSAGING is not: whether reminders go out, and\nwhen, comes from the calendar's own Notifications settings, so an\nappointment booked here behaves exactly like the same appointment booked\nin the dashboard.\n\nThe customer is matched on their phone number and created if unknown.\n\n**Availability is never a reason to fail here**: the appointment is booked\neven if it falls outside declared working hours or overlaps another one. The\ncalling system owns the schedule.","href":"/en/api-reference/endpoints/calendar/book-an-appointment"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Book one appointment.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Everything about the APPOINTMENT is explicit: the service, the professional,\\nthe appointment type, both ends of the window, and the timezone they are\\nwritten in. Nothing is auto-assigned — an unmatched or ambiguous value is\\nrefused, and the refusal names what would have been accepted.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Everything about the MESSAGING is not: whether reminders go out, and\\nwhen, comes from the calendar’s own Notifications settings, so an\\nappointment booked here behaves exactly like the same appointment booked\\nin the dashboard.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"The customer is matched on their phone number and created if unknown.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Availability is never a reason to fail here\"\n }), \": the appointment is booked\\neven if it falls outside declared working hours or overlaps another one. The\\ncalling system owns the schedule.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Book an appointment","openapi":"POST /api/v2/public/calendar/events","description":"Book one appointment.\n\nEverything about the APPOINTMENT is explicit: the service, the professional,\nthe appointment type, both ends of the window, and the timezone they are\nwritten in. Nothing is auto-assigned — an unmatched or ambiguous value is\nrefused, and the refusal names what would have been accepted.\n\nEverything about the MESSAGING is not: whether reminders go out, and\nwhen, comes from the calendar's own Notifications settings, so an\nappointment booked here behaves exactly like the same appointment booked\nin the dashboard.\n\nThe customer is matched on their phone number and created if unknown.\n\n**Availability is never a reason to fail here**: the appointment is booked\neven if it falls outside declared working hours or overlaps another one. The\ncalling system owns the schedule.","href":"/en/api-reference/endpoints/calendar/book-an-appointment"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createCalendarEvent","summary":"Book an appointment","parameters":[],"responses":{"201":"ee7db17f-574f-4532-875a-bbf5a1789c50","400":"fe5cae09-8f92-40b6-8755-aa7914c35bdc","401":"ef56ed05-9d12-46f8-8ee7-8949afa15092","409":"cc44df5c-9f0c-4076-89d6-0b969ae902de","422":"a63c26fc-148c-46f0-b772-9068d801e1db","500":"e1454143-4d0b-4e61-a500-2d660315f3dc"},"description":"Book one appointment.\n\nEverything about the APPOINTMENT is explicit: the service, the professional,\nthe appointment type, both ends of the window, and the timezone they are\nwritten in. Nothing is auto-assigned — an unmatched or ambiguous value is\nrefused, and the refusal names what would have been accepted.\n\nEverything about the MESSAGING is not: whether reminders go out, and\nwhen, comes from the calendar's own Notifications settings, so an\nappointment booked here behaves exactly like the same appointment booked\nin the dashboard.\n\nThe customer is matched on their phone number and created if unknown.\n\n**Availability is never a reason to fail here**: the appointment is booked\neven if it falls outside declared working hours or overlaps another one. The\ncalling system owns the schedule.","tags":["Calendar"],"requestBody":"e30f4270-b81d-4cd4-b7d6-d3da0ffc0dc2","security":["17b2dd8b-5235-4a7e-a120-34c1979ffc7d"],"method":"post","type":"path","servers":["64986e62-6aff-4026-a2be-2361e00f4585","b407c61f-7c82-415e-85d4-7a1b8f2be716"],"path":"/api/v2/public/calendar/events","baseUrlOptions":["https://api.dialtu.com","https://api.stg.dialtu.com"],"title":"Book an appointment","codeSamples":[],"requestExampleLanguages":["bash","python","javascript"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"description":"Body of *Book an appointment*.","examples":[{"client":{"first_name":"Jane","last_name":"Roe","phone":"+573001112233"},"end_at":"2026-09-15T14:30:00","event_type_name":"In-Person","notes":"Booked from the website form","professional_name":"Ana Gómez","service_name":"Consulta Médica","start_at":"2026-09-15T14:00:00","timezone":"America/Bogota"}],"properties":{"client":{"description":"The customer the appointment is for.","properties":{"first_name":{"oneOf":[{"type":"string","title":"First Name","description":"Given name. Required (one of first/last) only when the phone number is new to your account.","maxLength":150,"uniqueKey":"client.first_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"First Name","description":"Given name. Required (one of first/last) only when the phone number is new to your account.","uniqueKey":"client.first_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"client.first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"type":"string","title":"Last Name","description":"Family name. See `first_name`.","maxLength":150,"uniqueKey":"client.last_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Last Name","description":"Family name. See `first_name`.","uniqueKey":"client.last_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"client.last_name","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"string","title":"Phone","description":"E.164, including the country code. Always required.","maxLength":32,"uniqueKey":"client.phone.oneOf.0","typeLabel":"string"},{"type":"null","title":"Phone","description":"E.164, including the country code. Always required.","uniqueKey":"client.phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"client.phone","typeLabel":"string | null"},"email":{"oneOf":[{"type":"string","title":"Email","description":"Email address; only stored when the client is created by this request.","maxLength":254,"uniqueKey":"client.email.oneOf.0","typeLabel":"string"},{"type":"null","title":"Email","description":"Email address; only stored when the client is created by this request.","uniqueKey":"client.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"client.email","typeLabel":"string | null"}},"title":"PublicBookingClientSchema","type":"object","isRequired":true,"uniqueKey":"client","typeLabel":"PublicBookingClientSchema · object"},"start_at":{"oneOf":[{"type":"string","title":"Start At","description":"Local start time in `timezone`, e.g. 2026-09-15T14:00:00. An explicit UTC offset is accepted and then wins over `timezone`.","format":"date-time","uniqueKey":"start_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Start At","description":"Local start time in `timezone`, e.g. 2026-09-15T14:00:00. An explicit UTC offset is accepted and then wins over `timezone`.","uniqueKey":"start_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"start_at","typeLabel":"string\u003cdate-time> | null"},"end_at":{"oneOf":[{"type":"string","title":"End At","description":"Local end time in `timezone`. Required — it is never derived from the service's default duration.","format":"date-time","uniqueKey":"end_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"End At","description":"Local end time in `timezone`. Required — it is never derived from the service's default duration.","uniqueKey":"end_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"end_at","typeLabel":"string\u003cdate-time> | null"},"timezone":{"oneOf":[{"type":"string","title":"Timezone","description":"IANA zone name for start_at/end_at, e.g. 'America/Bogota'.","maxLength":64,"uniqueKey":"timezone.oneOf.0","typeLabel":"string"},{"type":"null","title":"Timezone","description":"IANA zone name for start_at/end_at, e.g. 'America/Bogota'.","uniqueKey":"timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"timezone","typeLabel":"string | null"},"service_id":{"oneOf":[{"type":"integer","title":"Service Id","description":"Service ID from *List bookable services*. One of `service_id`/`service_name` is required.","uniqueKey":"service_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Service Id","description":"Service ID from *List bookable services*. One of `service_id`/`service_name` is required.","uniqueKey":"service_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"service_id","typeLabel":"integer | null"},"service_name":{"oneOf":[{"type":"string","title":"Service Name","description":"Alternative to service_id. One of the two is required.","maxLength":255,"uniqueKey":"service_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Service Name","description":"Alternative to service_id. One of the two is required.","uniqueKey":"service_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"service_name","typeLabel":"string | null"},"professional_id":{"oneOf":[{"type":"integer","title":"Professional Id","description":"Professional ID; must be an active member of the service.","uniqueKey":"professional_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Professional Id","description":"Professional ID; must be an active member of the service.","uniqueKey":"professional_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"professional_id","typeLabel":"integer | null"},"professional_name":{"oneOf":[{"type":"string","title":"Professional Name","description":"Alternative to professional_id. One of the two is required — this API never picks the professional for you.","maxLength":255,"uniqueKey":"professional_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Professional Name","description":"Alternative to professional_id. One of the two is required — this API never picks the professional for you.","uniqueKey":"professional_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"professional_name","typeLabel":"string | null"},"event_type_id":{"oneOf":[{"type":"integer","title":"Event Type Id","description":"Appointment type ID; must be active and offered by the service.","uniqueKey":"event_type_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Event Type Id","description":"Appointment type ID; must be active and offered by the service.","uniqueKey":"event_type_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"event_type_id","typeLabel":"integer | null"},"event_type_name":{"oneOf":[{"type":"string","title":"Event Type Name","description":"Alternative to event_type_id. One of the two is required.","maxLength":255,"uniqueKey":"event_type_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Event Type Name","description":"Alternative to event_type_id. One of the two is required.","uniqueKey":"event_type_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"event_type_name","typeLabel":"string | null"},"notes":{"oneOf":[{"type":"string","title":"Notes","description":"Free text shown to the team in Dialtu.","maxLength":2000,"uniqueKey":"notes.oneOf.0","typeLabel":"string"},{"type":"null","title":"Notes","description":"Free text shown to the team in Dialtu.","uniqueKey":"notes.oneOf.1","typeLabel":"null"}],"uniqueKey":"notes","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Title shown on the appointment in Dialtu and on the professional's mirrored Google event. Omit it and the customer's name is used.","maxLength":200,"uniqueKey":"title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Title shown on the appointment in Dialtu and on the professional's mirrored Google event. Omit it and the customer's name is used.","uniqueKey":"title.oneOf.1","typeLabel":"null"}],"uniqueKey":"title","typeLabel":"string | null"}},"required":["client"],"title":"PublicCreateCalendarEventSchema","type":"object","uniqueKey":"","typeLabel":"PublicCreateCalendarEventSchema · object"},"examples":{"Example":{"title":"Example","value":{"client":{"first_name":"Jane","last_name":"Roe","phone":"+573001112233"},"end_at":"2026-09-15T14:30:00","event_type_name":"In-Person","notes":"Booked from the website form","professional_name":"Ana Gómez","service_name":"Consulta Médica","start_at":"2026-09-15T14:00:00","timezone":"America/Bogota"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"ee7db17f-574f-4532-875a-bbf5a1789c50":{"description":"Created","content":{"application/json":{"schema":{"description":"Response of *Book an appointment*.","properties":{"data":{"description":"The booked appointment.","properties":{"id":{"description":"Appointment ID. Store it.","title":"Id","type":"integer","isRequired":true,"uniqueKey":"data.id","typeLabel":"integer"},"title":{"description":"The appointment title as shown in Dialtu.","title":"Title","type":"string","isRequired":true,"uniqueKey":"data.title","typeLabel":"string"},"start_at":{"description":"Start instant, ISO 8601 UTC (`...Z`).","title":"Start At","type":"string","isRequired":true,"uniqueKey":"data.start_at","typeLabel":"string"},"end_at":{"description":"End instant, ISO 8601 UTC (`...Z`).","title":"End At","type":"string","isRequired":true,"uniqueKey":"data.end_at","typeLabel":"string"},"status":{"description":"Appointment status, e.g. `booked`.","title":"Status","type":"string","isRequired":true,"uniqueKey":"data.status","typeLabel":"string"},"source":{"description":"Where the booking came from; `api` for this endpoint.","title":"Source","type":"string","isRequired":true,"uniqueKey":"data.source","typeLabel":"string"},"client":{"additionalProperties":true,"description":"`{id, name, phone, email}` of the customer.","title":"Client","type":"object","isRequired":true,"uniqueKey":"data.client","typeLabel":"Client · object"},"calendar_profile":{"additionalProperties":true,"description":"`{calendar_profile_id, name}` of the professional.","title":"Calendar Profile","type":"object","isRequired":true,"uniqueKey":"data.calendar_profile","typeLabel":"Calendar Profile · object"},"custom_fields":{"additionalProperties":true,"description":"Custom fields stored on the appointment.","title":"Custom Fields","type":"object","isRequired":true,"uniqueKey":"data.custom_fields","typeLabel":"Custom Fields · object"},"created_at":{"description":"Creation instant, ISO 8601 UTC.","title":"Created At","type":"string","isRequired":true,"uniqueKey":"data.created_at","typeLabel":"string"},"service":{"oneOf":[{"type":"object","title":"Service","description":"`{id, name, color}` of the service.","additionalProperties":true,"uniqueKey":"data.service.oneOf.0","typeLabel":"Service · object"},{"type":"null","title":"Service","description":"`{id, name, color}` of the service.","uniqueKey":"data.service.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.service","typeLabel":"Service · object | null"},"event_type":{"oneOf":[{"type":"object","title":"Event Type","description":"`{id, name, color}` of the appointment type.","additionalProperties":true,"uniqueKey":"data.event_type.oneOf.0","typeLabel":"Event Type · object"},{"type":"null","title":"Event Type","description":"`{id, name, color}` of the appointment type.","uniqueKey":"data.event_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.event_type","typeLabel":"Event Type · object | null"},"notes":{"oneOf":[{"type":"string","title":"Notes","description":"The free-text note, when one was given.","uniqueKey":"data.notes.oneOf.0","typeLabel":"string"},{"type":"null","title":"Notes","description":"The free-text note, when one was given.","uniqueKey":"data.notes.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.notes","typeLabel":"string | null"},"intake_fields":{"default":[],"description":"`[{key, label, type, value}]` — the intake answers captured at booking.","items":{"additionalProperties":true,"type":"object","uniqueKey":"data.intake_fields.items.[INDEX]","typeLabel":"object"},"title":"Intake Fields","type":"array","uniqueKey":"data.intake_fields","typeLabel":"Intake Fields · object[]"}},"required":["id","title","start_at","end_at","status","source","client","calendar_profile","custom_fields","created_at"],"title":"PublicCalendarEventSchema","type":"object","isRequired":true,"uniqueKey":"data","typeLabel":"PublicCalendarEventSchema · object"},"client_id":{"description":"The customer's client ID.","title":"Client Id","type":"integer","isRequired":true,"uniqueKey":"client_id","typeLabel":"integer"},"client_created":{"description":"`true` when this request created the customer, `false` when it matched an existing one.","title":"Client Created","type":"boolean","isRequired":true,"uniqueKey":"client_created","typeLabel":"boolean"},"status":{"default":"success","description":"Always `success`.","title":"Status","type":"string","uniqueKey":"status","typeLabel":"string"}},"required":["data","client_id","client_created"],"title":"PublicCalendarEventResponse","type":"object","uniqueKey":"","typeLabel":"PublicCalendarEventResponse · object"},"examples":{"Example":{"title":"Example","value":{"data":{"id":123,"title":"\u003cstring>","start_at":"\u003cstring>","end_at":"\u003cstring>","status":"\u003cstring>","source":"\u003cstring>","client":{},"calendar_profile":{},"custom_fields":{},"created_at":"\u003cstring>","service":{},"event_type":{},"notes":"\u003cstring>","intake_fields":[]},"client_id":123,"client_created":true,"status":"success"}}},"exampleType":"generated"}},"exampleType":"generated"},"fe5cae09-8f92-40b6-8755-aa7914c35bdc":{"description":"Bad Request","content":{"application/json":{"schema":{"description":"Error envelope shared by every public calendar endpoint.","properties":{"error_code":{"description":"Machine-readable error code; branch on this, never on `message`.","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"message":{"description":"Human-readable explanation.","title":"Message","type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"const":"error","default":"error","description":"Always `error`.","title":"Status","type":"string","uniqueKey":"status","typeLabel":"string"},"details":{"oneOf":[{"title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"details.oneOf.0","typeLabel":"any"},{"type":"null","title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"any | null"}},"required":["error_code","message"],"title":"PublicCalendarErrorResponse","type":"object","uniqueKey":"","typeLabel":"PublicCalendarErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"error_code":"\u003cstring>","message":"\u003cstring>","status":"error","details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"},"ef56ed05-9d12-46f8-8ee7-8949afa15092":{"description":"Missing, malformed or revoked API key.","content":{"application/json":{"schema":{"description":"Plain error body: `{\"detail\": \"...\"}`. No `error_code` is included.","properties":{"detail":{"description":"Human-readable reason for the failure.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"DetailErrorResponse","type":"object","uniqueKey":"","typeLabel":"DetailErrorResponse · object"},"examples":{"missing_header":{"title":"missing_header","value":{"detail":"Unauthorized"}},"invalid_key":{"title":"invalid_key","value":{"detail":"Invalid or expired API key. Please check your credentials."}}},"exampleType":"examples"}},"exampleType":"examples"},"cc44df5c-9f0c-4076-89d6-0b969ae902de":{"description":"Conflict","content":{"application/json":{"schema":{"description":"Error envelope shared by every public calendar endpoint.","properties":{"error_code":{"description":"Machine-readable error code; branch on this, never on `message`.","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"message":{"description":"Human-readable explanation.","title":"Message","type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"const":"error","default":"error","description":"Always `error`.","title":"Status","type":"string","uniqueKey":"status","typeLabel":"string"},"details":{"oneOf":[{"title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"details.oneOf.0","typeLabel":"any"},{"type":"null","title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"any | null"}},"required":["error_code","message"],"title":"PublicCalendarErrorResponse","type":"object","uniqueKey":"","typeLabel":"PublicCalendarErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"error_code":"\u003cstring>","message":"\u003cstring>","status":"error","details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"},"a63c26fc-148c-46f0-b772-9068d801e1db":{"description":"Unprocessable Content — or the request did not match the documented schema.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"PublicCalendarErrorResponse","description":"Error envelope shared by every public calendar endpoint.","required":["error_code","message"],"properties":{"error_code":{"description":"Machine-readable error code; branch on this, never on `message`.","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"oneOf.0.error_code","typeLabel":"string"},"message":{"description":"Human-readable explanation.","title":"Message","type":"string","isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"},"status":{"const":"error","default":"error","description":"Always `error`.","title":"Status","type":"string","uniqueKey":"oneOf.0.status","typeLabel":"string"},"details":{"oneOf":[{"title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"oneOf.0.details.oneOf.0","typeLabel":"any"},{"type":"null","title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"oneOf.0.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.details","typeLabel":"any | null"}},"uniqueKey":"oneOf.0","typeLabel":"PublicCalendarErrorResponse · object"},{"type":"object","title":"RequestValidationError","description":"Returned when the request body, query string or path could not be parsed against the documented schema. Fix the listed fields and retry.","required":["detail"],"properties":{"detail":{"type":"array","title":"Detail","description":"One entry per invalid field.","items":{"title":"RequestValidationErrorItem","type":"object","properties":{"loc":{"type":"array","title":"Loc","description":"Where the problem is: the first element is `body`, `query` or `path`, followed by the field path.","items":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"oneOf.1.detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"oneOf.1.detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"isRequired":true,"uniqueKey":"oneOf.1.detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value.","isRequired":true,"uniqueKey":"oneOf.1.detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable validation error type, e.g. `missing` or `int_parsing`.","isRequired":true,"uniqueKey":"oneOf.1.detail.items.[INDEX].type","typeLabel":"string"}},"required":["loc","msg","type"],"uniqueKey":"oneOf.1.detail.items.[INDEX]","typeLabel":"RequestValidationErrorItem · object"},"isRequired":true,"uniqueKey":"oneOf.1.detail","typeLabel":"RequestValidationErrorItem · object[]"}},"uniqueKey":"oneOf.1","typeLabel":"RequestValidationError · object"}],"uniqueKey":"","typeLabel":"PublicCalendarErrorResponse · object | RequestValidationError · object"},"examples":{"Example":{"title":"Example","value":{"error_code":"\u003cstring>","message":"\u003cstring>","status":"error","details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"},"e1454143-4d0b-4e61-a500-2d660315f3dc":{"description":"Internal Server Error","content":{"application/json":{"schema":{"description":"Error envelope shared by every public calendar endpoint.","properties":{"error_code":{"description":"Machine-readable error code; branch on this, never on `message`.","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"message":{"description":"Human-readable explanation.","title":"Message","type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"status":{"const":"error","default":"error","description":"Always `error`.","title":"Status","type":"string","uniqueKey":"status","typeLabel":"string"},"details":{"oneOf":[{"title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"details.oneOf.0","typeLabel":"any"},{"type":"null","title":"Details","description":"Extra context, e.g. `valid_service_names` or the offending `field`.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"any | null"}},"required":["error_code","message"],"title":"PublicCalendarErrorResponse","type":"object","uniqueKey":"","typeLabel":"PublicCalendarErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"error_code":"\u003cstring>","message":"\u003cstring>","status":"error","details":"\u003cunknown>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"17b2dd8b-5235-4a7e-a120-34c1979ffc7d":{"ApiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"pk_...","description":"API key created in the dashboard under **Settings → API Keys**. Send it as `Authorization: Bearer pk_...`.","scopes":[],"schemeName":"ApiKeyBearer"}}},"servers":{"64986e62-6aff-4026-a2be-2361e00f4585":{"url":"https://api.dialtu.com","description":"Production"},"b407c61f-7c82-415e-85d4-7a1b8f2be716":{"url":"https://api.stg.dialtu.com","description":"Staging"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"pk_...","description":"API key created in the dashboard under **Settings → API Keys**. Send it as `Authorization: Bearer pk_...`.","scopes":[],"schemeName":"ApiKeyBearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key created in the dashboard under **Settings → API Keys**. Send it as `Authorization: Bearer pk_...`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyBearer","name":"Authorization"}],"title":"ApiKeyBearer"}]},"originalFileLocation":"https://api.dialtu.com/api/v2/public/openapi.json"},"subdomain":"dialtu-0be120d3","siteName":"Dialtu","title":"Book an appointment - Dialtu","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"es":{"href":"/es/api-reference/endpoints/calendar/book-an-appointment","matchLevel":1},"en":{"href":"/en/api-reference/endpoints/calendar/book-an-appointment","matchLevel":0}}},"lastModified":"2026-09-16T04:53:57.288Z","originalFileLocation":"en/api-reference/endpoints/calendar/book-an-appointment.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Book one appointment. Everything about the APPOINTMENT is explicit: the service, the professional, the appointment type, both ends of the window, and the timezone they are written in. Nothing is auto-assigned — an unmatched or ambiguous value is refused, and the refusal names what would have been accepted. Everything about the MESSAGING is not: whether reminders go out, and when, comes from the calendar\u0026#x27;s own Notifications settings, so an appointment booked here behaves exactly like the same appointment booked in the dashboard. The customer is matched on their phone number and created if unknown. Availability is never a reason to fail here: the appointment is booked even if it falls outside declared working hours or overlaps another one. The calling system owns the schedule.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dialtu\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Book an appointment - Dialtu\">\u003cmeta data-mint-head property=\"og:description\" content=\"Book one appointment. Everything about the APPOINTMENT is explicit: the service, the professional, the appointment type, both ends of the window, and the timezone they are written in. Nothing is auto-assigned — an unmatched or ambiguous value is refused, and the refusal names what would have been accepted. Everything about the MESSAGING is not: whether reminders go out, and when, comes from the calendar\u0026#x27;s own Notifications settings, so an appointment booked here behaves exactly like the same appointment booked in the dashboard. The customer is matched on their phone number and created if unknown. Availability is never a reason to fail here: the appointment is booked even if it falls outside declared working hours or overlaps another one. The calling system owns the schedule.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dialtu Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dialtu-0be120d3.mintlify.app/_mintlify/api/og/v2?division=Calendar\u0026amp;title=Book+an+appointment\u0026amp;description=Book+one+appointment.%0A%0AEverything+about+the+APPOINTMENT+is+explicit%3A+the+service%2C+the+professional%2C%0Athe+appointment+type%2C+both+ends+of+the+window%2C+and+the+timez\u0026amp;theme=2034318531132db55603086e\u0026amp;signature=60a0c4b0b4e5085d00b69e50878f00e1fbe6d0056aea94a799232824ae3e778a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Book an appointment - Dialtu\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Book one appointment. Everything about the APPOINTMENT is explicit: the service, the professional, the appointment type, both ends of the window, and the timezone they are written in. Nothing is auto-assigned — an unmatched or ambiguous value is refused, and the refusal names what would have been accepted. Everything about the MESSAGING is not: whether reminders go out, and when, comes from the calendar\u0026#x27;s own Notifications settings, so an appointment booked here behaves exactly like the same appointment booked in the dashboard. The customer is matched on their phone number and created if unknown. Availability is never a reason to fail here: the appointment is booked even if it falls outside declared working hours or overlaps another one. The calling system owns the schedule.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dialtu-0be120d3.mintlify.app/_mintlify/api/og/v2?division=Calendar\u0026amp;title=Book+an+appointment\u0026amp;description=Book+one+appointment.%0A%0AEverything+about+the+APPOINTMENT+is+explicit%3A+the+service%2C+the+professional%2C%0Athe+appointment+type%2C+both+ends+of+the+window%2C+and+the+timez\u0026amp;theme=2034318531132db55603086e\u0026amp;signature=60a0c4b0b4e5085d00b69e50878f00e1fbe6d0056aea94a799232824ae3e778a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dialtu\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6633FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/api-reference/endpoints/calendar/book-an-appointment.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.dialtu.com/es/api-reference/endpoints/calendar/book-an-appointment\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.dialtu.com/es/api-reference/endpoints/calendar/book-an-appointment\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dialtu.com/#organization\",\"name\":\"Dialtu\",\"url\":\"https://docs.dialtu.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/logo/light.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=d6c7d6e992583a882baffad77a34e714\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dialtu.com#website\",\"name\":\"Dialtu\",\"url\":\"https://docs.dialtu.com\",\"publisher\":{\"@id\":\"https://docs.dialtu.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment#webpage\",\"url\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment\",\"name\":\"Book an appointment\",\"description\":\"Book one appointment. Everything about the APPOINTMENT is explicit: the service, the professional, the appointment type, both ends of the window, and the timezone they are written in. Nothing is auto-assigned — an unmatched or ambiguous value is refused, and the refusal names what would have been accepted. Everything about the MESSAGING is not: whether reminders go out, and when, comes from the calendar's own Notifications settings, so an appointment booked here behaves exactly like the same appointment booked in the dashboard. The customer is matched on their phone number and created if unknown. Availability is never a reason to fail here: the appointment is booked even if it falls outside declared working hours or overlaps another one. The calling system owns the schedule.\",\"dateModified\":\"2026-09-16T04:53:57.288Z\",\"isPartOf\":{\"@id\":\"https://docs.dialtu.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.dialtu.com/en/api-reference/endpoints/calls/schedule-a-call\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calendar\",\"item\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/get-bookable-capacity-per-service\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Book an appointment\",\"item\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment#apireference\",\"headline\":\"Book an appointment\",\"name\":\"Book an appointment\",\"description\":\"Book one appointment. Everything about the APPOINTMENT is explicit: the service, the professional, the appointment type, both ends of the window, and the timezone they are written in. Nothing is auto-assigned — an unmatched or ambiguous value is refused, and the refusal names what would have been accepted. Everything about the MESSAGING is not: whether reminders go out, and when, comes from the calendar's own Notifications settings, so an appointment booked here behaves exactly like the same appointment booked in the dashboard. The customer is matched on their phone number and created if unknown. Availability is never a reason to fail here: the appointment is booked even if it falls outside declared working hours or overlaps another one. The calling system owns the schedule.\",\"url\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/calendar/book-an-appointment#webpage\"},\"dateModified\":\"2026-09-16T04:53:57.288Z\",\"publisher\":{\"@id\":\"https://docs.dialtu.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dialtu.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dialtu\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Dialtu","nav":{"global":null,"languages":[{"language":"es","pages":[{"title":"es","href":"/es/api-reference/endpoints/calendar/book-an-appointment"}]},{"language":"en","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/en/getting-started/what-is-dialtu"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Getting started","icon":"rocket","pages":[{"title":"Introduction","icon":"rocket","href":"/en/api-reference/introduction"},{"title":"Authentication","icon":"key","href":"/en/api-reference/authentication"},{"title":"Errors","icon":"triangle-exclamation","href":"/en/api-reference/errors"}]},{"group":"Guides","icon":"book","pages":[{"title":"Sync WhatsApp conversations","icon":"whatsapp","href":"/en/api-reference/guides/whatsapp-conversation-sync"},{"title":"Book calendar appointments","icon":"calendar-check","href":"/en/api-reference/guides/calendar-appointments"},{"title":"Batch ingest clients","icon":"file-import","href":"/en/api-reference/guides/batch-ingest-clients"}]},{"group":"Endpoints","icon":"plug","pages":[{"group":"Calls","pages":[{"title":"Schedule a call","openapi":"POST /api/v2/public/calls/schedule","href":"/en/api-reference/endpoints/calls/schedule-a-call"}]},{"group":"Clients","pages":[{"title":"Create a client","openapi":"POST /api/v2/public/clients","href":"/en/api-reference/endpoints/clients/create-a-client"}]},{"group":"Salesflow","pages":[{"title":"Ingest a client into a pipeline","openapi":"POST /api/v2/public/salesflow/ingest/{input_node_uuid}","href":"/en/api-reference/endpoints/salesflow/ingest-a-client-into-a-pipeline"},{"title":"Batch ingest clients into a pipeline","openapi":"POST /api/v2/public/salesflow/ingest/{input_node_uuid}/batch","href":"/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline"}]},{"group":"Salesflow pipelines","pages":[{"title":"List pipelines","openapi":"GET /api/v2/public/salesflow/pipelines","href":"/en/api-reference/endpoints/salesflow-pipelines/list-pipelines"},{"title":"List API input nodes of a pipeline","openapi":"GET /api/v2/public/salesflow/pipelines/{pipeline_id}/input-nodes","href":"/en/api-reference/endpoints/salesflow-pipelines/list-api-input-nodes-of-a-pipeline"},{"title":"List stages in a pipeline","openapi":"GET /api/v2/public/salesflow/pipelines/{pipeline_id}/stages","href":"/en/api-reference/endpoints/salesflow-pipelines/list-stages-in-a-pipeline"},{"title":"List clients in a pipeline","openapi":"GET /api/v2/public/salesflow/pipelines/{pipeline_id}/clients","href":"/en/api-reference/endpoints/salesflow-pipelines/list-clients-in-a-pipeline"},{"title":"Add clients to a pipeline","openapi":"POST /api/v2/public/salesflow/pipelines/{pipeline_id}/clients/add","href":"/en/api-reference/endpoints/salesflow-pipelines/add-clients-to-a-pipeline"},{"title":"Remove clients from a pipeline","openapi":"POST /api/v2/public/salesflow/pipelines/{pipeline_id}/clients/remove","href":"/en/api-reference/endpoints/salesflow-pipelines/remove-clients-from-a-pipeline"},{"title":"Move a client between stages","openapi":"PATCH /api/v2/public/salesflow/pipelines/{pipeline_id}/clients/{client_id}/move","href":"/en/api-reference/endpoints/salesflow-pipelines/move-a-client-between-stages"}]},{"group":"Calendar","pages":[{"title":"Get bookable capacity per service","openapi":"GET /api/v2/public/calendar/availability","href":"/en/api-reference/endpoints/calendar/get-bookable-capacity-per-service"},{"title":"List bookable services","openapi":"GET /api/v2/public/calendar/services","description":"Every service an appointment can be booked into, with the professionals\non it and the appointment types it offers.\n\nDiscovery for the booking endpoint: it returns exactly the ids and names\n*Book an appointment* accepts, so you never have to guess a spelling.","href":"/en/api-reference/endpoints/calendar/list-bookable-services"},{"title":"Book an appointment","openapi":"POST /api/v2/public/calendar/events","href":"/en/api-reference/endpoints/calendar/book-an-appointment"},{"title":"Add a client to the waiting list","openapi":"POST /api/v2/public/calendar/waitlist/entries","description":"Put a client on the waiting list for each named service.\n\nIdempotent: an open entry for the same (client, service) is updated with\nthe preferences sent and returned with ``created: false``; a new one is\n``created: true``. Always ``200`` on success. The client is identified by\n``client_id`` OR ``phone`` (E.164) — phone-less contacts must be sent by\n``client_id``.","href":"/en/api-reference/endpoints/calendar/add-a-client-to-the-waiting-list"},{"title":"Add many clients to a waiting list","openapi":"POST /api/v2/public/calendar/waitlist/entries/batch","href":"/en/api-reference/endpoints/calendar/add-many-clients-to-a-waiting-list"},{"title":"List waiting-list entries","openapi":"GET /api/v2/public/calendar/waitlist/entries","href":"/en/api-reference/endpoints/calendar/list-waiting-list-entries"},{"title":"Remove a client from the waiting list","openapi":"DELETE /api/v2/public/calendar/waitlist/entries/{entry_id}","href":"/en/api-reference/endpoints/calendar/remove-a-client-from-the-waiting-list"},{"title":"Get waiting-list totals","openapi":"GET /api/v2/public/calendar/waitlist/summary","href":"/en/api-reference/endpoints/calendar/get-waiting-list-totals"}]},{"group":"WhatsApp","pages":[{"title":"List WhatsApp conversations","openapi":"GET /api/v2/public/whatsapp/conversations","href":"/en/api-reference/endpoints/whatsapp/list-whatsapp-conversations"},{"title":"List messages in a WhatsApp conversation","openapi":"GET /api/v2/public/whatsapp/conversations/{session_id}/messages","href":"/en/api-reference/endpoints/whatsapp/list-messages-in-a-whatsapp-conversation"}]}]}]}]}]},"title":"Book an appointment - Dialtu","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}