Search intercompany bills
Operation ID: searchIntercompanyBills
Group: Accounting › Intercompany Bills
Open in the interactive reference
POST /accounting/intercompany-bills/search
Read-only: A read that takes its filters in the body. Changes nothing, and ignores Idempotency-Key.
Searches intercompany bills. Each intercompany bill is returned in full, including its lines.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Api-Version |
header | string · v1 | yes | The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version v1. |
Request body
Required, application/json: searchIntercompanyBillsInput.
| Field | Type | Required | Description |
|---|---|---|---|
filters |
object | no | The filters to apply. An intercompany bill must match every filter you send. Omit to return all intercompany bills. |
filters.id |
string | no | Limits results to the intercompany bill with this identifier. |
filters.intercompanyBillNumber |
string | no | Limits results to the intercompany bill with this intercompany bill number. The match is exact. Example: 'ICB-1'. |
filters.name |
string | no | Limits results to intercompany bills whose name contains this text. The match is case-insensitive. A blank value is ignored. |
filters.description |
string | no | Limits results to intercompany bills whose description contains this text. The match is case-insensitive. A blank value is ignored. |
filters.fromEntityId |
string | no | Limits results to intercompany bills issued by this legal entity. See id on GET base/entities. |
filters.toEntityId |
string | no | Limits results to intercompany bills issued to this legal entity. See id on GET base/entities. |
filters.eitherEntityId |
string | no | Limits results to intercompany bills where this legal entity is either fromEntityId or toEntityId. See id on GET base/entities. |
filters.status |
array<string> | no | Limits results to intercompany bills in any of these statuses. Accepted values: 'draft', 'open', 'partiallySettled', 'settled', 'voided'. Any other value matches no intercompany bill. |
filters.type |
array<string> | no | Limits results to intercompany bills of any of these types. Accepted values: 'manual', 'system'. Any other value matches no intercompany bill. |
filters.billMarkup |
array<string> | no | Limits results to intercompany bills with any of these markup types. Accepted values: 'none', 'percentage', 'flatFee'. Any other value matches no intercompany bill. |
filters.postingDirection |
array<string> | no | Limits results to intercompany bills with any of these posting directions. Accepted values: 'normal', 'reverse'. Any other value matches no intercompany bill. |
filters.currency |
string | no | Limits results to intercompany bills in this currency. The match is exact. Format ISO 4217, for example 'USD'. |
filters.paymentTerms |
string | no | Limits results to intercompany bills with this payment term. Accepted values: 'net30', 'net60', 'net90', 'dueOnReceipt', 'net15', 'custom'. Any other value matches no intercompany bill. |
filters.exchangeRate |
object | no | Limits results to intercompany bills whose exchangeRate is in this range. Omit either bound to leave that side open. |
filters.exchangeRate.min |
decimal | no | The inclusive lower bound. |
filters.exchangeRate.max |
decimal | no | The inclusive upper bound. |
filters.markupAmount |
object | no | Limits results to intercompany bills whose markupAmount is in this range. Omit either bound to leave that side open. |
filters.markupAmount.min |
decimal | no | The inclusive lower bound. |
filters.markupAmount.max |
decimal | no | The inclusive upper bound. |
filters.billDate |
object | no | Limits results to intercompany bills dated in this range. Omit either bound to leave that side open. |
filters.billDate.start |
date | no | The inclusive lower bound. Format YYYY-MM-DD. |
filters.billDate.end |
date | no | The inclusive upper bound. Format YYYY-MM-DD. |
filters.dueDate |
object | no | Limits results to intercompany bills falling due in this range. Omit either bound to leave that side open. |
filters.dueDate.start |
date | no | The inclusive lower bound. Format YYYY-MM-DD. |
filters.dueDate.end |
date | no | The inclusive upper bound. Format YYYY-MM-DD. |
filters.serviceDate |
object | no | Limits results to intercompany bills whose serviceDate is in this range. Omit either bound to leave that side open. |
filters.serviceDate.start |
date | no | The inclusive lower bound. Format YYYY-MM-DD. |
filters.serviceDate.end |
date | no | The inclusive upper bound. Format YYYY-MM-DD. |
filters.lastModifiedDate |
object | no | Limits results to intercompany bills last changed in this range. Omit either bound to leave that side open. |
filters.lastModifiedDate.start |
date-time | no | The inclusive lower bound, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
filters.lastModifiedDate.end |
date-time | no | The inclusive upper bound, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
page |
object | no | The pagination controls. Omit for the first page. |
page.cursor |
string | no | The cursor from the previous response's pagination.nextCursor. Omit on the first request. |
page.size |
number | no | The number of intercompany bills per page, between 1 and 200. Defaults to 50. A value above 200 is treated as 200, not rejected. |
{
"filters": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"intercompanyBillNumber": "<intercompanyBillNumber>",
"name": "<name>",
"description": "<description>",
"fromEntityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"toEntityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"eitherEntityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": [
"<status>"
],
"type": [
"<type>"
],
"billMarkup": [
"<billMarkup>"
],
"postingDirection": [
"<postingDirection>"
],
"currency": "<currency>",
"paymentTerms": "<paymentTerms>",
"exchangeRate": {
"min": "19.99",
"max": "19.99"
},
"markupAmount": {
"min": "19.99",
"max": "19.99"
},
"billDate": {
"start": "2026-01-15",
"end": "2026-01-15"
},
"dueDate": {
"start": "2026-01-15",
"end": "2026-01-15"
},
"serviceDate": {
"start": "2026-01-15",
"end": "2026-01-15"
},
"lastModifiedDate": {
"start": "2026-01-15T09:30:00.000Z",
"end": "2026-01-15T09:30:00.000Z"
}
},
"page": {
"cursor": "<cursor>",
"size": 0
}
}
Response
200 Success
Under data (searchIntercompanyBillsOutput):
| Field | Type | Required | Description |
|---|---|---|---|
items |
array<object> | yes | The intercompany bills on this page, most recently created first. An empty array when nothing matches. |
items[].id |
string | yes | The unique identifier for the intercompany bill. |
items[].intercompanyBillNumber |
string | no | The intercompany bill number. Unique within the tenant. Example: 'ICB-1'. |
items[].name |
string | no | The name of the intercompany bill. |
items[].description |
string | no | A description of the intercompany bill. |
items[].fromEntityId |
string | no | The legal entity that issues the intercompany bill and is owed the amount. See id on GET base/entities. |
items[].fromEntityName |
string | no | The name of the issuing legal entity. See entityName on GET base/entities. |
items[].toEntityId |
string | no | The legal entity that receives the intercompany bill and is charged for it. See id on GET base/entities. |
items[].toEntityName |
string | no | The name of the receiving legal entity. See entityName on GET base/entities. |
items[].intercompanyProcessId |
string | no | The intercompany process whose intercompany receivable and payable accounts balance each legal entity's side of the bill's journal entry. Bills created by a system process that don't name one use the default 'Intercompany Transaction' process. No endpoint returns intercompany processes. |
items[].intercompanyProcessName |
string | no | The name of the intercompany process. |
items[].currency |
string | no | The currency of the intercompany bill. Every amount on the bill and its lines is in this currency. Format ISO 4217, for example 'USD'. |
items[].exchangeRate |
decimal | no | The rate used to convert amounts from the intercompany bill's currency to each legal entity's functional currency. The same rate is used for both legal entities. |
items[].billMarkup |
string | no | How markupAmount is applied to the lines. Possible values: 'none' (no markup: markupAmount and each line's markup are 0), 'percentage' (each line's markup is its amount multiplied by markupAmount), 'flatFee' (markupAmount is a total split evenly across the lines). |
items[].markupAmount |
decimal | no | The markup on the lines. How to read markupAmount depends on billMarkup. When billMarkup is 'percentage', markupAmount is a decimal fraction of each line's amount, so 0.1 is 10%. When billMarkup is 'flatFee', markupAmount is a total in the intercompany bill's currency, split evenly across the lines and rounded to 2 decimal places, with any remainder on the first line. 0 when billMarkup is 'none'. |
items[].billDate |
date | no | The date of the intercompany bill. Format YYYY-MM-DD. |
items[].paymentTerms |
string | no | The payment term of the intercompany bill. Possible values: 'net30', 'net60', 'net90', 'dueOnReceipt', 'net15', 'custom'. |
items[].dueDate |
date | no | The date the intercompany bill falls due. Format YYYY-MM-DD. |
items[].serviceDate |
date | no | The start date of the service period the intercompany bill covers. Format YYYY-MM-DD. |
items[].status |
string | no | The status of the intercompany bill. Possible values: 'draft', 'open', 'partiallySettled', 'settled', 'voided'. |
items[].voidReason |
string | no | The reason given when the intercompany bill was voided. Absent when status is not 'voided'. |
items[].type |
string | no | How the intercompany bill was created. Possible values: 'manual' (in the application), 'system' (by a system process, such as an allocation run). |
items[].postingDirection |
string | no | The direction of the intercompany bill's journal entry postings. Possible values: 'normal', 'reverse'. When postingDirection is 'reverse', the debit and credit accounts of the intercompany process are swapped. |
items[].lastModifiedDate |
date-time | yes | The date and time the intercompany bill last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
items[].lines |
array<object> | no | The lines of the intercompany bill. An empty array when the bill has no lines. |
items[].lines[].id |
string | yes | The unique identifier for the line. |
items[].lines[].description |
string | no | A description of the line. |
items[].lines[].amount |
decimal | no | The amount of the line before markup, in the intercompany bill's currency. |
items[].lines[].fromAccountId |
string | no | The account the issuing legal entity credits with the line's amount, typically where it records the income or recharge. Markup is credited to the issuing entity's markup account instead. See id on GET accounting/accounts/:id. |
items[].lines[].toAccountId |
string | no | The account the receiving legal entity debits with the line's amount plus markup, typically where it records the cost or asset. See id on GET accounting/accounts/:id. |
items[].lines[].fromValueAllocationId |
string | no | The numeric id of the value accounting tags on the issuing legal entity's side, not a UUID. No endpoint returns value accounting tags. Absent when value accounting tags are not in use. |
items[].lines[].toValueAllocationId |
string | no | The numeric id of the value accounting tags on the receiving legal entity's side, not a UUID. No endpoint returns value accounting tags. Absent when value accounting tags are not in use. |
items[].lines[].markupAmount |
decimal | no | The markup on the line, in the intercompany bill's currency, calculated from the bill's billMarkup and markupAmount. |
items[].lines[].fromTaxAmount |
decimal | no | The tax the issuing legal entity charges on the line (output tax), in the intercompany bill's currency. It is the rate of the issuing entity's tax configuration multiplied by the line's amount plus markup. Absent when no tax applies. |
items[].lines[].toTaxAmount |
decimal | no | The tax the receiving legal entity pays on the line and records as recoverable (input tax), in the intercompany bill's currency. It is the rate of the receiving entity's tax configuration multiplied by the line's amount plus markup. Absent when no tax applies. |
pagination |
object | yes | The pagination details for this page. |
pagination.nextCursor |
string | no | The cursor for the next page. Pass it as page.cursor. Absent on the last page. |
pagination.hasMore |
boolean | yes | Whether more intercompany bills remain after this page. |
{
"data": {
"items": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"intercompanyBillNumber": "<intercompanyBillNumber>",
"name": "<name>",
"description": "<description>",
"fromEntityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"fromEntityName": "<fromEntityName>",
"toEntityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"toEntityName": "<toEntityName>",
"intercompanyProcessId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"intercompanyProcessName": "<intercompanyProcessName>",
"currency": "<currency>",
"exchangeRate": "19.99",
"billMarkup": "<billMarkup>",
"markupAmount": "19.99",
"billDate": "2026-01-15",
"paymentTerms": "<paymentTerms>",
"dueDate": "2026-01-15",
"serviceDate": "2026-01-15",
"status": "<status>",
"voidReason": "<voidReason>",
"type": "<type>",
"postingDirection": "<postingDirection>",
"lastModifiedDate": "2026-01-15T09:30:00.000Z",
"lines": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"description": "<description>",
"amount": "19.99",
"fromAccountId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"toAccountId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"fromValueAllocationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"toValueAllocationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"markupAmount": "19.99",
"fromTaxAmount": "19.99",
"toTaxAmount": "19.99"
}
]
}
],
"pagination": {
"nextCursor": "<nextCursor>",
"hasMore": true
}
},
"diagnostics": [
{
"code": "<code>",
"message": "<message>",
"severity": "error",
"path": [
"<path>"
],
"details": "<details>"
}
]
}
Statuses
400— Invalid request or business failure401— The request carries no valid access token.403— Not authorized404— Not found429— Too many requests from this client address. The response has no body and noRetry-Afterheader.500— Internal server error