Book an appointment
const url = 'https://digize.com/api/v1/appointments';const options = { method: 'POST', headers: { 'Idempotency-Key': '5f1c2a8e-3b7d-4c55-9a0e-1f2d3c4b5a69', 'x-api-key': '<x-api-key>', 'Content-Type': 'application/json' }, body: '{"calendarId":"example","contactId":"example","customer":{"firstName":"example","lastName":"example","email":"example","phone":"example"},"staffId":"example","partySize":1,"startsAt":"2026-04-15T12:00:00Z","notes":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://digize.com/api/v1/appointments \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: 5f1c2a8e-3b7d-4c55-9a0e-1f2d3c4b5a69' \ --header 'x-api-key: <x-api-key>' \ --data '{ "calendarId": "example", "contactId": "example", "customer": { "firstName": "example", "lastName": "example", "email": "example", "phone": "example" }, "staffId": "example", "partySize": 1, "startsAt": "2026-04-15T12:00:00Z", "notes": "example" }'Books a customer on a calendar from the team’s side: an existing contact by contactId, or customer to find or add one. Left out, staffId goes to whoever on the team is free and least booked. Nobody is booked twice at once. A calendar with a deposit leaves it due and emails the customer a link to pay it.
Needs the crm:write permission.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Makes the request safe to send again: for 24 hours the same key and request answer the first response without repeating the change.
Example
5f1c2a8e-3b7d-4c55-9a0e-1f2d3c4b5a69Request Bodyrequired
Section titled “Request Bodyrequired”object
Example generated
{ "calendarId": "example", "contactId": "example", "customer": { "firstName": "example", "lastName": "example", "email": "example", "phone": "example" }, "staffId": "example", "partySize": 1, "startsAt": "2026-04-15T12:00:00Z", "notes": "example"}Responses
Section titled “Responses”Done
object
The calendar’s name when it was booked.
object
The contact’s id.
object
The team member’s user id.
The price for the whole party.
The deposit for the whole party.
The Stripe PaymentIntent that took the deposit.
Example
{ "status": "confirmed", "bookedVia": "site"}What was sent isn’t valid (invalid).
object
object
object
Example
{ "error": { "code": "invalid" }}No key, or one that’s unknown, off or expired.
object
object
object
Example
{ "error": { "code": "invalid" }}The key doesn’t have the permission this needs.
object
object
object
Example
{ "error": { "code": "invalid" }}Nothing has that id (not_found).
object
object
object
Example
{ "error": { "code": "invalid" }}A request with the same Idempotency-Key is still running (conflict).
object
object
object
Example
{ "error": { "code": "invalid" }}The Idempotency-Key was used with a different request.
object
object
object
Example
{ "error": { "code": "invalid" }}Over the rate limit; see retry-after.
object
object
object
Example
{ "error": { "code": "invalid" }}