AGNTDocs

Organizations

Teams

Groups of users in your account, inside an organization or on their own. Team admins adjust settings for their team wherever a higher level has not locked them.

GET/teams

List teams

Returns the teams in your account, newest first, filtered by `status`. With organization-scoped credentials, returns only that organization's teams.

Query parameters

pageinteger
perPageinteger
statusstring

Responses

200Teams
ok reqenumtrue
teams reqobject[]
idstringTeam id
accountstringYour account id
organizationstring | nullThe organization the team belongs to
namestring
generalInfostringBackground about the team that its users' assistants know
adminApprovalRequiredbooleanWhether a team admin must approve people who ask to join
brandingOnEventsbooleanWhether calendar events the assistant creates carry your app's branding
brandingOnMessagesbooleanWhether messages the assistant sends carry your app's branding
statusenumactivearchived
createdAtstring
updatedAtstring
pageinteger
perPageinteger
totalinteger

Request

curl 'https://api.agnt.ai/teams' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "teams": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "account": "account",
      "organization": "organization",
      "name": "Ava"
    }
  ]
}
POST/teams

Create a team

Creates a team in the caller's organization, when there is one. Called as a user, that user is the owner; with an account key, pass `ownerId`.

Request body

name reqstring
adminApprovalRequiredbooleanWhether a team admin must approve people who ask to join
ownerIdstringUser id of the owner. Required with an account key.

Responses

201Created
ok reqenumtrue
team reqobject
idstringTeam id
accountstringYour account id
organizationstring | nullThe organization the team belongs to
namestring
generalInfostringBackground about the team that its users' assistants know
adminApprovalRequiredbooleanWhether a team admin must approve people who ask to join
brandingOnEventsbooleanWhether calendar events the assistant creates carry your app's branding
brandingOnMessagesbooleanWhether messages the assistant sends carry your app's branding
statusenumactivearchived
createdAtstring
updatedAtstring
400name missing, or ownerId missing with an account key
statusinteger
error_codestring
errorstring
403Not an organization admin
statusinteger
error_codestring
errorstring
404ownerId is not a user in your account
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/teams' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Ava"
}'

Response

{
  "ok": true,
  "team": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "organization": "organization",
    "name": "Ava"
  }
}
GET/teams/{teamId}

Retrieve a team

Retrieves a team.

Path parameters

teamId reqstring

Responses

200Team
ok reqenumtrue
team reqobject
idstringTeam id
accountstringYour account id
organizationstring | nullThe organization the team belongs to
namestring
generalInfostringBackground about the team that its users' assistants know
adminApprovalRequiredbooleanWhether a team admin must approve people who ask to join
brandingOnEventsbooleanWhether calendar events the assistant creates carry your app's branding
brandingOnMessagesbooleanWhether messages the assistant sends carry your app's branding
statusenumactivearchived
createdAtstring
updatedAtstring
404Team not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/teams/<teamId>' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "team": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "organization": "organization",
    "name": "Ava"
  }
}
PUT/teams/{teamId}

Update a team

Updates a team. Only the fields you send change. Requires a team admin.

Path parameters

teamId reqstring

Request body

namestring
generalInfostringBackground about the team that its users' assistants know
adminApprovalRequiredboolean
statusenumactivearchived
brandingOnEventsboolean
brandingOnMessagesboolean

Responses

200Updated
ok reqenumtrue
team reqobject
idstringTeam id
accountstringYour account id
organizationstring | nullThe organization the team belongs to
namestring
generalInfostringBackground about the team that its users' assistants know
adminApprovalRequiredbooleanWhether a team admin must approve people who ask to join
brandingOnEventsbooleanWhether calendar events the assistant creates carry your app's branding
brandingOnMessagesbooleanWhether messages the assistant sends carry your app's branding
statusenumactivearchived
createdAtstring
updatedAtstring
403Not a team admin
statusinteger
error_codestring
errorstring
404Team not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/teams/<teamId>' \
  -X PUT \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Ava",
  "generalInfo": "generalinfo",
  "adminApprovalRequired": true,
  "status": "active"
}'

Response

{
  "ok": true,
  "team": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "organization": "organization",
    "name": "Ava"
  }
}
DELETE/teams/{teamId}

Delete a team

Deletes a team. Its memberships are archived, and its assistants are detached from it. Requires a team admin.

Path parameters

teamId reqstring

Responses

200Deleted
ok reqenumtrue
team reqobject
id reqstring
deletedboolean
messagestring

Request

curl 'https://api.agnt.ai/teams/<teamId>' \
  -X DELETE \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "team": {
    "id": "6660c4a1f2e3b7d8a9c01234"
  }
}
GET/teams/{teamId}/members

List team members

Returns the team's members, newest first, each with the user, role and status. Archived members appear only when you filter by `status`; `search` matches name and email.

Path parameters

teamId reqstring

Query parameters

pageinteger
perPageinteger
statusstring
searchstring

Responses

200Members
ok reqenumtrue
members reqobject[]
idstringMembership id: the memberId for PUT and DELETE /teams/{teamId}/members/{memberId}
userobjectThe user
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
metadataobject
firstLoginAtstring
usernamestring | null
preferencesobject
remindersobject
levelenumWhich calendar events get reminders: all-events (every event), agnt-events (only events the assistant created), or none.all-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
assistantInfoobjectThe user's primary assistant
idstring
namestring | null
emailstring | null
avatarUrlstring | null
roleenummemberadminowner
statusenumactiveinvitedarchived
createdAtstring
updatedAtstring
multipliernumber | nullThe member's seat credit multiplier, when your billing sets one
pageinteger
perPageinteger
totalinteger
403Not a member of this team
statusinteger
error_codestring
errorstring
404Team not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/teams/<teamId>/members' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "members": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "user": {
        "id": "6660c4a1f2e3b7d8a9c01234",
        "account": "account",
        "assistant": "assistant",
        "name": "Ava",
        "avatarUrl": "https://example.com",
        "timezone": "America/New_York"
      },
      "role": "member",
      "status": "active"
    }
  ]
}
POST/teams/{teamId}/members

Add a team member

Adds a user to the team as `member` or `admin`. A user has one active team, so this moves them from their current team; if they own that team and it has other active members, pass `newOwnerId`. Requires a team admin.

Path parameters

teamId reqstring

Request body

userId reqstringAGNT user id
roleenummemberadmin
newOwnerIdstringIf the user owns their current team and it has other active members, the user id of an active member of that team to hand it to. Without it the call returns 400 with requiresOwnershipTransfer.

Responses

201Added
ok reqenumtrue
member reqobject
idstringMembership id: the memberId for PUT and DELETE /teams/{teamId}/members/{memberId}
userobjectThe user
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
metadataobject
firstLoginAtstring
usernamestring | null
preferencesobject
remindersobject
levelenumWhich calendar events get reminders: all-events (every event), agnt-events (only events the assistant created), or none.all-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
roleenummemberadminowner
statusenumactiveinvitedarchived
createdAtstring
updatedAtstring
400userId missing, or newOwnerId is not an active member
statusinteger
error_codestring
errorstring
403Not a team admin, or the user belongs to another organization or team
statusinteger
error_codestring
errorstring
404Team or user not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/teams/<teamId>/members' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "userId": "6702b1e8f9a0b1c2d3e4f5a6"
}'

Response

{
  "ok": true,
  "member": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "user": {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "account": "account",
      "assistant": "assistant",
      "name": "Ava",
      "avatarUrl": "https://example.com",
      "timezone": "America/New_York"
    },
    "role": "member",
    "status": "active"
  }
}
PUT/teams/{teamId}/members/{memberId}

Update a team member

Changes a member's role or status. `memberId` is the membership id from the members list. When the owner makes someone else owner, the current owner becomes an admin.

Path parameters

teamId reqstring
memberId reqstring

Request body

roleenummemberadminowner
statusenumactiveinvitedarchived

Responses

200Updated
ok reqenumtrue
member reqobject
idstringMembership id: the memberId for PUT and DELETE /teams/{teamId}/members/{memberId}
userobjectThe user
id reqstring
account reqstring
emailstring
externalIdstring
assistant reqstring | null
name reqstring | null
firstNamestring
lastNamestring
avatarUrl reqstring | null
timezone reqstring
locale reqstring
countrystring | null
citystring
organization reqstring | null
organizationRole reqenumadminmemberguest
team reqobject | null
id reqstring
name reqstring
organization reqstring | null
status reqstring
teamRole reqenummemberadminownernull
status reqenumactiveinactivesuspended
voiceobject | null
voiceId reqstring
provider reqstring
metadataobject
firstLoginAtstring
usernamestring | null
preferencesobject
remindersobject
levelenumWhich calendar events get reminders: all-events (every event), agnt-events (only events the assistant created), or none.all-eventsagnt-eventsnone
smartRemindersboolean
recipientobject
asOrganizerenumonly-mewith-attendeesnone
asAttendeeenumonly-menone
calendarsobject
readstring[]
emailobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
slackobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
teamsobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
desktopobject
enabledboolean
virtualDurationnumber
inPersonDurationnumber
checkInAfternumber
preferredProvidersobject
preferredContactChannelobject
assistantNamestring | null
appNamestring | null
createdAt reqstring
updatedAt reqstring
roleenummemberadminowner
statusenumactiveinvitedarchived
createdAtstring
updatedAtstring
403Not allowed to make this change
statusinteger
error_codestring
errorstring
404Team or member not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/teams/<teamId>/members/<memberId>' \
  -X PUT \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "role": "member",
  "status": "active"
}'

Response

{
  "ok": true,
  "member": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "user": {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "account": "account",
      "assistant": "assistant",
      "name": "Ava",
      "avatarUrl": "https://example.com",
      "timezone": "America/New_York"
    },
    "role": "member",
    "status": "active"
  }
}
DELETE/teams/{teamId}/members/{memberId}

Remove a team member

Removes a member from the team. `memberId` is the membership id from the members list. The owner cannot be removed, team admins cannot remove other admins, and you cannot remove yourself.

Path parameters

teamId reqstring
memberId reqstring

Responses

200Removed
ok reqenumtrue
member reqobject
id reqstring
deletedboolean
messagestring

Request

curl 'https://api.agnt.ai/teams/<teamId>/members/<memberId>' \
  -X DELETE \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "member": {
    "id": "6660c4a1f2e3b7d8a9c01234"
  }
}
GET/teams/{teamId}/settings/resource-permissions

Retrieve team policy

Returns the team's overrides (`null` inherits from the organization) and the action types the organization locked, with their pinned modes. Requires an account key or a team admin.

Path parameters

teamId reqstring

Responses

200Team policy
okboolean
settingsobject
skillsobject
workflowsobject
assistantsobject
storeobject
usersobject
capabilitiesobject
approvalSettingsobject
matrixobject | nullAction types: email_as_user (email from the user's mailbox), email_as_assistant (email from the assistant's mailbox), messaging (texts and chat messages), voice_call_as_assistant, voice_call_as_user, calendar, files, drive, contacts, third_party_skills (actions in connected apps), website.
email_as_userobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
email_as_assistantobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
messagingobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
voice_call_as_assistantobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
voice_call_as_userobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
calendarobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
filesobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
driveobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
contactsobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
third_party_skillsobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
websiteobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
lockedstring[]Action types lower levels cannot loosen. Sent inside matrix, next to the cells; replaces the list.
connectionsobject
mcpAccessLevelenumoffreadread_writenull
mcpLockedboolean | null
orgLockedCellsstring[]Action types the organization locked
orgLockedValuesobjectAction type to the { mode, timeBoxedWindowMin } the organization pinned it to
403Team admin role required
404Team not found

Request

curl 'https://api.agnt.ai/teams/<teamId>/settings/resource-permissions' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "settings": {
    "skills": {},
    "workflows": {},
    "assistants": {},
    "store": {}
  }
}
PATCH/teams/{teamId}/settings/resource-permissions

Update team policy

Sets team overrides; `null` inherits from the organization. A team can only tighten: overrides for action types the organization locked are ignored, and the stricter lock wins. Requires an account key or a team admin.

Path parameters

teamId reqstring

Request body

skillsobjectcanBrowseStore, canInstallFromStore, canCreate, requireApproval, canShareWithTeam, requirePermissionToShare, blockUpstream, authorOwn: boolean or null
workflowsobjectcanBrowseStore, canInstallFromStore, canCreate, requireApproval, canShareWithTeam, requirePermissionToShare: boolean or null
assistantsobjectcanCreate, canShareWithTeam, requirePermissionToShare: boolean or null
storeobject
enabledboolean | null
allowliststring[] | null
blockliststring[] | null
usersobject
createSkillsboolean | null
shareSkillsboolean | null
approvalSettingsobject
matrixobjectMerged into the team's settings; locked replaces the team's list. Cells and locks for action types the organization locked are ignored. Action types: email_as_user (email from the user's mailbox), email_as_assistant (email from the assistant's mailbox), messaging (texts and chat messages), voice_call_as_assistant, voice_call_as_user, calendar, files, drive, contacts, third_party_skills (actions in connected apps), website.
email_as_userobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
email_as_assistantobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
messagingobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
voice_call_as_assistantobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
voice_call_as_userobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
calendarobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
filesobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
driveobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
contactsobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
third_party_skillsobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
websiteobject
modeenumauto: acts on its own. time-boxed: waits out a window in which the user can stop it. manual: waits for approval.autotime-boxedmanualnull
timeBoxedWindowMinnumber | null
lockedstring[]Action types lower levels cannot loosen. Sent inside matrix, next to the cells; replaces the list.
connectionsobject
allowedTypesstring[] | nullnull inherits; empty allows all
connectionPermissionsobjectConnection to { resource: off | read | read_write | null }. Resources: calendar, contacts, email, drive, messaging, video, teams, projects, crm
connectionLocksobjectConnection to { resource: true | false | null }; a cell can be locked only if it has a value
mcpAccessLevelenumAccess to connected tool serversoffreadread_writenull
mcpLockedboolean | nullLocking requires mcpAccessLevel
capabilitiesobjectworkspaceCli, workspaceHandoff, browserAutomation: on | off | null; workspaceCliLocked, workspaceHandoffLocked, browserAutomationLocked: boolean or null; workspaceHandoffDomains: { allowlist, blocklist } of origins

Responses

200Team policy
okboolean
settingsobject
400No valid fields, an invalid value or an invalid lock
403Team admin role required
404Team not found

Request

curl 'https://api.agnt.ai/teams/<teamId>/settings/resource-permissions' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "skills": {},
  "workflows": {},
  "assistants": {},
  "store": {
    "enabled": true,
    "allowlist": [
      "allowlist"
    ],
    "blocklist": [
      "blocklist"
    ]
  }
}'

Response

{
  "ok": true,
  "settings": {}
}
POST/teams/{teamId}/settings/security-preset

Apply the restricted preset

Turns off and locks connected tool servers, custom tool servers, the workspace shell, workspace handoff and browser automation for the team in one call. Requires an account key or a team admin.

Path parameters

teamId reqstring

Request body

preset reqenumrestricted

Responses

200Team policy after the preset
okboolean
settingsobject
400preset must be restricted
403Team admin role required
404Team not found

Request

curl 'https://api.agnt.ai/teams/<teamId>/settings/security-preset' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "preset": "restricted"
}'

Response

{
  "ok": true,
  "settings": {}
}
GET/teams/{teamId}/settings/connections

List team connections

Returns every connection available to the team (built in, from a skill, or a custom tool server) with the organization setting, the team override and the effective state, plus whether members can add custom tool servers. Requires an account key or a team admin.

Path parameters

teamId reqstring

Responses

200Connections
connectionsobject[]
idstring
displayNamestring
descriptionstring | null
authMethodstring
sourceenumbuiltinskillcustom_mcp
orgEnabledboolean | null
teamEnabledboolean | null
effectiveStateenumenableddisabled
allowCustomMcpobject
effectiveboolean
orgOverrideboolean | null
teamOverrideboolean | null
403Team admin role required
404Team not found

Request

curl 'https://api.agnt.ai/teams/<teamId>/settings/connections' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "connections": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "displayName": "Ava",
      "description": "Draft it, get Maria to sign off, send it.",
      "authMethod": "authmethod"
    }
  ],
  "allowCustomMcp": {
    "effective": true,
    "orgOverride": true,
    "teamOverride": true
  }
}
PATCH/teams/{teamId}/settings/connections/{connectionId}

Update a team connection

Turns a connection on or off for the team, or clears the override to inherit the organization setting. Requires an account key or a team admin.

Path parameters

teamId reqstring
connectionId reqstring

Request body

enabled reqenuminheritonoff

Responses

200Saved
connectionIdstring
teamEnabledenuminheritonoff
400enabled must be inherit, on or off
403Team admin role required
404Team not found

Request

curl 'https://api.agnt.ai/teams/<teamId>/settings/connections/<connectionId>' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": "inherit"
}'

Response

{
  "connectionId": "6660c4a1f2e3b7d8a9c01234",
  "teamEnabled": "inherit"
}
PATCH/teams/{teamId}/settings/custom-mcp

Update custom tool server access

Sets whether team members can add their own custom tool servers, or inherit the organization setting. A block at the organization or team level wins. Requires an account key or a team admin.

Path parameters

teamId reqstring

Request body

allowCustomMcp reqenuminheritonoff

Responses

200Effective setting
allowCustomMcpobject
effectiveboolean
orgOverrideboolean | null
teamOverrideboolean | null
400allowCustomMcp must be inherit, on or off
403Team admin role required
404Team not found

Request

curl 'https://api.agnt.ai/teams/<teamId>/settings/custom-mcp' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "allowCustomMcp": "inherit"
}'

Response

{
  "allowCustomMcp": {
    "effective": true,
    "orgOverride": true,
    "teamOverride": true
  }
}
POST/teams/{teamId}/transfer-ownership

Transfer team ownership

Makes another active member the owner. The current owner becomes a member, and the billing contact moves to the new owner. Call it as the current owner.

Path parameters

teamId reqstring

Request body

newOwnerId reqstringUser id of an active member of this team

Responses

200Transferred
okboolean
newOwnerobject
idstring
emailstring
400newOwnerId missing or equal to the caller
403Caller is not the current owner
404New owner is not an active team member

Request

curl 'https://api.agnt.ai/teams/<teamId>/transfer-ownership' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "X-User-Email: [email protected]" \
  -H "Content-Type: application/json" \
  -d '{
  "newOwnerId": "6660c4a1f2e3b7d8a9c01234"
}'

Response

{
  "ok": true,
  "newOwner": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "email": "[email protected]"
  }
}