Reports

Reports

Automatically added from OpenAPI sync.

List debtors

GET /v1/reports/debtors

Clients with open sales invoices as of today, the same list as the Debtors page under Reports. Amounts incl. VAT in EUR. Sorted by overdue amount, then open amount (highest first); equal amounts by client name, then id. `scope=overdue` returns only clients with an overdue amount. `avg_days_late` covers the client's invoices paid in the last 12 months. Signed-in users need the right to view invoice totals; API keys have environment-wide access

Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Query
Name Type Description
scope string
limit integer
Request body

None

Response
data array
client object Nullable

Null when the invoices have no existing client.

id string
name string
open number

Open amount incl. VAT.

overdue number

Part of `open` past its due date.

invoice_count integer

Number of open invoices.

oldest_due_date string Nullable
avg_days_late number Nullable

Average days paid after the due date, for this client's invoices paid in the last 12 months.

meta object

Examples

GET /v1/reports/debtors
curl -X GET "https://api.appficient.nl/v1/reports/debtors" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json"

Curl, Node and response are shown to the right of this endpoint.

Retrieve a profit report

GET /v1/reports/profit
expenses.read

Revenue, costs and result of the period, as on the Costs and result tab of the Reports page. Revenue is counted as in the financial summary. Costs = purchase invoices with an invoice date in the period, excl. VAT, converted to EUR. Result = revenue minus costs. Period and comparison work as in the financial summary; the period may span at most 36 months. Requires the scopes expenses.read and `invoices.read`. Signed-in users need the rights to view purchase invoice totals and invoice totals; API keys have environment-wide access

Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Query
Name Type Description
from string Start of the period (YYYY-MM-DD). Default 1 January of this year.
to string End of the period (YYYY-MM-DD). Default today.
compare string Comparison period for revenue, costs and result.
Request body

None

Response
data object
period object
from string
to string
compare string
Enum
previous_period previous_year
compare_from string
compare_to string
currency string
Example: EUR
revenue object
total_excl_vat number
previous_total_excl_vat number Nullable
change_percent number Nullable
costs object
total_excl_vat number
previous_total_excl_vat number Nullable
change_percent number Nullable
result object
total_excl_vat number
previous_total_excl_vat number Nullable
change_percent number Nullable
margin_percent number Nullable

Result as a percentage of revenue; null without revenue.

months array
month string
Example: 2026-10
revenue_excl_vat number
costs_excl_vat number
result_excl_vat number
meta object

Examples

GET /v1/reports/profit
curl -X GET "https://api.appficient.nl/v1/reports/profit" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json"

Curl, Node and response are shown to the right of this endpoint.

Retrieve a revenue report

GET /v1/reports/revenue

The revenue breakdown of the Reports page in one response: totals, revenue per month with the comparison period, per revenue group, the clients and the products or services with the most revenue. Revenue is counted as in the financial summary: sales invoices with a number and an invoice date in the period, excl. VAT, minus credit notes. Period and comparison work as in the financial summary; the period may span at most 36 months. Signed-in users need the right to view invoice totals; API keys have environment-wide access

Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Query
Name Type Description
from string Start of the period (YYYY-MM-DD). Default 1 January of this year.
to string End of the period (YYYY-MM-DD). Default today.
compare string Comparison period for revenue.
limit integer Number of clients and products in the top lists.
Request body

None

Response
data object
period object
from string
to string
compare string
Enum
previous_period previous_year
compare_from string
compare_to string
currency string
totals object
total_excl_vat number
previous_total_excl_vat number Nullable
change_percent number Nullable
invoice_count integer
previous_invoice_count integer Nullable
average_invoice number Nullable
previous_average_invoice number Nullable
credit_total number

Sum of the credit notes in the period (negative), already included in `total_excl_vat`.

recurring_total number

Revenue from subscription invoices.

one_off_total number
months array
month string

Month as YYYY-MM.

total_excl_vat number
invoice_count integer
average_invoice number Nullable
previous_total_excl_vat number Nullable

The same month position in the comparison period.

change_percent number Nullable
groups array

Revenue per revenue group, highest first.

name string
total_excl_vat number
previous_total_excl_vat number Nullable
clients array

Clients with the most revenue, highest first.

client object Nullable
id string
name string
total_excl_vat number
products array

Products or services with the most revenue, highest first. Rows without a product are grouped by their description.

name string
total_excl_vat number
quantity number
invoice_count integer
meta object

Examples

GET /v1/reports/revenue
curl -X GET "https://api.appficient.nl/v1/reports/revenue" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json"

Curl, Node and response are shown to the right of this endpoint.

Retrieve a financial summary

GET /v1/reports/summary

The same figures as the Reports page in the app. Revenue = sales invoices (type invoice, with a number, not archived) with an invoice date in the period, excl. VAT, minus credit notes; quotes, work orders and purchase invoices do not count. Compared with the previous period (`previous_period`: a period that starts on a Monday and spans at most one week is compared with the same days one week earlier; a period that starts on the 1st and stays within one month, quarter or year with the same days one month, quarter or year earlier; any other period with the same number of days directly before `from`; without `from`/`to` the same dates last year, as on the Reports page) or the same dates one year earlier (`previous_year`). Without `from` and `to` the period is this year up to today. Only `to`: `from` is 1 January of that year. Only `from`: `to` is today. The period may span at most 36 months. `receivable`, `overdue` and `aging` are incl. VAT and as of today (not limited to the period); `dso` and `on_time_rate` cover invoices paid in the last 12 months. Signed-in users need the right to view invoice totals; API keys have environment-wide access

Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Query
Name Type Description
from string Start of the period (YYYY-MM-DD). Default 1 January of this year.
to string End of the period (YYYY-MM-DD). Default today.
compare string Comparison period for revenue.
Request body

None

Response
data object
period object
from string
to string
compare string
Enum
previous_period previous_year
compare_from string
compare_to string
as_of string

Date of the open-invoice figures (today).

currency string
Example: EUR
revenue object

Sales invoices with a number, not archived, invoice date in the period, excl. VAT, minus credit notes. Same as the Reports page.

total_excl_vat number
previous_total_excl_vat number Nullable
change_percent number Nullable

Change against the comparison period in percent, one decimal. Null when the comparison is 0.

receivable number

Open amount incl. VAT of all unpaid sales invoices as of `as_of`.

overdue number

Part of `receivable` past its due date.

dso number Nullable

Average days from invoice date to payment, weighted by amount, for invoices paid in the last 12 months.

on_time_rate number Nullable

Percentage of invoices paid in the last 12 months that were paid on or before the due date.

aging object

Open amount incl. VAT per days past the due date: `current` (not yet due or no due date), `d30` (1-30), `d60` (31-60), `d90` (61-90), `d90p` (more than 90).

current number
d30 number
d60 number
d90 number
d90p number
meta object

Examples

GET /v1/reports/summary
curl -X GET "https://api.appficient.nl/v1/reports/summary" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json"

Curl, Node and response are shown to the right of this endpoint.