Ai apps
9 operations. All areas
- POST /v1/ai-connections
- GET /v1/ai-connections
- GET /v1/ai-connections/{id}
- POST /v1/ai-connections/{id}/level
- POST /v1/ai-connections/{id}/disconnect
- POST /v1/firm/ai-connections
- GET /v1/firm/ai-connections
- POST /v1/firm/ai-connections/{id}/level
- POST /v1/firm/ai-connections/{id}/disconnect
POST/v1/ai-connections
Approve an AI app's authorization request (the consent screen): creates the app's agent and connection at the chosen level and returns the authorization code for the redirect. A company person with the admin scope, in a browser session only. People only (agents, and AI apps themselves, are refused).
- Operation
createAiConnection - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Request body
client_idstring, required The OAuth client (ebc_... from registration, or its metadata document URL)redirect_uristring, required Exactly the redirect URI of the authorization requestcode_challengestring, required PKCE S256 challengecode_challenge_method"S256", requiredresourcestring RFC 8707 resource (the MCP endpoint); omitted: the MCP endpointscopestringlevel"read" | "suggest" | "post", required read: Read only. suggest: proposals only, never posts (the default). post: Post within limits (per-entry and daily caps, optional account scope; owner's equity always waits for a person).per_entry_cap_centsinteger Post within limits: an entry above this becomes a proposaldaily_cap_centsinteger Post within limits: auto-posted total per company per day (UTC); over it, proposalsaccount_codesarray of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)
- Responses
201Connected (object)- Errors
400,401,403,409,422,429,500(Error:error.type,message)
GET/v1/ai-connections
Connected AI apps: the company's own and accounting firms' connections that reach it, with level, last use and recent actions. People only (agents, and AI apps themselves, are refused).
- Operation
listAiConnections - Scope: read
- Read
- Parameters
include_endedquery, boolean
- Responses
200Connections (object)- Errors
400,401,403,429,500(Error:error.type,message)
GET/v1/ai-connections/{id}
One connected AI app with its recent actions. People only (agents, and AI apps themselves, are refused).
- Operation
getAiConnection - Scope: read
- Read
- Parameters
idpath, string, required
- Responses
200Connection (object)- Errors
400,401,403,404,429,500(Error:error.type,message)
POST/v1/ai-connections/{id}/level
Change a connected AI app's level or limits; its live access tokens are revoked so the next refresh carries the new level. People only (agents, and AI apps themselves, are refused).
- Operation
updateAiConnection - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
level"read" | "suggest" | "post", required read: Read only. suggest: proposals only, never posts (the default). post: Post within limits (per-entry and daily caps, optional account scope; owner's equity always waits for a person).per_entry_cap_centsinteger Post within limits: an entry above this becomes a proposaldaily_cap_centsinteger Post within limits: auto-posted total per company per day (UTC); over it, proposalsaccount_codesarray of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)
- Responses
200Changed (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
POST/v1/ai-connections/{id}/disconnect
Disconnect an AI app: its agent, access and refresh tokens are revoked at once. Final. People only (agents, and AI apps themselves, are refused).
- Operation
disconnectAiConnection - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
reasonstring, required
- Responses
200Disconnected (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
POST/v1/firm/ai-connections
Approve an AI app for some of the firm's clients (the consent screen, firm admin, browser session only): a firm agent assigned to each client at the chosen level.
- Operation
createFirmAiConnection - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Request body
client_idstring, required The OAuth client (ebc_... from registration, or its metadata document URL)redirect_uristring, required Exactly the redirect URI of the authorization requestcode_challengestring, required PKCE S256 challengecode_challenge_method"S256", requiredresourcestring RFC 8707 resource (the MCP endpoint); omitted: the MCP endpointscopestringlevel"read" | "suggest" | "post", required read: Read only. suggest: proposals only, never posts (the default). post: Post within limits (per-entry and daily caps, optional account scope; owner's equity always waits for a person).per_entry_cap_centsinteger Post within limits: an entry above this becomes a proposaldaily_cap_centsinteger Post within limits: auto-posted total per company per day (UTC); over it, proposalsaccount_codesarray of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)company_idsarray of string, required
- Responses
201Connected (object)- Errors
400,401,403,409,422,429,500(Error:error.type,message)
GET/v1/firm/ai-connections
The firm's connected AI apps across clients (firm members).
- Operation
listFirmAiConnections - Scope: read
- Read
- Parameters
include_endedquery, boolean
- Responses
200Connections (object)- Errors
400,401,403,429,500(Error:error.type,message)
POST/v1/firm/ai-connections/{id}/level
Change a firm connection's level or limits in every client it reaches (firm admin).
- Operation
updateFirmAiConnection - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
level"read" | "suggest" | "post", required read: Read only. suggest: proposals only, never posts (the default). post: Post within limits (per-entry and daily caps, optional account scope; owner's equity always waits for a person).per_entry_cap_centsinteger Post within limits: an entry above this becomes a proposaldaily_cap_centsinteger Post within limits: auto-posted total per company per day (UTC); over it, proposalsaccount_codesarray of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)
- Responses
200Changed (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
POST/v1/firm/ai-connections/{id}/disconnect
Disconnect a firm's AI app everywhere (firm admin). Final.
- Operation
disconnectFirmAiConnection - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Parameters
idpath, string, required
- Request body
reasonstring, required
- Responses
200Disconnected (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)