# Get Performance Obligation

`GET /accounting/performance-obligations/{id}`

Group: Accounting › Performance Obligations · Operation ID: `getPerformanceObligation`

Returns the performance obligation with the given identifier, including its standalone selling price ranges.

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

## 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 | The unique identifier for the performance obligation to return. |

## Response

`200` Success

Under `data` (getPerformanceObligationOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the performance obligation. |
| `performanceObligationNumber` | string | no | The performance obligation number. Absent while none has been assigned. |
| `name` | string | yes | The display name of the performance obligation, as it appears on revenue contracts and schedules. |
| `description` | string | no | A free-form description of what the obligation covers. Absent when none is set. |
| `effectiveStartDate` | string (date) | yes | The first date this obligation is in effect. Format YYYY-MM-DD. |
| `effectiveEndDate` | string (date) | no | The last date this obligation is in effect. Format YYYY-MM-DD. Absent when the obligation is open-ended. |
| `allocationStartDate` | string (date) | no | The date from which revenue for this obligation takes part in allocation. Format YYYY-MM-DD. Absent when none is set. |
| `isAllocationExcluded` | boolean | yes | Whether the revenue contract lines of this obligation are left out of fair-value allocation. |
| `isNetAccounting` | boolean | yes | Whether the obligation is accounted net rather than gross. |
| `defaultAmortizationMethod` | string | no | The default amortization method used when scheduling this obligation's revenue. Possible values: 'exactDays', 'pointInTime', 'straightLineProRateFirstLast', 'straightLine', 'usageBased'. |
| `standaloneSellingPriceRangeType` | string | no | How the obligation's standalone selling price ranges are expressed. Possible values: 'percentage', 'amount'. |
| `revenueSchedulingTemplateId` | string | no | The unique identifier for the revenue scheduling template that schedules this obligation's revenue. See id on GET accounting/revenue-scheduling-templates/:id. |
| `revenueSchedulingTemplateName` | string | no | The name of the revenue scheduling template that schedules this obligation's revenue. |
| `standaloneSellingPriceStratificationConfigurationId` | string | no | The unique identifier for the standalone selling price stratification configuration this obligation stratifies by. Absent when none is set. There is no endpoint for it. |
| `lastModifiedDate` | string (date-time) | yes | The date and time the performance obligation last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `standaloneSellingPriceRanges` | array of object | no | The obligation's standalone selling price ranges, one per product and effective period. An empty array when none are configured. Which of the amount and percentage fields are set follows each range's rangeType. |
| `standaloneSellingPriceRanges[].id` | string | no | The unique identifier for the standalone selling price range. |
| `standaloneSellingPriceRanges[].rangeNumber` | string | no | The standalone selling price range number. |
| `standaloneSellingPriceRanges[].rangeType` | string | no | How this range is expressed. Possible values: 'percentage', 'amount'. |
| `standaloneSellingPriceRanges[].currency` | string | no | The currency the amounts are given in. Format ISO 4217, for example 'USD'. Absent on a percentage range. |
| `standaloneSellingPriceRanges[].effectiveStartDate` | string (date) | yes | The first date this range applies. Format YYYY-MM-DD. |
| `standaloneSellingPriceRanges[].effectiveEndDate` | string (date) | no | The last date this range applies. Format YYYY-MM-DD. Absent when the range is open-ended. |
| `standaloneSellingPriceRanges[].lowAmount` | string (decimal) | no | The lower bound of the standalone selling price, in the range currency. Set on an amount range. |
| `standaloneSellingPriceRanges[].midAmount` | string (decimal) | no | The midpoint of the standalone selling price, in the range currency. Set on an amount range. |
| `standaloneSellingPriceRanges[].highAmount` | string (decimal) | no | The upper bound of the standalone selling price, in the range currency. Set on an amount range. |
| `standaloneSellingPriceRanges[].lowPercentage` | string (decimal) | no | The lower bound of the standalone selling price, as a percentage of list price. Set on a percentage range. |
| `standaloneSellingPriceRanges[].midPercentage` | string (decimal) | no | The midpoint of the standalone selling price, as a percentage of list price. Set on a percentage range. |
| `standaloneSellingPriceRanges[].highPercentage` | string (decimal) | no | The upper bound of the standalone selling price, as a percentage of list price. Set on a percentage range. |
| `standaloneSellingPriceRanges[].term` | string | no | The period the range's prices are quoted over. Possible values: 'monthly', 'annually', 'none'. |
| `standaloneSellingPriceRanges[].unitOfMeasure` | string | no | The unit the range's prices are quoted per. |
| `standaloneSellingPriceRanges[].productId` | string | no | The product this range prices. Absent on a range that applies to the whole obligation. See id on GET accounting/products/:id. |
| `standaloneSellingPriceRanges[].productCode` | string | no | The code of that product. |
| `standaloneSellingPriceRanges[].productName` | string | no | The name of that product. |

## 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
