Skip to content

NFT Management

Access prerequisites

  • Permission (module): manageToken
  • License/Feature: MANAGE_NFTS
  • Menu container: TOKENIZATION → group TokenizationManage NFTs

What it is / when to use

Catalog of NFTs / tokenized assets (real estate, certificates, collectibles, packages). Here the operator creates, edits, views and deactivates NFTs, assigns them to a collection and a category, sets the price and accepted currencies, configures wallet commissions, draws and sends (distributes) NFTs to users.

Creating an NFT requires the collection and the category to already exist.

Prerequisites

  • Permission: manageToken (dual — CPM enum + dynamic module in DB).
  • License/Feature: MANAGE_NFTS.
  • Dependencies: the Collection must exist (Collections); the Category must exist and allow product creation (allow_product_creation = true, in NFT Categories).

Step by step (listing)

  1. Access the menu Tokenization → Manage NFTs.
  2. Search by name (search with debounce) and filter by collection.
  3. Use the icons on each row: draw (raffle), send (distribute), edit, view and delete.
  4. Use Create NFT to open the form.

Filters and columns

Filter / ColumnWhat it showsData source
Search by nameFilters by name (server-side, paginated)getAllAssets({ name, collectionId, limit, offset })
CollectionFilters by collectionIdgetCollections()
Name / Type / ValueIdentification, type (NFT) and current price in tokensTokenController (assets)
ActionsRaffle, send, edit, view, delete

Create / Edit NFT form

The form is divided into groups (Catalog, Commercial, Settings) with sections. During creation, the "Additional information" section is locked (only available in edit/view mode).

Section: General (required)

FieldWhat it isRequired?System/backend effect
CollectionCollection the NFT belongs toYescollection.id. Defines the contract/standard on-chain (ERC-721 or regulated).
CategoryAsset categoryYescategory_id — only categories with allow_product_creation.
NameAsset nameYesname.
DescriptionDescriptionYesdescription.
QuantityNumber of items to issueYesquantity.
CharacteristicsFree key/value pairs or by templateNocharacteristics[].

Section: Pricing (required)

FieldWhat it isRequired?System/backend effect
PriceAsset value in fiat currencyYes*price (BigNumber). *Can be waived with skipPrice.
Accepted currenciesTokens accepted as payment (checkbox per token)Nopayment_types[].
Allow splitDistributes payment among the checked tokensNoallow_split + percentage per token (paymentPrice). The sum must total 100%.
Transaction type / FeeTransaction tax/fee (Percentage or Absolute)NotaxType (A/P) + transactionTax.

Section: Media (required)

FieldWhat it isRequired?System/backend effect
PhotosAsset imagesYesphotos[] (at least one).

Section: Wallets / Commissions (optional)

FieldWhat it isRequired?System/backend effect
Wallet + commissionWallets that receive a commission from the saleNowallets_commission[] = { id, commission }.

Section: Publication (settings)

Groups the NFT behavior toggles and the linked token/liquidity fields. The full reference for each toggle is in Settings reference (toggles).

Non-toggle fields in this section:

FieldWhat it isRequired?System/backend effect
Linked token for future distributionsToken used in distributions/claims made from the NFTNotokenClaimId. Defines which token the holder receives when the NFT distributes value.
Liquidity token for future distributionsLiquidity token offered as an alternative for receivingNoliquidityToken. Enables the option for the holder to choose to receive in fiat/token (see block_liquidity_option).
Internal statusOperational status used internally for the NFTNostatus. Not displayed to the end user.

Section: Additional information (edit only)

projectUrl, projectDescription, projectCustomHtml and contract — project information and contract address.

Settings reference (toggles)

The NFT has 8 toggles distributed between the Pricing (allow_split) and Publication (the rest) sections. All are booleans and stored in the assets entity of the TokenController. The table below covers 100% of them.

Label (screen)Field (ngModel)What it does (backend effect)When to use
Publish NFT immediatelyasset.enabledPublishes the NFT on the platforms (Midas-Web/Trade) and includes it in catalog listings. When off, the NFT exists but is hidden from users. "Deleting" the NFT from the listing is also a soft-delete that clears this field (enabled = false + disabled = now).Turn on when the offering is ready for the public. Leave off for drafts/pre-launch.
Block saleasset.block_sellLocks the primary sale. In market.core.handler, the purchase reservation throws an error (NFT sale is blocked) when block_sell = true, except for administrative calls (isAdminCall). It is automatically locked in NFT Burn (snapshot in nft_burn_operation.previous_block_sell for manual reversal).To close the primary sale of an offering (sold out, suspended, under recall) without deleting the NFT.
Block resaleasset.block_resellPrevents the secondary market: in the holder's app (Midas-Web card-list), resale, auction and split actions are hidden when block_resell = true. It is also locked together with block_sell during NFT Burn (snapshot in previous_block_resell).Non-resalable NFTs: nominal tickets, locked-up quotas, regulated assets that cannot circulate.
Package onlyasset.only_packageRemoves the NFT from the standalone catalog: the public listing query (AssetsDAO) adds only_package = false, so the NFT only appears/is sold inside an NFT Package. The product detail screen also hides the standalone checkout. Admins and the collection profile continue to see it.When the NFT should only be acquired bundled in a package, never standalone.
Manage accessasset.handle_accessTreats the NFT as an access control/credential: upon completing the purchase, market.core.handler creates a user access token in CPM for the buyer (and removes the seller's on resale). The NFT then appears in the admin's "access assets" list.Tickets, subscriptions, restricted areas — any NFT that grants an access right tied to ownership.
Block liquidity preferenceasset.block_liquidity_optionFreezes the choice of distribution receiving method: changeDistributionType (assets.core.handler) throws an error when true, and in the holder's app the "receive in fiat/token" icons are disabled. Works together with the Liquidity token configured.When the liquidity method is already defined by the offering and the holder can no longer switch it.
Exclude from Income Tax Report (IRPF)asset.block_from_irpfExcludes the NFT from the IRPF report: the irpf.snapshot.handler and the report generator filter (!block_from_irpf) both the base snapshot and the final snapshot, removing the asset from the income lines.Assets that should not appear in the user's Income Tax Report (e.g.: non-taxable items, internal utilities).
Allow NFT Splitasset.allow_splitTwo effects: (1) in Pricing, enables distributing payment among several accepted tokens (percentage per token, sum = 100%); (2) in the holder's app, enables the split action on resale — the split icon only appears with allow_split = true, block_resell = false and price > 0.When the NFT can be split and/or paid with a split among multiple tokens.

Relationship with NFT Burn

block_sell and block_resell are not just manual settings: NFT Burn turns both on automatically in the same atomic transaction as the burn header, storing the previous values in nft_burn_operation.previous_block_sell / previous_block_resell to allow manual reversal. Locking the NFT at T0 prevents purchase and resale while the watcher processes the on-chain settlement (sink wallet or native burn).

Non-obvious effects

  • block_sell has an admin exception: calls with isAdminCall bypass the lock — the operator can still distribute/sell through the administration even with the public sale locked.
  • only_package does not disappear for admin: the NFT remains visible to administrators and in the collection profile; the only_package = false filter only applies to the user's public catalog.
  • allow_split is two features in one toggle: it controls both the payment split (Pricing) and the permission to split the NFT in the secondary market.

Actions and modals

  • Create / Edit: confirmation modal (bottom sheet). Creation sends the full payload (createAssets); editing sends the editable subset (editAssets).
  • Draw (raffle): opens the raffle wheel — all users who hold that NFT participate; after spinning, the winner's email and the NFT ID are displayed.
  • NFT Report: on the raffle screen, exports the list of users with an indication of who holds the NFT (email, name, phone, registration date, account status).
  • Send (distribute) NFT: distribution modal — the admin sends the NFT to specific users.
  • Delete: logical deactivation (enabled = false + disabled = now), preserving history.

Business rules / cautions

Attention

  • Collection and category are prerequisites — without them the save is not enabled.
  • Mint exclusive to the job (crowdfunding): for crowdfunding assets, NFT issuance and burn occur only through the crowdfunding job. Financial distribution does not issue an NFT, and TKN_OWNER does not issue or resell — this guarantees the raised == NFTs invariant by construction.
  • block_sell / block_resell lock primary and secondary sales; they are also triggered automatically in the NFT Burn flow.

Irreversible

  • NFT issuance (mint) on-chain has no rollback. Check the collection, category and quantity before confirming.
  • Financial values: price, commissions and fees are BigNumber — no rounding.
  • Status APPROVED: distributions/sends on behalf of a user require the target user to have status === 'APPROVED'.

Examples

Scenario 1 — Tokenized real estate NFT with wallet commission
  1. General: collection "Imóveis SP", category "Imóveis", name, description, quantity 100.
  2. Pricing: price R$ 1.000,00; accepted currencies: BRLX. Type Percentage, fee 2%.
  3. Wallets: add the partner's wallet with commission = 5.
  4. Media: photos of the property.
  5. Publication: Publish listing on, Block resale according to the offering's rules.
  6. Save. Result: 100 NFT quotas published, with a 5% commission to the partner's wallet.
Scenario 2 — Access NFT (ticket) non-resalable
  1. General: collection "Eventos", category "Ingressos", quantity according to capacity.
  2. Publication: turn on Manage access and Block resale.
  3. Pricing: ticket price; accepted currency according to the operation.
  4. Save. Result: NFT functions as a ticket, with no secondary market.