Skip to content

Conventions

  • 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).

Lists of banks, transactions, invoices and budgets are paginated:

{ "count": 3063, "next": "…?page=2", "previous": null, "results": [ … ] }
  • page and page_size (default 100, maximum 1,000).
  • For invoices and budgets, results is an object with the list inside (invoices or budgets) plus totals.
  • Categories and plans come as a plain list without pagination.
  • Always call https://app.commitly.com/api. If a next link points to another host, take only the page number from it.
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

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.

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.