Response envelope
Successful responses wrap the payload indata, with meta present when there’s pagination:
Pagination
List endpoints takelimit (default 50, max 200) and offset. When a page comes back full, meta.pagination.nextOffset tells you where to continue; when it’s null, you’ve reached the end.
Amount sign convention
Bank transaction amounts use the banking convention throughout: positive = money out (expense), negative = money in (income). Financial statements use normal accounting presentation. This holds no matter how a transaction reached Cherry. A statement’s “deposits” and “withdrawals” columns are mapped to this convention once, at the point Cherry reads the statement, so an uploaded statement and a pushed row are the same shape by the time you read them back.Currency
Every transaction carries its owncurrency as a 3-letter ISO 4217 code. Cherry never assumes USD: pushed accounts declare their currency, and uploaded statements are read in whatever currency the statement prints.
Cherry stores what it was given. It does not convert between currencies.
Dates
All dates are ISOYYYY-MM-DD. Transaction queries default to the last 30 days when no range is given.
Rate limits
Limits apply per API key, in three buckets:
A
429 includes retryAfterSeconds in the body and a Retry-After header.
Idempotency
Pushed transactions are idempotent: supply your ownid per transaction, or omit it and Cherry derives a stable identity from date, amount, and description. Re-sending the same batch never creates duplicates.