API ReferenceTeams
Teams
Creates, lists, reads, updates, archives, and restores teams. This section also manages team memberships.
GET/api/v1/teamsList teams
#Returns one page sorted by team name and team ID. By default, the response excludes archived teams.
- Operation ID
- listTeams
- Scope
- teams:read
- Prerequisites
- None
- Retry guidance
- This operation is repeat-safe. Respect Retry-After and use bounded retries. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/teams' \
--header 'Authorization: Bearer <token>'Success: 200
Returns teams and pagination fields.
Success response JSON
{
"teams": [
{
"id": 42,
"revision": 2,
"company_id": 7,
"name": "Platform Team",
"slug": "platform_team",
"description": "Core platform infrastructure",
"member_count": 12,
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-10T09:00:00Z"
}
],
"pagination": {
"limit": 50,
"has_more": true,
"next_cursor": "opaque-server-cursor"
}
}Request and response contract
Query parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
limit | integer | No | The maximum number of items in one page. The default is 50, and the maximum is 100. Minimum: 1. · Maximum: 100. · Default: 50. |
cursor | string | No | The next_cursor value from the previous page. Clients treat this value as opaque and do not create, inspect, or change it. Minimum length: 1 characters. · Maximum length: 4096 characters. |
include_archived | boolean | No | Controls whether the response includes archived teams. The default is false. Default: false. |
Response 200
Returns teams and pagination fields.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
teams | object[] | Always | The teams in this page. |
teams[].id | integer | Always | The positive numeric ID of the team. Minimum: 1. |
teams[].revision | integer | Always | The resource version for concurrency control. Minimum: 1. |
teams[].company_id | integer | Always | The ID of the workspace that owns the team. Minimum: 1. |
teams[].name | string | Always | The display name of the team. |
teams[].slug | string | Always | The permanent key used to identify the team. |
teams[].description | string | Optional | The workspace description of the team. |
teams[].parent_team_id | integer | Optional | The positive ID of the parent team. This field is absent for a root team. Minimum: 1. |
teams[].member_count | integer | Optional | The number of active workspace members in the team. Minimum: 0. |
teams[].created_at | string (RFC 3339) | Always | The team creation time. |
teams[].updated_at | string (RFC 3339) | Always | The time of the latest team change. |
teams[].archived_at | string (RFC 3339) | Optional | The team archive time. This field is absent for an active team. |
pagination | object | Always | Pagination details for a collection response. |
pagination.limit | integer | Always | The maximum number of items requested for this page. Minimum: 1. · Maximum: 100. |
pagination.has_more | boolean | Always | Indicates whether another page is available. |
pagination.next_cursor | string | Optional | The opaque cursor for the next page. This field is absent on the final page. |
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
POST/api/v1/teamsCreate team
#Creates a team. If slug is omitted, the API creates it from name. A parent team must be active. If any team already uses the slug, the API returns 409. This includes archived teams.
- Operation ID
- createTeam
- Scope
- teams:write
- Prerequisites
- Active responder seatManage teams
- Retry guidance
- Retry an identical request with the same Idempotency-Key used on the first attempt, within 24 hours. Never retry an unknown outcome automatically. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
For <idempotency-key>, choose a unique key on the first attempt. Reuse it only when retrying the identical request.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/teams' \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Platform Team",
"description": "Core platform infrastructure"
}'Success: 201
Returns the created team.
Success response JSON
{
"team": {
"id": 42,
"revision": 1,
"company_id": 7,
"name": "Platform Team",
"slug": "platform_team",
"description": "Core platform infrastructure",
"created_at": "2025-01-30T12:00:00Z",
"updated_at": "2025-01-30T12:00:00Z"
}
}Request and response contract
Request headers
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
Idempotency-Key | string | No | A key for safe retries of a create request. It must contain 1–128 visible, non-space ASCII characters. The same key applies only to an identical request. Minimum length: 1 characters. · Maximum length: 128 characters. · Pattern: ^[\x21-\x7E]+$. |
Request body
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | The team name. The length must be from 1 through 128 characters. Minimum length: 1 characters. · Maximum length: 128 characters. |
slug | string | No | A permanent team key. It starts with a lowercase letter and contains lowercase letters, digits, or underscores. If slug is omitted, the API creates it from name. |
description | string | No | The workspace description of the team. |
parent_team_id | integer | No | The positive ID of an active parent team. If the request omits parent_team_id, the API creates a root team. Minimum: 1. |
Response 201
Returns the created team.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
team | object | Always | The complete public record for a team. |
team.id | integer | Always | The positive numeric ID of the team. Minimum: 1. |
team.revision | integer | Always | The resource version for concurrency control. Minimum: 1. |
team.company_id | integer | Always | The ID of the workspace that owns the team. Minimum: 1. |
team.name | string | Always | The display name of the team. |
team.slug | string | Always | The permanent key used to identify the team. |
team.description | string | Optional | The workspace description of the team. |
team.parent_team_id | integer | Optional | The positive ID of the parent team. This field is absent for a root team. Minimum: 1. |
team.member_count | integer | Optional | The number of active workspace members in the team. Minimum: 0. |
team.created_at | string (RFC 3339) | Always | The team creation time. |
team.updated_at | string (RFC 3339) | Always | The time of the latest team change. |
team.archived_at | string (RFC 3339) | Optional | The team archive time. This field is absent for an active team. |
Response headers
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
Tellagen-Resource-Version | integer | Always | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
GET/api/v1/teams/{id}Get team
#Returns one team by its positive numeric ID. A team remains available by ID after it is archived.
- Operation ID
- getTeam
- Scope
- teams:read
- Prerequisites
- None
- Retry guidance
- This operation is repeat-safe. Respect Retry-After and use bounded retries. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}' \
--header 'Authorization: Bearer <token>'Success: 200
Returns the team.
Success response JSON
{
"team": {
"id": 42,
"revision": 2,
"company_id": 7,
"name": "Platform Team",
"slug": "platform_team",
"description": "Core platform infrastructure",
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-10T09:00:00Z"
}
}Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
Response 200
Returns the team.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
team | object | Always | The complete public record for a team. |
team.id | integer | Always | The positive numeric ID of the team. Minimum: 1. |
team.revision | integer | Always | The resource version for concurrency control. Minimum: 1. |
team.company_id | integer | Always | The ID of the workspace that owns the team. Minimum: 1. |
team.name | string | Always | The display name of the team. |
team.slug | string | Always | The permanent key used to identify the team. |
team.description | string | Optional | The workspace description of the team. |
team.parent_team_id | integer | Optional | The positive ID of the parent team. This field is absent for a root team. Minimum: 1. |
team.member_count | integer | Optional | The number of active workspace members in the team. Minimum: 0. |
team.created_at | string (RFC 3339) | Always | The team creation time. |
team.updated_at | string (RFC 3339) | Always | The time of the latest team change. |
team.archived_at | string (RFC 3339) | Optional | The team archive time. This field is absent for an active team. |
Response headers
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
Tellagen-Resource-Version | integer | Always | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
PATCH/api/v1/teams/{id}Update team
#Updates an active team. If the request supplies a parent team, that team must be active. The update must not create a hierarchy cycle. Omitted fields stay unchanged.
- Operation ID
- updateTeam
- Scope
- teams:write
- Prerequisites
- Active responder seatManage teams
- Retry guidance
- Read the current resource and reconcile changes before retrying with its current version. A stale version returns 412. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
Use the Tellagen-Resource-Version header from a GET of this resource for <resource-version>.
curl --request PATCH \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}' \
--header 'Authorization: Bearer <token>' \
--header 'If-Tellagen-Resource-Version: <resource-version>' \
--header 'Content-Type: application/json' \
--data '{
"description": "Core platform and infrastructure"
}'Success: 200
Returns the updated team.
Success response JSON
{
"team": {
"id": 42,
"revision": 3,
"company_id": 7,
"name": "Platform Team",
"slug": "platform_team",
"description": "Core platform and infrastructure",
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-30T12:00:00Z"
}
}Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
Request headers
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
If-Tellagen-Resource-Version | integer | Yes | The current positive resource version from the latest response. API-key PATCH requests must send this value. Minimum: 1. |
Request body
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | The team name. The length must be from 1 through 128 characters. Minimum length: 1 characters. · Maximum length: 128 characters. |
description | string | No | The replacement team description. |
parent_team_id | integer | null | No | The positive ID of an active parent team. A null value makes this team a root team. |
Response 200
Returns the updated team.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
team | object | Always | The complete public record for a team. |
team.id | integer | Always | The positive numeric ID of the team. Minimum: 1. |
team.revision | integer | Always | The resource version for concurrency control. Minimum: 1. |
team.company_id | integer | Always | The ID of the workspace that owns the team. Minimum: 1. |
team.name | string | Always | The display name of the team. |
team.slug | string | Always | The permanent key used to identify the team. |
team.description | string | Optional | The workspace description of the team. |
team.parent_team_id | integer | Optional | The positive ID of the parent team. This field is absent for a root team. Minimum: 1. |
team.member_count | integer | Optional | The number of active workspace members in the team. Minimum: 0. |
team.created_at | string (RFC 3339) | Always | The team creation time. |
team.updated_at | string (RFC 3339) | Always | The time of the latest team change. |
team.archived_at | string (RFC 3339) | Optional | The team archive time. This field is absent for an active team. |
Response headers
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
Tellagen-Resource-Version | integer | Always | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (9)
Error responses (9)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 412
- The resource changed after the client obtained its If-Tellagen-Resource-Version value.
- 428
- An API-key PATCH request did not include the required If-Tellagen-Resource-Version header.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
DELETE/api/v1/teams/{id}Archive team
#Archives a team. A repeated request returns 204 without changing the archive time or resource version. The API retains memberships and child-team relationships. The archived team remains available by ID. It cannot be updated.
- Operation ID
- archiveTeam
- Scope
- teams:write
- Prerequisites
- Active responder seatManage teams
- Retry guidance
- Do not retry automatically after an uncertain outcome. Read the resource state and follow this operation’s recovery guidance. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request DELETE \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}' \
--header 'Authorization: Bearer <token>'Success: 204
No response body. Do not try to parse this response as JSON.
Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
Returns 204 with no body.
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
POST/api/v1/teams/{id}/restoreRestore team
#Restores an archived team and returns the active team. A repeated request returns the active team without changing its resource version. If the team has parent_team_id, that parent team must be active. Otherwise, the API returns 409 invalid_relationship_state. The API retains team memberships.
- Operation ID
- restoreTeam
- Scope
- teams:write
- Prerequisites
- Active responder seatManage teams
- Retry guidance
- Do not retry automatically after an uncertain outcome. Read the resource state and follow this operation’s recovery guidance. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}/restore' \
--header 'Authorization: Bearer <token>'Success: 200
Returns the complete active team.
Success response JSON
{
"team": {
"id": 42,
"revision": 3,
"company_id": 7,
"name": "Platform Team",
"slug": "platform_team",
"description": "Core platform and infrastructure",
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-30T12:00:00Z"
}
}Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
Response 200
Returns the complete active team.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
team | object | Always | The complete public record for a team. |
team.id | integer | Always | The positive numeric ID of the team. Minimum: 1. |
team.revision | integer | Always | The resource version for concurrency control. Minimum: 1. |
team.company_id | integer | Always | The ID of the workspace that owns the team. Minimum: 1. |
team.name | string | Always | The display name of the team. |
team.slug | string | Always | The permanent key used to identify the team. |
team.description | string | Optional | The workspace description of the team. |
team.parent_team_id | integer | Optional | The positive ID of the parent team. This field is absent for a root team. Minimum: 1. |
team.member_count | integer | Optional | The number of active workspace members in the team. Minimum: 0. |
team.created_at | string (RFC 3339) | Always | The team creation time. |
team.updated_at | string (RFC 3339) | Always | The time of the latest team change. |
team.archived_at | string (RFC 3339) | Optional | The team archive time. This field is absent for an active team. |
Response headers
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
Tellagen-Resource-Version | integer | Always | The positive resource version for If-Tellagen-Resource-Version in the next API-key PATCH request. Minimum: 1. |
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
GET/api/v1/teams/{id}/membersList team members
#Returns one page sorted by membership creation time and user ID. Each entry includes membership and user details.
- Operation ID
- listTeamMembers
- Scope
- teams:read
- Prerequisites
- None
- Retry guidance
- This operation is repeat-safe. Respect Retry-After and use bounded retries. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request GET \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}/members' \
--header 'Authorization: Bearer <token>'Success: 200
Returns team members and pagination fields.
Success response JSON
{
"members": [
{
"team_id": 42,
"user_id": 100,
"role": "lead",
"email": "[email protected]",
"display_name": "Jane Doe",
"avatar_url": ""
}
],
"pagination": {
"limit": 50,
"has_more": false
}
}Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
Query parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
limit | integer | No | The maximum number of items in one page. The default is 50, and the maximum is 100. Minimum: 1. · Maximum: 100. · Default: 50. |
cursor | string | No | The next_cursor value from the previous page. Clients treat this value as opaque and do not create, inspect, or change it. Minimum length: 1 characters. · Maximum length: 4096 characters. |
Response 200
Returns team members and pagination fields.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
members | object[] | Always | The team memberships in this page. |
members[].team_id | integer | Always | The positive numeric ID of the team. |
members[].user_id | integer | Always | The positive numeric ID of the workspace member. |
members[].role | string | Always | The role in this team. Possible values: "lead""member" |
members[].email | string | Always | The email address of the workspace member. |
members[].display_name | string | Optional | The display name of the workspace member. |
members[].avatar_url | string | Optional | The avatar URL of the workspace member. |
pagination | object | Always | Pagination details for a collection response. |
pagination.limit | integer | Always | The maximum number of items requested for this page. Minimum: 1. · Maximum: 100. |
pagination.has_more | boolean | Always | Indicates whether another page is available. |
pagination.next_cursor | string | Optional | The opaque cursor for the next page. This field is absent on the final page. |
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
POST/api/v1/teams/{id}/membersAdd team member
#Adds an active workspace member to an active team. If the team membership already exists, the API updates its role.
- Operation ID
- addTeamMember
- Scope
- teams:write
- Prerequisites
- Active responder seatManage teams
- Retry guidance
- Do not retry automatically after an uncertain outcome. Read the resource state and follow this operation’s recovery guidance. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request POST \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}/members' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"user_id": 100,
"role": "lead"
}'Success: 201
Returns the created or updated team membership.
Success response JSON
{
"member": {
"team_id": 42,
"user_id": 100,
"role": "lead",
"created_at": "2025-01-30T12:00:00Z"
}
}Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
Request body
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
user_id | integer | Yes | The positive ID of the active workspace member to add. Minimum: 1. |
role | string | No | The role in this team. If the request omits role, the API uses member. Default: "member". Allowed values: "lead""member" |
Response 201
Returns the created or updated team membership.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
member | object | Always | The team membership returned after a create or update request. |
member.team_id | integer | Always | The positive numeric ID of the team. Minimum: 1. |
member.user_id | integer | Always | The positive numeric ID of the workspace member. Minimum: 1. |
member.role | string | Always | The role in this team. Possible values: "lead""member" |
member.created_at | string (RFC 3339) | Always | The membership creation time. |
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
PATCH/api/v1/teams/{id}/members/{userId}Update team member
#Updates the team role for an active workspace member. If the team membership does not exist, the API returns 404.
- Operation ID
- updateTeamMember
- Scope
- teams:write
- Prerequisites
- Active responder seatManage teams
- Retry guidance
- Do not retry automatically after an uncertain outcome. Read the resource state and follow this operation’s recovery guidance. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request PATCH \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}/members/{userId}' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"role": "member"
}'Success: 200
Returns the updated team membership.
Success response JSON
{
"member": {
"team_id": 42,
"user_id": 100,
"role": "member",
"created_at": "2025-01-10T09:00:00Z"
}
}Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
userId | integer | Yes | A positive numeric user ID for an active workspace member. Minimum: 1. |
Request body
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
role | string | Yes | The new team role. Allowed values: "lead""member" |
Response 200
Returns the updated team membership.
Always means present when the parent object exists. A present field can be null. Child fields apply to each array item.
| Field | Type | Returned | Description |
|---|---|---|---|
member | object | Always | The team membership returned after a create or update request. |
member.team_id | integer | Always | The positive numeric ID of the team. Minimum: 1. |
member.user_id | integer | Always | The positive numeric ID of the workspace member. Minimum: 1. |
member.role | string | Always | The role in this team. Possible values: "lead""member" |
member.created_at | string (RFC 3339) | Always | The membership creation time. |
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.
DELETE/api/v1/teams/{id}/members/{userId}Remove team member
#Removes one user from the team. The operation does not remove the user from the workspace.
- Operation ID
- removeTeamMember
- Scope
- teams:write
- Prerequisites
- Active responder seatManage teams
- Retry guidance
- Do not retry automatically after an uncertain outcome. Read the resource state and follow this operation’s recovery guidance. Retry rules
Example request
Replace {company}, <token>, and any other placeholders with your values.
curl --request DELETE \
--url 'https://{company}.api.tellagen.com/api/v1/teams/{id}/members/{userId}' \
--header 'Authorization: Bearer <token>'Success: 204
No response body. Do not try to parse this response as JSON.
Request and response contract
Path parameters
Nested fields apply when their parent is supplied. Optional does not imply nullable. Read each field’s clearing rules.
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | A positive numeric team ID returned by this API. Minimum: 1. |
userId | integer | Yes | A positive numeric user ID for an active workspace member. Minimum: 1. |
Returns 204 with no body.
Errors and recovery (7)
Error responses (7)
- 400
- The API rejected the request because its syntax or one of its values is invalid.
- 401
- The request does not contain valid authentication.
- 403
- Authentication succeeded, but the caller lacks the required API scope or workspace permission.
- 404
- The requested resource does not exist or is not available to the caller.
- 409
- The request conflicts with the current resource state. idempotency_key_reused means that the key belongs to different request content. idempotency_in_progress means that an identical request is still in progress. idempotency_outcome_unknown means that an earlier request may have completed, but its result could not be stored and must not be retried automatically.
- 429
- The workspace exceeded an active request limit.
- 500
- An internal server error prevented completion of the request.