canonical: https://jentic.com/apis/codat.io/bank-feeds

# Codat Bank Feeds

Codat's Bank Feeds API lets banks, neobanks, and spend management platforms push transaction data directly into a customer's accounting software as a native bank feed. It manages company and connection lifecycle, source-to-target account mapping, sync configuration, and transaction posting so an end-customer's QuickBooks, Xero, or Sage automatically receives the bank's transactions without CSV imports. The API also exposes sync status endpoints so platforms can monitor whether each daily push reached the destination ledger.

## For AI agents

Push bank transactions from a financial institution or fintech platform directly into a customer's accounting software as a native bank feed.

## Scope

Does not handle reading the accounting ledger, payment processing, or direct bank account aggregation - use for posting bank transactions into a customer's accounting platform as a native bank feed only.

## Capabilities

- Provision a Bank Feeds connection between a bank account and a customer's accounting platform
- Map source bank accounts to target ledger accounts in QuickBooks, Xero, or Sage
- Post bank transactions to the customer's accounting software via the configured feed
- Trigger and monitor scheduled syncs to confirm transactions reached the destination ledger
- Manage company and connection records so platforms can track each end-customer's feed
- Configure feed-level settings such as currency, source account, and posting cadence
- Retrieve company information and authorisation tokens needed for hosted bank feed onboarding

## Use cases

### Bank-Owned Accounting Bank Feed

Banks and neobanks use the Bank Feeds API to deliver bank transactions to small business customers' accounting software as a native feed, branded as the bank's own integration. The /companies/{companyId}/sync/banking/config and /sync/banking endpoints handle configuration and posting so the bank can offer same-day reconciliation in QuickBooks or Xero without building per-platform connectors.

Example prompt: Create a bank-feeds connection for company {companyId}, map source account {sourceId} to target ledger account, and run an initial sync.

### Spend Management Reconciliation

Spend management and corporate card platforms use Bank Feeds to write the platform's own transactions into the customer's accounting ledger. Instead of asking finance teams to import CSVs, the platform posts each transaction through the configured feed so they appear in the customer's QuickBooks or Xero bank-feed view ready for matching against bills.

Example prompt: Post a batch of 50 card transactions for company {companyId} to the configured bank feed and confirm the sync status reached 'Success'.

### Embedded Finance Treasury Visibility

Embedded finance providers running treasury or operating-account products use Bank Feeds so customers see their balance and transactions inside their existing accounting software. The /companies/{companyId}/connections endpoints manage connection lifecycle and the /sync/banking/syncs/lastSuccessful/status endpoint lets the platform display feed health back to the customer.

Example prompt: List all bank-feeds connections for company {companyId}, then fetch the last successful sync status for each.

### AI Agent Sync Monitor

AI agents that monitor finance integrations use Bank Feeds through Jentic to detect failed syncs and remediate them. The agent searches Jentic for 'check bank feed sync status', loads the operation, and polls /sync/banking/syncs/lastSuccessful/status across companies, raising tickets when a sync has not completed in 24 hours. Jentic handles credential isolation so the Codat API key never enters the agent runtime.

Example prompt: Search Jentic for 'last successful bank feed sync', load the operation, and report any company where the last sync is older than 24 hours.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /companies | Create a company record for a bank-feed customer |
| POST | /companies/{companyId}/connections | Create a connection to the target accounting platform |
| GET | /companies/{companyId}/connections/{connectionId}/data/bankAccounts | List bank accounts visible to the connection |
| GET | /companies/{companyId}/sync/banking/config | Retrieve the current bank-feed sync configuration |
| GET | /companies/{companyId}/sync/banking/syncs/lastSuccessful/status | Check the status of the most recent successful sync |

## Key resources

- **Companies** — Create, read, update, and delete the company records that own bank-feed connections
- **Connections** — Manage the link between a Codat company and a target accounting platform
- **Bank accounts** — List and create bank accounts visible in the customer's accounting software
- **Source accounts** — Define the bank-side accounts that feed into the target ledger accounts
- **Account mapping** — Map source bank accounts to target accounting ledger accounts
- **Transactions** — Post bank transactions to the configured feed for delivery to the accounting platform
- **Sync** — Trigger and monitor sync runs and inspect last successful sync status

## Why Jentic

- **Setup:** Wiring Codat Bank Feeds by hand means building its Basic API-key header, targeting api.codat.io, and managing company creation, connection setup, and sync-status polling yourself. Through Jentic you install once, import Bank Feeds from the API Directory, store the Codat API key once, and your agent calls it.
- **Permission scoping:** Bank Feeds puts the company id in the URL path (/companies/{companyId}/connections/... and /companies/{companyId}/sync/banking/...), so a rule can pin your agent to one company: it manages that company's bank-feed connections and reads its sync status and nothing else. You choose the operations it may call, so creating new connections is only in the allowed set if you add it.
- **Credential handling:** Your Codat API key is stored once, encrypted, by your own Jentic One instance and injected at execution time as the Basic Authorization header. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'post bank transactions to accounting software' or 'check the last successful banking sync', and Jentic returns the matching Bank Feeds operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Codat Banking API** — Reads bank data from connected accounts rather than pushing transactions into accounting platforms
- **Codat Accounting API** — Provides full read and write access to the accounting ledger that Bank Feeds posts into
- **Codat Sync for Expenses** — Pushes expense transactions and receipts into accounting platforms

## FAQ

### What authentication does the Codat Bank Feeds API use?

The API uses an API key passed in the Authorization header as 'Basic <base64-encoded-key>'. The single security scheme in the spec is named auth_header. Through Jentic, the Codat API key is stored encrypted in the vault and the Authorization header is constructed inside Jentic, so the agent never sees the raw key.

### Can I post transactions into QuickBooks with the Bank Feeds API?

Yes. After creating a connection and mapping source accounts to target ledger accounts, post transactions via the bank-feeds transactions endpoints under /companies/{companyId}. Transactions then appear in the customer's QuickBooks bank-feed view ready to match against bills and invoices.

### What are the rate limits for the Codat Bank Feeds API?

Codat does not publish a fixed rate limit in the OpenAPI spec; limits are governed at the company and connection level and depend on the destination accounting platform's own limits. Codat returns HTTP 429 with a Retry-After header when limits are hit and recommends exponential backoff for retries.

### How do I check whether a bank-feed sync succeeded through Jentic?

Search Jentic for 'last successful bank feed sync', load the GET /companies/{companyId}/sync/banking/syncs/lastSuccessful/status operation, and execute it with the company ID. Install with pip install jentic and use the standard async search, load, and execute flow.

### Which accounting platforms does the Bank Feeds API support?

Codat's Bank Feeds product supports QuickBooks Online, Xero, and Sage as primary destinations, with the same endpoint surface used regardless of target platform. The /companies/{companyId}/connections call selects the target during connection creation.

### Can I map multiple source bank accounts to one accounting ledger account?

Yes. The /companies/{companyId}/connections/{connectionId}/sync/banking endpoints expose source-to-target account mapping so multiple source accounts can feed into a single target account in the customer's chart of accounts, depending on the destination platform's rules.

### Can I limit what my agent is allowed to do with the Codat Bank Feeds API?

Yes. Because you run Jentic One yourself, your own rules decide which Bank Feeds operations and credentials the agent may use. Since the company id sits in the URL path (/companies/{companyId}/connections/... and /companies/{companyId}/sync/banking/...), you can pin the agent to a single company so it only manages that company's connections and reads its sync status. You also pick the exact operations it may call, so a write like creating a new connection is available only if you add it to the allowed set, and the Codat API key stays with your instance rather than the agent.
