Skip to content

Overview

Machine-readable description of this API: openapi.yaml (OpenAPI 3.1). Import it into Postman, Insomnia or your AI coding tool.

REST API for reading and writing cash-flow data in COMMITLY: categories, plans, bank accounts, invoices (open items), transactions and budgets.

Access

The API is included from Business Edition upwards. To get credentials, open COMMITLY and go to Add-ons > COMMITLY Public API (German UI: Erweiterungen) and connect the add-on. This generates a Client ID and a Client Secret. A credential pair is bound to one company; to work with several companies, create a credential pair per company.

Group-level access (all companies of a group) requires the Enterprise Edition; credentials for group-level access are issued by support@commitly.com. See the tag Group level (Enterprise).

Authentication

OAuth 2.0, client credentials grant.

  1. Request an access token from POST https://app.commitly.com/api/auth/token/, sending grant_type=client_credentials, client_id and client_secret in the request body (form-encoded, multipart or JSON). HTTP Basic authentication of the client is not supported.
  2. Send the token with every request: Authorization: Bearer <access_token>.
  3. An access token is valid for 5 minutes (expires_in: 300). When it has expired, request a new one with the client credentials.
SituationStatusBody
No Authorization header403{"detail": "User must be authenticated to access this resource."}
Invalid or expired token401, header WWW-Authenticate: Bearer{"detail": "Invalid token."}

Language of messages

Error and validation messages are localized. Choose the language with the Accept-Language request header: de, en or it. Without the header, messages are in German. The 403 message for a missing token is always in English.

Conventions

  • All paths end with a trailing slash (/invoices/, not /invoices). A request without the trailing slash is answered with a 301 redirect, and the request body is lost on the redirect.
  • Request and response bodies are JSON unless stated otherwise.
  • Dates are YYYY-MM-DD; timestamps are ISO 8601 in UTC.
  • Amounts are decimals with two decimal places. Requests accept JSON numbers or numeric strings; responses return JSON numbers.
  • A leaf category is a category without subcategories. Budgets, invoices and transactions can only be mapped to leaf categories.

Pagination

Paginated list endpoints accept page (starting at 1) and page_size (default 100, maximum 1000; larger values are reduced to 1000). The response contains count, next and previous.

Always call https://app.commitly.com/api. If a next or previous link points to another host, read the page parameter from it and send the request to https://app.commitly.com/api with the same path and filters.

GET /categories/ and GET /plans/ are not paginated and return a plain JSON array.

Errors

StatusBody
400Validation errors per field: {"field": ["message", ...]}. Errors not tied to a field are listed under non_field_errors. For request bodies that are arrays, the body is a list with one error object per item.
401, 403, 404, 405{"detail": "..."}
500Not JSON. Treat any 500 as an unexpected server error.

Rate limits

Please avoid excessive request rates: cache the access token, use page_size and sync changes instead of full data sets.

Status codes

CodeMeaning
200OK
201Created
204Deleted, no content
301Path without trailing slash; the request body is dropped
400Bad request (invalid body or parameters)
401Invalid or expired access token
403No access token, or not allowed to call this endpoint
404Not found
500Unexpected server error (not JSON)

Information

  • OpenAPI version: 3.1.0

OAuth 2.0 client credentials. Send client_id and client_secret in the body of the token request (form-encoded, multipart or JSON; HTTP Basic is not supported). Use the returned token as Authorization: Bearer <access_token>. Access tokens are valid for 5 minutes.

Security scheme type: oauth2

Flow type: clientCredentials

Token URL: https://app.commitly.com/api/auth/token/