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
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
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
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
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
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
Request body
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
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
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
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
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
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
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
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
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
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
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
Request body
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
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
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
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
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
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
Responses
200Audit event
okboolean
eventobject
idstring
accountstring
actorstring | null
actionstring
entityTypestring
entityIdstring | null
metadataobject
createdAtstring
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"
}
}