# Retrieve a sales order

Operation ID: `getSalesOrder`

Group: Accounting › Sales Orders

[Open in the interactive reference](https://docs.api.lensing.ai/lensing/v1/endpoints/getSalesOrder)

`GET /accounting/sales-orders/{id}`

Read-only: Reads and returns; changes nothing.

Retrieves a sales order. Use the sales order's id, not its orderNumber.

The response includes the customer, the addresses, and the product lines, grouped by subscription. POST accounting/sales-orders/search returns the same fields for each sales order.

## 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`. |
| `id` | path | string | yes | The unique identifier of the sales order you want to retrieve. |

## Response

`200` Success

Under `data` (getSalesOrderOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the sales order. |
| `orderNumber` | string | yes | The sales order number. Unique within the tenant. Example: 'SO-1042'. |
| `orderType` | string | no | The type of the sales order. Possible values: 'new', 'upsell', 'earlyRenewal', 'renewal', 'replacement'. |
| `approvalStatus` | string | no | The approval status of the sales order. Possible values: 'draft', 'pendingApproval', 'revise', 'approved', 'rejected'. |
| `bookDate` | date | yes | The date the sales order was booked. Format YYYY-MM-DD. |
| `serviceStartDate` | date | no | The first day of the order's service period. Format YYYY-MM-DD. |
| `serviceEndDate` | date | no | The last day of the order's service period. Absent when isEvergreen is true. Format YYYY-MM-DD. |
| `signDate` | date | no | The date the sales order was signed. Format YYYY-MM-DD. |
| `salesEffectiveDate` | date | no | The date the contract legally takes effect. salesEffectiveDate can be earlier than signDate. Format YYYY-MM-DD. |
| `isEvergreen` | boolean | no | Whether the order is evergreen, meaning at least one of its subscriptions has no end date and keeps billing until it is canceled. |
| `excludeFromTaxEngine` | boolean | no | Whether the invoices, credit memos, and debit memos created from this order are left out of the tax engine. Always false when your tenant does not allow sales orders to be excluded from the tax engine. |
| `term` | decimal | no | The length of the order's term, in months. Absent when isEvergreen is true. |
| `currency` | string | yes | The currency of the order. Format ISO 4217, for example 'USD'. |
| `totalContract` | decimal | no | The total value of the order before tax, in the order currency: the sum of totalPrice across its lines minus oneTimeDiscountAmount. |
| `invoicedAmount` | decimal | no | The amount invoiced from this order so far, in the order currency. |
| `oneTimeDiscountAmount` | decimal | no | The one-time discount on the order as a whole, in the order currency. |
| `oneTimeDiscountAllocation` | string | no | How oneTimeDiscountAmount is spread across the order's invoices. Possible values: 'firstInvoice', 'alignToInvoiceFrequency', 'custom'. |
| `paymentTerm` | string | no | The code of the payment term applied to the order's invoices. See code on GET accounting/payment-terms. |
| `purchaseOrder` | string | no | The customer's own purchase-order reference. |
| `memo` | string | no | A memo on the sales order. |
| `crmContractId` | string | no | The identifier of the contract this order came from, in an external CRM system. |
| `salesArrangement` | string | no | The number of the sales arrangement this order belongs to. No endpoint returns sales arrangements. |
| `salesArrangementId` | string | no | The sales arrangement this order belongs to. No endpoint returns sales arrangements. |
| `paymentTermId` | string | no | The payment term applied to the order's invoices. See id on GET accounting/payment-terms. |
| `opportunityId` | string | no | The identifier of the opportunity this order came from, in an external CRM system. |
| `opportunityName` | string | no | The name of the opportunity this order came from. |
| `dataSource` | string | no | The system the order came from. Examples: 'Salesforce', 'NetSuite'. |
| `priceBookId` | string | no | The price book the order's list prices come from. See id on GET accounting/price-books/:id. |
| `priceBookName` | string | no | The name of the price book the order's list prices come from. See priceBookName on GET accounting/price-books/:id. |
| `externalizedInvoicing` | boolean | no | Whether another system invoices this order. When true, no invoice plans are created for the order. |
| `customer` | object | yes | The customer this order is for. |
| `customer.id` | string | yes | The customer's identifier. See id on GET accounting/customers/:id. |
| `customer.customerNumber` | string | no | The customer number. Example: 'CUS-789012'. |
| `customer.name` | string | yes | The name of the customer, as it appears on invoices. |
| `customer.invoiceEmail` | string | no | The email address invoices are sent to. |
| `customer.mainEmail` | string | no | The email address of the customer's main contact. |
| `customer.segment` | string | no | The market segment of the customer. Possible values: 'SMB', 'MidMarket', 'Enterprise'. |
| `customer.taxExempt` | boolean | no | Whether the customer is exempt from tax. |
| `entityId` | string | yes | The legal entity that owns this sales order. See id on GET base/entities. |
| `entityName` | string | no | The name of the legal entity that owns this sales order. See entityName on GET base/entities. |
| `entityNumber` | string | yes | The number of the legal entity that owns this sales order. See entityNumber on GET base/entities. |
| `soldToAddress` | object | yes | The sold-to address of the order. It is the customer address used to calculate tax. |
| `soldToAddress.addressId` | string | no | The unique identifier for the address. |
| `soldToAddress.line1` | string | yes | The first address line: street number and name, or PO box. |
| `soldToAddress.line2` | string | no | The second address line: apartment, suite, unit, building, or floor. |
| `soldToAddress.city` | string | yes | The city or locality. |
| `soldToAddress.stateProvince` | string | no | The state, province, or region. |
| `soldToAddress.country` | string | yes | The country, as a name or ISO 3166-1 code. |
| `soldToAddress.zipCode` | string | yes | The postal or ZIP code. |
| `billToAddress` | object | yes | The bill-to address of the order. |
| `billToAddress.addressId` | string | no | The unique identifier for the address. |
| `billToAddress.line1` | string | yes | The first address line: street number and name, or PO box. |
| `billToAddress.line2` | string | no | The second address line: apartment, suite, unit, building, or floor. |
| `billToAddress.city` | string | yes | The city or locality. |
| `billToAddress.stateProvince` | string | no | The state, province, or region. |
| `billToAddress.country` | string | yes | The country, as a name or ISO 3166-1 code. |
| `billToAddress.zipCode` | string | yes | The postal or ZIP code. |
| `subscriptions` | array<object> | yes | The order's subscriptions, each with the product lines that belong to it. An empty array when the order has none. |
| `subscriptions[].id` | string | no | The subscription's identifier. See id on GET accounting/subscriptions/:id. |
| `subscriptions[].subscriptionNumber` | decimal | no | The subscription number. See subscriptionNumber on GET accounting/subscriptions/:id. |
| `subscriptions[].externalSubscriptionId` | string | no | The subscription's identifier in an external system. Absent when none was recorded at creation. |
| `subscriptions[].termType` | string | no | The term type of the subscription. Possible values: 'termed', 'evergreen'. |
| `subscriptions[].autoRenew` | boolean | no | Whether the subscription renews automatically at the end of its term. |
| `subscriptions[].serviceStartDate` | date | no | The earliest service start date across the subscription's lines. Format YYYY-MM-DD. |
| `subscriptions[].serviceEndDate` | date | no | The latest service end date across all of the subscription's lines, including lines from other orders. Format YYYY-MM-DD. Usually absent when the subscription is evergreen, but present once it is canceled or suspended. |
| `subscriptions[].products` | array<object> | yes | The product lines of this subscription on this order, one entry per product line. For a ramp deal, one entry represents the whole product, and each ramp in rampDeal.ramps is one of its product lines. |
| `subscriptions[].products[].productCode` | string | yes | The code of the product. See productCode on GET accounting/products/:id. |
| `subscriptions[].products[].productId` | string | yes | The product ordered on this line. See id on GET accounting/products/:id. |
| `subscriptions[].products[].productLineId` | string | yes | The product line ordered on this line. See id on GET accounting/product-lines/:id. |
| `subscriptions[].products[].productName` | string | no | The product's current name. See productName on GET accounting/products/:id. |
| `subscriptions[].products[].salesOrderProductLineId` | string | no | The unique identifier for this order line. On a ramp deal, the identifier of the earliest ramp's line. The other ramps' line identifiers are not returned. |
| `subscriptions[].products[].quantity` | decimal | yes | The quantity ordered on this line. On a ramp deal, it is the first ramp's quantity. |
| `subscriptions[].products[].listPrice` | decimal | no | The list price per unit before discount, in the order currency. |
| `subscriptions[].products[].unitPrice` | decimal | no | The discounted price per unit, in the order currency. unitPrice = listPrice - discountAmount = listPrice × (1 - discountPercentage). |
| `subscriptions[].products[].totalPrice` | decimal | no | The total price of the line, in the order currency. |
| `subscriptions[].products[].discountAmount` | decimal | no | The discount per unit, in the order currency. |
| `subscriptions[].products[].discountPercentage` | decimal | no | The discount per unit, as a decimal fraction of listPrice. For example, 0.1 is 10%. |
| `subscriptions[].products[].invoiceFrequency` | string | no | How often the line is invoiced. Possible values: 'monthly', 'biMonthly', 'quarterly', 'semiAnnually', 'annually', 'once', 'custom', 'template', 'milestone', 'allAtOnce', 'termEnd'. See invoiceFrequency on GET accounting/product-lines/:id. |
| `subscriptions[].products[].invoiceTiming` | string | no | When the line is invoiced relative to the period it covers. Possible values: 'advance' (at the start of the period), 'arrears' (at the end of the period). |
| `subscriptions[].products[].lineInvoiceDay` | string | no | The day of the period the line is invoiced on. Possible values: 'anniversary', 'first', 'last', 'specific'. |
| `subscriptions[].products[].priceModel` | string | no | How the price of this order line depends on quantity. Possible values: 'flat', 'perUnit', 'tiered', 'volume', 'stairstep', 'rateCard', 'thresholdBased'. See priceModel on GET accounting/product-lines/:id. |
| `subscriptions[].products[].unitOfMeasure` | string | no | The unit the quantity is counted in. Possible values: 'instance', 'gigabyte', 'terabyte', 'user', 'seat', 'minute', 'hour', 'day', 'month', 'each', 'license', 'activeUser', 'megabyte', 'message', 'text', 'platform', 'employee', 'personnel', 'credit', 'currency', 'package', 'case', 'word', 'record'. See unitOfMeasure on GET accounting/product-lines/:id. |
| `subscriptions[].products[].pricingTerm` | string | no | The period the unit price covers. Possible values: 'monthly', 'biMonthly', 'once', 'quarterly', 'semiAnnually', 'annually'. See pricingTerm on GET accounting/product-lines/:id. |
| `subscriptions[].products[].serviceStartDate` | date | no | The first day of this line's service period. Format YYYY-MM-DD. |
| `subscriptions[].products[].serviceEndDate` | date | no | The last day of this line's service period. Format YYYY-MM-DD. |
| `subscriptions[].products[].externalIdentifiers` | array<object> | yes | The line's identifiers in other systems, one per configured field name. An empty array when the line has none. |
| `subscriptions[].products[].externalIdentifiers[].fieldName` | string | yes | The name of the external identifier field, as set up by an administrator in Settings & Policies > Integrations > External Identifiers. |
| `subscriptions[].products[].externalIdentifiers[].value` | string | yes | The identifier in the other system. |
| `subscriptions[].products[].externalIdentifiers[].externalUrl` | string | no | A link to the record in the other system. |
| `subscriptions[].products[].overage` | object | no | The pricing for usage above the line's allowance. Absent when the line has no overage discount. |
| `subscriptions[].products[].overage.listPrice` | decimal | no | The list price per unit of overage usage, in the order currency. |
| `subscriptions[].products[].overage.unitPrice` | decimal | no | The discounted price per unit of overage usage, in the order currency. |
| `subscriptions[].products[].overage.discountAmount` | decimal | no | The discount per unit of overage usage, in the order currency. |
| `subscriptions[].products[].overage.discountPercentage` | decimal | no | The discount per unit of overage usage, as a decimal fraction of listPrice. For example, 0.1 is 10%. Absent when discountAmount is present. |
| `subscriptions[].products[].rateCardEntries` | array<object> | no | The rate card entries of this line. Absent when the line has none. |
| `subscriptions[].products[].rateCardEntries[].id` | string | yes | The unique identifier for the rate card entry. |
| `subscriptions[].products[].rateCardEntries[].identifier` | string | no | The identifier of the billable component this entry prices. No endpoint returns billable components. |
| `subscriptions[].products[].rateCardEntries[].label` | string | no | A description of the rate card entry. |
| `subscriptions[].products[].rateCardEntries[].unitOfMeasure` | string | yes | The unit this entry is priced in, for example 'user' or 'gigabyte'. |
| `subscriptions[].products[].rateCardEntries[].unitPrice` | decimal | yes | The price per unit, in this entry's currency. |
| `subscriptions[].products[].rateCardEntries[].currency` | string | yes | The currency of unitPrice. Format ISO 4217, for example 'USD'. |
| `subscriptions[].products[].tiers` | array<object> | no | The pricing tiers of this line, lowest fromQuantity first. Absent when the line has none. |
| `subscriptions[].products[].tiers[].fromQuantity` | decimal | yes | The quantity at which this tier starts. |
| `subscriptions[].products[].tiers[].toQuantity` | decimal | no | The quantity at which this tier ends. Absent on the last tier, which has no upper limit. |
| `subscriptions[].products[].tiers[].unitPrice` | decimal | yes | The price for this tier, in the order currency. When priceModel is 'perUnit', it is charged for each unit priced in this tier. When priceModel is 'flat', it is charged once for the tier, whatever the number of units. |
| `subscriptions[].products[].tiers[].listPrice` | decimal | no | The list price for this tier before discount, in the order currency. |
| `subscriptions[].products[].tiers[].priceModel` | string | no | How unitPrice applies within this tier. Possible values: 'flat', 'perUnit'. |
| `subscriptions[].products[].tags` | array<object> | no | The value accounting tags of this product, as dimension and value pairs. Every line of the same product has the same tags. Absent when the product has no tags. |
| `subscriptions[].products[].tags[].dimension` | string | yes | The name of the tag dimension, for example 'Department'. |
| `subscriptions[].products[].tags[].value` | string | yes | The tag value within the dimension, for example 'Engineering'. |
| `subscriptions[].products[].items` | array<object> | no | The inventory items of this product. Every line of the same product has the same items. Absent when the product has no items or is a ramp deal. |
| `subscriptions[].products[].items[].id` | string | yes | The unique identifier for the order's record of this item. |
| `subscriptions[].products[].items[].itemId` | string | no | The inventory item. See id on GET inventory/items/:id. |
| `subscriptions[].products[].items[].itemCode` | string | no | The item code of the inventory item. See itemCode on GET inventory/items/:id. |
| `subscriptions[].products[].items[].itemName` | string | no | The name of the inventory item. |
| `subscriptions[].products[].items[].productName` | string | no | The name of the product the item belongs to. |
| `subscriptions[].products[].items[].itemOrdered` | decimal | yes | The quantity of this item ordered: the total quantity of the product across its lines on this order. It is not multiplied by the item's quantity in the product definition. |
| `subscriptions[].products[].items[].totalShipped` | decimal | no | The quantity of this item shipped so far, summed across its shipments. |
| `subscriptions[].products[].rampDeal` | object | no | Present only when the product is a ramp deal. The entry then represents the whole product, and each ramp in ramps is one of its product lines, with its own dates, quantity, and prices, earliest first. On a ramp deal, the entry has no listPrice, unitPrice, totalPrice, discountAmount, discountPercentage, serviceStartDate, serviceEndDate, items, tiers, rateCardEntries, overage, or prepaidConfiguration. |
| `subscriptions[].products[].rampDeal.interval` | string | yes | How the ramp periods are set. Possible values: 'annually', 'specificDates'. |
| `subscriptions[].products[].rampDeal.invoiceTiming` | string | yes | How the ramp deal is invoiced. Possible values: 'perInterval', 'allAtOnce'. |
| `subscriptions[].products[].rampDeal.ramps` | array<object> | yes | The ramps of the deal, earliest first. |
| `subscriptions[].products[].rampDeal.ramps[].serviceStartDate` | date | yes | The first day of this ramp. Format YYYY-MM-DD. |
| `subscriptions[].products[].rampDeal.ramps[].serviceEndDate` | date | yes | The last day of this ramp. Format YYYY-MM-DD. |
| `subscriptions[].products[].rampDeal.ramps[].quantity` | decimal | yes | The quantity for this ramp. |
| `subscriptions[].products[].rampDeal.ramps[].listPrice` | decimal | no | The list price per unit for this ramp before discount, in the order currency. |
| `subscriptions[].products[].rampDeal.ramps[].unitPrice` | decimal | no | The discounted price per unit for this ramp, in the order currency. |
| `subscriptions[].products[].rampDeal.ramps[].invoiceFrequency` | string | no | How often this ramp is invoiced. Possible values: 'monthly', 'biMonthly', 'quarterly', 'semiAnnually', 'annually', 'once', 'custom', 'template', 'milestone', 'allAtOnce', 'termEnd'. |
| `subscriptions[].products[].prepaidConfiguration` | object | no | The prepaid balance settings of this line. Absent when the line is not a prepaid line. |
| `subscriptions[].products[].prepaidConfiguration.overConsumptionBehavior` | string | yes | What happens when usage exceeds the prepaid balance. Possible values: 'allowNegative' (the balance goes negative, and the shortfall is taken from the new prepaid amount when the subscription renews), 'overage' (the balance stops at zero, and usage beyond it is invoiced at the line's overage rate). |
| `subscriptions[].products[].prepaidConfiguration.rolloverAtRenewal` | boolean | yes | Whether unused balance rolls over when the subscription renews. |
| `subscriptions[].products[].prepaidConfiguration.balance` | decimal | no | The prepaid units (credits) left in the balance. |
| `subscriptions[].products[].prepaidConfiguration.consumedAmount` | decimal | no | The prepaid units (credits) used so far: the quantity funded by this line minus the current balance. Absent when balance is absent. |
| `nonSubscriptionProducts` | array<object> | yes | The order's product lines that belong to no subscription, with the same fields as subscriptions[].products. An empty array when the order has none. |
| `nonSubscriptionProducts[].productCode` | string | yes | The code of the product. See productCode on GET accounting/products/:id. |
| `nonSubscriptionProducts[].productId` | string | yes | The product ordered on this line. See id on GET accounting/products/:id. |
| `nonSubscriptionProducts[].productLineId` | string | yes | The product line ordered on this line. See id on GET accounting/product-lines/:id. |
| `nonSubscriptionProducts[].productName` | string | no | The product's current name. See productName on GET accounting/products/:id. |
| `nonSubscriptionProducts[].salesOrderProductLineId` | string | no | The unique identifier for this order line. On a ramp deal, the identifier of the earliest ramp's line. The other ramps' line identifiers are not returned. |
| `nonSubscriptionProducts[].quantity` | decimal | yes | The quantity ordered on this line. On a ramp deal, it is the first ramp's quantity. |
| `nonSubscriptionProducts[].listPrice` | decimal | no | The list price per unit before discount, in the order currency. |
| `nonSubscriptionProducts[].unitPrice` | decimal | no | The discounted price per unit, in the order currency. unitPrice = listPrice - discountAmount = listPrice × (1 - discountPercentage). |
| `nonSubscriptionProducts[].totalPrice` | decimal | no | The total price of the line, in the order currency. |
| `nonSubscriptionProducts[].discountAmount` | decimal | no | The discount per unit, in the order currency. |
| `nonSubscriptionProducts[].discountPercentage` | decimal | no | The discount per unit, as a decimal fraction of listPrice. For example, 0.1 is 10%. |
| `nonSubscriptionProducts[].invoiceFrequency` | string | no | How often the line is invoiced. Possible values: 'monthly', 'biMonthly', 'quarterly', 'semiAnnually', 'annually', 'once', 'custom', 'template', 'milestone', 'allAtOnce', 'termEnd'. See invoiceFrequency on GET accounting/product-lines/:id. |
| `nonSubscriptionProducts[].invoiceTiming` | string | no | When the line is invoiced relative to the period it covers. Possible values: 'advance' (at the start of the period), 'arrears' (at the end of the period). |
| `nonSubscriptionProducts[].lineInvoiceDay` | string | no | The day of the period the line is invoiced on. Possible values: 'anniversary', 'first', 'last', 'specific'. |
| `nonSubscriptionProducts[].priceModel` | string | no | How the price of this order line depends on quantity. Possible values: 'flat', 'perUnit', 'tiered', 'volume', 'stairstep', 'rateCard', 'thresholdBased'. See priceModel on GET accounting/product-lines/:id. |
| `nonSubscriptionProducts[].unitOfMeasure` | string | no | The unit the quantity is counted in. Possible values: 'instance', 'gigabyte', 'terabyte', 'user', 'seat', 'minute', 'hour', 'day', 'month', 'each', 'license', 'activeUser', 'megabyte', 'message', 'text', 'platform', 'employee', 'personnel', 'credit', 'currency', 'package', 'case', 'word', 'record'. See unitOfMeasure on GET accounting/product-lines/:id. |
| `nonSubscriptionProducts[].pricingTerm` | string | no | The period the unit price covers. Possible values: 'monthly', 'biMonthly', 'once', 'quarterly', 'semiAnnually', 'annually'. See pricingTerm on GET accounting/product-lines/:id. |
| `nonSubscriptionProducts[].serviceStartDate` | date | no | The first day of this line's service period. Format YYYY-MM-DD. |
| `nonSubscriptionProducts[].serviceEndDate` | date | no | The last day of this line's service period. Format YYYY-MM-DD. |
| `nonSubscriptionProducts[].externalIdentifiers` | array<object> | yes | The line's identifiers in other systems, one per configured field name. An empty array when the line has none. |
| `nonSubscriptionProducts[].externalIdentifiers[].fieldName` | string | yes | The name of the external identifier field, as set up by an administrator in Settings & Policies > Integrations > External Identifiers. |
| `nonSubscriptionProducts[].externalIdentifiers[].value` | string | yes | The identifier in the other system. |
| `nonSubscriptionProducts[].externalIdentifiers[].externalUrl` | string | no | A link to the record in the other system. |
| `nonSubscriptionProducts[].overage` | object | no | The pricing for usage above the line's allowance. Absent when the line has no overage discount. |
| `nonSubscriptionProducts[].overage.listPrice` | decimal | no | The list price per unit of overage usage, in the order currency. |
| `nonSubscriptionProducts[].overage.unitPrice` | decimal | no | The discounted price per unit of overage usage, in the order currency. |
| `nonSubscriptionProducts[].overage.discountAmount` | decimal | no | The discount per unit of overage usage, in the order currency. |
| `nonSubscriptionProducts[].overage.discountPercentage` | decimal | no | The discount per unit of overage usage, as a decimal fraction of listPrice. For example, 0.1 is 10%. Absent when discountAmount is present. |
| `nonSubscriptionProducts[].rateCardEntries` | array<object> | no | The rate card entries of this line. Absent when the line has none. |
| `nonSubscriptionProducts[].rateCardEntries[].id` | string | yes | The unique identifier for the rate card entry. |
| `nonSubscriptionProducts[].rateCardEntries[].identifier` | string | no | The identifier of the billable component this entry prices. No endpoint returns billable components. |
| `nonSubscriptionProducts[].rateCardEntries[].label` | string | no | A description of the rate card entry. |
| `nonSubscriptionProducts[].rateCardEntries[].unitOfMeasure` | string | yes | The unit this entry is priced in, for example 'user' or 'gigabyte'. |
| `nonSubscriptionProducts[].rateCardEntries[].unitPrice` | decimal | yes | The price per unit, in this entry's currency. |
| `nonSubscriptionProducts[].rateCardEntries[].currency` | string | yes | The currency of unitPrice. Format ISO 4217, for example 'USD'. |
| `nonSubscriptionProducts[].tiers` | array<object> | no | The pricing tiers of this line, lowest fromQuantity first. Absent when the line has none. |
| `nonSubscriptionProducts[].tiers[].fromQuantity` | decimal | yes | The quantity at which this tier starts. |
| `nonSubscriptionProducts[].tiers[].toQuantity` | decimal | no | The quantity at which this tier ends. Absent on the last tier, which has no upper limit. |
| `nonSubscriptionProducts[].tiers[].unitPrice` | decimal | yes | The price for this tier, in the order currency. When priceModel is 'perUnit', it is charged for each unit priced in this tier. When priceModel is 'flat', it is charged once for the tier, whatever the number of units. |
| `nonSubscriptionProducts[].tiers[].listPrice` | decimal | no | The list price for this tier before discount, in the order currency. |
| `nonSubscriptionProducts[].tiers[].priceModel` | string | no | How unitPrice applies within this tier. Possible values: 'flat', 'perUnit'. |
| `nonSubscriptionProducts[].tags` | array<object> | no | The value accounting tags of this product, as dimension and value pairs. Every line of the same product has the same tags. Absent when the product has no tags. |
| `nonSubscriptionProducts[].tags[].dimension` | string | yes | The name of the tag dimension, for example 'Department'. |
| `nonSubscriptionProducts[].tags[].value` | string | yes | The tag value within the dimension, for example 'Engineering'. |
| `nonSubscriptionProducts[].items` | array<object> | no | The inventory items of this product. Every line of the same product has the same items. Absent when the product has no items or is a ramp deal. |
| `nonSubscriptionProducts[].items[].id` | string | yes | The unique identifier for the order's record of this item. |
| `nonSubscriptionProducts[].items[].itemId` | string | no | The inventory item. See id on GET inventory/items/:id. |
| `nonSubscriptionProducts[].items[].itemCode` | string | no | The item code of the inventory item. See itemCode on GET inventory/items/:id. |
| `nonSubscriptionProducts[].items[].itemName` | string | no | The name of the inventory item. |
| `nonSubscriptionProducts[].items[].productName` | string | no | The name of the product the item belongs to. |
| `nonSubscriptionProducts[].items[].itemOrdered` | decimal | yes | The quantity of this item ordered: the total quantity of the product across its lines on this order. It is not multiplied by the item's quantity in the product definition. |
| `nonSubscriptionProducts[].items[].totalShipped` | decimal | no | The quantity of this item shipped so far, summed across its shipments. |
| `nonSubscriptionProducts[].rampDeal` | object | no | Present only when the product is a ramp deal. The entry then represents the whole product, and each ramp in ramps is one of its product lines, with its own dates, quantity, and prices, earliest first. On a ramp deal, the entry has no listPrice, unitPrice, totalPrice, discountAmount, discountPercentage, serviceStartDate, serviceEndDate, items, tiers, rateCardEntries, overage, or prepaidConfiguration. |
| `nonSubscriptionProducts[].rampDeal.interval` | string | yes | How the ramp periods are set. Possible values: 'annually', 'specificDates'. |
| `nonSubscriptionProducts[].rampDeal.invoiceTiming` | string | yes | How the ramp deal is invoiced. Possible values: 'perInterval', 'allAtOnce'. |
| `nonSubscriptionProducts[].rampDeal.ramps` | array<object> | yes | The ramps of the deal, earliest first. |
| `nonSubscriptionProducts[].rampDeal.ramps[].serviceStartDate` | date | yes | The first day of this ramp. Format YYYY-MM-DD. |
| `nonSubscriptionProducts[].rampDeal.ramps[].serviceEndDate` | date | yes | The last day of this ramp. Format YYYY-MM-DD. |
| `nonSubscriptionProducts[].rampDeal.ramps[].quantity` | decimal | yes | The quantity for this ramp. |
| `nonSubscriptionProducts[].rampDeal.ramps[].listPrice` | decimal | no | The list price per unit for this ramp before discount, in the order currency. |
| `nonSubscriptionProducts[].rampDeal.ramps[].unitPrice` | decimal | no | The discounted price per unit for this ramp, in the order currency. |
| `nonSubscriptionProducts[].rampDeal.ramps[].invoiceFrequency` | string | no | How often this ramp is invoiced. Possible values: 'monthly', 'biMonthly', 'quarterly', 'semiAnnually', 'annually', 'once', 'custom', 'template', 'milestone', 'allAtOnce', 'termEnd'. |
| `nonSubscriptionProducts[].prepaidConfiguration` | object | no | The prepaid balance settings of this line. Absent when the line is not a prepaid line. |
| `nonSubscriptionProducts[].prepaidConfiguration.overConsumptionBehavior` | string | yes | What happens when usage exceeds the prepaid balance. Possible values: 'allowNegative' (the balance goes negative, and the shortfall is taken from the new prepaid amount when the subscription renews), 'overage' (the balance stops at zero, and usage beyond it is invoiced at the line's overage rate). |
| `nonSubscriptionProducts[].prepaidConfiguration.rolloverAtRenewal` | boolean | yes | Whether unused balance rolls over when the subscription renews. |
| `nonSubscriptionProducts[].prepaidConfiguration.balance` | decimal | no | The prepaid units (credits) left in the balance. |
| `nonSubscriptionProducts[].prepaidConfiguration.consumedAmount` | decimal | no | The prepaid units (credits) used so far: the quantity funded by this line minus the current balance. Absent when balance is absent. |
| `lastModifiedDate` | date-time | yes | The date and time the sales order last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Changes to product lines do not update it. |
| `externalIdentifiers` | array<object> | no | The order's identifiers in other systems, at most one per field name. An empty array when the order has none. |
| `externalIdentifiers[].fieldName` | string | yes | The name of the external identifier field, as set up by an administrator in Settings & Policies > Integrations > External Identifiers. |
| `externalIdentifiers[].value` | string | yes | The identifier in the other system. |
| `externalIdentifiers[].externalUrl` | string | no | A link to the record in the other system. |

```json
{
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "orderNumber": "<orderNumber>",
    "orderType": "<orderType>",
    "approvalStatus": "<approvalStatus>",
    "bookDate": "2026-01-15",
    "serviceStartDate": "2026-01-15",
    "serviceEndDate": "2026-01-15",
    "signDate": "2026-01-15",
    "salesEffectiveDate": "2026-01-15",
    "isEvergreen": true,
    "excludeFromTaxEngine": true,
    "term": "19.99",
    "currency": "<currency>",
    "totalContract": "19.99",
    "invoicedAmount": "19.99",
    "oneTimeDiscountAmount": "19.99",
    "oneTimeDiscountAllocation": "<oneTimeDiscountAllocation>",
    "paymentTerm": "<paymentTerm>",
    "purchaseOrder": "<purchaseOrder>",
    "memo": "<memo>",
    "crmContractId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "salesArrangement": "<salesArrangement>",
    "salesArrangementId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "paymentTermId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "opportunityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "opportunityName": "<opportunityName>",
    "dataSource": "<dataSource>",
    "priceBookId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "priceBookName": "<priceBookName>",
    "externalizedInvoicing": true,
    "customer": {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "customerNumber": "<customerNumber>",
      "name": "<name>",
      "invoiceEmail": "<invoiceEmail>",
      "mainEmail": "<mainEmail>",
      "segment": "<segment>",
      "taxExempt": true
    },
    "entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "entityName": "<entityName>",
    "entityNumber": "<entityNumber>",
    "soldToAddress": {
      "addressId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "line1": "<line1>",
      "line2": "<line2>",
      "city": "<city>",
      "stateProvince": "<stateProvince>",
      "country": "<country>",
      "zipCode": "<zipCode>"
    },
    "billToAddress": {
      "addressId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "line1": "<line1>",
      "line2": "<line2>",
      "city": "<city>",
      "stateProvince": "<stateProvince>",
      "country": "<country>",
      "zipCode": "<zipCode>"
    },
    "subscriptions": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "subscriptionNumber": "19.99",
        "externalSubscriptionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "termType": "<termType>",
        "autoRenew": true,
        "serviceStartDate": "2026-01-15",
        "serviceEndDate": "2026-01-15",
        "products": [
          {
            "productCode": "<productCode>",
            "productId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "productLineId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "productName": "<productName>",
            "salesOrderProductLineId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "quantity": "19.99",
            "listPrice": "19.99",
            "unitPrice": "19.99",
            "totalPrice": "19.99",
            "discountAmount": "19.99",
            "discountPercentage": "19.99",
            "invoiceFrequency": "<invoiceFrequency>",
            "invoiceTiming": "<invoiceTiming>",
            "lineInvoiceDay": "<lineInvoiceDay>",
            "priceModel": "<priceModel>",
            "unitOfMeasure": "<unitOfMeasure>",
            "pricingTerm": "<pricingTerm>",
            "serviceStartDate": "2026-01-15",
            "serviceEndDate": "2026-01-15",
            "externalIdentifiers": [
              null
            ],
            "overage": {
              "listPrice": null,
              "unitPrice": null,
              "discountAmount": null,
              "discountPercentage": null
            },
            "rateCardEntries": [
              null
            ],
            "tiers": [
              null
            ],
            "tags": [
              null
            ],
            "items": [
              null
            ],
            "rampDeal": {
              "interval": null,
              "invoiceTiming": null,
              "ramps": null
            },
            "prepaidConfiguration": {
              "overConsumptionBehavior": null,
              "rolloverAtRenewal": null,
              "balance": null,
              "consumedAmount": null
            }
          }
        ]
      }
    ],
    "nonSubscriptionProducts": [
      {
        "productCode": "<productCode>",
        "productId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "productLineId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "productName": "<productName>",
        "salesOrderProductLineId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "quantity": "19.99",
        "listPrice": "19.99",
        "unitPrice": "19.99",
        "totalPrice": "19.99",
        "discountAmount": "19.99",
        "discountPercentage": "19.99",
        "invoiceFrequency": "<invoiceFrequency>",
        "invoiceTiming": "<invoiceTiming>",
        "lineInvoiceDay": "<lineInvoiceDay>",
        "priceModel": "<priceModel>",
        "unitOfMeasure": "<unitOfMeasure>",
        "pricingTerm": "<pricingTerm>",
        "serviceStartDate": "2026-01-15",
        "serviceEndDate": "2026-01-15",
        "externalIdentifiers": [
          {
            "fieldName": "<fieldName>",
            "value": "<value>",
            "externalUrl": "<externalUrl>"
          }
        ],
        "overage": {
          "listPrice": "19.99",
          "unitPrice": "19.99",
          "discountAmount": "19.99",
          "discountPercentage": "19.99"
        },
        "rateCardEntries": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "identifier": "<identifier>",
            "label": "<label>",
            "unitOfMeasure": "<unitOfMeasure>",
            "unitPrice": "19.99",
            "currency": "<currency>"
          }
        ],
        "tiers": [
          {
            "fromQuantity": "19.99",
            "toQuantity": "19.99",
            "unitPrice": "19.99",
            "listPrice": "19.99",
            "priceModel": "<priceModel>"
          }
        ],
        "tags": [
          {
            "dimension": "<dimension>",
            "value": "<value>"
          }
        ],
        "items": [
          {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "itemId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "itemCode": "<itemCode>",
            "itemName": "<itemName>",
            "productName": "<productName>",
            "itemOrdered": "19.99",
            "totalShipped": "19.99"
          }
        ],
        "rampDeal": {
          "interval": "<interval>",
          "invoiceTiming": "<invoiceTiming>",
          "ramps": [
            {
              "serviceStartDate": null,
              "serviceEndDate": null,
              "quantity": null,
              "listPrice": null,
              "unitPrice": null,
              "invoiceFrequency": null
            }
          ]
        },
        "prepaidConfiguration": {
          "overConsumptionBehavior": "<overConsumptionBehavior>",
          "rolloverAtRenewal": true,
          "balance": "19.99",
          "consumedAmount": "19.99"
        }
      }
    ],
    "lastModifiedDate": "2026-01-15T09:30:00.000Z",
    "externalIdentifiers": [
      {
        "fieldName": "<fieldName>",
        "value": "<value>",
        "externalUrl": "<externalUrl>"
      }
    ]
  },
  "diagnostics": [
    {
      "code": "<code>",
      "message": "<message>",
      "severity": "error",
      "path": [
        "<path>"
      ],
      "details": "<details>"
    }
  ]
}
```

## Errors

| Code | Status |
| --- | --- |
| `NOT_FOUND` | 400 |

## Statuses

- `400` — Invalid request or business failure. Codes: NOT_FOUND
- `401` — The request carries no valid access token.
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests from this client address. The response has no body and no `Retry-After` header.
- `500` — Internal server error
