Browse documentation

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.

GET/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

FieldTypeRequiredDetails
namestringNoCalendar name
workspacestringNoWorkspace name
timezonestringNoValid IANA timezone Max 100 characters.
durationintegerNoMinutes
descriptionstringNoPublic description
locationstringNoLocation
horizon_daysintegerNoDays
Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/calendar/book/people'
GET/api/calendar/book/{key}/slots

Read 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

ParameterTypeRequiredDetails
datedateYesValid calendar date, YYYY-MM-DD.
timezonestringYesValid IANA timezone Max 100 characters.

No request body is required.

Response

FieldTypeRequiredDetails
slotsobject[]Yes
unavailablebooleanYesSome connected host availability is stale
Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/calendar/book/people/slots?date=2026-10-02&timezone=%3CValid%20IANA%20timezone%3E'
POST/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

FieldTypeRequiredDetails
iduuidYes
guest_namestringYesName Max 120 characters.
guest_emailemailYes Max 200 characters.
starts_atdate-timeYesISO instant with explicit UTC offset.
timezonestringYesValid IANA timezone Max 100 characters.

Response

Use PublicAppointment.

Request shape (illustrative)
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>"
}'
GET/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.

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/calendar/manage/people'
GET/api/calendar/manage/{key}/slots

Read 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

ParameterTypeRequiredDetails
datedateYesValid calendar date, YYYY-MM-DD.
timezonestringYesValid IANA timezone Max 100 characters.

No request body is required.

Response

FieldTypeRequiredDetails
slotsobject[]Yes
unavailablebooleanYesSome connected host availability is stale
Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/calendar/manage/people/slots?date=2026-10-02&timezone=%3CValid%20IANA%20timezone%3E'
PUT/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

FieldTypeRequiredDetails
versionintegerYesPositive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1.
statebooked | cancelledYesGuest controls
starts_atdate-timeNoISO instant with explicit UTC offset.
timezonestringNoValid IANA timezone Max 100 characters.

Response

Use PublicAppointment.

Request shape (illustrative)
curl --request PUT \
  --url 'https://app.drykraft.com/api/calendar/manage/people' \
  --header 'Content-Type: application/json' \
  --data '{
  "version": 1,
  "state": "booked"
}'
GET/api/calendar/manage/{key}/ics

Download 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

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/calendar/manage/people/ics'