# Get Sales Order

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

Group: Accounting › Sales Orders · Operation ID: `getSalesOrder`

Fetch a single sales order by its id (a UUID), bound from the :id path segment. Returns the order header with its customer, entity and external identifiers — the same item schema as POST accounting/sales-orders/search. Read-only. Raises NOT_FOUND when no order has that id (should map to 404). Every request must carry the Api-Version header.

[Open in the interactive reference](https://docs.api.lensing.ai/?op=getSalesOrder)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | `"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 | Id of the sales order to fetch (a UUID); bound from the :id path segment. |

## Response

`200` Success

Under `data` (getSalesOrderOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | Id of the sales order (a UUID) — the public identifier used by GET accounting/sales-orders/:id. |
| `orderNumber` | string | yes | System-assigned sales-order number. Human-readable reference used on invoices and proposals. |
| `orderType` | string | no | Type of sales order, e.g. new business, renewal, expansion, downgrade. |
| `approvalStatus` | string | no | Approval state of the order. An `ApprovalStatus` member, e.g. 'draft', 'pendingApproval', 'approved'. |
| `bookDate` | string (date) | yes | Date the order was booked (YYYY-MM-DD). Drives revenue-recognition period assignment. |
| `serviceStartDate` | string (date) | no | First date services or products under this order are delivered (YYYY-MM-DD). |
| `serviceEndDate` | string (date) | no | Last date services or products under this order are delivered (YYYY-MM-DD). Absent for evergreen orders. |
| `signDate` | string (date) | no | Date the order was signed (YYYY-MM-DD), when recorded. |
| `salesEffectiveDate` | string (date) | no | Date the order becomes effective for sales reporting (YYYY-MM-DD), when recorded. |
| `isEvergreen` | boolean | no | True when the order renews indefinitely rather than ending on serviceEndDate. |
| `excludeFromTaxEngine` | boolean | no | When true, invoices, credit memos and debit memos from this order are never submitted to the tax engine. |
| `term` | string (decimal) | no | Contract term length in months. Absent for evergreen (open-ended) orders. |
| `currency` | string | yes | ISO 4217 three-letter currency code (e.g. USD, EUR, GBP) the order is denominated in. |
| `totalContract` | string (decimal) | no | Total contract value across all line items, in the order currency (see `currency`). |
| `invoicedAmount` | string (decimal) | no | Amount already invoiced against the contract value, in the order currency (see `currency`). The remaining backlog is totalContract − invoicedAmount. |
| `oneTimeDiscountAmount` | string (decimal) | no | Lump-sum discount applied to the entire order, in the order currency (see `currency`). |
| `oneTimeDiscountAllocation` | string | no | How the lump-sum discount is allocated across products. One of 'firstInvoice', 'alignToInvoiceFrequency'. |
| `paymentTerm` | string | no | Payment-term identifier or display name applied to invoices from this order. |
| `purchaseOrder` | string | no | The customer's own purchase-order reference for this order, when supplied. |
| `memo` | string | no | Free-text memo recorded on the order. |
| `crmContractId` | string | no | Identifier of the originating contract in the CRM, when the order came from one. |
| `salesArrangement` | string | no | Number of the sales arrangement this order belongs to. |
| `salesArrangementId` | string | no | Id of that sales arrangement (a UUID) — the form a write action accepts. |
| `paymentTermId` | string | no | Id of the payment term (a UUID). paymentTerm carries its code; this is the form a write action accepts. |
| `opportunityId` | string | no | Identifier of the opportunity this order came from, as issued by the CRM — not an id from this API. |
| `opportunityName` | string | no | Name of that CRM opportunity. |
| `dataSource` | string | no | System the order originated in when it was integrated rather than entered here, e.g. 'Salesforce'. |
| `priceBookId` | string | no | Id of the price book this order's prices were taken from (a UUID). |
| `priceBookName` | string | no | Name of that price book, denormalised onto the order. |
| `externalizedInvoicing` | boolean | no | True when invoicing for this order happens in another system, so no invoices are generated from it here. |
| `customer` | object | yes | Customer denormalised from the linked Customer record (key fields only). Fetch the full record from GET accounting/customers/:id. |
| `customer.id` | string | yes | Id of the customer (a UUID). |
| `customer.customerNumber` | string | no | System-assigned customer reference number. |
| `customer.name` | string | yes | Legal or business name of the customer. |
| `customer.invoiceEmail` | string | no | Email that receives invoices for this customer. |
| `customer.mainEmail` | string | no | Primary business contact email for the customer. |
| `customer.segment` | string | no | Market-segment classification. One of 'SMB', 'MidMarket', 'Enterprise'. |
| `customer.taxExempt` | boolean | no | True if the customer is exempt from tax on all transactions. |
| `entityId` | string | yes | Id of the legal entity that owns this sales order (a UUID). |
| `entityName` | string | no | Name of the owning legal entity. |
| `entityNumber` | string | yes | System-assigned number of the legal entity that owns this order. |
| `soldToAddress` | object | yes | Sold-to address used for tax determination on this order. |
| `soldToAddress.addressId` | string | no | Id of the address record (a UUID), when one is stored. |
| `soldToAddress.line1` | string | yes | Street address line 1: number, street name, or PO box. |
| `soldToAddress.line2` | string | no | Apartment, suite, unit, building, floor, etc. |
| `soldToAddress.city` | string | yes | City or locality. |
| `soldToAddress.stateProvince` | string | no | State, province, or region. |
| `soldToAddress.country` | string | yes | Country name or ISO 3166-1 country code. |
| `soldToAddress.zipCode` | string | yes | Postal code or ZIP code as required by the country postal system. |
| `billToAddress` | object | yes | Bill-to address where invoices from this order are sent. |
| `billToAddress.addressId` | string | no | Id of the address record (a UUID), when one is stored. |
| `billToAddress.line1` | string | yes | Street address line 1: number, street name, or PO box. |
| `billToAddress.line2` | string | no | Apartment, suite, unit, building, floor, etc. |
| `billToAddress.city` | string | yes | City or locality. |
| `billToAddress.stateProvince` | string | no | State, province, or region. |
| `billToAddress.country` | string | yes | Country name or ISO 3166-1 country code. |
| `billToAddress.zipCode` | string | yes | Postal code or ZIP code as required by the country postal system. |
| `subscriptions` | array of object | yes | Subscriptions on the order, one entry per subscription, each with the product lines that belong to it. Mirrors the subscriptions[] the create action takes. |
| `subscriptions[].id` | string | no | Id of the subscription (a UUID). Absent when the line records only a subscription number. |
| `subscriptions[].subscriptionNumber` | string (decimal) | no | System-assigned subscription number. |
| `subscriptions[].externalSubscriptionId` | string | no | The subscribing system's own id for this subscription, when the order was integrated from one. |
| `subscriptions[].termType` | string | no | Whether the subscription runs to a fixed end date or renews indefinitely. One of 'termed', 'evergreen'. |
| `subscriptions[].autoRenew` | boolean | no | True when the subscription renews automatically at the end of its term. |
| `subscriptions[].serviceStartDate` | string (date) | no | First date the subscription delivers service (YYYY-MM-DD). |
| `subscriptions[].serviceEndDate` | string (date) | no | Last date the subscription delivers service (YYYY-MM-DD). Absent while evergreen. Create takes a term in months instead; this is what that term resolved to. |
| `subscriptions[].products` | array of object | yes | Product lines in this subscription. Each entry is a SalesOrderProductLine and may carry tiered pricing, rate-card pricing, ramp deals, or per-item breakdowns. |
| `subscriptions[].products[].productCode` | string | yes | Company-specific code of the product. |
| `subscriptions[].products[].productId` | string | yes | Id of the product (a UUID). |
| `subscriptions[].products[].productLineId` | string | yes | Id of the product line under the product (a UUID). |
| `subscriptions[].products[].productName` | string | no | Product name as recorded on this line. May differ from the product's current name — the line keeps the name it was sold under. |
| `subscriptions[].products[].salesOrderProductLineId` | string | no | Id of this sales-order line (a UUID). |
| `subscriptions[].products[].quantity` | string (decimal) | yes | Quantity of the product on this line. For ramp deals the per-period quantity is on each ramp instead. |
| `subscriptions[].products[].listPrice` | string (decimal) | no | Per-unit list price before discounts. |
| `subscriptions[].products[].unitPrice` | string (decimal) | no | Per-unit price after discounts. Equals listPrice − discountAmount, or listPrice * (1 − discountPercentage/100). |
| `subscriptions[].products[].totalPrice` | string (decimal) | no | Total price for this line (unitPrice * quantity). |
| `subscriptions[].products[].discountAmount` | string (decimal) | no | Per-unit discount in the order currency. |
| `subscriptions[].products[].discountPercentage` | string (decimal) | no | Per-unit discount as a percentage (e.g. 10 for 10%). |
| `subscriptions[].products[].invoiceFrequency` | string | no | How often invoices are generated for this line, e.g. monthly, quarterly, annually. |
| `subscriptions[].products[].invoiceTiming` | string | no | Whether each invoice for this line is raised at the start or the end of the period it covers. One of 'inAdvance', 'inArrears'. |
| `subscriptions[].products[].lineInvoiceDay` | string | no | Which day of the period the invoice is dated, e.g. 'firstDayOfMonth', 'specificDay', 'serviceStartDate'. |
| `subscriptions[].products[].priceModel` | string | no | How the price is derived from quantity, e.g. 'flatFee', 'perUnit', 'tiered', 'volume'. Tiered and volume models carry their bands in tiers. |
| `subscriptions[].products[].unitOfMeasure` | string | no | Unit the quantity is counted in, e.g. 'each', 'user', 'gigabyte'. |
| `subscriptions[].products[].pricingTerm` | string | no | Period the unit price is quoted for, e.g. 'monthly', 'annual' — the basis prices are normalised to before invoicing. |
| `subscriptions[].products[].serviceStartDate` | string (date) | no | First date services for this product are delivered (YYYY-MM-DD). Defaults to the order-level serviceStartDate. |
| `subscriptions[].products[].serviceEndDate` | string (date) | no | Last date services for this product are delivered (YYYY-MM-DD). Defaults to the order-level serviceEndDate. |
| `subscriptions[].products[].externalIdentifiers` | array of object | yes | External identifiers recorded against this line, one per configured field. Empty when none are. |
| `subscriptions[].products[].externalIdentifiers[].fieldName` | string | yes | Configured field the identifier belongs to, e.g. 'salesforceLineId'. |
| `subscriptions[].products[].externalIdentifiers[].value` | string | yes | The identifier's value in that external system. |
| `subscriptions[].products[].externalIdentifiers[].externalUrl` | string | no | Deep link to the record in that system, when the configuration defines one. |
| `subscriptions[].products[].overage` | object | no | Overage pricing for usage above the line's allowance. Present only when the product line has an allowance configured. |
| `subscriptions[].products[].overage.listPrice` | string (decimal) | no | Per-unit list price for overage usage. |
| `subscriptions[].products[].overage.unitPrice` | string (decimal) | no | Per-unit price for overage usage after discounts. |
| `subscriptions[].products[].overage.discountAmount` | string (decimal) | no | Per-unit overage discount in the order currency. |
| `subscriptions[].products[].overage.discountPercentage` | string (decimal) | no | Per-unit overage discount as a percentage. |
| `subscriptions[].products[].rateCardEntries` | array of object | no | Rate-card rows for this line. Present when the product line uses rate-card pricing. |
| `subscriptions[].products[].rateCardEntries[].id` | string | yes | Id of this rate-card entry (a UUID). |
| `subscriptions[].products[].rateCardEntries[].identifier` | string | no | BillableComponent identifier this rate-card row meters. |
| `subscriptions[].products[].rateCardEntries[].label` | string | no | Free-text label for this rate-card row, used as an additional discriminator alongside the identifier. |
| `subscriptions[].products[].rateCardEntries[].unitOfMeasure` | string | yes | Unit in which this rate-card row is priced. |
| `subscriptions[].products[].rateCardEntries[].unitPrice` | string (decimal) | yes | Per-unit rate negotiated for this order. |
| `subscriptions[].products[].rateCardEntries[].currency` | string | yes | ISO 4217 currency code for this rate-card row. |
| `subscriptions[].products[].tiers` | array of object | no | Pricing tiers for this product line. Present only for tiered, volume or stairstep price models. |
| `subscriptions[].products[].tiers[].fromQuantity` | string (decimal) | yes | Lower bound of the quantity range (inclusive). |
| `subscriptions[].products[].tiers[].toQuantity` | string (decimal) | no | Upper bound of the quantity range (inclusive). Absent on an open-ended last tier. |
| `subscriptions[].products[].tiers[].unitPrice` | string (decimal) | yes | Per-unit price for quantities in this tier. |
| `subscriptions[].products[].tiers[].listPrice` | string (decimal) | no | Per-unit list price before discount. |
| `subscriptions[].products[].tiers[].priceModel` | string | no | Per-tier price model. One of 'flat', 'perUnit'. |
| `subscriptions[].products[].tags` | array of object | no | Value-accounting tags applied to this product, as dimension/value pairs. Tags propagate to journal-entry lines for dimensional reporting. |
| `subscriptions[].products[].tags[].dimension` | string | yes | Tag dimension name, e.g. 'Department', 'Project'. |
| `subscriptions[].products[].tags[].value` | string | yes | Value within the dimension, e.g. 'Engineering', 'Alpha-2026'. |
| `subscriptions[].products[].items` | array of object | no | Per-item breakdown: one entry per SalesOrderProductItem (product x inventory item) under this sales-order product. Present only for inventory-tracked products. |
| `subscriptions[].products[].items[].id` | string | yes | Id of this SalesOrderProductItem junction record (a UUID). |
| `subscriptions[].products[].items[].itemId` | string | no | Id of the linked inventory item (a UUID). Absent when the record has no item set. |
| `subscriptions[].products[].items[].itemCode` | string | no | Item code from ItemMaster. |
| `subscriptions[].products[].items[].itemName` | string | no | Item name from ItemMaster. |
| `subscriptions[].products[].items[].productName` | string | no | Product name denormalised from the parent SalesOrderProduct. |
| `subscriptions[].products[].items[].itemOrdered` | string (decimal) | yes | Ordered quantity for this item, after explosion: line quantity x product-item quantity. |
| `subscriptions[].products[].items[].totalShipped` | string (decimal) | no | Sum of shipped quantity across all linked SalesOrderShipmentItems. |
| `subscriptions[].products[].rampDeal` | object | no | Ramp-deal definition. Present only when the product is a ramp deal; ramps echo the persisted SalesOrderProductLine records. |
| `subscriptions[].products[].rampDeal.interval` | string | yes | Ramp interval mode. One of 'annually', 'specificDates'. |
| `subscriptions[].products[].rampDeal.invoiceTiming` | string | yes | Ramp invoice timing. One of 'perInterval', 'allAtOnce'. |
| `subscriptions[].products[].rampDeal.ramps` | array of object | yes | Persisted ramps, ordered by start date. At least two. |
| `subscriptions[].products[].rampDeal.ramps[].serviceStartDate` | string (date) | yes | First date this ramp's services are delivered (YYYY-MM-DD). |
| `subscriptions[].products[].rampDeal.ramps[].serviceEndDate` | string (date) | yes | Last date this ramp's services are delivered (YYYY-MM-DD). |
| `subscriptions[].products[].rampDeal.ramps[].quantity` | string (decimal) | yes | Quantity for this ramp period. |
| `subscriptions[].products[].rampDeal.ramps[].listPrice` | string (decimal) | no | Per-unit list price for this ramp before discount. |
| `subscriptions[].products[].rampDeal.ramps[].unitPrice` | string (decimal) | no | Per-unit price for this ramp after discount. |
| `subscriptions[].products[].rampDeal.ramps[].invoiceFrequency` | string | no | How often this ramp is invoiced. |
| `subscriptions[].products[].prepaidConfiguration` | object | no | Prepaid balance details for this product. Absent when the product is not configured as prepaid. |
| `subscriptions[].products[].prepaidConfiguration.overConsumptionBehavior` | string | yes | Behaviour when consumption exceeds the remaining prepaid balance. One of 'allowNegative' (balance may go negative and is reconciled at renewal) or 'overage' (usage beyond the balance switches to pay-as-you-go invoicing). |
| `subscriptions[].products[].prepaidConfiguration.rolloverAtRenewal` | boolean | yes | Whether any unused balance carries forward when the subscription renews. |
| `subscriptions[].products[].prepaidConfiguration.balance` | string (decimal) | no | Remaining prepaid quantity for this product. Decreases as consumption is applied. |
| `subscriptions[].products[].prepaidConfiguration.consumedAmount` | string (decimal) | no | Total quantity consumed from the prepaid balance to date. |
| `nonSubscriptionProducts` | array of object | yes | One-time and other non-subscription product lines on the order, e.g. one-off services or perpetual licences. Same line schema as a subscription's products. |
| `nonSubscriptionProducts[].productCode` | string | yes | Company-specific code of the product. |
| `nonSubscriptionProducts[].productId` | string | yes | Id of the product (a UUID). |
| `nonSubscriptionProducts[].productLineId` | string | yes | Id of the product line under the product (a UUID). |
| `nonSubscriptionProducts[].productName` | string | no | Product name as recorded on this line. May differ from the product's current name — the line keeps the name it was sold under. |
| `nonSubscriptionProducts[].salesOrderProductLineId` | string | no | Id of this sales-order line (a UUID). |
| `nonSubscriptionProducts[].quantity` | string (decimal) | yes | Quantity of the product on this line. For ramp deals the per-period quantity is on each ramp instead. |
| `nonSubscriptionProducts[].listPrice` | string (decimal) | no | Per-unit list price before discounts. |
| `nonSubscriptionProducts[].unitPrice` | string (decimal) | no | Per-unit price after discounts. Equals listPrice − discountAmount, or listPrice * (1 − discountPercentage/100). |
| `nonSubscriptionProducts[].totalPrice` | string (decimal) | no | Total price for this line (unitPrice * quantity). |
| `nonSubscriptionProducts[].discountAmount` | string (decimal) | no | Per-unit discount in the order currency. |
| `nonSubscriptionProducts[].discountPercentage` | string (decimal) | no | Per-unit discount as a percentage (e.g. 10 for 10%). |
| `nonSubscriptionProducts[].invoiceFrequency` | string | no | How often invoices are generated for this line, e.g. monthly, quarterly, annually. |
| `nonSubscriptionProducts[].invoiceTiming` | string | no | Whether each invoice for this line is raised at the start or the end of the period it covers. One of 'inAdvance', 'inArrears'. |
| `nonSubscriptionProducts[].lineInvoiceDay` | string | no | Which day of the period the invoice is dated, e.g. 'firstDayOfMonth', 'specificDay', 'serviceStartDate'. |
| `nonSubscriptionProducts[].priceModel` | string | no | How the price is derived from quantity, e.g. 'flatFee', 'perUnit', 'tiered', 'volume'. Tiered and volume models carry their bands in tiers. |
| `nonSubscriptionProducts[].unitOfMeasure` | string | no | Unit the quantity is counted in, e.g. 'each', 'user', 'gigabyte'. |
| `nonSubscriptionProducts[].pricingTerm` | string | no | Period the unit price is quoted for, e.g. 'monthly', 'annual' — the basis prices are normalised to before invoicing. |
| `nonSubscriptionProducts[].serviceStartDate` | string (date) | no | First date services for this product are delivered (YYYY-MM-DD). Defaults to the order-level serviceStartDate. |
| `nonSubscriptionProducts[].serviceEndDate` | string (date) | no | Last date services for this product are delivered (YYYY-MM-DD). Defaults to the order-level serviceEndDate. |
| `nonSubscriptionProducts[].externalIdentifiers` | array of object | yes | External identifiers recorded against this line, one per configured field. Empty when none are. |
| `nonSubscriptionProducts[].externalIdentifiers[].fieldName` | string | yes | Configured field the identifier belongs to, e.g. 'salesforceLineId'. |
| `nonSubscriptionProducts[].externalIdentifiers[].value` | string | yes | The identifier's value in that external system. |
| `nonSubscriptionProducts[].externalIdentifiers[].externalUrl` | string | no | Deep link to the record in that system, when the configuration defines one. |
| `nonSubscriptionProducts[].overage` | object | no | Overage pricing for usage above the line's allowance. Present only when the product line has an allowance configured. |
| `nonSubscriptionProducts[].overage.listPrice` | string (decimal) | no | Per-unit list price for overage usage. |
| `nonSubscriptionProducts[].overage.unitPrice` | string (decimal) | no | Per-unit price for overage usage after discounts. |
| `nonSubscriptionProducts[].overage.discountAmount` | string (decimal) | no | Per-unit overage discount in the order currency. |
| `nonSubscriptionProducts[].overage.discountPercentage` | string (decimal) | no | Per-unit overage discount as a percentage. |
| `nonSubscriptionProducts[].rateCardEntries` | array of object | no | Rate-card rows for this line. Present when the product line uses rate-card pricing. |
| `nonSubscriptionProducts[].rateCardEntries[].id` | string | yes | Id of this rate-card entry (a UUID). |
| `nonSubscriptionProducts[].rateCardEntries[].identifier` | string | no | BillableComponent identifier this rate-card row meters. |
| `nonSubscriptionProducts[].rateCardEntries[].label` | string | no | Free-text label for this rate-card row, used as an additional discriminator alongside the identifier. |
| `nonSubscriptionProducts[].rateCardEntries[].unitOfMeasure` | string | yes | Unit in which this rate-card row is priced. |
| `nonSubscriptionProducts[].rateCardEntries[].unitPrice` | string (decimal) | yes | Per-unit rate negotiated for this order. |
| `nonSubscriptionProducts[].rateCardEntries[].currency` | string | yes | ISO 4217 currency code for this rate-card row. |
| `nonSubscriptionProducts[].tiers` | array of object | no | Pricing tiers for this product line. Present only for tiered, volume or stairstep price models. |
| `nonSubscriptionProducts[].tiers[].fromQuantity` | string (decimal) | yes | Lower bound of the quantity range (inclusive). |
| `nonSubscriptionProducts[].tiers[].toQuantity` | string (decimal) | no | Upper bound of the quantity range (inclusive). Absent on an open-ended last tier. |
| `nonSubscriptionProducts[].tiers[].unitPrice` | string (decimal) | yes | Per-unit price for quantities in this tier. |
| `nonSubscriptionProducts[].tiers[].listPrice` | string (decimal) | no | Per-unit list price before discount. |
| `nonSubscriptionProducts[].tiers[].priceModel` | string | no | Per-tier price model. One of 'flat', 'perUnit'. |
| `nonSubscriptionProducts[].tags` | array of object | no | Value-accounting tags applied to this product, as dimension/value pairs. Tags propagate to journal-entry lines for dimensional reporting. |
| `nonSubscriptionProducts[].tags[].dimension` | string | yes | Tag dimension name, e.g. 'Department', 'Project'. |
| `nonSubscriptionProducts[].tags[].value` | string | yes | Value within the dimension, e.g. 'Engineering', 'Alpha-2026'. |
| `nonSubscriptionProducts[].items` | array of object | no | Per-item breakdown: one entry per SalesOrderProductItem (product x inventory item) under this sales-order product. Present only for inventory-tracked products. |
| `nonSubscriptionProducts[].items[].id` | string | yes | Id of this SalesOrderProductItem junction record (a UUID). |
| `nonSubscriptionProducts[].items[].itemId` | string | no | Id of the linked inventory item (a UUID). Absent when the record has no item set. |
| `nonSubscriptionProducts[].items[].itemCode` | string | no | Item code from ItemMaster. |
| `nonSubscriptionProducts[].items[].itemName` | string | no | Item name from ItemMaster. |
| `nonSubscriptionProducts[].items[].productName` | string | no | Product name denormalised from the parent SalesOrderProduct. |
| `nonSubscriptionProducts[].items[].itemOrdered` | string (decimal) | yes | Ordered quantity for this item, after explosion: line quantity x product-item quantity. |
| `nonSubscriptionProducts[].items[].totalShipped` | string (decimal) | no | Sum of shipped quantity across all linked SalesOrderShipmentItems. |
| `nonSubscriptionProducts[].rampDeal` | object | no | Ramp-deal definition. Present only when the product is a ramp deal; ramps echo the persisted SalesOrderProductLine records. |
| `nonSubscriptionProducts[].rampDeal.interval` | string | yes | Ramp interval mode. One of 'annually', 'specificDates'. |
| `nonSubscriptionProducts[].rampDeal.invoiceTiming` | string | yes | Ramp invoice timing. One of 'perInterval', 'allAtOnce'. |
| `nonSubscriptionProducts[].rampDeal.ramps` | array of object | yes | Persisted ramps, ordered by start date. At least two. |
| `nonSubscriptionProducts[].rampDeal.ramps[].serviceStartDate` | string (date) | yes | First date this ramp's services are delivered (YYYY-MM-DD). |
| `nonSubscriptionProducts[].rampDeal.ramps[].serviceEndDate` | string (date) | yes | Last date this ramp's services are delivered (YYYY-MM-DD). |
| `nonSubscriptionProducts[].rampDeal.ramps[].quantity` | string (decimal) | yes | Quantity for this ramp period. |
| `nonSubscriptionProducts[].rampDeal.ramps[].listPrice` | string (decimal) | no | Per-unit list price for this ramp before discount. |
| `nonSubscriptionProducts[].rampDeal.ramps[].unitPrice` | string (decimal) | no | Per-unit price for this ramp after discount. |
| `nonSubscriptionProducts[].rampDeal.ramps[].invoiceFrequency` | string | no | How often this ramp is invoiced. |
| `nonSubscriptionProducts[].prepaidConfiguration` | object | no | Prepaid balance details for this product. Absent when the product is not configured as prepaid. |
| `nonSubscriptionProducts[].prepaidConfiguration.overConsumptionBehavior` | string | yes | Behaviour when consumption exceeds the remaining prepaid balance. One of 'allowNegative' (balance may go negative and is reconciled at renewal) or 'overage' (usage beyond the balance switches to pay-as-you-go invoicing). |
| `nonSubscriptionProducts[].prepaidConfiguration.rolloverAtRenewal` | boolean | yes | Whether any unused balance carries forward when the subscription renews. |
| `nonSubscriptionProducts[].prepaidConfiguration.balance` | string (decimal) | no | Remaining prepaid quantity for this product. Decreases as consumption is applied. |
| `nonSubscriptionProducts[].prepaidConfiguration.consumedAmount` | string (decimal) | no | Total quantity consumed from the prepaid balance to date. |
| `lastModifiedDate` | string (date-time) | yes | Instant the order last changed, as ISO 8601 UTC (YYYY-MM-DDTHH:mm:ss.sssZ). Poll on this to sync incrementally rather than re-reading the whole collection. |
| `externalIdentifiers` | array of object | no | External identifiers owned by other systems. At most one entry per fieldName. Absent when the order has none; an omitted field and [] are equivalent. |
| `externalIdentifiers[].fieldName` | string | yes | Configured key of the external identifier — a stable camelCase slug such as 'netsuiteSoNumber', not the human-readable label. Must match an active SalesOrderExternalIdentifierConfiguration. |
| `externalIdentifiers[].value` | string | yes | The identifier as the source system holds it. |
| `externalIdentifiers[].externalUrl` | string | no | Absolute http(s) link to the object in the originating system, when one is stored. |

## Errors

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

## Statuses

- `400` — Invalid request or business failure. Codes: NOT_FOUND
- `401` — Missing or invalid access token
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests
- `500` — Internal server error
