Evenbead docs

Ai apps

9 operations. All areas

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_id string, required The OAuth client (ebc_... from registration, or its metadata document URL)
  • redirect_uri string, required Exactly the redirect URI of the authorization request
  • code_challenge string, required PKCE S256 challenge
  • code_challenge_method "S256", required
  • resource string RFC 8707 resource (the MCP endpoint); omitted: the MCP endpoint
  • scope string
  • 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_cents integer Post within limits: an entry above this becomes a proposal
  • daily_cap_cents integer Post within limits: auto-posted total per company per day (UTC); over it, proposals
  • account_codes array of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)
Responses
  • 201 Connected (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_ended query, boolean
Responses
  • 200 Connections (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
  • id path, string, required
Responses
  • 200 Connection (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
  • id path, 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_cents integer Post within limits: an entry above this becomes a proposal
  • daily_cap_cents integer Post within limits: auto-posted total per company per day (UTC); over it, proposals
  • account_codes array of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)
Responses
  • 200 Changed (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
  • id path, string, required
Request body
  • reason string, required
Responses
  • 200 Disconnected (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_id string, required The OAuth client (ebc_... from registration, or its metadata document URL)
  • redirect_uri string, required Exactly the redirect URI of the authorization request
  • code_challenge string, required PKCE S256 challenge
  • code_challenge_method "S256", required
  • resource string RFC 8707 resource (the MCP endpoint); omitted: the MCP endpoint
  • scope string
  • 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_cents integer Post within limits: an entry above this becomes a proposal
  • daily_cap_cents integer Post within limits: auto-posted total per company per day (UTC); over it, proposals
  • account_codes array of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)
  • company_ids array of string, required
Responses
  • 201 Connected (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_ended query, boolean
Responses
  • 200 Connections (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
  • id path, 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_cents integer Post within limits: an entry above this becomes a proposal
  • daily_cap_cents integer Post within limits: auto-posted total per company per day (UTC); over it, proposals
  • account_codes array of string Post within limits: the accounts it may post to on its own (omit: any; equity is never allowed)
Responses
  • 200 Changed (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
  • id path, string, required
Request body
  • reason string, required
Responses
  • 200 Disconnected (object)
  • Errors 400, 401, 403, 404, 409, 422, 429, 500 (Error: error.type, message)