Integrations
13 operations. All areas
- GET /v1/integrations/providers
- GET /v1/integrations/connections
- POST /v1/integrations/connections
- POST /v1/integrations/connections/complete
- GET /v1/integrations/connections/{id}
- POST /v1/integrations/connections/{id}/settings
- POST /v1/integrations/connections/{id}/sync
- POST /v1/integrations/connections/{id}/disconnect
- GET /v1/integrations/connections/{id}/mappings
- POST /v1/integrations/connections/{id}/mappings
- POST /v1/integrations/connections/{id}/mappings/approve
- GET /v1/integrations/connections/{id}/sync-runs
- GET /v1/integrations/connections/{id}/objects
GET/v1/integrations/providers
Every integration Evenbead has or plans: Built ones this deployment can connect, and Coming ones with their roadmap wave
- Operation
listIntegrationProviders - Scope: read
- Read
- Responses
200Providers (object)- Errors
400,401,403,429,500(Error:error.type,message)
GET/v1/integrations/connections
This company's connections with their health (last sync, errors, "Reconnect"), clearing balance against the provider's, proposals waiting and mapping gaps
- Operation
listIntegrationConnections - Scope: read
- Read
- Parameters
include_disconnectedquery, boolean
- Responses
200Connections (object)- Errors
400,401,403,429,500(Error:error.type,message)
POST/v1/integrations/connections
Start connecting a provider: returns the provider's consent URL (OAuth 2.0 with PKCE; valid 15 minutes, shown once). The person consents there; the provider sends them back to Evenbead, which completes the connection. People with admin access only (a firm member needs "Manage integrations"); agents and AI apps are refused.
- Operation
startIntegrationConnect - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Request body
providerstring, requiredpayout_bank_account_idstring
- Responses
201Started (object)- Errors
400,401,403,409,422,429,500(Error:error.type,message)
POST/v1/integrations/connections/complete
Finish a connect with what the provider sent back (state and code, or error): tokens are exchanged with the PKCE verifier and sealed; the connection gets its own agent ("<Provider> sync", read + propose, the posting threshold given, 0 by default), its clearing account and the default mapping. Until a person approves the mapping, everything it syncs is a proposal.
- Operation
completeIntegrationConnect - Scope: admin
- Write: needs Idempotency-Key (or dry_run)
- Request body
statestring, requiredcodestringerrorstringposting_threshold_centsinteger
- Responses
201Connected (object)- Errors
400,401,403,409,422,429,500(Error:error.type,message)
GET/v1/integrations/connections/{id}
One connection: health, mapping, the latest syncs
- Operation
getIntegrationConnection - Scope: read
- Read
- Parameters
idpath, string, required
- Responses
200Connection (object)- Errors
400,401,403,404,429,500(Error:error.type,message)
POST/v1/integrations/connections/{id}/settings
A connection's settings: the bank account its payouts arrive in (payouts are matched to that account's deposits), its agent's posting threshold (at or under it, routine postings post once the mapping is approved; above it they wait as proposals), pause or resume. People with admin access; audited.
- Operation
updateIntegrationSettings - Scope: admin
- Write: sets a value, no Idempotency-Key needed
- Parameters
idpath, string, required
- Request body
payout_bank_account_idstring | nullposting_threshold_centsintegerpausedboolean
- Responses
200Settings (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
POST/v1/integrations/connections/{id}/sync
Sync now (within a minute or two, by the integrations worker)
- Operation
requestIntegrationSync - Scope: propose
- Write: sets a value, no Idempotency-Key needed
- Parameters
idpath, string, required
- Request body
Empty object
{}.- Responses
202Requested (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
POST/v1/integrations/connections/{id}/disconnect
Disconnect: access is revoked at the provider, the tokens deleted, syncing stops and the connection's agent is revoked. Everything already in the books stays. Connecting the same account again later never posts anything twice.
- Operation
disconnectIntegration - Scope: admin
- Write: sets a value, no Idempotency-Key needed
- Parameters
idpath, string, required
- Request body
reasonstring, required
- Responses
200Disconnected (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
GET/v1/integrations/connections/{id}/mappings
The mapping: sales categories, products, fees, taxes, discounts, shipping, tips, refunds and payouts to accounts (with class and project); '*' is each kind's default; keys seen in syncs without their own account are listed
- Operation
listIntegrationMappings - Scope: read
- Read
- Parameters
idpath, string, required
- Responses
200Mappings (object)- Errors
400,401,403,404,429,500(Error:error.type,message)
POST/v1/integrations/connections/{id}/mappings
Map one key to an account (and optionally a class and a project); account_code null makes a key use its kind's default. Changing the mapping withdraws its approval until a person approves it again. People with admin access; audited.
- Operation
setIntegrationMapping - Scope: admin
- Write: sets a value, no Idempotency-Key needed
- Parameters
idpath, string, required
- Request body
kind"category" | "product" | "discount" | "shipping" | "tax" | "tip" | "fee" | "refund" | "payout", requiredsource_keystring, requiredaccount_codestring | null, requiredclass_namestring | nullproject_namestring | null
- Responses
200Mapped (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
POST/v1/integrations/connections/{id}/mappings/approve
Approve the mapping as it is: from now on routine postings at or under the agent's threshold post on their own (corrections of changed source objects always wait for a person). People with admin access; audited.
- Operation
approveIntegrationMapping - Scope: admin
- Write: sets a value, no Idempotency-Key needed
- Parameters
idpath, string, required
- Request body
notestring
- Responses
200Approved (object)- Errors
400,401,403,404,409,422,429,500(Error:error.type,message)
GET/v1/integrations/connections/{id}/sync-runs
The sync log, newest first: trigger, outcome, counts (fetched, posted, proposed, corrected, unchanged, pending, needs review), errors
- Operation
listIntegrationSyncRuns - Scope: read
- Read
- Parameters
idpath, string, requiredlimitquery, integer
- Responses
200Runs (object)- Errors
400,401,403,404,429,500(Error:error.type,message)
GET/v1/integrations/connections/{id}/objects
What the connection read (sales, refunds, fees, payouts by the provider's id) and what each became: posted, proposed, pending, needs review (with why), skipped, rejected; with its postings and, for payouts, the matched bank line
- Operation
listIntegrationObjects - Scope: read
- Read
- Parameters
idpath, string, requiredstatusquery, "posted" | "proposed" | "pending" | "needs_review" | "skipped" | "rejected"limitquery, integer
- Responses
200Objects (object)- Errors
400,401,403,404,429,500(Error:error.type,message)