Integrations
Connect external financial accounts via Plaid or custom integrations. The system supports checking, savings, credit card, loan, and investment accounts. Transaction sync is cursor-based with automatic retry on rate limits (429) and transient errors.
Plaid Link Flow
- Create link token —
POST /api/plaid/link-tokenreturns a short-lived token - User completes Plaid Link — browser-side widget
- Exchange token —
POST /api/plaid/exchange-tokenstores the permanent access token - Sync transactions —
POST /api/plaid/syncor automatic via thesync-connectionsscheduled job
Connections API
The connections API manages integration connections and provides sync status visibility. All endpoints require entityId.
List Connections
GET /api/connections?entityId=...Returns all connections for the entity with their current status, last sync time, provider, and configuration.
Sync Summary
GET /api/connections?entityId=...&action=summaryReturns a lightweight overview for dashboards and status indicators:
| Field | Type | Description |
|---|---|---|
total | number | Total non-disconnected connections |
active | number | Connections with ACTIVE status |
syncing | boolean | Whether any sync is currently running |
lastSyncAt | timestamp | Most recent sync completion across all connections |
nextSyncAt | timestamp | Earliest scheduled next sync (based on sync frequency) |
errorCount | number | Connections in ERROR status or with last sync failed |
Sync Logs & Health
GET /api/connections?entityId=...&action=logs&connectionId=...&limit=20
GET /api/connections?entityId=...&action=health&connectionId=...Write Operations
All write operations use POST /api/connections:
| Action | Required Fields | Description |
|---|---|---|
create | provider, displayName | Create a new connection |
sync | connectionId | Trigger a manual sync |
update | connectionId | Update connection settings (displayName, config, status, syncFrequency) |
delete | connectionId | Remove a connection |
Real-Time Sync Events
Sync progress is broadcast via Pusher on the entity-{entityId} channel:
| Event | Payload |
|---|---|
sync:started | connectionId, provider |
sync:progress | connectionId, transactionsCreated, accountsSynced |
sync:completed | connectionId, transactionsCreated, duplicatesSkipped, quarantined, errors |
sync:failed | connectionId, error |
Import Batches API
Query aggregated import batch history or drill down into a specific batch.
List Batches
GET /api/import-batches?entityId=...&limit=30&offset=0Returns batches grouped by importBatchId with:
| Field | Description |
|---|---|
importBatchId | Unique batch identifier |
importMethod | PLAID, CSV, MANUAL, API, etc. |
count | Total transactions in the batch |
minDate / maxDate | Date range of transactions |
firstCreated | When the batch was imported |
unmatched / matched / confirmed / excluded | Status breakdown counts |
treasuryAccountId / treasuryAccountName | Linked account (if applicable) |
Batch Drill-Down
GET /api/import-batches?entityId=...&batchId=batch-uuidReturns up to 200 individual transactions within the batch, each with date, description, amount, currency, status, counterparty, and match info.
Plaid Endpoints
Create a Plaid Link token
API key for programmatic access
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://app.axiomatic.software/api/plaid/link-token" \ -H "Content-Type: application/json" \ -d '{ "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5" }'{
"linkToken": "string"
}{
"error": "string"
}Exchange Plaid public token for access token
API key for programmatic access
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://app.axiomatic.software/api/plaid/exchange-token" \ -H "Content-Type: application/json" \ -d '{ "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "publicToken": "string", "institutionId": "string" }'{}{
"error": "string"
}Sync transactions from Plaid
API key for programmatic access
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://app.axiomatic.software/api/plaid/sync" \ -H "Content-Type: application/json" \ -d '{ "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5", "linkedAccountId": "61224e78-a02f-4040-ac7e-3dd716a4b677" }'{
"added": 0,
"modified": 0,
"removed": 0,
"duplicatesSkipped": 0
}{
"error": "string"
}