API reference

Ring Groups

Ring Groups endpoints.

MethodPathSummary
GET/v1/account/groups/{groupId}/ring-groupsA location's ring groups: who its numbers can ring before the agent answers
POST/v1/account/groups/{groupId}/ring-groupsAdd a ring group to a location
GET/v1/account/ring-groups/{ringGroupId}A ring group with its members and the numbers that ring it
PUT/v1/account/ring-groups/{ringGroupId}Save a ring group whole: its settings and its members in ring order. Every number that rings it uses the change on its next call
POST/v1/account/ring-groups/{ringGroupId}/archiveArchive a ring group no number rings any more
GET/v1/account/ring-groups/{ringGroupId}/historyEvery saved state of a ring group, newest first: who was in it, in what order, and how it rang
POST/v1/account/ring-groups/{ringGroupId}/restoreBring an archived ring group back

A location's ring groups: who its numbers can ring before the agent answers#

GET /v1/account/groups/{groupId}/ring-groups

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Path parameters

NameTypeRequiredDescription
groupIdstring (grp_… ID)YesID (grp_…)

Query parameters

NameTypeRequiredDescription
archivedenumNoOne of: "true", "false".

Response 200

FieldTypeRequiredDescription
ringGroupsarray<RingGroup>Yes—
ringGroups[].archivedAtstring (date-time) | nullYes—
ringGroups[].groupIdstring (grp_… ID)YesID (grp_…)
ringGroups[].idstring (rgp_… ID)YesID (rgp_…)
ringGroups[].memberSecondsintegerYes—
ringGroups[].membersarray<RingGroupMember>Yes—
ringGroups[].members[].activebooleanYes—
ringGroups[].members[].emailstring | nullYes—
ringGroups[].members[].hasPhonebooleanYes—
ringGroups[].members[].idstring (rgm_… ID)YesID (rgm_…)
ringGroups[].members[].kindenumYesOne of: "rep", "number".
ringGroups[].members[].labelstring | nullYes—
ringGroups[].members[].namestringYes—
ringGroups[].members[].phonestring | nullYes—
ringGroups[].members[].positionintegerYes—
ringGroups[].members[].takingCallsboolean | nullYes—
ringGroups[].members[].userIdstring (usr_… ID) | nullYes—
ringGroups[].namestringYes—
ringGroups[].onlyInsideRepHoursbooleanYes—
ringGroups[].requireKeyPressbooleanYes—
ringGroups[].revisionintegerYes—
ringGroups[].ringsOnHandoffbooleanYes—
ringGroups[].rotateCursorinteger | nullYes—
ringGroups[].strategyenumYesOne of: "all", "in_order", "rotate".
ringGroups[].updatedAtstring (date-time)Yes—
ringGroups[].usedByarray<object>Yes—
ringGroups[].usedBy[].e164stringYes—
ringGroups[].usedBy[].labelstring | nullYes—
ringGroups[].usedBy[].phoneNumberIdstring (pn_… ID)YesID (pn_…)
ringGroups[].usedBy[].routeNamestring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/ring-groups" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Add a ring group to a location#

POST /v1/account/groups/{groupId}/ring-groups

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
groupIdstring (grp_… ID)YesID (grp_…)

Request body

application/json, required.

FieldTypeRequiredDescription
memberSecondsintegerNoBetween 5 and 60. Default: 15.
membersarray<object>YesUp to 25 items.
members[].labelstringNo1–60 characters.
members[].phonestringNoPattern: ^\+[1-9]\d\{6,14\}$.
members[].userIdstring (usr_… ID)NoID (usr_…)
namestringYes1–60 characters.
onlyInsideRepHoursbooleanNoDefault: false.
requireKeyPressbooleanNoDefault: true.
strategyenumNoOne of: "all", "in_order", "rotate". Default: "all".

Response 201

FieldTypeRequiredDescription
ringGroupRingGroupYes—
ringGroup.archivedAtstring (date-time) | nullYes—
ringGroup.groupIdstring (grp_… ID)YesID (grp_…)
ringGroup.idstring (rgp_… ID)YesID (rgp_…)
ringGroup.memberSecondsintegerYes—
ringGroup.membersarray<RingGroupMember>Yes—
ringGroup.members[].activebooleanYes—
ringGroup.members[].emailstring | nullYes—
ringGroup.members[].hasPhonebooleanYes—
ringGroup.members[].idstring (rgm_… ID)YesID (rgm_…)
ringGroup.members[].kindenumYesOne of: "rep", "number".
ringGroup.members[].labelstring | nullYes—
ringGroup.members[].namestringYes—
ringGroup.members[].phonestring | nullYes—
ringGroup.members[].positionintegerYes—
ringGroup.members[].takingCallsboolean | nullYes—
ringGroup.members[].userIdstring (usr_… ID) | nullYes—
ringGroup.namestringYes—
ringGroup.onlyInsideRepHoursbooleanYes—
ringGroup.requireKeyPressbooleanYes—
ringGroup.revisionintegerYes—
ringGroup.ringsOnHandoffbooleanYes—
ringGroup.rotateCursorinteger | nullYes—
ringGroup.strategyenumYesOne of: "all", "in_order", "rotate".
ringGroup.updatedAtstring (date-time)Yes—
ringGroup.usedByarray<object>Yes—
ringGroup.usedBy[].e164stringYes—
ringGroup.usedBy[].labelstring | nullYes—
ringGroup.usedBy[].phoneNumberIdstring (pn_… ID)YesID (pn_…)
ringGroup.usedBy[].routeNamestring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/groups/{groupId}/ring-groups" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "members": [
    {
      "label": "string",
      "phone": "string",
      "userId": "usr_2ZPh7XbT0v9Ao4iJ3qK1mN8sRgE"
    }
  ]
}'

A ring group with its members and the numbers that ring it#

GET /v1/account/ring-groups/{ringGroupId}

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Path parameters

NameTypeRequiredDescription
ringGroupIdstring (rgp_… ID)YesID (rgp_…)

Response 200

FieldTypeRequiredDescription
ringGroupRingGroupYes—
ringGroup.archivedAtstring (date-time) | nullYes—
ringGroup.groupIdstring (grp_… ID)YesID (grp_…)
ringGroup.idstring (rgp_… ID)YesID (rgp_…)
ringGroup.memberSecondsintegerYes—
ringGroup.membersarray<RingGroupMember>Yes—
ringGroup.members[].activebooleanYes—
ringGroup.members[].emailstring | nullYes—
ringGroup.members[].hasPhonebooleanYes—
ringGroup.members[].idstring (rgm_… ID)YesID (rgm_…)
ringGroup.members[].kindenumYesOne of: "rep", "number".
ringGroup.members[].labelstring | nullYes—
ringGroup.members[].namestringYes—
ringGroup.members[].phonestring | nullYes—
ringGroup.members[].positionintegerYes—
ringGroup.members[].takingCallsboolean | nullYes—
ringGroup.members[].userIdstring (usr_… ID) | nullYes—
ringGroup.namestringYes—
ringGroup.onlyInsideRepHoursbooleanYes—
ringGroup.requireKeyPressbooleanYes—
ringGroup.revisionintegerYes—
ringGroup.ringsOnHandoffbooleanYes—
ringGroup.rotateCursorinteger | nullYes—
ringGroup.strategyenumYesOne of: "all", "in_order", "rotate".
ringGroup.updatedAtstring (date-time)Yes—
ringGroup.usedByarray<object>Yes—
ringGroup.usedBy[].e164stringYes—
ringGroup.usedBy[].labelstring | nullYes—
ringGroup.usedBy[].phoneNumberIdstring (pn_… ID)YesID (pn_…)
ringGroup.usedBy[].routeNamestring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/ring-groups/{ringGroupId}" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Save a ring group whole: its settings and its members in ring order. Every number that rings it uses the change on its next call#

PUT /v1/account/ring-groups/{ringGroupId}

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
ringGroupIdstring (rgp_… ID)YesID (rgp_…)

Request body

application/json, required.

FieldTypeRequiredDescription
memberSecondsintegerNoBetween 5 and 60. Default: 15.
membersarray<object>YesUp to 25 items.
members[].labelstringNo1–60 characters.
members[].phonestringNoPattern: ^\+[1-9]\d\{6,14\}$.
members[].userIdstring (usr_… ID)NoID (usr_…)
namestringYes1–60 characters.
onlyInsideRepHoursbooleanNoDefault: false.
requireKeyPressbooleanNoDefault: true.
strategyenumNoOne of: "all", "in_order", "rotate". Default: "all".

Response 200

FieldTypeRequiredDescription
ringGroupRingGroupYes—
ringGroup.archivedAtstring (date-time) | nullYes—
ringGroup.groupIdstring (grp_… ID)YesID (grp_…)
ringGroup.idstring (rgp_… ID)YesID (rgp_…)
ringGroup.memberSecondsintegerYes—
ringGroup.membersarray<RingGroupMember>Yes—
ringGroup.members[].activebooleanYes—
ringGroup.members[].emailstring | nullYes—
ringGroup.members[].hasPhonebooleanYes—
ringGroup.members[].idstring (rgm_… ID)YesID (rgm_…)
ringGroup.members[].kindenumYesOne of: "rep", "number".
ringGroup.members[].labelstring | nullYes—
ringGroup.members[].namestringYes—
ringGroup.members[].phonestring | nullYes—
ringGroup.members[].positionintegerYes—
ringGroup.members[].takingCallsboolean | nullYes—
ringGroup.members[].userIdstring (usr_… ID) | nullYes—
ringGroup.namestringYes—
ringGroup.onlyInsideRepHoursbooleanYes—
ringGroup.requireKeyPressbooleanYes—
ringGroup.revisionintegerYes—
ringGroup.ringsOnHandoffbooleanYes—
ringGroup.rotateCursorinteger | nullYes—
ringGroup.strategyenumYesOne of: "all", "in_order", "rotate".
ringGroup.updatedAtstring (date-time)Yes—
ringGroup.usedByarray<object>Yes—
ringGroup.usedBy[].e164stringYes—
ringGroup.usedBy[].labelstring | nullYes—
ringGroup.usedBy[].phoneNumberIdstring (pn_… ID)YesID (pn_…)
ringGroup.usedBy[].routeNamestring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X PUT "$ANSWERSTACK_API_URL/v1/account/ring-groups/{ringGroupId}" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "members": [
    {
      "label": "string",
      "phone": "string",
      "userId": "usr_2ZPh7XbT0v9Ao4iJ3qK1mN8sRgE"
    }
  ]
}'

Archive a ring group no number rings any more#

POST /v1/account/ring-groups/{ringGroupId}/archive

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
ringGroupIdstring (rgp_… ID)YesID (rgp_…)

Response 200

FieldTypeRequiredDescription
ringGroupRingGroupYes—
ringGroup.archivedAtstring (date-time) | nullYes—
ringGroup.groupIdstring (grp_… ID)YesID (grp_…)
ringGroup.idstring (rgp_… ID)YesID (rgp_…)
ringGroup.memberSecondsintegerYes—
ringGroup.membersarray<RingGroupMember>Yes—
ringGroup.members[].activebooleanYes—
ringGroup.members[].emailstring | nullYes—
ringGroup.members[].hasPhonebooleanYes—
ringGroup.members[].idstring (rgm_… ID)YesID (rgm_…)
ringGroup.members[].kindenumYesOne of: "rep", "number".
ringGroup.members[].labelstring | nullYes—
ringGroup.members[].namestringYes—
ringGroup.members[].phonestring | nullYes—
ringGroup.members[].positionintegerYes—
ringGroup.members[].takingCallsboolean | nullYes—
ringGroup.members[].userIdstring (usr_… ID) | nullYes—
ringGroup.namestringYes—
ringGroup.onlyInsideRepHoursbooleanYes—
ringGroup.requireKeyPressbooleanYes—
ringGroup.revisionintegerYes—
ringGroup.ringsOnHandoffbooleanYes—
ringGroup.rotateCursorinteger | nullYes—
ringGroup.strategyenumYesOne of: "all", "in_order", "rotate".
ringGroup.updatedAtstring (date-time)Yes—
ringGroup.usedByarray<object>Yes—
ringGroup.usedBy[].e164stringYes—
ringGroup.usedBy[].labelstring | nullYes—
ringGroup.usedBy[].phoneNumberIdstring (pn_… ID)YesID (pn_…)
ringGroup.usedBy[].routeNamestring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/ring-groups/{ringGroupId}/archive" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Every saved state of a ring group, newest first: who was in it, in what order, and how it rang#

GET /v1/account/ring-groups/{ringGroupId}/history

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token). Bearer token: Authorization: Bearer <token> (An API token (ans_pat_ or ans_svc_). Only routes that list a scope here accept one, and only with that scope.).

Path parameters

NameTypeRequiredDescription
ringGroupIdstring (rgp_… ID)YesID (rgp_…)

Response 200

FieldTypeRequiredDescription
revisionsarray<RingGroupRevision>Yes—
revisions[].actionenumYesOne of: "created", "updated", "archived", "restored".
revisions[].memberSecondsintegerYes—
revisions[].membersarray<object>Yes—
revisions[].members[].kindenumYesOne of: "rep", "number".
revisions[].members[].namestringYes—
revisions[].namestringYes—
revisions[].onlyInsideRepHoursbooleanYes—
revisions[].requireKeyPressbooleanYes—
revisions[].revisionintegerYes—
revisions[].savedAtstring (date-time)Yes—
revisions[].savedBystring (usr_… ID) | string (svc_… ID) | nullYes—
revisions[].strategyenumYesOne of: "all", "in_order", "rotate".

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X GET "$ANSWERSTACK_API_URL/v1/account/ring-groups/{ringGroupId}/history" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Bring an archived ring group back#

POST /v1/account/ring-groups/{ringGroupId}/restore

Authentication: Bearer token: Authorization: Bearer <token> (Supabase access token).

Path parameters

NameTypeRequiredDescription
ringGroupIdstring (rgp_… ID)YesID (rgp_…)

Response 200

FieldTypeRequiredDescription
ringGroupRingGroupYes—
ringGroup.archivedAtstring (date-time) | nullYes—
ringGroup.groupIdstring (grp_… ID)YesID (grp_…)
ringGroup.idstring (rgp_… ID)YesID (rgp_…)
ringGroup.memberSecondsintegerYes—
ringGroup.membersarray<RingGroupMember>Yes—
ringGroup.members[].activebooleanYes—
ringGroup.members[].emailstring | nullYes—
ringGroup.members[].hasPhonebooleanYes—
ringGroup.members[].idstring (rgm_… ID)YesID (rgm_…)
ringGroup.members[].kindenumYesOne of: "rep", "number".
ringGroup.members[].labelstring | nullYes—
ringGroup.members[].namestringYes—
ringGroup.members[].phonestring | nullYes—
ringGroup.members[].positionintegerYes—
ringGroup.members[].takingCallsboolean | nullYes—
ringGroup.members[].userIdstring (usr_… ID) | nullYes—
ringGroup.namestringYes—
ringGroup.onlyInsideRepHoursbooleanYes—
ringGroup.requireKeyPressbooleanYes—
ringGroup.revisionintegerYes—
ringGroup.ringsOnHandoffbooleanYes—
ringGroup.rotateCursorinteger | nullYes—
ringGroup.strategyenumYesOne of: "all", "in_order", "rotate".
ringGroup.updatedAtstring (date-time)Yes—
ringGroup.usedByarray<object>Yes—
ringGroup.usedBy[].e164stringYes—
ringGroup.usedBy[].labelstring | nullYes—
ringGroup.usedBy[].phoneNumberIdstring (pn_… ID)YesID (pn_…)
ringGroup.usedBy[].routeNamestring | nullYes—

Errors: 400, 401, 403, 404, 409, 429, 500, with an ErrorBody body.

Example

bash
curl -X POST "$ANSWERSTACK_API_URL/v1/account/ring-groups/{ringGroupId}/restore" \
  -H "Authorization: Bearer $ACCESS_TOKEN"