Skip to main content
Data is read over REST. Every unified data model is available under a company:

Query parameters

Filtering

Filters use the form field[operator]=value. Four operators are supported:
Filtering by an updated-at range is the usual way to pull everything that changed since your last sync:
Not every field is filterable. Each data model exposes its own set of filterable fields — a filter on an unsupported field is ignored rather than applied. Check the model’s API reference page for the fields it accepts.
Operators cannot be combined on the same field. These all return 400:
  • eq together with in
  • eq together with gte or lte
  • in together with gte or lte
Filtering an enum field on a value outside the enum returns 400 with the list of valid values. Currency codes are stored uppercase but accept lowercase input.

Response shape

List responses return the records at data, with pagination as a sibling:
Single-record responses return the object at data, with no pagination. total_count is populated unless you pass return_count=false.

Raw platform data

Records can include raw_data — the untouched response from the source platform.
raw_data is only included for paying customers — it is stripped from read responses otherwise. Contact support@commenda.io if you need it enabled.
When it is returned it carries the full upstream payload for every record, so responses are heavier than the documented field list suggests. Lower limit if you hit slow responses or size limits. See Raw Data for how to use it, including on writes.

Financial statement rollup

income_statements, balance_sheets, and cash_flow_statements are stored as monthly rows. Pass period to roll consecutive months into larger buckets — period=3 for quarters, period=12 for years. period requires both period_start[gte] and period_end[lte] — omitting either returns 400. It returns the complete rolled-up list rather than a page, so passing next or prev alongside it returns 400, as does combining it with expand.
The rollup loads every statement row in the requested window before bucketing, and rejects the request with 400 above 10,000 rows. If you hit it, narrow period_start[gte] / period_end[lte].