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

# Validate Roblox license

> Checks a Roblox license works for this person. Use it on player join or server start.

> [!NOTE]
>
> Needs the `licensing:read` permission on a store key.

> [!TIP]
>
> Call this when a player joins or when a server starts, so you always know the license is still good.

> [!NOTE]
>
> Identify the person with one of `robloxId`, `discordId` or `username`.

> [!WARNING]
>
> This only works on Roblox licenses. Calling it on any other kind of product returns a `400`. Use [Check ownership](https://docs.coveapp.cc/api/licensing/check-license.md) for those.

**product** `string` *required*

The product's id or slug.

**robloxId** `string`

Their Roblox user id.

**discordId** `string`

Their Discord id.

**username** `string`

Their Cove username.

```bash cURL theme={null}
curl "https://api.coveapp.cc/v1/licenses/validate?product=pro-kit&robloxId=100" \
  -H "Authorization: Bearer $COVE_API_KEY"
```

```json 200 theme={null}
{
  "data": {
    "valid": true,
    "product": {
      "id": "…",
      "slug": "pro-kit",
      "title": "Pro Kit",
      "kind": "license",
      "live": true
    },
    "user": {
      "username": "prrent",
      "roblox_id": "100",
      "discord_id": "500"
    },
    "license": {
      "id": "…",
      "plan": "month",
      "status": "active",
      "borrowed": false,
      "renews_at": "2026-12-01T…",
      "ends_at": null,
      "lent_until": null
    }
  }
}
```

## Response

**data** `object`

The result of the check.

**properties**

**valid** `boolean`

Whether the license works for this person.

**reason** `string`

Why it isn't valid. Only there when `valid` is `false`. See the table below.

**product** `object`

The product that was checked.

**product**

**id** `string`

The product's id.

**slug** `string`

The product's slug.

**title** `string`

The product's name.

**kind** `string`

The kind of product, like `license`.

**live** `boolean`

Whether the product is live.

**user** `object`

The person that was checked.

**user**

**username** `string`

Their Cove username.

**roblox\_id** `string`

Their Roblox user id.

**discord\_id** `string`

Their Discord id.

**license** `object`

Their license for this product.

**license**

**id** `string`

The license's id.

**plan** `string`

The plan it is on, like `month`.

**status** `string`

The license's status, like `active`.

**borrowed** `boolean`

Whether this person is borrowing it from someone else.

**renews\_at** `string | null`

When the subscription renews, as an ISO date.

**ends\_at** `string | null`

When the license ends, as an ISO date, if it does.

**lent\_until** `string | null`

When a lent license comes back, as an ISO date, if it is lent.

## Reasons a license isn't valid

When `valid` is `false`, `reason` is one of:

| Reason | Meaning |
| - | - |
| `not_owned` | They don't have this license. |
| `lent_out` | They own it but lent it to someone else. |
| `paused_payment` | A subscription payment failed. |
| `paused_dispute` | A card dispute is open. |
| `ended` | The subscription ended. |
| `revoked` | The seller revoked it. |
| `no_cove_account` | No Cove account with that ID. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.