> For the complete documentation index, see [llms.txt](https://docs.trust.enterprises/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trust.enterprises/rest-api/nft-ecosystem/claiming-nfts-through-passes.md).

# Claiming NFTs through Passes

### Overview

This feature extends the current Hedera capability by adding the concept of relationships between NFTs, a NFT pass can be a parent, while child NFTs can be linked for distribution to any holder. While the ledger automatically keeps state with no off-chain storage.

Or as a user story...

> As a project with an NFT pass, I want to be able to generate future NFTs that my community may be able to claim.

Or for an art project...

> As an artist I want to have an NFT pass to build a community with so I can reward my pass owners with future peridoic drops.

### How it works

There is a fair bit of logic to make this work, we rely on Mirrornodes to read currently minted NFTs and respective holders.

* Check that an account owns an NFT, or many.
* Check that the minted and supply of the child NFT matches the parent NFT pass.
* Check that a child NFT has been fully pre-minted.
* Check that the child NFT serial is held by treasury
* Attempt to send, or receive a generic association failure error.

<mark style="color:green;">`POST`</mark> `https://hedera-serverless-consensus.vercel.app/api/nft/claim`

Enable an account to claim an NFT through a pass they own.

#### Headers

| Name                                        | Type   | Description                                                       |
| ------------------------------------------- | ------ | ----------------------------------------------------------------- |
| x-api-key<mark style="color:red;">\*</mark> | String | The **API\_SECRET\_KEY** from the client's environment variables. |

#### Request Body

| Name                                                   | Type   | Description                       |
| ------------------------------------------------------ | ------ | --------------------------------- |
| token\_id<mark style="color:red;">\*</mark>            | String | Hedera token id to send           |
| receiver\_id<mark style="color:red;">\*</mark>         | String | Hedera account to send the NFT to |
| serial\_number<mark style="color:red;">\*</mark>       | String | Serial number of the NFT to send  |
| nft\_pass\_token\_id<mark style="color:red;">\*</mark> | String | Hedera token id of pass to send   |

{% tabs %}
{% tab title="200: OK NFT sent to account, you may check a mirrornode/explorer after 5- 10 seconds." %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="422: Unprocessable Entity Missing params, NFT or required treasury state for transfer" %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="401: Unauthorized Header Auth Missing/invalid" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}
