# Entitlements tools

> MCP tools for Entitlements: entitlements_check.

- `entitlements_check`: Check one entitlement

## `entitlements_check`

**Check one entitlement.** Operation [`entitlements.check`](https://ownrecord.io/docs/reference/entitlements-check.md) · Brand level · permission `customers:read` · risk tier `read` · since M5

Returns one customer's value of one feature, from the customer's stored entitlements: a single read for the
checks your product makes on every request. `enabled` is true for `true` or a limit above 0; compare `value`
for limits and enum features.

The value is the same as in `customers.entitlements.get` (resolved from the sources while a recompute is
pending). Ownrecord doesn't enforce it: your product decides what to allow.

Annotations: `readOnlyHint: true` · `destructiveHint: false` · `idempotentHint: true` · `openWorldHint: false`

### Arguments

| Argument    | Type         | Required | Description                                                                                                                              |
| ----------- | ------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `customer`  | ID (`cus_…`) | yes      | The customer (`cus_…`).                                                                                                                  |
| `feature`   | string       | yes      | The feature key, e.g. `seats.max`. (at most 100 characters)                                                                              |
| `entity_id` | ID (`ent_…`) | no       | Optional: the brand's legal entity (ent\_…); `brand_id` alone is enough.                                                                 |
| `brand_id`  | ID (`brd_…`) | no       | The brand to act on (brd\_…), inside your API key's reach. Needed with an organization or entity key; a brand key acts on its own brand. |

- **Brand:** pass `brand_id` with an organization or entity key; a brand key acts on its own brand.
- **Read-only:** changes nothing; `idempotency_key` is ignored.

### Errors

- [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed): `customer` isn't a customer ID, or `feature` isn't a feature key (e.g. `seats.max`).
- [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found): This brand has no such customer in this mode (customers belong to one brand and one mode).
- [`entitlement_feature_not_found`](https://ownrecord.io/docs/reference/errors.md#entitlement_feature_not_found): The brand has no feature with this key in this mode.
- [`scope_required`](https://ownrecord.io/docs/reference/errors.md#scope_required): The request names no brand (an org or entity key without `Ownrecord-Brand`).
- [`livemode_not_allowed`](https://ownrecord.io/docs/reference/errors.md#livemode_not_allowed): You have no live-mode access, so you can't act on live customers.
- [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied): You can't read this brand's customers (`customers:read`).

### Examples

**A seat limit**

Arguments:

```json
{
  "customer": "cus_01m4ty3c2b5qx7mhd9k8w6s0aa",
  "feature": "seats.max",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz"
}
```

Result `output`:

```json
{
  "object": "entitlement_check",
  "customerId": "cus_01m4ty3c2b5qx7mhd9k8w6s0aa",
  "featureKey": "seats.max",
  "value": 20,
  "enabled": true,
  "computedAt": "2026-10-14T10:00:05.000Z"
}
```

**A boolean feature**

Arguments:

```json
{
  "customer": "cus_01m4ty3c2b5qx7mhd9k8w6s0aa",
  "feature": "feature.export",
  "brand_id": "brd_01jbx4m3v8e9t0s6k2c5n7q1wz"
}
```

Result `output`:

```json
{
  "object": "entitlement_check",
  "customerId": "cus_01m4ty3c2b5qx7mhd9k8w6s0aa",
  "featureKey": "feature.export",
  "value": true,
  "enabled": true,
  "computedAt": "2026-10-14T10:00:05.000Z"
}
```
