List revenue contracts
Operation ID: revenueContracts
Group: Accounting › Revenue Contracts
Open in the interactive reference
GET /accounting/revenue-contracts
Read-only: Reads and returns; changes nothing.
Lists revenue contracts. Each revenue contract is returned with only some of its fields, and without its revenue lines. For the revenue lines and revenue plans, use GET accounting/revenue-contracts/:id or POST accounting/revenue-contracts/search.
To filter by the modified revenue contract, use POST accounting/revenue-contracts/search.
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. |
Query surface
id— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likeapprovalStatus— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likegeneralStatus— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likerevenueStatus— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likeisContractClosed— filter by eq, ne, gt, gte, lt, lte, in, notIn, betweenisContractCombined— filter by eq, ne, gt, gte, lt, lte, in, notIn, betweencurrency— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likeentityId— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likecustomerId— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likeinitialSalesOrderId— filter by eq, ne, gt, gte, lt, lte, in, notIn, between, likemigrationDate— filter by eq, ne, gt, gte, lt, lte, in, notIn, betweenrevenueStartDate— filter by eq, ne, gt, gte, lt, lte, in, notIn, betweenrevenueEndDate— filter by eq, ne, gt, gte, lt, lte, in, notIn, betweenlastModifiedDate— filter by eq, ne, gt, gte, lt, lte, in, notIn, between- Orderable: id, approvalStatus, generalStatus, revenueStatus, isContractClosed, isContractCombined, currency, migrationDate, revenueStartDate, revenueEndDate, totalContractValue, deferredRevenue, revenueRecognized, revenueRemaining, lastModifiedDate
- Selectable: id, revenueContractNumber, approvalStatus, generalStatus, revenueStatus, isContractClosed, isContractCombined, isLongTermContract, currency, functionalCurrency, exchangeRate, entityName, entityId, customerName, customerId, initialSalesOrderId, migrationDate, revenueStartDate, revenueEndDate, totalContractValue, deferredRevenue, revenueRecognized, revenueRemaining, totalCostOfContractValue, costOfRevenueRecognized, lastModifiedDate
page[size]— Page sizepage[cursor]— Opaque continuation cursor
Response
200 Success
Under data, an array of revenueContractsRow:
| Field | Type | Required | Filter | Sort | Description |
|---|---|---|---|---|---|
id |
string | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
yes | The unique identifier for the revenue contract. |
revenueContractNumber |
string | null | no | no | no | The revenue contract number, unique within the tenant. |
approvalStatus |
string | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
yes | The approval status of the contract. Possible values: 'draft', 'pendingApproval', 'revise', 'approved', 'rejected'. |
generalStatus |
string | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
yes | The overall status of the contract, combining approval and any active revenue hold. Possible values: 'approved', 'approvedOnHold', 'pendingApproval', 'pendingApprovalOnHold'. |
revenueStatus |
string | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
yes | The revenue-recognition progress across the contract's lines. Possible values: 'notStarted', 'notStartedOnHold', 'inProgress', 'inProgressOnHold', 'complete', 'completeModified'. |
isContractClosed |
boolean | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn) |
yes | Whether the contract has been closed, with its open revenue moved to a new combined revenue contract. |
isContractCombined |
boolean | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn) |
yes | Whether the contract is the combination target that absorbed a closed contract's open revenue. |
isLongTermContract |
boolean | null | no | no | no | Whether the recognition window from revenueStartDate to revenueEndDate exceeds 366 days. |
currency |
string | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
yes | The currency the contract is denominated in. Every amount on the contract is in this currency. Format ISO 4217, for example 'USD'. |
functionalCurrency |
string | null | no | no | no | The owning entity's functional currency. Present only when it differs from the contract currency. Format ISO 4217, for example 'USD'. |
exchangeRate |
decimal | no | no | no | The rate used to convert the contract currency to the entity's functional currency. A ratio, not an amount, with no currency of its own. |
entityName |
string | null | no | no | no | The name of the legal entity that owns this contract. |
entityId |
string | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
no | The legal entity that owns the contract. |
customerName |
string | null | no | no | no | The display name of the customer this contract is with. |
customerId |
string | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
no | The customer the contract belongs to. |
initialSalesOrderId |
string | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn), Pattern (like) |
no | The sales order that opened this contract. An order that amends the contract later is not reachable here. |
migrationDate |
date | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn) |
yes | The date this contract's opening balances were migrated from a prior system. Format YYYY-MM-DD. Absent on a contract created natively. |
revenueStartDate |
date | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn) |
yes | The earliest revenue-recognition start date across the contract's lines. Format YYYY-MM-DD. |
revenueEndDate |
date | null | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn) |
yes | The latest revenue-recognition end date across the contract's lines. Format YYYY-MM-DD. |
totalContractValue |
decimal | null | no | no | yes | The total contract value, in the contract currency. It is the total price of the sales order this contract was created from, less the contract's cost-of-contract-value. |
deferredRevenue |
decimal | null | no | no | yes | The deferred revenue not yet recognized, in the contract currency. Zero once the contract is closed. |
revenueRecognized |
decimal | null | no | no | yes | The cumulative revenue recognized to date, in the contract currency. |
revenueRemaining |
decimal | null | no | no | yes | The revenue remaining to be recognized, in the contract currency. |
totalCostOfContractValue |
decimal | null | no | no | no | Contracted COST of the contract, in the contract currency (see currency): the value of the contract lines carried for cost rather than revenue. totalContractValue already excludes it, so the gross contracted value is the sum of the two. Do not pair it with revenueRecognized, which is a to-date figure. |
costOfRevenueRecognized |
decimal | null | no | no | no | Cost of revenue RECOGNIZED to date, in the contract currency (see currency) — the cost counterpart of revenueRecognized, and the one to pair it with for a realised margin. It is 0 on a contract that has recognized nothing, which is a real figure and not a missing one. Unreliable on a combined contract (isContractCombined): there the node fills it with the revenue recognized in the related contracts, not with their cost. |
lastModifiedDate |
date-time | no | Exact (eq, ne), Range (gt, gte, lt, lte, between), Any of (in, notIn) |
yes | The date and time the revenue contract last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
{
"data": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"revenueContractNumber": "<revenueContractNumber>",
"approvalStatus": "<approvalStatus>",
"generalStatus": "<generalStatus>",
"revenueStatus": "<revenueStatus>",
"isContractClosed": true,
"isContractCombined": true,
"isLongTermContract": true,
"currency": "<currency>",
"functionalCurrency": "<functionalCurrency>",
"exchangeRate": "19.99",
"entityName": "<entityName>",
"entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"customerName": "<customerName>",
"customerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"initialSalesOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"migrationDate": "2026-01-15",
"revenueStartDate": "2026-01-15",
"revenueEndDate": "2026-01-15",
"totalContractValue": "19.99",
"deferredRevenue": "19.99",
"revenueRecognized": "19.99",
"revenueRemaining": "19.99",
"totalCostOfContractValue": "19.99",
"costOfRevenueRecognized": "19.99",
"lastModifiedDate": "2026-01-15T09:30:00.000Z"
}
],
"pagination": {
"hasMore": true,
"nextCursor": "<nextCursor>"
}
}
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