- Get bookable capacity per service —
GET /api/v2/public/calendar/availability - List bookable services —
GET /api/v2/public/calendar/services - Book an appointment —
POST /api/v2/public/calendar/events - Waiting lists — add, list, remove and summarise entries under
/api/v2/public/calendar/waitlist/
Every field in a booking is required. This API has no defaults: it never picks the
service, the professional or the appointment type for you, never derives the end time from a
duration, and never sends a notification you did not configure. If a value does not match
something in your account, the request is refused and the error lists what would have been
accepted.
Concepts
Four things make up an appointment, and you supply all four.
For each of the last three, send either the ID or the name. IDs are matched exactly.
Names are matched case- and accent-insensitively, so
consulta medica finds Consulta Médica.
If you send both, the ID is used.
Call List bookable services once to see the exact IDs and names your account accepts:
Times and the timezone field
Send the local wall-clock time your customer was given, plus the IANA zone it belongs to:
2026-09-15T09:00:00-05:00); the offset then wins over timezone, which is still required.
end_at is required and is never derived from the service’s default duration: how long the
appointment runs is your statement, not something the API infers.
Two things this API does differently
- It never refuses on availability. If the time falls outside working hours or clashes
with another appointment, it is booked anyway. Your system owns the schedule; Dialtu records
it. You will not see a
409on a normal booking. - It does not decide which messages go out. Whether the customer gets a confirmation request or reminders, and how far ahead, comes from the calendar’s own settings in Dialtu (Calendar → Settings → Notifications). An appointment booked here is messaged exactly like one booked in the dashboard. There are no fields for it, by design: those messages are billed to the Dialtu account, so the account owner chooses them.
A booking, end to end
data.id — it is the appointment’s ID in Dialtu. client_created tells you whether the
request created the customer (true) or matched an existing one (false).
Checking capacity first
Get bookable capacity per service answers “how many more appointments fit?” per service over a date range.capacity is summed per provider, not unioned by instant — three
providers free at 09:00 is three customers you can call, not one opening — and it is an
upper bound: booking one slot can eliminate more than one candidate once buffers interact.
Keep days aligned with the search window of the agent that will do the calling, so you do
not queue customers the agent will then tell there is nothing available.
Wiring it into n8n
1
HTTP Request node
Method
POST, URL https://api.dialtu.com/api/v2/public/calendar/events.2
Authentication
Generic Credential Type → Header Auth, name
Authorization, value Bearer pk_xxxxxxxx.3
Body
Body Content Type
JSON; paste the request body above and replace the values with
expressions from your earlier nodes. Look the service, professional and appointment-type
names up once with List bookable services and hard-code the IDs — nothing is optional.4
On error
Read
error_code from the response body. None of the 400s are worth retrying unchanged;
a 500 is. See Errors.