API reference
Booking Pages
Booking Pages endpoints.
| Method | Path | Summary |
|---|---|---|
GET | /v1/account/booking-pages | Every booking page the member can see, personal and group, with what stops each taking bookings |
GET | /v1/account/groups/{groupId}/booking-pages | A community's group booking pages, its link name, who can be on a page, and its services |
POST | /v1/account/groups/{groupId}/booking-pages | Make a group booking page for the community. Without members, it gets the community's staff who take meetings |
PATCH | /v1/account/groups/{groupId}/booking-pages/{pageId} | Change a group page's settings, link or members. An old link keeps working for 90 days |
DELETE | /v1/account/groups/{groupId}/booking-pages/{pageId} | Remove a group page. One with meetings is archived, so they keep their history |
POST | /v1/account/groups/{groupId}/booking-pages/{pageId}/pause | Stop a group page taking bookings; meetings already booked stay |
POST | /v1/account/groups/{groupId}/booking-pages/{pageId}/resume | Take bookings on a group page again |
PUT | /v1/account/groups/{groupId}/booking-slug | The community's booking link name, shared with rep link names. Old page links keep working for 90 days |
Every booking page the member can see, personal and group, with what stops each taking bookings#
GET /v1/account/booking-pages
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | No | ID (grp_…) |
kind | enum | No | One of: "personal", "group". |
status | enum | No | One of: "active", "paused", "archived". |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
pages | array<BookingPageOverviewRow> | Yes | — |
pages[].bookingsThisMonth | integer | Yes | — |
pages[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
pages[].groupName | string | Yes | — |
pages[].id | string (bpg_… ID) | Yes | ID (bpg_…) |
pages[].kind | enum | Yes | One of: "personal", "group". |
pages[].memberCount | integer | Yes | — |
pages[].ownerName | string | null | Yes | — |
pages[].ownerUserId | string (usr_… ID) | null | Yes | — |
pages[].pausedBy | enum | null | Yes | One of: "owner", "admin". |
pages[].slug | string | Yes | — |
pages[].status | enum | Yes | One of: "active", "paused", "archived". |
pages[].title | string | Yes | — |
pages[].url | string | null | Yes | — |
pages[].warnings | array<string> | Yes | — |
Errors: 400, 401, 402, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X GET "$ANSWERSTACK_API_URL/v1/account/booking-pages" \
-H "Authorization: Bearer $ACCESS_TOKEN"A community's group booking pages, its link name, who can be on a page, and its services#
GET /v1/account/groups/{groupId}/booking-pages
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | Yes | ID (grp_…) |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
accountSlug | string | Yes | — |
bookingAppUrl | string | Yes | — |
bookingSlug | string | null | Yes | — |
groupId | string (grp_… ID) | Yes | ID (grp_…) |
pages | array<GroupBookingPage> | Yes | — |
pages[].bookingsThisMonth | integer | Yes | — |
pages[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
pages[].id | string (bpg_… ID) | Yes | ID (bpg_…) |
pages[].members | array<object> | Yes | — |
pages[].members[].bookable | boolean | Yes | — |
pages[].members[].calendar | enum | Yes | One of: "connected", "crm", "none". |
pages[].members[].email | string | null | Yes | — |
pages[].members[].id | string (bpm_… ID) | Yes | ID (bpm_…) |
pages[].members[].name | string | Yes | — |
pages[].members[].onStaff | boolean | Yes | — |
pages[].members[].photoUrl | string | null | Yes | — |
pages[].members[].priority | enum | Yes | One of: "high", "medium", "low". |
pages[].members[].scheduleId | string (avs_… ID) | null | Yes | — |
pages[].members[].services | array<string> | null | Yes | — |
pages[].members[].title | string | null | Yes | — |
pages[].members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
pages[].members[].weight | integer | Yes | — |
pages[].pausedBy | enum | null | Yes | One of: "owner", "admin". |
pages[].settings | BookingPageSettings | Yes | — |
pages[].settings.assignment | object | object | Yes | Default: \{"mode":"round_robin","strategy":"equal"\}. |
pages[].settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
pages[].settings.assignment.strategy | enum | Yes | (variant 1) One of: "equal", "most_available". Default: "equal". |
pages[].settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
pages[].settings.brandId | string (brd_… ID) | null | Yes | — |
pages[].settings.bufferAfterMinutes | integer | Yes | Between 0 and 120. Default: 0. |
pages[].settings.bufferBeforeMinutes | integer | Yes | Between 0 and 120. Default: 0. |
pages[].settings.color | string | null | Yes | Pattern: ^#[0-9a-f]\{6\}$. |
pages[].settings.coverPhoto | string (uri) | string (uri) | null | Yes | — |
pages[].settings.dailyLimit | integer | null | Yes | Between 1 and 50. |
pages[].settings.description | string | Yes | Up to 1000 characters. Default: "". |
pages[].settings.durations | array<constant | constant | constant | constant> | Yes | Up to 4 items. Default: [30]. |
pages[].settings.increment | constant | constant | constant | constant | Yes | Default: 30. |
pages[].settings.location | object | object | object | object | object | Yes | Default: \{"kind":"in_person"\}. |
pages[].settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
pages[].settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
pages[].settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
pages[].settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
pages[].settings.location.kind | constant | Yes | (variant 4) Always "video". |
pages[].settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
pages[].settings.location.kind | constant | Yes | (variant 5) Always "custom". |
pages[].settings.location.text | string | Yes | (variant 5) 1–200 characters. |
pages[].settings.meetingType | string | null | Yes | Up to 64 characters. |
pages[].settings.minNoticeMinutes | integer | Yes | Between 0 and 43200. Default: 240. |
pages[].settings.pageHours | array<object> | null | Yes | Up to 50 items. |
pages[].settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
pages[].settings.pageHours[].end | string | constant | Yes | — |
pages[].settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
pages[].settings.preferLeadRep | boolean | Yes | Default: true. |
pages[].settings.questions | array<object> | Yes | Up to 10 items. Default: []. |
pages[].settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
pages[].settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
pages[].settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
pages[].settings.questions[].label | string | Yes | 1–200 characters. |
pages[].settings.questions[].options | array<string> | No | Up to 20 items. |
pages[].settings.questions[].required | boolean | Yes | Default: false. |
pages[].settings.redirectUrl | string (uri) | null | Yes | Up to 2000 characters. |
pages[].settings.reminderDayBefore | boolean | Yes | Default: true. |
pages[].settings.reminderTwoHours | boolean | Yes | Default: true. |
pages[].settings.requireEmail | boolean | Yes | Default: true. |
pages[].settings.requirePhone | boolean | Yes | Default: true. |
pages[].settings.scheduleId | string | null | Yes | Up to 40 characters. |
pages[].settings.service | object | object | object | Yes | Default: \{"kind":"none"\}. |
pages[].settings.service.kind | constant | Yes | (variant 1) Always "none". |
pages[].settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
pages[].settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
pages[].settings.service.kind | constant | Yes | (variant 3) Always "ask". |
pages[].settings.serviceCoverPhoto | boolean | Yes | Default: false. |
pages[].settings.title | string | Yes | 1–80 characters. |
pages[].settings.window | object | object | Yes | Default: \{"days":30,"kind":"rolling"\}. |
pages[].settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
pages[].settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
pages[].settings.window.from | string (date) | Yes | (variant 2) |
pages[].settings.window.kind | constant | Yes | (variant 2) Always "range". |
pages[].settings.window.to | string (date) | Yes | (variant 2) |
pages[].slug | string | Yes | — |
pages[].status | enum | Yes | One of: "active", "paused", "archived". |
pages[].updatedAt | string (date-time) | Yes | — |
pages[].url | string | null | Yes | — |
pages[].warnings | array<string> | Yes | — |
people | array<object> | Yes | — |
people[].calendar | enum | Yes | One of: "connected", "crm", "none". |
people[].canBeBookedHere | boolean | Yes | — |
people[].email | string | Yes | — |
people[].isGroupRep | boolean | Yes | — |
people[].name | string | Yes | — |
people[].onStaff | boolean | Yes | — |
people[].photoUrl | string | null | Yes | — |
people[].role | string | Yes | — |
people[].schedules | array<object> | Yes | — |
people[].schedules[].id | string (avs_… ID) | Yes | ID (avs_…) |
people[].schedules[].isDefault | boolean | Yes | — |
people[].schedules[].name | string | Yes | — |
people[].title | string | null | Yes | — |
people[].userId | string (usr_… ID) | Yes | ID (usr_…) |
repsBySpecialty | boolean | Yes | — |
serviceWarnings | array<string> | Yes | — |
services | array<object> | Yes | — |
services[].description | string | Yes | — |
services[].id | string | Yes | — |
services[].name | string | Yes | — |
Errors: 400, 401, 402, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X GET "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/booking-pages" \
-H "Authorization: Bearer $ACCESS_TOKEN"Make a group booking page for the community. Without members, it gets the community's staff who take meetings#
POST /v1/account/groups/{groupId}/booking-pages
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | Yes | ID (grp_…) |
Request body
application/json, required.
| Field | Type | Required | Description |
|---|---|---|---|
members | array<object> | No | Up to 100 items. |
members[].priority | enum | No | One of: "high", "medium", "low". Default: "medium". |
members[].scheduleId | string (avs_… ID) | null | No | — |
members[].services | array<string (srv_… ID)> | null | No | Up to 50 items. |
members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
members[].weight | integer | No | Between 1 and 10. Default: 1. |
settings | BookingPageSettingsInput | Yes | — |
settings.assignment | object | object | No | Default: \{"mode":"round_robin","strategy":"equal"\}. |
settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
settings.assignment.strategy | enum | No | (variant 1) One of: "equal", "most_available". Default: "equal". |
settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
settings.brandId | string (brd_… ID) | null | No | — |
settings.bufferAfterMinutes | integer | No | Between 0 and 120. Default: 0. |
settings.bufferBeforeMinutes | integer | No | Between 0 and 120. Default: 0. |
settings.color | string | null | No | Pattern: ^#[0-9a-f]\{6\}$. |
settings.coverPhoto | string (uri) | string (uri) | null | No | — |
settings.dailyLimit | integer | null | No | Between 1 and 50. |
settings.description | string | No | Up to 1000 characters. Default: "". |
settings.durations | array<constant | constant | constant | constant> | No | Up to 4 items. Default: [30]. |
settings.increment | constant | constant | constant | constant | No | Default: 30. |
settings.location | object | object | object | object | object | No | Default: \{"kind":"in_person"\}. |
settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
settings.location.kind | constant | Yes | (variant 4) Always "video". |
settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
settings.location.kind | constant | Yes | (variant 5) Always "custom". |
settings.location.text | string | Yes | (variant 5) 1–200 characters. |
settings.meetingType | string | null | No | Up to 64 characters. |
settings.minNoticeMinutes | integer | No | Between 0 and 43200. Default: 240. |
settings.pageHours | array<object> | null | No | Up to 50 items. |
settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
settings.pageHours[].end | string | constant | Yes | — |
settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
settings.preferLeadRep | boolean | No | Default: true. |
settings.questions | array<object> | No | Up to 10 items. Default: []. |
settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
settings.questions[].label | string | Yes | 1–200 characters. |
settings.questions[].options | array<string> | No | Up to 20 items. |
settings.questions[].required | boolean | No | Default: false. |
settings.redirectUrl | string (uri) | null | No | Up to 2000 characters. |
settings.reminderDayBefore | boolean | No | Default: true. |
settings.reminderTwoHours | boolean | No | Default: true. |
settings.requireEmail | boolean | No | Default: true. |
settings.requirePhone | boolean | No | Default: true. |
settings.scheduleId | string | null | No | Up to 40 characters. |
settings.service | object | object | object | No | Default: \{"kind":"none"\}. |
settings.service.kind | constant | Yes | (variant 1) Always "none". |
settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
settings.service.kind | constant | Yes | (variant 3) Always "ask". |
settings.serviceCoverPhoto | boolean | No | Default: false. |
settings.title | string | Yes | 1–80 characters. |
settings.window | object | object | No | Default: \{"days":30,"kind":"rolling"\}. |
settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
settings.window.from | string (date) | Yes | (variant 2) |
settings.window.kind | constant | Yes | (variant 2) Always "range". |
settings.window.to | string (date) | Yes | (variant 2) |
slug | string | No | 2–60 characters. Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$. |
Response 201
| Field | Type | Required | Description |
|---|---|---|---|
page | GroupBookingPage | Yes | — |
page.bookingsThisMonth | integer | Yes | — |
page.groupId | string (grp_… ID) | Yes | ID (grp_…) |
page.id | string (bpg_… ID) | Yes | ID (bpg_…) |
page.members | array<object> | Yes | — |
page.members[].bookable | boolean | Yes | — |
page.members[].calendar | enum | Yes | One of: "connected", "crm", "none". |
page.members[].email | string | null | Yes | — |
page.members[].id | string (bpm_… ID) | Yes | ID (bpm_…) |
page.members[].name | string | Yes | — |
page.members[].onStaff | boolean | Yes | — |
page.members[].photoUrl | string | null | Yes | — |
page.members[].priority | enum | Yes | One of: "high", "medium", "low". |
page.members[].scheduleId | string (avs_… ID) | null | Yes | — |
page.members[].services | array<string> | null | Yes | — |
page.members[].title | string | null | Yes | — |
page.members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
page.members[].weight | integer | Yes | — |
page.pausedBy | enum | null | Yes | One of: "owner", "admin". |
page.settings | BookingPageSettings | Yes | — |
page.settings.assignment | object | object | Yes | Default: \{"mode":"round_robin","strategy":"equal"\}. |
page.settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
page.settings.assignment.strategy | enum | Yes | (variant 1) One of: "equal", "most_available". Default: "equal". |
page.settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
page.settings.brandId | string (brd_… ID) | null | Yes | — |
page.settings.bufferAfterMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.bufferBeforeMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.color | string | null | Yes | Pattern: ^#[0-9a-f]\{6\}$. |
page.settings.coverPhoto | string (uri) | string (uri) | null | Yes | — |
page.settings.dailyLimit | integer | null | Yes | Between 1 and 50. |
page.settings.description | string | Yes | Up to 1000 characters. Default: "". |
page.settings.durations | array<constant | constant | constant | constant> | Yes | Up to 4 items. Default: [30]. |
page.settings.increment | constant | constant | constant | constant | Yes | Default: 30. |
page.settings.location | object | object | object | object | object | Yes | Default: \{"kind":"in_person"\}. |
page.settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
page.settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
page.settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
page.settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
page.settings.location.kind | constant | Yes | (variant 4) Always "video". |
page.settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
page.settings.location.kind | constant | Yes | (variant 5) Always "custom". |
page.settings.location.text | string | Yes | (variant 5) 1–200 characters. |
page.settings.meetingType | string | null | Yes | Up to 64 characters. |
page.settings.minNoticeMinutes | integer | Yes | Between 0 and 43200. Default: 240. |
page.settings.pageHours | array<object> | null | Yes | Up to 50 items. |
page.settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
page.settings.pageHours[].end | string | constant | Yes | — |
page.settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
page.settings.preferLeadRep | boolean | Yes | Default: true. |
page.settings.questions | array<object> | Yes | Up to 10 items. Default: []. |
page.settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
page.settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
page.settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
page.settings.questions[].label | string | Yes | 1–200 characters. |
page.settings.questions[].options | array<string> | No | Up to 20 items. |
page.settings.questions[].required | boolean | Yes | Default: false. |
page.settings.redirectUrl | string (uri) | null | Yes | Up to 2000 characters. |
page.settings.reminderDayBefore | boolean | Yes | Default: true. |
page.settings.reminderTwoHours | boolean | Yes | Default: true. |
page.settings.requireEmail | boolean | Yes | Default: true. |
page.settings.requirePhone | boolean | Yes | Default: true. |
page.settings.scheduleId | string | null | Yes | Up to 40 characters. |
page.settings.service | object | object | object | Yes | Default: \{"kind":"none"\}. |
page.settings.service.kind | constant | Yes | (variant 1) Always "none". |
page.settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
page.settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
page.settings.service.kind | constant | Yes | (variant 3) Always "ask". |
page.settings.serviceCoverPhoto | boolean | Yes | Default: false. |
page.settings.title | string | Yes | 1–80 characters. |
page.settings.window | object | object | Yes | Default: \{"days":30,"kind":"rolling"\}. |
page.settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
page.settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
page.settings.window.from | string (date) | Yes | (variant 2) |
page.settings.window.kind | constant | Yes | (variant 2) Always "range". |
page.settings.window.to | string (date) | Yes | (variant 2) |
page.slug | string | Yes | — |
page.status | enum | Yes | One of: "active", "paused", "archived". |
page.updatedAt | string (date-time) | Yes | — |
page.url | string | null | Yes | — |
page.warnings | array<string> | Yes | — |
Errors: 400, 401, 402, 403, 404, 409, 422, 429, 500, with an ErrorBody body.
Example
curl -X POST "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/booking-pages" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"settings": {
"title": "string"
}
}'Change a group page's settings, link or members. An old link keeps working for 90 days#
PATCH /v1/account/groups/{groupId}/booking-pages/{pageId}
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | Yes | ID (grp_…) |
pageId | string (bpg_… ID) | Yes | ID (bpg_…) |
Request body
application/json, required.
| Field | Type | Required | Description |
|---|---|---|---|
members | array<object> | No | Up to 100 items. |
members[].priority | enum | No | One of: "high", "medium", "low". Default: "medium". |
members[].scheduleId | string (avs_… ID) | null | No | — |
members[].services | array<string (srv_… ID)> | null | No | Up to 50 items. |
members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
members[].weight | integer | No | Between 1 and 10. Default: 1. |
settings | BookingPageSettingsInput | No | — |
settings.assignment | object | object | No | Default: \{"mode":"round_robin","strategy":"equal"\}. |
settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
settings.assignment.strategy | enum | No | (variant 1) One of: "equal", "most_available". Default: "equal". |
settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
settings.brandId | string (brd_… ID) | null | No | — |
settings.bufferAfterMinutes | integer | No | Between 0 and 120. Default: 0. |
settings.bufferBeforeMinutes | integer | No | Between 0 and 120. Default: 0. |
settings.color | string | null | No | Pattern: ^#[0-9a-f]\{6\}$. |
settings.coverPhoto | string (uri) | string (uri) | null | No | — |
settings.dailyLimit | integer | null | No | Between 1 and 50. |
settings.description | string | No | Up to 1000 characters. Default: "". |
settings.durations | array<constant | constant | constant | constant> | No | Up to 4 items. Default: [30]. |
settings.increment | constant | constant | constant | constant | No | Default: 30. |
settings.location | object | object | object | object | object | No | Default: \{"kind":"in_person"\}. |
settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
settings.location.kind | constant | Yes | (variant 4) Always "video". |
settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
settings.location.kind | constant | Yes | (variant 5) Always "custom". |
settings.location.text | string | Yes | (variant 5) 1–200 characters. |
settings.meetingType | string | null | No | Up to 64 characters. |
settings.minNoticeMinutes | integer | No | Between 0 and 43200. Default: 240. |
settings.pageHours | array<object> | null | No | Up to 50 items. |
settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
settings.pageHours[].end | string | constant | Yes | — |
settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
settings.preferLeadRep | boolean | No | Default: true. |
settings.questions | array<object> | No | Up to 10 items. Default: []. |
settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
settings.questions[].label | string | Yes | 1–200 characters. |
settings.questions[].options | array<string> | No | Up to 20 items. |
settings.questions[].required | boolean | No | Default: false. |
settings.redirectUrl | string (uri) | null | No | Up to 2000 characters. |
settings.reminderDayBefore | boolean | No | Default: true. |
settings.reminderTwoHours | boolean | No | Default: true. |
settings.requireEmail | boolean | No | Default: true. |
settings.requirePhone | boolean | No | Default: true. |
settings.scheduleId | string | null | No | Up to 40 characters. |
settings.service | object | object | object | No | Default: \{"kind":"none"\}. |
settings.service.kind | constant | Yes | (variant 1) Always "none". |
settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
settings.service.kind | constant | Yes | (variant 3) Always "ask". |
settings.serviceCoverPhoto | boolean | No | Default: false. |
settings.title | string | Yes | 1–80 characters. |
settings.window | object | object | No | Default: \{"days":30,"kind":"rolling"\}. |
settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
settings.window.from | string (date) | Yes | (variant 2) |
settings.window.kind | constant | Yes | (variant 2) Always "range". |
settings.window.to | string (date) | Yes | (variant 2) |
slug | string | No | 2–60 characters. Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$. |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
page | GroupBookingPage | Yes | — |
page.bookingsThisMonth | integer | Yes | — |
page.groupId | string (grp_… ID) | Yes | ID (grp_…) |
page.id | string (bpg_… ID) | Yes | ID (bpg_…) |
page.members | array<object> | Yes | — |
page.members[].bookable | boolean | Yes | — |
page.members[].calendar | enum | Yes | One of: "connected", "crm", "none". |
page.members[].email | string | null | Yes | — |
page.members[].id | string (bpm_… ID) | Yes | ID (bpm_…) |
page.members[].name | string | Yes | — |
page.members[].onStaff | boolean | Yes | — |
page.members[].photoUrl | string | null | Yes | — |
page.members[].priority | enum | Yes | One of: "high", "medium", "low". |
page.members[].scheduleId | string (avs_… ID) | null | Yes | — |
page.members[].services | array<string> | null | Yes | — |
page.members[].title | string | null | Yes | — |
page.members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
page.members[].weight | integer | Yes | — |
page.pausedBy | enum | null | Yes | One of: "owner", "admin". |
page.settings | BookingPageSettings | Yes | — |
page.settings.assignment | object | object | Yes | Default: \{"mode":"round_robin","strategy":"equal"\}. |
page.settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
page.settings.assignment.strategy | enum | Yes | (variant 1) One of: "equal", "most_available". Default: "equal". |
page.settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
page.settings.brandId | string (brd_… ID) | null | Yes | — |
page.settings.bufferAfterMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.bufferBeforeMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.color | string | null | Yes | Pattern: ^#[0-9a-f]\{6\}$. |
page.settings.coverPhoto | string (uri) | string (uri) | null | Yes | — |
page.settings.dailyLimit | integer | null | Yes | Between 1 and 50. |
page.settings.description | string | Yes | Up to 1000 characters. Default: "". |
page.settings.durations | array<constant | constant | constant | constant> | Yes | Up to 4 items. Default: [30]. |
page.settings.increment | constant | constant | constant | constant | Yes | Default: 30. |
page.settings.location | object | object | object | object | object | Yes | Default: \{"kind":"in_person"\}. |
page.settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
page.settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
page.settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
page.settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
page.settings.location.kind | constant | Yes | (variant 4) Always "video". |
page.settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
page.settings.location.kind | constant | Yes | (variant 5) Always "custom". |
page.settings.location.text | string | Yes | (variant 5) 1–200 characters. |
page.settings.meetingType | string | null | Yes | Up to 64 characters. |
page.settings.minNoticeMinutes | integer | Yes | Between 0 and 43200. Default: 240. |
page.settings.pageHours | array<object> | null | Yes | Up to 50 items. |
page.settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
page.settings.pageHours[].end | string | constant | Yes | — |
page.settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
page.settings.preferLeadRep | boolean | Yes | Default: true. |
page.settings.questions | array<object> | Yes | Up to 10 items. Default: []. |
page.settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
page.settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
page.settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
page.settings.questions[].label | string | Yes | 1–200 characters. |
page.settings.questions[].options | array<string> | No | Up to 20 items. |
page.settings.questions[].required | boolean | Yes | Default: false. |
page.settings.redirectUrl | string (uri) | null | Yes | Up to 2000 characters. |
page.settings.reminderDayBefore | boolean | Yes | Default: true. |
page.settings.reminderTwoHours | boolean | Yes | Default: true. |
page.settings.requireEmail | boolean | Yes | Default: true. |
page.settings.requirePhone | boolean | Yes | Default: true. |
page.settings.scheduleId | string | null | Yes | Up to 40 characters. |
page.settings.service | object | object | object | Yes | Default: \{"kind":"none"\}. |
page.settings.service.kind | constant | Yes | (variant 1) Always "none". |
page.settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
page.settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
page.settings.service.kind | constant | Yes | (variant 3) Always "ask". |
page.settings.serviceCoverPhoto | boolean | Yes | Default: false. |
page.settings.title | string | Yes | 1–80 characters. |
page.settings.window | object | object | Yes | Default: \{"days":30,"kind":"rolling"\}. |
page.settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
page.settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
page.settings.window.from | string (date) | Yes | (variant 2) |
page.settings.window.kind | constant | Yes | (variant 2) Always "range". |
page.settings.window.to | string (date) | Yes | (variant 2) |
page.slug | string | Yes | — |
page.status | enum | Yes | One of: "active", "paused", "archived". |
page.updatedAt | string (date-time) | Yes | — |
page.url | string | null | Yes | — |
page.warnings | array<string> | Yes | — |
Errors: 400, 401, 402, 403, 404, 409, 422, 429, 500, with an ErrorBody body.
Example
curl -X PATCH "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/booking-pages/{pageId}" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"members": [
{
"userId": "usr_2ZPh7XbT0v9Ao4iJ3qK1mN8sRgE"
}
],
"settings": {
"title": "string"
},
"slug": "string"
}'Remove a group page. One with meetings is archived, so they keep their history#
DELETE /v1/account/groups/{groupId}/booking-pages/{pageId}
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | Yes | ID (grp_…) |
pageId | string (bpg_… ID) | Yes | ID (bpg_…) |
Response 204
No content.
Errors: 400, 401, 402, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X DELETE "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/booking-pages/{pageId}" \
-H "Authorization: Bearer $ACCESS_TOKEN"Stop a group page taking bookings; meetings already booked stay#
POST /v1/account/groups/{groupId}/booking-pages/{pageId}/pause
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | Yes | ID (grp_…) |
pageId | string (bpg_… ID) | Yes | ID (bpg_…) |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
page | GroupBookingPage | Yes | — |
page.bookingsThisMonth | integer | Yes | — |
page.groupId | string (grp_… ID) | Yes | ID (grp_…) |
page.id | string (bpg_… ID) | Yes | ID (bpg_…) |
page.members | array<object> | Yes | — |
page.members[].bookable | boolean | Yes | — |
page.members[].calendar | enum | Yes | One of: "connected", "crm", "none". |
page.members[].email | string | null | Yes | — |
page.members[].id | string (bpm_… ID) | Yes | ID (bpm_…) |
page.members[].name | string | Yes | — |
page.members[].onStaff | boolean | Yes | — |
page.members[].photoUrl | string | null | Yes | — |
page.members[].priority | enum | Yes | One of: "high", "medium", "low". |
page.members[].scheduleId | string (avs_… ID) | null | Yes | — |
page.members[].services | array<string> | null | Yes | — |
page.members[].title | string | null | Yes | — |
page.members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
page.members[].weight | integer | Yes | — |
page.pausedBy | enum | null | Yes | One of: "owner", "admin". |
page.settings | BookingPageSettings | Yes | — |
page.settings.assignment | object | object | Yes | Default: \{"mode":"round_robin","strategy":"equal"\}. |
page.settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
page.settings.assignment.strategy | enum | Yes | (variant 1) One of: "equal", "most_available". Default: "equal". |
page.settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
page.settings.brandId | string (brd_… ID) | null | Yes | — |
page.settings.bufferAfterMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.bufferBeforeMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.color | string | null | Yes | Pattern: ^#[0-9a-f]\{6\}$. |
page.settings.coverPhoto | string (uri) | string (uri) | null | Yes | — |
page.settings.dailyLimit | integer | null | Yes | Between 1 and 50. |
page.settings.description | string | Yes | Up to 1000 characters. Default: "". |
page.settings.durations | array<constant | constant | constant | constant> | Yes | Up to 4 items. Default: [30]. |
page.settings.increment | constant | constant | constant | constant | Yes | Default: 30. |
page.settings.location | object | object | object | object | object | Yes | Default: \{"kind":"in_person"\}. |
page.settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
page.settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
page.settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
page.settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
page.settings.location.kind | constant | Yes | (variant 4) Always "video". |
page.settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
page.settings.location.kind | constant | Yes | (variant 5) Always "custom". |
page.settings.location.text | string | Yes | (variant 5) 1–200 characters. |
page.settings.meetingType | string | null | Yes | Up to 64 characters. |
page.settings.minNoticeMinutes | integer | Yes | Between 0 and 43200. Default: 240. |
page.settings.pageHours | array<object> | null | Yes | Up to 50 items. |
page.settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
page.settings.pageHours[].end | string | constant | Yes | — |
page.settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
page.settings.preferLeadRep | boolean | Yes | Default: true. |
page.settings.questions | array<object> | Yes | Up to 10 items. Default: []. |
page.settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
page.settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
page.settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
page.settings.questions[].label | string | Yes | 1–200 characters. |
page.settings.questions[].options | array<string> | No | Up to 20 items. |
page.settings.questions[].required | boolean | Yes | Default: false. |
page.settings.redirectUrl | string (uri) | null | Yes | Up to 2000 characters. |
page.settings.reminderDayBefore | boolean | Yes | Default: true. |
page.settings.reminderTwoHours | boolean | Yes | Default: true. |
page.settings.requireEmail | boolean | Yes | Default: true. |
page.settings.requirePhone | boolean | Yes | Default: true. |
page.settings.scheduleId | string | null | Yes | Up to 40 characters. |
page.settings.service | object | object | object | Yes | Default: \{"kind":"none"\}. |
page.settings.service.kind | constant | Yes | (variant 1) Always "none". |
page.settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
page.settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
page.settings.service.kind | constant | Yes | (variant 3) Always "ask". |
page.settings.serviceCoverPhoto | boolean | Yes | Default: false. |
page.settings.title | string | Yes | 1–80 characters. |
page.settings.window | object | object | Yes | Default: \{"days":30,"kind":"rolling"\}. |
page.settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
page.settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
page.settings.window.from | string (date) | Yes | (variant 2) |
page.settings.window.kind | constant | Yes | (variant 2) Always "range". |
page.settings.window.to | string (date) | Yes | (variant 2) |
page.slug | string | Yes | — |
page.status | enum | Yes | One of: "active", "paused", "archived". |
page.updatedAt | string (date-time) | Yes | — |
page.url | string | null | Yes | — |
page.warnings | array<string> | Yes | — |
Errors: 400, 401, 402, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X POST "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/booking-pages/{pageId}/pause" \
-H "Authorization: Bearer $ACCESS_TOKEN"Take bookings on a group page again#
POST /v1/account/groups/{groupId}/booking-pages/{pageId}/resume
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | Yes | ID (grp_…) |
pageId | string (bpg_… ID) | Yes | ID (bpg_…) |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
page | GroupBookingPage | Yes | — |
page.bookingsThisMonth | integer | Yes | — |
page.groupId | string (grp_… ID) | Yes | ID (grp_…) |
page.id | string (bpg_… ID) | Yes | ID (bpg_…) |
page.members | array<object> | Yes | — |
page.members[].bookable | boolean | Yes | — |
page.members[].calendar | enum | Yes | One of: "connected", "crm", "none". |
page.members[].email | string | null | Yes | — |
page.members[].id | string (bpm_… ID) | Yes | ID (bpm_…) |
page.members[].name | string | Yes | — |
page.members[].onStaff | boolean | Yes | — |
page.members[].photoUrl | string | null | Yes | — |
page.members[].priority | enum | Yes | One of: "high", "medium", "low". |
page.members[].scheduleId | string (avs_… ID) | null | Yes | — |
page.members[].services | array<string> | null | Yes | — |
page.members[].title | string | null | Yes | — |
page.members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
page.members[].weight | integer | Yes | — |
page.pausedBy | enum | null | Yes | One of: "owner", "admin". |
page.settings | BookingPageSettings | Yes | — |
page.settings.assignment | object | object | Yes | Default: \{"mode":"round_robin","strategy":"equal"\}. |
page.settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
page.settings.assignment.strategy | enum | Yes | (variant 1) One of: "equal", "most_available". Default: "equal". |
page.settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
page.settings.brandId | string (brd_… ID) | null | Yes | — |
page.settings.bufferAfterMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.bufferBeforeMinutes | integer | Yes | Between 0 and 120. Default: 0. |
page.settings.color | string | null | Yes | Pattern: ^#[0-9a-f]\{6\}$. |
page.settings.coverPhoto | string (uri) | string (uri) | null | Yes | — |
page.settings.dailyLimit | integer | null | Yes | Between 1 and 50. |
page.settings.description | string | Yes | Up to 1000 characters. Default: "". |
page.settings.durations | array<constant | constant | constant | constant> | Yes | Up to 4 items. Default: [30]. |
page.settings.increment | constant | constant | constant | constant | Yes | Default: 30. |
page.settings.location | object | object | object | object | object | Yes | Default: \{"kind":"in_person"\}. |
page.settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
page.settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
page.settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
page.settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
page.settings.location.kind | constant | Yes | (variant 4) Always "video". |
page.settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
page.settings.location.kind | constant | Yes | (variant 5) Always "custom". |
page.settings.location.text | string | Yes | (variant 5) 1–200 characters. |
page.settings.meetingType | string | null | Yes | Up to 64 characters. |
page.settings.minNoticeMinutes | integer | Yes | Between 0 and 43200. Default: 240. |
page.settings.pageHours | array<object> | null | Yes | Up to 50 items. |
page.settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
page.settings.pageHours[].end | string | constant | Yes | — |
page.settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
page.settings.preferLeadRep | boolean | Yes | Default: true. |
page.settings.questions | array<object> | Yes | Up to 10 items. Default: []. |
page.settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
page.settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
page.settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
page.settings.questions[].label | string | Yes | 1–200 characters. |
page.settings.questions[].options | array<string> | No | Up to 20 items. |
page.settings.questions[].required | boolean | Yes | Default: false. |
page.settings.redirectUrl | string (uri) | null | Yes | Up to 2000 characters. |
page.settings.reminderDayBefore | boolean | Yes | Default: true. |
page.settings.reminderTwoHours | boolean | Yes | Default: true. |
page.settings.requireEmail | boolean | Yes | Default: true. |
page.settings.requirePhone | boolean | Yes | Default: true. |
page.settings.scheduleId | string | null | Yes | Up to 40 characters. |
page.settings.service | object | object | object | Yes | Default: \{"kind":"none"\}. |
page.settings.service.kind | constant | Yes | (variant 1) Always "none". |
page.settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
page.settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
page.settings.service.kind | constant | Yes | (variant 3) Always "ask". |
page.settings.serviceCoverPhoto | boolean | Yes | Default: false. |
page.settings.title | string | Yes | 1–80 characters. |
page.settings.window | object | object | Yes | Default: \{"days":30,"kind":"rolling"\}. |
page.settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
page.settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
page.settings.window.from | string (date) | Yes | (variant 2) |
page.settings.window.kind | constant | Yes | (variant 2) Always "range". |
page.settings.window.to | string (date) | Yes | (variant 2) |
page.slug | string | Yes | — |
page.status | enum | Yes | One of: "active", "paused", "archived". |
page.updatedAt | string (date-time) | Yes | — |
page.url | string | null | Yes | — |
page.warnings | array<string> | Yes | — |
Errors: 400, 401, 402, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X POST "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/booking-pages/{pageId}/resume" \
-H "Authorization: Bearer $ACCESS_TOKEN"The community's booking link name, shared with rep link names. Old page links keep working for 90 days#
PUT /v1/account/groups/{groupId}/booking-slug
Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
groupId | string (grp_… ID) | Yes | ID (grp_…) |
Request body
application/json, required.
| Field | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | 2–60 characters. Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$. |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
accountSlug | string | Yes | — |
bookingAppUrl | string | Yes | — |
bookingSlug | string | null | Yes | — |
groupId | string (grp_… ID) | Yes | ID (grp_…) |
pages | array<GroupBookingPage> | Yes | — |
pages[].bookingsThisMonth | integer | Yes | — |
pages[].groupId | string (grp_… ID) | Yes | ID (grp_…) |
pages[].id | string (bpg_… ID) | Yes | ID (bpg_…) |
pages[].members | array<object> | Yes | — |
pages[].members[].bookable | boolean | Yes | — |
pages[].members[].calendar | enum | Yes | One of: "connected", "crm", "none". |
pages[].members[].email | string | null | Yes | — |
pages[].members[].id | string (bpm_… ID) | Yes | ID (bpm_…) |
pages[].members[].name | string | Yes | — |
pages[].members[].onStaff | boolean | Yes | — |
pages[].members[].photoUrl | string | null | Yes | — |
pages[].members[].priority | enum | Yes | One of: "high", "medium", "low". |
pages[].members[].scheduleId | string (avs_… ID) | null | Yes | — |
pages[].members[].services | array<string> | null | Yes | — |
pages[].members[].title | string | null | Yes | — |
pages[].members[].userId | string (usr_… ID) | Yes | ID (usr_…) |
pages[].members[].weight | integer | Yes | — |
pages[].pausedBy | enum | null | Yes | One of: "owner", "admin". |
pages[].settings | BookingPageSettings | Yes | — |
pages[].settings.assignment | object | object | Yes | Default: \{"mode":"round_robin","strategy":"equal"\}. |
pages[].settings.assignment.mode | constant | Yes | (variant 1) Always "round_robin". |
pages[].settings.assignment.strategy | enum | Yes | (variant 1) One of: "equal", "most_available". Default: "equal". |
pages[].settings.assignment.mode | constant | Yes | (variant 2) Always "invitee_chooses". |
pages[].settings.brandId | string (brd_… ID) | null | Yes | — |
pages[].settings.bufferAfterMinutes | integer | Yes | Between 0 and 120. Default: 0. |
pages[].settings.bufferBeforeMinutes | integer | Yes | Between 0 and 120. Default: 0. |
pages[].settings.color | string | null | Yes | Pattern: ^#[0-9a-f]\{6\}$. |
pages[].settings.coverPhoto | string (uri) | string (uri) | null | Yes | — |
pages[].settings.dailyLimit | integer | null | Yes | Between 1 and 50. |
pages[].settings.description | string | Yes | Up to 1000 characters. Default: "". |
pages[].settings.durations | array<constant | constant | constant | constant> | Yes | Up to 4 items. Default: [30]. |
pages[].settings.increment | constant | constant | constant | constant | Yes | Default: 30. |
pages[].settings.location | object | object | object | object | object | Yes | Default: \{"kind":"in_person"\}. |
pages[].settings.location.kind | constant | Yes | (variant 1) Always "in_person". |
pages[].settings.location.kind | constant | Yes | (variant 2) Always "phone_invitee". |
pages[].settings.location.kind | constant | Yes | (variant 3) Always "phone_rep". |
pages[].settings.location.phone | string | Yes | (variant 3) 7–32 characters. |
pages[].settings.location.kind | constant | Yes | (variant 4) Always "video". |
pages[].settings.location.url | string (uri) | Yes | (variant 4) A https:// link Up to 2000 characters. |
pages[].settings.location.kind | constant | Yes | (variant 5) Always "custom". |
pages[].settings.location.text | string | Yes | (variant 5) 1–200 characters. |
pages[].settings.meetingType | string | null | Yes | Up to 64 characters. |
pages[].settings.minNoticeMinutes | integer | Yes | Between 0 and 43200. Default: 240. |
pages[].settings.pageHours | array<object> | null | Yes | Up to 50 items. |
pages[].settings.pageHours[].days | array<enum> | Yes | Items: "mon", "tue", "wed", "thu", "fri", "sat", "sun". |
pages[].settings.pageHours[].end | string | constant | Yes | — |
pages[].settings.pageHours[].start | string | Yes | Pattern: ^([01]\d|2[0-3]):[0-5]\d$. |
pages[].settings.preferLeadRep | boolean | Yes | Default: true. |
pages[].settings.questions | array<object> | Yes | Up to 10 items. Default: []. |
pages[].settings.questions[].fieldKey | string | No | 1–64 characters. Pattern: ^[a-z][a-z0-9_]*$. |
pages[].settings.questions[].id | string | Yes | 1–64 characters. Pattern: ^[a-z0-9][a-z0-9_-]*$. |
pages[].settings.questions[].kind | enum | Yes | One of: "short_text", "long_text", "single_choice", "multiple_choice", "yes_no", "date". |
pages[].settings.questions[].label | string | Yes | 1–200 characters. |
pages[].settings.questions[].options | array<string> | No | Up to 20 items. |
pages[].settings.questions[].required | boolean | Yes | Default: false. |
pages[].settings.redirectUrl | string (uri) | null | Yes | Up to 2000 characters. |
pages[].settings.reminderDayBefore | boolean | Yes | Default: true. |
pages[].settings.reminderTwoHours | boolean | Yes | Default: true. |
pages[].settings.requireEmail | boolean | Yes | Default: true. |
pages[].settings.requirePhone | boolean | Yes | Default: true. |
pages[].settings.scheduleId | string | null | Yes | Up to 40 characters. |
pages[].settings.service | object | object | object | Yes | Default: \{"kind":"none"\}. |
pages[].settings.service.kind | constant | Yes | (variant 1) Always "none". |
pages[].settings.service.kind | constant | Yes | (variant 2) Always "fixed". |
pages[].settings.service.serviceId | string (srv_… ID) | Yes | (variant 2) ID (srv_…) |
pages[].settings.service.kind | constant | Yes | (variant 3) Always "ask". |
pages[].settings.serviceCoverPhoto | boolean | Yes | Default: false. |
pages[].settings.title | string | Yes | 1–80 characters. |
pages[].settings.window | object | object | Yes | Default: \{"days":30,"kind":"rolling"\}. |
pages[].settings.window.days | integer | Yes | (variant 1) Between 1 and 365. |
pages[].settings.window.kind | constant | Yes | (variant 1) Always "rolling". |
pages[].settings.window.from | string (date) | Yes | (variant 2) |
pages[].settings.window.kind | constant | Yes | (variant 2) Always "range". |
pages[].settings.window.to | string (date) | Yes | (variant 2) |
pages[].slug | string | Yes | — |
pages[].status | enum | Yes | One of: "active", "paused", "archived". |
pages[].updatedAt | string (date-time) | Yes | — |
pages[].url | string | null | Yes | — |
pages[].warnings | array<string> | Yes | — |
people | array<object> | Yes | — |
people[].calendar | enum | Yes | One of: "connected", "crm", "none". |
people[].canBeBookedHere | boolean | Yes | — |
people[].email | string | Yes | — |
people[].isGroupRep | boolean | Yes | — |
people[].name | string | Yes | — |
people[].onStaff | boolean | Yes | — |
people[].photoUrl | string | null | Yes | — |
people[].role | string | Yes | — |
people[].schedules | array<object> | Yes | — |
people[].schedules[].id | string (avs_… ID) | Yes | ID (avs_…) |
people[].schedules[].isDefault | boolean | Yes | — |
people[].schedules[].name | string | Yes | — |
people[].title | string | null | Yes | — |
people[].userId | string (usr_… ID) | Yes | ID (usr_…) |
repsBySpecialty | boolean | Yes | — |
serviceWarnings | array<string> | Yes | — |
services | array<object> | Yes | — |
services[].description | string | Yes | — |
services[].id | string | Yes | — |
services[].name | string | Yes | — |
Errors: 400, 401, 402, 403, 404, 409, 429, 500, with an ErrorBody body.
Example
curl -X PUT "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/booking-slug" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"slug": "string"
}'