Integrations
Connect Xero, Brex, Ramp, and other financial platforms to sync transactions automatically.
Overview
Axiomatic's connector framework syncs transaction data from external financial platforms into your ledger. Each connection is configured per entity with provider-specific credentials and an optional auto-sync schedule.
Supported Integrations
| Provider | Auth Type | Data Synced |
|---|---|---|
| Xero | OAuth 2.0 | Bank transactions, invoices |
| Brex | API key | Card transactions, cash transactions |
| Ramp | API key | Card transactions, reimbursements |
| Plaid | OAuth (Link) | Bank, credit card, loan, investment accounts |
| Mercury | API | Bank transactions |
| Stripe | API key | Revenue transactions |
| QuickBooks | OAuth 2.0 | Accounting data |
| CSV Upload | — | Manual file import |
| Custom Webhook | — | Inbound event payloads |
Setting Up Xero
Xero uses OAuth 2.0 for authentication.
- Navigate to Settings → Connections and click New Connection
- Select Xero as the provider
- Click Connect — you'll be redirected to Xero's authorization page
- Sign in to your Xero account and authorize Axiomatic
- After redirect, Axiomatic stores your access token, refresh token, and tenant ID
- The connection appears as Active and is ready to sync
Xero Configuration
| Option | Default | Description |
|---|---|---|
syncBankTransactions | true | Sync authorized and reconciled bank transactions |
syncInvoices | true | Sync invoices (excluding drafts and deleted) |
Tokens refresh automatically before expiration.
Setting Up Brex
Brex uses an API key for authentication.
- In Brex, go to Developer → API Keys and create a new key with read access to transactions
- In Axiomatic, navigate to Settings → Connections and click New Connection
- Select Brex as the provider
- Enter your API token
- Click Save
Brex syncs both card transactions and cash transactions from your primary accounts.
Setting Up Ramp
Ramp uses an API key for authentication.
- In Ramp, generate an API token from the developer settings
- In Axiomatic, navigate to Settings → Connections and click New Connection
- Select Ramp as the provider
- Enter your API token
- Click Save
Ramp syncs cleared card transactions and reimbursements.
Auto-Sync Configuration
Each connection can be configured with a sync frequency:
| Frequency | Behavior |
|---|---|
| Manual | Sync only when you click Sync Now |
| Hourly | Automatically syncs every hour |
| Daily | Automatically syncs every 24 hours |
| Realtime | Syncs continuously via webhooks (where supported) |
A scheduled job checks for connections that are due for sync based on their frequency and lastSyncAt timestamp. Only connections with Active status are included.
To change the sync frequency, edit the connection in Settings → Connections.
Manual Sync
Click Sync Now on any connection to trigger an immediate sync regardless of the configured frequency.
Sync Status and Monitoring
Each connection tracks its sync state:
| Field | Description |
|---|---|
| Status | ACTIVE, PAUSED, ERROR, DISCONNECTED |
| Last Sync | Timestamp of the most recent sync |
| Last Sync Status | SUCCESS, PARTIAL, FAILED, RUNNING |
| Last Sync Error | Error message if the last sync failed |
Sync Logs
View detailed sync history by clicking on a connection. Each log entry shows:
- Start and completion time
- Transactions created
- Duplicates skipped
- Quarantined transactions (needing review)
- Errors encountered
Real-Time Notifications
Sync progress broadcasts via Pusher on the entity channel:
| Event | Description |
|---|---|
sync:started | Sync has begun |
sync:progress | In-progress counts |
sync:completed | Final totals including duplicates and errors |
sync:failed | Failure with error details |
Troubleshooting Connection Issues
Connection Shows ERROR Status
The connection status changes to ERROR when a sync fails completely. Common causes:
- Expired credentials — Re-authorize OAuth connections (Xero, QuickBooks) or regenerate the API key (Brex, Ramp)
- Revoked access — Verify the integration is still authorized in the provider's settings
- Rate limiting — The system retries on HTTP 429 responses automatically, but sustained rate limiting may cause failures
To resolve: fix the underlying issue, then click Sync Now to retry. A successful sync resets the status to ACTIVE.
Partial Sync
A PARTIAL sync status means some data was synced but errors occurred for a subset. Check the sync logs for details on which transactions failed and why.
Duplicate Transactions
The sync engine uses provider-specific transaction IDs to deduplicate. If you see duplicate entries, check whether the same account is connected through multiple providers (e.g. both Plaid and a direct integration).
Quarantined Transactions
Transactions that can't be processed normally are quarantined for manual review. Common reasons include missing account mappings or unrecognized transaction types.
Migrating from QuickBooks / Xero
When migrating from an existing accounting system, Axiomatic supports two migration modes via the migration wizard at Import → Migrate:
Start Fresh from a Date (Cutover)
Choose a go-live date and import a trial balance as of that date. Accounting periods are generated from the cutover date forward only — no historical periods to close or audit. Bank feeds sync transactions from the cutover date forward.
This is the recommended approach for most companies. Your historical data stays in your previous system.
Import Full History
Sync all available historical transactions from your bank connections. Historical periods are automatically closed as Migrated, allowing you to start closing current periods immediately without auditing imported data.
Use this when you want a complete audit trail in Axiomatic.
For a detailed walkthrough, see the Migration Guide.
Disconnecting
You can disconnect a connection from Import & Sync or Settings → Integrations. Two modes are available:
Disconnect Only
Stops syncing but preserves all imported transactions, events, and journal entries. The linked accounts are deactivated and the Plaid access token is revoked. You can reconnect later and resume syncing.
Disconnect & Remove All Data
Permanently deletes all data imported through this connection:
- Staged transactions
- Events (auto-promoted and opening balance)
- Journal entries and journal lines
- Match history, execution traces, and canonical settlements
- Linked account balances and the linked accounts themselves
A preview screen shows exactly what will be deleted before you confirm. The purge is atomic — either everything is deleted or nothing is.
Hard-closed accounting periods will block the purge if any journal entries fall within them, since hard-closed periods cannot be reopened. Soft-closed periods do not block purges.