> This page is for version v1 (default).
> For other versions, use one of these documentation indexes:
> - v1 (default): https://docs.truemed.com/v-1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.truemed.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.truemed.com/_mcp/server.

# Retrieve Provision Request Eligibility

GET https://dev-api.truemed.com/api/v1/eligibility/provision_request/{provision_token_request_id}

Returns **customer eligibility** for a customer who does not hold a payment token yet, keyed on the provision
request id you received from `create_payment_token`.

The token-keyed form and this one answer the same question — which items *this* customer can charge to their
HSA/FSA card. Use this one for a customer's first order, where you have a provision request but no token;
switch to the token form once the token arrives.

The two are keyed differently, and that is deliberate. A provision request names a customer and nothing else,
so this form counts the letters that customer earned on your sales channel. The token form has a token to
count letters through as well, and counts both.

The window this form exists for is the one before a token: the customer has answered the survey, no clinician
has decided, so nothing has been minted to key the token form on, and you still need something to present your
catalog with. `pending` is the ordinary answer here, where on the token form it is the rare one. In that state
`items` carries what the survey predicts the letter will cover, intersected with your catalog, and
`lmn_expires_at` is null because no letter exists yet. Those items are a prediction, not a decision — present
them as provisional. `items` is empty only while the survey itself is unfinished.

Once a clinician decides, this key keeps working and starts answering exactly as the token-keyed form does:
`approved`, `expired`, `rejected`, or `never_requested`, with a real coverage date where one exists (inclusive,
UTC). That makes
it a reliable poll if the `payment_token.updated` webhook is ever lost — and unlike the Retrieve Provision Token
Request endpoint, whose `payment_token` is null for both outcomes, this one tells a pending letter apart from a
rejected one.

Reference: https://docs.truemed.com/api-reference/eligibility/retrieve-provision-request-eligibility

## Authentication

- `x-truemed-api-key` header (required) — Sales channel API key for merchant server-to-server authentication

## Servers

- `https://dev-api.truemed.com` (Development server, default)
- `https://api.truemed.com` (Production server)

## Request

### Path parameters

- `provision_token_request_id` (string, required) — The ID of the ProvisionTokenRequest returned by create_payment_token

## Response

### 200

Successful response

- `items` (list of string, required) — The catalog items that can be charged to an HSA/FSA card, each identified exactly as it is in order_items when you charge.
- `eligibility_status` (enum, optional, nullable) — Where this customer's clinical eligibility stands. Named apart from the payment `status` on other Truemed payloads, which is a different vocabulary. Per-value meanings are listed on the enum. Null for catalog eligibility, which identifies no customer. One of: - `approved` — A verified, unexpired letter stands for this customer. - `pending` — A survey is with a clinician; the outcome is not decided yet. - `expired` — The letter that covered this customer has lapsed and not been renewed. - `rejected` — A clinician reviewed this customer's most recent survey and declined it. - `never_requested` — No letter has ever been requested for this customer here.
  - Allowed values: `approved`, `pending`, `expired`, `rejected`, `never_requested`
- `lmn_expires_at` (date, optional, nullable) — When the letter determining this customer's coverage expires (inclusive, UTC). Null for catalog eligibility, which identifies no customer.

## Errors

### 400 Bad Request Error

Bad Request

- `error` (enum, required)
  - Allowed values: `TotalAmountInvalid`, `ValidationError`
- `message` (string, required)

### 404 Not Found Error

Not Found

- `error` (enum, required)
  - Allowed values: `NotFound`
- `message` (string, required)

### 405 Method Not Allowed Error

Method Not Allowed

- `error` (enum, required)
  - Allowed values: `MethodNotAllowed`
- `message` (string, required)

### 500 Internal Server Error

Internal Server Error

- `error` (enum, required)
  - Allowed values: `ServerError`
- `message` (string, required)

### 501 Not Implemented Error

Not Implemented

- `error` (enum, required)
  - Allowed values: `NotImplemented`
- `message` (string, required)

## Examples

**Response**

```json
{
  "items": [
    "string"
  ],
  "eligibility_status": "approved",
  "lmn_expires_at": "2023-01-15"
}
```

**SDK Code**

```python
import requests

url = "https://dev-api.truemed.com/api/v1/eligibility/provision_request/provision_token_request_id"

headers = {"x-truemed-api-key": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://dev-api.truemed.com/api/v1/eligibility/provision_request/provision_token_request_id';
const options = {method: 'GET', headers: {'x-truemed-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```