# Hts Nft

> Create and manage HTS NFT collections — NonFungibleUnique token types, finite max supply, batch mint with per-serial metadata (HIP-412 / JSON metadata URIs), NFT transfers, royalty and custom fees, marketplace integration patterns, HTS NFT vs ERC-721 via Smart Contract Service. Use when user mentions NFT serial, HIP-412, royalty fee, metadata JSON, mint batch HTS, NonFungibleUnique, or compares Hedera NFT to OpenSea ERC-721.

- Skill: `evaluris-solutions/hts-nft` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add evaluris-solutions/hts-nft`
- Raw SKILL.md: https://api.skillmd.com/api/skills/evaluris-solutions/hts-nft/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: Evaluris-Solutions (https://skillmd.com/u/evaluris-solutions)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/evaluris-solutions/hts-nft

---


## Overview

HTS represents NFTs as **token type + serial numbers**, with optional per-mint metadata bytes (often a UTF-8 URI pointing at JSON). Pair NFT modeling with [HIP-412 NFT metadata standard](https://hips.hedera.com/hip/hip-412) guidance mirrored in [references/nft-metadata-schema.md](references/nft-metadata-schema.md).

## When to use this skill

- Launching **collections** with capped supply (`maxSupply`) vs infinite mint strategies (still finite max typically).
- Encoding **royalties** via `CustomRoyaltyFee` + fallback fixed fee for fungible royalty denominators.
- Evaluating **HTS-native NFT** vs deploying ERC-721 contracts for marketplace compatibility trade-offs.

## Prerequisites

- Treasury account with funded association capacity.
- Supply key custody for mint operations.

## Workflow

1. **Create collection** — `TokenType.NonFungibleUnique`, `TokenSupplyType.Finite`, `setMaxSupply(n)`, treasury + keys.

   Reference: [scripts/create-nft-collection.js](scripts/create-nft-collection.js).

2. **Mint serials** — `TokenMintTransaction.setMetadata([...])` supplies **one metadata blob per minted NFT** batch.

   Reference: [scripts/batch-mint.js](scripts/batch-mint.js).

3. **Transfer NFT** — `TransferTransaction.addNftTransfer(tokenId, serial, sender, recipient)` (confirm overload ordering against SDK typings when upgrading).

   Reference: [scripts/transfer-nft.js](scripts/transfer-nft.js).

4. **Royalties / fees** — Use `CustomRoyaltyFee` + optional `CustomFixedFee` fallback per docs.

   Reference: [scripts/set-royalty.js](scripts/set-royalty.js).

5. **Marketplaces** — Mirror Node REST + wallet signing patterns in [references/marketplace-patterns.md](references/marketplace-patterns.md).

## Examples

**Example 1**

> “Mint 50 NFTs with IPFS metadata URIs.”

Prepare UTF-8 URI strings, convert to `Uint8Array`, batch via `setMetadata([...])`.

**Example 2**

> “Take 5% royalty on secondary sales payable in HBAR.”

Model custom royalty numerator/denominator + fallback fee per `CustomRoyaltyFee` rules — validate fee collector account & exemptions.

**Example 3**

> “Should we deploy ERC-721 instead?”

Compare marketplace pipeline expectations: ERC-721 gives maximal EVM tool compatibility; HTS NFT minimizes contract attack surface but may require bridges/indexers for some exchanges.

## Troubleshooting

| Issue | Hint |
| --- | --- |
| Mint rejects metadata length | Check transaction memo/message limits — chunk external metadata |
| Cannot transfer | Recipient associated? Sender owns serial? |
| Royalty not firing | Secondary sale structure might bypass royalty conditions — verify HIP/custom fee interplay |

## References

- Local: [references/nft-metadata-schema.md](references/nft-metadata-schema.md), [references/custom-fees.md](references/custom-fees.md), [references/marketplace-patterns.md](references/marketplace-patterns.md)
- Docs: [Mint a token](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/mint-a-token.md), [Custom token fees](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/custom-token-fees.md)

