Skip to main content
If you don’t want to connect a bank feed — or your bank isn’t supported — you can create accounts and push transactions yourself. They flow through the same pipeline as connected accounts: Cherry categorizes them, books journal entries, and includes them in your statements. Both endpoints require a write key.

1. Create the accounts

One call per institution, up to 20 accounts at a time. Re-posting the same institution updates it in place — this call is safe to repeat.
externalId is your identifier for the account — you’ll reference it when pushing transactions. The opening balance is posted to the ledger at its declared date, once.

2. Push transactions

Up to 1,000 per request, 5 MB max body.
Sign convention: positive is money out, negative is money in. A $2,000 customer payment received is -2000.00.

Idempotency

Give each transaction a stable id from your system and re-sends become no-ops. If you omit id, Cherry derives one from date, amount, and description — identical rows still dedupe, but two genuinely distinct transactions with identical date, amount, and description would collapse, so supplying your own id is better.

3. Cherry does the accounting

Categorization and journal-entry booking run asynchronously, usually within minutes. You’ll see results appear on the pushed rows:
If a categorization is wrong, correct it — Cherry remembers the correction for future transactions from the same merchant:
Valid category values are the account numbers from GET /v1/accounts (see the API Reference tab), plus "transfer" for internal transfers between your own accounts.