> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quotamint.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Check entitlement

> Ask whether a customer can use a feature without consuming credits

`POST /v1/check` is informational. It performs entitlement and affordability resolution but does not write usage, ledger, or idempotency data.

## Request

```json theme={null}
{
  "customerId": "user_123",
  "feature": "generate_image",
  "quantity": 1
}
```

| Field        | Type    | Required | Notes                                |
| ------------ | ------- | -------- | ------------------------------------ |
| `customerId` | string  | yes      | Up to 255 characters                 |
| `feature`    | string  | yes      | Feature key, up to 120 characters    |
| `quantity`   | integer | no       | Defaults to `1`; range `1`–`1000000` |

## Allowed response

```json theme={null}
{
  "allowed": true,
  "customerId": "user_123",
  "feature": "generate_image",
  "quantity": 1,
  "requiredCredits": 10,
  "creditsRemaining": 500
}
```

## Denied response

Denials are decisions, not HTTP errors. They return `200` with `allowed: false`:

```json theme={null}
{
  "allowed": false,
  "customerId": "user_123",
  "feature": "generate_image",
  "quantity": 1,
  "reason": "insufficient_credits",
  "creditsRemaining": 2,
  "requiredCredits": 10
}
```

Possible reasons include `customer_not_found`, `customer_inactive`, `no_active_plan`, `plan_inactive`, `feature_not_found`, `feature_not_entitled`, and `insufficient_credits`.

<Warning>
  A successful check is not a reservation. Another request may spend the balance before your next call. Use `consume` for enforcement.
</Warning>
