Skip to content

Sales invoices, customer credit notes and debit notes, newest first

GET
/receivables/invoices
curl --request GET \
--url 'https://example.com/v1/receivables/invoices?group=only&kind=sales_invoice&sort=created_at&order=asc' \
--header 'Authorization: Bearer <token>'

Keyset pagination: next_cursor is the only way to ask for the next page. Requires receivables.invoice.read.

group
string
Allowed values: only none

Filters by the group badge: only keeps group companies and group transactions, none keeps the rest; omitted keeps everything. Decided from the organization’s own counterparty map as at today, like is_group_company and is_group_transaction.

kind
string
Allowed values: sales_invoice customer_credit_note customer_debit_note
customer_id
string format: uuid
project_id
string format: uuid

Only documents with a line charged to this project.

state
string
currency
string
open
boolean

True lists only issued documents with something outstanding (what a receipt or an offset can take).

q
string
<= 64 characters

Case-insensitive substring of the document number, the customer’s reference or the customer’s name.

from
string format: date

Invoice date, inclusive. A draft has no invoice date, so a range leaves drafts out.

to
string format: date

Invoice date

sort
string
Allowed values: created_at reference customer invoice_date due_on total

Default: newest created first. The cursor belongs to the order that issued it; a cursor sent with another sort or order is refused.

order
string
default: desc
Allowed values: asc desc
limit
integer
>= 1 <= 200
cursor
string

The previous page’s next_cursor

One page

Media typeapplication/json
object
documents
required
Array<object>
object
buyer
required

Frozen when issued; null on a draft.

object
address
required
object
city
string
line1
string
line2
string
postcode
string
state
string
country_code
required
string
nullable
email
required
string
nullable
name
required
string
phone
required
string
nullable
registration_no
required
string
nullable
registration_type
required
string
nullable
sst_no
required
string
nullable
tin
required
string
nullable
created_at
required
string format: date-time
currency
required
string
custom_fields

The organization’s user-defined field values by key (GET /org/custom-fields); {} when none.

object
key
additional properties
string
customer_id
required
string format: uuid
customer_reference
required
string
due_on
required
string format: date
fx_rate
required

A decimal rate or percentage as a string, up to 10 places. Never a JSON number.

string
gross_amount
required

A decimal amount as a string. Never a JSON number.

string
gross_base
required

A decimal amount as a string. Never a JSON number.

string
id
required
string format: uuid
invoice_date
required
string format: date
is_group_transaction
required

True when the party is currently mapped to a company of the organization’s group, so a consolidation run eliminates the dealing. Derived from the party map at read time, never stored on the transaction.

boolean
is_opening

Brought in by a data migration (import M5)

boolean
issued_at
required
string format: date-time
nullable
kind
required
string
Allowed values: sales_invoice customer_credit_note customer_debit_note
legacy_reference

The previous system’s number

string
nullable
lines
required
Array<object>
object
account_id
required
string format: uuid
classification_code
required
string
description
required
string
discount_amount
required

A decimal amount as a string. Never a JSON number.

string
id
required
string format: uuid
line_no
required
integer
net_amount
required

A decimal amount as a string. Never a JSON number.

string
net_base
required

A decimal amount as a string. Never a JSON number.

string
quantity
required

A decimal rate or percentage as a string, up to 10 places. Never a JSON number.

string
shares
required
Array<object>
object
analytic_account_id
required
string format: uuid
percentage
required

A decimal rate or percentage as a string, up to 10 places. Never a JSON number.

string
tax_amount
required

A decimal amount as a string. Never a JSON number.

string
tax_base
required

A decimal amount as a string. Never a JSON number.

string
tax_code
required

The tax code as it read when the line was priced.

string
tax_code_id
required
string format: uuid
tax_exemption_reason
required
string
nullable
tax_pack_kind
required
string
tax_rate
required

A decimal rate or percentage as a string, up to 10 places. Never a JSON number.

string
trade_line_id
required

A delivery line (an invoice) or sales return line (a credit note) of this customer; quantity is then in base units (O3.2).

string format: uuid
nullable
unit_code
required
string
nullable
unit_price
required

A decimal amount as a string. Never a JSON number.

string
multiple_projects
required

True when the lines charge two or more distinct projects.

boolean
net_total
required

A decimal amount as a string. Never a JSON number.

string
original_invoice_id
required
string format: uuid
nullable
original_total

An opening document’s original total, for reference; gross_amount is what was outstanding at the cut-over.

string
outstanding
required

Gross less allocations (a credit note - what it has left).

string
payment_terms_days
required
integer
prepared_by
required
string format: uuid
project
required

The project every project-charged line shares; null when none or when several (see multiple_projects).

object
code
required
string
id
required
string format: uuid
name
required
string
reason
required
string
nullable
reference
required

Null on a draft; numbered when issued (R2).

string
nullable
revision
required
integer
seller
required

Frozen when issued; null on a draft.

object
address
required
string
nullable
msic
required
string
nullable
name
required
string
registration_no
required
string
nullable
sst_no
required
string
nullable
tin
required
string
nullable
semantic
required
string
Allowed values: draft pending accrual payout acknowledged dispute rejected cancelled custom committed effect
state
required
string
tax_total
required

A decimal amount as a string. Never a JSON number.

string
next_cursor
required
string
nullable

Example

{
"documents": [
{
"fx_rate": "4.2000000000",
"gross_amount": "1234.5600",
"gross_base": "1234.5600",
"kind": "sales_invoice",
"lines": [
{
"discount_amount": "1234.5600",
"net_amount": "1234.5600",
"net_base": "1234.5600",
"quantity": "4.2000000000",
"shares": [
{
"percentage": "4.2000000000"
}
],
"tax_amount": "1234.5600",
"tax_base": "1234.5600",
"tax_rate": "4.2000000000",
"unit_price": "1234.5600"
}
],
"net_total": "1234.5600",
"original_total": "1234.5600",
"outstanding": "1234.5600",
"semantic": "draft",
"tax_total": "1234.5600"
}
]
}

Not authenticated, or the session is no longer valid.

Media typeapplication/problem+json
object
code

A stable refusal code the client branches on, where the status alone is not enough: owner_role_manage_required and self_lockout on the role editor’s 409s; revision_mismatch (a stale If-Match) and document_bound_elsewhere (the document backs another record) on an expense claim’s 409s.

string
detail
string
instance
string
status
required
integer
title
required
string
type
required
string

Example generated

{
"code": "example",
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}

The caller does not hold the permission this operation requires.

Media typeapplication/problem+json
object
code

A stable refusal code the client branches on, where the status alone is not enough: owner_role_manage_required and self_lockout on the role editor’s 409s; revision_mismatch (a stale If-Match) and document_bound_elsewhere (the document backs another record) on an expense claim’s 409s.

string
detail
string
instance
string
status
required
integer
title
required
string
type
required
string

Example generated

{
"code": "example",
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}

The request is well-formed but refused by an AR rule.

Media typeapplication/problem+json
object
code

A stable refusal code the client branches on, where the status alone is not enough: owner_role_manage_required and self_lockout on the role editor’s 409s; revision_mismatch (a stale If-Match) and document_bound_elsewhere (the document backs another record) on an expense claim’s 409s.

string
detail
string
instance
string
status
required
integer
title
required
string
type
required
string

Example generated

{
"code": "example",
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}

A rate limit was reached: per API key, per organization across its keys, or per source address for repeated failed key authentication. Retry after the number of seconds in Retry-After. Every answer on a key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.

Media typeapplication/problem+json
object
code

A stable refusal code the client branches on, where the status alone is not enough: owner_role_manage_required and self_lockout on the role editor’s 409s; revision_mismatch (a stale If-Match) and document_bound_elsewhere (the document backs another record) on an expense claim’s 409s.

string
detail
string
instance
string
status
required
integer
title
required
string
type
required
string

Example generated

{
"code": "example",
"detail": "example",
"instance": "example",
"status": 1,
"title": "example",
"type": "example"
}
Retry-After
integer

Seconds until a retry may succeed.