POST/v1/finance/report
Get a financial summary report
finance_report
Returns the totals of the organization's invoices or payments, grouped by up to three dimensions (category, group, supplier's type of business, supplier, buyer, counterparty, direction, currency, month, quarter, year), with the measures invoiced, paid, unpaid and tax. Totals include only documents visible to the user (the collections and categories of their data profile, and the “answer only from verified cards” setting); request filters narrow this scope but never widen it.
In reporting mode (the default), amounts are converted to the organization's reporting currency at the rate on the document date, and amounts without a rate are listed in conversion.unconverted. In original mode, amounts in different currencies are not added up, and the currency becomes a dimension of the row. If there are more rows than limit, truncated is true, and totals still cover all rows. Requires a data profile with access to financial data (finance.forbidden).
The report, the invoice and payment lists and their exports are read operations even though they use POST: they are available in “View as” mode and to API keys with the read scope (and, as before, to keys with the write scope).
Authentication
Send an API key in the Authorization header: Authorization: Bearer <key>.
Header parameters
X-View-AsstringFor API keys with the
adminrole only. Makes the request as the data profile<profile>[:viewer|verifier|editor], for exampleemployee:viewer. The installation key cannot use this header (403).
Cookie parameters
kb_view_asstringCookie of the “View as” mode for a session.
POST /auth/view-assets it andDELETE /auth/view-asclears it.
Request body
application/json
basisstringinvoices: invoices, credit notes and receipts.payments: the payment log (cash flow). Withpayments, the only measure ispaid, and thedirectiondimension and total show money movement,inorout, while a transfer between your own legal entities isinternal.Allowed values:
invoicespaymentsDefault: "invoices"
group_byarray of FinanceDimensionitems ≤ 3
measuresarray of FinanceMeasureDefaults to
invoiced(paidforpayments).currency_modeFinanceCurrencyModedate_basisstringWhich date sets the period and the
from/tofilter: the document date or the payment date.Allowed values:
documentpaymentDefault: "document"
filtersFinanceFilterorder_bystringMeasure or dimension to sort by. By default, the first measure in descending order.
order_descbooleanDefault: true
limitintegerDefault: 1000≥ 1, ≤ 10000
languagestringLanguage of category and group labels,
en|ru. Defaults toen.
Responses
200The report
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
currencystringReporting currency (
reportingmode).Totals over all rows before truncation, one record per currency (for a report split by direction, per currency and direction,
FinanceReportTotal.direction).truncatedbooleanrequiredlimitintegerrequiredtotal_rowsintegerrequiredNumber of grouped rows before truncation.
conversionFinanceConversionwarningsarray of stringWarning codes:
profile_missing, the organization's company details are not set, so invoice direction defaults toin;catalog_missing, the company directory is not loaded;fx_rate_missing, some amounts have no exchange rate (conversion.unconverted);fx_rate_stale, some rates are outdated;enrichment_pending, some documents are still being processed and are not included in the totals. Show an unknown code with a generic message.
400The request is invalid: a parameter value or the state of the object does not allow the action (`detail` is a message).
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
401No credentials were sent (neither a session cookie nor an API key), or the key was not found.
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
403The action is not allowed: the role is insufficient, there is no access to the collection or card, the request runs in “View as” mode, or the organization is suspended or deleted (`detail` is an object with `code: org_suspended | org_deleted`).
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
429Too many requests (`api.rate_limited`), the organization's quota for the minute, day or month is used up (`api.quota_exceeded`; `error.details` holds `quota`, `limit` and `reset_at`), the organization's limit is reached, or the answer service is busy (`answers.engine_busy`). Wait for the time in the `Retry-After` header.
Response headers
Retry-AfterNumber of seconds to wait before you retry the request.
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
503A service that this request depends on is temporarily unavailable. Retry later.
Response headers
RateLimit-PolicyLimits in effect, in the format of the IETF draft
draft-ietf-httpapi-ratelimit-headers: comma-separated items"<name>";q=<quota>;w=<window in seconds>.keyis the request rate of the API key (the quota is the burst, the window is the time to refill it fully; for a session it isuser, without credentialsip);minute,dayandmonthare the organization's quotas for the calendar minute, day and month in UTC.RateLimitWhat is left of each limit in
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-LimitLimit of the strictest entry in
RateLimit-Policy(the one with the fewest requests left).X-RateLimit-RemainingRequests left under the strictest limit.
X-RateLimit-ResetSeconds until the strictest limit resets.
application/json
Error codes
Codes this endpoint can return in error.code, besides the general codes of every request.
Safe retries
Send an Idempotency-Key header (for example a UUID) with each POST and PATCH. A retry with the same key within 24 hours returns the saved response instead of running the request again.
Rate limits
Responses carry the RateLimit and RateLimit-Policy headers and the earlier X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. A 429 response has Retry-After in seconds: wait and retry.