# Get Approval Policy

`GET /base/approval-policies/{id}`

Group: Base › Approval Policies · Operation ID: `getApprovalPolicy`

Returns the approval policy with the given identifier, with its rule lines, approvers, exclusion lines and notification settings.

Returns the policy in full: the header, every rule line with its criteria and approvers, the exclusion lines and the notification settings. The output mirrors what create and update take, so you can read a policy, change one line and send it back. A document picks up the approvers of every rule line it matches. Approver names are resolved for readability and are absent when the referenced employee or manager no longer exists. approverId stays authoritative.

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

## 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 approval policy to return. |

## Response

`200` Success

Under `data` (getApprovalPolicyOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | The unique identifier for the approval policy. |
| `policyHeaderNumber` | string | no | The policy number, assigned when the policy is created and stable across edits. |
| `entityId` | string | no | The legal entity the policy applies to. Absent when isAllEntities is true. See id on GET base/entities. |
| `entityName` | string | no | The name of the legal entity the policy applies to. Absent when isAllEntities is true. |
| `isAllEntities` | boolean | no | Whether the policy applies to every legal entity rather than the one named by entityId. |
| `businessObject` | string | yes | The code of the business object the policy governs, for example 'VendorBill', 'ExpenseReport' or 'PurchaseOrder'. |
| `status` | string | yes | The lifecycle status of the policy. Possible values: 'active', 'inActive'. Only active policies are matched against new documents. |
| `startDate` | string | no | The first date the policy is eligible for matching. Format YYYY-MM-DD. Absent when there is no lower bound. |
| `endDate` | string | no | The last date the policy is eligible for matching. Format YYYY-MM-DD. Absent when there is no upper bound. |
| `submitterCannotApprove` | boolean | no | Whether the document submitter is stopped from approving their own document. |
| `approverCommentEnabled` | boolean | no | Whether approvers are prompted for an optional comment at approve time. |
| `lastModifiedDate` | string (date-time) | yes | The date and time the approval policy last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `notification` | object | no | The notification channels used when approvers and submitters are told about this policy's documents. Absent when they have never been configured for this policy. |
| `notification.emailNotification` | boolean | no | Whether approvers are emailed. |
| `notification.nativeNotification` | boolean | no | Whether approvers get an in-product notification. |
| `notification.slackNotification` | boolean | no | Whether approvers are notified on Slack. |
| `lines` | array of object | yes | The policy's rule lines, ordered by step. A document picks up the approvers of every line it matches. |
| `lines[].id` | string | yes | The unique identifier for the rule line. Pass it in updateLines or deleteLines on PATCH base/approval-policies/:id. |
| `lines[].policyLineNumber` | string | no | The rule line number, assigned when the line is created. |
| `lines[].criteria` | string | yes | The document field the rule tests, for example 'Vendor' or 'Total Amount'. The literal __COMPOSITE__ marks a line whose value is a JSON AND or OR expression over several criteria. |
| `lines[].operator` | string | yes | The comparison applied to the criteria, for example 'Equal' or 'Less Than'. |
| `lines[].value` | array of string | yes | The values the criteria is compared against, each as a string. For a __COMPOSITE__ line this is a single-element array holding the JSON expression. |
| `lines[].valueType` | string | no | How the value is interpreted. Possible values: 'number', 'multivalue', 'value', 'noValue', 'arrayField', 'composite'. |
| `lines[].step` | number | yes | The approval order, starting at 1. Lines that share a step are evaluated and approved together. |
| `lines[].requireAction` | string | no | Whether all of the line's approvers must approve, or any one of them is enough. Possible values: 'All', 'Any'. |
| `lines[].approvers` | array of object | yes | The approvers assigned to this line. A line always has at least one. |
| `lines[].approvers[].id` | string | yes | The unique identifier for the approver assignment. Pass it in updateApprovers or deleteApprovers on PATCH base/approval-policies/:id. |
| `lines[].approvers[].approverId` | number | yes | The approver. For approverType 'employee' or 'supremeApprover' it is the employee, and for 'manager' it is the manager-hierarchy record. It is an integer, not a UUID. There is no endpoint for it. |
| `lines[].approvers[].approverType` | string | yes | The kind of approver. Possible values: 'employee', 'manager', 'supremeApprover', 'position'. 'employee' names a specific person, 'manager' resolves the submitter's manager through a hierarchy at approval time, and 'supremeApprover' is a person who may approve at any step. |
| `lines[].approvers[].approverName` | string | no | The resolved display name of the approver. Absent when the referenced employee or manager no longer exists. |
| `exclusionLines` | array of object | yes | The exclusion lines. A document matching any of them is exempted from the policy entirely. |
| `exclusionLines[].id` | string | yes | The unique identifier for the exclusion line. Pass it in updateExclusionLines or deleteExclusionLines on PATCH base/approval-policies/:id. |
| `exclusionLines[].criteria` | string | yes | The document field the exclusion tests. |
| `exclusionLines[].operator` | string | yes | The comparison applied to the criteria. |
| `exclusionLines[].value` | array of string | yes | The values the criteria is compared against, each as a string. |
| `exclusionLines[].valueType` | string | no | How the value is interpreted. Possible values: 'number', 'multivalue', 'value', 'noValue', 'arrayField', 'composite'. |

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