AGNTDocs

Organizations

Organizations

Your customers' companies. Each organization has members, verified domains, SSO, audit events and policy that its teams inherit.

GET/organizations

List organizations

Returns the organizations in your account, newest first. A user sees only their own organization.

Query parameters

pageinteger
perPageinteger

Responses

200Orgs
ok reqenumtrue
organizations reqobject[]
idstringOrganization id
accountstringYour account id
namestring
generalInfostringBackground about the organization that its users' assistants know
memberCountinteger
defaultTeamstring | nullTeam where organization-scoped provisioning places new users
ssoobjectPresent once an SSO provider is configured. Admins see the full configuration; other members see enabled, enforced and provider only. The IdP certificate is never returned.
enabledboolean
enforcedboolean
providerstringsaml_generic
configuredAtstring | null
samlobject
entryPointstring
issuerstring | null
signatureAlgorithmstring
allowIdpInitiatedboolean
spEntityIdstring | nullSet on the first sign-in
acsUrlstring | nullSet on the first sign-in
sloUrlstring | nullSet on the first sign-in
attributeMappingobject
emailstring
firstNamestring
lastNamestring
groupsstring
groupFilterobject
enabledboolean
allowedGroupsstring[]
requireAllboolean
groupRoleMappingobject[]
groupstring
roleenumadminmember
scimobjectPresent when SCIM is enabled
enabledboolean
endpointstring | null
hasTokenbooleanWhether a SCIM token has been minted (the token itself is never returned)
tokenCreatedAtstring | null
versionstring
memberSyncobject
autoProvisionbooleanCreate a user on first SSO sign-in when none exists
createdAtstring
updatedAtstring
pageinteger
perPageinteger
totalinteger

Request

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

Response

{
  "ok": true,
  "organizations": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "account": "account",
      "name": "Ava",
      "generalInfo": "generalinfo"
    }
  ]
}
POST/organizations

Create an organization

Creates an organization. Called as a user, that user becomes its owner. Requires an account key or an organization admin.

Request body

name reqstring

Responses

201Created
ok reqenumtrue
organization reqobject
idstringOrganization id
accountstringYour account id
namestring
generalInfostringBackground about the organization that its users' assistants know
memberCountinteger
defaultTeamstring | nullTeam where organization-scoped provisioning places new users
ssoobjectPresent once an SSO provider is configured. Admins see the full configuration; other members see enabled, enforced and provider only. The IdP certificate is never returned.
enabledboolean
enforcedboolean
providerstringsaml_generic
configuredAtstring | null
samlobject
entryPointstring
issuerstring | null
signatureAlgorithmstring
allowIdpInitiatedboolean
spEntityIdstring | nullSet on the first sign-in
acsUrlstring | nullSet on the first sign-in
sloUrlstring | nullSet on the first sign-in
attributeMappingobject
emailstring
firstNamestring
lastNamestring
groupsstring
groupFilterobject
enabledboolean
allowedGroupsstring[]
requireAllboolean
groupRoleMappingobject[]
groupstring
roleenumadminmember
scimobjectPresent when SCIM is enabled
enabledboolean
endpointstring | null
hasTokenbooleanWhether a SCIM token has been minted (the token itself is never returned)
tokenCreatedAtstring | null
versionstring
memberSyncobject
autoProvisionbooleanCreate a user on first SSO sign-in when none exists
createdAtstring
updatedAtstring
400name missing
statusinteger
error_codestring
errorstring
403Not an organization admin
statusinteger
error_codestring
errorstring
429More than 10 organizations created in a minute

Request

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

Response

{
  "ok": true,
  "organization": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "name": "Ava",
    "generalInfo": "generalinfo"
  }
}
GET/organizations/{orgId}

Retrieve an organization

Retrieves an organization. Admins also get the full SSO and SCIM configuration; other members see whether SSO is enabled and enforced.

Path parameters

orgId reqstring

Responses

200Organization
ok reqenumtrue
organization reqobject
idstringOrganization id
accountstringYour account id
namestring
generalInfostringBackground about the organization that its users' assistants know
memberCountinteger
defaultTeamstring | nullTeam where organization-scoped provisioning places new users
ssoobjectPresent once an SSO provider is configured. Admins see the full configuration; other members see enabled, enforced and provider only. The IdP certificate is never returned.
enabledboolean
enforcedboolean
providerstringsaml_generic
configuredAtstring | null
samlobject
entryPointstring
issuerstring | null
signatureAlgorithmstring
allowIdpInitiatedboolean
spEntityIdstring | nullSet on the first sign-in
acsUrlstring | nullSet on the first sign-in
sloUrlstring | nullSet on the first sign-in
attributeMappingobject
emailstring
firstNamestring
lastNamestring
groupsstring
groupFilterobject
enabledboolean
allowedGroupsstring[]
requireAllboolean
groupRoleMappingobject[]
groupstring
roleenumadminmember
scimobjectPresent when SCIM is enabled
enabledboolean
endpointstring | null
hasTokenbooleanWhether a SCIM token has been minted (the token itself is never returned)
tokenCreatedAtstring | null
versionstring
memberSyncobject
autoProvisionbooleanCreate a user on first SSO sign-in when none exists
createdAtstring
updatedAtstring
403Not a member of this organization
statusinteger
error_codestring
errorstring
404Organization not found
statusinteger
error_codestring
errorstring

Request

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

Response

{
  "ok": true,
  "organization": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "name": "Ava",
    "generalInfo": "generalinfo"
  }
}
PUT/organizations/{orgId}

Update an organization

Updates an organization. Only the fields you send change. `defaultTeam` is the team that organization-scoped provisioning places new users on. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Request body

namestring
generalInfostringBackground about the organization that its users' assistants know
defaultTeamstring | nullTeam id
defaultAssistantstring | nullAssistant id

Responses

200Updated
ok reqenumtrue
organization reqobject
idstringOrganization id
accountstringYour account id
namestring
generalInfostringBackground about the organization that its users' assistants know
memberCountinteger
defaultTeamstring | nullTeam where organization-scoped provisioning places new users
ssoobjectPresent once an SSO provider is configured. Admins see the full configuration; other members see enabled, enforced and provider only. The IdP certificate is never returned.
enabledboolean
enforcedboolean
providerstringsaml_generic
configuredAtstring | null
samlobject
entryPointstring
issuerstring | null
signatureAlgorithmstring
allowIdpInitiatedboolean
spEntityIdstring | nullSet on the first sign-in
acsUrlstring | nullSet on the first sign-in
sloUrlstring | nullSet on the first sign-in
attributeMappingobject
emailstring
firstNamestring
lastNamestring
groupsstring
groupFilterobject
enabledboolean
allowedGroupsstring[]
requireAllboolean
groupRoleMappingobject[]
groupstring
roleenumadminmember
scimobjectPresent when SCIM is enabled
enabledboolean
endpointstring | null
hasTokenbooleanWhether a SCIM token has been minted (the token itself is never returned)
tokenCreatedAtstring | null
versionstring
memberSyncobject
autoProvisionbooleanCreate a user on first SSO sign-in when none exists
createdAtstring
updatedAtstring
403Not an organization admin
statusinteger
error_codestring
errorstring
404Organization not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>' \
  -X PUT \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Ava",
  "generalInfo": "generalinfo",
  "defaultTeam": "defaultteam",
  "defaultAssistant": "defaultassistant"
}'

Response

{
  "ok": true,
  "organization": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "name": "Ava",
    "generalInfo": "generalinfo"
  }
}
DELETE/organizations/{orgId}

Delete an organization

Deletes an organization and its domains. Its users and teams stay in your account, and teams left with no members are deleted. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Responses

200Deleted
ok reqenumtrue
organization reqobject
id reqstring
deletedboolean
messagestring

Request

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

Response

{
  "ok": true,
  "organization": {
    "id": "6660c4a1f2e3b7d8a9c01234"
  }
}
GET/organizations/{orgId}/members

List organization members

Returns the organization's users, newest first, with their organization role. `search` matches name and email.

Path parameters

orgId reqstring

Query parameters

pageinteger
perPageinteger
searchstring

Responses

200Members
ok reqenumtrue
members reqobject[]
id reqstring
email reqstring
name reqstring | null
avatarUrl reqstring | null
organizationRole reqstring
createdAt reqstring
pageinteger
perPageinteger
totalinteger

Request

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

Response

{
  "ok": true,
  "members": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "email": "[email protected]",
      "name": "Ava",
      "avatarUrl": "https://harborview.co",
      "organizationRole": "organizationrole",
      "createdAt": "2026-10-15T14:30:00Z"
    }
  ]
}
POST/organizations/{orgId}/members

Add an organization member

Adds a user to the organization by email, creating the user if needed, and places them on the organization's default team when one is set. New users receive an invitation email. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Request body

email reqstring

Responses

201Added
ok reqenumtrue
member reqobject
id reqstring
email reqstring
name reqstring | null
organizationRole reqstring
createdAt reqstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/members' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "email": "[email protected]"
}'

Response

{
  "ok": true,
  "member": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "email": "[email protected]",
    "name": "Ava",
    "organizationRole": "organizationrole",
    "createdAt": "2026-10-15T14:30:00Z"
  }
}
DELETE/organizations/{orgId}/members/{userId}

Remove an organization member

Removes a user from the organization and its teams. The organization's only admin cannot be removed; promote another admin first.

Path parameters

orgId reqstring
userId reqstring

Responses

200Removed
ok reqenumtrue
member reqobject
id reqstring
deletedboolean
messagestring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/members/<userId>' \
  -X DELETE \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "member": {
    "id": "6660c4a1f2e3b7d8a9c01234"
  }
}
GET/organizations/{orgId}/domains

List domains

Returns the organization's domains, verified or not, each with the DNS TXT record that proves ownership. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Responses

200Domains
ok reqenumtrue
domains reqobject[]
idstringDomain id
domainstringLower-cased domain, such as acme.com
sourceenummanual when added through the API; sso when added by an SSO configuration (these cannot be edited or removed directly)manualsso
verifiedbooleanTrue once the TXT record has been found
autoJoinbooleanWhether people who sign up or are provisioned with this domain join the organization automatically, once verified
txtRecordNamestringName of the DNS TXT record to publish, such as _agnt-verification.acme.com
txtRecordValuestringValue of that TXT record
verifiedAtstring | null
lastCheckedAtstring | nullLast verification attempt
createdAtstring
updatedAtstring
403Not an organization admin
statusinteger
error_codestring
errorstring
404Organization not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/domains' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "domains": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "domain": "harborview.co",
      "source": "manual",
      "verified": true
    }
  ]
}
POST/organizations/{orgId}/domains

Add a domain

Adds an unverified domain and returns the TXT record (`txtRecordName`, `txtRecordValue`) to publish in DNS. Then verify the domain. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Request body

domain reqstringSuch as acme.com
autoJoinbooleanJoin people at this domain to the organization automatically, once verified

Responses

201Added
ok reqenumtrue
domain reqobject
idstringDomain id
domainstringLower-cased domain, such as acme.com
sourceenummanual when added through the API; sso when added by an SSO configuration (these cannot be edited or removed directly)manualsso
verifiedbooleanTrue once the TXT record has been found
autoJoinbooleanWhether people who sign up or are provisioned with this domain join the organization automatically, once verified
txtRecordNamestringName of the DNS TXT record to publish, such as _agnt-verification.acme.com
txtRecordValuestringValue of that TXT record
verifiedAtstring | null
lastCheckedAtstring | nullLast verification attempt
createdAtstring
updatedAtstring
400domain missing, or already added to this organization
statusinteger
error_codestring
errorstring
403Not an organization admin
statusinteger
error_codestring
errorstring
404Organization not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/domains' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "domain": "harborview.co"
}'

Response

{
  "ok": true,
  "domain": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "domain": "harborview.co",
    "source": "manual",
    "verified": true
  }
}
POST/organizations/{orgId}/domains/{domainId}/verify

Verify a domain

Looks up the domain's TXT record and marks the domain verified when the value matches. Until the record is visible in DNS, the call returns `400` and records `lastCheckedAt`; call it again after the record propagates.

Path parameters

orgId reqstring
domainId reqstring

Responses

200Verified
ok reqenumtrue
domain reqobject
idstringDomain id
domainstringLower-cased domain, such as acme.com
sourceenummanual when added through the API; sso when added by an SSO configuration (these cannot be edited or removed directly)manualsso
verifiedbooleanTrue once the TXT record has been found
autoJoinbooleanWhether people who sign up or are provisioned with this domain join the organization automatically, once verified
txtRecordNamestringName of the DNS TXT record to publish, such as _agnt-verification.acme.com
txtRecordValuestringValue of that TXT record
verifiedAtstring | null
lastCheckedAtstring | nullLast verification attempt
createdAtstring
updatedAtstring
400TXT record not found yet, DNS lookup failed, or the domain is already verified
statusinteger
error_codestring
errorstring
403Not an organization admin
statusinteger
error_codestring
errorstring
404Organization or domain not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/domains/<domainId>/verify' \
  -X POST \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "domain": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "domain": "harborview.co",
    "source": "manual",
    "verified": true
  }
}
PUT/organizations/{orgId}/domains/{domainId}

Update a domain

Sets `autoJoin`: whether people who sign in with this verified domain join the organization automatically. Domains managed by SSO cannot be changed. Requires an account key or an organization admin.

Path parameters

orgId reqstring
domainId reqstring

Request body

autoJoinboolean

Responses

200Updated
ok reqenumtrue
domain reqobject
idstringDomain id
domainstringLower-cased domain, such as acme.com
sourceenummanual when added through the API; sso when added by an SSO configuration (these cannot be edited or removed directly)manualsso
verifiedbooleanTrue once the TXT record has been found
autoJoinbooleanWhether people who sign up or are provisioned with this domain join the organization automatically, once verified
txtRecordNamestringName of the DNS TXT record to publish, such as _agnt-verification.acme.com
txtRecordValuestringValue of that TXT record
verifiedAtstring | null
lastCheckedAtstring | nullLast verification attempt
createdAtstring
updatedAtstring
403Not an organization admin, or the domain is managed by SSO
statusinteger
error_codestring
errorstring
404Organization or domain not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/domains/<domainId>' \
  -X PUT \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "autoJoin": true
}'

Response

{
  "ok": true,
  "domain": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "domain": "harborview.co",
    "source": "manual",
    "verified": true
  }
}
DELETE/organizations/{orgId}/domains/{domainId}

Remove a domain

Removes a domain from the organization. To remove a domain managed by SSO, disable SSO first. Requires an account key or an organization admin.

Path parameters

orgId reqstring
domainId reqstring

Responses

200Removed
ok reqenumtrue
domain reqobject
id reqstring
deletedboolean
messagestring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/domains/<domainId>' \
  -X DELETE \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "domain": {
    "id": "6660c4a1f2e3b7d8a9c01234"
  }
}
PUT/organizations/{orgId}/sso

Configure SSO

Configures SAML 2.0 sign-in for the organization's verified domains, with `provider: "saml_generic"`. Each object you send (`saml`, `memberSync`) is merged into the stored one, so you can change one field, such as the certificate, on its own. Sign-in works once `saml.entryPoint` and `saml.certificate` are set and `enabled` is `true`. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Request body

enabledbooleanTurn SSO sign-in on for the organization's verified domains
enforcedbooleanUsers at those domains, and members of the organization, can sign in only through SSO
providerenumsaml_generic
samlobjectThe identity provider's details
entryPointstringThe IdP's SSO URL. Required for sign-in.
certificatestringThe IdP's signing certificate (PEM or base64). Required for sign-in; every response is verified against it. Never returned.
issuerstringOptional. The IdP's entity ID, stored for your reference.
signatureAlgorithmstringSignature algorithm the IdP uses
allowIdpInitiatedbooleanAlso accept sign-ins started from the IdP's app dashboard. Must be a boolean.
attributeMappingobjectAssertion attribute names. The defaults are the field names; the email falls back to the NameID.
emailstring
firstNamestring
lastNamestring
groupsstring
groupFilterobjectOnly users in any of these groups (with requireAll, all of them) may sign in. Case-insensitive.
enabledboolean
allowedGroupsstring[]
requireAllboolean
groupRoleMappingobject[]Sets the user's organization role at each sign-in; the first matching group wins.
groupstring
roleenumadminmember
memberSyncobject
autoProvisionbooleantrue: a person with no user yet is created on first sign-in. false: only users you have already provisioned can sign in.

Responses

200Updated organization, with the full SSO configuration
ok reqenumtrue
organization reqobject
idstringOrganization id
accountstringYour account id
namestring
generalInfostringBackground about the organization that its users' assistants know
memberCountinteger
defaultTeamstring | nullTeam where organization-scoped provisioning places new users
ssoobjectPresent once an SSO provider is configured. Admins see the full configuration; other members see enabled, enforced and provider only. The IdP certificate is never returned.
enabledboolean
enforcedboolean
providerstringsaml_generic
configuredAtstring | null
samlobject
entryPointstring
issuerstring | null
signatureAlgorithmstring
allowIdpInitiatedboolean
spEntityIdstring | nullSet on the first sign-in
acsUrlstring | nullSet on the first sign-in
sloUrlstring | nullSet on the first sign-in
attributeMappingobject
emailstring
firstNamestring
lastNamestring
groupsstring
groupFilterobject
enabledboolean
allowedGroupsstring[]
requireAllboolean
groupRoleMappingobject[]
groupstring
roleenumadminmember
scimobjectPresent when SCIM is enabled
enabledboolean
endpointstring | null
hasTokenbooleanWhether a SCIM token has been minted (the token itself is never returned)
tokenCreatedAtstring | null
versionstring
memberSyncobject
autoProvisionbooleanCreate a user on first SSO sign-in when none exists
createdAtstring
updatedAtstring
400saml.allowIdpInitiated is not a boolean
statusinteger
error_codestring
errorstring
403Not an organization admin
statusinteger
error_codestring
errorstring
404Organization not found
statusinteger
error_codestring
errorstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/sso' \
  -X PUT \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": true,
  "enforced": true,
  "provider": "saml_generic",
  "saml": {
    "entryPoint": "https://harborview.okta.com/app/harborview_agnt/exk7q2m9vb4XhR1d5x7/sso/saml",
    "certificate": "MIIDqDCCApCgAwIBAgIGAY...",
    "attributeMapping": {
      "email": "email",
      "firstName": "givenName",
      "lastName": "sn",
      "groups": "groups"
    },
    "groupRoleMapping": [
      {
        "group": "harborview-agnt-admins",
        "role": "admin"
      }
    ]
  },
  "memberSync": {
    "autoProvision": true
  }
}'

Response

{
  "ok": true,
  "organization": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "name": "Ava",
    "generalInfo": "generalinfo"
  }
}
DELETE/organizations/{orgId}/sso

Disable SSO

Turns SSO off and clears the SSO configuration, including the SCIM token. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Responses

200Disabled
ok reqenumtrue
organization reqobject
idstringOrganization id
accountstringYour account id
namestring
generalInfostringBackground about the organization that its users' assistants know
memberCountinteger
defaultTeamstring | nullTeam where organization-scoped provisioning places new users
ssoobjectPresent once an SSO provider is configured. Admins see the full configuration; other members see enabled, enforced and provider only. The IdP certificate is never returned.
enabledboolean
enforcedboolean
providerstringsaml_generic
configuredAtstring | null
samlobject
entryPointstring
issuerstring | null
signatureAlgorithmstring
allowIdpInitiatedboolean
spEntityIdstring | nullSet on the first sign-in
acsUrlstring | nullSet on the first sign-in
sloUrlstring | nullSet on the first sign-in
attributeMappingobject
emailstring
firstNamestring
lastNamestring
groupsstring
groupFilterobject
enabledboolean
allowedGroupsstring[]
requireAllboolean
groupRoleMappingobject[]
groupstring
roleenumadminmember
scimobjectPresent when SCIM is enabled
enabledboolean
endpointstring | null
hasTokenbooleanWhether a SCIM token has been minted (the token itself is never returned)
tokenCreatedAtstring | null
versionstring
memberSyncobject
autoProvisionbooleanCreate a user on first SSO sign-in when none exists
createdAtstring
updatedAtstring
403Not an organization admin
statusinteger
error_codestring
errorstring
404Organization not found
statusinteger
error_codestring
errorstring

Request

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

Response

{
  "ok": true,
  "organization": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "name": "Ava",
    "generalInfo": "generalinfo"
  }
}
GET/organizations/{orgId}/settings/model-tiers

Retrieve default model tiers

Returns the organization's default model tiers for new chats and tasks. `null` means the organization uses the account default.

Path parameters

orgId reqstring

Responses

200Model tiers
ok reqenumtrue
defaultModelTiers reqobject
chat reqenumlowmediumhighultranull
task reqenumlowmediumhighultranull

Request

curl 'https://api.agnt.ai/organizations/<orgId>/settings/model-tiers' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "defaultModelTiers": {
    "chat": "low",
    "task": "low"
  }
}
PATCH/organizations/{orgId}/settings/model-tiers

Update default model tiers

Sets the organization's default model tiers for new chats and tasks: `low`, `medium`, `high` or `ultra`. `null` uses the account default. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Request body

chatenumlowmediumhighultranull
taskenumlowmediumhighultranull

Responses

200Updated
ok reqenumtrue
defaultModelTiers reqobject
chat reqenumlowmediumhighultranull
task reqenumlowmediumhighultranull

Request

curl 'https://api.agnt.ai/organizations/<orgId>/settings/model-tiers' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "chat": "low",
  "task": "low"
}'

Response

{
  "ok": true,
  "defaultModelTiers": {
    "chat": "low",
    "task": "low"
  }
}
GET/organizations/{orgId}/audit-events

List organization audit events

Returns the organization's audit events from the last 30 days, newest first. Filter by actor, action, entity type and time range (`after`, `before`).

Path parameters

orgId reqstring

Query parameters

pageinteger
perPageinteger
actorstringThe actor's email (for actions an assistant took, the assistant's name). Exact match.
actionstring
entityTypestring
afterstring
beforestring

Responses

200Events
ok reqenumtrue
events reqobject[]
id reqstring
account reqstring
organization reqstring
actor reqstring | null
action reqstring
entityType reqstring
entityId reqstring | null
metadata reqobject
createdAt reqstring
pageinteger
perPageinteger
totalinteger

Request

curl 'https://api.agnt.ai/organizations/<orgId>/audit-events' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "events": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "account": "account",
      "organization": "organization",
      "actor": "actor",
      "action": "action",
      "entityType": "entitytype"
    }
  ]
}
GET/organizations/{orgId}/audit-logging

Retrieve audit export settings

Returns whether audit logging is on for the organization, and the S3 destination for exports.

Path parameters

orgId reqstring

Responses

200Config
ok reqenumtrue
auditLogging reqobject
enabled reqboolean
s3BucketArn reqstring | null
s3Prefix reqstring
roleArn reqstring | null
region reqstring | null
lastDeliveredAt reqstring | null
deliveryConfigured reqboolean

Request

curl 'https://api.agnt.ai/organizations/<orgId>/audit-logging' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "auditLogging": {
    "enabled": true,
    "s3BucketArn": "s3bucketarn",
    "s3Prefix": "s3prefix",
    "roleArn": "rolearn",
    "region": "region",
    "lastDeliveredAt": "2026-10-15T14:30:00Z"
  }
}
PUT/organizations/{orgId}/audit-logging

Configure audit export

Turns audit logging on or off and sets the S3 bucket, key prefix, IAM role and region that exports are delivered to.

Path parameters

orgId reqstring

Request body

enabledboolean
s3BucketArnstring | null
s3Prefixstring
roleArnstring | null
regionstring | null

Responses

200Updated
ok reqenumtrue
auditLogging reqobject
enabled reqboolean
s3BucketArn reqstring | null
s3Prefix reqstring
roleArn reqstring | null
region reqstring | null
lastDeliveredAt reqstring | null
deliveryConfigured reqboolean

Request

curl 'https://api.agnt.ai/organizations/<orgId>/audit-logging' \
  -X PUT \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": true,
  "s3BucketArn": "s3bucketarn",
  "s3Prefix": "s3prefix",
  "roleArn": "rolearn"
}'

Response

{
  "ok": true,
  "auditLogging": {
    "enabled": true,
    "s3BucketArn": "s3bucketarn",
    "s3Prefix": "s3prefix",
    "roleArn": "rolearn",
    "region": "region",
    "lastDeliveredAt": "2026-10-15T14:30:00Z"
  }
}
POST/organizations/{orgId}/audit-logging/deliver

Export audit events

Queues an export of audit events to the organization's S3 bucket and returns the job with `202`. `from` and `to` default to the 30 days before the start of today (UTC). Requires audit logging to be on and an S3 destination to be configured.

Path parameters

orgId reqstring

Request body

fromstring
tostring

Responses

202Job queued
ok reqenumtrue
deliveryJob reqobject
id reqstring
organization reqstring
requestedBy reqstring | null
status reqenumpendingrunningcompletedfailed
from reqstring
to reqstring
filesCopied reqnumber
errors reqstring[]
completedAt reqstring | null
createdAt reqstring

Request

curl 'https://api.agnt.ai/organizations/<orgId>/audit-logging/deliver' \
  -X POST \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "from": "2026-10-15T14:30:00Z",
  "to": "2026-10-15T14:30:00Z"
}'
GET/organizations/{orgId}/audit-logging/deliver/{jobId}

Retrieve an audit export

Retrieves the status of an audit export job. Requires an account key or an organization admin.

Path parameters

orgId reqstring
jobId reqstring

Responses

200Delivery job
okboolean
deliveryJobobject
idstring
organizationstring
requestedBystring | nullEmail of the admin who requested it
statusenumpendingrunningcompletedfailed
fromstring
tostring
filesCopiedinteger
deliveryErrorsstring[]
completedAtstring | null
createdAtstring
403Organization admin role required
404Organization or job not found

Request

curl 'https://api.agnt.ai/organizations/<orgId>/audit-logging/deliver/<jobId>' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "deliveryJob": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "organization": "organization",
    "requestedBy": "requestedby",
    "status": "pending"
  }
}
POST/organizations/{orgId}/sso/scim-token

Create a SCIM token

Creates a SCIM bearer token for the organization and returns it once. The previous token stops working. Your identity provider uses it against `https://<your hosted app domain>/api/scim/v2`. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Responses

200New token, shown once
okboolean
scimobject
tokenstring
403Organization admin role required
404Organization not found

Request

curl 'https://api.agnt.ai/organizations/<orgId>/sso/scim-token' \
  -X POST \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "scim": {
    "token": "ak_live_…"
  }
}
GET/organizations/{orgId}/settings/resource-permissions

Retrieve organization policy

Returns the organization's approval mode per action type, which action types are locked for teams and users, and whether assistants can hand work to each other. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Responses

200Policy
resourcePermissionsobject
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.
collaborationobject
peerDelegationbooleanWhether assistants may hand work to the assistants of other users in the organization
peerDelegationLockedByDeveloperbooleanTrue when your account has turned this off for every organization; it cannot be turned on here
403Organization admin role required
404Organization not found

Request

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

Response

{
  "resourcePermissions": {
    "approvalSettings": {
      "matrix": {
        "email_as_user": {
          "mode": null,
          "timeBoxedWindowMin": null
        },
        "email_as_assistant": {
          "mode": null,
          "timeBoxedWindowMin": null
        },
        "messaging": {
          "mode": null,
          "timeBoxedWindowMin": null
        },
        "voice_call_as_assistant": {
          "mode": null,
          "timeBoxedWindowMin": null
        }
      }
    },
    "collaboration": {
      "peerDelegation": true,
      "peerDelegationLockedByDeveloper": true
    }
  }
}
PATCH/organizations/{orgId}/settings/resource-permissions

Update organization policy

Sets the approval mode per action type, the action types teams and users cannot loosen (`matrix.locked`), and assistant-to-assistant collaboration. Cells you send replace those cells, and `locked` replaces the list. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Request body

matrixobjectTop-level here (the team endpoint nests it under approvalSettings). 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.
collaborationobject
peerDelegationbooleanWhether assistants may hand work to the assistants of other users in the organization

Responses

200Updated policy, same shape as GET
resourcePermissionsobject
403Organization admin role required
404Organization not found
409Your account has turned collaboration off, so it cannot be turned on here

Request

curl 'https://api.agnt.ai/organizations/<orgId>/settings/resource-permissions' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "matrix": {
    "email_as_user": {
      "mode": "manual"
    },
    "locked": [
      "email_as_user"
    ]
  }
}'

Response

{
  "resourcePermissions": {}
}
GET/organizations/{orgId}/library

Retrieve the skill library

Returns which skill tiers the organization allows and which skills are enabled. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Responses

200Library
orgLibraryobject
allowedTiersstring[]
enabledSkillsstring[]Skill ids
403Organization admin role required
404Organization not found

Request

curl 'https://api.agnt.ai/organizations/<orgId>/library' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "orgLibrary": {
    "allowedTiers": [
      "agnt"
    ],
    "enabledSkills": [
      "enabledskill"
    ]
  }
}
PATCH/organizations/{orgId}/library

Update the skill library

Sets which skill tiers the organization allows and which skills are enabled. `bulkEnableTier` enables every listed skill in a tier. Requires an account key or an organization admin.

Path parameters

orgId reqstring

Request body

allowedTiersstring[]
enabledSkillsstring[]Skill ids; replaces the list
bulkEnableTierenumagntofficialcommunity

Responses

200Library
orgLibraryobject
allowedTiersstring[]
enabledSkillsstring[]
403Organization admin role required
404Organization not found

Request

curl 'https://api.agnt.ai/organizations/<orgId>/library' \
  -X PATCH \
  -H "Authorization: Bearer ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
  "allowedTiers": [
    "agnt"
  ],
  "enabledSkills": [
    "enabledskill"
  ],
  "bulkEnableTier": "agnt"
}'

Response

{
  "orgLibrary": {
    "allowedTiers": [
      "allowedtier"
    ],
    "enabledSkills": [
      "enabledskill"
    ]
  }
}
GET/audit-events

List audit events

Returns the audit trail for your whole account, newest first, with filters and pagination. Requires an account key.

Query parameters

actorstringThe actor's email (for actions an assistant took, the assistant's name). Exact match.
entityTypestringFilter by entity type, such as organization or team
entityIdstringFilter by entity id
actionstringFilter by action, such as sso.disabled
afterstringCreated at or after this time
beforestringCreated at or before this time
pageintegerPage number
perPageintegerPage size

Responses

200Audit events
okboolean
eventsobject[]
idstring
accountstring
actorstring | null
actionstring
entityTypestring
entityIdstring | null
metadataobject
createdAtstring
pageinteger
perPageinteger
totalinteger

Request

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

Response

{
  "ok": true,
  "events": [
    {
      "id": "6660c4a1f2e3b7d8a9c01234",
      "account": "account",
      "actor": "actor",
      "action": "action"
    }
  ],
  "page": 1,
  "perPage": 20
}
GET/audit-events/{eventId}

Retrieve an audit event

Retrieves one audit event from your account.

Path parameters

eventId reqstring

Responses

200Audit event
okboolean
eventobject
idstring
accountstring
actorstring | null
actionstring
entityTypestring
entityIdstring | null
metadataobject
createdAtstring
404Audit event not found

Request

curl 'https://api.agnt.ai/audit-events/<eventId>' \
  -H "Authorization: Bearer ak_live_..."

Response

{
  "ok": true,
  "event": {
    "id": "6660c4a1f2e3b7d8a9c01234",
    "account": "account",
    "actor": "actor",
    "action": "action"
  }
}