Search subscriptions
Operation ID: searchSubscription
Group: Accounting › Subscriptions
Open in the interactive reference
POST /accounting/subscriptions/search
Read-only: A read that takes its filters in the body. Changes nothing, and ignores Idempotency-Key.
Searches subscriptions. Each subscription in the response is the full record, with its customer, legal entity, and lines. The response also includes cancellationNote and suspensionNote, which GET accounting/subscriptions doesn't return.
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: searchSubscriptionInput.
| Field | Type | Required | Description |
|---|---|---|---|
filters |
object | no | The filters to apply. A subscription must match every filter you send. Omit to return all subscriptions you may read. |
filters.id |
string | no | Limits results to the subscription with this identifier. The match is exact. |
filters.subscriptionNumber |
string | no | Limits results to the subscription with this subscription number, for example 'SUB-1'. The match is exact. |
filters.customerId |
string | no | Limits results to subscriptions of this customer. An id that matches no customer returns an empty page. See id on GET accounting/customers/:id. |
filters.entityId |
string | no | Limits results to subscriptions owned by this legal entity. An id that matches no entity returns an empty page. See id on GET base/entities. |
filters.termType |
string | no | Limits results to subscriptions with this term structure. Possible values: 'termed', 'evergreen'. Any other value matches nothing. |
filters.subscriptionStatus |
string | no | Limits results to subscriptions in this status. Possible values: 'pendingActivation', 'notStarted', 'active', 'pendingOrderApproval', 'canceled', 'suspended'. Any other value matches nothing. |
filters.autoRenew |
boolean | no | Limits results to subscriptions set to auto-renew when true, or not when false. |
filters.cancellationReason |
string | no | Limits results to subscriptions canceled for this reason. Possible values: 'noReasonGiven', 'budgetary', 'movingToCompetitors', 'lowCustomerSatisfaction', 'bankruptcy', 'acquisitionMerger'. Any other value matches nothing. |
filters.suspensionReason |
string | no | Limits results to subscriptions suspended for this reason. Possible values: 'unpaidBalance', 'invalidPaymentMethod'. Any other value matches nothing. |
filters.externalSubscriptionId |
string | no | Limits results to the subscription with this external identifier. The match is exact. |
filters.serviceStartDate |
object | no | Limits results to subscriptions whose derived serviceStartDate falls in this range. Both bounds are inclusive, and omitting one leaves that side open. |
filters.serviceStartDate.start |
date | no | The earliest serviceStartDate to include. Format YYYY-MM-DD. |
filters.serviceStartDate.end |
date | no | The latest serviceStartDate to include. Format YYYY-MM-DD. |
filters.serviceEndDate |
object | no | Limits results to subscriptions whose derived serviceEndDate falls in this range. Both bounds are inclusive, and omitting one leaves that side open. |
filters.serviceEndDate.start |
date | no | The earliest serviceEndDate to include. Format YYYY-MM-DD. |
filters.serviceEndDate.end |
date | no | The latest serviceEndDate to include. Format YYYY-MM-DD. |
page |
object | no | 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 subscriptions per page. Defaults to 50. A value above 200 is treated as 200, not rejected. |
{
"filters": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"subscriptionNumber": "<subscriptionNumber>",
"customerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"termType": "<termType>",
"subscriptionStatus": "<subscriptionStatus>",
"autoRenew": true,
"cancellationReason": "<cancellationReason>",
"suspensionReason": "<suspensionReason>",
"externalSubscriptionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"serviceStartDate": {
"start": "2026-01-15",
"end": "2026-01-15"
},
"serviceEndDate": {
"start": "2026-01-15",
"end": "2026-01-15"
}
},
"page": {
"cursor": "<cursor>",
"size": 0
}
}
Response
200 Success
Under data (searchSubscriptionOutput):
| Field | Type | Required | Description |
|---|---|---|---|
items |
array<object> | yes | The subscriptions that match, most recently created first. An empty array when nothing matches. |
items[].id |
string | yes | The unique identifier for the subscription. |
items[].subscriptionNumber |
string | no | The subscription number. Unique within the tenant. Example: 'SUB-1'. |
items[].customerId |
string | no | The customer this subscription belongs to. See id on GET accounting/customers/:id. |
items[].customerName |
string | no | The name of the customer this subscription belongs to. See name on GET accounting/customers/:id. |
items[].entityId |
string | no | The legal entity that owns this subscription. See id on GET base/entities. |
items[].currency |
string | yes | The currency of annualRecurringRevenue and monthlyRecurringRevenue. Format ISO 4217, for example 'USD'. |
items[].autoRenew |
boolean | no | Whether the subscription renews automatically at the end of its term. |
items[].renewalTerm |
number | no | The length of the auto-renewal term, in the subscription's term unit. |
items[].renewalPriceChangePercentage |
decimal | no | The percentage by which the price changes on renewal. |
items[].termType |
string | yes | The term type of the subscription. Possible values: 'termed', 'evergreen'. |
items[].subscriptionStatus |
string | no | The status of the subscription, derived from the status of its lines. Possible values: 'pendingActivation', 'notStarted', 'active', 'pendingOrderApproval', 'canceled', 'suspended'. |
items[].serviceStartDateBasis |
string | no | How the service start date is determined. Possible values: 'fixedDate', 'serviceActivation'. |
items[].serviceActivationDate |
date | no | The date service was activated. Set only when serviceStartDateBasis is 'serviceActivation'. Format YYYY-MM-DD. |
items[].serviceStartDate |
date | no | The earliest service start date across the subscription's lines. Format YYYY-MM-DD. |
items[].serviceEndDate |
date | no | The latest service end date across all of the subscription's lines. Format YYYY-MM-DD. Usually absent when the subscription is evergreen, but present once it is canceled or suspended. |
items[].submissionDate |
date | no | The submission date of the sales order this subscription came from. Format YYYY-MM-DD. |
items[].cancellationDate |
date | no | The date from which the subscription is or will be canceled. Absent when no cancellation has been recorded. Format YYYY-MM-DD. |
items[].cancellationNote |
string | no | A note about the cancellation. |
items[].cancellationReason |
string | no | The reason code for the cancellation. Possible values: 'noReasonGiven', 'budgetary', 'movingToCompetitors', 'lowCustomerSatisfaction', 'bankruptcy', 'acquisitionMerger'. Absent when the subscription has not been canceled. |
items[].isCancellationEnabled |
boolean | no | Whether the cancellation procedure has been applied to this subscription. |
items[].suspensionDate |
date | no | The date from which the subscription is or will be suspended. Absent when no suspension has been recorded. Format YYYY-MM-DD. |
items[].suspensionNote |
string | no | A note about the suspension. |
items[].suspensionReason |
string | no | The reason code for the suspension. Possible values: 'unpaidBalance', 'invalidPaymentMethod'. Absent when the subscription has not been suspended. |
items[].isSuspensionEnabled |
boolean | no | Whether the suspension process is enabled for this subscription. |
items[].externalSubscriptionId |
string | no | The subscription's identifier in an external system. Absent when none was recorded at creation. |
items[].annualRecurringRevenue |
decimal | no | The annual recurring revenue, in the subscription's currency: the sum of annualRecurringRevenue across its active and suspended lines. |
items[].monthlyRecurringRevenue |
decimal | no | The monthly recurring revenue, in the subscription's currency: the sum of monthlyRecurringRevenue across its active and suspended lines. |
items[].totalUserCount |
decimal | no | The number of active users or seats across the subscription's active lines. |
items[].prepaidBalance |
decimal | no | The prepaid balance remaining for this subscription, summed across the prepaid balances linked to it. The balance is a quantity, not a currency amount. |
items[].lines |
array<object> | yes | The subscription's lines, one per product on the subscription, oldest first. An empty array when the subscription has none. GET accounting/subscriptions/:id returns the same lines. GET accounting/subscriptions returns header fields only, without lines. |
items[].lines[].id |
string | yes | Id of the subscription line (a UUID) — its public identifier. |
items[].lines[].subscriptionLineNumber |
string | no | Unique, human-readable number of this subscription line. Absent until one has been assigned. |
items[].lines[].productName |
string | no | Name of the product this line covers. |
items[].lines[].quantity |
decimal | no | Quantity across the line's associated sales order product lines. A count, not a currency amount. |
items[].lines[].currency |
string | yes | ISO 4217 three-letter currency code (e.g. USD, EUR, GBP) governing this line's annualRecurringRevenue and monthlyRecurringRevenue. |
items[].lines[].subscriptionLineStatus |
string | no | Lifecycle status of this line. A SubscriptionLineStatus member. |
items[].lines[].serviceStartDate |
date | no | Date service starts for this line (YYYY-MM-DD). |
items[].lines[].serviceEndDate |
date | no | Date service ends for this line (YYYY-MM-DD). |
items[].lines[].customServiceEndDate |
date | no | Service end date recorded against this line by a subscription update, when one has overridden the derived date (YYYY-MM-DD). |
items[].lines[].maxSalesOrderProductLineServiceEndDate |
date | no | Latest service end date across this line's sales order product lines (YYYY-MM-DD). |
items[].lines[].annualRecurringRevenue |
decimal | no | Annualized recurring revenue of this line, in the line currency (see this line's currency). |
items[].lines[].monthlyRecurringRevenue |
decimal | no | Monthly recurring revenue of this line, in the line currency (see this line's currency). |
items[].lines[].salesOrders |
array<object> | yes | The sales orders that carry this line, oldest first. An empty array when no sales order carries it. |
items[].lines[].salesOrders[].id |
string | yes | The sales order. See id on GET accounting/sales-orders/:id. |
items[].lines[].salesOrders[].orderNumber |
string | no | The sales order number. Example: 'SO-1042'. |
items[].lines[].salesOrders[].orderType |
string | no | The type of the sales order. Possible values: 'new', 'upsell', 'earlyRenewal', 'renewal', 'replacement'. |
items[].lines[].salesOrders[].approvalStatus |
string | no | The approval status of the sales order. Possible values: 'draft', 'pendingApproval', 'revise', 'approved', 'rejected'. |
items[].salesOrders |
array<object> | yes | The sales orders that carry this subscription, oldest first: the order that created it, then every later upsell, renewal or replacement. An empty array when no sales order carries it. |
items[].salesOrders[].id |
string | yes | The sales order. See id on GET accounting/sales-orders/:id. |
items[].salesOrders[].orderNumber |
string | no | The sales order number. Example: 'SO-1042'. |
items[].salesOrders[].orderType |
string | no | The type of the sales order. Possible values: 'new', 'upsell', 'earlyRenewal', 'renewal', 'replacement'. |
items[].salesOrders[].approvalStatus |
string | no | The approval status of the sales order. Possible values: 'draft', 'pendingApproval', 'revise', 'approved', 'rejected'. |
items[].lastModifiedDate |
date-time | yes | The date and time the subscription last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
pagination |
object | yes | The pagination information 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 | True when more matches remain beyond this page. |
{
"data": {
"items": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"subscriptionNumber": "<subscriptionNumber>",
"customerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"customerName": "<customerName>",
"entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"currency": "<currency>",
"autoRenew": true,
"renewalTerm": 0,
"renewalPriceChangePercentage": "19.99",
"termType": "<termType>",
"subscriptionStatus": "<subscriptionStatus>",
"serviceStartDateBasis": "<serviceStartDateBasis>",
"serviceActivationDate": "2026-01-15",
"serviceStartDate": "2026-01-15",
"serviceEndDate": "2026-01-15",
"submissionDate": "2026-01-15",
"cancellationDate": "2026-01-15",
"cancellationNote": "<cancellationNote>",
"cancellationReason": "<cancellationReason>",
"isCancellationEnabled": true,
"suspensionDate": "2026-01-15",
"suspensionNote": "<suspensionNote>",
"suspensionReason": "<suspensionReason>",
"isSuspensionEnabled": true,
"externalSubscriptionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"annualRecurringRevenue": "19.99",
"monthlyRecurringRevenue": "19.99",
"totalUserCount": "19.99",
"prepaidBalance": "19.99",
"lines": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"subscriptionLineNumber": "<subscriptionLineNumber>",
"productName": "<productName>",
"quantity": "19.99",
"currency": "<currency>",
"subscriptionLineStatus": "<subscriptionLineStatus>",
"serviceStartDate": "2026-01-15",
"serviceEndDate": "2026-01-15",
"customServiceEndDate": "2026-01-15",
"maxSalesOrderProductLineServiceEndDate": "2026-01-15",
"annualRecurringRevenue": "19.99",
"monthlyRecurringRevenue": "19.99",
"salesOrders": [
null
]
}
],
"salesOrders": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"orderNumber": "<orderNumber>",
"orderType": "<orderType>",
"approvalStatus": "<approvalStatus>"
}
],
"lastModifiedDate": "2026-01-15T09:30:00.000Z"
}
],
"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