Developers
qashio.com

Pagination

Page through list endpoints and narrow results with date, status and text filters.

Every list endpoint accepts page (1-based) and page_size, and returns a pagination block alongside data.

"pagination": {
  "page": 1,
  "page_size": 20,
  "total_records": 7,
  "total_pages": 1,
  "has_next": false,
  "has_previous": false
}

Both values must be positive integers. Default page sizes differ by resource:

Default page_size Endpoints
10 Bank accounts, chart of accounts, suppliers, tax rates, ERP transactions
20 Cards, pool accounts, statements, core cards
12 Statements by account

Walk pages with has_next rather than comparing page to total_pages: it stays correct if records are written while you paginate.

let page = 1;
const all = [];

while (true) {
  const res = await fetch(
    `https://api.qashio.com/public/v1/erp/transactions?page=${page}&page_size=100`,
    { headers: { Authorization: `Bearer ${accessToken}` } },
  );
  const body = await res.json();
  all.push(...body.data);
  if (!body.pagination.has_next) break;
  page += 1;
}

Date filters

*_from / *_to parameters take YYYY-MM-DD and are inclusive.

  • On ERP master data and ERP transaction endpoints, both ends of a range must be sent together. Sending only one returns 400.
  • On cards and pool accounts, either end may be sent alone.

month, from_month and to_month take YYYY-MM.

Text and identifier filters

On ERP master data and ERP transactions, text filters such as remote_name are case-insensitive partial matches. Identifier filters: qashio_id, parent_qashio_id, account_id, user_id: are exact.

Incremental sync

The updated_at_from / updated_at_to window is the right tool for a nightly or hourly sync: pull only what changed since your last successful run, rather than re-reading the whole collection.

curl -X GET 'https://api.qashio.com/public/v1/erp/suppliers?updated_at_from=2026-07-01&updated_at_to=2026-07-17&page_size=100' \
  -H 'Authorization: Bearer <access_token>'

Store the high-water mark after the whole page loop succeeds, not per page, so a mid-run failure replays rather than skips.

Esc

Start here

IntroductionIntegration walkthroughAuthenticationConventions

Popular endpoints

POSTExchange code for tokens/oauth2/tokenGETGet company summary/public/v1/erp/company/summaryGETList bank accounts/public/v1/erp/bank_accountsGETList cards/public/v1/erp/cardsGETList chart of accounts/public/v1/erp/chart_of_accounts