# Non-fungible token (NFT)

The `NFTToken` entity provides representation of an NFT on Casper Network. CSPR.cloud supports NFTs compatible with the [CEP-47](https://github.com/casper-ecosystem/casper-nft-cep47) and [CEP-78](https://github.com/casper-ecosystem/cep-78-enhanced-nft) Casper Network standards.

### Properties

The `NFTToken` entity has the following properties:

| Property                   | Type         | Description                                                                                                                                     |
| -------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `contract_package_hash`    | `string(64)` | NFT contract package hash represented as a hexadecimal string. First of of token identifier                                                     |
| `block_height`             | `uint64`     | Height of the block in which the token was minted.                                                                                              |
| `token_id`                 | `string`     | Token ID under the contract. Second part of token identifier                                                                                    |
| `token_standard_id`        | `uint8`      | [NFT standard](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token/get-token-standards) identifier                                        |
| `owner_hash`               | `string(64)` | NFT token owner account or contract hash, represented as a hexadecimal string                                                                   |
| `owner_type`               | `uint8`      | NFT owner type. `0` for account, `1` for contract                                                                                               |
| `onchain_metadata`         | `JSON`       | On-chain NFT metadata                                                                                                                           |
| `offchain_metadata`        | `JSON`       | Off-chain NFT metadata                                                                                                                          |
| `offchain_metadata_status` | `uint8`      | [NFT token offchain metadata status](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token/get-token-offchain-metadata-statuses) identifier |
| `is_burned`                | `bool`       | `true` if the token was burn                                                                                                                    |
| `tracking_id`              | `uint32`     | Unique ID describes relation with corresponded [`NFTTokenAction`](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token-action).            |
| `timestamp`                | `uint16`     | The timestamp of token creation                                                                                                                 |

**Example**

```json
{
  "contract_package_hash": "04682e17e5a86d594d9fd2bf37c766834bbaa412499bd6b5ac4ce76449708797",
  "block_height": 2404577,
  "is_burned": false,
  "offchain_metadata": {
    "attributes": [
      {
        "trait_type": "BG",
        "value": "Bg-1"
      },
      {
        "trait_type": "BG lines",
        "value": "Bg-Line-21"
      },
      {
        "trait_type": "Strpse",
        "value": "Card-stripse-01"
      }
    ],
    "description": "The first Tornado Master NFT minted by GuardianLink using Casper to announce the partnership with Casper.",
    "image": "https://arweave.net/H5RHizXPJez8zNMC07RVZxCApW42nSfF7FQk4jwyLHs",
    "name": "Tornado Master #0"
  },
  "offchain_metadata_status": 2,
  "onchain_metadata": {
    "name": "Tornado-Demo",
    "symbol": "TD",
    "token_uri": "https://yslkpbmdp345dabuwtvg65sqgd62lnpk2bp6mwha5hsrqxocw24q.arweave.net/xJanhYN--dGANLTqb3ZQMP2lterQX-ZY4OnlGF3Ctrk"
  },
  "owner_hash": "f41b57283a23958405373e8fbd9195ddbe71e8ea98fb2f4397ab09b2f63198af",
  "owner_type": 0,
  "timestamp": "2023-11-22T12:22:21Z",
  "token_id": "0",
  "token_standard_id": 2,
  "tracking_id": 258547
}
```

## Optional properties

Depending on the endpoint some of the following optional properties may be included in the `NFTToken` entity:

| Property           | Type                                                                         | Description                         |
| ------------------ | ---------------------------------------------------------------------------- | ----------------------------------- |
| `contract_package` | [`ContractPackage`](https://docs.cspr.cloud/1.3.x/rest-api/contract-package) | NFT contract package                |
| `owner_public_key` | `string(68)`                                                                 | Owner public key if it's an account |

### Relations

| Entity                                                                               | Mapping property        | Description                                                        |
| ------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------ |
| [`Contract package`](https://docs.cspr.cloud/1.3.x/rest-api/contract-package)        | `contract_package_hash` | NFT tokens belong to a contract package                            |
| [`Account`](https://docs.cspr.cloud/1.3.x/rest-api/account)                          | `from_hash, to_hash`    | NFT token could have accounts as the token owner                   |
| [`NFTTokenAction`](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token-action) | `tracking_id`           | NFT token actions are mapped by contract package hash and token id |

### Endpoints

The `NFTToken` entity has the following endpoints:

* [Get NFT](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token/get-contract-package-token-by-token-id)
* [Get account NFTs](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token/get-account-tokens)
* [Get contract package NFTs](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token/get-contract-package-tokens)

### Relation endpoints

The `NFTToken` entity has the following relation endpoints:

* [Get NFT standards](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token/get-token-standards)
* [Get off-chain NFT metadata statuses](https://docs.cspr.cloud/1.3.x/rest-api/non-fungible-token/get-token-offchain-metadata-statuses)
