Read the settings
const url = 'https://api.keptslot.com/v1/workspace';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.keptslot.com/v1/workspace \ --header 'Authorization: Bearer <token>'This endpoint gives the settings of the workspace the key belongs to.
Authorizations
Section titled “ Authorizations ”Responses
Section titled “ Responses ”The workspace settings.
object
Read only. It is the workspace address on the booking page.
An IANA zone name. Every time the API gives back uses this zone.
True when a new booking waits on a 6-digit code. Read the status on the create response to decide what happens next. Do not decide it from this field.
“Custom booking frontend” in the dashboard. When true, bookings made with this workspace’s publishable keys need no Turnstile token, which a booking page on your own site cannot produce. The rate limits and the daily booking limit still apply.
“Customer messages” in the dashboard. True by default. When false,
Keptslot sends this workspace’s customers no confirmation,
verification code, payment pending, reminder, reschedule,
cancellation or refund message, by email or by SMS. The webhook
events then tell you which of those messages to send yourself.
Staff messages keep their own settings, staff_alerts and
staff_reminders_enabled.
True while the business has paused online bookings (“Pause online
bookings” in the dashboard). False by default. Set it with
PATCH /v1/workspace; the public workspace response reports it
too.
While it is true, creating a booking, reading availability and
moving a booking through /v1 answer 409 with error.type
bookings_paused, for both key types. Cancelling, verifying and
confirming still work.
Where the manage links in our emails and calendar files send
customers, with {token} where the booking’s access token goes.
For example, https://example.com/manage/{token}. Null means the
links go to the Keptslot booking page.
It must be an https address of at most 500 characters, with
{token} in it exactly once and not in the domain. Send "" to
clear it.
The master text-message switch. False means this workspace sends no SMS at all, whatever the five per-type switches say.
Whether each message type may go out by SMS as well as email. Each
is subordinate to sms_enabled – both must be true. Confirmation
and staff reminder default false: the confirmation email arrives
seconds after the booking, and the staff reminder is a second
charged message per booking to a person who is not the customer.
Who gets the alert when a booking changes.
How long before the start time the staff reminder is sent.
How long before the start time the customer reminder is sent.
The step between the slots that availability offers.
Plain text shown to customers. Render it as text. Do not render it as markup.
Selects the customer-facing words. It changes copy only. It never changes booking mechanics.
The business’s street address. Published by presence on both customer-facing workspace payloads (public bootstrap and manage), the same as contact_email and contact_phone.
A short line about the business, under its name on the booking
page. At most 200 characters. Send "" to clear it.
The refund terms, shown where a customer pays. At most 2000
characters. Separate from booking_policy: one governs whether an
appointment can be moved, the other governs money.
The business’s own terms, shown alongside ours. Must be http or
https – anything else is refused. A bare domain is accepted and
stored as https://.
A handle such as @riverwood is accepted and stored as the full
profile URL.
Shown on the confirmation screen after a booking succeeds, and in the confirmation, reschedule and reminder emails. What to bring, where to park, the door code. At most 500 characters.
At most 70 characters.
At most 160 characters.
Whether customers pick who they see. True by default, so a workspace that never touches it keeps today’s behaviour.
The booking page’s look. A change merges into what is stored:
send only the keys to change. preset is one of warm,
clinical, bold or soft; accent is a colour such as
#0E7490, or null to clear it; cover_position is top,
center or bottom.
object
Example
{ "theme": { "preset": "warm", "cover_position": "top" }}The key is missing, malformed or revoked.
object
object
A stable machine-readable code. Match on this.
A sentence for a person. Do not match on this.
The field that caused the refusal, if one field did.
The plan limit that refused the request. It is present only on a 402, and only for a secret key or an account key. See the errors guide.
The current count for that dimension. It is present only on a 402, and only for an account key. It is absent when the refusal has no count to report. Absent and zero are different answers.
The cap for that dimension. It is present only on a 402, and only for an account key. A cap of zero is a real value.
Example generated
{ "error": { "type": "example", "message": "example", "param": "example", "dimension": "example", "used": 1, "limit": 1 }}This is a server route and you sent a publishable key. Send a secret
key from your server. The type field is secret_key_required.
object
object
A stable machine-readable code. Match on this.
A sentence for a person. Do not match on this.
The field that caused the refusal, if one field did.
The plan limit that refused the request. It is present only on a 402, and only for a secret key or an account key. See the errors guide.
The current count for that dimension. It is present only on a 402, and only for an account key. It is absent when the refusal has no count to report. Absent and zero are different answers.
The cap for that dimension. It is present only on a 402, and only for an account key. A cap of zero is a real value.
Example generated
{ "error": { "type": "example", "message": "example", "param": "example", "dimension": "example", "used": 1, "limit": 1 }}A fault on our side. Do not retry the same request in a loop. The
type field is internal_error.
object
object
A stable machine-readable code. Match on this.
A sentence for a person. Do not match on this.
The field that caused the refusal, if one field did.
The plan limit that refused the request. It is present only on a 402, and only for a secret key or an account key. See the errors guide.
The current count for that dimension. It is present only on a 402, and only for an account key. It is absent when the refusal has no count to report. Absent and zero are different answers.
The cap for that dimension. It is present only on a 402, and only for an account key. A cap of zero is a real value.
Example generated
{ "error": { "type": "example", "message": "example", "param": "example", "dimension": "example", "used": 1, "limit": 1 }}