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

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.ton.org/feedback

```json
{
  "path": "/standard/tokens/nft/api",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# API

export const Aside = ({type = "note", title = "", icon = "", iconType = "regular", children}) => {
  const asideVariants = ["note", "tip", "caution", "danger"];
  const asideComponents = {
    note: {
      outerStyle: "border-sky-500/20 bg-sky-50/50 dark:border-sky-500/30 dark:bg-sky-500/10",
      innerStyle: "text-sky-900 dark:text-sky-200",
      calloutType: "note",
      icon: <svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="w-4 h-4 text-sky-500" aria-label="Note">
          <path fill-rule="evenodd" clip-rule="evenodd" d="M7 1.3C10.14 1.3 12.7 3.86 12.7 7C12.7 10.14 10.14 12.7 7 12.7C5.48908 12.6974 4.0408 12.096 2.97241 11.0276C1.90403 9.9592 1.30264 8.51092 1.3 7C1.3 3.86 3.86 1.3 7 1.3ZM7 0C3.14 0 0 3.14 0 7C0 10.86 3.14 14 7 14C10.86 14 14 10.86 14 7C14 3.14 10.86 0 7 0ZM8 3H6V8H8V3ZM8 9H6V11H8V9Z"></path>
        </svg>
    },
    tip: {
      outerStyle: "border-emerald-500/20 bg-emerald-50/50 dark:border-emerald-500/30 dark:bg-emerald-500/10",
      innerStyle: "text-emerald-900 dark:text-emerald-200",
      calloutType: "tip",
      icon: <svg width="11" height="14" viewBox="0 0 11 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="text-emerald-600 dark:text-emerald-400/80 w-3.5 h-auto" aria-label="Tip">
          <path d="M3.12794 12.4232C3.12794 12.5954 3.1776 12.7634 3.27244 12.907L3.74114 13.6095C3.88471 13.8248 4.21067 14 4.46964 14H6.15606C6.41415 14 6.74017 13.825 6.88373 13.6095L7.3508 12.9073C7.43114 12.7859 7.49705 12.569 7.49705 12.4232L7.50055 11.3513H3.12521L3.12794 12.4232ZM5.31288 0C2.52414 0.00875889 0.5 2.26889 0.5 4.78826C0.5 6.00188 0.949566 7.10829 1.69119 7.95492C2.14321 8.47011 2.84901 9.54727 3.11919 10.4557C3.12005 10.4625 3.12175 10.4698 3.12261 10.4771H7.50342C7.50427 10.4698 7.50598 10.463 7.50684 10.4557C7.77688 9.54727 8.48281 8.47011 8.93484 7.95492C9.67728 7.13181 10.1258 6.02703 10.1258 4.78826C10.1258 2.15486 7.9709 0.000106649 5.31288 0ZM7.94902 7.11267C7.52078 7.60079 6.99082 8.37878 6.6077 9.18794H4.02051C3.63739 8.37878 3.10743 7.60079 2.67947 7.11294C2.11997 6.47551 1.8126 5.63599 1.8126 4.78826C1.8126 3.09829 3.12794 1.31944 5.28827 1.3126C7.2435 1.3126 8.81315 2.88226 8.81315 4.78826C8.81315 5.63599 8.50688 6.47551 7.94902 7.11267ZM4.87534 2.18767C3.66939 2.18767 2.68767 3.16939 2.68767 4.37534C2.68767 4.61719 2.88336 4.81288 3.12521 4.81288C3.36705 4.81288 3.56274 4.61599 3.56274 4.37534C3.56274 3.6515 4.1515 3.06274 4.87534 3.06274C5.11719 3.06274 5.31288 2.86727 5.31288 2.62548C5.31288 2.38369 5.11599 2.18767 4.87534 2.18767Z"></path>
        </svg>
    },
    caution: {
      outerStyle: "border-amber-500/20 bg-amber-50/50 dark:border-amber-500/30 dark:bg-amber-500/10",
      innerStyle: "text-amber-900 dark:text-amber-200",
      calloutType: "warning",
      icon: <svg className="flex-none w-5 h-5 text-amber-400 dark:text-amber-300/80" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" aria-label="Warning">
          <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
        </svg>
    },
    danger: {
      outerStyle: "border-red-500/20 bg-red-50/50 dark:border-red-500/30 dark:bg-red-500/10",
      innerStyle: "text-red-900 dark:text-red-200",
      calloutType: "danger",
      icon: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor" className="text-red-600 dark:text-red-400/80 w-4 h-4" aria-label="Danger">
          <path d="M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zm41.6-48c-4.3 7.4-4.3 16.6 0 24l88.3 152.9c4.3 7.4 12.2 12 20.8 12l176.6 0c8.6 0 16.5-4.6 20.8-12L453.4 268c4.3-7.4 4.3-16.6 0-24L365.1 91.1c-4.3-7.4-12.2-12-20.8-12l-176.6 0c-8.6 0-16.5 4.6-20.8 12L58.6 244zM256 128c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"></path>
        </svg>
    }
  };
  let variant = type;
  let gotInvalidVariant = false;
  if (!asideVariants.includes(type)) {
    gotInvalidVariant = true;
    variant = "danger";
  }
  const iconVariants = ["regular", "solid", "light", "thin", "sharp-solid", "duotone", "brands"];
  if (!iconVariants.includes(iconType)) {
    iconType = "regular";
  }
  return <>
      <div className={`callout my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border ${asideComponents[variant].outerStyle}`} data-callout-type={asideComponents[variant].calloutType}>
        <div className="mt-0.5 w-4" data-component-part="callout-icon">
          {}
          {icon === "" ? asideComponents[variant].icon : <Icon icon={icon} iconType={iconType} size={14} />}
        </div>
        <div className={`text-sm prose min-w-0 w-full ${asideComponents[variant].innerStyle}`} data-component-part="callout-content">
          {gotInvalidVariant ? <p>
              <span className="font-bold">
                Invalid <code>type</code> passed!
              </span>
              <br />
              <span className="font-bold">Received: </span>
              {type}
              <br />
              <span className="font-bold">Expected one of: </span>
              {asideVariants.join(", ")}
            </p> : <>
              {title && <p className="font-bold">{title}</p>}
              {children}
            </>}
        </div>
      </div>
    </>;
};

NFT messages and methods specified in TEPs.

## [TEP-62](https://github.com/ton-blockchain/TEPs/blob/1fbc23cac69723c53251f686ec90d81bf0e83443/text/0062-nft-standard.md)

### NFT Item

#### Transfer message layout

| Field                  | Type                | Description                                                              |
| ---------------------- | ------------------- | ------------------------------------------------------------------------ |
| `transfer`             | `uint32`            | tag equal to `0x5fcc3d14`                                                |
| `query_id`             | `uint64`            | arbitrary request number                                                 |
| `new_owner`            | `MsgAddress`        | address of the new owner of the NFT item                                 |
| `response_destination` | `MsgAddress`        | optional address to receive excess Toncoin, usually the sender's address |
| `custom_payload`       | `Maybe ^Cell`       | optional custom data                                                     |
| `forward_amount`       | `VarUInteger 16`    | the amount of Toncoin to be sent to the new owner                        |
| `forward_payload`      | `Either Cell ^Cell` | optional data that should be forwarded to the new owner                  |

#### Forward payload formats

To send a simple comment in the `forward_payload`, the `forward_payload` must start with `0x00000000` (32-bit unsigned integer equal to zero); the remainder of the `forward_payload` contains the comment.

If the comment does not begin with the byte `0xff`, the comment is a text one; it can be displayed "as is" to the end user of a wallet (after filtering invalid and control characters and checking that it is a valid UTF-8 string). For instance, users may indicate the purpose ("for coffee") of a simple transfer from their wallet to the wallet of another user in this text field.

On the other hand, if the comment begins with the byte `0xff`, the remainder is a "binary comment", which should not be displayed to the end user as text (only as a hex dump if necessary). The intended use of "binary comments" is, e.g., to contain a purchase identifier for payments in a store, to be automatically generated and processed by the store's software.

If the `forward_payload` contains a binary message for interacting with the destination smart contract (for example, with DEX), then there are no prefixes.

#### Ownership assigned message layout

| Field                | Type                | Description                                    |
| -------------------- | ------------------- | ---------------------------------------------- |
| `ownership_assigned` | `uint32`            | tag equal to `0x05138d91`                      |
| `query_id`           | `uint64`            | should be equal to request's `query_id`        |
| `prev_owner`         | `MsgAddress`        | address of the previous owner of this NFT item |
| `forward_payload`    | `Either Cell ^Cell` | should be equal to request's `forward_payload` |

#### Excesses message layout

| Field      | Type     | Description                             |
| ---------- | -------- | --------------------------------------- |
| `excesses` | `uint32` | tag equal to `0xd53276db`               |
| `query_id` | `uint64` | should be equal to request's `query_id` |

#### Get static data message layout

| Field             | Type     | Description               |
| ----------------- | -------- | ------------------------- |
| `get_static_data` | `uint32` | tag equal to `0x2fcb26a2` |
| `query_id`        | `uint64` | arbitrary request number  |

#### Report static data message layout

| Field                | Type         | Description                                                               |
| -------------------- | ------------ | ------------------------------------------------------------------------- |
| `report_static_data` | `uint32`     | tag equal to `0x8b771735`                                                 |
| `query_id`           | `uint64`     | should be equal to request's `query_id`                                   |
| `index`              | `uint256`    | numerical index of this NFT in the collection                             |
| `collection`         | `MsgAddress` | address of the smart contract of the collection to which this NFT belongs |

<Aside type="caution">Verify that item belongs to collection via [get method in collection](/standard/tokens/nft/api#get-nft-address-by-index), see more [here](/standard/tokens/nft/verify)</Aside>

#### get\_nft\_data()

No arguments. Outputs:

| Field                | Type         | Description                                                               |
| -------------------- | ------------ | ------------------------------------------------------------------------- |
| `init?`              | `int`        | if not zero, then this NFT is fully initialized and ready for interaction |
| `index`              | `int`        | numerical index of this NFT in the collection                             |
| `collection_address` | `MsgAddress` | address of the smart contract of the collection to which this NFT belongs |
| `owner_address`      | `MsgAddress` | address of the current owner of this NFT                                  |
| `individual_content` | `Cell`       | individual NFT content in any format                                      |

<Aside type="caution">Verify that item belongs to collection via [get method in collection](/standard/tokens/nft/api#get-nft-address-by-index), see more [here](/standard/tokens/nft/verify)</Aside>

### NFT Collection

#### get\_collection\_data()

No arguments. Outputs:

| Field                | Type         | Description                                              |
| -------------------- | ------------ | -------------------------------------------------------- |
| `next_item_index`    | `int`        | the count of currently deployed NFT items in collection  |
| `collection_content` | `Cell`       | collection content in a format that complies with TEP-64 |
| `owner_address`      | `MsgAddress` | collection owner address, zero address if no owner       |

#### get\_nft\_address\_by\_index()

Argument: `index` as `int`.

Output: `address` as `MsgAddress`.

#### get\_nft\_content()

Arguments:

* `index` as `int`
* `individual_content` as `Cell`

Output: `full_content` as `Cell`.

## [TEP-66](https://github.com/ton-blockchain/TEPs/blob/c5bfe285ef91810fab02c5352593f5a1455458bf/text/0066-nft-royalty-standard.md)

### Get royalty params message layout

| Field                | Type     | Description               |
| -------------------- | -------- | ------------------------- |
| `get_royalty_params` | `uint32` | tag equal to `0x693d3950` |
| `query_id`           | `uint64` | arbitrary request number  |

### Report royalty params message layout

| Field                   | Type         | Description                             |
| ----------------------- | ------------ | --------------------------------------- |
| `report_royalty_params` | `uint32`     | tag equal to `0xa8cb00ad`               |
| `query_id`              | `uint64`     | should be equal to request's `query_id` |
| `numerator`             | `uint16`     | royalty numerator                       |
| `denominator`           | `uint16`     | royalty denominator                     |
| `destination`           | `MsgAddress` | address to send royalty                 |

### royalty\_params()

No arguments. Outputs:

| Field         | Type         | Description                      |
| ------------- | ------------ | -------------------------------- |
| `numerator`   | `int`        | royalty numerator (e.g., 11)     |
| `denominator` | `int`        | royalty denominator (e.g., 1000) |
| `destination` | `MsgAddress` | address to send royalty          |

Royalty share is `numerator / denominator`. For example, if `numerator = 11` and `denominator = 1000`, then royalty share is `11 / 1000 * 100% = 1.1%`.

## [TEP-85](https://github.com/ton-blockchain/TEPs/blob/c5bfe285ef91810fab02c5352593f5a1455458bf/text/0085-sbt-standard.md)

### SBT Item

#### Prove ownership message layout

| Field             | Type         | Description                                                            |
| ----------------- | ------------ | ---------------------------------------------------------------------- |
| `prove_ownership` | `uint32`     | tag equal to `0x04ded148`                                              |
| `query_id`        | `uint64`     | arbitrary request number                                               |
| `destination`     | `MsgAddress` | address of the contract to which the ownership should be proven        |
| `forward_payload` | `^Cell`      | any data for sending to the destination address from SBT               |
| `with_content`    | `Bool`       | if true, SBT's individual content cell will be included in the message |

<Aside type="caution">Should be rejected if sender address is not the owner's address.</Aside>

#### Request owner message layout

| Field             | Type         | Description                                                            |
| ----------------- | ------------ | ---------------------------------------------------------------------- |
| `request_owner`   | `uint32`     | tag equal to `0xd0c3bfea`                                              |
| `query_id`        | `uint64`     | arbitrary request number                                               |
| `destination`     | `MsgAddress` | address of the contract to which the ownership should be proven        |
| `forward_payload` | `^Cell`      | any data for sending to the destination address from SBT               |
| `with_content`    | `Bool`       | if true, SBT's individual content cell will be included in the message |

#### Destroy message layout

| Field      | Type     | Description               |
| ---------- | -------- | ------------------------- |
| `destroy`  | `uint32` | tag equal to `0x1f04537a` |
| `query_id` | `uint64` | arbitrary request number  |

<Aside type="caution">Should be rejected if sender address is not the owner's address. Sets the owner's address and authority to null, and sends an excesses message with the contract's balance.</Aside>

#### Revoke message layout

| Field      | Type     | Description               |
| ---------- | -------- | ------------------------- |
| `revoke`   | `uint32` | tag equal to `0x6f89f5e3` |
| `query_id` | `uint64` | arbitrary request number  |

<Aside type="caution">Should be rejected if sender address is not the authority's address or if already revoked. Sets `revoked_at` to current unix time.</Aside>

#### Ownership proof message layout

| Field                | Type          | Description                                                      |
| -------------------- | ------------- | ---------------------------------------------------------------- |
| `ownership_proof`    | `uint32`      | tag equal to `0x0524c7ae`                                        |
| `query_id`           | `uint64`      | should be equal to request's `query_id`                          |
| `item_id`            | `uint256`     | ID of an SBT                                                     |
| `owner`              | `MsgAddress`  | SBT owner's address                                              |
| `data`               | `^Cell`       | data cell passed in `prove_ownership`                            |
| `revoked_at`         | `uint64`      | unix time when SBT was revoked, 0 if it was not                  |
| `individual_content` | `Maybe ^Cell` | SBT's individual content if `with_content` was true, null if not |

#### Owner info message layout

| Field        | Type          | Description                                           |
| ------------ | ------------- | ----------------------------------------------------- |
| `owner_info` | `uint32`      | tag equal to `0x0dd607e3`                             |
| `query_id`   | `uint64`      | should be equal to request's `query_id`               |
| `item_id`    | `uint256`     | ID of an SBT                                          |
| `initiator`  | `MsgAddress`  | address of request initiator                          |
| `owner`      | `MsgAddress`  | SBT owner's address                                   |
| `data`       | `^Cell`       | data cell equal to request's `forward_payload`        |
| `revoked_at` | `uint64`      | unix time when SBT was revoked, 0 if it was not       |
| `content`    | `Maybe ^Cell` | SBT's content if `with_content` was true, null if not |

#### get\_nft\_data()

Same as [NFT standard](/standard/tokens/nft/api#get-nft-data). No arguments. Outputs:

| Field                | Type         | Description                                                               |
| -------------------- | ------------ | ------------------------------------------------------------------------- |
| `init?`              | `int`        | if not zero, then this SBT is fully initialized and ready for interaction |
| `index`              | `int`        | numerical index of this SBT in the collection                             |
| `collection_address` | `MsgAddress` | address of the smart contract of the collection to which this SBT belongs |
| `owner_address`      | `MsgAddress` | SBT owner's address                                                       |
| `individual_content` | `Cell`       | individual SBT content in any format                                      |

#### get\_authority\_address()

No arguments. Outputs:

| Field       | Type    | Description                                                                                |
| ----------- | ------- | ------------------------------------------------------------------------------------------ |
| `authority` | `slice` | authority's address that can revoke SBT, returns `addr_none` (2 zero bits) if no authority |

<Aside type="note">This method is mandatory for SBT. If there is no authority it should return `addr_none` (2 zero bits).</Aside>

#### get\_revoked\_time()

No arguments. Outputs:

| Field        | Type  | Description                                           |
| ------------ | ----- | ----------------------------------------------------- |
| `revoked_at` | `int` | unix time of when SBT was revoked, 0 when not revoked |
