Skip to main content
This section covers working with NFT collections: Standard, Editable, and Soulbound. It includes collection deployment, minting, batch minting, content editing, and administrative operations such as changing collection ownership.
Transferring an NFT to a new owner is a wallet operation. See Send NFT.

Standard Collection

A standard collection (TEP-62) mints immutable NFT items. Collection and item metadata use the TEP-64 off-chain format: the collection stores a base URI, and each item stores a suffix appended to it.

Deploy Collection

Compose the collection data from NFTCollectionData and deploy the contract by sending a message with its state_init. The collection address is derived deterministically from the code and data, so it is known before deployment.
Parameters:
  • owner_address — collection owner; only this address can mint items (Address).
  • content — collection-level metadata URI and the common prefix for item metadata URIs (NFTCollectionContent).
  • royalty_params — royalty share as royalty / denominator and the royalty destination address (RoyaltyParams).
  • nft_item_code — code cell used to deploy each NFT item (Cell).

Mint NFT

Minting sends an NFTCollectionMintItemBody message to the collection contract. The sending wallet must be the collection owner. The item address is calculated locally from the index, item code, and collection address.
Parameters:
  • item_index — unique index within the collection; used for address calculation (int).
  • item_ref — serialized item initialization data: owner and content (Cell).
  • forward_amount — nanotons forwarded to the newly deployed item to cover initial storage fees; 0.01 TON is typical (int).

Batch Mint NFT

Batch minting deploys multiple items in a single transaction with NFTCollectionBatchMintItemBody. Items receive sequential indices starting from from_index.
Parameters:
  • items_refs — list of serialized initialization data for all items (list[Cell]).
  • from_index — starting index; items get sequential indices from this value (int).
  • forward_amount — nanotons forwarded to each newly deployed item (int).

Editable Collection

An editable collection allows updating collection content, royalty parameters, and item metadata after deployment. Each item stores an editor address that is authorized to modify its content.

Deploy Collection

Deployment is identical to a standard collection; the only changes are the contract classes — NFTCollectionEditable and NFTItemEditable:

Mint NFT

Editable items use NFTItemEditableMintRef, which adds an editor_address authorized to modify the item metadata after minting.

Batch Mint NFT

Batch minting works the same as in a standard collection; the only changes are the Editable classes and NFTItemEditableMintRef, which sets an editor_address for each item:

Edit NFT Content

Send an NFTEditContentBody message to the NFT item contract. The sending wallet must be the item’s editor.

Change NFT Editorship

Send an NFTTransferEditorshipBody message to the NFT item contract. The sending wallet must be the current editor.

Edit Collection Content

Send an NFTCollectionChangeContentBody message to the collection contract to replace the collection metadata and royalty parameters. The sending wallet must be the collection owner.

Change Collection Owner

Send an NFTCollectionChangeOwnerBody message to the collection contract. The sending wallet must be the current owner.

Soulbound Collection

Soulbound tokens (SBT, TEP-85) are non-transferable NFTs bound to their owner. Each item stores an authority address that can revoke it; the owner can destroy it.
There is no separate soulbound collection class. Use NFTCollectionStandard with the soulbound item code from NFTItemSoulbound.get_default_code().

Deploy Collection

Deployment is identical to a standard collection; the only change is that the item code comes from NFTItemSoulbound:

Mint NFT

Soulbound items use NFTItemSoulboundMintRef, which adds an authority_address that can later revoke the item.

Batch Mint NFT

Batch minting works the same as in a standard collection; the only changes are the Soulbound item code and NFTItemSoulboundMintRef, which sets an authority_address for each item:

Revoke NFT

Send an NFTRevokeBody message to the SBT item contract. Per TEP-85, only the item’s authority can revoke it; revocation sets the on-chain revoked timestamp.

Destroy NFT

Send an NFTDestroyBody message to the SBT item contract. Per TEP-85, only the item’s owner can destroy it.

NFT Examples

Full runnable scripts for all NFT operations on GitHub.