Public booking
Current release · Updated October 2, 2026
DryKraft Public booking reference: methods, permissions, request fields, response shapes, examples and current limits. Read authentication and error handling first.
/api/calendar/book/{key}Read public booking page
Access: Public · Success: 200
Opaque UUID resolves only explicitly enabled/published calendars with active billing. Returns workspace/name/timezone/duration/description/location/horizon; no hosts, guest lists or provider metadata.
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
name | string | No | Calendar name |
workspace | string | No | Workspace name |
timezone | string | No | Valid IANA timezone Max 100 characters. |
duration | integer | No | Minutes |
description | string | No | Public description |
location | string | No | Location |
horizon_days | integer | No | Days |
curl --request GET \
--url 'https://app.drykraft.com/api/calendar/book/people'/api/calendar/book/{key}/slotsRead public available times
Access: Public · Success: 200
Same scheduling checks as private bookings. No guest/host data. Public requests limited120/minute/IP; mutations15/15minutes/IP.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
date | date | Yes | Valid calendar date, YYYY-MM-DD. |
timezone | string | Yes | Valid IANA timezone Max 100 characters. |
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
slots | object[] | Yes | |
unavailable | boolean | Yes | Some connected host availability is stale |
curl --request GET \
--url 'https://app.drykraft.com/api/calendar/book/people/slots?date=2026-10-02&timezone=%3CValid%20IANA%20timezone%3E'/api/calendar/book/{key}Create public appointment
Access: Public · Success: 201
Guest provides identity and chosen slot. Calendar supplies title; no notes, host choice, CRM relation or outside-hours override. Stable UUID makes an identical retry safe. Save the returned private management key; no confirmation email is automatically sent.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
id | uuid | Yes | |
guest_name | string | Yes | Name Max 120 characters. |
guest_email | Yes | Max 200 characters. | |
starts_at | date-time | Yes | ISO instant with explicit UTC offset. |
timezone | string | Yes | Valid IANA timezone Max 100 characters. |
Response
Use PublicAppointment.
curl --request POST \
--url 'https://app.drykraft.com/api/calendar/book/people' \
--header 'Content-Type: application/json' \
--data '{
"id": "00000000-0000-4000-8000-000000000001",
"guest_name": "<Name>",
"guest_email": "person@example.com",
"starts_at": "<ISO instant with explicit UTC offset>",
"timezone": "<Valid IANA timezone>"
}'/api/calendar/manage/{key}Read private guest appointment
Access: Public · Success: 200
Opaque management UUID for source=public only. Bearer link exposes that guest’s appointment/email; keep private. Available after public booking is disabled and after trial expiry.
No request body is required.
Response
Use PublicAppointment.
curl --request GET \
--url 'https://app.drykraft.com/api/calendar/manage/people'/api/calendar/manage/{key}/slotsRead reschedule times
Access: Public · Success: 200
Current booked appointment and enabled public calendar with active billing. Excludes that appointment’s own conflict window.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
date | date | Yes | Valid calendar date, YYYY-MM-DD. |
timezone | string | Yes | Valid IANA timezone Max 100 characters. |
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
slots | object[] | Yes | |
unavailable | boolean | Yes | Some connected host availability is stale |
curl --request GET \
--url 'https://app.drykraft.com/api/calendar/manage/people/slots?date=2026-10-02&timezone=%3CValid%20IANA%20timezone%3E'/api/calendar/manage/{key}Reschedule or cancel guest appointment
Access: Public · Success: 200
Current version, booked/cancelled only. No attendance, internal notes or outside-hours overrides. Closed appointments cannot reopen. Cancellation remains available after billing expiry; rescheduling requires current availability.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
state | booked | cancelled | Yes | Guest controls |
starts_at | date-time | No | ISO instant with explicit UTC offset. |
timezone | string | No | Valid IANA timezone Max 100 characters. |
Response
Use PublicAppointment.
curl --request PUT \
--url 'https://app.drykraft.com/api/calendar/manage/people' \
--header 'Content-Type: application/json' \
--data '{
"version": 1,
"state": "booked"
}'/api/calendar/manage/{key}/icsDownload guest calendar event
Access: Public · Success: 200
Private management link exports this appointment only. Event includes title/location/time/lifecycle without guest email or internal notes.
No request body is required.
Response
string. Downloadable UTC .ics event
curl --request GET \
--url 'https://app.drykraft.com/api/calendar/manage/people/ics'