Teams
A team is a named group of users inside a company account. These endpoints create and change teams and manage who belongs to them.
Every endpoint below shows its parameters and response fields in the middle and a request sample with an example response on the right.
Lists the teams of a directory
/v1.0/directories/{directoryId}/teamsField overview from the specification
Each item has:
teamId(string): id of the team.name(string): team name.code(string | null): optional team code.isScimGroup(boolean): whether the team is synced from a SCIM identity provider.memberCount(number): number of active members.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
code,isScimGroup,memberCount,name,teamId.Example:code,isScimGroup
Response
teamIdstringrequiredId of the team.
namestringrequiredTeam name.
codestringrequirednullableOptional team code.
isScimGroupbooleanrequiredWhether the team is synced from a SCIM identity provider.
memberCountnumberrequiredNumber of active members.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Creates a team
/v1.0/directories/{directoryId}/teamsOnly admins/owners may create teams.
Field overview from the specification
Body fields:
name(string, required): team name.code(string, optional): optional team code.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
code,isScimGroup,memberCount,name,teamId.Example:code,isScimGroup
Request body application/json
namestringrequiredTeam name.
codestringoptionalnullableOptional team code.
Response
teamIdstringrequiredId of the team.
namestringrequiredTeam name.
codestringrequirednullableOptional team code.
isScimGroupbooleanrequiredWhether the team is synced from a SCIM identity provider.
memberCountnumberrequiredNumber of active members.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 403
Forbidden (insufficient permissions).
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Updates a team (rename + optional code)
/v1.0/directories/{directoryId}/teams/{teamId}Only admins/owners.
Field overview from the specification
Body fields:
name(string, required): new team name.code(string, optional): new team code;nullclears it, omit to leave unchanged.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.teamIdstringrequiredId of the team.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
code,isScimGroup,memberCount,name,teamId.Example:code,isScimGroup
Request body application/json
namestringrequiredNew team name.
codestringoptionalnullableNew team code; null to clear, omit to leave unchanged.
Response
teamIdstringrequiredId of the team.
namestringrequiredTeam name.
codestringrequirednullableOptional team code.
isScimGroupbooleanrequiredWhether the team is synced from a SCIM identity provider.
memberCountnumberrequiredNumber of active members.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 403
Forbidden (insufficient permissions).
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Removes (archives) a team
/v1.0/directories/{directoryId}/teams/{teamId}Soft-delete (archive) of the team and all its memberships. Only admins/owners.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.teamIdstringrequiredId of the team.
Status codes
- 204Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 403
Forbidden (insufficient permissions).
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Lists the memberships of a team
/v1.0/directories/{directoryId}/teams/{teamId}/membershipsMembership scalars only (userId, isMainTeam); fetch user details via GET .../teams/{teamId}/memberships/users/{userId}.
Field overview from the specification
Each item has:
teamId(string): id of the team.userId(string): id of the member user.isMainTeam(boolean): whether this team is the user’s main team.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.teamIdstringrequiredId of the team.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
isMainTeam,teamId,userId.Example:isMainTeam,teamId
Response
teamIdstringrequiredId of the team.
userIdstringrequiredId of the member user.
isMainTeambooleanrequiredWhether this team is the user’s main team.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Sets the members of a team (full replace-set)
/v1.0/directories/{directoryId}/teams/{teamId}/membershipsOnly admins/owners.
Field overview from the specification
Body fields:
userIds(array of strings, required): full replace-set of member user ids. Users not in the list are removed.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.teamIdstringrequiredId of the team.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
isMainTeam,teamId,userId.Example:isMainTeam,teamId
Request body application/json
userIdsstring[]requiredFull replace-set of member user ids. Users not in the list are removed.
Response
teamIdstringrequiredId of the team.
userIdstringrequiredId of the member user.
isMainTeambooleanrequiredWhether this team is the user’s main team.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 403
Forbidden (insufficient permissions).
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Lists the users (members) of a team
/v1.0/directories/{directoryId}/teams/{teamId}/memberships/usersField overview from the specification
Each item has:
userId(string): id of the user.email(string): email address of the user.firstName(string): first name.lastName(string): last name.pictureFileUrl(string | null): absolute URL of the profile picture, or null. Requires the same Bearer token as the API.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.teamIdstringrequiredId of the team.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
email,firstName,lastName,pictureFileUrl,userId.Example:email,firstName
Response
userIdstringrequiredId of the user.
emailstringrequiredEmail address of the user.
firstNamestringrequiredFirst name.
lastNamestringrequiredLast name.
pictureFileUrlstringrequirednullableAbsolute URL of the profile picture, or null. Requires the same Bearer token as the API.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.
Returns a single user (member) of a team
/v1.0/directories/{directoryId}/teams/{teamId}/memberships/users/{userId}The user must be a member of the team, otherwise 404.
Field overview from the specification
Response fields:
userId(string): id of the user.email(string): email address of the user.firstName(string): first name.lastName(string): last name.pictureFileUrl(string | null): absolute URL of the profile picture, or null. Requires the same Bearer token as the API.
Path parameters
directoryIdstringrequiredId of the directory (the Sally company account) the resource belongs to. The directories a token can address are listed by
GET /v1.0/me/directories/memberships.teamIdstringrequiredId of the team.
userIdstringrequiredId of the user.
Query parameters
fieldsstringoptionalComma-separated list of the fields to return. Leave it out and you get every field — including fields added in the future, which is your call to make: name your fields if you want to be shielded from that.
Only first-level fields can be named. A nested list such as
attendees,tagsorsectionItemsis returned whole or not at all;attendees.nameis not supported.On a paged response the selection applies to the entries in
items;page,pageSize,totalandhasMoreare always returned. An unknown name is rejected with 400 rather than ignored.Selectable here:
email,firstName,lastName,pictureFileUrl,userId.Example:email,firstName
Response
userIdstringrequiredId of the user.
emailstringrequiredEmail address of the user.
firstNamestringrequiredFirst name.
lastNamestringrequiredLast name.
pictureFileUrlstringrequirednullableAbsolute URL of the profile picture, or null. Requires the same Bearer token as the API.
Status codes
- 200Success
- 400
Invalid request (validation error).
- 401
Missing or invalid bearer token.
- 404
Resource not found or not accessible.
- 429
Rate limit exceeded (per token/IP). Transcription uploads may also return
codeFUP_LIMIT_EXCEEDEDorTOO_MANY_CONCURRENT_TRANSCRIPTIONS. - 500
Internal server error.