Conventions
Requests
Section titled “Requests”- Base URL:
https://app.commitly.com/api. All paths end with a slash; without it, the API answers with a redirect and the request body is lost. - JSON in, JSON out. Amounts are decimals with two places; send them as numbers. Dates are
YYYY-MM-DD. - Negative amounts are outflows, positive amounts inflows.
- Bulk calls: several endpoints accept a JSON array, for example to create transactions or change their categories (up to 1,000 items per call).
Pagination
Section titled “Pagination”Lists of banks, transactions, invoices and budgets are paginated:
{ "count": 3063, "next": "…?page=2", "previous": null, "results": [ … ] }pageandpage_size(default 100, maximum 1,000).- For invoices and budgets,
resultsis an object with the list inside (invoicesorbudgets) plus totals. - Categories and plans come as a plain list without pagination.
- Always call
https://app.commitly.com/api. If anextlink points to another host, take only the page number from it.
Errors
Section titled “Errors”| Status | Meaning | Body |
|---|---|---|
400 |
Validation failed | {"field": ["message"]} or {"non_field_errors": ["message"]}; for arrays one object per item |
401 |
Access token invalid or expired | {"detail": "Invalid token."} |
403 |
No access token, or not allowed (for example a committed plan) | {"detail": "…"} |
404 |
Not found | {"detail": "…"} |
500 |
Server error | Not JSON |
Language
Section titled “Language”Messages are German by default. Send Accept-Language: en (or de, it) to get them in another language. React to status codes and field names, not to message text.
Rate limits
Section titled “Rate limits”Please avoid excessive request rates: cache the access token, use page_size instead of many small pages, and sync changes rather than full data sets where you can.

