# Welcome to NMKR Docs

The NMKR Docs is a comprehensive documentation that will assist you in getting started with our applications and learning about Blockchain Technology.

The NMKR Docs provide detailed information to help you begin using our applications and understand Blockchain Technology. Whether you're a beginner or an experienced user, these documents offer clear explanations to make your experience straightforward.

Besides some useful resources about Cardano NFTs and the Cardano Blockchain, it covers tutorials on how to interact with our ecosystem and how to use tools like [NMKR Studio](https://docs.nmkr.io/nmkr-studio/introduction) and other [helpful tools](https://docs.nmkr.io/nmkr-studio/tools) from us.\
\
If you miss any information or think a better explanation is needed, please feel free to use the page rating ("Was this page helpful?") that can be found under any page and if you want [contact us directly](https://nmkr.io/support) so we can improve the documentation accordingly.\
\
We're delighted to welcome you on board as a MAKER, contributing to the goal of achieving widespread adoption on the Cardano platform!

### Find your way in the docs

Get Started with [NMKR Studio](/nmkr-studio/introduction-nmkr-studio), the most comprehensive Toolset for Minting on Cardano.

{% embed url="<https://docs.nmkr.io/nmkr-studio/introduction-nmkr-studio>" %}

Check out our [NMKR API Endpoints](/nmkr-studio-api/introduction-nmkr-studio-api) with countless features.

{% embed url="<https://studio-api.nmkr.io/swagger/index.html>" %}
Link to our API Swagger on Mainnet
{% endembed %}

Our "Learn [NMKR Studio](/nmkr-studio/introduction-nmkr-studio) in 3 minutes" On-boarding Video Tutorial gives you a great kickstart.

{% embed url="<https://www.youtube.com/watch?v=OK8Zl-PSAJg>" %}


# Cardano Berlin Hackathon - Developer Resource Guide

Cardano Resources and commonly used tools and services

## Introduction&#x20;

The Cardano Berlin Hackathon by NMKR is your platform to create innovative projects on Cardano, from AI agents that transact on Cardano, NFTs and smart contracts to decentralized apps (dApps) and governance systems. This guide, crafted for developers with blockchain experience but new to Cardano, provides curated APIs, libraries, and documentation to accelerate your development. Each resource details specific features and project ideas to spark creativity.

## Getting Started

Launch your Cardano development with these steps:

* Master the Basics: Visit the Cardano Developer Portal at[ https://developers.cardano.org/](https://developers.cardano.org/) to learn about the Extended UTxO model, stake pools, and Cardano’s layered architecture.
* Use Hackathon Tools: LEverage APIs, SDKs and libraries like the NMKR API, Mesh SDK, Blockfrost, Cerberus API and more for instant blockchain interaction, no node setup needed.
* Connect with Peers: Our community is full of brilliant minds—don’t hesitate to connect and see what exciting projects others are building.  <https://discord.gg/ppysAqXC>

***

## Developer Resources

### Programming Languages for Cardano

These languages simplify smart contract and dApp development on Cardano, offering alternatives to Haskell for various skill levels.

* Aiken Language\
  A modern language for Cardano smart contracts, simplifying Plutus development with clear syntax, built-in testing, and optimized compilation. Ideal for developers avoiding Haskell’s complexity.\
  What You Can Build: Escrow services, decentralized voting systems, automated lending protocols, DAO logic.\
  <https://aiken-lang.org/>
* OpShin\
  A Python-based smart contract language for Cardano, enabling Plutus contracts with Python syntax. Features type checking, a Plutus script compiler, and PyCardano integration. Perfect for Python developers creating secure contracts.\
  What You Can Build: Python-based smart contracts, decentralized voting systems, automated financial protocols.\
  <https://github.com/OpShin/opshin>

### Libraries and SDKs

These libraries streamline dApp development, transaction building, and wallet integration across multiple programming languages.

* MeshJS\
  A JavaScript library for Cardano dApps, supporting transaction construction, wallet integration (e.g., Nami, Eternl), and CIP-30 compliance. Includes modular UI and backend components for web-based projects.\
  What You Can Build: Decentralized exchanges, web wallets, staking platforms, marketplace frontends.\
  <https://meshjs.dev/>
* PyCardano\
  A Python library for Cardano transactions, smart contract interactions, and wallet management. Supports complex scripting and Plutus integration with examples for Python developers. Suits backend-heavy dApps or automation tools.\
  What You Can Build: Automated transaction bots, dApp backend services, smart contract testing tools.\
  <https://pycardano.readthedocs.io/en/latest/>
* Lucid\
  A JavaScript library for streamlined transaction building, and wallet integration. Features a simple API, CIP-30 wallet support (e.g., Eternl, Typhon), and npm installation for rapid setup. Ideal for user-friendly NFT platforms or dApps.\
  What You Can Build: Wallet-connected collectible apps, tokenized reward systems, marketplace frontends.\
  <https://lucid.spacebudz.io/> |[ https://www.npmjs.com/package/lucid-cardano](https://www.npmjs.com/package/lucid-cardano)
* Cardano-serialization-lib\
  A JavaScript/TypeScript library by Emurgo for building and serializing Cardano transactions. Supports complex transactions, key signing, and native assets with browser-compatible builds for dApp integration.\
  What You Can Build: Custom transaction builders, dApp backends with precise transaction control, wallet integration tools.\
  <https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser>
* Clarity SDK\
  A JavaScript SDK for building and managing DAOs on Cardano using Clarity Protocol’s smart contracts. Simplifies integrating governance features like proposal creation, voting, and dashboards.\
  What You Can Build: DAO platforms, community governance tools, voting dApps, governance dashboards.\
  [https://sdk.clarity.vote](https://sdk.clarity.vote/)

### NFT and Asset Creation

Build NFTs, tokenized assets, or collectibles for marketplaces and games.

* NMKR API\
  Mint, manage and sell NFTs or digital assets with NMKR Studio’s powerful API. Supports airdropping, custom metadata, a payment gateway, with Swagger for testing and ready-to-use endpoints. Ideal for scalable platforms or token integration into apps.\
  What You Can Build: NFT marketplaces, digital art galleries, tokenized event tickets, in-game assets.\
  <https://docs.nmkr.io/nmkr-studio-api/get-started-with-the-api>

### APIs for Blockchain Interaction

These APIs provide instant access to Cardano blockchain data and functionality, eliminating node setup.

* Blockfrost API\
  Access Cardano blockchain data (transactions, addresses, stake pools) via REST and WebSocket APIs. Offers a free tier, SDKs in multiple languages, and reliable data for rapid dApp development.\
  What You Can Build: Wallet trackers, real-time transaction monitors, staking dashboards, dApp backends.\
  <https://docs.blockfrost.io/>
* Clarity API\
  RESTful endpoints for building and managing DAOs on Cardano using Clarity Protocol’s smart contracts. Supports proposal creation and voting, ideal for transparent governance projects.\
  What You Can Build: DAO platforms, community governance tools, voting dApps, governance dashboards.\
  <https://clearcontracts.github.io/clarity-api/#/>
* Xerberus API\
  A risk rating protocol offering real-time, objective analysis of Cardano assets via APIs. Provides data-driven risk scores and market insights for financial or risk-focused dApps.\
  What You Can Build: Risk dashboards, portfolio trackers, investment advisory tools, DeFi analytics.\
  <https://www.xerberus.io/>

### Development Platforms and Tools

These platforms and toolsets provide infrastructure, data pipelines, or deployment solutions for scalable dApps.

* Demeter\
  A Cardano development platform offering infrastructure for dApp deployment, including APIs, hosting, and storage solutions. Streamlines blockchain data querying and smart contract management for full-stack applications.\
  What You Can Build: Scalable dApps, NFT marketplaces with backend storage, DeFi platforms with data querying.\
  <https://docs.demeter.run/>
* TxPipe Developer Tools\
  Open-source tools like Dolos (lightweight data node), Oura (stream-processing), Scrolls (read-optimized cache), and Pallas (Rust-native blocks). Supports custom data pipelines or off-chain integration for optimized dApp backends.\
  What You Can Build: Custom data pipelines, real-time dApp backends, analytics services.\
  <https://txpipe.io/#developer-tools>

### Cardano Wallets

Integrate these non-custodial wallets for secure ADA, NFT, and dApp interactions, supporting staking and dApp connectivity.

* Typhon Wallet\
  A fast web and browser extension wallet with dApp connectors, NFT galleries, and multi-recipient transaction support. Features hardware wallet compatibility (Ledger, Trezor) and Catalyst voting.\
  <https://typhonwallet.io/>
* Lace Wallet\
  Cardano’s official light wallet by IOG, with a modern UI for managing ADA, NFTs, and native tokens. Supports dApp connectivity, in-app staking, and future DeFi integrations.\
  <https://www.lace.io/>
* VESPR Wallet\
  A mobile light wallet with a sleek UI for managing ADA, NFTs, and native tokens. Supports dApp connections, staking, and hardware wallets, ideal for mobile-first projects.\
  <https://vespr.xyz/>
* Eternl Wallet\
  A browser-based light wallet with robust dApp integration, NFT management, and staking features. Supports CIP-30, hardware wallets, and detailed transaction histories for secure multi-asset support.\
  <https://eternl.io/>

### Analytics and Community Tools

Enhance projects with community engagement or blockchain debugging capabilities.

* Vibrant\
  A Discord bot and blockchain service for community engagement, supporting token-based rewards and role management. Offers APIs for custom integrations in social projects.\
  What You Can Build: Community reward systems, blockchain-integrated Discord bots, engagement platforms.\
  <https://www.vibrantnet.io/>
* Cardanoscan Explorer\
  A block explorer for Cardano, displaying transactions, addresses, stake pools, and token metadata. Use it to verify NFT minting, debug smart contracts, or monitor on-chain activity.\
  What You Can use it for: On-chain exploring of transactions, wallets, assets, pools etc.\
  <https://cardanoscan.io/>

### Core Infrastructure (Optional for Advanced Projects)

These tools require setup but offer direct blockchain interaction for advanced or custom solutions.

* Cardano Node\
  Core software for running a Cardano node, enabling direct blockchain interaction. Ideal for advanced users building custom infrastructure, though not required for hackathon projects.\
  What You Can Build: Custom validators, network monitoring tools, full node services.\
  <https://github.com/input-output-hk/cardano-node>
* Cardano Wallet\
  A backend service for wallet and transaction management with APIs for custom integration. Suits dApps needing advanced wallet functionality or multi-user management.\
  What You Can Build: Custom wallet interfaces, multi-user transaction managers.\
  <https://github.com/input-output-hk/cardano-wallet>
* Ogmios\
  A lightweight WebSocket API for Cardano node interaction, providing real-time data access and chain synchronization. Simplifies building dApps with live blockchain updates.\
  What You Can Build: Real-time data feeds, lightweight dApp backends, chain monitors.\
  <https://ogmios.dev/>

### Core Documentation

Master Cardano’s fundamentals for optimized project development.

* Cardano Official Docs\
  Comprehensive guides on Cardano’s architecture, UTxO model, stake delegation, and development workflows. Includes tutorials on transactions, smart contracts, and dApps.\
  <https://docs.cardano.org/>
* EUTXO Handbook\
  A PDF guide to Cardano’s Extended UTxO model, detailing transaction structures, fee calculations, and smart contract mechanics. Crucial for efficient transaction or contract design.\
  <https://ucarecdn.com/3da33f2f-73ac-4c9b-844b-f215dcce0628/EUTXOhandbook_for_EC.pdf>
* Cardano Improvement Proposals (CIPs)\
  Community-driven proposals for Cardano protocol enhancements, covering standards like CIP-30 (wallets) and CIP-25 (NFTs). Align projects with Cardano’s roadmap or propose new features.\
  <https://cips.cardano.org/>

***

### Masumi and Kodosumi Resources

These tools from Masumi Network enhance AI-Agentic development and transacting on Cardano.

* Masumi Network\
  Masumi is a groundbreaking blockchain protocol built on Cardano, designed to enable the AI Agent Economy. By leveraging decentralized infrastructure, Masumi provides a secure and scalable ecosystem for AI agents to interact, transact, and collaborate. This protocol focuses on four key pillars to empower developers and enterprises to integrate AI into real-world applications:
* * Transactions: A robust payment infrastructure for AI agents to handle microtransactions and complex payment flows.
  * Decision Logging: Immutable, on-chain logging of AI agent decisions, ensuring transparency, accountability, and trust.
  * Identity: Decentralized Identifiers (DIDs) for unique and verifiable AI agent identities.
  * Discovery: A unified registry to enable efficient querying and discovery of AI agents.

\
What You Can Build: Build Ai Agentic Services and deploy them on the Masumi network to monetize them and enable them to collaborate with other Agents.\
<https://docs.masumi.network/>  <https://github.com/masumi-network>

* Kodosumi\
  kodosumi is the runtime environment to manage and execute agentic services at scale. The system is based on Ray - a distributed computing framework - and a combination of litestar and fastapi to deliver agentic services to users or other agents. Similar to Ray, kodosumi follows a Python first agenda.

kodosumi is one component of a larger eco system with masumi and sokosumi.\
\
<https://docs.kodosumi.io/>  <https://github.com/masumi-network/kodosumi>

***

### Midnight Network Resources

Midnight Network is a privacy-focused blockchain compatible with Cardano, offering tools for secure dApp development.

* Midnight Network\
  A Cardano sidechain focused on privacy-preserving smart contracts using zero-knowledge proofs (ZKPs). Includes SDKs for private dApps, APIs for secure data access, and documentation for Cardano ecosystem integration. Ideal for confidential financial or identity-based dApps.\
  What You Can Build: Privacy-preserving DeFi apps, confidential voting systems, secure identity management dApps, private NFT marketplaces.\
  <https://docs.midnight.network/>
* Midnight Testnet (Devnet Access)\
  Midnight’s testnet (launched in 2024) provides a sandbox for testing privacy-focused dApps. Developers can experiment with Compact, Midnight’s TypeScript-compatible smart contract language, and ZK-SNARKs for private transactions. Access requires signing up as a “Midnight Pioneer” for early testing opportunities.\
  What You Can Build: Experimental dApps for private financial transactions, identity management, or regulatory-compliant tokenization.\
  Access: Register at[ https://midnight.network/developers](https://midnight.network/developers)

<br>

### Other Related tools and services

&#x20;[Cexplorer](https://cexplorer.io/): Cardano Blockchain Explorers

[Cardano Token Registry](https://developers.cardano.org/docs/native-tokens/cardano-token-registry): How to register off-chain token metadata to map to on-chain identifiers

[Cardano light Wallet payment via JQuery](https://github.com/crypto2099/CardanoCoffee?s=09): Light Wallet DApp integration

[AdaStat](https://adastat.net/) and [Cexplorer](https://cexplorer.io/usage): On-Chain Metrics

[LookerStudio](https://lookerstudio.google.com/u/0/reporting/3136c55b-635e-4f46-8e4b-b8ab54f2d460/page/k5r9B): On-chain metrics (limited)

[Messari](https://messari.io/project/cardano): Also has some on-chain metrics, but is mostly based on subscription service

### News and Documentation

[Cardano Documentation](https://docs.cardano.org/): The official resource for documentation on Cardano ecosystem

[Cardano Feed](https://cardanofeed.com/): Cardano news aggregator

[Blog | Cardano Foundation](https://cardanofoundation.org/blog) and [Newsroom | Latest News & Announcements](https://cardanofoundation.org/newsroom): Cardano Foundation blog and newsroom from the official Cardano Foundation

[Cardano.org Forum](https://forum.cardano.org/c/english/announcements/13): The Cardano Forum

[Cardano Newsletter](https://www.cardanonewsletter.com/): Newsletter

<https://cutedumborcs.substack.com/> Cardano educational Newsletter&#x20;

[Cardano Improvement Proposals](https://cips.cardano.org/)**:** A repository to facilitate browsing and information sharing for non-Github users

[Dapp Central](https://www.dappcentral.net): The ultimate destination for Cardano content on YouTube and stake pool operation

[Inetrsect News](https://intersectmbo.org/news): governance processes and structure that enable the Cardano community to continue to advance the protocol together.


# About NMKR

Our Mission: We build to enable!

## 2023: NMKR's Year in Review

{% embed url="<https://www.youtube.com/watch?v=ahSgmhwdwwQ>" %}

### Mission Statement

At the core of our mission is the empowerment of your NFT or Tokenization venture through our cutting-edge solution – the ultimate toolkit for seamlessly creating and managing digital assets. Our aim is clear: to provide user-friendly tools that pave the way for unparalleled success in your NFT or Real-World-Asset Tokenization endeavours. We are driven by a dedicated mission to assist artists, brands, and developers in harnessing the transformative benefits of blockchain and NFT technology through our innovative tools.

Beginning with our API as the bedrock of our technical foundation, we continuously advance, crafting intuitive tools and services. Our commitment is to simplify the process, making it as effortless as possible for you to bring blockchain products to life.

While our company is headquartered in Europe, our  team operates 100% remotely, spanning the globe. Our focus is on creating an efficient and innovative work environment, transcending geographical boundaries to cultivate collaboration and dedication.

### Our Journey

It all began with the release of NFT-MAKER V1, in April 2021—a basic minting tool designed for single assets. Within a year, we rapidly evolved into a robust toolkit with NFT-MAKER PRO, tailored for non-developers keen on building within the Cardano ecosystem.

In the year 2022, we undertook a significant rebranding journey, transitioning from NFT-MAKER to NMKR. This transformation coincided with our expanded objectives and the diversification of our product portfolio, reaching beyond the NFT landscape. During this transformative phase, we also introduced the [NMKR token](https://nmkr.io/token), marking a pivotal milestone in our journey.

Today, fueled by impactful partnerships with industry leaders such as the Cardano Foundation, IOHK, Emurgo, UNHCR, IAMX, FluidTokens, Wolfram, Empowa, and numerous others, we are taking a significant stride forward. Our focus intensifies as we elevate our commitment to advancing the tokenization of real-world assets. We firmly believe that this initiative will serve as a game-changer, propelling NFT technology and accelerating widespread blockchain adoption.

### Links

NMKR: [nmkr.io](https://www.nmkr.io/)\
NMKR Studio: [studio.nmkr.io](https://studio.nmkr.io)\
NMKR Mint (For single mints /smaller collections): [mint.nmkr.io](https://mint.nmkr.io)

Support: [nmkr.io/support](https://nmkr.io/support)\
Our NMKR Newsletter Sign-Up: [nmkr.io/newsletter](https://nmkr.io/newsletter)\
Our Token landing page: [nmkr.io/token](https://nmkr.io/token)\
Our Whitepaper: [nmkr.io/whitepaper](https://nmkr.io/whitepaper)

\
X / Twitter: [twitter.com/nmkr\_io](https://twitter.com/nmkr_io)\
LinkedIn: [linkedin.com/company/nmkrio](https://www.linkedin.com/company/nmkrio) \
YouTube: [youtube.com/c/NMKR\_IO](https://www.youtube.com/c/NMKR_IO)\
Instagram : [instagram.com/nmkr\_io](https://www.instagram.com/nmkr_io)\
Facebook: [facebook.com/nmkrio](https://www.facebook.com/nmkrio)\
Telegram: [t.me/nmkrtoken](https://t.me/nmkrtoken)<br>


# Powered by NMKR

Thousands of revenue-generating projects launched their assets with NMKR Studio.

In this article, we're shining a spotlight on several projects launched powered by the NMKR Infrastructure. These projects have caught our attention due to their innovative approach and meaningful impact. Let's take a closer look at how these initiatives are making a difference.

## Projects powered by NMKR technology

### Book.io

The next chapter in the story of books – a Web3 marketplace for buying, reading, and selling eBooks and Audiobooks as fully Decentralized Encrypted Assets (DEAs).

{% embed url="<https://book.io/>" %}

### Nucast

Nucast is a blockchain-based video-streaming platform that introduces true digital content ownership and allows Creators to maintain better control over their content.

{% embed url="<https://www.nucast.io/>" %}

### Ore Ore Ore

OREMOB by Berlin artist ORE ORE ORE is the expansion of his successful Web3 anime project he started in 2021. A community focused on exciting narrative in a world of distinctive visual identities and strong pop-culture references as artform.

{% embed url="<https://oremob.io/>" %}

### smart places

SmartPlaces is a social ecosystem based on geolocation that rewards users for connecting and interacting. Connect with people, ideas, events, and businesses worldwide - all on a hyper local level.

{% embed url="<https://www.smart-places.io/>" %}

### Metera

Fundraising through token presale NFTs for Metera, a decentralized way to create and invest in tokenized portfolios.

{% embed url="<https://www.metera.io/>" %}

## Collaboration projects&#x20;

There are also multiple projects where we are directly involved in as technical partners or even as co-founders.

### Tiamonds

NMKR & Tiamonds teamed up to bring you the first-ever tokenized diamonds to Cardano.\
By purchasing a Tokenized Diamond, you get the right to a real diamond.

{% embed url="<https://www.nmkr.io/drops/tiamonds-2023>" %}

### finest

A tokenization launchpad powered by NMKR, [FluidTokens](https://fluidtokens.com/), and [IAMX](https://iamx.id/). It will simplify and democratize the tokenization process for real-world assets on the blockchain.

{% embed url="<https://www.finest.investments/>" %}

### ADAmail

ADAmail is a unique tool developed by IAMX and NMKR that combines traditional email with Web3 utilities. It allows users to send emails to every Cardano Wallet and log into their email account by connecting their wallet.

{% embed url="<https://www.adamail.me/>" %}

### El Paso Verse (still in development)

Together with Ryan Wiik from the El Paso Verse, NMKR will reshape the way IP is created and consumed. This porject includes tokenisation of real world properties, an IP (intellectual property) funnel of short-form motion picture projects, ebooks and more.

{% embed url="<https://elpasoverse.io/>" %}

## More Projects launched in the past with or by NMKR

### Ticketing for Community Led Events Cardano Summit 2023

Together with nucast we provided the ticketing solution based on NFT technology for the community led events in 27 countries around the world.

<https://summit.cardano.org/community-led-events/>

### Official Empowa Cardano Summit 2023 NFTs

A limited edition NFT collection in collaboration with Empowa to celebrate the impact Cardano empowers in the real world. Enabling financial excluded families to own a home!

<https://empowa.io/summit/>

### Budja.io

Budja.io is the first launchpad offering fractional art NFTs on the Cardano blockchain.

<https://www.budja.io/>

### Hokusai Universe

Hokusai Universe is the ultimate tool to connect Web3 with digital art, music, exhibits and performances inspired by authentic Japanese culture and master Katsushika Hokusai.

<https://www.hokusaiuniverse.com/>

### UNHCR

Rasing money for charity with NFTs By selling hundreds of NFTs on the Cardano Blockchain, the UN Refugee Agency was able to access capital in a innovative and unique way that allows for full transparency over where the going to.

<https://www.nmkr.io/clients/unhcr>

### Rare Evo 2023 POAP

Mint memories as digital mementos with POAPs (Proof of Attendance NFTs) for Rare Evo 2023.

<https://rareevo.io/index.php?route=common/home>

### Rare Evo 2024 Tickets

Ticketing for the 2024 Rare Evo Event

<https://rareevo.io/buy-tickets>

## Approved Catalyst Proposals building on NMKR

For Fund 10 of Cardano's Catalyst, we were happy to offer "Building on NMKR" as category.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr?status=approved>" %}

### NMKR Unity SDK

A Unity package that is a wrapper of the NMKR API in order to create more integrated minting experiences.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr/nmkr-unity-sdk>" %}

### Smart Places: Real-World Utility for Businesses with Location-Based NFT Incentives

An intuitive platform for businesses to effectively attract customers by utilizing location-based incentivized NFTs, enhancing engagement and foot traffic to their establishments.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr/smart-places-real-world-utility-for-businesses-with-location-based-nft-incentives>" %}

### NEWM x Nucast - Music Video Festival

A Music Video Fest 2023 as an annual recurring event to capture the love and attention of audiences.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr/newm-x-nucast-music-video-festival-annual-recurring-event>" %}

### IoT NMKR integration

An opensource integration of NMKR's APIs with ESP32, enabling direct NFT minting from embedded devices. The repository empowers embedded engineers and Arduino users to experiment on Cardano.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr/iot-nmkr-integration-open-source>" %}

### Clarity <> NMKR: Governance Token Creation Integration

An integration of NMKR APIs, to offer a seamless and user-friendly solution for DAO creators to generate governance tokens with appropriate properties, ensuring smooth interaction with Clarity.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr/clarity-lessgreater-nmkr-governance-token-creation-integration>" %}

### NEWM x Sick City - The Record Store Music Collectibles 2.0

An update of the UX/UI of recordstore.newm.io and adding an Artist Success Service to guide artists through launching their music, and the benefits of utilizing Web3 for music distribution.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr/newm-x-sick-city-the-record-store-music-collectibles-20>" %}

### Catalyst Completed Project NFTs

Completed Projects mint custom "Project Completion'' NFTs via NMKR API & LidoNation Catalyst Explorer. Minting a completion NFT is a celebration, a ceremony, a shareable trackable community artifact.

{% embed url="<https://projectcatalyst.io/funds/10/f10-building-on-nmkr/catalyst-completed-project-nfts>" %}


# What is an NFT?

Learn the basics about NFTs and how they work

## What is an NFT?

A non-fungible token (NFT) is a unique and non-interchangeable unit of data stored on a digital ledger. NFTs can be used to represent easily-reproducible items such as photos, videos, audio, and other types of digital files as unique items, and use blockchain technology to establish a verified and public proof of ownership.

### What is a blockchain?

The most famous blockchain is that of Bitcoin, which had the critical innovation of allowing a Trustless group to verify transactions without the need of a central authority. Blockchains are a specialised form of distributed database, commonly used to store information such as a transaction ledger. Most Cryto-related blockchains are designed to be highly secure, decentralised and immutable, which essentially means that the information in the blockchain is distributed across many actors who must all reach a consensus for a new block to be formed. Once the information is added to the blockchain, it can never be edited or deleted.

### What is [metadata](https://docs.nmkr.io/nmkr-studio/token/metadata) on an NFT?

Metadata is data that provides information about other data; in the case of an NFT, it describes that NFT's essential properties, including its name, description, and anything else its creator feels is important. In many cases, an NFT's metadata also contains links to the images and other "primary" digital assets that give an NFT its value.

## How are NFTs stored on the blockchain?

The process of initially storing the NFT onto the blockchain is known as Minting. Minting an NFT requires a fully operational Cardano Node (a server connected to the blockchain) and various other technical requirements. NMKR Studio allows anyone to use our specially designed infrastructure, to Mint NFTs using an intuitive user interface.

One of the many unique differences between Cardano and all other blockchains is the ability to create, interact and destroy custom tokens in a native way. This means besides sending and receiving the official currency ADA, you can also interact with custom assets (NFTs) without the need for smart contracts.

In addition, all information regarding the NFT is stored in the Native Token Minting Transaction Metadata. With this, [Cardano wallets like Nami, Daedalus and Yoroi ](https://docs.nmkr.io/helpful-links/cardano-wallets)can pull the metadata from the native assets to display the NFT in the intended form.

### Where are the images stored

The most common way to store the files for NFTs is to upload and pin them to [IPFS](https://docs.nmkr.io/introduction/what-is-ipfs).\
These files are then linked in the metadata to the specific NFT via unique IPFS hashes.\
If you want to learn more about this topic, please read "[What is IPFS?](https://docs.nmkr.io/introduction/what-is-ipfs)".

Besides the off-chain storing of files with IPFS, you can actually also have fully immutable on-chain NFTs with Base64 images. These images are most commonly used to embed image data in other formats such as HTML, CSS, or JSON. The browser does not need to make an additional web request to fetch the file when image data is included within an HTML document because the image is already embedded in the HTML document.<br>

### Non-Fungible Tokens and Fungible Tokens in NMKR Studio

NMKR Studio allows you to create NFTS as well as FTs, to learn more about that, please read the [Token documentation of NMKR Studio](https://docs.nmkr.io/nmkr-studio/token).


# What is IPFS?

What is IPFS and why do we use it for NFTs

InterPlanetary File System (IPFS) is a peer-to-peer protocol for storing and sharing data in a distributed file system. Currently, IPFS is the primary protocol for storing digital media, which many NFTs represent. In short, the NFT is on the blockchain and points to IPFS media files in it's metadata.

### Why IPFS?

Minting Tokens as [Fully-On-Chain NFTs ](https://docs.nmkr.io/nmkr-studio/token/metadata/fully-on-chain-nfts)can be very complicated and is also limited by the maximum [metadata](https://docs.nmkr.io/nmkr-studio/project/metadata-template) size of currently 16kb of a transaction. This is why the most common way to add media files to your tokens is to store them externally and link them in the metadata of the token. As IPFS stores the files in a distribution system and it has no file size limitation, it is the most practical solution to achieve that.&#x20;

### How does it work

Every file that is added to IPFS is assigned a unique address based on a hash of the file's content. This address is referred to as a Content Identifier (CID), and it combines the file's hash and a unique identifier for the hash algorithm used into a single string.\
\
As a result, if you upload the same exact file again, it will always receive the same IPFS hash / CID. This means that even if the third party you used to upload your tokens no longer supports your files and "deletes" them, you can reupload the files on your own and the NFT will now correctly fetch the media files.

{% hint style="info" %}
At NMKR Studio, we are uploading and pinning the media files with our own bare metal servers.\
\
If you decide to upload the media files on your own to IPFS, you can also [use the hashes and insert them to your metadata](https://docs.nmkr.io/nmkr-studio/token/edit#add-externally-uploaded-files-via-ipfs-hash)[.](https://docs.nmkr.io/nmkr-studio/token/edit#add-externally-uploaded-files-via-ipfs-hash)
{% endhint %}

### The CID in the Metadata of an NFT

As an example we want to show you how the IPFS will be used with your metadata.A CID / IPFS hash of an uploaded file will look something like the following string.

```
QmQ878cbFuPj9GWij1KXowcQP6RY1kHQm3Y6dkAe4VPaRz
```

The metadata of your token now contains a field that links this hash to your NFT, makes it viewable on explorers, in wallets and DApps.

```
"src": "ipfs://QmSz8jA6LfU6NSSaobybvzsobbuaQwVBZ8CCBe2hmpfFDg",
```

As IPFS does not make any differentiation of the file formats, your metadata also contains a field that identifies the media file in the correct format.

```
"mediaType": "image/jpeg",
```


# Why Cardano?

Learn why we chose Cardano for our infrastructure

For a short but concise overview why you should build on Cardano, please check out the "7 reasons you should build on Cardano" landing page.

{% embed url="<https://www.nmkr.io/builds-on/cardano>" %}
Build on Cardano!
{% endembed %}

## What is Cardano?

Cardano is a public blockchain platform. It is open-source and decentralised, with consensus achieved using proof of stake. It can facilitate peer-to-peer transactions with its internal cryptocurrency, Ada. Cardano was founded in 2015 by Ethereum co-founder Charles Hoskinson.

Cardano is also the first to be founded on peer-reviewed research and developed through evidence-based methods. It combines pioneering technologies to provide unparalleled security and sustainability to decentralised applications, systems, and societies.

## What is unique about Cardano NFTs?

We will explain how NFTs are native assets on the Cardano blockchain and can be stored, sent, and received in the same way as ADA or any other token. \
\
How are NFTs stored on the blockchain?

The process of initially storing the NFT onto the blockchain is known as Minting. Minting an NFT requires a fully operational Cardano Node (a server connected to the blockchain) and various other technical requirements. NMKR Studio allows anyone to use our specially designed infrastructure, to Mint NFTs using an intuitive user interface.

One of the many unique differences between Cardano and all other blockchains is the ability to create, interact and destroy custom tokens in a native way. This means besides sending and receiving the official currency ADA, you can also interact with custom assets (NFTs) without the need for smart contracts.

In addition, all information regarding the NFT is stored in the Native Token Minting Transaction Metadata. With this, Cardano wallets like Nami, Daedalus and Yoroi can pull the metadata from the native assets to display the NFT in the intended form.

### Once minted, can I edit the NFT?

Yes, as long as the policy in not locked, the minted NFTs can be edited.

### What wallets support storing NFTs on Cardano?

NFTs are native assets on the Cardano blockchain, and therefore can be stored, sent, and received in the same way as ADA. The wallets that support NFT storage on Cardano are CC Wallet, Daedalus, Nami, and Yoroi.

### How do I view the NFTs in my Wallet?

There are two methods to viewing your NFTs in your wallet.&#x20;

Firstly, you can use Cardano wallets such as Nami, GeroWallet or CardWallet that allow you to see NFTs directly in your wallet.

Moreover, you have the option to utilize online tools such as Pool.pm, which showcase NFTs present in your wallet. Simply input your wallet address and the asset ID of the NFT into the search bar. The tool will then display your NFTs. It also allows you to search for policy IDs, to view entire collections.

### What type of things can I mint as NFTs?

You have the flexibility to mint a wide variety of NFTs limited only by your imagination. Whether it's an asset associated with a physical item, utility tokens for token-gated access such as tickets, or any other creative concept, the metadata structure offers versatility. This makes it straightforward to incorporate specific identifiers or other customized fields and values.

As for supported file types, the platform accommodates typical formats like images, videos, and audio. Additionally, it extends support to application files such as HTML, 3D files, and PDFs, providing a comprehensive range for your NFT creations.

### How do I transfer my NFT to another wallet/person?

You can send your NFT from your wallet directly to another person's wallet or another wallet that you own.

All you need to do is have an address to send it to that starts with the prefix "*addr1..*" which means that the receiver wallet is a Shelley era wallet and NOT on an exchange.&#x20;

The next step is to ensure that you have enough ADA to cover the cost of sending the NFT. Simply enter the correct address and  amount displayed in the wallet, verify with your spend password, and that's it!

### Why can't I buy and store NFTs in my exchange wallet?

Currently, most of the crypto exchanges do not support Cardano Native Tokens. Using an exchange wallet will mean you will lose your NFTs, as you will likely never be able to access them.

To buy and store NFTs, you need to use a wallets like Eternl, Daedalus, Nami and CCWallet that support Cardano Native Tokens. Creating your own wallet is a very easy process and is a critical part of taking ownership of your crypto-assets.\
\
[Please check out this list of wallets that are also supported in NMKR Pay!](https://docs.nmkr.io/helpful-links/cardano-wallets)


# NMKR Studio is open-source

NMKR Studio, our comprehensive NFT management platform for the Cardano blockchain, is now fully open source under the MIT License.

## NMKR Studio is Now Open Source

### What This Means

NMKR Studio's complete codebase is now available to the community, including our full-stack web application built with .NET 8.0, C#, and Blazor. This includes all core components: the main UI, REST API, background processing services, Cardano CLI integration, shared libraries, and complete database schema.

### Why We Went Open Source

Our decision to open source NMKR Studio reflects our commitment to the Cardano ecosystem and open development principles:

* **Foster Innovation**: Enable developers to build upon and extend our platform
* **Build Trust**: Provide complete transparency through public code review
* **Strengthen Security**: Allow community security audits and vulnerability reporting
* **Enable Self-Hosting**: Give developers full control over their NFT infrastructure
* **Support Education**: Serve as a reference implementation for NFT platforms
* **Grow Community**: Encourage collaboration and contributions from Cardano developers

NMKR Studio's open source release fulfills our commitment to transparent development and marks an important milestone in our journey to empower the Cardano NFT ecosystem

### Get Started

Ready to explore, contribute, or deploy your own instance? Our codebase includes comprehensive documentation, configuration templates, and deployment guides to get you started quickly.

**Repository:** [github.com/nmkr-studio/nmkr-studio](https://github.com/nmkr-studio/nmkr-studio)\
**License:** MIT License\
**Documentation:** Complete setup and contribution guides included

### What's Included

* **Full Application Stack**: Complete .NET 8.0 web application with Blazor UI
* **REST API**: Comprehensive API with v1 and v2 endpoints
* **Background Services**: Blockchain processing and transaction monitoring
* **Database Schema**: Complete MySQL database structure
* **Configuration Templates**: Ready-to-use configuration examples
* **Documentation**: Detailed setup, deployment, and contribution guides

### Security & Privacy First

We've taken extensive security measures in our open source release, conducting comprehensive audits to ensure no sensitive data, credentials, or production infrastructure details are exposed. The codebase includes all security frameworks while requiring you to provide your own credentials and configuration.

### Join the Community

Whether you're looking to contribute code, report bugs, suggest features, or simply explore how a modern NFT platform works, we welcome you to join our growing open source community. Check out our contribution guidelines and help us build the future of NFT infrastructure on Cardano.

## NMKR Studio Open-Source Process Documentation

**Date:** October 9, 2025\
**Version:** 1.0\
**Status:** Initial Open-Source Release\
**Contact:** <phil@nmkr.io>

***

### Overview

This document provides complete transparency about the open-sourcing process for NMKR Studio, including security measures, included components, exclusions, and deployment requirements. The project was open-sourced to enable community contribution, demonstrate transparency in the Cardano ecosystem, and fulfill Catalyst Project 1000091 Milestone 5 requirements.

***

### Purpose and Motivation

#### Primary Goals

* **Community Contribution:** Enable developer contributions and feature improvements
* **Transparency:** Demonstrate commitment to open development in Cardano ecosystem
* **Education:** Provide reference implementation for NFT management platforms
* **Collaboration:** Foster innovation through community-driven development
* **Trust Building:** Allow security audits and public code review
* **Catalyst Compliance:** Fulfill Project 1000091 Milestone 5 requirements

#### Pre-Release Preparation Process

1. Comprehensive security audit of all 940+ files
2. Complete credential removal and sanitization
3. Git history cleanup with repository reinitialization
4. Comprehensive documentation creation
5. Open-source license research and selection

***

### Open-Source Release Scope

#### Core Application Components Included

**NMKR.Pro (Main Application)**

* Complete Blazor-based user interface
* All UI components, pages, and layouts
* Client-side logic and state management
* Blazor component architecture

**NMKR.Api (REST API)**

* Full REST API implementation (v1 and v2)
* All controller logic and business rules
* API validation and authentication framework
* Rate limiting configuration structure

**NMKR.BackgroundService (Processing Engine)**

* Complete background processing service
* Hosted services for blockchain operations
* Minting and burning workflow implementations
* Transaction monitoring services
* Address checking and validation logic

**NMKR.CardanoCliApi (Blockchain Interface)**

* Cardano CLI wrapper and integration layer
* Transaction building utilities
* Complete blockchain interaction logic

#### Shared Libraries Included

**NMKR.Shared (Core Functionality)**

* Complete database models and Entity Framework context
* Shared business logic across all services
* Utility functions and helper classes
* Blockchain-specific functions (Cardano, Solana, Aptos)
* Configuration class structures and templates

**NMKR.RazorSharedClassLibrary (UI Components)**

* Reusable Blazor UI components
* Modal windows and dialog systems
* Form components and validation helpers
* Shared helper components

**NMKR.SimpleExec (Command Execution)**

* Process execution utilities
* Simple-Exec library integration wrapper

#### Database and Configuration

**Complete Database Schema**

* Full MySQL database structure (`defaultdb.sql`)
* All table definitions, relationships, and indexes
* Views and stored procedures
* **Note:** Schema only - no actual production data

**Configuration Templates**

Complete configuration file templates for all services:

* `settings.yaml` (production template)
* `settings.preprod.yaml` (pre-production template)
* `appsettings.json` (ASP.NET Core settings)
* `appsettings.Development.json` (development settings)

**Important:** All templates contain empty values - no actual credentials included

***

### Excluded Components and Information

#### Credentials and Secrets Removed

**Database Credentials**

* MySQL connection strings and passwords
* PostgreSQL connection strings (DbSync integration)
* Database server hostnames and ports
* User credentials for all database systems

**External Service Credentials**

* **Blockfrost API:** Mainnet and testnet API keys
* **Koios API:** Access credentials and endpoints
* **Maestro API:** Cardano and Bitcoin API keys
* **Iagon Storage:** API keys and access tokens
* **Helios RPC:** API keys and connection details
* **AWS Services:** SES email service credentials
* **Redis:** Server addresses, ports, and passwords
* **RabbitMQ:** Connection strings and authentication
* **Solana RPC:** API endpoints with credentials
* **Aptos API:** Access credentials and endpoints

**Third-Party Service Keys**

* **Google reCAPTCHA:** Site keys and secret keys
* **MessageBird:** SMS service access keys
* **Yota SDK:** SDK identifiers and keys
* **Mailerlite:** API keys and group identifiers
* **Rebex:** Software license keys

**Security and Encryption Keys**

* RSA private keys (replaced with `YOUR_RSA_PRIVATE_KEY_HERE`)
* Master encryption passwords
* Two-factor authentication secrets
* JWT signing keys and certificates

#### Infrastructure Details Excluded

**Production Infrastructure**

* DigitalOcean and AWS server hostnames
* Internal IP addresses and network configurations
* SFTP server credentials and endpoints
* Production deployment configurations
* Monitoring and telemetry endpoints

**Business and User Data**

* Customer information (none in codebase)
* User transaction histories (none in codebase)
* API usage statistics and analytics
* Production metrics and configurations

#### Exclusion Rationale

**Security Protection:** Prevents compromise of live NMKR Studio platform **Privacy Compliance:** Maintains customer and business data confidentiality\
**Operational Integrity:** Prevents attacks on production infrastructure **Legal Compliance:** Respects third-party service terms of service

***

### Security Audit and Measures

#### Comprehensive Security Audit Process

**Automated Security Scanning**

* Scanned 940+ files for sensitive data
* Pattern matching for multiple credential formats:
  * API keys (various patterns and formats)
  * Passwords and secret strings
  * Database connection strings
  * Private keys and certificates
  * AWS access keys and tokens

**Manual Security Review**

* Critical files manually reviewed for context-specific issues
* Code comments checked for sensitive information
* Configuration files individually sanitized
* Documentation reviewed for inadvertent disclosures

#### Credential Sanitization Process

**Configuration File Sanitization**

* **YAML files:** All credential values set to empty strings
* **JSON files:** All secret values removed or templated
* **Source code:** Hardcoded credentials replaced with configuration references
* **Comments:** Sensitive information in comments removed

**Git History Protection**

* Complete removal of `.git` directory
* Fresh `git init` to eliminate historical commits
* Zero commits containing sensitive data in new repository

#### Security Framework Preservation

**Authentication and Authorization**

The codebase includes complete security frameworks:

* API key validation system (`ApiKeyValidator.cs`)
* Rate limiting configuration and implementation
* IP-based access restriction mechanisms
* Role-based authorization systems

**Encryption Infrastructure**

Encryption functionality preserved with configuration requirements:

* Master password encryption framework
* Policy key encryption/decryption systems
* Secure data handling utilities

***

### Deployment Requirements

#### Required Infrastructure Services

**Core Database Systems**

1. **MySQL Server:** Main application database
2. **PostgreSQL Server:** Cardano DbSync integration
3. **Redis Server:** Caching and session management
4. **RabbitMQ:** Message queuing and background processing

**Blockchain Infrastructure**

1. **Cardano Node:** Direct blockchain interaction
2. **IPFS Node:** Metadata and asset storage
3. **Cardano DbSync:** Blockchain data synchronization (optional but recommended)

#### Required External Service Accounts

**Blockchain APIs**

1. **Blockfrost:** Primary Cardano blockchain API service
2. **Koios:** Alternative Cardano blockchain API
3. **Maestro:** Cardano infrastructure and analytics API

**Supporting Services**

1. **AWS SES:** Email notification delivery
2. **Google reCAPTCHA:** Bot protection and security
3. **MessageBird:** SMS notifications (optional)

#### Configuration Implementation

**Service Configuration Files**

Each service requires populated `settings.yaml`:

yaml

```yaml
# Database Configuration
ConnectionString: <your-mysql-connection-string>
PostgresConnectionString: <your-postgres-connection-string>

# Redis Configuration
Redis:
  Server: <your-redis-server>
  Password: <your-redis-password>

# Blockchain API Keys
BlockfrostApikey: <your-blockfrost-key>
KoiosApiKey: <your-koios-key>
MaestroApiKey: <your-maestro-key>

# Security Keys
MasterPassword: <your-master-encryption-password>
RsaPrivateKey: <your-rsa-private-key>
```

**Environment-Specific Configuration**

* Development: `settings.yaml` with local services
* Pre-production: `settings.preprod.yaml` with staging services
* Production: `settings.yaml` with production credentials

See project `README.md` for complete configuration instructions.

***

### Contribution Guidelines

#### Accepted Contributions

**Code Improvements**

* Bug fixes and stability improvements
* Feature enhancements and new capabilities
* Performance optimizations
* Code quality improvements
* Test coverage expansion

**Documentation**

* Documentation improvements and clarifications
* Example implementations and tutorials
* Configuration guides and best practices

**Security**

* Security vulnerability reports (via responsible disclosure)
* Security enhancement suggestions
* Audit findings and recommendations

#### Unacceptable Contributions

**Security Violations**

* Commits containing any credentials or secrets
* Hardcoded sensitive information
* Configurations with actual production data

**Code Quality Issues**

* Unreviewed third-party dependencies
* Changes that compromise security frameworks
* Undocumented breaking changes
* Code without appropriate documentation

#### Security Vulnerability Reporting

**Responsible Disclosure Process**

1. **Never open public issues** for security vulnerabilities
2. **Contact privately** via email: <phil@nmkr.io>
3. **Provide detailed information:**
   * Vulnerability description
   * Steps to reproduce
   * Potential impact assessment
   * Suggested remediation (if known)

**Response Timeline**

* Initial acknowledgment within 48 hours
* Assessment and response within 7 days
* Public disclosure coordination after fix implementation

***

### Security Best Practices for Contributors

#### Development Security Guidelines

**Credential Management**

1. **Never commit credentials** to version control
2. **Use environment variables** for all sensitive configuration
3. **Copy configuration templates** and populate locally
4. **Add local config files to .gitignore**

**API Key Management**

1. **Generate your own API keys** for external services
2. **Use separate keys** for development and testing
3. **Rotate keys regularly** in production environments
4. **Monitor API key usage** for unauthorized access

**Local Development Security**

1. **Use secure local configuration management**
2. **Keep development databases isolated**
3. **Use HTTPS for all external API calls**
4. **Implement proper error handling** without exposing sensitive data

***

### Legal and Licensing Information

#### Open-Source License

Complete license terms available in `LICENSE.md` file in repository root.

#### Third-Party Dependencies

NMKR Studio incorporates various open-source libraries and dependencies:

* Each dependency retains its original license
* License information available in individual `.csproj` files
* Some dependencies may require separate license compliance
* See `NOTICE.md` for complete third-party attribution

#### Intellectual Property

* NMKR Studio codebase licensed under MIT License
* Third-party integrations subject to their respective terms
* Contributors grant license rights as specified in license terms

***

### Open-Source Timeline and Process

#### Implementation Timeline

* **October 2, 2025:** Security audit and sanitization initiated
* **October 2-9, 2025:** Comprehensive credential removal process
* **October 2-9, 2025:** Git history cleanup and repository reinitialization
* **October 5-9, 2025:** Documentation creation and review
* **October 9, 2025:** Final repository preparation completed
* **October 9, 2025:** Open-source release ready for publication

#### Quality Assurance Process

1. **Multi-stage security review** with automated and manual processes
2. **Documentation completeness verification**
3. **Configuration template validation**
4. **Legal compliance review**
5. **Final security audit confirmation**

***

### Support and Contact Information

#### Project Maintainers

* **Primary Contact:** <phil@nmkr.io>
* **Development Team:** NMKR Studio Team
* **Community:** GitHub Issues and Discussions

#### Support Channels

* **Technical Questions:** GitHub Issues
* **Security Concerns:** Direct email contact
* **General Discussion:** GitHub Discussions
* **Documentation Issues:** GitHub Issues with documentation label

#### Response Expectations

* **General Issues:** Response within 3-5 business days
* **Security Issues:** Response within 48 hours
* **Documentation:** Response within 1 week
* **Community Contributions:** Review within 1-2 weeks

***

**Document Maintainer:** NMKR Studio Team\
**Last Updated:** October 9, 2025<br>

## NMKR Studio Open-Source License Research

**Research Date:** October 9, 2025\
**Final Decision:** MIT License Selected\
**Document Version:** 1.1

***

### Executive Summary

This comprehensive analysis evaluated open-source licensing options for NMKR Studio, a full-stack NFT management platform for the Cardano blockchain. After analyzing six major license types, **MIT License** was selected to prioritize maximum community adoption, developer freedom, and ecosystem growth.

#### Key Recommendations by Use Case

* **Maximum Adoption:** MIT or Apache 2.0
* **Prevent Competition:** AGPL-3.0
* **Balanced Protection:** GPL-3.0 or MPL-2.0
* **Business Protection:** BSL 1.1 (transitioning to open-source)

***

### Project Context

**NMKR Studio Characteristics:**

* Technology stack: .NET 8.0, C#, Blazor
* Components: API services, background workers, UI, shared libraries
* Purpose: NFT minting, management, and marketplace platform
* Target: Cardano developer community with potential commercial applications

**Strategic Goals:**

1. Foster community contribution and innovation
2. Build trust and transparency in the Cardano ecosystem
3. Enable developer self-hosting and customization
4. Maintain flexibility for future commercial licensing
5. Optionally protect against unauthorized commercial exploitation

***

### License Analysis

#### 1. MIT License ⭐ **SELECTED**

**Characteristics:**

* Most permissive major open-source license
* Allows commercial use, modification, distribution, private use
* Only requires license and copyright notice inclusion
* No liability or warranty provisions

**Advantages:**

* Maximum adoption potential
* Universal compatibility with other licenses
* Simple and well-understood
* Business-friendly with minimal restrictions
* Low barrier to contribution

**Disadvantages:**

* No protection against closed-source derivatives
* No patent or trademark protection
* Competitors can create proprietary versions

**Best For:** Projects prioritizing widespread adoption and ecosystem growth over competitive protection

***

#### 2. Apache License 2.0

**Characteristics:**

* Similar permissiveness to MIT
* Explicit patent grant and trademark protection
* Requires documentation of changes
* Industry standard for many major projects

**Advantages:**

* Patent protection for users
* Trademark protection
* Change documentation requirements
* Business-friendly like MIT
* Used by major enterprise projects

**Disadvantages:**

* Slightly more complex than MIT
* No copyleft protection
* Still allows closed-source derivatives

**Best For:** Projects needing MIT-style permissiveness with added patent protection

***

#### 3. GNU General Public License v3.0 (GPL-3.0)

**Characteristics:**

* Strong copyleft license
* All derivatives must remain open-source under GPL-3.0
* Includes patent protection
* Anti-tivoization provisions

**Advantages:**

* Prevents closed-source derivatives
* Strong community protection
* Patent protection included
* Well-established and understood

**Disadvantages:**

* Reduces business adoption
* License compatibility limitations
* More complex requirements
* May limit commercial contributions

**Best For:** Projects wanting to ensure all derivatives remain open-source

***

#### 4. GNU Affero General Public License v3.0 (AGPL-3.0)

**Characteristics:**

* GPL-3.0 with additional network use requirement
* SaaS providers must share source code
* Strongest copyleft protection available
* Closes "SaaS loophole" in GPL

**Advantages:**

* Maximum protection against proprietary SaaS versions
* Prevents competitors from using code in closed platforms
* Ensures even web services remain open
* True copyleft for modern software deployment

**Disadvantages:**

* Most restrictive license option
* Significantly reduces business adoption
* Many companies completely avoid AGPL code
* Complex compliance requirements

**Best For:** Projects wanting to prevent competitors from creating proprietary SaaS versions

***

#### 5. Mozilla Public License 2.0 (MPL-2.0)

**Characteristics:**

* Weak copyleft at file level
* Only modified MPL files must remain open-source
* New files can be proprietary
* Includes patent protection

**Advantages:**

* Middle ground between permissive and copyleft
* More business-friendly than GPL
* Patent protection included
* Allows some proprietary integration

**Disadvantages:**

* More complex than pure permissive licenses
* Less protective than strong copyleft
* File-level copyleft can be confusing
* Less widely understood

**Best For:** Projects wanting moderate protection with business flexibility

***

#### 6. Business Source License (BSL) 1.1

**Characteristics:**

* Time-delayed open-source license
* Initial period with usage restrictions
* Automatic conversion to permissive license after set period
* Not OSI-approved open-source initially

**Advantages:**

* Protects business interests during critical period
* Guarantees eventual full open-source release
* Flexible use grant definitions
* Shows commitment to eventual openness

**Disadvantages:**

* Not true open-source initially
* More complex than standard licenses
* May create community trust issues
* Legal complexity in defining terms

**Best For:** Commercial projects planning eventual open-source release while protecting initial business model

***

### License Comparison Matrix

```
| Feature | MIT | Apache 2.0 | GPL-3.0 | AGPL-3.0 | MPL-2.0 | BSL 1.1 |
|---------|-----|------------|---------|----------|---------|---------|
| **Permissiveness** | Very High | Very High | Low | Very Low | Medium | N/A (Time-bound) |
| **Closed-Source Derivatives** | ✅ Allowed | ✅ Allowed | ❌ Prohibited | ❌ Prohibited | ⚠️ Partial | ❌ Initially |
| **Patent Protection** | ❌ No | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | Varies |
| **Trademark Protection** | ❌ No | ✅ Yes | ❌ No | ❌ No | ✅ Yes | Varies |
| **SaaS Must Share Code** | ❌ No | ❌ No | ❌ No | ✅ Yes | ❌ No | ⚠️ Depends |
| **Business Friendly** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| **Community Friendly** | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| **Adoption Potential** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| **Competitive Protection** | ⭐ | ⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |

```

***

### Final Decision Rationale

**NMKR Studio selected MIT License** based on the following priorities:

#### Primary Reasons

1. **Maximum Adoption:** Encourages widest possible adoption in Cardano ecosystem
2. **Simplicity:** Easiest license for contributors and users to understand
3. **Business-Friendly:** Enables unrestricted commercial use and integration
4. **Community Growth:** Removes barriers to contribution and collaboration
5. **Ecosystem Alignment:** Matches approach of successful blockchain projects
6. **Universal Compatibility:** Compatible with virtually all other licenses
7. **Developer Freedom:** Empowers developers to build upon NMKR Studio freely

#### Accepted Trade-offs

* No patent protection (available in Apache 2.0)
* No prevention of closed-source derivatives (available in GPL/AGPL)
* No competitive protection against proprietary versions

#### Strategic Alignment

The MIT License choice reflects NMKR Studio's commitment to:

* Community growth over competitive protection
* Adoption over restriction
* Simplicity over legal complexity
* Innovation enablement over usage control

***

### Implementation Checklist

#### Completed

* ✅ License selection and strategic analysis
* ✅ Comprehensive license research and documentation

#### Remaining Tasks

* ⏳ Create LICENSE file in repository root with MIT License text
* ⏳ Add license headers to all source files
* ⏳ Create NOTICE file with third-party dependency attributions
* ⏳ Update README.md with license information and MIT badge
* ⏳ Set GitHub repository license metadata
* ⏳ Consider Contributor License Agreement implementation (optional)

***

### Legal Considerations

#### License Headers

All source files should include:

csharp

```csharp
// Copyright (c) 2025 NMKR Studio
// Licensed under the MIT License
// See LICENSE file in the project root for full license information.
```

#### Dependency Compatibility

MIT License is compatible with most .NET ecosystem dependencies including:

* MIT licensed NuGet packages (majority)
* Apache 2.0 licensed Microsoft libraries
* BSD licensed database drivers

#### Attribution Requirements

A NOTICE file must list all third-party dependencies and their respective licenses for proper attribution.

***

### Resources

#### Official License Sources

* **MIT License:** <https://opensource.org/licenses/MIT>
* **Apache 2.0:** <https://www.apache.org/licenses/LICENSE-2.0>
* **GPL-3.0:** <https://www.gnu.org/licenses/gpl-3.0.html>
* **AGPL-3.0:** <https://www.gnu.org/licenses/agpl-3.0.html>
* **MPL-2.0:** <https://www.mozilla.org/MPL/2.0/>
* **BSL 1.1:** <https://mariadb.com/bsl11/>

#### Additional Tools

* Choose a License: <https://choosealicense.com/>
* SPDX License List: <https://spdx.org/licenses/>
* GitHub License Guide: <https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository>


# Introduction - NMKR Studio

What is NMKR Studio and what can I do with it?

{% embed url="<https://www.youtube.com/watch?v=IkeQIaOnXR0>" %}

## Introduction

### What is NMKR Studio?

NMKR Studio is an easy-to-use application that enables you to create, manage, and sell NFTs at scale. Native to [Cardano](https://cardano.org/), where it has minted millions of NFTs, NMKR now supports minting on multiple chains. It has been built to empower large and small projects with a smooth sales and distribution process. **All of this is possible without being a developer.**

### Why was NMKR Studio created?

We help brands, companies, and creators build custom NFT solutions. It's designed for large-scale or complex NFT collections and built to be integrated into websites and [dApps](https://en.wikipedia.org/wiki/Decentralized_application).

It empowers users by allowing them to focus on the rest of the business while we let us handle the complexities of minting and selling NFTs.

### What is NMKR Studio not?

It's not a marketplace that potential buyers can use to purchase your NFTs.

### What type of person is NMKR Studio made for?

We have worked tirelessly to remove as much of the technical difficulty as possible for creators, such that most people proficient with computers will be able to get their project live.

You do **NOT** need to be a Developer or Computer Scientist. NMKR Studio is an easy-to-use no code toolset.\
\
However, when it comes to the API, which you can use to build complex, custom solutions, some technical knowledge is required, specifically about how to implement and use APIs. Developers will find the integration familiar to work with, since we use many common API patterns that exist today.

### How does NMKR Studio help me?

NMKR Studio handles the harder technical parts of launching a large-scale NFT project such as:

* Interacting directly with the blockchain
* Scaling with a heavy load of potential buyers
* Updating the nodes from time to time
* Handling Payments
* Building an intuitive web app to help you understand your business metrics
* Interfacing with partners like [IPFS](https://ipfs.io/)
* Allowing for on-demand minting to save from upfront costs

We want to make NFTs on Cardano accessible to everyone and this is our first step towards that goal.

### What are some features of NMKR Studio?

There is a robust and growing number of capabilities offered by NMKR Studio such as:

* Mass minting and NFT management via a robust Developer API
* Unique reservation mechanism used to prevent multiple people from buying the same NFT
* Comprehensive website to manage projects/NFTs and view your sales, transactions, and revenue
* Summaries of your NFT sales and business metrics using visualizations
* Utilities such as sending directly to wallets, royalties, metadata validation, and more.\
  \
  [For the complete overview click here!](https://docs.nmkr.io/nmkr-studio/features-overview)

If there are features you would like to see us build in the future, email us at <info@nmkr.io>.


# Features Overview

NMKR Studio is a very comprehensive toolset with a lot of features

For a better overview and a faster way to find the topics of your interest, you can find all the features listed and linked below.

{% hint style="success" %}
This list is currently under construction as we add new features!
{% endhint %}

<table><thead><tr><th width="348">Feature</th><th>Sub-feature</th></tr></thead><tbody><tr><td><a href="https://docs.nmkr.io/nmkr-studio/account/security#2-factor-authentication">2-FA Security</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/account/security#2-factor-authentication">Via SMS</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/account/security#2-factor-authentication">Via Google Authenticator</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/additional-payout-wallets#specify-the-additional-payout-wallets-for-your-project">Add additional Payout Wallets to Project</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/account/wallets#add-wallets">Add Wallets to account</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/minting/airdropper">Airdropping</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution">With random distribution</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-specific-distribution">With specific distribution</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#airdrop-to-holders-of-a-specific-policy-id">To holders of a specific policy ID</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#airdrop-with-address-list">To an address list</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio-api">API (NMKR Studio)</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio-api/api-examples">API Examples</a></li><li><a href="https://docs.nmkr.io/nmkr-studio-api/api-swagger">API Swagger</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/account/api-keys">API Key Management</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/account/api-keys#manage-your-api-keys">Create one or multiple API Keys</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/account/api-keys#restrict-by-ip">Restrict access by IP</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/auction">Auction (without UI)</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/block-tokens">Block Tokens</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/block-tokens#block-a-certain-amount-of-random-tokens">Block random Tokens</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/block-tokens#block-specific-tokens-from-being-sold">Block specific Tokens</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp">Bulk upload</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp">Bulk File Upload</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-metadata-json">Bulk Metadata Upload</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata#upload-metadata-in-a-placeholder.csv-sheet">Easy Metadata Upload via csv sheet</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#custom-token-payment-custom-token-prices">Custom Token Payment</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#custom-token-payment-custom-token-prices">Pay with Fungible Tokens</a></li><li><a href="/pages/rlxN1KKORq5gZaRsrfw6#pay-with-nfts">Pay with NFTs</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/account/dashboard">Dashboard for sales tracking</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/tools/direct-sales">Direct Sales (secondary sales via NMKR Pay)</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/did-decentralized-identifier">DID - Decentralized Identifier</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts">Discounts</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts#discount-by-holding-a-token-of-a-specific-policy-id">For Holders of Tokens of specific Policy ID</a></li><li>Discount Codes</li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts#discount-by-wallet-address-whitelisting">By Address list</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts#discount-by-delegation-to-a-specific-stake-pool">By Delegation</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts">Multiple discounts simultaneously</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/token/duplicate">Duplicate Tokens / Serialised NFTs</a></td><td></td></tr><tr><td>Export of Project and account information</td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/project/export-metadata-as-zip">Metadata JSON</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/account/transactions#export-transaction-overview">Transactions Overview (account)</a></li><li><a href="/pages/MijvcQkzCaLpM6LADpe0#export-statistics-overview">Statistics Overview (project)</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/project/export-placeholder.csv">Placeholder.csv</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-eth-and-sol-payment">FIAT, ETH and SOL Payment</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/fully-on-chain-nfts">Fully On-Chain Tokens</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/fully-on-chain-nfts#base64-in-the-filesection">Base64 Media</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/fully-on-chain-nfts/partial-url-encoding">Data URL-Encoded</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/metadata-standard-for-fungible-tokens">Fungible Tokens</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/metadata-standard-for-fungible-tokens#fungible-token-with-721-+-20-metadata-standard">Cardano Token registry read</a>y</li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/integrations-and-plugins">Integrations and Plugins</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/integrations-and-plugins#zapier">Zapier</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/account/invoices">Invoices</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/account/registration-and-kyc#kyc-verification">KYC</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/integrations-and-plugins/nft-pal">Layering</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/integrations-and-plugins/nft-pal">Create NFT Art and metadata with the nft pal integration</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/minting/manual-minting">Manual Minting</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/metadata-template">Metadata</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/project/metadata-template#metadata-template">Metadata Template for project</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata">Metadata token individual</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders">Custom Fields and Placeholders</a></li><li><a href="/pages/xvdlwsfzSRAlxhmmGYgK">Metadata preview</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/metadata/fingerprint-metadata-preview">Metadata check</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-metadata-json">Metadata bulk upload</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal">Metadata update on-chain (in bulk or single)</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/project/metadata-template#add-files-directly-to-the-metadata-template">Add IPFS hash directly to Metadata</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/integrations-and-plugins/nft-pal">Create Metadata with nft pal integration</a></li><li><a href="/pages/SA8e9GcRjsaMVMkbrA23">CIP-68 support</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/account/mint-coupons">Mint Coupons for manual minting and airdropping</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay">NMKR Pay</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/website-integration">Webintegration</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/specific-payment-links">Specific Payment Links</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/manual-sending-in-nmkr-pay">Manual Sending via NMKR Pay</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#define-nmkr-pay-sale-start">Defined sales start</a><br><br>More details about NMKR Pay and its numerous features can be found in the topic <a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay">NMKR Pay</a>.</li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/notifications">Notifications</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/project/notifications#notifications-via-email">Via E-Mail</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/project/notifications#notifications-via-webhook">Via Webhooks</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address">Pay-In Address</a></td><td><ul><li>Autonomous minting</li><li>Autonomous handling of refunds</li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/policy">Policy</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/project/policy#how-to-choose-a-locking-date">Create with specific locking date</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/project/create#policy-tab">Create without locking date</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#export-policy-keys">Export Policy Keys</a></li><li><a href="/pages/Xv0Y0W6wOsGhHTQG1jZT#one-policy-for-multiple-projects">Use Policy in multiple Projects</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot">Policy Snapshot</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot#snapshot-a-policy">By Tokens per receiver address</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot#cumulate-stake-addresses-of-the-policy-snapshot">By Stake address with cumulated Amounts</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist">Price list</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#create-a-new-price">Prices with expiry dates</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/free-drops">Free claimable Tokens</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts">Discounts</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/edit#static-price-with-specific-sales">Specific Token prices for specific payment links</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#custom-token-payment-custom-token-prices">Custom Token Payment</a></li></ul></td></tr><tr><td><a href="/pages/kmgPRg2CHqpClQES23PZ">Project Templates</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/quickstart-with-nmkr-studio/how-to-do-a-reveal">Reveal style NFT Launch</a></td><td></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/royalties">Royalties</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/project/royalties#set-up-royalties-for-your-project.">Adding Royalties to Policy ID</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/project/royalties#edit-remove-the-royalty-settings">Changing Royalty settings of Policy ID</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/tools/royalty-split-address">Royalty Split Address</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting">Sales Conditions</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/sales-conditions-depending-on-policy-id-or-stake-pool#add-a-sales-condition">Various Sales Conditions by Policy ID</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count">Whitelisting with Count</a></li><li><a href="/pages/nwcqlpQJG6FqgvSYBxub">Blacklisting</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/test-sales-condition">Sales Condition Testing</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/edit#edit-fundamental-settings-of-your-project">Specify Payout Wallet for Project</a></td><td><a href="/pages/BtMHbsGyP7fbpIiOzJ1C">Affiliate links</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/edit#sendback-to-customer">Specify Sendback</a></td><td><ul><li>2 ADA per NFT</li><li>2 ADA per every 5 NFTs</li><li>Calculated based on Metadatasize and amount</li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/testnet">Testnet</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/testnet">Testnet NMKR Studio</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/testnet/testnet-api-swagger">Testnet API Swagger</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/token/upload">Upload</a></td><td><ul><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp">In bulk via SFTP for Metadata and files</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-metadata-json">Metadata JSON upload</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens">Single token upload from UI</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-metadata-with-placeholder.csv">Metadata in bulk from sheet (placeholder.csv)</a></li><li><a href="https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-subfiles">Subfiles</a></li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/token/upload#file-formats">Various file format support</a></td><td><ul><li>Application</li><li>Audio</li><li>Image</li><li>Video</li><li>Text</li><li>Base64</li></ul></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/project/mint-and-send-jobs">View Mint and Send jobs</a></td><td></td></tr></tbody></table>

{% hint style="info" %}
If you want to use these features via API integration, please find the [API features overview here](/nmkr-studio-api/api-features).
{% endhint %}


# Learn NMKR Studio in 3 minutes

It take only 3 minutes to learn the basics of NMKR Studio

{% embed url="<https://www.youtube.com/watch?v=OK8Zl-PSAJg>" %}


# Basic Workflow

This is the Basic Workflow of NMKR Studio

This topic is to explain the basic Workflow to launch a Project with NMKR Studio, however, it is not implicitly necessary to follow the order of this workflow. The most Steps can be reworked and changed at any point.

#### 1) Add Wallets to your account

The first step is to [add all wallets](https://docs.nmkr.io/nmkr-studio/basic-workflow#1-add-wallets-to-your-account) to your account that you will later [specify as payout wallets](https://docs.nmkr.io/nmkr-studio/project/edit#edit-fundamental-settings-of-your-project) in your project.

#### 2) Create a project

Create a project and specify the fundamental settings like the [policy](https://docs.nmkr.io/nmkr-studio/project/policy), the [payout wallet](https://docs.nmkr.io/nmkr-studio/project/edit#edit-fundamental-settings-of-your-project) and the [Metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template). The Metadata template will apply for every token in the project, this is where you want to [specify custom fields and traits](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders).

#### 3) Upload Files to your project

Now you want to upload Files in order to create Tokens in your project. You can [upload them directly from the User Interface](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens), or via [Bulk Upload](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp).

#### 4) Set the token individual Metadata

In this step you want to give your [Tokens individual Metadata](https://docs.nmkr.io/nmkr-studio/token/metadata), for example the values for individual traits and fields that you previously specified in the [Metadata Template](https://docs.nmkr.io/nmkr-studio/project/metadata-template). You can [add them directly in NMKR Studio](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata) or also [bulk upload via SPTF](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-metadata-json) or [Spreadsheet](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-metadata-with-placeholder.csv). Always [check your metadata for correctness](https://docs.nmkr.io/nmkr-studio/token/metadata/metadata-check).

#### 5) Set up the Sales

In this step you first decide [how you want to sell your tokens](https://docs.nmkr.io/nmkr-studio/set-up-sales) ([Random](https://docs.nmkr.io/nmkr-studio/set-up-sales#random-sales) or [specific distribution](https://docs.nmkr.io/nmkr-studio/set-up-sales#specific-sales), [on demand](https://docs.nmkr.io/nmkr-studio/minting/minting-on-demand) or even [manual minting](https://docs.nmkr.io/nmkr-studio/minting/manual-minting)). \
Now you want to [specify prices](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) for your tokens, add [sales conditions](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting) (eg. [whitelisting](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count)), [discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts).

#### 6) Launch

If you decided for minting on demand, you now want to [activate the Pay-in Address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address#enable-the-pay-in-address) or [activate the prices for NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#enable-nmkr-pay-for-your-sales).\
If you decided for a manual minting approach, start [airdropping your tokens](https://docs.nmkr.io/nmkr-studio/minting/airdropper) or [mint them manually one by one.](https://docs.nmkr.io/nmkr-studio/minting/manual-minting)

{% hint style="success" %}
It is highly recommended to have a closer look at each detailed topic that is relevant for your project before you launch your project.
{% endhint %}


# How to - Quick Start Tutorials

Check out the Quick Start Tutorials and learn how to use NMKR Studio within minutes

Please keep in mind that these are very basic quick tutorials, for more details, please scroll down in the tutorial and click "more details" to read the full documentation.

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/quickstart-full-video-tutorial>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-add-tokens>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-set-up-metadata>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-sell-tokens>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-set-up-sales-conditions>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-do-a-reveal>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-burn-tokens>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-enable-royalties>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-enable-dids>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-set-up-whitelisting>" %}

{% embed url="<https://docs.nmkr.io/nmkr-studio/how-to-quick-start-tutorials/how-to-airdrop-tokens>" %}


# Quickstart Full Video Tutorial

This guide provides a fast-paced view of how to get your project live in minutes!

This Quickstart Guide should give you a superficial overview about the features and how to access them and to understand the workarounds. For tech savvy users, the "How To articles" might be enough, but it is in any way recommended reading the full detailed documentation about each topic. The detailed documentation is linked at the end of every How To article.\
\
The How To's can be found as subtopics below this topic on the left side!

### Workflow of NMKR Studio

Where every single step can be done individually without the need to follow an order strictly. It can make sense for some users to follow the [Basic Workflow](https://docs.nmkr.io/nmkr-studio/basic-workflow).

## Quickstart Guide Video

{% embed url="<https://www.youtube.com/watch?v=cCRmehE6M7g>" %}

This video provides a brief overview of how to set up and use NMKR studio to mint and sell NFTs.

### NMKR Studio Video Tutorials Playlist

If you prefer to learn visually, take a look at our YouTube tutorial playlist. We are constantly adding new features and making changes to it.

Watch the whole [NMKR Video Tutorials Playlist here!](https://youtube.com/playlist?list=PLi21CcWa_E6ykPrODRYl9XSXY8YWACZTt)


# Guidelines Planning a Project

Guidelines for a successful launch

We want you to succeed with your project because we all win together! These guidelines should assist you in having a successful launch and providing a great mint experience for your community. This guideline will provide some helpful hints for avoiding the most common mistakes made when launching an NFT project.

### Concept of sales

You want a personalized mint experience tailored to your community, with special [sales conditions](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting), [discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts), a [whitelisting process](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count), [airdropping](https://docs.nmkr.io/nmkr-studio/minting/airdropper), [giveaways](https://docs.nmkr.io/nmkr-studio/minting/manual-minting), or separated sales by [creating multiple projects with the same policy ID](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects)? Create a checklist for your project and determine whether it is practicable and feasible in the manner you envision!\
NMKR Studio offers plenty of features and sales conditions that you can use for your project; please carefully read the documentation and understand how you intend to use NMKR Studio to realize your ideas.

### Time management

Even though NMKR Studio is a simple tool that can be set up in minutes by an experienced user, you should allow more time for your project, especially if it is a bigger one. \
\
You've completed your artwork and metadata, and everything is ready for upload; what could possibly go wrong, and why do I need to plan more time? The most common problem is poor time management. Please keep in mind that you may encounter unexpected issues such as typos or errors in the metadata, incorrect project settings, or errors in the sales conditions. This is why, especially if your project is large, we recommend finishing it 2-3 days before the launch. It makes sense to have 3-5 test mints (you can use them for giveaways or keep the minted tokens for your team). Please keep in mind that proper planning and time management help to reduce errors and give your project a higher level of quality and professionalism.

### Get help

If it is a highly anticipated project, we will add a queue to NMKR Pay to ensure a smooth and flawless minting experience, and we can also assist you in identifying problems with your project by cross-checking your setup. But we won't be able to do so if you contact us only a few minutes before the launch. Other projects may require our assistance as well, so please plan 2-3 days for that as well because working in a hurry can also lead to mistakes on our part as we try to help you at the last minute. So please use the [support form](https://www.nmkr.io/support) or write us an [email](mailto:support@nmkr.io) in time.

### Testing

Allow mistakes to happen and learn how to avoid them in a safe [test environment ](https://docs.nmkr.io/nmkr-studio/testnet)with tADA instead of real ADA/money in the mainnet. Even if you are ready with testing on the testnet and your project is already properly configured on the mainnet, please do some test mints just to be safe. Mistakes can occur at any point, and you want to correct them before the launch. Your community will appreciate your professionalism. Remember that they are investing in your project, so thorough planning is not only recommended, but also fair and respectful to your community.


# How To Add Tokens

Add Tokens to your project by uploading Files

#### 1) Create a project

Navigate to [NFT Projects](https://docs.nmkr.io/nmkr-studio/project) in the Menu and [create a new Project first](https://docs.nmkr.io/nmkr-studio/project/create).

<figure><img src="/files/HAqpS2CIKkCLKymBZ7ck" alt=""><figcaption></figcaption></figure>

#### 2) Upload Files

With the upload of your [main File](https://docs.nmkr.io/nmkr-studio/token/upload#files), which must be an image or animated gif, **you also create the token in your project**.\
\
The upload is available [via the user Interface for single files](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens) in the [Manage NFTs Tab of your project](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) and also [in bulk for a large amount of files](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp) via SFTP.

<figure><img src="/files/MpAN9UbddO9TMagdyu15" alt=""><figcaption></figcaption></figure>

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/token/upload).


# How to set up Metadata

Specify The Metadata For your Project and tokens

For the Metadata Set up you have to understand first that there is a [Metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template), which defines the overall [Structure](https://docs.nmkr.io/nmkr-studio/project/metadata-template#metadata-template) and [Fields via Placeholders](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders-and-fields) of your Metadata f**or all Tokens in this project** and then there is the [token individual Metadata](https://docs.nmkr.io/nmkr-studio/token/metadata) that then gives the token individual values to replace the placeholders in the project.

#### 1) Specify the Metadata Template

Go to the [Edit Section of your Project](https://docs.nmkr.io/nmkr-studio/project/edit) and specify the [Metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template).\
Define [custom fields and placeholders](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders) by simply adding a new line.\
For example:

```
With hard written values:

"website": "https://website.com",

Or via placeholders:

"character": "<character>",
```

{% hint style="info" %}
We recommend to add custom fields above the description line.
{% endhint %}

<figure><img src="/files/2LUWQ4Hn7gty51uLoEAm" alt=""><figcaption></figcaption></figure>

#### 2) Add token individual Metadata

To replace the placeholders for the fields that were previously defined in the [Metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template), \
go to the [Edit section of your Token](https://docs.nmkr.io/nmkr-studio/token/edit) and add the values in the [placeholder tab](https://docs.nmkr.io/nmkr-studio/token/edit#placeholder-data-tab).\
\
If you want to add a complete JSON to your token, please use the [Metadata override tab](https://docs.nmkr.io/nmkr-studio/token/edit#metadata-override-tab).

{% hint style="info" %}
Please always use the \<asset\_name> placeholder in the metadata override.\
[The token name in NMKR Studio has to match the asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) in the metadata or it will cause errors.
{% endhint %}

<figure><img src="/files/8dwu873VsdGcfoh6zHLo" alt=""><figcaption></figcaption></figure>

#### More details

If you want to learn more about this topic, please [click here for the Metadate Template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) and [here for the token individual Metadata](https://docs.nmkr.io/nmkr-studio/token/metadata).


# How To Sell Tokens

Sell your tokens on demand

NMKR Studio makes it possible to sell your tokens on demand via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay), which is a payment gateway that allows your customer to connect its wallet and sign the transaction, or via a static [Pay-in address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address) that autonomously mints and distributes tokens once it receives funds in the correct amount.

#### 1) Set up prices

In order to sell tokens you have to specify the prices first. \
You can either [define token specific prices](https://docs.nmkr.io/nmkr-studio/token/edit#static-price-with-specific-sales) in the Edit section of every single token for [token specific sales with specific payment links](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/specific-payment-links), or you [set up a price list that will apply for any token in the project with various amounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist). For random sales, a price list is necessary.

<figure><img src="/files/qYYu2tsNUi0CPuzhynbI" alt=""><figcaption></figcaption></figure>

#### 2) Enable the sales

To enable the sales on demand, navigate to the [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist#open-the-price-list) of your project and activate the prices by clicking the [edit button of each price/amount pair](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices).

#### 2a) NMKR Pay

Scroll down to copy and share the payment link (example: <https://pay.nmkr.io/?p=9d3b8a7cc161474b82dc41895b70ea52&c=1>)\
below the NMKR Pay Button in the [NMKR Pay integration tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#enable-nmkr-pay-for-your-sales) if you want to sell your tokens with NMKR Pay.\
\
Or use the [website integration with quantity selection](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/website-integration).

<figure><img src="/files/ZzkgyLTFQQMrzFtG5a6Z" alt=""><figcaption></figcaption></figure>

#### 2b) Pay-In address

If you want to use the static minting address that can be shared with your customers,\
scroll down on the pricelist tab and switch to the [Pay-In Address Integration tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address#enable-the-pay-in-address).\
Use the activate button and copy the address (example: addr1v909jz0nnfwpl49st5yjp0ndht4s5vs4d0mhuz8fvv0nhrqj8mdqx) to share it with your community.

<figure><img src="/files/BlAplvN7wq33YHKQWxMZ" alt=""><figcaption></figcaption></figure>

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/set-up-sales).

{% hint style="warning" %}
In order to sell your tokens on a [marketplace](https://docs.nmkr.io/helpful-links/cardano-nft-ressources#secondary-markets), you have to [mint them first manually](https://docs.nmkr.io/nmkr-studio/minting/manual-minting).
{% endhint %}


# How To Set Up Sales Conditions

Specify Sales Conditions to only allow buyers to mint tokens that fulfil them

[Sales Conditions](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting) are a great way to define who should be able to mint the tokens and who not.\
The most popular sales condition is the so-called [Whitelisting](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count), where you predefine the wallet addresses that should be able to mint. But there are many more possibilities, like various ways to limit the amount of tokens that can be bought by a project or that only holders of a specific token are able to buy.

<figure><img src="/files/Rlm9FNIXCejPXhAB95xh" alt=""><figcaption></figcaption></figure>

#### 1) Go to the price list tab

Navigate to the [price list tab of your project](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) by clicking "set NFT prices" under "Manage project" on the right side of your project.

#### 2) Add Sales Conditions

Click on "Sales Conditions" and then "Add sale condition" on the next tab.

#### 3) Choose and activate sales condition

Choose the sales condition that fits for your sales strategy and fill out all the details. Activate and save the sales condition.

{% hint style="info" %}
The "+" button to add multiple policies to a sles condition follows an or-logic, if you want to enable sales condition by an and logic, simply create a new sales condition.
{% endhint %}

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting).


# How To Do a Reveal

Reveal your tokens after the sale

A reveal style NFT project Launch is when you sell your tokens with one placeholder image for all tokens and also placeholder values for some or all custom fields. This helps to reduce sales on secondary markets for liquidity purpose (dump below mint price to have liquidity to mint more tokens in the hope to grab rare ones). With a reveal, the final art and values on the metadata were updated after the sale.

{% hint style="info" %}
The [remint and burn process ](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal)that is needed to update the tokens [metadata](/nmkr-studio/token/metadata) on-chain in order to reveal the tokens costs 2 ADA for each NFT.
{% endhint %}

#### 1) Upload Tokens

[Upload the tokens](https://docs.nmkr.io/nmkr-studio/token/upload) to your newly [created project](https://docs.nmkr.io/nmkr-studio-api/api-examples/project/create-project), how they should appear after the reveal.&#x20;

#### 2) Upload Placeholder Image

Then you want to upload the placeholder image in a separate test project, just to get the IPFS hash of the image.&#x20;

#### 3) Edit Metadata Template

This hash will now be copied and pasted into the [metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) of your project. Copy the original metadata template of your project into a text file to restore it later. Override the [placeholders](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders-and-fields) of the traits too with something like "reveal soon" and the \<ipfs\_link> placeholders. All tokens will now be sold with the placeholder image and the "reval soon" in the traits ( "body": " will be "body": "reveal soon".&#x20;

#### 4) Prepare for the Reveal

After the sale, you now want to restore the metadata template from the txt file, so it has the placeholders again. [Buy Mint Coupons](https://docs.nmkr.io/nmkr-studio/account/mint-coupons) for the reveal. You will need 2ADA for each updated NFT.

#### 5)  Reveal the tokens

Then you select the NFTs in your project and start the [remint and burn process](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal). You find the option in the dropdown under your tokens, where you also find the option to block tokens. If you change the tokens that can be shown per page, you can update up to 100 tokens in one go.\
If you want to reveal a project with a higher number of tokens, [please schedule a reveal with us](https://nmkr.io/support).

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#reveal-tokens-after-sale-in-bulk).


# How To Burn Tokens

Burn tokens to remove them from your supply

It happens that a tokens needs to be burned, this can be because of a mistake or also as feature as it fits your project strategy.

{% hint style="info" %}
In order to burn a token, please make sure, that your [policy](https://docs.nmkr.io/nmkr-studio/project/policy#how-to-choose-a-locking-date) isn't locked.\
\
Also burn tokens with a burn address of the correct project (the project where it was minted with)!\
\
You can't burn tokens that are in a wallet of another person, you have to send the token to a burning endpoint.
{% endhint %}

#### 1) Create Burning endpoint

Move to the [Manage Tokens tab ](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab)and click the "create burning endpoint" button below your uploaded Tokens.

<figure><img src="/files/zBfBM0KGYSdZNMzcNfUZ" alt=""><figcaption></figcaption></figure>

#### 2) Send the token

Send the token from your wallet to the burning endpoint together with 2ADA in the same transaction. This will then burn the token and remove it from your supply on the [policy](https://docs.nmkr.io/nmkr-studio/project/policy).\
The token will now be stated as burned in your project.

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/token/burn).


# How To Enable Royalties

Enable royalties to receive a portion of the revenue of the sales prices on secondary market

[Royalties](https://docs.nmkr.io/nmkr-studio/project/royalties) are a very valuable additional revenue stream.\
The royalty token is always created once for every policy and must be the first token that is minted on this [policy](https://docs.nmkr.io/nmkr-studio/project/policy). The royalty token will be burned right after its creation, because the secondary markets are scanning for the mint transaction and its metadata which contains the royalty settings.\
The token itself is unimportant.

#### 1) Buy Mint Coupons

The minting of the royalty token will take 4.5 ADA, therefore you have to [buy a Mint Coupon first](https://docs.nmkr.io/nmkr-studio/account/mint-coupons).

<figure><img src="/files/XF1aDHfDZHPOjtftGm79" alt=""><figcaption></figcaption></figure>

#### 2) Create the Collection Token

Go to the [Projects overview](https://docs.nmkr.io/nmkr-studio/project#nft-projects-tab) and click on the "Collection Tokens" under "Manage Project" on the right side of your project.

<figure><img src="/files/Y74DeMrHYWv5J6AxFrJD" alt=""><figcaption></figcaption></figure>

#### 3) Specify the royalty details

Add the address that should receive the royalties and also the percentage of the royalties.

{% hint style="info" %}
The royalty receiving address and the percentabe can be changed as long as the policy isn't locked.
{% endhint %}

#### 4) Mint the token

Click on mint to confirm and the token will be minted on your policy and also immediately burned.

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/project/royalties). If you are interested in setting up a Royalty Split address gives you more flexibility even after the policy locked and also helps you to split the royalties, [please click here](https://docs.nmkr.io/nmkr-studio/tools/royalty-split-address).


# How To Enable DIDs

Verify your identity by connecting social media accounts to your project

The [DIDs - Decentralized Identifier](https://docs.nmkr.io/nmkr-studio/project/did-decentralized-identifier) are a great way to prove the ownership of a project publicly.\
With NMKR Studio, you can set up DIDs for every [policy](https://docs.nmkr.io/nmkr-studio/project/policy) separately.&#x20;

#### 1) Buy Mint Coupons

The minting of the royalty token will take 4.5 ADA, therefore you have to [buy a Mint Coupon first](https://docs.nmkr.io/nmkr-studio/account/mint-coupons).

<figure><img src="/files/5gDQGQmBDej6Ssy8EKTX" alt=""><figcaption></figcaption></figure>

#### 2) Create the DID

Go to the [Projects overview](https://docs.nmkr.io/nmkr-studio/project#nft-projects-tab) and click on the "Collection Tokens" under "Manage Project" on the right side of your project. Switch to the "Identity Token" tab and click "confirm identity on IAMX".\
Link all the desired accounts there and confirm by clicking "create".\
Close the window.

<figure><img src="/files/mK1GhSpaVt26Eun1WOd0" alt=""><figcaption></figcaption></figure>

#### 3) Mint the DID

The Identity Token Tab in NMKR Studio will you now show that the identity is confirmed.\
Click "Mint" to mint the DID.

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/project/did-decentralized-identifier).


# How To Set up Whitelisting

Set up a whitelisting to specify who should be able to buy a token

The [Whitelisting](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count) is the most popular [sales condition](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting) that is used for NFT drops.\
It predefines wallet addresses that are able to buy a token in your project.\
In NMKR Studio, you can also define the amount of tokens that each address should be able to buy  individually.

#### 1) Collect addresses

The first step is to collect the addresses that you want to whitelist.\
You can do this manually, or in case you want to whitelist holders of a specific [policy](https://docs.nmkr.io/nmkr-studio/project/policy), you can also use the built in [policy snapshot tool](https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot) for that.

#### 2) Create a csv file

You can create csv files with every spreadsheet software that is available like Excel or Google Sheets. Write "Address" in the first column of the first row and "MaxCount" in the second column of the first row. Now add all the addresses that you collected in the first column below the first row.\
Specify amounts in the second column for every address individually.\
Download the file as csv.

<figure><img src="/files/WyCgsRirWi7ZCv1UhufD" alt=""><figcaption></figcaption></figure>

#### 3) Set up the Whitelist sales Condition

Navigate to the [Project overview](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) and select "Set NFT prices" under "Manage project" on the right side of the [project](https://docs.nmkr.io/nmkr-studio/project) that you want to use for the whitelisting sale in order to [open the pricelist tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist).\
Click "Sales Condition" and then "Add new Sales Condition" in the next tab.\
Choose "[Whitelist with count](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count)" and upload the addresses, activate the condition and click "save".

Your sales condition is now active!

<figure><img src="/files/vq00p4JbrcUV0yjktUg1" alt=""><figcaption></figcaption></figure>

#### More details

If you want to learn more about this topic,[ please click here](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count).


# How to Airdrop Tokens

Airdrop / send tokens to wallet addresses

[Airdropping](https://docs.nmkr.io/nmkr-studio/minting/airdropper) describes to send NFTs to specific wallet addresses or holders of tokens of a specific [policy ID](https://docs.nmkr.io/nmkr-studio/project/policy). The NFT will be received without the need to sign a transaction or to pay for the token.\
The cost will be covered by the sender. This workflow will cover the [random airdrop to addresses](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#airdrop-with-address-list) and to [token holders of a specific policy ID](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#airdrop-to-holders-of-a-specific-policy-id), for more details and other airdrop features [please read the documentation](https://docs.nmkr.io/nmkr-studio/minting/airdropper).

#### 1) Collect addresses

The first step is to collect the addresses that should receive the airdrop.\
You can do this manually, or in case you want to airdrop to token holders of a specific [policy](https://docs.nmkr.io/nmkr-studio/project/policy), you can also use the built in [policy snapshot tool ](https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot)for that.\
\
If you want to [airdrop to holders of a specific policy ID](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#airdrop-to-holders-of-a-specific-policy-id), jump to step 3).

#### 2) Create an address list

Create a simple txt file with any editor software and paste the addresses into the file.\
Each line is allowed to contain one address.

#### 2) Buy Mint Coupons

An airdrop will take 1 [Mint Coupon](https://docs.nmkr.io/nmkr-studio/account/mint-coupons) for every airdropped token.

<figure><img src="/files/7OvXg8rH9l3ezUmvtZ6x" alt=""><figcaption></figcaption></figure>

#### 3) Set up the Airdropper

Navigate to the [Project overview](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) and select the "Airdrop" button under "Manage Project" on the right side of the [project](https://docs.nmkr.io/nmkr-studio/project) that contains the tokens that should be airdropped to the addresses.\
Click "Upload Addresses" and upload the txt file or click "Use addresses with a specific policy ID".\
Select the amount for each single airdrop.\
Choose the method "Only one drop per wallet" if every address on the list should receive only one airdrop, or "Send drop to ALL addresses" if there are some addresses multiple times in the address list and they should receive an airdrop for every entry.

<figure><img src="/files/qpg9x76L2vZyB4XmzETM" alt=""><figcaption></figcaption></figure>

#### 4) Send the airdrop

Click on "Start Airdrop" to start the airdropping process. You can check the process in the [Mint and Send Jobs overview](https://docs.nmkr.io/nmkr-studio/project/mint-and-send-jobs).

#### More details

If you want to learn more about this topic, [please click here](https://docs.nmkr.io/nmkr-studio/minting/airdropper).


# Multichain Projects

NMKR Studio supports multichain NFT minting, allowing you to create and manage projects that span multiple blockchains seamlessly. This feature enables creators to reach wider audiences while leveraging unique strengths of each chain. The core project setup workflow remains consistent across chains, but chain-specific configurations are required due to technical differences in how NFTs are minted and managed on each blockchain.

{% hint style="info" %}
All projects are set up off-chain. All configurations, including metadata templates, are defined before any on-chain actions. The project only becomes on-chain once a token is minted by you or a buyer directly via NMKR Pay.
{% endhint %}

#### Prerequisites

* You must have an operational wallet connected for each selected chain.
* Ensure you have sufficient mint coupons if you want to mint the collection token while set up.

#### Setting Up a Multichain Project

The project setup interface uses tabs (Information, Cardano, Solana, Aptos, Metadata, Summary) to guide you through the process. Start in the Information tab to define general project details, then proceed to chain-specific tabs based on your selections.

1. Select Blockchains: In the Information tab, check the boxes for Cardano, Solana, and/or Aptos. This enables the corresponding configuration tabs.
2. Configure General Project Details like Project Type: Choose Non-Fungible Token (NFT) or Fungible Token (FT). (FT currently available on Cardano-only projects.)
   1. Project Name: Enter a name (min. 1 character, max. 64 characters).
   2. Project Image (Thumbnail): Upload an image (size up to 300x100px; allowed filetypes: PNG, JPG).
   3. Project URL: Optional URL for the project.
   4. Description: Optional description (max. 255 characters).
   5. Twitter Handle: Optional.
   6. TokenName Prefix: Optional prefix for token names (max. 15 characters).
   7. Storage Provider: IPFS (default).
   8. Reservation Time: Set how long reservations are held (e.g., 20 minutes).

<figure><img src="/files/IrNmx24bL41YfRcR71hy" alt=""><figcaption></figcaption></figure>

#### Chain-Specific Configurations:&#x20;

1. Cardano:
   1. CIP Standard: Select CIP-25 (or [CIP-68](/nmkr-studio/token/metadata/cip-68)).
   2. [Policy](/nmkr-studio/project/policy): Choose New Policy (with optional policyscript lock) or Existing Policy.

<figure><img src="/files/xbIUBor1qtx0YZmmn98q" alt=""><figcaption></figcaption></figure>

2. Solana:
   1. Solana Symbol: A short string identifier for the token (e.g., a ticker like "SYM"; max. 10 characters, optional). This is part of the Metaplex Token Metadata standard, used to represent the token's symbol in metadata. For details, see the[ Metaplex Token Metadata Overview](https://developers.metaplex.com/smart-contracts/token-metadata).
   2. Solana Collection Family: A string to group related collections thematically (max. 64 characters, optional). This corresponds to the "family" field in the Metaplex metadata JSON under the "collection" object, allowing for thematic grouping of NFTs.&#x20;
   3. Create Verified Collection: Optional (costs 1 Mint Coupon to mint the Collection NFT). This mints a special NFT that acts as the collection parent, verifying member NFTs on-chain. A transaction is required on Solana, hence the coupon charge to cover fees.

<figure><img src="/files/64RtD5IhmrYMFHMNUrLQ" alt=""><figcaption></figcaption></figure>

3. Aptos:
   1. Aptos Collection Name: Enter the name (max. 64 characters). This is a required field in the Aptos Digital Asset standard, defining the collection to which tokens belong. Collections provide a name and context for grouping NFTs.
   2. Collection Image: Upload an image (no size or format restrictions specified, but use standard formats like PNG/JPG for compatibility). This corresponds to the URI field in the collection metadata, which can point to an image or other media for the collection. For official details on collections in the Aptos Token Standard, see the [Aptos Digital Asset Standard Documentation](https://aptos.dev/build/smart-contracts/digital-asset).

<figure><img src="/files/Okqy9O0UjxpFhbiKR760" alt=""><figcaption></figcaption></figure>

4. Metadata Tab: Define the standard 721 metadata structure.
   1. Social Fields: Add optional fields like Twitter, Discord, Website, Telegram.
   2. Static Fields: Add key-value pairs that are the same for all NFTs (e.g., Key: "Artist", Value: "Your Name").
   3. Placeholder Fields: Define dynamic fields with placeholders (e.g., \<description>)
   4. Use the preview panel to see how metadata renders.

<figure><img src="/files/tEAzBkVjyfwDv61mzqtJ" alt=""><figcaption></figcaption></figure>

5. Summary Tab: Review all project details before proceeding.

#### How Multichain Linking Works

Multichain functionality is achieved by embedding policy IDs or reference token IDs from other chains into the asset's metadata. This links the NFTs across chains without enabling direct bridging or transfers. For example:

* In Real-World Asset (RWA) tokenization, a buyer selects their preferred chain (e.g., Solana) during purchase. The minted token includes identifiers from Cardano and Aptos policies/collections, preventing imitation or duplication on other chains.
* This ensures cross-chain recognition for display or verification purposes, but tokens remain native to their minted chain.

#### Creating Tokens

After project setup, create tokens within the project. This step is still off-chain. Chain-specific differences (e.g., metadata formats) are handled automatically based on your configurations. Tokens become on-chain only upon minting:

* Manually mint via the interface.
* or, set up sales and use NMKR Pay for sales on demand, where buyers trigger minting on their chosen chain.

#### Best Practices and Limitations

* Fees: Expect network fees per chain for minting. The Solana verified collection requires 1 Mint Coupon to cover the transaction for creating the Collection NFT.
* Test on Testnet First: Always use the Testnet (Preprod) environment to simulate multichain setups and minting processes before deploying to mainnet. This helps identify chain-specific issues without incurring real fees. Access it via the dashboard sidebar.
* Customization: For advanced needs, see our [API](https://docs.nmkr.io/api-reference) for endpoints.
* No Cross-Chain Bridging: Tokens are minted natively on each chain and cannot be directly transferred or bridged via NMKR Studio. Use external bridges if needed, but note potential risks.


# Pricing

Fair and transparent pricing without monthly subscriptions

## Summary

* The account creation is free with no monthly subscription.
* [Minting on demand](/nmkr-studio/minting/minting-on-demand) allows you to launch your project without upfront costs.
* Standard minting fee is 3% or a minimum of 2 ADA per token during minting.
* [Multi-Sig](/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) payment eliminates the need for a 2 ADA sendback fee per NFT.
* Cardano network fee ranges from 0.2 to 0.7 ADA, depending on transaction size.
* [Mint Coupons](/nmkr-studio/account/mint-coupons) are required for [Airdropper](/nmkr-studio/minting/airdropper) or manual minting.
* Reveal or metadata update costs 0.5 Mint credit (2.25 ADA) per NFT.
* Minting using [Cip-68 Metadata](/nmkr-studio/token/metadata/cip-68) Standard doubles the minting fee.
* Using the [nftpal.io plugin](/nmkr-studio/tools/integrations-and-plugins/nft-pal) incurs a fee of 6% or a minimum of 4 ADA per NFT.

## Standard Pricing

The account you are creating is free, and there is no monthly subscription.\
If you let your customers mint on demand, you could launch your project without any costs in advance.\
\
**The standard minting fee NMKR is charging is 3% or a minimum of 2ADA per token,** it will be deducted during the sale in case you use minting on demand.\
\
When calculating your prices, and you are **not using** [**Multi-Sig payment**](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment), please keep in mind that  you have to consider the sendback to your customer\***.**

The **standard** [**sendback**](https://docs.nmkr.io/nmkr-studio/project/edit#sendback-to-customer) **is 2 ADA for every NFT**. Using [MultiSig](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) does not require the 2ADA sendback.\
\
The Cardano **network fee is about 0,2 - 0,7 ADA** depending on the transaction size and will be charged to every transaction.\
\
**If you are using the Airdropper or minting manually, you have to** [**buy Mint Coupons**](https://docs.nmkr.io/nmkr-studio/account/mint-coupons) **in advance.**\
\
*\*The* [*sendback or MinUtxo*](https://docs.nmkr.io/nmkr-studio/project/edit#sendback-to-customer) *is a minimum amount of ADA that has to be send together with each transaction that contains an NFT, this is a requirement of the Cardano Blockchain.*\
\
**Reveals/updating metadata** of NFTs that are already minted will charge 0,5 [mint coupon](/nmkr-studio/account/mint-coupons#cost-breakdown-mint-coupon).

{% hint style="info" %}
Please keep in mind that if you mint NFTs using the [Cip-68 Metadata Standard](/nmkr-studio/token/metadata/cip-68), you will be minting two NFTs (a reference token and a user token), so the minting fee is doubled.
{% endhint %}

## Price Tiers

If you're planning to sell a lot of tokens, please contact us via [contact form on our website](https://nmkr.io/contact) or email to <business@nmkr.io> to discuss further price tiers.

### Using the nftpal.io plugin

If you are using the[ nftpal.io plugin](/nmkr-studio/tools/integrations-and-plugins#nft-pal) you will be charged 6% or 4ADA minimum per NFT.


# Account

Getting started with NMKR Studio is easy and free

To get started with NMKR Studio, you need to set up an account.\
\
**The** [**registration**](https://docs.nmkr.io/nmkr-studio/account/registration-and-kyc) **process is very easy, start here** [**https://studio.nmkr.io/register**](https://studio.nmkr.io/register)**!**

* Once your account is created and your email address confirmed, [log in to your account](https://studio.nmkr.io/login).\
  We recommend activating additional [security measures](https://docs.nmkr.io/nmkr-studio/account/security).
* The next logical step would be to add [Wallets](https://docs.nmkr.io/nmkr-studio/account/wallets) to your account. You will need them later as payout-wallet to receive your revenue.&#x20;

\
**Mint Coupons are only for** [**manual minting**](https://docs.nmkr.io/nmkr-studio/minting/manual-minting)**, the** [**airdropper**](https://docs.nmkr.io/nmkr-studio/minting/airdropper) **and** [**editing your tokens after minting**](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal)**.**\
\
If you are familiar with coding and you prefer using the NMKR API, please set up your [API Keys](https://docs.nmkr.io/nmkr-studio/account/api-keys) now and check out the [API documentation](https://docs.nmkr.io/nmkr-studio-api/get-started-with-the-api).\
\
To keep on track with your sales, the [dashboard](https://docs.nmkr.io/nmkr-studio/account/dashboard) and [transactions](https://docs.nmkr.io/nmkr-studio/account/transactions) give you a very good overview over the sales of all projects that are created with this account.


# Registration & KYC

Get started with NMKR Studio - The very first steps

<figure><img src="/files/ardqwM7HqDZJ1Uf20MeX" alt=""><figcaption></figcaption></figure>

### Summary:

* Registering for an account is free with no monthly subscription.
* [✅](https://emojipedia.org/check-mark-button/) [Click here to register your NMKR Studio account!](https://studio.nmkr.io/register)
* Confirm your email after submitting the form.
* KYC (Know Your Customer) is a process to verify your identity and mandatory if your project should accept FIAT payments
* KYC involves uploading an ID document photo and a quick face scan.
* Verification may take up to a business week, but you can use NMKR Studio without restrictions during this time.

## Register your account

The account you are creating is free and there is no monthly subscription.\
\
Fill out the form accordingly and set up a password to later log into your account.\
Your password must contain at least 8 characters, including one uppercase letter and one number.\
\
Read and agree [terms](https://www.nmkr.io/legal#terms) and [privacy](https://www.nmkr.io/legal#privacy), solve the captcha and click and "Register" to create your account.\
\
Optionally subscribe to our [Newsletter](https://nmkr.io/newsletter). It is full of valuable content and a more direct way to stay updated about the NMKR team, products, and news. Thank you!

![Sign up tab https://studio.nmkr.io/register
](/files/IdqMqTpdPo3suuNmYHDj)

After you submitted the form, please confirm the email from us in your inbox.\
If you agreed to subscribed to the Newsletter, you will receive a separate mail to confirm your email address.

## KYC / Verification

### What is KYC?

KYC stands for Know Your Customer and, in some cases, Know Your Client. KYC, also known as a KYC check, is the process of identifying and verifying the client's identity when opening an account. In other words, companies that operate with financial products must ensure that their customers are who they claim to be.

\
When you are logging in the very first time, this notification will appear in the top line of NMKR Studio.

<figure><img src="/files/JRvHtFkR43RHnXurKY26" alt=""><figcaption><p>KYC request notification</p></figcaption></figure>

### Getting verified / KYC'd

Clicking "HERE" in the notification will lead you to the verification page.\
You can use your smartphone or computer to get verified.\
\
KYC requires to upload a photo of your ID document and a quick scan of your face.\
\
To start your verification process, click "Get started".

<figure><img src="/files/8k7GaaJ5TlQiBogyMgJ4" alt=""><figcaption><p>KYC process</p></figcaption></figure>

In the next step choose if you want to proceed with your computer or your smartphone.

<figure><img src="/files/6ehwBw236D3QfaQ6ySDm" alt=""><figcaption><p>KYC with a smartphone or computer</p></figcaption></figure>

If you are selecting smartphone, please scan the QR Code and follow the instructions on your phone.

<figure><img src="/files/Xhe7d6rzDzOchSIb7gp7" alt=""><figcaption><p>Scan QR to KYC on your smartphone</p></figcaption></figure>

Select the issuing country and type of ID document you want to use for the verification.\
This could be your driving licence, your national ID card or your passport.

<figure><img src="/files/F0gNNfJVERMd7J3MrD3U" alt=""><figcaption><p>Select ID document and issuing country</p></figcaption></figure>

In the final step, you will upload a photo of your ID document and then allow the application to scan your face.

When your account is verified, the notification will be removed and your account will be marked as verified. Please keep in mind that this could take up to a business week to complete.

{% hint style="info" %}
In the meantime, you can continue to use NMKR studio limitless and sell your tokens without any restriction.
{% endhint %}


# Security

Better safe than sorry. Protect your account!

<figure><img src="/files/MaI034eakMxZGi1ljwQt" alt=""><figcaption></figcaption></figure>

### Summary:

* To change your password, access account settings, click the account button, and select "Account" from the dropdown menu.
* For added security, set up [2-Factor](#2-factor-authentication)[ Authentication (2FA)](#2-factor-authentication) for your account.
* Two options are available:
  1. Use the official Authenticator App from Google.
  2. Connect your mobile number for SMS Verification.

## Change Password

To access the account settings, please click the account button first and then select "Account" in the dropdown.

<figure><img src="/files/ghO0OpU3tuog1L5QUbeF" alt=""><figcaption></figcaption></figure>

To change your password, please type in your current password.\
Then type in your new password and also a second time to confirm it.\
Your new password must contain at least 8 characters, including one uppercase letter and one number.\
Click on change password.<br>

![Easyily change your password](/files/5lQ1ijI3rYoEDyQWckbL)

## 2-Factor Authentication

We want you to stay save, please set up 2-Factor Authentication for your account.\
You have two options to use 2FA for your NMKR Studio account.

* Use the official [Authenticator App](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\&hl=en\&gl=US) from Google
* Connect your mobile number to enable SMS Verification&#x20;

![2-Factor Authentication with NMKR Studio](/files/jetyJjgNhdjhS7vkODyJ)


# Wallets

Add Wallets to your account to receive your funds

<figure><img src="/files/Kh8sDCWD1olrugVA8PcP" alt=""><figcaption></figcaption></figure>

### Summary:

* To add wallets to your account:
  * Go to the Wallets tab via the left menu bar and click "Enter new wallet address."
* Add wallets for various purposes like revenue or [royalties](/nmkr-studio/project/royalties)
* If you're working in a team, you can share revenue with [additional payout ](/nmkr-studio/project/additional-payout-wallets)wallets or the [Splitting addresses](/nmkr-studio/tools/split-addresses).

## Add wallets

Navigate to the Wallets tab via the menu bar on the left.

<figure><img src="/files/WLZwnlC26zUxdREvyJCB" alt=""><figcaption></figcaption></figure>

Click on "Enter new wallet address" to connect a wallet to your account.\
Please add the wallets that you want to use with your projects. These could be **wallets to receive the revenue of your sales, to receive the royalties, or a polygon wallet for FIAT payment**. You can delete or edit the tokens at every time. If you are working in a team and want to share the revenue with [additional payout wallets](https://docs.nmkr.io/nmkr-studio/project/additional-payout-wallets) in your project, this is also where you want to add the wallets.\
\
As you add the wallets to your account, you can easily use a dropdown selection of all wallets in your projects, and **you don't have to add them to each project separately.**

![Add wallets to your NMKR Studio account](/files/f7gVm0CKhPCwbhYLbhCX)

### Add a Cardano wallet

Enter the [Cardano wallet](https://docs.nmkr.io/helpful-links/cardano-wallets) address, **usually starting with "addr... "**\
**a**nd select the Cardano Blockchain. \
For a better structuring, comment this wallet with a unique identifier.\
Submit the wallet address and confirm the "wallet confirmation email" in your inbox.

![Adding a Cardano wallet](/files/ZwosqEZTmeevRH4v6mcP)


# Mint Coupons

Buy mint coupons for minting that is not happening on demand

What is a Mint Coupon?

Every account in NMKR Studio has it's own account balance of Mint Coupons.\
These mint coupons will be used for [Manual Minting](https://docs.nmkr.io/nmkr-studio/minting/manual-minting), the [Airdropper](https://docs.nmkr.io/nmkr-studio/minting/airdropper), [editing tokens after they were minted](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal) and to set up the [Royalties](https://docs.nmkr.io/nmkr-studio/project/royalties) for your project. \
\
Basically, you will need to buy some Mint Coupons for everything that is not minted on demand by your customer.<br>

<figure><img src="/files/mM5c2w7J40F1UjUEdEnv" alt=""><figcaption></figcaption></figure>

## Buy Mint Coupons

To buy Mint Coupons, navigate to the Dashboard and click on "Buy mint coupons".

<figure><img src="/files/LHf1cYevqfIWqTZHJzpP" alt=""><figcaption></figcaption></figure>

Select the amount of tokens you want to buy in the next step.\
NMKR Pay will now pop-up. Please sign the transaction with your wallet.\
Once the payment is done, your balance will show up as available Mint Coupons right to your customer ID.

<figure><img src="/files/uKBTIO7Dp7L0jYuBAo78" alt=""><figcaption></figcaption></figure>

## Cost Breakdown Mint Coupon

One Mint Coupon is 4,5 ADA in total, with this one Mint Coupon you are able to mint one token [manually](https://docs.nmkr.io/nmkr-studio/minting/manual-minting) or send 1 token via the [Airdropper](https://docs.nmkr.io/nmkr-studio/minting/airdropper).\
\
The [editing of an NFT](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal) after the mint, only costs 2ADA, means it will not deduct a whole Mint Coupon and you will have some ADA remaining.\
\
4,5 ADA Mint Coupon contains

* 2 ADA NMKR Fee
* 2ADA MinUtxo (sendback to customer)
* 0,2 - 0,7 ADA network fee depending on the size of the transaction and metadata

##


# Dashboard

Keep on track with your sales and visualize them in a graph

Dashboard layout

The Dashboard is the first tab that you will see after you log-in to NMKR Studio and is also accessible via the menu bar on the left.

<figure><img src="/files/Er8l5KTc3BmUrLkXQN3J" alt=""><figcaption></figcaption></figure>

### First section&#x20;

Besides some educational content about how to get started with NMKR Studio or how to get help, the first section is also where you would [download your invoices](/nmkr-studio/account/invoices) and [buy mint coupons](/nmkr-studio/account/mint-coupons).

### Second section

<figure><img src="/files/uYGxVLQIUEeBA22iGM9q" alt=""><figcaption></figcaption></figure>

The **second section** visualizes your sales of the last year, divided in 12 months in a bar chart.\
It shows the following key values on the left side. The Chart on the right side shows you the count of transactions that belong to your account.

### Third section&#x20;

<figure><img src="/files/RZ02ufMa4qqIS1yiib65" alt=""><figcaption><p>The third section with a quick overview over your last transactions</p></figcaption></figure>

The **third section** of the dashboard is a quick overview over your last transactions.\
If you need a more detailed overview that shows more than just the last few sales, please check out the [Transactions tab](https://docs.nmkr.io/nmkr-studio/account/transactions).


# Transactions

View and Export transactions of your account

<figure><img src="/files/dH5MByGpTphLytcFNMkp" alt=""><figcaption></figcaption></figure>

## Transactions overview

It is, of course, necessary from an accounting standpoint to have a reliable and unambiguous view of the transactions made. This is why we have the transactions overview. It can be easily accessed from the menu bar.

<figure><img src="/files/jSsw1pGPmfZxLbXTGz4w" alt=""><figcaption></figcaption></figure>

The transaction overview displays all transaction activities associated with your user account, including all project transactions, manual mints or airdrops, and royalty token minting.

<figure><img src="/files/10MrFzPKa9K9uWQVEANX" alt=""><figcaption><p>The transactions overview</p></figcaption></figure>

it shows every transaction of your account and makes it easy to understand what kind of transaction it was and the transaction key data and structure:

* Time and Date (UTC)
* Type
* Project
* Price Paid
* Amount of NFTs
* Total Costs
* Income
* Transaction ID
* Payout wallet (receiving wallet)

### View more details of a specific transaction

<figure><img src="/files/fIpLcBicoOQXfo8vLFEf" alt=""><figcaption><p>Expand transaction details by clicking the row</p></figcaption></figure>

Just click the transaction row to expand more details about a specific transaction.\
It will show you additional data:

* Paid from user
* MinUtxo (sendback)
* Network Fees
* Mint Fees
* Incomes
* Discount
* NFT name and image
* Fingerprint of the token

## Export transaction overview

To export the transactions overview, please click on "export all Transactions" in the lower left corner. This will instantly download a CSV-file packed in a Zip-file containing all the relevant data as mentioned above.\
It can be opened in any spreadsheet program like Excel, Numbers or Google sheets.

<figure><img src="/files/LkgOlRbKGZ7VFXHbbqVz" alt=""><figcaption><p>Example of the Transactions overview as CSV file</p></figcaption></figure>


# Invoices

Download your invoices for your accounting

<figure><img src="/files/CDmvodOu79QWqSOh0oic" alt=""><figcaption></figcaption></figure>

### Download Invoices

To download your invoices, please click on the account button first and then select “Invoices” from the dropdown.

<figure><img src="/files/VoaIvkgQtDfWFnGTEJHS" alt=""><figcaption></figcaption></figure>

The following tab shows you an overview of all invoices by billing period. One billing period is one month. If you want to download the Invoices, please click the download/print button to download or print the pdf invoice.

<figure><img src="/files/ZkkpeqBaZ8lRrKaGGbkm" alt=""><figcaption></figcaption></figure>


# API Keys

Create API Keys to utilize the NMKR API and control the permissions for each Key individually

<figure><img src="/files/NHL3Leg5Vhj1W4WOs4M4" alt=""><figcaption></figcaption></figure>

## Manage your API Keys

To grant or restrict access to specific services, we use a key-based authentication approach with our API. On the Manage API Keys page, you can create new keys, set their rights and expiration dates, and restrict IP access.

In NMKR Studio, you can generate an infinite number of API keys.

{% hint style="danger" %}
Note - NEVER share your API Keys ANYWHERE

This is particularly important if you intend to make API calls based on actions on your website, please see our [Security Practises](/helpful-links/security-practices) for more details.
{% endhint %}

### Create API Key

The first thing you need to do, is create your API Keys, this is a very simple process. Start by navigating to the 'Manage API Keys' Section.

<figure><img src="/files/3S75irkDRqnErZsUwBwD" alt=""><figcaption></figcaption></figure>

Next, click on "create new API Key".

<figure><img src="/files/7P21M8M4HgGBo3pZEVup" alt=""><figcaption></figcaption></figure>

We should now see a new screen which allows us to perform the initial set up of our API Keys.

{% hint style="info" %}
Note - You can make, create and delete as many Keys as you like, there is no limitation.\
But for safety reasons, please delete the keys that you don't need anymore.
{% endhint %}

Also note the expiry date is within a reasonable timeframe (the default is probably good enough). Once you are happy, select 'Create Apikey'.

<figure><img src="/files/ezKVpyRXJuQkWj8CBejE" alt=""><figcaption><p>Manage API Key permission individually for each API Key</p></figcaption></figure>

### Note the Key

Once created, you get one chance to make a note of the API Key. This is the most important part, so make a note of this and keep it very safe.

{% hint style="warning" %}
Note - Anyone who has this API key can use the active features - DO NOT SHARE IT
{% endhint %}

### Editing Settings

You will now find each created API key on your overview.

<figure><img src="/files/wMNU0EyyYQXNXRO3E02O" alt=""><figcaption></figcaption></figure>

Selecting the edit button will allow you to change the name and expiry date of your API Key.

<figure><img src="/files/HChVGtEyHchS6H87ASAy" alt=""><figcaption><p>Edit your API Keys name and expiration date after the creation</p></figcaption></figure>

### Restrict by IP

Following on from above, selecting the alarm clock icon will allow you to further lock down who can use the API Key, based on their IP address. This menu allows you to manage this via combinations of Allow/Deny Rules.

{% hint style="info" %}
Note - the default is set to 'Allow all' which will be sufficient if you ensure that your API Key is kept safe.

If you ever have reason to believe your API Key is compromised, we would recommend deleting it as mentioned above and generating a new one.
{% endhint %}

<figure><img src="/files/PfZ9fLPk9r2UgpWHSua0" alt=""><figcaption><p>Set up individual access rules for IPs</p></figcaption></figure>

### Revoke the API Key

Please click the button to remove an API Key's permissions once it is no longer required.

<figure><img src="/files/1d7XwW0hUi1YDfyTJYwK" alt=""><figcaption><p>Revoke API Key</p></figcaption></figure>

For more information about how to use the API please check out the [API documentation here](/nmkr-studio-api/introduction-nmkr-studio-api).\
Or the [Testnet API Documentation here](/nmkr-studio/testnet/testnet-api-swagger).


# Project

Manage multiple individual projects in one account with NMKR Studio

NMKR Studio allows you to manage multiple projects with different [policy IDs](https://docs.nmkr.io/nmkr-studio/project/policy) or even projects with shared policy IDs on one account.

### NFT Projects Tab

Access the NFT projects tab via the Menu bar on the left.

<figure><img src="/files/qHkFkCZCjyYXnjYp4wlX" alt=""><figcaption></figcaption></figure>

The project manager tab displays all projects associated with your account; it is where you can create new projects and manage existing ones. You can sort the list by active, suspended, or finished projects.&#x20;

{% hint style="info" %}
If a project is missing from the list, please filter for finished projects and check to see if your [policy](https://docs.nmkr.io/nmkr-studio/project/policy) is locked. If your policy has been locked, you must create a new one.\
For more details about policies [read here](https://docs.nmkr.io/nmkr-studio/project/policy).
{% endhint %}

<figure><img src="/files/XdSOlSv3TxQmXk6tiZE5" alt=""><figcaption><p>The Manage Tokens Tab</p></figcaption></figure>

#### Filter by state of the project

For a better overview, it can make sense to filter by the state of the project.\
This allows you to only show projects that are active/suspended/finished.\
Projects with an expired [policy](https://docs.nmkr.io/nmkr-studio/project/policy) will automatically be removed from the active projects and added to  the suspended ones.

<figure><img src="/files/7LuS5zHtu2reUm319ucR" alt=""><figcaption><p>Filter by state of the project</p></figcaption></figure>

##


# Policy

What is a policy and how to create one

## What is a policy?

A policy is more than just a unique identifier that defines who can submit changes to the policy(the holder of the policy keys) for your project; it's also a guarantee to buyers that you won't change anything after it's been locked. It is a critical topic, and we recommend that you show your policy ID to your customers so that they are not scammed by other projects attempting to impersonate your project.

### How to choose a locking date

Please choose a locking date that allows you enough time after your project has sold out to make any necessary changes like updating the metadata of tokens or burning specific tokens.\
If you are going to add multiple collections, but you want to [keep the same policy ID](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#export-policy-keys) for them, consider using a never locking policy or a policy that locks first after you completed all collections.

{% hint style="warning" %}
Please keep in mind that it is not possible to extend the policy's expiration date!\
Once a policy is locked you have to [create a new one](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#create-a-policy).
{% endhint %}

### What happens if a policy locks

Once a policy is locked, you will not be able to mint new NFTs on this policy, nor will you be able to burn or edit any tokens. The policy locking date cannot be changed, so choose wisely.


# Managing policies

Learn how to create, view, export and import your policy IDs

## Managing your policies

With NMKR Studio you have full control over your policy, which means you can export and use it however you want, and even create multiple projects with the same policy ID by [exporting the keys ](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#export-policy-keys)and [importing them to a new project](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#import-policy-keys). This could be used to split up the amount that can be sold in one project, or to separate for [whitelisting](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count).

### Create a policy

A new policy can be created when [setting up a project](https://docs.nmkr.io/nmkr-studio/project/create).\
The second step in creating a project is where you create a new policy ID and choose it's locking date. Please select the locking date carefully as above explained.

<figure><img src="/files/ulTSPEjdhqsODo3ByDIa" alt=""><figcaption><p>Choose the policy locking date in the <a href="https://docs.nmkr.io/nmkr-studio/project/create">Create new Projects tab</a></p></figcaption></figure>

### Show policy&#x20;

To show your policy ID click the policy button in the actions bar on the right of the [managing projects tab](https://docs.nmkr.io/nmkr-studio/project).

<figure><img src="/files/2SNF2Gi96r1OafGSOnCc" alt=""><figcaption></figcaption></figure>

It opens a tab that shows you a policy script and your unique policy ID.\
You can now check your policy ID on [https://cardanoscan.io ](<https://cardanoscan.io >)or export the policy Keys to use them in another project.

<figure><img src="/files/yzNjjd6VtnGObDlZ3nu6" alt=""><figcaption><p>view your policy ID </p></figcaption></figure>

## One policy for multiple projects

### Export policy Keys

To export the policies, click the same button that was used to [show the policy](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#show-policy) and select 'Export Policy Keys.' This will immediately download a zip file with your policy Keys.<br>

<figure><img src="/files/PNAhUZoD1vHezT33Alqj" alt=""><figcaption><p>Your policy Keys</p></figcaption></figure>

### Import Policy Keys

To import the policy keys, please [create a new project](https://docs.nmkr.io/nmkr-studio/project/create), fill out the project details on page one and then move on to the second tab.

<figure><img src="/files/2vMs3PHQRCTSsJs5Qj9W" alt=""><figcaption><p>Create a project with existing policy Keys</p></figcaption></figure>

Open each of the previously downloaded keys in a text editor application and copy and paste the keys as requested.

<figure><img src="/files/oR8TtAbSyE6TTelMUOBP" alt=""><figcaption><p>Example of a signing Key opened in an editor</p></figcaption></figure>

{% hint style="info" %}
You have to copy the whole data from each Key, or the import wont work
{% endhint %}

Click 'next' to continue with the set-up of your project.


# Create

NMKR Studio provides a streamlined approach to launching your token project, whether it's Non-Fungible Tokens (NFTs) or Fungible Tokens (FTs).

{% embed url="<https://www.youtube.com/watch?v=Fec_gkBN1mc>" %}

### Create a Project

To create a new project, go to the [NFT Projects Tab](https://docs.nmkr.io/nmkr-studio/project) and select "Create new Project".\
This will open a new Tab where you will configure the fundamental settings for your project. It's a simple four-step process, and if you need to change something, you can always return to the previous page by clicking "previous."

{% hint style="warning" %}
Many of these settings can be changed, but some cannot be changed after the project is created. You can't change whether the project is for fungible or non-fungible tokens, and you can't change the policy locking settings after you created the project.\
Please read the [policy documentation](https://docs.nmkr.io/nmkr-studio/project/policy) to learn more about these very important settings.
{% endhint %}

### Information Tab

#### Decide if the project is for Fungible or Non-Fungible Tokens

It is preselected to create a [Non-Fungible Token](https://docs.nmkr.io/nmkr-studio/token#non-fungible-token), if you want to create a [Fungible Token](https://docs.nmkr.io/nmkr-studio/token#fungible-token), please select "Fungible Token (FT) project" and specify the maximum Token supply.\
**The maximum Token supply limits the amount of Fungible Tokens (identical copies) that can be minted for each token that is uploaded to the project.**\
You can create multiple different Fungible Tokens within the same project, but they will all have the same maximum supply.\
If this is not what you want, kindly start a new project for each FT you want to create. \
If you want to learn more about that, please read [Non-Fungible Tokens and Fungible Tokens](https://docs.nmkr.io/nmkr-studio/token#non-fungible-token-or-fungible-token).

#### Project Name

Give the project a unique name. This name won't be shared and will only be used to make it easier for you to locate your project in the [NFT projects tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay).

#### Project Image

The image you can upload by clicking "Upload project image" will be only used for [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay)\
PNG files with a 300x100px maximum size are acceptable.

#### Project URL and Description

The project URL and Description won't be shared and are also optional. They should help you to better identify your projects.

#### Token Name Prefix

The Token Name Prefix can contain maximum 15 characters and no special characters.\
This Prefix will be added to the [Asset Name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) of each token in the project.\
If you specify a prefix here, please don't add another one in the [Tokens metadata](https://docs.nmkr.io/nmkr-studio/token/metadata) or token naming itself, or you will have them double.

#### Address Reservation Time

Specify how long the token is reserved for the customer via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay). The token will shift from "reserved" to "free" and become available to mint for other customers if a client doesn't pay within that period. by standard it is set to 20 minutes, which is a good value for normal blockchain load.

#### Twitter handle

Add your twitter handle for example @nmkr\_io to this field to allow customers that use the "share on twitter" feature after a successful purchase in NMKR Pay, to tag you in the tweet.

#### Sendback to customer

The sendback or MinUtxo is a minimum amount of ADA that has to be send together with each transaction that contains an NFT. This is a Cardano requirement and is mandatory except you activate the [MultiSig payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment). The standard is 2ADA for each NFT, but you can decide if you want to choose 2ADA for every 5 NFTs, or the option "MinUtxo" which calculates for every transaction depending on the token amount and metadata size.

#### Storage Provider

This field allows you to select the storage provider. The standard storage provider is [IPFS](/introduction/what-is-an-nft/what-is-ipfs), but with the integration of [Iagon](https://iagon.com/), NMKR Studio can now use another decentralized storage provider for your project. You don't need to worry about the metadata template placeholders switching from IPFS to Iagon because they do so automatically.

If you're using custom metadata without a template, make sure to use "image": "\<iagon\_link>" instead of "image": "\<ipfs\_link>".

{% hint style="info" %}
As Iagon is still in it's very early days, the storage on Iagon is always going to be additional to the upload and pin to IPFS.\
\
Please expect a slower uploading process than IPFS.
{% endhint %}

#### Payout Wallet

Please select the wallet that you want to use to receive the funds from the sales.\
If you don't find any wallets to select in the dropdown, please [set up a wallet](https://docs.nmkr.io/nmkr-studio/account/wallets) for your account first. The payout wallet you specify here, will be the main receiver wallet if you specify any [additional payout wallets](https://docs.nmkr.io/nmkr-studio/project/additional-payout-wallets).

### Policy Tab

In the second step of creating your project, you either set up a new [policy](https://docs.nmkr.io/nmkr-studio/project/policy) or you choose to import an existing policy.

#### Create a new policy for your new project

If you decide to create a new policy ID, please decide if you want to have the policy locked and also specify the locking date.

{% hint style="warning" %}
The Policy locking and specified locking dates can't be changed afterwards! \
Please read the [policy documentation](https://docs.nmkr.io/nmkr-studio/project/policy) if you need more details to understand what this means.
{% endhint %}

#### Import a policy for a new project

To learn how to import a policy ID, please read the documentation about [how to use one policy ID for multiple projects](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects).

### Metadata Template Tab

The metadata template tab shows you the standard metadata template of your project. It is recommended to use the standard template for creating the project. You can edit the [metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) whenever you want in your [project's settings](https://docs.nmkr.io/nmkr-studio/project/edit).

#### Fixed fields

Fields with values that should apply for every token in the project can be added as hard written values.\
Like a field with a link to your website. use the prepared boxes or add them manually to the template.

```
"website": "https://nmkr.io",
```

#### Placeholder fields

Add custom fields and placeholders to your metadata template.\
The actual values of the fields that replace the \<placeholders> will be [given later on with each token individually](/nmkr-studio/token/metadata/add-token-specific-metadata).

```
"custom_attribute": "<custom_attribute>",
```

\
If you want to learn more about the metadata template and the fields and placeholders in it, \
please [click here](/nmkr-studio/project/metadata-template).

#### CIP-25 or CIP-68

In this tab, you can also decide if your project should use the [CIP-25](https://developers.cardano.org/docs/governance/cardano-improvement-proposals/cip-0025/) or [CIP-68](/nmkr-studio/token/metadata/cip-68) metadata standard.\
CIP-25 is the regular metadata standard, where CIP-68 is the one to choose if you want to repeatedly update your NFTs with a smart contract.\
For more info about CIp-68, please [click here](/nmkr-studio/token/metadata/metadata-standards-on-cardano).

### Summary Tab

The summary allows you to determine whether all of your settings are specified correctly. Please double-check before clicking "save project" to create the project. If you need to make changes, please use "previous" to navigate to the previous tabs.


# Create Templated Projects

With our project templates, you can quickly set up new projects using predefined templates for different use cases.

**1. Create a Templated Project**

1. Go to your **Dashboard**.
2. Click **Create Templated Project** in the Welcome banner.
3. Select a project type from the list of available templates.

<figure><img src="/files/Y7hGdh0BP9H4NUEiRzj8" alt=""><figcaption></figcaption></figure>

* To preview the structure of the NFT metadata **(Show Metadata Template)**, click on the gear symbol top right.

**2. Select Blockchain**

1. Choose the blockchain for minting (e.g., Cardano).
2. Enter blockchain-specific details such as Policy lock date and the Payout wallet
3. Review your settings in the Summary and click Save Project.

<figure><img src="/files/97Ecd6x6MskgthBgHDlD" alt=""><figcaption></figcaption></figure>

**3. Manage Tokens and Upload Files**

1. Open your project via "NFT Minting" on the top left on your Dashboard.
2. Go to Manage Tokens > Upload and Pin new NFT.
3. Add your token and upload the files, e.g.:
   * Front cover (subfile 1)
   * Back cover (subfile 2)
   * Preview image

**4. Fill Placeholder Data**

* Complete the placeholder fields defined in the NFT metadata.
* Note: Placeholders only need to be defined for the mainfile, subfiles optional.

**5. Review and adjust Metadata**

After creation, you can edit anything - templates are starting points, not restrictions.<br>

**When to Use Templates vs. Standard Setup**

* **Use templates** if you want speed, inspiration, or to learn the recommended structure for your asset category.
* **Use standard setup** (via "Create Project" without a template) for full control: custom policies from scratch, unique metadata formats, bulk uploads with special rules, or enterprise-scale features.


# Edit

Edit your project settings

<figure><img src="/files/LxBT97pa2fGBEUmA0OCs" alt=""><figcaption></figcaption></figure>

To make changes to your project settings, navigate to the [NFT projects tab](https://docs.nmkr.io/nmkr-studio/project) and click the edit button.&#x20;

<figure><img src="/files/0sFTALqbZlXGvNT8BUl3" alt=""><figcaption></figcaption></figure>

### Edit fundamental settings of your project

In the next step, you will see the 'edit section' further, the information tab of your project, which allows you to edit the project's information as well as some more important sales settings.

<figure><img src="/files/CuyRF855QJQeWbAxofB8" alt=""><figcaption><p>the edit tab of your project</p></figcaption></figure>

{% hint style="warning" %}
You can't change whether the project is for fungible or non-fungible tokens, and you can't change the policy locking settings after you created the project. You have to specify these details when [setting up the project](https://docs.nmkr.io/nmkr-studio/project/create).\
Please read the [policy documentation](https://docs.nmkr.io/nmkr-studio/project/policy) to learn more about these very important settings.
{% endhint %}

#### Sendback to customer

The sendback is a minimum amount of ADA that needs to be sent with every transaction that contains an asset. For an easier price calculation, you can set the sendback to 2ADA for each NFT, or 2 ADA for every 5 NFTs that were sent in one transaction. For reduced costs, please select "MinUtxo", this will calculate the sendback of each single transaction depending on the metadata size and token amount.

### Block NFTs from sale

If you want to block a certain amount of **random** NFTs from being sold, please specify the amount here in your project settings and click on save.

<figure><img src="/files/RnIylgrCtdXJz7AMUMuV" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The tokens blocked in the project settings, won't show up in the project as being blocked like the [specific ones do](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab#block-specific-nfts). This method can be understood as a limit for the sales.
{% endhint %}

### Additional Security

Depending on how you plan to set up the sales, disable random sales or disable specific sales with the buttons in the lower corner or the tab.\
'Disable random sales' will only allow [specific payment links](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/specific-payment-links) and 'Disable Specific sales' will only allow random sales via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) or the [Pay-In Address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address).\
\
Further helpful Information is [Security Practices](/helpful-links/security-practices) and [Deal with Bots](https://docs.nmkr.io/helpful-links/deal-with-bots).

### Edit FIAT payment settings

[NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) allows you to offer your customers [FIAT payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-payment). The FIAT tab in the project settings is where you want to enable or disable it for your project and where you want to change the [USDC payout wallet](https://docs.nmkr.io/nmkr-studio/account/wallets#add-a-polygon-wallet).

<figure><img src="/files/ZNlqLSOEuiRQXBGwfAlg" alt=""><figcaption><p>Activate FIAT payment for your project.</p></figcaption></figure>

### Edit Metadata template

The metadata template helps you define a metadata structure that applies to all tokens in this project, you can specify placeholders and also add custom fields.\
To learn more about the metadata template itself, please check out the [Metadata template documentation](https://docs.nmkr.io/nmkr-studio/project/metadata-template).

### Notifications in the edit section

We just released the beta version of the notifications feature. Please read the [documentation to set it up](https://docs.nmkr.io/nmkr-studio/project/notifications).


# Metadata Template

How to use the metadata template and the placeholders it contains

NMKR Studio allows you to specify a metadata template for each project individually.\
This metadata template contains placeholders that will be replaced by the actual values from the metadata provided by each unique token, means each token uploaded to this project will use the metadata structure and placeholders of the metadata template.\
\
NMKR Studio uses the [CIP-0025](https://developers.cardano.org/docs/governance/cardano-improvement-proposals/cip-0025/), a proposal that defines an NFT Metadata Standard as the standard structure of the metadata templates in your project. It is important to use this structure also with your [tokens unique metadata](https://docs.nmkr.io/nmkr-studio/token/metadata).

{% hint style="warning" %}
Common mistakes are that the Cardano specific character limits are exceeded.\
The asset\_name for example only allows 32 characters and no special characters.\
The standard limit for any field is 63 characters including whitespaces.\
If you want to add longer text, [please use an array](https://docs.nmkr.io/nmkr-studio/project/metadata-template#description-and-extended-description-with-more-than-63-characters).
{% endhint %}

{% embed url="<https://developers.cardano.org/docs/governance/cardano-improvement-proposals/cip-0025/>" %}

<figure><img src="/files/Nn3TXflBFs1s8w7o9tZh" alt=""><figcaption></figcaption></figure>

### Metadata Template&#x20;

The standard metadata can be found in the[ Edit Metadata Tab](https://docs.nmkr.io/nmkr-studio/project/edit#edit-metadata-template) of your project settings.

<figure><img src="/files/RxkrVS1dnBixHj4zMPvw" alt=""><figcaption><p>The Metadata Tab of your Project shows the Metadata Template</p></figcaption></figure>

\
You can identify placeholders by the form how they are written, anything could be a placeholder if they are framed with <>.

```json
{
  "721": {
    "<policy_id>": {
      "<asset_name>": {
        "name": "<display_name>",
        "image": "<ipfs_link>",
        "mediaType": "<mime_type>",
        "description": "<description>",
        "files": [
          {
            "name": "<display_name>",
            "mediaType": "<mime_type>",
            "src": "<ipfs_link>"
          }
        ]
      }
    },
    "version": "1.0"
  }
}
```

It is very important that you keep the basic structure of this metadata template. A very useful tool to check your metadata structure is the [JSON Editor Online](https://jsoneditoronline.org/).<br>

{% embed url="<https://jsoneditoronline.org/>" %}

{% hint style="info" %}
Also make sure to use strings (" ") and not only values.\
E.g.  "traitcount": "12" would be correct.\
"traitcount: 12 would NOT be correct.
{% endhint %}

### File section

The file section in the metadata template will always replace all its placeholders with the specific values of the files that are uploaded to the token. If you have multiple [subfiles](https://docs.nmkr.io/nmkr-studio/token/upload#subfiles) this file section will automatically multiply itself for every uploaded subfile. Therefore, it is recommended to not touch the file section and its placeholders.

```json
        "files": [
          {
            "name": "<display_name>",
            "mediaType": "<mime_type>",
            "src": "<ipfs_link>"
          }
        ]
```

#### Add files directly to the metadata template

For some projects where all tokens share identical [subfiles](https://docs.nmkr.io/nmkr-studio/token/upload#subfiles) it makes sense to add them directly to the metadata template instead of uploading them as subfiles to each single token.\
In order to do so, you want to upload the desired files in a test project to receive the IPFS hash of the file. You can then [copy the IPFSH hashes from the file tab of the token](https://docs.nmkr.io/nmkr-studio/token/edit#files-tab) or the [Manage NFTs Tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) details column and add it as showed below to the metadata template.

```json
        "files": [
          {
            "name": "<display_name>",
            "mediaType": "<mime_type>",
            "src": "<ipfs_link>"
          },
          {
            "name": "subfile",
            "mediaType": "<mime_type>",
            "src": "ipfs://QmZNqgUHhGukXD27pAZtZE5BEkx6VXB1AhQVmK55QCd31y" 
          }
        ]

Add a "," between each file to add more than 1 subfile directly to the template.
```

### Placeholders and fields

Every field in the metadata consists of a name (e.g. "name") of the field and it's placeholder (e.g. "\<display\_name>".\
\<placeholders> are as the name already said, are meant to hold the place for values that will be given by each unique NFT. It is recommended to use the already specified placeholders in the standard metadata template, but you can [specify your own fields and placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#undefined)s too.

#### policy\_id

This fields placeholder \<policy\_id> replaces by the policy ID of the project. It is highly recommended to keep it in your metadata template and [unique metadata of the token](https://docs.nmkr.io/nmkr-studio/token/metadata).

#### asset\_name

This \<asset\_name> placeholder will be the name of the asset on-chain and should match the Asset Name of your token in the manage NFTs Tab.It can have maximum 32 characters. It is highly recommended to keep the placeholder in your metadata template and [unique metadata of the token](https://docs.nmkr.io/nmkr-studio/token/metadata).

{% hint style="info" %}
Since the recent update of NMKR Studio, the asset\_name can hold special characters and spaces.
{% endhint %}

{% hint style="warning" %}
**We recommend that the numbering of your tokens rarities are not related to the token numbers.**\
If this needs to be the case, we recommend that the [asset\_*name* / token name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) of an asset does not correlate in any way with the [display\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) and is randomly generated.\
Please use the [placeholder.csv method](https://docs.nmkr.io/nmkr-studio/project/metadata-template#bulk-upload-metadata-with-placeholder.csv) to override the display names of your tokens.\
\
The reason for that is simple; if you are going to use [MultiSig Payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) in your project, the buyer could see the [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) (not the [display\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name)) in the transaction when he is signing the payment transaction. Therefore, a buyer could decide to cancel the transaction if he sees an "not rare/common number" and start over again.
{% endhint %}

#### display\_name

When a \<display\_name> is specified, it replaces the token's [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) on pool.pm, secondary markets, and other websites. This name is how the holder identifies the token. It can hold up to 63 characters, including special characters.\
If you want to have your name like "Token #124", this is where you want to put it that way.

#### image

The \<ipfs\_link> placeholder of this field will be replaced by the IPFS hash of your token.\
If your token has not only an image as mainfile, but also images as subfiles, this field will specify the thumbnail of your project and it could make sense to add a smaller sized version of your image/animated gif here.

#### mediaType

This field defines the file format of the thumbnail image, or if used in the file section below a subfile, the \<mime\_type> placeholder will automatically replace by the file format of the file.

#### src

The \<ipfs\_link> placeholder in the field "src" belongs to the file section and will be replaced by the ipfs hashes of every uploaded [subfile](https://docs.nmkr.io/nmkr-studio/token/upload#subfiles).

#### detail data

The detail data field can be given if you want to add additional details to your [subfiles](https://docs.nmkr.io/nmkr-studio/token/upload#subfiles).\
These can be specified in the[ files tab when you edit or upload a token](https://docs.nmkr.io/nmkr-studio/token/edit#files-tab) or directly in the [custom metadata](https://docs.nmkr.io/nmkr-studio/token/metadata#token-specific-metadata).

```json
"detaildata": "<detail_data>"
```

#### description and extended description with more than 63 characters

You can add up to 63 characters to the description without using an array.\
If you want to add a longer description, please use the array method to break your text into multiple lines:

```json
        "description": [
          "text part abc...",
         "...def...",
          "...xyz"
        ],
```

#### Custom placeholders

Custom placeholders are very helpful to add your tokens so-called traits or token specific values.\
To specify unique placeholders you have to add a custom field to your metadata template.\
It is recommended to add them below the "description" line in the metadata code.\
To add a custom field, please give the custom field a "name" and then the \<placeholder> as below:<br>

> ```json
> "body": "<body>",
>
> or
>
> "background": "<background>",
> ```

After specifying the custom fields in your metadata template, you will give the values with [the tokens' unique metadata](https://docs.nmkr.io/nmkr-studio/token/metadata).

#### Custom placeholders to name the stack (pool.pm)

Pool.pm stacks NFTs of a collection, if you want to name this stack you can use custom fields like:

```json
"collection": "<collection>",
"artist": "<artist>",
"project": "<project>",
```

But if the project should share the same stack name anyway, you would like to put hard values in there without using the placeholder method (remove <>):

```json
"collection": "My Collection",
"artist": "The Artist",
"project": "The Project",
```

If these custom fields are not given in the metadata, pool.pm will create a name out of a sequence in the [description](https://docs.nmkr.io/nmkr-studio/project/metadata-template#description-and-extended-description-with-more-than-63-characters) or the [display\_names](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) (if not given, the [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name)) of the tokens.

#### Links in the metadata

Links can be easily added directly to your metadata with custom fields.

```
"website": "https://nmkr.io",
```

Also, when using https// links in your metadata, you need to respect the 63 characters limit per line. Please add links like stated below in an array.

```
        "download": [
          "https://drive.google.com/file/d/1CVmtR5VCHWENY",
          "GV-5OiuKGkAXsdmhGDA7p/view?usp=sharing"
        ],
```

To add a link to a field name, without showing the whole link, please use the following format.

```
          "links": {
            "website": "https://website.com/"
          },
```

Of course, this format can be combined with an array.

```
        "links": {
          "download": [
            "https://download.com/",
            "xyzabc..."
          ]
        },
```


# Statistics

Statistics show key data and transactions of a certain project

<figure><img src="/files/gMSoh6gaw0q0KI3tsuqz" alt=""><figcaption></figcaption></figure>

Access the Statistics via the Statistics button in the action bar of your project.

<figure><img src="/files/N3wHStaUHUUEEcqp9SoQ" alt=""><figcaption></figcaption></figure>

The statistics overview shows all transactions of a project and the key data for the last 12 months in the Sales graph

<figure><img src="/files/Q38njuYjLfc5YKpAovFA" alt=""><figcaption></figcaption></figure>

Aside from charting some of the project's Key Data, the Statistics display each transaction in your project and makes it simple to understand the type of transaction as well as the transaction key data and structure, just like the [Transactions overview](https://docs.nmkr.io/nmkr-studio/account/transactions), which displays the entire accounts transactions:

* Time and Date (UTC)
* Type
* Project
* Price Paid
* Amount of NFTs
* Total Costs
* Income
* Transaction ID
* Payout wallet (receiving wallet)

### View more details of a specific transaction

<figure><img src="/files/fIpLcBicoOQXfo8vLFEf" alt=""><figcaption><p>Expand transaction details by clicking the row</p></figcaption></figure>

Just click the transaction row to expand more details about a specific transaction.\
It will show you additional data:

* Paid from user
* MinUtxo (sendback)
* Network Fees
* Mint Fees
* Incomes
* Discount
* NFT name and image
* Fingerprint of the token

## Export statistics overview

Please click on "export all Transactions" in the lower left corner to export the statistics overview. This will immediately download a CSV-file packed in a Zip-file containing all of the above-mentioned data. It can be opened in any spreadsheet program, such as Microsoft Excel, Apple Numbers, or Google Sheets.


# DID - Decentralized Identifier

You can prove your identity and creative ownership over NFT by creating your NFT Identity.

For the DID, we worked together with [IAMX](https://iamx.id/) to allow you to prove your identity and ownership over an NFT project directly from NMKR Studio. The DIDs gives you the possibility to connect different accounts via IAMX by logging in and confirming the account. These details will be linked to your DID, which will be added to your policy in the same way as the [royalties](https://docs.nmkr.io/nmkr-studio/project/royalties) are.\
Web3 Applications like secondary markets are then able to scan the policy ID for the DIDs mint transaction and it's metadata which contains the DID details to instantly verify your project and connected accounts.<br>

{% hint style="info" %}
The DID won't be automatically added to every project in your NMKR Studio account, so you have to continue the minting process for every Project. However, if a [project shares the same policy ID](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects) it is not necessary to create the DID for every project separately.
{% endhint %}

<figure><img src="/files/k2XFkem81ja3OeB3Wbv7" alt=""><figcaption></figcaption></figure>

### Create DID

Go to the [Projects overview](https://docs.nmkr.io/nmkr-studio/project#nft-projects-tab) and click on the "Collection Tokens" under "Manage Project" on the right side of your project.&#x20;

<figure><img src="/files/CWtczskC5xuvgRJJZZ0Q" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
It is possible to mint the royalty token and the DID at the same time, so you only pay 1 mint coupon.
{% endhint %}

Switch to the "Identity Token" tab and click "confirm identity on IAMX" in the following window and follow the steps there as explained.

<figure><img src="/files/uU4cb5MNQ3SRrNmUGOwZ" alt=""><figcaption></figcaption></figure>

In step one, clicking on "Confirm identity on IAMX" will forward you to the landing page of IAMX where you now connect your accounts to create your DID. Click on each platform to log-in to your account and confirm to connect them to the DID. You can unlink and relink the accounts every time by revisiting <https://nftidentity.iamx.id/>.

<figure><img src="/files/5DVK3MRgIbk6qt8elUVr" alt=""><figcaption><p>Connect your accounts to your DID</p></figcaption></figure>

The step two on IAMX asks you to choose the DID-method, for now there is only the preselected IPFS-method available, so you can skip this step for now.

<figure><img src="/files/uRtjk4G8MAgwqlyMZmqj" alt=""><figcaption><p>Select DID-method</p></figcaption></figure>

Confirm your connected accounts and create your NFT Identity in the third step.

<figure><img src="/files/PUKWCJe5kxWz811UwLlR" alt=""><figcaption><p>Create your DID</p></figcaption></figure>

You will be shown your DID in the following. You can copy the code for yourself, but it is not necessary to continue using it in NMKR Studio. You can now close this window and go back to NMKR Studio where you'll now see your identity as confirmed. Click "Mint Token" to finish the process.

<figure><img src="/files/IBBC0ArAelbmXxQm2zNV" alt=""><figcaption><p>Finish the setup of the DID by clicking "Mint Token"</p></figcaption></figure>

{% hint style="info" %}
As already mentioned, the token will be burned right after the minting. If you want to check the token for it's metadata, please search for your policy ID on [cardanoscan.io](https://cardanoscan.io), go to the very first asset (without an asset\_name) and check the latest mint transaction. This mint transaction will contain the metadata for your DID.
{% endhint %}

### DID set up video tutorial by Patrick (old UI)

{% embed url="<https://youtu.be/EXreVljSWKg>" %}

#### Learn more about IAMX NFT Identity

{% embed url="<https://nftidentity.iamx.id/>" %}
Learn more about IAMX
{% endembed %}


# Notifications

Receive notifications about sales of your project via E-Mail or Webhook

NMKR Studio now allows also to send notifications to you for successful sales from your project.\
The notifications can be sent via E-Mail or Webhook.\
Please keep in mind that this feature is in beta phase now, if you experience any issues, [please let us know](https://nmkr.io/support).

<figure><img src="/files/jT338BAiXwBSyn8d8MJW" alt=""><figcaption></figcaption></figure>

## Set up Notifications for your project

The Notifications can be enabled for every project separately. Go to the Notifications tab in the [edit section](https://docs.nmkr.io/nmkr-studio/project/edit) of your project. Click "notifications".

<figure><img src="/files/Ad4M1ITCflHE899wKSvb" alt=""><figcaption><p>Notifications tab in the edit section of your project</p></figcaption></figure>

### Notifications via Email

Select E-Mail in the dropdown and insert your desired email address and activate the notifications. Click on "save".

<figure><img src="/files/cfagk0s8y4QJzgPrlKIA" alt=""><figcaption></figcaption></figure>

Click "save changes" in the notifications tab to save the newly added notification. You will now receive notification E-Mails about successful sales of your projects NFTs.

{% hint style="info" %}
As you may receive a lot of Emails, please whitelist the domain @nmkr.io with your E-mail provider.&#x20;
{% endhint %}

### Notifications via Webhook

A webhook is a callback function that uses HTTP to allow lightweight, event-driven communication between two application programming interfaces (APIs).\
\
To enable Notifications via Webhook please select Webhook in the dropdown.\
Insert your API Url Address and note the secret key.\
Activate the notification and klick "OK".

<figure><img src="/files/AY5RmDPLB8nUo0OG57u8" alt=""><figcaption></figcaption></figure>

Click "save changes" in the notifications tab to save the newly added notification.

#### Response classes

Webhooks will be called for every single sale in the project. The following shows the response classes that will be sent:

```
public enum NotificationEventTypes
    {
        transactionconfirmed,
        transactionfinished,
        transactioncanceled,
    }

    public class NotificationSaleNft
    {
        public string NftUid { get; set; }
        public string NftName { get; set; }
        public string NftNameInHex { get; set; }
        public string AssetId { get; set; }
        public string PolicyId { get; set; }
        public long Count { get; set; }
        public long Multiplier { get; set; }
    }

    public class NotificationSaleClass
    {
        [JsonConverter(typeof(StringEnumConverter))]
        public NotificationEventTypes EventType { get; set; }
        public string ProjectName { get; set; }
        public string ProjectUid { get; set; }

        [JsonConverter(typeof(StringEnumConverter))]
        public TransactionTypes SaleType { get; set; }
        public DateTime SaleDate { get; set; }
        public long Price { get; set; }
        public long? MintingCosts { get; set; }
        public long? SendbackCosts { get; set; }
        public long? NetworkFees { get; set; }
        public long? NMKRRewards { get; set; }
        public long? Discount { get; set; }
        public NotificationSaleNft[] NotificationSaleNfts { get; set; }
        public string TxHash { get; set; }
        public string ReceiverAddress { get; set; }
        public string OriginatorAddress { get; set; }
        public string StakeAddressReceiver { get; set; }
        public object DetailResults { get; set; }
    }
```

#### Payload example

```
{
  "EventType": "transactionconfirmed",
  "ProjectName": "a project",
  "ProjectUid": "9e2d000a-ed53-4db4-819b-xyz123456",
  "SaleType": "paidonprojectaddress",
  "SaleDate": "2022-11-23T12:14:43",
  "Price": 10000000,
  "MintingCosts": 2000000,
  "SendbackCosts": 2000000,
  "NetworkFees": 203341,
  "NMKRRewards": 0,
  "Discount": null,
  "NotificationSaleNfts": [
    {
      "NftId": 123456,
      "NftUid": "0f79ae64-aad4-4dcf-9b22-xyz1234",
      "NftName": "Thetoken0001",
      "NftNameInHex": "546865746F6B65630303031",
      "AssetId": "9ae5eba7256cdd1f51834676dcde4f1fea491e8adbb00ea632fb788e54686xyz12345677",
      "PolicyId": "9ae5eba7256cdd1f51834676dcde4f1fea491e8adbbxyz123456",
      "Count": 1,
      "Multiplier": 1
    }
  ],
  "TxHash": "b08aad615f599c80a243882330c99d33e07f443ca1b4d043f448bfxyz1234",
  "ReceiverAddress": "addr_test1qrqtawercjsj29xyq4kssxeru6s33y68kwmh8tj00q4vkhaeucuvwvhegqxf6ka0ewy0pallk044nnrtsj8zxyz1234",
  "OriginatorAddress": "addr_test1qrqtawercjsj29xyq4kssxeru6s33y68kwmh8tj00q4vkhaeucuvwvhegqxf6ka0ewy0pallk044nxyz1234",
  "StakeAddressReceiver": "stake_test1uzu7vwx8xtu5qryatwhuhz8s7llm866ee34cfr3tukxyz1234",
  "DetailResults": null,
  "Metadata": "{\n  \"721\": {\n    \"9ae5eba7256cdd1f51834676dcde4f1fea491e8adbbxyz123456\": 
  {\n      \"Thetoken0001\": {\n        \"name\": \"Thetoken0001\",\n        
  \"image\": \"ipfs://QmUojMDe1hviWNcL5o23xTiQUBiKaFmVxyz123456\",\n        
  \"mediaType\": \"image/jpeg\",\n        \"description\": \"\",\n        
  \"files\": [\n          {\n            \"name\": \"Thetoken0001\",\n            
  \"mediaType\": \"image/jpeg\",\n           
   \"src\": \"ipfs://QmUojMDe1hviWNcL5o23xTiQUBiKaFmVT6yxyz1234\"\n          
   }\n        ]\n      }\n    },\n    \"version\": \"1.0\"\n  }\n}"
}
```


# Royalties

NFT royalties pay you a percentage of the sale price when your NFT creation is sold on a marketplace.

<figure><img src="/files/NTPGh7pnHIHRZJOEfdYd" alt=""><figcaption></figcaption></figure>

### What are royalties?

Royalties are a great way to create extra revenue for you project by earning a fixed percentage of secondary-market trades that occur on participating marketplaces. Royalties are applied to a specific Policy ID/Wallet Address Pair and apply to all NFTs minted under that policy.\
\
On Cardano we use the [CIP-0027 Royalty Standard](https://developers.cardano.org/docs/governance/cardano-improvement-proposals/cip-0027/).\
This proposed standard will ensure that royalties are distributed uniformly across the secondary market space. It is simple to implement and does not require the use of a smart contract. However, it is scalable enough to allow the asset creator to use a downstream smart contract. It was created with the input of Artano, BuffyBot, CNFT.io, Digital Syndicate, Fencemaker, MADinArt, NMKR formerly NFT-Maker.io, Hydrun, Tokhun, and many more.

{% hint style="info" %}
Please keep in mind that secondary markets do not regularly support Royalties for [Fungible Tokens](https://docs.nmkr.io/nmkr-studio/token#fungible-token).
{% endhint %}

### Set up royalties for your project.

{% hint style="warning" %}
Before setting up royalties please note that the percentage and the receiving address can not be changed after the [policy](https://docs.nmkr.io/nmkr-studio/project/policy) is locked and the royalties can't be removed from the policy. Therefore it could make sense to use a [Split Address](https://docs.nmkr.io/nmkr-studio/tools/split-addresses) as it brings more felxibility at least about the distribution of the royalty revenue.\
\
Please keep in mind that the royalties apply to the policy ID and thus to every token minted under this policy ID. As a result, minting another royalty token for a [duplicated project](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects) is unnecessary.\
\
Some secondary markets will ONLY be compatible with Royalties IF it was the first Token Minted related to the project, this is why **we only allow the minting of a royalty token to unused policies**.
{% endhint %}

Access the Royalties via the "Collection Token" button in the actions bar of your project.

<figure><img src="/files/ShREw1IfEkNBZFCuXwFJ" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
It is possible to mint the royalty token and the DID at the same time, so you only pay 1 mint coupon.
{% endhint %}

Minting a royalty token will take one [mint coupon](https://docs.nmkr.io/nmkr-studio/account/mint-coupons).\
After clicking the button in the actions bar of your project, you will be asked to submit a receiving address, which could also be a [Split Address](https://docs.nmkr.io/nmkr-studio/tools/split-addresses) and to specify a royalty percentage.<br>

<figure><img src="/files/XexfhvS1VqEKJ83zg7GE" alt=""><figcaption><p>Specify the royalty percentage and submit your receiver address</p></figcaption></figure>

The token will be minted and directly burned after you click 'Mint royalty token' and confirm the creation of the token. This is the standard procedure for maintaining the correct total supply of tokens on the policy.

### Edit/remove the royalty settings

The royalty settings like address and percentage can be edited as long as the [**policy**](https://docs.nmkr.io/nmkr-studio/project/policy) **isn't locked**.\
Please just repeat the process of minting a royalty token again.<br>

Specify the new address and percentage in the following tab and click on mint.\
To remove the royalties from the policy, please use the percentage "0,0%".

<figure><img src="/files/sxR06R6sY4bc2Fkt1WEs" alt=""><figcaption></figcaption></figure>

### Check Royalty settings

If you need to check your royalty settings afterwards on-chain, you can search your policy ID on [Cardanoscan.io](https://cardanoscan.io). The royalty token is the very first token on your policy and has no asset name. Go to the assets mint transaction and then view the metadata tab. By clicking on the metadata row, you will expand the full details:

```json
{
  "777": {
    "rate": "0.2",
    "addr": "0x616796190577269c59e85fae13708fcfe602124de63cd7e339d01444c"
  }
}
```

&#x20;The 'rate' field displays the specified percentage. A rate of "1.0" would be 100%. The following address can be divided into two parts. Each line of metadata has a character limit of 63 characters, which is why it may be written in an array.


# Additional Payout Wallets

Split your sales revenue to multiple wallet addresses

This feature is especially useful if you are working on a project with a team where each member should receive a portion of the sales revenue. The additional payout wallet feature allows you to specify multiple additional wallets to receive a portion of the sales revenue besides the main payout wallet in your [project settings](https://docs.nmkr.io/nmkr-studio/project/edit#edit-fundamental-settings-of-your-project).

{% hint style="info" %}
To cover the minting cost in any case the maximum share that can be split to multiple wallets is summarised 80%. The remaining 20% will go to the **main payout wallet** that is specified in your [project settings](https://docs.nmkr.io/nmkr-studio/project/edit#edit-fundamental-settings-of-your-project). \
\
**Consider the minting fees**, the sendback (if you don't use [MultiSig](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment), and the transaction costs to be **deducted from the 20% main share**. [Learn more about the fees here](https://docs.nmkr.io/nmkr-studio/pricing).
{% endhint %}

<figure><img src="/files/ffXJADC0Votk3Fqs8YAU" alt=""><figcaption></figcaption></figure>

### Add the additional payout wallets to your account wallets

To select the additional payout wallets later for your project, you have to [add them to your account first](https://docs.nmkr.io/nmkr-studio/account/wallets#add-a-cardano-wallet).&#x20;

### Specify the additional payout wallets for your project

Additional payout wallets are defined for every project separately. Therefore you find the button "Additional Payout Wallets" in the actions bar on the right of every project in your [NFT projects tab](https://docs.nmkr.io/nmkr-studio/project#nft-projects-tab).

<figure><img src="/files/lOa8mncLgWVexBCLGAil" alt=""><figcaption></figcaption></figure>

Click "Add new Payout wallet" in the following window.

<figure><img src="/files/CoDWaH4OGd3YphFlpEu6" alt=""><figcaption><p>Add new payout wallet</p></figcaption></figure>

<figure><img src="/files/oeIv0P4rxWmUjbTG2Lap" alt=""><figcaption><p>Split the payout in percent</p></figcaption></figure>

Select one of the [previously specified wallets](https://docs.nmkr.io/nmkr-studio/project/additional-payout-wallets#add-the-additional-payout-wallets-to-your-account-wallets) in the dropdown selection and specify the payout amount for this wallet. The payout share can be defined as percentage value of the total revenue or a fixed value. If you specify a fixed value, please define the share in Lovelace ( 1 ADA = 1.000.000 Lovelace). If you want to split to a Byron address (very old Cardano address), a minimum of 2ADA is required.

Click "Save" and repeat the workaround if you want to add another wallet.

{% hint style="info" %}
There is no limitation in the amount of wallets that can be added here, but the total share  that can be split to all wallets here is 80%.
{% endhint %}

### Affiliate Links and payout wallets

Optional, you can set a custom property which can work like an affiliate link. You can add the custom property at the end of your NMKR- Pay payment link you'll get, once the sales is set up \_ e.g.  paymentlink...\&cp=CustomProperty. So you can track in your sales transactions, who used this link to mint. Find more detailed description [here](/nmkr-studio/project/affiliate-links).

<figure><img src="/files/uAPV7lobi1qmGS27vOnL" alt=""><figcaption></figcaption></figure>


# Affiliate links

How to create and use a custom property

Affiliate links are a way for you, as a project owner, to let other people (affiliates) promote and sell your NFTs. \
In the Additional Payout Wallets window, you're able to set a custom Property, which can be added to the NMKR- Pay link and be used like an affiliate link. You can set up different custom properties and set the percentage reward, if the custom property is used from a buyer.

First, after setting up your NFTs, you'll have to[ set up the prices for your NFTs](/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices), what will generate the NMKR- Pay link to your Project.

Second, you have to add the additional payout Wallets you want to reward, to your [Wallet list](/nmkr-studio/account/wallets)

Then navigate back to your Project, select "Manage Project" and the "Add Payoutwallets"&#x20;

<figure><img src="/files/LLdm7T1O8UpcNiPSq9pJ" alt=""><figcaption></figcaption></figure>

Now you're able to add additional payout wallets to your Project.

<figure><img src="/files/DKbKACi2c6XJEQGL3s5G" alt=""><figcaption><p>In this example, the Project Owner wants to add three affiliates (Dennis, Julian and Larry), with 10% reward, each.</p></figcaption></figure>

<figure><img src="/files/Fv1ZQL2kpaJ3UVTTBBMk" alt=""><figcaption><p>You can see, 10% reward and the custom property "DENNIS" is set</p></figcaption></figure>

<figure><img src="/files/ZX3ffJ9eD7knWkidN4oQ" alt=""><figcaption><p>The three additional payout wallets, with each having it's own custom property, is set.</p></figcaption></figure>

From here, navigate to your project's [pricelist ](/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices)where you find your NMKR-Pay link

<figure><img src="/files/Szp2DaTiZZJyfbtdZULy" alt=""><figcaption><p>NMKR Pay link in the lower section</p></figcaption></figure>

Using this pay link (example: <https://pay.nmkr.io/?p=37584c18855f4847b6e085c45489c385\\&c=1>), a buyer will buy a random NFT and the Project owner will get his payout.

<figure><img src="/files/ajIOo5f7V6o6qRXiDnfn" alt="" width="339"><figcaption><p>NMKR Pay window with payment link to buy 1 random NFT</p></figcaption></figure>

You can now add the custom property at the end of the link using "\&cp= " to create the affiliate link. E.g. <https://pay.nmkr.io/?p=37584c18855f4847b6e085c45489c385\\&c=1><mark style="color:green;">\&cp=DENNIS</mark> or \
<https://pay.nmkr.io/?p=37584c18855f4847b6e085c45489c385\\&c=1><mark style="color:green;">\&cp=JULIAN</mark> or\ <mark style="color:green;">\&cp=Whatever you decide</mark> (I used capital letters in my example, but it doesn't matter what you write as custom property. It just has to match)

<div><figure><img src="/files/Mu716nBv4s6JJDPIBKqA" alt=""><figcaption></figcaption></figure> <figure><img src="/files/SbDj6USraC3PC17VQfgE" alt=""><figcaption></figcaption></figure></div>

As you see, the price for 1 random NFT for the buyer is always the same. The difference is, if the buyer buys with the custom property at the end of the link, Dennis or Julian automatically get 10% rewards from the sell\_ the rest is still paid out to the project owner.


# Export Metadata as Zip

Export the Metadata of your project stored in a Zip file

This function allows you to export the metadata as single .metadata files of your projects tokens **without the placeholders**. The placeholders will be replaced with the exact values of every token.\
This can be very helpful to update your project, like explained in [bulk edit NFTs](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#prepare-for-bulk-update-with-sftp).

Access the export via the button in the actions bar of your project.

<figure><img src="/files/uQ62WqsQ7NnajhFMf1Q9" alt=""><figcaption></figcaption></figure>


# Export NFT as csv

Export your project details as csv.

This option allows you to download a csv sheet that contains all data about the tokens iny our project.

<figure><img src="/files/Eh98gujWcgwvUC7f6KIM" alt=""><figcaption></figcaption></figure>

The downloaded csv file will now contain the following information about each token in your project and can be viewed in any spreadsheet-software like Excel or Google Sheets.<br>

* Token ID
* Token UID
* Tokenname
* Displayname
* Detaildata
* IpfsHash (mainfile)
* State
* Minted (false or true)
* PolicyId
* AssetId
* Assetname
* Specific Payment Gateway Link
* IsSubfile (false or true)
* MainFileId


# Mint and Send Jobs

Show a list of all mint and send jobs

This functiontion allows you to show a list of all open and executed mint and send jobs from [manual minting](https://docs.nmkr.io/nmkr-studio/minting/manual-minting) and the [airdropper](https://docs.nmkr.io/nmkr-studio/minting/airdropper).

<figure><img src="/files/1Owou0OQd8jvi19qxOPX" alt=""><figcaption></figcaption></figure>

Access the Mint and send jobs via the button in the actions bar of your project.

It will list all jobs, their date, state, receiver address and transaction ID.\
If a job was cancelled or fails, this will be also shown here. The state executed means, the job is started, but not finished yet. Once a job is finished the green success state will be added.

<figure><img src="/files/OwAHifijAHkweHqdARkl" alt=""><figcaption></figcaption></figure>


# Export placeholder.csv

Export the placeholder.csv metadata sheet of your project

The placeholder.csv file is a sheet that contains the[ metadata](https://docs.nmkr.io/nmkr-studio/token/metadata) of the assets in your project.\
You can export it via the button in the actions bar of your project.

<figure><img src="/files/jHwhsNxxH6QEXQaeJN7K" alt=""><figcaption></figcaption></figure>

You can use this file as template for the [metadata upload via placeholder.csv](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-with-placeholder.csv) or also to [fix errors in the metadata](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#prepare-for-bulk-update-with-placeholder.csv).


# Token

Before you start your project, learn the distinction between NFT and FT.

## Non-Fungible Token or Fungible Token

As you already noticed, NMKR Studio allows you to create [Non-Fungible Tokens](https://docs.nmkr.io/nmkr-studio/token#non-fungible-token) as well as [Fungible Tokens](https://docs.nmkr.io/nmkr-studio/token#fungible-token).

### Non-Fungible Token

A Non-Fungible Token is a completely unique Asset...

### Fungible Token

Unlike Non-Fungible tokens, Fungible tokens are about as "un-unique" as you can possibly get. They are completely interchangeable, have identical value and are indistinguishable from one another.

A good way to think about "Fungible" is thinking about FIAT money. From the point of view of trading, the £10 Note in your hand is **EXACTLY** the same as the £10 Note in someone else's wallet or the TWO £5 Notes on your table.

{% hint style="info" %}
Note - this analogy is slightly wrong, as you may know that physical bank notes have a serial number on them. For the purpose of this explanation, pretend that they don't.
{% endhint %}

Similarly, $1 = $1, 1 BTC = 1 BTC, 1 ADA = 1 ADA and crucially there is simply no concept of 'I want **THAT** specific ADA' because there is no specific ADA, only an amount of ADA held in a wallet.

That, is what is means to be Fungible.

### Duplicated NFTs

You may have noticed that we have a guide for creating [Serialised Duplicate NFTs](https://docs.nmkr.io/nmkr-studio/token/duplicate). This is a different concept, so it is important that we outline the difference.

A duplicate NFT created with NMKR Studio is an NFT that has the exact same media and metadata, **other than** a slightly different Token Name and Display Name (Numbering / Serialization).

In this context, Duplicate NFTs would be the addition of a Serial Number associated with what would technically otherwise be a fungible Token. Because they have a serial number, it is possible for a person to say that they hold 'item number 6127' or that they want to purchase 'item number 777'. This minor difference is what makes the tokens Non-Fungible (although in a sense, you could argue that these are almost 'semi-NFT's').


# Manage Tokens Tab

Manage your NFTs in this tab

This tab is accessible via the actions bar of your project.

<figure><img src="/files/r1fp8xSE0xvUq0BWo2WK" alt=""><figcaption></figcaption></figure>

The manage Token Tab is where you organize all Tokens/Assets of a project. It gives you a good overview and you can use some specific token features from here.

<figure><img src="/files/tz67zijBwIAHkyT9EZXN" alt=""><figcaption><p>Manage Tokens of your projects in this tab</p></figcaption></figure>

#### Token ID/Name

In this column you will find the tokens ID, below the [asset name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name), the token UID and the policy of the token.

#### State of an NFT

There are several different states your NFTs could have. This states helps you to identify the current state of each token in your project.

* Free (available for minting)
* Reserved (the token is reserved for a customer till the reservation time ends or it's paid)
* Sold / Minted (the token is sold and minted, click 'minted' to view it in pool.pm)
* Burned (your token is burned on-chain)
* *Deleted (this state won't show up in your project and is only important if you use the API)*
* *Paid (this is a temporary state and also only relevant for you if you use our API)*<br>

#### Filter Tokens by state

For a better overview, you can use the filter option in the overview. It allows you to filter by state of the token.

<figure><img src="/files/hvJzIU7FyrFpHAC1afe4" alt=""><figcaption><p>Filter your overview by token state</p></figcaption></figure>

### Block specific NFTs

To block specific NFTs from being sold, please checkmark the tokens, select "Block NFTs from being sold" in the dropdown and press execute. Your tokens will now show up as blocked and can also be filtered by it.

<figure><img src="/files/lc8ExRhn9pBKgHsQ3u9P" alt=""><figcaption></figcaption></figure>


# Upload

Upload tokens to your project

For [single uploads](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens) or [upload of up to 1000 files](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-files-and-metadata/bulk-upload-via-drag-and-drop) it makes sense to use the user interface upload.\
\
For uploading a higher number of tokens, please use the [Bulk upload via SFTP](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp). This workaround allows you to basically drag and drop files directly into your project utilizing the SFTP Server.

### Files

The so-called main file will always be the first uploaded file to your token.\
In your metadata it adds up to the ["image" field](https://docs.nmkr.io/nmkr-studio/project/metadata-template#image), which is the one outside of the [filesection](https://docs.nmkr.io/nmkr-studio/project/metadata-template#file-section).

{% hint style="info" %}
**NMKR Studio only allows to upload** an image or animated gif as main-file as this will be used as thumbnail in wallets, secondary markets and on explorers like [pool.pm](https://pool.pm)
{% endhint %}

Subfiles are additional files that will be added to your token. This can be very different [file formats](https://docs.nmkr.io/nmkr-studio/token/upload#you-can-all-upload-additional-subfiles-for-such-as) like Video and Audiofiles, but also application files and Textfiles.\
Subfiles are supported directly in the [User Interface based upload workaround](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens) and also with [bulk uploading](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp).

#### File Formats:

You can upload additional subfiles, such as:\
\
Application: Zip; PDF; Json; GITF+Json, Octet-Stream, Xlsx

Audio: Mpeg; Ogg; WAV.

Image:  Bmp; SVG+XML.&#x20;

Text: HTML; Javascript; Plain Text; CSS.

Video: Mpeg; Mp4; Ogg; Quicktime; Webm.

{% hint style="info" %}
There is no limitation about the resolution of a media file, but the upload via **User Interface is limited to a filesize of 50mb**. \
\
If you want to upload files that are bigger than that, please use the [SFTP Bulk Upload](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp) for files till 250mb. \
\
For Files greater than 250mb we recommend an external upload directly to[ IPFS](https://docs.nmkr.io/introduction/what-is-ipfs) through an upload-and-pinning-service like [piniata.cloud](https://www.pinata.cloud/) and [add the IPFS hash of these files directly to your metadata](https://docs.nmkr.io/nmkr-studio/token/edit#add-externally-uploaded-files-via-ipfs-hash). \
\
The maximum storage size on our servers that is provided to a user is currently not limited.
{% endhint %}


# Upload single tokens

Upload single tokens to your project using the User Interface

After you created your project you now want to add tokens to it, this can be done by uplading files to your project. This topic explains how to use the single token upload in the NMKR Studio User Interface. If you want to upload a higher number of tokens in bulk, please use the [bulk upload via SFTP](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp).

<figure><img src="/files/upxfZxZQORMS4lk21TQX" alt=""><figcaption></figcaption></figure>

### Upload a single token to your project

To start the uploading process of a single tokens please go to the [Manage NFTs tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) of your newly created [project](https://docs.nmkr.io/nmkr-studio/project) and click "Upload & Pin new NFT".

<figure><img src="/files/EV1w6YaRfUanvxnV6PGr" alt=""><figcaption><p>Upload a token to your project</p></figcaption></figure>

The following window is separated in three main tabs (Description, Files and Metadata override) and one optional tab (Placeholder Data) which only shows up if you specified any [custom fields in your metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders).

<figure><img src="/files/R3k9vCS5RsaboUys3wlJ" alt=""><figcaption></figcaption></figure>

### Description tab

The description tab is where you change the basic information about your token like the Tokenname, the Displayname(optional) and the description(optional).\
\
The Tokenname is related to the [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) in your metadata and should be always matching. Therefore we also recommend to always use the [\<asset\_name> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) if you use the [Metadata override](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens#metadata-override-tab). It is not allowed to hold any special characters, also no spaces and is limited to 32 characters.

{% hint style="warning" %}
**We recommend that the numbering of your tokens rarities are not related to the token numbers.**\
If this needs to be the case, we recommend that the asset\_*name* / token name of an asset does not correlate in any way with the display\_name and is randomly generated. \
\
The reason for that is simple; if you are going to use [MultiSig Payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) in your project, the buyer could see the [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) (not the [display\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name)) in the transaction when he is signing the payment transaction. Therefore, a buyer could decide to cancel the transaction if he sees an "unrare number" and start over again.
{% endhint %}

The [displayname](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) is where you want to add special characters and longer names with up to 63 characters (e.g. Landplot #1011). This [displayname](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name), if given, will replace the tokenname on explorers like pool.pm. The display name replaces the [\<display\_name> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) in your metadata template.\
\
The description will replace the [\<description> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#description) in your metadata template. It can also contain special characters and up to 63 characters. if you want to have the same description for all the tokens in your project, it makes sense to replace the [\<description> placeholder in the metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#description) with hard values.

<figure><img src="/files/WpLLt5sbpuzOnB0nS2UQ" alt=""><figcaption><p>The description tab of your token</p></figcaption></figure>

### Files tab

The files tab of your token allows you to add files to your token, this can be all kind of [file formats](https://docs.nmkr.io/nmkr-studio/token/upload#file-formats).\
But you have to keep in mind that the [main file](#upload-main-file), always has to be an image or animated gif and different types of files have to be [uploaded as subfile](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens#upload-subfiles).\
\
The functions to submit IPFS hashes directly and upload files via URL are not supported in the current version of NMKR Studio (coming soon).\
If you want use external IPFS hashes of already uploaded and pinned files, please add them directly to your metadata in the [metadata override](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens#metadata-override-tab) or the [metadata that you upload via SFTP](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-json).

#### &#x20;Upload main file

To upload your main file simply click on the "Upload & Pin" button. This will open your file explorer where you are now able to select the desired file. The Mimetype will be selected automatically.

{% hint style="warning" %}
The main file must be an image or animated gif, because this file will be taken as thumbnail in wallets, explorers and on secondary merkats.\
It may make sense to upload a downscaled version here and the full scale version as subfile for a faster loading time on above mentioned platforms.
{% endhint %}

<figure><img src="/files/HvGl3WtN5ZyGpmgwFp04" alt=""><figcaption><p>Upload and Pin your main file</p></figcaption></figure>

#### Upload Subfiles

[Subfiles](https://docs.nmkr.io/nmkr-studio/token/upload#subfiles) can be all kind of [file formats](https://docs.nmkr.io/nmkr-studio/token/upload#file-formats) like video, audio, text or application files.

Click the "Add Subfiles" button to add another file field where you want to "Upload & Pin" another file like in the first step of [uploading a main file](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens#upload-main-file). Please note that some file types can't be shown as preview on the right side of the token, this is not an error.

<figure><img src="/files/qn6JSPORp0L2TL8lg8nm" alt=""><figcaption></figcaption></figure>

You can specify a file name (max. 32 characters, no spaces or special characters) and detail data (63 characters) here to add more details to the subfile(optional).\
The detail data will only show up if you [specify this field in your metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#detail-data).

If you want to add multiple subfiles, repeat the last step.

### Metadata override tab

The Metadata Tab allows you to[ set token specific Metadata](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata) that does not use the [Metadata Template](https://docs.nmkr.io/nmkr-studio/project/metadata-template).

{% hint style="info" %}
It is important that the metadata added here is complete.\
It is recommended to use the \<asset\_name>, \<display\_name>, \<policy\_id>, \<ipfs\_link> and \<mime\_type> placeholders in there to make sure, that it has the correct values. \
However, if you want to add metadata that already contains the values for above mentioned placeholders, the metadata override tab is where you want to place them.\
\
An asset\_name that differs from the token name in NMKR Studio will cause errors when minting.\
\
Also make sure to use strings (" ") and not only values.\
E.g.  "traitcount": "12" would be correct.\
"traitcount: 12 would NOT be correct.
{% endhint %}

Add the complete metadata with "721" in the metadata override and click on "save changes".\
It is recommended to use the [metadata check](https://docs.nmkr.io/nmkr-studio/token/metadata/metadata-check) afterwards to identify eventual issues.

<figure><img src="/files/8qOE1HPRBByVBkn2xX6R" alt=""><figcaption><p>Metadata override</p></figcaption></figure>

#### Add externally uploaded files via IPFS hash

You can add files to your token that were externally uploaded to IPFS. In order to do this, please just insert the IPFS hash directly to the metadata of your token, as you see in the example below. Don't forget to add the [\<mime\_type> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#mediatype) to have the correct file format fetched.

```
            "mediaType": "<mime_type>",
            "src": "ipfs://QmZNqgUHhGukXD27pAZtZE5BEkx6VXB1AhQVmK55QCd31y"
```

#### Placeholder Data Tab

The placeholder tab will only show up if you added any [custom fields to your metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders).\
You are now able to specify the token-specific values via the user interface in the Placeholder Data Tab of each single token that is uploaded to the project.

<figure><img src="/files/trqRo7omeXq5wAF0kP7R" alt=""><figcaption><p>Placeholder Data Tab in the edit section fo your token</p></figcaption></figure>

As this is obviously no suitable way to add metadata values to a higher number of tokens, please use any other [bulk uploading method](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-json) to bulk add metadata to your tokens. The easiest for people without much coding experience should be the [placeholder.csv method](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-with-placeholder.csv).


# Bulk Upload Files and Metadata

NMKR Studio allows you to upload files in bulk directly from the user interface.

Upload up to 1000 files directly from the user interface using drag and drop, or upload larger batches in bulk using SFTP. However, both options require proper file naming and uploading the files in the correct order.\
\
[Klick here if you want to learn how to use the User Interface](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-files-and-metadata/bulk-upload-via-drag-and-drop) or [here if you want to learn how to set up the SFTP Upload.](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-files-and-metadata/bulk-upload-via-sftp)

<figure><img src="/files/Qdkf3sGuEPRb3vnwdmzK" alt=""><figcaption></figcaption></figure>

### Upload in the correct order

1. Main file first (image or animated gif)
2. Subfiles next
3. Metadata (renamed JSON or Placeholder.csv) last. Maintain this order even if you modify the project, especially with the placeholder.csv method.

### Naming of the files

To make sure everything works correctly, you need to name your files in a certain way. The names of the files will determine the [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) and [display\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template?q=display_name) for the token. It's important to name subfiles and metadata properly too.<br>

For instance, uploading a file named "Token #0001.jpeg" will result in the following naming:

* The asset\_name/token name of the file will be "token0001".
* The display\_name (the name of the NFT) will be "Token #0001".

### Main files

After a correct naming of the files you can start to upload the files

{% hint style="info" %}
The **main file must be an image or animated gif,** because this file will be taken as thumbnail in wallets, explorers and on secondary merkats.\
It may make sense to upload a downscaled version here and the full scale version as [subfile](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-subfiles) for a faster loading time on above mentioned platforms.
{% endhint %}

{% hint style="warning" %}
**We recommend that the numbering of your tokens rarities are not related to the token numbers.**\
If this needs to be the case, we recommend that the [asset\_*name* / token name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) of an asset does not correlate in any way with the [display\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) and is randomly generated.\
Please use the [placeholder.csv method](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata#bulk-upload-metadata-with-placeholder.csv) to override the display names of your tokens.\
\
The reason for that is simple; if you are going to use [MultiSig Payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) in your project, the buyer could see the [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) (not the [display\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name)) in the transaction when he is signing the payment transaction. Therefore, a buyer could decide to cancel the transaction if he sees an "not rare/common number" and start over again.
{% endhint %}

### [Subfiles](https://docs.nmkr.io/nmkr-studio/token/upload#subfiles)

To add a subfile to an existing File/Token with the name "Token #0001", you need to upload a file named "Token #0001.subfile.1.png". This file will be added to the NFT as the first subfile.

If you want to add more subfiles, you can name them "Token #0001.subfile.2.png" for the second subfile, and "Token #0001.subfile.3.png" for the third subfile, and so on.

### Metadata JSON

{% hint style="info" %}
The uploaded metadata must be in the correct [Metadata Structure](https://docs.nmkr.io/nmkr-studio/token/metadata#metadata-structure).\
\
It is allowed to contain placeholders like \<policyID>, \<asset\_name>, \<display\_name>,\<ipfs\_link>,\<mime\_type> as these data is already given with the upload of the token and creation of the project.\
\
If you want, you could also [add ipfs hashs of externally uplaoded files](https://docs.nmkr.io/nmkr-studio/project/metadata-template#add-files-directly-to-the-metadata-template).
{% endhint %}

It is important that **.json files are renamed to .metadata files**. Please make sure in the detail info of your file that the suffix is not ".metadata.json."\
\
If you upload a file named "**Token #0001.metadata**", the previous uploaded File/Token with the name "Token #0001" will take this file as metadata (in the[ metadata override](https://docs.nmkr.io/nmkr-studio/token/edit#metadata-override-tab)).

### Metadata with placeholder.csv

The easiest method to upload metadata in bulk is the [placeholder.csv method](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata#upload-metadata-in-a-placeholder.csv-sheet). It allows you to use a spreadsheet that contains all metadata of your tokens to add them to your tokens in your project.


# Bulk Upload via Drag and Drop

NMKR Studio allows you to bulk upload files directly in the user interface

<figure><img src="/files/YI6M9nefJyet1x2kcYXh" alt=""><figcaption></figcaption></figure>

Navigate to the project where you want to upload tokens and click on "Manage Tokens".\
Select "Bulk upload" in the following tab and switch to the Drag and Drop tab, where you now insert the files you want to upload.<br>

{% hint style="info" %}
Please make sure to have a proper naming and that you upload the tokens in the correct order as specified [here](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-files-and-metadata).
{% endhint %}


# Bulk upload via SFTP

The bulk upload via SFTP allows you to drag and drop files directly from your device into the project.

With the via SFTP you are able to upload all [file formats that NMKR Studio supports](https://docs.nmkr.io/nmkr-studio/token/upload#file-formats),\
but with the advantage that you are now able to upload the files in bulk by drag and drop, as well as that bigger file sizes are supported

{% hint style="info" %}
Please use the [SFTP Bulk Upload](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp) for files till 250mb file size. \
\
For Files greater than 250mb we recommend an external upload directly to [IPFS](https://docs.nmkr.io/introduction/what-is-ipfs) through an upload-and-pinning-service like [piniata.cloud](https://www.pinata.cloud/) and [add the IPFS hash of these files directly to your metadata](https://docs.nmkr.io/nmkr-studio/token/edit#add-externally-uploaded-files-via-ipfs-hash). \
\
The maximum storage size on our servers that is provided to a user is currently not limited.
{% endhint %}

<figure><img src="/files/AhXs1HeFclJqfOytu0lx" alt=""><figcaption></figcaption></figure>

### Set up SFTP access

Download and install an SFTP-Client like [Cyberduck ](https://cyberduck.io/)or [FileZilla](https://filezilla-project.org/). Both clients are working very good, but in some rare cases it seems that FilaZilla is more reliable.

Go to the [Manage NFT Tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) of your project and select  "Bulk upload NFTs".

<figure><img src="/files/50QtHrO6CgA4cg0AYYbB" alt=""><figcaption></figcaption></figure>

This opens a new tab, where you now want to expand the Server information.

<figure><img src="/files/NfRemmnzCRhONsFn2I1M" alt=""><figcaption></figcaption></figure>

Enter the log-in details into your SFTP client and connect to the server.

<figure><img src="/files/H5n41FgfMViv6WvTZRW0" alt=""><figcaption></figcaption></figure>

You will now find a folder named by your customer ID that contains all your projects.

<figure><img src="/files/1XT0KWMukOabJes7wASF" alt=""><figcaption></figcaption></figure>

You can now continue to [upload your files to the projects](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp/bulk-upload-files-and-metadata) by simply dragging them from your local device into the correct project folder.


# Edit

Edit the uploaded and unminted token in NMKR Studio

It is always possible that you made some mistakes like typos or wrong metadata values with your token. That should be updated before you begin the minting process. In NMKR Studio it is very easy to edit specific token details.

{% hint style="info" %}
Plese note that changes to already minted tokens won't have any effect on the Blockchain as long as you haven't started the [remint & burn process to override the metadata of the token on-chain](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal).
{% endhint %}

<figure><img src="/files/7pbTAyd0A7A17j3mOS36" alt=""><figcaption></figcaption></figure>

## Edit your NFT or FT

The button to edit specific tokens can be found in the actions bar of your token on the [Manage NFT Tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab).

<figure><img src="/files/jo0ZcXTH3JHVz3f4l1mb" alt=""><figcaption></figcaption></figure>

The following window looks almost the same as the one you already know from the process of [uploading a token](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens). It is separated in three main tabs (Description, Files and Metadata override) and one optional tab (Placeholder Data) which only shows up if you specified any [custom fields in your metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders).

<figure><img src="/files/R3k9vCS5RsaboUys3wlJ" alt=""><figcaption></figcaption></figure>

### Description tab

The description tab is where you change the basic information about your token like the Tokenname, the Displayname(optional) and the description(optional).\
\
The Tokenname is related to the[ asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) in your metadata and should be always matching. Therefore we also recommend to always use the[ \<asset\_name> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) if you use the [Metadata override](https://docs.nmkr.io/nmkr-studio/token/edit#metadata-override-tab). It is limited to 32 characters.

{% hint style="info" %}
Since the recent update of NMKR Studio, the asset\_name can hold special characters and spaces.
{% endhint %}

{% hint style="warning" %}
We recommend that the asset\_*name* / token name of an asset does not correlate in any way with the display\_name and is randomly generate. The reason for that is simple; if you are going to use [MultiSig Payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) in your project, the buyer could see the assetname in the transaction when signing the payment transaction. If the numbering of your tokens rarities are related to the token numbers, a buyer could decide to cancel the transaction and start over again.
{% endhint %}

The [displayname](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) is where you want to add special characters and longer names with up to 63 characters (e.g. Landplot #1011). This displayname, if given, will replace the tokenname on explorers like pool.pm. The display name replaces the [\<display\_name> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) in your metadata template.\
\
The description will replace the [\<description> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#description-and-extended-description-with-more-than-63-characters) in your metadata template. It can also contain special characters and up to 63 characters. if you want to have the same description for all the tokens in your project, it makes sense to replace the [\<description> placeholder in the metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#description-and-extended-description-with-more-than-63-characters) with hard values.

<figure><img src="/files/WpLLt5sbpuzOnB0nS2UQ" alt=""><figcaption><p>The description tab of your token</p></figcaption></figure>

#### Static Price with specific sales

By standard, the NFTs price will be taken from the [pricelist](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist), but you are also allowed to specify a static price for every token manually here, please keep in mind that these prices won't work with [random sales](https://docs.nmkr.io/nmkr-studio/set-up-sales#random-sales) and you have to use the [specific payment links](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/specific-payment-links) of [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) for it.

### Files tab

The files tab of your token allows you to add [subfiles](https://docs.nmkr.io/nmkr-studio/token/upload#subfiles) to your tokens and also shows the[ IPFS hashes](https://docs.nmkr.io/introduction/what-is-ipfs) (e.g. QmZNqgUHhGukXD27pAZtZE5BEkx6VXB1AhQVmK55QCd31y) of the uploaded and pinned files. Subfiles that are [uploaded via the SFTP](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-subfiles), will also show up here.\
\
The functions to submit IPFS hashes directly and upload files via URL are not supported in the current version of NMKR Studio (coming soon).\
If you want use external IPFS hashes of already uploaded and pinned files, please add them directly to your metadata in the [metadata override](https://docs.nmkr.io/nmkr-studio/token/edit#metadata-override-tab) or the [metadata that you upload via SFTP](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-json).

<figure><img src="/files/p3UmV6WcAgtw9I4J1037" alt=""><figcaption><p>The files tab of your token</p></figcaption></figure>

If you want to add subfiles, please follow the same [workaround as you would do it when you upload a new token with subfiles](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens#upload-subfiles).

### Metadata override tab

The Metadata Tab allows you to [set token specific Metadata](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata) that does not use the [Metadata Template](https://docs.nmkr.io/nmkr-studio/project/metadata-template).

{% hint style="info" %}
It is important that the metadata added here is complete.\
It is recommended to use the \<asset\_name>, \<display\_name>, \<policy\_id>, \<ipfs\_link> and \<mime\_type> placeholders in there to make sure, that it has the correct values. \
However, if you want to add metadata that already contains the values for above mentioned placeholders, the metadata override tab is where you want to place them.\
\
An asset\_name that differs from the token name in NMKR Studio will cause errors when minting.\
\
Also make sure to use strings (" ") and not only values.\
E.g.  "traitcount": "12" would be correct.\
"traitcount: 12 would NOT be correct.
{% endhint %}

Add the complete metadata with "721" in the metadata override and click on "save changes".\
It is recommended to use the [metadata check](https://docs.nmkr.io/nmkr-studio/token/metadata/metadata-check) afterwards to identify eventual issues.

<figure><img src="/files/8qOE1HPRBByVBkn2xX6R" alt=""><figcaption><p>Metadata override</p></figcaption></figure>

#### Placeholders for subfiles

If you uploaded files via SFTP or the User Interface to NMKR Studio, but you need to use the metadata override, please make sure to use the correct subfile placeholders:

```
"files": [
          {
            "name": "<display_name>",
            "mediaType": "<mime_type_subfile_1>",
            "src": "<ipfs_link_subfile_1>"
          },
          {
            "name": "<display_name>",
            "mediaType": "<mime_type_subfile_2>",
            "src": "<ipfs_link_subfile_2>"
          }
        ],
```

#### Add externally uploaded files via IPFS hash

You can add files to your token that were externally uploaded to IPFS. In order to do this, please just insert the IPFS hash directly to the metadata of your token, as you see in the example below. Don't forget to add the [\<mime\_type> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#mediatype) to have the correct file format fetched.

```
            "name": "<display_name>
            "mediaType": "<mime_type>",
            "src": "ipfs://QmZNqgUHhGukXD27pAZtZE5BEkx6VXB1AhQVmK55QCd31y"
```

#### Placeholder Data Tab

The placeholder tab will only show up if you added any [custom fields to your metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders).\
You are now able to specify the token-specific values via the user interface in the Placeholder Data Tab of each single token that is uploaded to the project.

<figure><img src="/files/trqRo7omeXq5wAF0kP7R" alt=""><figcaption><p>Placeholder Data Tab in the edit section fo your token</p></figcaption></figure>

As this is obviously no suitable way to add metadata values to a higher number of tokens, please use any other [bulk uploading method](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-json) to bulk add metadata to your tokens. The easiest for people without much coding experience should be the [placeholder.csv method](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-with-placeholder.csv).


# Metadata

Specify the Tokens Metadata to replace the placeholders in the Metadata Template

<figure><img src="/files/bf7lQu10jrsnIYCLehMd" alt=""><figcaption></figcaption></figure>

## Metadata Structure

It is critical that your metadata adheres to the same structure as your template, which conforms to the Cardano [CIP-0025 Metadata standard](https://cips.cardano.org/cip/CIP-25). This is also the structure of the [Metadata Template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) for your project. NMKR Studio is build that way that you [specify a Metadata Template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) and just give the Tokens specific Values with the Metadata of the token. If you haven't specified that, please do that before continuing with the Tokens unique Metadata.

### Token specific Metadata

After you specified the [Metadata Template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) you will now[ add token specific metadata](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata) to your Tokens to replace the [placeholders in your metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders-and-fields) with real values.

### Metadata for fungible Tokens

If you want to add Metadata to a fungible token that can be registered in the [Cardano Token Registry](https://github.com/cardano-foundation/cardano-token-registry) please read [this part of the documentation](https://docs.nmkr.io/nmkr-studio/token/metadata/metadata-standard-for-fungible-tokens).

### Fully on-chain NFTs

You can also use NMKR Studio to mint these[ fully on-chain NFTs by adding the file as Base64](https://docs.nmkr.io/nmkr-studio/token/metadata#fully-on-chain-nfts).<br>


# Add Token-specific Metadata

Here we will explain different methods to add metadata to your tokens

After [uploading all tokens](https://docs.nmkr.io/nmkr-studio/token/upload) to your project, you want to add metadata that is unique for every single token, like custom traits etc. In NMKR Studio, we have different workarounds to accomplish that.

<figure><img src="/files/9pZsRiVP1BUOgdzCGylK" alt=""><figcaption></figcaption></figure>

## Option 1: Add custom metadata fields in the user interface

You can add metadata values to the NFT in the edit section of the token using the user interface.\
Each [custom field](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders) that was [**previously specified in the metadata template**](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders-and-fields) can then be specified by  in the placeholder data tab in the [edit section of your token](https://docs.nmkr.io/nmkr-studio/token/edit).\
This is the easiest way to add custom metadata fields to your tokens, but it is also not suitable to add metadata for a higher number of tokens.

<figure><img src="/files/Zsv5mPfSE2DAYOwjIBFm" alt=""><figcaption><p>Placeholder data tab in the edit section of your token</p></figcaption></figure>

{% hint style="info" %}
If you want to add not only custom fields and values to your token but a complete metadata code to your token, please use the [metadata override](https://docs.nmkr.io/nmkr-studio/token/edit#metadata-override-tab).
{% endhint %}

## Option 2: Upload metadata in a placeholder.csv sheet

This is probably the easiest way to upload metadata to your tokens in bulk.\
This method allows you to upload a sheet that contains values for each token and each [field](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders-and-fields) that was previously specified in the [metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) by simply adding them with a spreadsheet-software like Excel or Google sheets.

#### Specify the fields you want to add in the metadata template

The first step to use this method is to [add all the custom fields you need in the metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders).\
Each field will later be a column in your spreadsheet.

#### Download the placeholder.csv template of your project

The next step is to [download the placeholder.csv](https://docs.nmkr.io/nmkr-studio/project/export-placeholder.csv) template of your project, which will contain all the fields of your project's specified metadata template.

#### Edit the placeholder.csv in the spreadsheet software.

Open the placeholder.csv in a spreadsheet-software like excel of google sheets. The placeholder.csv template already contains all the [fields that were added to the metadata template ](https://docs.nmkr.io/nmkr-studio/project/metadata-template#custom-placeholders)and tokens that were uploaded to the project. You can now easily add all the custom values to the spreadsheet.&#x20;

<figure><img src="/files/sNz6rLMo45vvNJQRADxB" alt=""><figcaption><p>If you were using an older version of NMKR Studio, please note that we changed the heading of the first column from file_name to asset_name.</p></figcaption></figure>

#### Save the new placeholder.csv file

After you specified all the metadata in the spreadsheet you want to save the file named as "placeholder.csv". Please make sure that you export the file again as CSV with comma separated values.\
\
It can happen that users of the German version of Excel may have this file exported with semicolon separated values. This won't work. Please copy the spreadsheet to a new sheet created in [google sheets](https://sheets.new) and export it there.

#### Upload the placeholder.csv to your project

The final step is to upload the edited placeholder.csv to your project. In order to do that, please use the [SFTP upload](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata-with-placeholder.csv) or [bulk upload](/nmkr-studio/token/upload/bulk-upload-files-and-metadata/bulk-upload-via-drag-and-drop).&#x20;

{% hint style="info" %}
Please make sure that the placeholder.csv is always the last file that is uploaded to the project or it won't apply correctly for all tokens of the project.\
If you add tokens or subfiles afterwards, please make sure to upload the placeholder.csv again afterwards and after deleting the old placeholder.csv file from the server.
{% endhint %}

## Option 3: Upload metadata as JSON file

#### Separate into single .json files and make it Cardano compliant

You can also use the [SFTP bulk upload](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp) to add JSON files to your project.\
Many projects have their image files exported together with a .json file that contains all the metadata that belongs to each token.\
You will need to split them into single .json files for each individual token, if you used [hashlips for the creation of the images and metadata you need to split it and make it fit for Cardano](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata#helpful-ressoureces-for-users-of-hashlips).\
\
Please make sure that your JSON is in the [correct format (CIP-0025)](https://docs.nmkr.io/nmkr-studio/project/metadata-template#metadata-template) and it contains all the values you specified as [placeholders in your metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders-and-fields).

#### Rename the .json to .metadata or .metadatacip68

Before you upload the JSON via drag and drop to the project folder on the[ SFTP server](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp) you have to rename them from ".json" to ".metadata" or ".metadatacip68" if you are using [CIP-68](/nmkr-studio/token/metadata/cip-68). This can be easily done with bulk renamer tools, there are plenty of it and the most are free versions. \
The newly renamed ".metadata" can only match and add metadata to the token, if it is named correctly.\
\
If your tokens [asset\_name/tokenname](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) is "0001" you want to rename the belonging "file.json" to "0001.metadata". The metadata can only be added after the token was uploaded.

#### Helpful resources for users of hashlips

If you used Hashlips to create your images and metadata, this following video can be very helpful to split your json and make it fitting for Cardano.

{% embed url="<https://www.youtube.com/watch?v=2kOMsumJqKk>" %}

\
\
\ <br>


# Fingerprint (Metadata preview)

Preview the metadata of your token in NMKR Studio

<figure><img src="/files/hKuu3X0QFYW85T3QMBx1" alt=""><figcaption></figcaption></figure>

To preview the metadata of a token, please click the fingerprint button, which can be found in the actions bar of your token.

<figure><img src="/files/0XmmsVisLipqwIErHDSy" alt=""><figcaption></figcaption></figure>

The following tab shows you the metadata of your token and allows you to copy it to the clipboard or view it on the [pool.pm Metadata test](https://pool.pm/test/metadata) site. To view it on the pool.pm test site, please copy the metadata from NMKR Studio and then paste it in the field on the left side of the website.

<figure><img src="/files/9itPXly8nvG8w7vWPlN4" alt=""><figcaption><p>Preview the metadata of your token in NMKR Studio</p></figcaption></figure>

The pool.pm metadata test side allows you to preview and live edit the metadata of your token.

<figure><img src="/files/pXQgLzRTciYndrgBeaa7" alt=""><figcaption><p>Preview and live edit the metadata of your token on the pool.pm metadata test site</p></figcaption></figure>

{% embed url="<https://pool.pm/test/metadata>" %}
Direct link to the pool.pm metadata test site
{% endembed %}


# Metadata Check

The metadata checker is a check up for the correctness of your metadata

With the Metadata Check you can check if the metadata of an asset is aligned with the [CIP-0025 Metadata Standard](https://docs.nmkr.io/nmkr-studio/project/metadata-template#metadata-template) and if it contains any incorrect characters or values.

<figure><img src="/files/SytYow1JaUcAEpXCM13A" alt=""><figcaption></figcaption></figure>

The Metadata Check will now respond with a notfication message or an error message

{% hint style="warning" %}
However, for now, this Metadata-Check does not check if your [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) is matching the tokenname in NMKR Studio. So please make sure to always use the [\<asset\_name> placeholder](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) in your metadata to not cause any issues with that.
{% endhint %}

A great addition to the Metadata Cheker in NMKR Studio are [Editjson.org and the pool.pm Metadata chec](https://docs.nmkr.io/helpful-links/cardano-nft-ressources#nft-metadata-tools)k.


# Metadata Standard for fungible Tokens

Other than the already familiar 721 Metadata Standard we know from CIP-0025, Fungible Tokens have an additional 20 Metadata standard

If you want to create [Fungible Tokens](https://docs.nmkr.io/nmkr-studio/token#fungible-token) that can be also registered in the [Cardano Token Registry](https://github.com/cardano-foundation/cardano-token-registry), you need to edit the regular 721 Metadata format. You can follow the official Entry in the Cardano Developer Portal about the Token registration, but we want to give you some details about that below.<br>

{% embed url="<https://developers.cardano.org/docs/native-tokens/cardano-token-registry/>" %}

### Fungible Token with 721 + 20 Metadata Standard

The following is an example of the metadata of the NMKR Fungible Token.\
You can basically copy and paste this metadata section to the metadata override of your token after replacing all specific values with the ones related to your token as explained below.

```json
{
  "20": {
    "0ac3ec8f23038027af5aae08715b2da79f56cbde2b48e5d5da9d8aae": {
      "4E4D4B52": {
        "ticker": "NMKR",
        "name": "NMKR",
        "desc": "The official NFT-MAKER Token.",
        "description": "The official NFT-MAKER Token.",
        "icon": "ipfs://QmaQMH7ybS9KmdYQpa4FMtAhwJH5cNaacpg4fTwhfPvcwj",
        "image": "ipfs://QmaQMH7ybS9KmdYQpa4FMtAhwJH5cNaacpg4fTwhfPvcwj",
        "mediaType": "image/png",
        "decimals": "6",
        "website": "https://NFT-MAKER.IO",
        "whitepaper": "https://NFT-MAKER.IO/WHITEPAPER",
        "token site": "https://NFT-MAKER.IO/TOKEN",
        "files": [
          {
            "name": "NMKR",
            "mediaType": "image/svg+xml",
            "src": "ipfs://Qmam38EhoMs1Xiiw5j2psFYeQq7SqqF3myKesLU4LDWr2N"
          },
          {
            "name": "icon-1000",
            "mediaType": "image/webp",
            "src": "ipfs://QmUbvavFxGSSEo3ipQf7rjrELDvXHDshWkHZSpV8CVdSE5"
          },
          {
            "name": "icon-1000",
            "mediaType": "image/png",
            "src": "ipfs://QmaQMH7ybS9KmdYQpa4FMtAhwJH5cNaacpg4fTwhfPvcwj"
          },
          {
            "name": "icon-1000",
            "mediaType": "image/gif",
            "src": "ipfs://QmXjKJ42vSHQTF3AJi1EU6813EvpAK3F2WWCZJBpdM5H82"
          },
          {
            "name": "icon-1000",
            "mediaType": "image/jpg",
            "src": "ipfs://QmasfyhtHXunvSLq6ifdJsVjc7oCFsPnByrhLc5i9cRRk9"
          }
        ]
      }
    },
    "version": "1.0"
  },
  "721": {
    "0ac3ec8f23038027af5aae08715b2da79f56cbde2b48e5d5da9d8aae": {
      "NMKR": {
        "name": "NMKR",
        "ticker": "NMKR",
        "image": "ipfs://QmaQMH7ybS9KmdYQpa4FMtAhwJH5cNaacpg4fTwhfPvcwj",
        "mediaType": "image/png",
        "description": "The official NFT-MAKER Token.",
        "website": "https://NFT-MAKER.IO",
        "whitepaper": "https://NFT-MAKER.IO/WHITEPAPER",
        "token site": "https://NFT-MAKER.IO/TOKEN",
        "files": [
          {
            "name": "NMKR",
            "mediaType": "image/svg+xml",
            "src": "ipfs://Qmam38EhoMs1Xiiw5j2psFYeQq7SqqF3myKesLU4LDWr2N"
          }
        ]
      }
    },
    "version": "1.0"
  }
}
```

The first thing you might notice is that there are two JSON objects at the top level, these are denoted by the **721** and **20** labels and these relate directly to the respective metadata standards. You might recognise the [**721**](https://developers.cardano.org/docs/governance/cardano-improvement-proposals/cip-0025/) metadata standard from that which is used for NFTs. The [**20**](https://github.com/cardano-foundation/CIPs/pull/137) metadata standard is used specifically for FTs.

3rd party applications/websites essentially look for these standards and use them to automatically search for, identify and display the information regarding the tokens.

Note that you will see some information repeated in here, that is to ensure we provide the data in such a way that as many 3rd party applications/websites support our metadata.

{% hint style="info" %}
Note - his is particularly important at the moment as at the time of writing, the CIP for the 20 standard has not yet merged.
{% endhint %}

#### 721 in-depth

Let's cover the more familiar part first:

* Line 3 is the policy ID of the token
* Line 4 is the name of the token
* Lines 5, 6 and 7 are used to store the URL of the publisher's website
* Lines 8, 9 and 10 are the usual information relating to the media

#### 20 in-depth

This is where it gets more specific to fungible tokens, **more interesting parts are shown in bold**:

* Line 15 is policy ID of the token (same as line 3)
* **Line 16 is the name of the token but given in HEX format**
  * **You can use an ASCII to Hex converter to do this**
  * **4558414D504C45 = EXAMPLE in Hex**
* Lines 17 is the ticker for the token
  * This is used as a short-form of the token name
  * It is convention to keep this to 4 characters or less
* Line 18 is used to store the URL of the publisher's website
* Line 19 provides an opportunity to give a description of the token
* **Lines 20, 21 and 22 again are used to provide a link to where the token image is stored, these are repeated due to this being (at the time of writing) non-standardised**
  * **Including all 3 options means that most 3rd party applications/websites will be able to locate this attribute correctly.**
* **Line 23 is the Decimals, lets talk more about this:**

### Decimals

As you may know Lovelace is the actual native currency on Cardano and not ADA, the reason is, that 1 ADA is defined as 1,000,000 Lovelace. If you send someone one ADA, you are actually sending him one million Lovelace.

Because of this, when we mint a fungible token, we want to also specify the number of decimals that our token will have.

The reason for this is that it gives you the opportunity to define how granular you want your token to be. If you think about the Dollar, this would have 2 Decimals and can only be as granular as 1 Cent (0.01 Dollars).

Let's say we want to mint 25 Million EXAMPLE token:

* 25,000,000 EXAMPLE token
* With 6 Decimals
* Means we need to mint 25 Trillion
* 25 Trillion = 25,000,000,**000,000 tokens**
* **Note, we have 6 more zeros, for each of the decimals**

All applications/websites will then know to display the amount of EXAMPLE token held as the amount divided by 1 Million (6 zeros).


# Fully on-Chain NFTs

NMKR Studio also allows fully on-chain NFTs

Fully on-chain NFTs are NFTs where the art is not like regular tokens where the file sits on [IPFS](https://docs.nmkr.io/introduction/what-is-ipfs) and  is linked in the metadata to the NFT. You can also mint these fully on-chain NFTs with NMKR Studio by [adding the file as Base64 to your metadata](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata). The Base64 encoding method is used to encode binary data in ASCII text. It is primarily used to store or transfer images, audio files, and other forms of media.

{% hint style="warning" %}
Please keep in mind Cardano's current metadata file size limit of 16kb when minting these types of assets. Because each character, including whitespaces, counts as one byte, you will usually only be able to sell only one NFT per transaction.
{% endhint %}

As there are images typically linked to the metadata of your token with an IPFS link ("ipfs\://qmudas..."),  you would add an image or other media file to your NFT base64 encoded for a fully on-chain NFT.

```json
            "src": [
              "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlYAAAJWCAYAAACapc",
              "kfAAAM5UlEQVR4nO3YMYveVR6G4czyR0ewUNSdURLSpBAsBAe02cg2FltYCIKQXk",
              .....
              "SEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBA5FdySWoe28",
              "2w6gAAAABJRU5ErkJggg=="
            ]
```

{% hint style="warning" %}
Please note that your string has to be converted in an array that only contains 63 Characters in each line to make it Cardano conform.
{% endhint %}

#### Base64 in the filesection:

You can add a base64 encoded media file in the filesection of your metadata to set the main file in base64.

```json
"files": [
          {
            "mediaType": "image/png",
            "name": "tokenname",
            "src": [
              "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlYAAAJWCAYAAACapc",
              "kfAAAM5UlEQVR4nO3YMYveVR6G4czyR0ewUNSdURLSpBAsBAe02cg2FltYCIKQXk",
              ....
              "SEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBA5FdySWoe28",
              "2w6gAAAABJRU5ErkJggg=="
            ]
```

#### Base64 as image:

You can also add a downscaled version of your base64 encoded image as thumbnail.

```json

        "image": [
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATgAAAE4CAYAAADPf+",
          "9qAAAGFUlEQVR4nO3dvauWdRjAcU9IGTQUvZihtDQEDkFBLSktDg0NQRC4R52iGq",.....          "1bn3uI/9vut6JTHd51ee4RNjj00oNzj7DQvvvg9NwjXJdlu3W1wQFZAgdkCRyQJX",
          "BAlsABWQIHZAkckCVwQJbAAVkCB2QJHJD1L4cNZ+LMYCADAAAAAElFTkSuQmCC"
        ],
        "mediaType": "image/png",
        "name": "tokenname"
```

#### Fully on-chain NFT example metadata

The following code shows an example of a fully on-chain NFT that uses base64 encoded images as thumbnail and also mainfile in the filesection.

<pre class="language-json"><code class="lang-json">{
  "721": {
    "684ffa75d83ccd4dfe179bd37fe679e74d33cce181a6f473337df098": {
      "hunk0030": {
        "Base": "Tan",
        "Cigarette": "None",
        "Earring": "None",
        "Eyes": "Shades (yellow)",
        "Facial Hair": "None",
        "Hair": "Swirl (black)",
        "Headwear": "None",
        "Mouth": "Lips",
        "Top": "Turtleneck (rust)",
        "Top Secondary": "Chain",
        "files": [
          {
            "mediaType": "image/png",
            "name": "hunk0030",
            "src": [
              "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlYAAAJWCAYAAACapc",
              "kfAAAM5UlEQVR4nO3YMYveVR6G4czyR0ewUNSdURLSpBAsBAe02cg2FltYCIKQXk",
              "yUaCHaCIILFrtWWdlVV2zCNopgIwjRIjhWagJ+hBAxBlMIWmghsVeLMHufnHnzXt",
              "cH+PEUp7g5GydOn7l6AACA/9ufZg8AALhRCCsAgIiwAgCICCsAgIiwAgCICCsAgI",
              "iwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAg",
              "CICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICC",
              "sAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgI",
              "iwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAg",
              "CICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICC",
              "sAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgI",
              "iwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAg",
              "CICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICC",
              "sAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgI",
              "iwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAg",
              "CICCsAgMgyewCMdPbVp2dP2JODm1dmT4Bhjjz/3uwJMIwfKwCAiLACAIgIKwCAiL",
              "ACAIgIKwCAiLACAIgIKwCAiLACAIgIKwCAiLACAIgIKwCAiLACAIgIKwCAiLACAI",
              "gIKwCAiLACAIgIKwCAiLACAIgIKwCAiLACAIgIKwCAiLACAIhsnDh95ursEay3s6",
              "8+PXvCWjm4eWX2BBjmyPPvzZ7AmvNjBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAAB",
              "FhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQ",
              "AQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEV",
              "YAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAAB",
              "FhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQWWYPAK6vr3+6c9jtg5tXht",
              "0GWAV+rAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirAAAIsIKAC",
              "AirAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirA",
              "AAIsIKACCyzB4A3DhOPnjX7Al78vrn382esFZGvpOPhl2Ga+PHCgAgIqwAACLCCg",
              "AgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIq",
              "wAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLL7AHA9fWPhz",
              "dmT9h3Tj5417Dbr3/+3bDbwP7jxwoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwg",
              "oAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAIC",
              "KsAAAiwgoAICKsAAAiwgoAICKsAAAiy+wBwO/tbG8Nu/3GV1eH3b7vzz8Mu72q7j",
              "90aPaEfefTS7MXwDh+rAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirAAAIsIKAC",
              "AirAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirAAAIsIKACAirA",
              "AAIsIKACAirAAAIsIKACCyzB4Aq2pne2v2hH3nkUfvG3f73tuH3V5VL7722bDb/3",
              "zhL8Nuj/XBsMvPXHhs2G1uHH6sAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAA",
              "AiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwg",
              "oAICKsAAAiwgoAICKsAAAiwgoAILLMHgAj7WxvzZ6w79xxy8bsCUQevvun2ROA3/",
              "BjBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQ",
              "AQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEVYAABFhBQAQEV",
              "YAAJFl9gBYVee+vTzs9s721rDbAIzjxwoAICKsAAAiwgoAICKsAAAiwgoAICKsAA",
              "AiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiwg",
              "oAICKsAAAiwgoAICKsAAAiwgoAICKsAAAiy+wBMNK5by/PnrBWfv7y3LDbH3457D",
              "R/4MP/fTJ7wp58dPTfsyew5vxYAQBEhBUAQERYAQBEhBUAQERYAQBEhBUAQERYAQ",
              "BEhBUAQERYAQBEhBUAQERYAQBEhBUAQERYAQBEhBUAQERYAQBEhBUAQERYAQBEhB",
              "UAQERYAQBEhBUAQERYAQBEhBUAQGSZPQBW1c721uwJAOwzfqwAACLCCgAgIqwAAC",
              "LCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCg",
              "AgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgssweAH996T+zJ+",
              "zJD++8MnsCa+7yu9/MnrAnW0/cM3sCDOPHCgAgIqwAACLCCgAgIqwAACLCCgAgIq",
              "wAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAAC",
              "LCCgAgIqwAACLCCgAgIqwAACLCCgAgIqwAACLL7AEA7M3WE/fMngD8hh8rAICIsA",
              "IAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiA",
              "grAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAI",
              "CIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsA",
              "IAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiAgrAICIsAIAiA",
              "grAIDIMnsArKrvf7w0e8Ke3Hbr3bMnANyw/FgBAESEFQBARFgBAESEFQBARFgBAE",
              "SEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQ",
              "BARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBAZJk9ALi+vv/x0rDb/z0/7DTX2a",
              "Hn3pw9AVaSHysAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgI",
              "iwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAgCICCsAgIiwAg",
              "CICCsAgIiwAgCILLMHwEgPnf/bsNsXDxwedntVHdv8ZfYEIruzB8CK8mMFABARVg",
              "AAEWEFABARVgAAEWEFABARVgAAEWEFABARVgAAEWEFABARVgAAEWEFABARVgAAEW",
              "EFABARVgAAEWEFABARVgAAEWEFABARVgAAEWEFABARVgAAEWEFABARVgAAkWX2AL",
              "h46vi42wcOD7v9+NELw26/vztuN1yLv9/8xrDbL/98YthtmM2PFQBARFgBAESEFQ",
              "BARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARF",
              "gBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESW2QPoXDx1fP",
              "aEtfL+7uFhtx8/emHY7Zu+ODjsNlyLo289Oez27lNvD7sN18KPFQBARFgBAESEFQ",
              "BARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARF",
              "gBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAEQ2Tpw+c3X2iP",
              "3m4qnjsycQObb5y+wJ+84jzz4wewIr4ON/nZ89Ya3sPvX27AlE/FgBAESEFQBARF",
              "gBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAE",
              "SEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBARFgBAESEFQBA5FdySWoe28",
              "2w6gAAAABJRU5ErkJggg=="
            ]
          }
        ],
<strong>        "image": [
</strong>          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATgAAAE4CAYAAADPf+",
          "9qAAAGFUlEQVR4nO3dvauWdRjAcU9IGTQUvZihtDQEDkFBLSktDg0NQRC4R52iGq",
          "KWIChoqKaKshdapKUIWgTh1BDZVCr0J4iRSQ2BDTrIaQo6i3jr+Z37Od/n85l/3F",
          "w8w5druXhWVo+ure8ACLph7gEARhE4IEvggCyBA7IEDsgSOCBL4IAsgQOyBA7IEj",
          "ggS+CALIEDsgQOyBI4IEvggCyBA7IEDsgSOCBL4IAsgQOyBA7IEjggS+CALIEDsg",
          "QOyBI4IEvggCyBA7IEDsgSOCBL4IAsgQOyBA7IEjggS+CALIEDsgQOyBI4IEvggC",
          "yBA7IEDsgSOCBL4IAsgQOyBA7IEjggS+CALIEDsgQOyBI4IEvggCyBA7IEDsgSOC",
          "BL4IAsgQOyBA7IEjggS+CArJ1zD7Dsfnj7+aHf37vrr6Hf58rue+XruUdYajY4IE",
          "vggCyBA7IEDsgSOCBL4IAsgQOyBA7IEjggS+CALIEDslZWj66tzz1Eyejb0tHcrs",
          "7L7ermssEBWQIHZAkckCVwQJbAAVkCB2QJHJAlcECWwAFZAgdkCRyQJXBAlsABWQ",
          "IHZAkckCVwQJbAAVkCB2QJHJAlcECWwAFZAgdkCRyQtXPuAVgsv128Y9J7/6PKIr",
          "PBAVkCB2QJHJAlcECWwAFZAgdkCRyQJXBAlsABWQIHZAkckOUWlevy4sN3Dv3+hz",
          "//OfT7o039fY4PmmNZ2eCALIEDsgQOyBI4IEvggCyBA7IEDsgSOCBL4IAsgQOyBA",
          "7IcovKBu8cXJl7hA2m3nJu99tVNpcNDsgSOCBL4IAsgQOyBA7IEjggS+CALIEDsg",
          "QOyBI4IEvggCy3qHEP3b170vsjv65Per//rguT3o/2wL59c4+wwY/n5p5gudnggC",
          "yBA7IEDsgSOCBL4IAsgQOyBA7IEjggS+CALIEDsgQOyHKLus1MvS0d7dAT+6e9v/",
          "+2QZNcm9fe+2nS+3dffXTQJP/5dtLrF848OWiOBhsckCVwQJbAAVkCB2QJHJAlcE",
          "CWwAFZAgdkCRyQJXBAlsABWW5RZ7Zot6W337wy9whb6uCei3OPwEA2OCBL4IAsgQ",
          "OyBA7IEjggS+CALIEDsgQOyBI4IEvggCyBA7Lcom4zp/44P+n9ot26wlaywQFZAg",
          "dkCRyQJXBAlsABWQIHZAkckCVwQJbAAVkCB2QJHJDlFnVmU29LF82lk6cmvT92ct",
          "AgW+TYl98P/f7xAx8N/f6yscEBWQIHZAkckCVwQJbAAVkCB2QJHJAlcECWwAFZAg",
          "dkCRyQ5RZ1m/E/p3D1bHBAlsABWQIHZAkckCVwQJbAAVkCB2QJHJAlcECWwAFZAg",
          "dkuUXdZI+9/vHQ71/44s2h318257/6fej3dz99z9Dvc2U2OCBL4IAsgQOyBA7IEj",
          "ggS+CALIEDsgQOyBI4IEvggCyBA7LcorLU3Iq22eCALIEDsgQOyBI4IEvggCyBA7",
          "IEDsgSOCBL4IAsgQOyBA7IEjggS+CALIEDsgQOyBI4IEvggCyBA7IEDsgSOCBL4I",
          "AsgQOyBA7I8r+o28zf/5wb+v1bb9kz9PuwlWxwQJbAAVkCB2QJHJAlcECWwAFZAg",
          "dkCRyQJXBAlsABWQIHZLlFZYOpt66fnR40yILa9/Inc4/ABDY4IEvggCyBA7IEDs",
          "gSOCBL4IAsgQOyBA7IEjggS+CALIEDstyizuyR049Pen92x72DJrk2h3ddnnuELX",
          "Vi7gGYxAYHZAkckCVwQJbAAVkCB2QJHJAlcECWwAFZAgdkCRyQJXBAllvUTXb2/e",
          "emvZ94W/rUgTOT3n9zYrFuV7e7t246Mun9G5dWB03C1bDBAVkCB2QJHJAlcECWwA",
          "FZAgdkCRyQJXBAlsABWQIHZAkckLV0t6hTb0UXzdTb0qm3qzf+snfSe67swKfPTH",
          "p/4tnPB02ynGxwQJbAAVkCB2QJHJAlcECWwAFZAgdkCRyQJXBAlsABWQIHZK2sHl",
          "1bn3uI/9vut6JTHd51ee4RNjj00oNzj7DQvvvg9NwjXJdlu3W1wQFZAgdkCRyQJX",
          "BAlsABWQIHZAkckCVwQJbAAVkCB2QJHJD1L4cNZ+LMYCADAAAAAElFTkSuQmCC"
        ],
        "mediaType": "image/png",
        "name": "hunk0030"
      }
    }
  }
}
</code></pre>

And here is how it would be displayed on-chain. You can see under Storage that it says "On-Chain immutable". An NFT that uses IPFS for the thumbnail would show "IPFS, On-Chain immutable"

<figure><img src="/files/hDANU3ri1tRYp7DxNJYy" alt=""><figcaption><p>Preview of the NFT with bas64 encoded images on pool.pm</p></figcaption></figure>


# Partial URL-Encoding

Use Data URL in the Metadata of your NFTs

Fully on-chain CNFTs are typically implemented by assigning appropriate Base64-encoded dataURIs to the token metadata's src and image fields. DataURIs can encode a variety of data types like HTML, audio, image etc. As a result, a fully on-chain NFT can virtually encode any type of media file as long as its metadata is no larger than 16Kb. This is a standard and general approach, with the main disadvantage being the same Base64 encoding, which may make the original data 30% larger (on average). This is a difficult limitation because the 16Kb limit is a hard constraint that must always be met.

To overcome this problem, a possible, non-standard solution that works well with textual data (e.g., html and svg) is to replace base64 encoding with a variant of the original plain text in which some special characters have been substituted by their url-encoded version. <br>

In specific, there are the following replacements:

```
% is replaced by %25
is replaced by %23
< is replaced by %3C
> is replaced by %3E
```

{% hint style="info" %}
Actually, to display the partially url-encoded, on-chain NFTs only characters % and # must be replaced. The substitution of characters < and > is only required by NMKR for minting.
{% endhint %}

#### Use case for URL encoding

This method is easy to implement and saves a lot of space, which allows to mint way more complex On-Chain NFTs to be encoded and minted. A common use case are interactive NFTs like games.

#### Example Metadata

```json
{
  "721": {
    "4864e4cf3f7e7fd2318b3bb4a7060665278a47fc4a6216c55dcbbeb0": {
      "chrz2": {
        "Color": "Arctic white",
        "Enemy (Ambushman)": "Face with symbols on mouth",
        "Enemy (Happy Stoner)": "Zany face",
        "Enemy (Professor)": "Exploding head",
        "Enemy (Shadowman)": "Cowboy hat face",
        "Hero": "Face without mouth",
        "Keyboard controls": "Press any key to start, arrow keys to move hero",
        "Power-up": "Nazar amulet",
        "Special": "False",
        "Touch controls": "Tap to start, swipe up/down/left/right to move hero",
        "Twitter": "twitter.com/gamezonchain",
        "Variant": "Classic",
        "files": [
          {
            "mediaType": "text/html",
            "src": [
              "data:text/html;utf8,%3C!DOCTYPE html%3E%3Cmeta charset='utf-8'/%",
              "3E%3Cbody style='margin:0;touch-action:none;overscroll-behavior:",
              "contain;background:%23000;'%3E%3Ccanvas id='a' style='margin:aut",
              "o;display:block;'%3E%3C/canvas%3E%3Cscript%3Efunction aa(a){var ",
              "d=0;return function(){return d%3Ca.length?{done:!1,value:a[d++]}",
              ":{done:!0}}}function b(a){var d='undefined'!=typeof Symbol&&Symb",
              "ol.iterator&&a[Symbol.iterator];return d?d.call(a):{next:aa(a)}}",
              " var e,f,g,ba='ontouchstart'in window,h,l,n,p,q,r,t,u,v,w,x,y,ca",
              ",z,da=String.fromCodePoint(0x1F44E),ea=[String.fromCodePoint(129",
              "311),String.fromCodePoint(129304),String.fromCodePoint(128077),S",
              "tring.fromCodePoint(128074)],fa=String.fromCodePoint(0x1F9FF),B=",
              "[String.fromCodePoint(0x1F920),String.fromCodePoint(0x1F92C),Str",
              "ing.fromCodePoint(0x1F92F),String.fromCodePoint(0x1F92A),String.",
              "fromCodePoint(128064)],C=[String.fromCodePoint(127817),String.fr",
              "omCodePoint(127818),String.fromCodePoint(127826),String.fromCode",
              "Point(127827), String.fromCodePoint(128142)],D,ha=String.fromCod",
              "ePoint(128561),ia=String.fromCodePoint(0x1F636),E,ja,F,G,H,ka,I,",
              "la,ma,J,na,oa,pa,K,L,M,qa,ra,N=new AudioContext,O,P,Q,sa=[[1,1,1",
              ",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1",
              ",2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1",
              "],[1,4,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1",
              ",4,1],[1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,1,1",
              ",1,1,2,1],[1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2",
              ",2,2, 2,2,2,1],[1,2,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,",
              "2,1,2,1,1,1,1,2,1],[1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,",
              "2,2,2,1,2,2,2,2,2,2,1],[1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,2,1,1,",
              "1,1,1,1,1,1,2,1,1,1,1,1,1],[0,0,0,0,0,1,2,1,2,2,2,2,2,2,2,2,2,2,",
              "2,2,2,2,2,2,2,1,2,1,0,0,0,0,0],[1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,",
              "0,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1],[2,2,2,2,2,2,2,2,2,1,0,5,5,0,",
              "0,0,0,0,0,0,5,5,0,1,2,2,2,2,2,2,2,2,2],[1,1,1,1,1,1,2,1,2,1,1,1,",
              "1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1],[0,0,0,0,0,1,2,1, 2,2",
              ",2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,0,0,0,0],[1,1,1,1,1,1,2,1",
              ",2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1],[1,2,2,2,2,2",
              ",2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1],[1,4,1,1",
              ",1,1,2,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1],[1,2",
              ",2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,4,2,1],",
              "[1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,1,1",
              ",1],[1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2",
              ",2,2,1],[1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1, 1,1,1,1,1,1,",
              "1,1,1,1,2,1],[1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,",
              "2,2,2,2,2,2,2,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,",
              "1,1,1,1,1,1,1,1,1,1]];function ta(){var a=lvl,d=0;for(i=0;i%3Ca.",
              "length;i++)d+=a[i].reduce(function(c,k){return 2==k?c+1:c},0);re",
              "turn d}function ua(a){return 0+Math.floor(Math.random()*(a-0+1))",
              "} function S(){z=0;qa=!1;y=!0;P=[];ma=[8,15];ja=[1,1,30,60];J=0;",
              "lvl=sa.map(function(d){return d.slice()});la=ta();H=ka=7;v=0;G=3",
              ";t=!1;var a=window.devicePixelRatio;e=document.getElementById('a",
              "');f=Math.min(window.innerWidth,window.innerHeight);e.width=e.he",
              "ight=f*a;g=e.getContext('2d');g.scale(a,a);e.style.width=e.style",
              ".height=f+'px';q=r=0==(f/33|0)%252?f/33|0:(f/33|0)-1;n=33*q;p=22",
              "*r;h=(f-n)/2;l=(f-p)/2;u={x:h+q+q/2,y:l+20*r+r/2,j:ia,speed:q/8,",
              "g:1,i:1,l:1};g.fillStyle='%23F4F3EF';g.strokeStyle='%23F4F3EF'; ",
              "F=(f-p)/2|0;g.font=4*r+'px Monospace';g.textAlign='center';g.tex",
              "tBaseline='bottom';g.strokeText('CHRZ',f/2,F);va();T(0,0,lvl.len",
              "gth,lvl[0].length);ba?window.addEventListener('touchstart',U,!0)",
              ":window.addEventListener('keydown',U);x=requestAnimationFrame(wa",
              ")}function xa(){g.clearRect(h,l+p,f/2,F/3);g.textAlign='left';g.",
              "o='top';g.font=1.5*q+'px Monospace';g.strokeText('SCORE:'+v,h,l+",
              "p+r+r/10);g.textAlign='center';g.font=q-4+'px serif'} function y",
              "a(){g.clearRect(.7*f,l+p,.3*f,F/3);g.textAlign='right';g.o='top'",
              ";g.font=1.5*q+'px Monospace';for(var a='',d=0;d%3CG;d++)a+=u.j;g",
              ".strokeText(a,h+n,l+p+r+r/10);g.textAlign='center';g.font=q-4+'p",
              "x serif'}function va(){E=[];var a=0;for(i=0;i%3Clvl.length;i++)f",
              "or(j=0;j%3Clvl[i].length;j++)5==lvl[i][j]&&(0==lvl[i][j],E.push(",
              "{x:h+j*q+q/2,y:l+i*r+r/2,type:a,j:B[a],speed:q/8,h:Math.floor(4*",
              "Math.random()),m:ja[a],status:1}),a++)} function V(a,d,c){var k=",
              "a.h;d=[Math.abs(a.x-d)+Math.abs(a.y-r-c),Math.abs(a.x-d)+Math.ab",
              "s(a.y+r-c),Math.abs(a.x-q-d)+Math.abs(a.y-c),Math.abs(a.x+q-d)+M",
              "ath.abs(a.y-c)];for(c=0;4%3Ec;c++)za(a.x,a.y,c)&&(d[c]=1E4);0==k",
              "&&(d[1]=1E4);1==k&&(d[0]=1E4);2==k&&(d[3]=1E4);3==k&&(d[2]=1E4);",
              "a=Math.min;k=a.apply;if(d instanceof Array)c=d;else{c=b(d);for(v",
              "ar m,A=[];!(m=c.next()).done;)A.push(m.value);c=A}a=k.call(a,Mat",
              "h,c);return d.indexOf(a)} function Aa(a){W(a)&&!a.status&&(a.spe",
              "ed=q/8);if(!W(a)||!za(a.x,a.y,a.h)){if(W(a)){var d=b(X(a.x,a.y))",
              ",c=d.next().value;d=d.next().value;10==c&&16==d&&(2==a.status&&(",
              "a.status=1,a.j=B[a.type]),!y&&0%3Ca.m&&(a.h=.5%3CMath.random()?2",
              ":3))}switch(a.h){case 0:a.y-=a.speed;break;case 1:a.y+=a.speed;b",
              "reak;case 2:a.x-=a.speed;break;case 3:a.x+=a.speed}Ba(a)}}functi",
              "on Ca(a,d){g.clearRect(h+d*q-q,l+a*r-r,3*q,3*r)}function Da(a){a",
              ".preventDefault();a.stopPropagation();a=a.touches[0];L=a.pageX;M",
              "=a.pageY} function Ea(a){a.preventDefault();a.stopPropagation();",
              "if(L&&M){var d=L-a.touches[0].pageX;a=M-a.touches[0].pageY;Math.",
              "abs(d)%3EMath.abs(a)?0%3Ed?(2==u.g&&(u.g=3),u.i=3):(3==u.g&&(u.g",
              "=2),u.i=2):0%3Ea?(0==u.g&&(u.g=1),u.i=1):(1==u.g&&(u.g=0),u.i=0)",
              ";M=L=null}}function Fa(a){'ArrowUp'==a.key&&(1==u.g&&(u.g=0),u.i",
              "=0);'ArrowDown'==a.key&&(0==u.g&&(u.g=1),u.i=1);'ArrowLeft'==a.k",
              "ey&&(3==u.g&&(u.g=2),u.i=2);'ArrowRight'==a.key&&(2==u.g&&(u.g=3",
              "),u.i=3);a.preventDefault()} function Ga(){var a=(u.y-l-r/2)/r|0",
              ",d=(u.x-h-q/2)/q|0;switch(lvl[a][d]){case 0:z=0;break;case 2:lvl",
              "[a][d]=0;z||(Y(30,150,'triangle'),z=1);la--;P.push([a,d]);0==la&",
              "&(ra=!0);E.forEach(function(c){c.m--;ja[c.type]--});v+=10;break;",
              "case 4:lvl[a][d]=0;clearInterval(ca);Y(40,1900,'square');t=!0;v+",
              "=50;H=ka;u.l=1;E.forEach(function(c){2!=c.status&&(c.status=1,c.",
              "j=ha,c.speed=q/16)});I=1E3;ca=setInterval(Ha,200);break;case 6:l",
              "vl[a][d]=0,Y(120,300,'square'),a=200+D*D*200,v+=a,g.font=4*r+'px",
              " Monospace',g.textAlign= 'center',g.textBaseline='bottom',g.fill",
              "Text(C[D]+a+C[D],f/2,F),setTimeout(function(){g.clearRect(0,0,f,",
              "l)},800),g.textBaseline='middle',g.font=q-4+'px serif'}}function",
              " Ha(){I-=200;t&&Ia(900,'sawtooth',10,100,.2);0==I&&(H--,I=1E3);2",
              "%3E=H&&E.forEach(function(a){2!=a.status&&(a.j=a.j==B[a.type]?ha",
              ":B[a.type])});0==H&&(H=ka,t=!1,E.forEach(function(a){2!=a.status",
              "&&(a.status=0,a.j=B[a.type])}),clearInterval(ca))}function X(a,d",
              "){return[(d-l-r/2)/r|0,(a-h-q/2)/q|0]} function za(a,d,c){d=b(X(",
              "a,d));a=d.next().value;var k=d=d.next().value,m=a;1==c&&(m=a+1);",
              "0==c&&(m=a-1);2==c&&(k=d-1);3==c&&(k=d+1);return 1==lvl[m][k]?!0",
              ":!1}function W(a){var d=a.y;return Number.isInteger((a.x-h+q/2)/",
              "q)&&Number.isInteger((d-l-r/2)/r)} function Ja(){if(u.g!=u.i&&W(",
              "u)){var a=b(X(u.x,u.y)),d=a.next().value;a=a.next().value;if(8==",
              "d&&16==a&&1==u.i){u.i=u.g;return}za(u.x,u.y,u.i)||(u.g=u.i)}if(!",
              "W(u)||!za(u.x,u.y,u.g)){u.x%3Eh+n&&(u.g=3);u.x%3Ch&&(u.g=2);swit",
              "ch(u.g){case 0:u.y-=u.speed;break;case 1:u.y+=u.speed;break;case",
              " 2:u.x-=u.speed;break;case 3:u.x+=u.speed}Ba(u)}}function Ba(a){",
              "a.x%3E=33*q+h&&(g.clearRect(a.x-q,a.y-r/2,2*q,r),a.x=h+q/2);a.x%",
              "3C=h&&(g.clearRect(a.x-q/2,a.y-r/2,q,r),a.x=h+32*q+q/2)} functio",
              "n wa(){qa&&(g.font=4*r+'px Monospace',g.textAlign='center',g.tex",
              "tBaseline='bottom',g.strokeText('OH'+String.fromCodePoint(128128",
              ")+'NO',f/2,F));E.forEach(function(a){var d=b(X(a.x,a.y));a=d.nex",
              "t().value;d=d.next().value;Ca(a,d);T(a-1,d-1,a+2,d+2)});E.forEac",
              "h(function(a){g.fillText(a.j,a.x,a.y);Aa(a);W(a)&&(a.h=V(a,ua(f)",
              ",ua(f)))});x=requestAnimationFrame(wa)}var Z=0,Ka; function La()",
              "{g.clearRect(0,0,f,f);T(0,0,lvl.length,lvl[0].length);g.font=4*r",
              "+'px Monospace';g.textAlign='center';g.textBaseline='bottom';4%3",
              "EZ?(g.strokeText(ea[Z++],f/2,F),Y(100,200,'triangle')):(Z=0,Y(10",
              "0,400,'triangle'),clearInterval(Ka),ra=!1,Q=null,g.textAlign='ce",
              "nter',g.font=q-4+'px serif',M=L=null,ba?(document.addEventListen",
              "er('touchstart',Da,!0),document.addEventListener('touchmove',Ea,",
              "!0)):window.addEventListener('keydown',Fa,!0),y=!1,g.clearRect(0",
              ",0,f,f),T(0,0,lvl.length,lvl[0].length),u.x= h+q+q/2,u.y=l+20*r+",
              "r/2,D=0,u.g=1,u.i=1,g.fillText(u.j,u.x,u.y),va(),O=K=0,pa=perfor",
              "mance.now(),w=requestAnimationFrame(Ma))}function U(){'running'!",
              "==N.state&&N.resume();window.removeEventListener('keydown',U);wi",
              "ndow.removeEventListener('touchstart',U,!0);cancelAnimationFrame",
              "(x);Ka=setInterval(La,500)} function Ma(){na=performance.now();o",
              "a=(na-pa)/1E3;pa=na;K+=oa;O+=oa;.5%3CO&&(O=0,Ia(200,'triangle',2",
              "0,380,.1));1==J&&4%3CK&&(null!=Q&&(lvl[P[Q][0]][P[Q][1]]=0),g.fi",
              "llStyle='%23000',null!=Q&&g.fillRect(P[Q][1]*q+h,P[Q][0]*r+l,q,r",
              "),g.fillStyle='%23F4F3EF',D=++D%25C.length);K%3E=ma[J]&&(K=0,Y(7",
              "0,800,'sine'),J||(Q=ua(P.length-1),lvl[P[Q][0]][P[Q][1]]=6,g.fil",
              "lText(C[D],P[Q][1]*q+h+q/2+r/12,P[Q][0]*r+l+r/2+r/12)),J=++J%252",
              ");var a=b(X(u.x,u.y)),d=a.next().value;a=a.next().value;Ca(d,a);",
              "ya();T(d-1,a-1,d+2,a+2);xa();E.forEach(function(c){var k= b(X(c.",
              "x,c.y));c=k.next().value;k=k.next().value;Ca(c,k);T(c-1,k-1,c+2,",
              "k+2)});g.fillText(u.j,u.x,u.y);Ga();Na();Ja();E.forEach(function",
              "(c){g.strokeText(c.j,c.x,c.y);Aa(c);if(W(c))if(2==c.status)c.spe",
              "ed=q/8,c.h=c.x%3C16*r+l+r/2?V(c,11*r+l+r/2,10*r+l+r/2):V(c,22*r+",
              "l+r/2,10*r+l+r/2);else if(J){0==c.type&&(c.h=V(c,u.x,u.y));1==c.",
              "type&&(0==u.g&&(c.h=V(c,u.x,u.y-5*q)),1==u.g&&(c.h=V(c,u.x,u.y+5",
              "*q)),2==u.g&&(c.h=V(c,u.x-5*q,u.y)),3==u.g&&(c.h=V(c,u.x+5*q,u.y",
              ")));if(2==c.type){if(0==u.g){var k=u.y-2*q;var m= u.x}1==u.g&&(k",
              "=u.y+2*q,m=u.x);2==u.g&&(m=u.x-2*q,k=u.y);3==u.g&&(m=u.x+2*q,k=u",
              ".y);c.h=V(c,m-(E[0].x-m),k-(E[0].y-k))}3==c.type&&(c.h=Math.sqrt",
              "(Math.pow(u.x-c.x,2)+Math.pow(u.y-c.y,2))%3E8*q?V(c,u.x,u.y):V(c",
              ",f,f))}else 0==c.type&&(c.h=V(c,0,0)),1==c.type&&(c.h=V(c,f,0)),",
              "2==c.type&&(c.h=V(c,0,f)),3==c.type&&(c.h=V(c,f,f))})}var Oa; fu",
              "nction Na(){var a=1;ra?Oa=setInterval(Pa,800):(E.forEach(functio",
              "n(d){Math.abs(u.y-d.y)%3C=r/2&&Math.abs(u.x-d.x)%3C=q/2&&(t?1==d",
              ".status&&(g.clearRect(0,0,f,l),Y(100,160,'triangle'),d.status=2,",
              "v+=200*u.l,u.l*=2,d.j=B[4],g.font=4*r+'px Monospace',g.textAlign",
              "='center',g.textBaseline='bottom',g.fillText(B[d.type]+200*u.l+B",
              "[d.type],f/2,F),setTimeout(function(){g.clearRect(0,0,f,l)},800)",
              ",g.textBaseline='middle',g.font=q-4+'px serif'):2!=d.status&&(G-",
              "-,a=0,ya()))}),a?w=requestAnimationFrame(Ma):0%3CG?(qa=!0, Y(400",
              ",50,'sawtooth'),ba?(document.removeEventListener('touchstart',Da",
              ",!0),document.removeEventListener('touchmove',Ea,!0)):window.rem",
              "oveEventListener('keydown',Fa,!0),null!=Q&&(lvl[P[Q][0]][P[Q][1]",
              "]=0),y=!0,cancelAnimationFrame(w),x=requestAnimationFrame(wa),se",
              "tTimeout(U,1500)):(g.font=4*r+'px Monospace',g.textAlign='center",
              "',g.textBaseline='bottom',Y(400,50,'sawtooth'),g.strokeText('GAM",
              "E'+da+'OVER',f/2,F),T(0,0,lvl.length,lvl[0].length),setTimeout(S",
              ",3E3)))} function Pa(){var a=String.fromCodePoint('0x274C'),d=St",
              "ring.fromCodePoint('0x1F3C6');g.clearRect(0,0,f,f);T(0,0,lvl.len",
              "gth,lvl[0].length);xa();g.font=4*r+'px Monospace';g.textAlign='c",
              "enter';g.textBaseline='bottom';4%3EZ?(g.strokeText(B[Z++],f/2,F)",
              ",setTimeout(function(){Y(200,40,'sawtooth');g.strokeText(a,f/2,F",
              ")},300)):(Z=0,Y(300,800,'triangle'),clearInterval(Oa),g.strokeTe",
              "xt(d+d+ia+d+d,f/2,F),setTimeout(S,3E3))} function T(a,d,c,k){g.t",
              "extBaseline='middle';for(g.font=q-4+'px serif';a%3Cc;a++)for(var",
              " m=d;m%3Ck;m++)1==lvl[a][m]&&g.fillRect(m*q+h,a*r+l,q,r),2==lvl[",
              "a][m]&&(g.beginPath(),g.arc(m*q+h+q/2,a*r+l+r/2,q/8,0,2*Math.PI,",
              "!0),g.stroke()),4==lvl[a][m]&&g.fillText(fa,m*q+h+q/2+r/12,a*r+l",
              "+r/2+r/12),6==lvl[a][m]&&g.fillText(C[D],m*q+h+q/2+r/12,a*r+l+r/",
              "2+r/12)} function Ia(a,d,c,k,m){var A=N.createGain(),R=N.createO",
              "scillator();A.connect(N.destination);A.gain.setValueAtTime(0,N.c",
              "urrentTime);A.gain.linearRampToValueAtTime(m,N.currentTime+c/1E3",
              ");A.gain.linearRampToValueAtTime(0,N.currentTime+k/1E3);R.freque",
              "ncy.value=a;R.type=d;R.connect(A);R.start(0);R.stop(N.currentTim",
              "e+k/1E3)}function Y(a,d,c){Ia(d,c,10,a,.8)}window.addEventListen",
              "er('resize',function(){clearInterval(Ka);cancelAnimationFrame(x)",
              ";cancelAnimationFrame(w);S()});S(); %3C/script%3E%3C/body%3E"
            ]
          }
        ],
        "image": [
          "data:image/svg+xml;utf8,%3Csvg width='500' height='560' viewBox=",
          "'0 0 500 560' xmlns='http://www.w3.org/2000/svg'%3E %3Crect widt",
          "h='500' height='560' fill='%23F4F3EF' /%3E %3Ccircle stroke='%23",
          "ba0001' stroke-width='10' cx='250' cy='250'  fill='%23000' r='24",
          "0'/%3E%3Cg text-anchor='middle' style='font:700 50pt monospace' ",
          "fill='%23ba0001'%3E%3Ctext x='50%25' y='25%25'%3E C H R Z %3C/te",
          "xt%3E %3Ctext x='50%25' y='240'%3E &%23x1F920; &%23x1F92C; &%23x",
          "1F92F; &%23x1F92A; %3C/text%3E %3Ctext x='50%25' y='330'%3E VS%3",
          "C/text%3E %3Ctext x='50%25' y='430'%3E &%23x1F636;%3C/text%3E %3",
          "Ctext x='50%25' y='550'%3E CLASSIC %3C/text%3E%3C/g%3E%3C/svg%3E"
        ],
        "mediaType": "image/svg+xml",
        "name": "CHRZ #2"
      }
    }
  }
}
```

{% hint style="info" %}
The check metadata option in NMKR is not able to verify whether the metadata are syntactically correct. Please, if in doubt, mint a test NFT.
{% endhint %}

#### Example NFT&#x20;

{% embed url="<https://pool.pm/asset13g64ttk7tntqkusj0c9x4xe780s26y4n0nsqds>" %}
Link to the example NFT
{% endembed %}

**Special credits to** [**Gamez On Chain**](https://twitter.com/gamezonchain) **for providing a lot of valuable information to this topic.**


# Metadata Standards on Cardano

Relevant to RWAs

When tokenizing real-world assets on Cardano, metadata plays a critical role. Metadata gives meaning to a token: what it represents, who backs it, and what information is attached (e.g. audits, legal identifiers, or valuation data).

There are several CIPs used for token metadata:

#### CIP-25 (NFT Metadata Standard)

* Metadata is stored in the minting transaction under label **721**.
* Widely supported by wallets, explorers, and marketplaces.
* Updating metadata requires minting again (minting additional supply or using a **burn + remint** process).
* Works well for simple NFTs or RWAs that do not require frequent metadata changes.

**Example CIP-25 Metadata (JSON):**

```json
{
  "721": {
    "policy_id_here": {
      "WheatToken001": {
        "name": "Tokenized Wheat Certificate",
        "description": "Represents 1 ton of wheat stored at Warehouse #12",
        "image": "ipfs://QmExampleHash",
        "version": "1.0"
      }
    }
  }
}
```

***

#### CIP-68 (Reference NFT with On-Chain Metadata)

* Separates **user tokens** from a **reference NFT**.
* Metadata is stored in the datum of the reference NFT, and user tokens point to it.
* Metadata can be updated by modifying the reference NFT without affecting user-held tokens.
* More complex to implement, but ideal for RWAs that require dynamic data (e.g. audits, price updates, legal status).

**Example CIP-68 Metadata (simplified datum):**

```json
{
  "version": "1.0",
  "name": "Tokenized Wheat Certificate",
  "description": "Represents 1 ton of wheat stored at Warehouse #12",
  "custodian": "Agricola Magdalena SRL",
  "audit_date": "2025-09-01",
  "proof_of_reserve": "ipfs://QmAuditReportHash"
}
```

***

#### CIP-86 (Metadata Updates via Oracles) – <mark style="color:$warning;">Not available yet</mark>

* Allows metadata to be updated without minting or burning tokens.
* Uses a **metadata oracle** assigned to the policy to submit changes.
* Backward compatible with CIP-25.
* Still early-stage, but promising for scenarios where frequent off-chain data must be reflected on-chain.

***

#### Comparison: Metadata Standards on Cardano

| Feature                       | **CIP-25**                                  | **CIP-68**                             | **CIP-86** (in development)          |
| ----------------------------- | ------------------------------------------- | -------------------------------------- | ------------------------------------ |
| **Type**                      | Metadata in minting transaction (label 721) | Metadata stored in reference NFT datum | Metadata managed via assigned oracle |
| **Update method**             | Burn + remint                               | Update reference NFT, user tokens stay | Oracle updates metadata directly     |
| **Complexity**                | Low                                         | Medium–High                            | Medium                               |
| **Wallet / Explorer support** | Very high                                   | Growing                                | Not widely supported yet             |
| **Best for**                  | Static metadata, simple RWAs                | Dynamic RWAs with updates              | RWAs needing frequent off-chain data |
| **Example use case**          | Tokenized certificates                      | Commodities with audits                | Financial assets with live feeds     |


# CIP-68

Datum Metadata Standard

NMKR Studio also supports NFT minting with the [CIP-68 Metadata standard](https://cips.cardano.org/cips/cip68/).&#x20;

### What is the CIP-68 Datum Metadata Standard?

CIP-68 proposes a metadata standard for assets on the Cardano blockchain, not limited to just NFTs but any asset class. It aims to address the limitations of a previous standard ([CIP-0025](/nmkr-studio/token/metadata#metadata-structure)) by introducing two assets: a reference NFT and a user token. The user token represents the actual asset in a user's wallet, and the reference NFT points to the metadata of the user token.&#x20;

To classify tokens, CIP-68 introduces labels to identify their purpose. The use case of CIP-68 is to enable flexibility and innovation on Cardano. It allows developers to create assets with dynamic metadata, which can be updated over time. This flexibility opens possibilities for various use cases, including NFTs with changing properties or fractionalized NFTs.

In summary, CIP-68 enhances Cardano's capabilities by providing a standardized way to handle asset metadata, empowering developers to create diverse tokenized assets and applications.

### Benefits of CIP-68

The CIP-68 metadata standard for Cardano tokens offers several benefits:

1. Programmability: CIP-68 enables the creation of tokens with programmable metadata. This means that the metadata associated with a token can be updated and modified without the need to mint new tokens. This flexibility allows for the evolution and adaptation of tokens over time.
2. Metadata Changes: With CIP-68, token metadata can be easily changed and updated. This is particularly useful for non-fungible tokens (NFTs) where the associated metadata, such as artwork or additional information, may need to be modified or enhanced.
3. Contract-Friendly: The CIP-68 metadata standard is designed to be contract-friendly, meaning it aligns with the structure of other Cardano Improvement Proposals (CIPs) and follows a low-level representation of metadata. This makes it easier to integrate tokens with smart contracts and other applications on the Cardano blockchain.
4. Asset Class Flexibility: While CIP-68 was initially developed for NFTs, it can be applied to any asset class on the Cardano blockchain. This means that the benefits of programmable metadata and easy updates extend beyond NFTs and can be utilized for various types of tokens.
5. Advantages over Other Platforms: The CIP-68 metadata standard, along with other design choices in Cardano, provides advantages for Cardano native tokens compared to tokens on other blockchain platforms. These advantages include improved programmability, metadata flexibility, and integration with smart contracts.

Overall, the CIP-68 metadata standard enhances the functionality and versatility of Cardano tokens by enabling programmable metadata, easy metadata changes, and contract-friendly integration. These benefits make it a valuable standard for token creators and developers on the Cardano blockchain.

### Workflow to mint and update CIP-68 Tokens

1. The user-token goes to the purchaser and reflects the metadata of the reference token&#x20;
2. In the actual transaction where the reference token is sent to the smart contract, the inline datum provides the reference token's metadata.
3. The NFT will be sent from the smart contract to the smart contract with the updated inline datum even though the metadata has changed.

{% hint style="warning" %}
A smart contract is required to keep the asset accessible for changes first to update NFTs in an automated way second to define who can update the NFT (Until we launch our own smart contracts we recommend [Yepple](https://blockchain.yepple.io/) for for CIP-68 smart contracts!) \
\
&#x20;Technically you could also use a regular address, but then there is no way for an automation and only the one who holds the keys can update the token manually.
{% endhint %}

{% hint style="warning" %}
CIP-25 Token can also be updated without the need for a smart contract. Update directly from the NMKR Studio without any hassle. [See here](/nmkr-studio/token/update-edit-after-mint-reveal)
{% endhint %}

### Enable CIP-68 in NMKR Studio

<figure><img src="/files/K1jBCXaQt1ceH15Mg5Q2" alt=""><figcaption></figcaption></figure>

CIP-68 can be enabled when creating a new project in NMKR Studio.\
Simply Select CIP-68 instead of CIP-25 on the first tab of the project creation.

#### CIP-68 reference NFT address

For a specific user token there must exist exactly one reference NFT, this token should be received either in your own self-custody wallet or, for easier set-up in NMKR Studio, you can also select to create a managed wallet in the same process, to receive the reference NFT.

{% hint style="info" %}
A simple Smart Contract from NMKR will be provided soon to further expand the CIP-68 capabilyties in NMKR Studio.
{% endhint %}

### CIP-68 metadata template

Once CIP-68 is selected, the metadata template will adjust from CIP-25 to CIP-68.\
Please do not make any changes to the metadata template.

#### Example:

```
{
  "fields": [
    {
      "map": [
        {
          "k": {
            "bytes": "6e616d65"
          },
          "v": {
            "bytes": "3c61737365745f6e616d653e"
          }
        },
        {
          "k": {
            "bytes": "696d616765"
          },
          "v": {
            "bytes": "3c697066735f6c696e6b3e"
          }
        },
        {
          "k": {
            "bytes": "6d6564696174797065"
          },
          "v": {
            "bytes": "3c6d696d655f747970653e"
          }
        },
        {
          "k": {
            "bytes": "6d6564696154797065"
          },
          "v": {
            "bytes": "3c6d696d655f747970653e"
          }
        },
        {
          "k": {
            "bytes": "6465736372697074696f6e"
          },
          "v": {
            "bytes": "3c6465736372697074696f6e3e"
          }
        },
        {
          "k": {
            "bytes": "66696c6573"
          },
          "v": {
            "list": [
              {
                "map": [
                  {
                    "k": {
                      "bytes": "6d6564696174797065"
                    },
                    "v": {
                      "bytes": "3c6d696d655f747970653e"
                    }
                  },
                  {
                    "k": {
                      "bytes": "6e616d65"
                    },
                    "v": {
                      "bytes": "3c6d696d655f747970653e"
                    }
                  },
                  {
                    "k": {
                      "bytes": "737263"
                    },
                    "v": {
                      "bytes": "3c697066735f6c696e6b3e"
                    }
                  }
                ]
              }
            ]
          }
        }
      ]
    },
    {
      "int": 1
    }
  ],
  "constructor": 0
}
```

###


# Duplicate

Duplicate your tokens to create unique NFTs but with the same image and metadata structure

NMKR Studio gives you not only the possibility to create [Fungible Tokens](/nmkr-studio/token#fungible-token) that are basically exact same copies of each other but also to create unique [Non-Fungible Tokens](https://docs.nmkr.io/nmkr-studio/token#non-fungible-token) that have the same metadata structure and files, but with serialization. This Serialization, which is the only difference in the metadata, distinguishes it as a one-of-a-kind asset on the blockchain.

<figure><img src="/files/uHoBkSgLD4mskGmgjakl" alt=""><figcaption></figcaption></figure>

### Preparation to duplicate NFTs

To create duplicated and serialized NFTs you are going to [upload](https://docs.nmkr.io/nmkr-studio/token/upload) a token in a [project with the maximum supply of "1"](https://docs.nmkr.io/nmkr-studio/project/create#decide-if-the-project-is-for-fungible-or-non-fungible-tokens). There might be user cases where you want to have a higher maximum supply than "1", but this wouldn't be Non-Fungible tokens and would cause that you can create a larger amount of tokens for each serialized token.\
\
In this project, you will now [upload a single token](https://docs.nmkr.io/nmkr-studio/token/upload) and [specify the metadata](https://docs.nmkr.io/nmkr-studio/token/metadata) as needed for your project.&#x20;

{% hint style="info" %}
For the serialization in your token name it is necessary that you leave the [placeholders\
\<asset\_name> and \<display\_name>](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders) in the metadata of the NFT that you want to duplicate if you use the [metadata-override](https://docs.nmkr.io/nmkr-studio/token/edit#metadata-override-tab). If you change these placeholders in the tokens metadata to hard values, the serialization process of your tokens will fail because NMKR Studio is unable to replace both names with a numbered version.

\
Please make sure that the token you are going to use for the duplicationg process is exactly how it should be **before you start the duplicating process.** After that, editing the tokens can be time consuming, and in most cases, you'll have to delete the tokens in bulk and start over.
{% endhint %}

### Duplicate the NFT

To start the duplicating process of your tokens simply press the button "Duplicate NFT", which can be found in the actions bar of your token.

<figure><img src="/files/W0EaIY2xs81nIfkDrfAt" alt=""><figcaption></figcaption></figure>

This will open the duplicating tab, which allows you to specify the key aspects of the serialization of your tokens.

<figure><img src="/files/GCRpFKBUlzXXqTJ783Q2" alt=""><figcaption><p>Specify the key aspects of your duplicates</p></figcaption></figure>

#### Count duplicates

Means, the number of tokens you want to create. It is recommended to create the full amount of tokens you want to have and delete the initial token that was the template for the duplicates afterwards. So if you want to have 100 tokens afterwards, please enter "100" and delete the first token of your project afterwards. If you want to keep the first token, then please deduct it from this count.

#### Starting number

The starting number is the number at which you want to begin the duplicating process. If you intend to keep the original token, please set this number to "2". Also, if you've already made duplicates and want to add more, enter the number following your last token here.

#### Leading zeros

The leading zeros specify how many zeros the duplicates should have.\
E.g. 001 has 3 leading zeros, where the third is replaced by the count 1. For a project of 1000 tokens, you want to add "4" here.

#### Tokenname prefix

The tokenname is basically the name, that you want to have in front of the number.\
E.g. Tokenname prefix "landplot" will look like: **landplot**0001<br>

This tokenname will act as [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) of your tokens on-chain.

#### Tokenname suffix

Where the prefix is in front of the number, the suffix will be directly after it.\
E.g. suffix = "area" will look like: 0001**area**\
A combination of prefix and suffix is possible. E.g. landplot0001area.

{% hint style="info" %}
Please note, that the asset\_name is not allowed to hold more than 32 characters and that it isn't possible to add any special characters there. Whitespaces are also consideres as special characters.\
\
If you want to add special characters, please use the dipslay\_name like explained below.
{% endhint %}

#### Display name

The display\_name is allowed to contain special characters. It allows you to have your tokens named like "landplot #0001".\
\
The prefix and suffix follows the same rules like with the tokenname prefix and suffix.\
If you want to have your display name written like landplot #0001 you would input "landplot #" into the display name prefix.

\
Check the previews below if everything looks like intended, before you hit  "Start Duplicating".

<figure><img src="/files/rSHlhpR1bIWOJ73313tz" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If a token with the tokenname already exists in the project, the duplicating process will skip this token and continue with the next one and reduce the [count duplicates](https://docs.nmkr.io/nmkr-studio/token/duplicate#count-duplicates) by one.\
\
Don't forget to delete the initial token after the duplicating process if you haven't deducted it when specifying the [count duplicates](https://docs.nmkr.io/nmkr-studio/token/duplicate#count-duplicates).
{% endhint %}


# Delete

Delete tokens of your project in NMKR Studio

### Delete single tokens in NMKR Studio

To delete single Tokens or small amount of Tokens, it makes sense to delete them manually in the NMKR Studio User Interface. You can find the button for it in the actions bar.

<figure><img src="/files/1tWKq8QwWKTNyIH6Lqnv" alt=""><figcaption></figcaption></figure>

Please note that you can only delete tokens that aren't minted. Deleting the tokens in the project won't have any effect on-chain. If you want to remove the tokens from the Blockchain, please read the documentation about [how to burn tokens](https://docs.nmkr.io/nmkr-studio/token/burn).

{% hint style="info" %}
Note - take a second to assess the situation before deleting your NFTs, if the issue is only with the metadata, you can edit this.
{% endhint %}

### Delete tokens in bulk via SFTP

Using SFTP is better for deleting larger quantities in bulk.\
To do this, login to the SFTP server using the same method as [demonstrated in the upload process](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp).

Once logged in, you can select the media and/or metadata files and delete them using Cyberduck or FileZilla. You can use the search function of the software to filter by filetype.


# Burn

Burn a token to remove its supply from the Blockchain

What means burning NFTs

You may ask "why burn?" Well, deleting an NFT is not possible due to the nature of the blockchain; therefore ‘burning’ an NFT is the method used because it effectively destroys the token by sending it to an address that nobody possesses. Even though the NFT will still exist on the blockchain, there will be no way of accessing it and therefore it is considered ‘burned’ or removed from circulation. The supply of the token will be 0 on the blockchain.\
\
Typically, the burning of tokens is initiated by large, crypto companies that may choose to burn as a way to adjust the supply that is available to drive an increase in demand due to increased scarcity.

Smaller groups or individual artists may choose to burn NFTs to rectify errors or incentivise the buyers to hold onto their NFTs as they become more valuable.

{% hint style="info" %}
This feature moved to the "manage project" features on the [NFT project tab](/nmkr-studio/project#nft-projects-tab).
{% endhint %}

<figure><img src="/files/CuT34YIvsL2R9FEAyDcJ" alt=""><figcaption></figcaption></figure>

### Burning in NMKR Studio

{% hint style="info" %}
**Please be aware that you need to create a burning endpoint in a project that has the same policy ID as the policy ID of the token that you want to burn!**\
\
As you send the NFTs along with the 2ADA to the endpoint in the same transaction, the burning process will take 2ADA for each transaction. Without these 2ADA, the NFT wouldn't be processed and would just sit there on the burning endpoint without being burned.
{% endhint %}

#### Create a burning endpoint

Go to the [Manage NFTs tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) of the project that was used to mint the token and press the button to create a burning endpoint

<figure><img src="/files/aGcZhiFgLABWCgjnL8bG" alt=""><figcaption><p>Create a burning endpoint for your project</p></figcaption></figure>

Copy the address by clicking the corresponding button as highlighted in the next step, and click "Ok". This is the address where you want to send the NFTs together with 2ADA **in the same transaction** in order to burn the token.

<figure><img src="/files/z7lhoYhmbxUINttvBdMJ" alt=""><figcaption><p>Copy the address of the burning endpoint</p></figcaption></figure>

{% hint style="info" %}
In case you need a burning endpoint with a later expiry date, please [reach out to us](https://nmkr.io/support)!
{% endhint %}


# Update (Edit after Mint / Reveal)

How to edit tokens after the mint to fix errors and prepare your project for a reveal style sale

{% hint style="warning" %}
The metadata of the tokens can be edited as long as the[ policy](https://docs.nmkr.io/nmkr-studio/project/policy) is not locked.\
\
The policy ID and the asset\_name of a Token can not be updated.\
\
The process takes 0.5 **mint coupon for every NFT (2.25 ADA)** that is updated from your accounts balance and the NFTs will remain in the holders wallet during the whole process.
{% endhint %}

To update the metadata of a token on the Blockchain we are going to mint a duplicate of the token that needs to be updated but with the correct metadata. When minted, this duplicate will override the current metadata of the original token. After the metadata is updated, the duplicate will be burned to restore the correct supply of the Token. This explains also why the asset\_name and/or Policy ID can't be updated, it would not able to match the duplicate with the original on-chain.\
\
If you are curious, check the mint transaction of your token afterwards with [cardanoscan.io](https://cardanoscan.io), it will show one mint transaction, then another one(the newly minted token) and then a burn transaction).&#x20;

<figure><img src="/files/vY5J4egm2F8UO8a7i8yA" alt=""><figcaption></figcaption></figure>

## Fix errors after mint (single Tokens)

{% hint style="info" %}
Docs under rework.\
\
Because of a redesign, the button now says "Update". We will upload a new video and documentation soon.
{% endhint %}

If you only want to make changes to the Metadata text, then you can start the process by locating the particular NFT you want to edit and selecting the Remint And Burn option.

<figure><img src="/files/1UwfZDSKCgVFNPeze1SY" alt=""><figcaption></figcaption></figure>

You can then edit the metadata in the lower box as you desire, but please make sure to not make any changes to the asset\_name or the policy ID. These values can't be updated.

<figure><img src="/files/vwKYKeVCP7sH3kKo1Pp3" alt=""><figcaption><p>Remint and Burn window</p></figcaption></figure>

Once you've added all the changes, press on mint to push the changes on chain.

#### Editing images/files

Following on from the above tutorial, you would agree that actually, the Images/Media are also just metadata (most of the time). Because of this, we can also change the media by [editing the IPFS hash value](https://docs.nmkr.io/nmkr-studio/project/metadata-template#add-files-directly-to-the-metadata-template).

{% hint style="info" %}
Note - this assumes that you are going to change an image, for another image. In the rare even you might want to change the media type, you should also update the [**mediaType**](https://docs.nmkr.io/nmkr-studio/project/metadata-template#mediatype) value as needed.
{% endhint %}

The quick explanation for this, is that we are simply going to edit the IPFS Hash, inside the metadata for the images/media we want to change. If you already have another IPFS hash that you have created outside of NMKR Studio, then you can use that. If not, have a look at this section to see the best practise for using NMKR Studio.

What we are essentially going to do is make a dummy project for the purpose of getting an IPFS hash. It is important to make a totally new project for this, so that this data doesn't affect your active project that is minting.

The first step then is to create a brand new project, call it something like "Spare IPFS KEEP ME", this will remind you to not delete this project, as well as confirm that it is not meant to be a live project.

Put in the minimum information into the project creation window (this doesn't matter as we are not actually going to use the project).

You can then go straight to the [Upload and Pin option](https://docs.nmkr.io/nmkr-studio/token/upload/upload-single-tokens) - fill in the minimal details and upload the NFT

<figure><img src="/files/sBkNMed2LyyRBkhZknCL" alt=""><figcaption></figcaption></figure>

Again, we are doing this ONLY so that NMKR Studio creates a new IPFS link for us, for the new image.

Once the NFT is uploaded, you can then see its details or view its metadata, from which you can copy the IPFS hash, ready to paste into the metadata of the NFT we are going to remint.

<figure><img src="/files/oZgQXP0mjS2OYc4kN5jU" alt=""><figcaption></figcaption></figure>

When you paste the new link, make sure that the format looks correct before pressing the mint button.

```json
        "image": "ipfs://QmZNqgUHhGukXD27pAZtZE5BEkx6VXB1AhQVmK55QCd31y",

         ---> "image": "ipfs://this is the hash",
```

Please make sure to replace the IPFS hash of your file also in the file section of the metadata, or you will only replace the thumbnail of your NFT

```json
    "files": [
      {
        "name": "token",
        "mediaType": "image/png",
        "src": "ipfs://QmZNqgUHhGukXD27pAZtZE5BEkx6VXB1AhQVmK55QCd31y"  <--- IPFS hash
      }
```

Well done, you have now successfully edited an NFT after it has been minted!

## Fix tokens in bulk after mint

{% hint style="info" %}
For now, there is no option in NMKR Studio to update the whole project in one go, you will have to [reach out to us](https://nmkr.io/support) after preparing your project. However, you can update your project in[ batches of 100 tokens at once](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#push-changes-on-chain).
{% endhint %}

<figure><img src="/files/LmBAZwfb825styQxgyvh" alt=""><figcaption></figcaption></figure>

There are different workarounds to update the metadata of your project in bulk, please read the following workarounds carefully and decide which makes sense for you.

#### Prepare for bulk update via Metadata template

As you know the values and structure of the Metadata Template applies for every token in the project, therefore it can make sense to adjust the Metadata template in order to update all your tokens with the same values. This workaround makes sense, for example if you need to change the [description](/nmkr-studio/project/metadata-template#description-and-extended-description-with-more-than-63-characters) or any [field names](https://docs.nmkr.io/nmkr-studio/project/metadata-template#placeholders-and-fields). \
\
[Please read here to learn how to adjust the Metadata template of your project.](/nmkr-studio/project/edit#edit-metadata-template)\
\
[Push the changes on-chain](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#push-changes-on-chain) in the next step.

#### Prepare for bulk update with SFTP

This workaround makes sense to fix structural issues or images in bulk.

The updating in bulk follows the same process as the fixing of single tokens. You need to update the metadata of the tokens. To update the metadata of the tokens in bulk, we recommend using the [Bulk upload via SFTP](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp) to replace the metadata of the tokens. Delete the old metadata of the project before [uploading the new correct version of the metadata](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata).\
\
If you need to **fix the pictures of your project** in bulk, you can create a [duplicate of your project ](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects)but with the new images. For this workaround, create a project that has[ the same policy ID as the original project.](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects) After [uploading all the files and metadata](https://docs.nmkr.io/nmkr-studio/token/upload), you can now use the ["export metadata in a zip" function](https://docs.nmkr.io/nmkr-studio/project/export-metadata-as-zip) to download the new metadata, but without any placeholders.&#x20;

<figure><img src="/files/iAQRsBvIqs2d0vfcfFjB" alt=""><figcaption></figcaption></figure>

This new metadata files contain the new IPFS hashes of your images and can be easily used to replace the metadata of your original project via [SFTP Bulk upload](https://docs.nmkr.io/nmkr-studio/token/upload/bulk-upload-via-sftp#bulk-upload-metadata). Please make sure to delete the old metadata files before uploading the new ones.\
\
[Push the changes on-chain](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#push-changes-on-chain) in the next step.

#### Prepare for bulk update with placeholder.csv

If you don't need to make any structural changes to your metadata, but to fix e.g. typos in bulk it could make sense to use the [placeholder.csv](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata#upload-metadata-in-a-placeholder.csv-sheet) workaround.\
\
In order to do so, please download the placeholder.csv of your project first. The button can be found in the Actions bar of your project on the [NFT Projects Tab](https://docs.nmkr.io/nmkr-studio/project#nft-projects-tab).

<figure><img src="/files/NEzVqX6zBsKeOiki5T3Y" alt=""><figcaption></figcaption></figure>

The downloaded file allows you to easily use the "find and replace" function of Excel or google sheets to find and replace the errors with the correct values. After you fixed all errors, save the file as placeholder.csv and reupload it to your project via [SFTP upload](https://docs.nmkr.io/nmkr-studio/token/metadata/add-token-specific-metadata#upload-metadata-in-a-placeholder.csv-sheet).

<figure><img src="/files/QuiXE52kf6E5GT5XKMCr" alt=""><figcaption><p>placeholder.csv opened in excel / google sheets</p></figcaption></figure>

The final step is to[ add 2ADA for every NFT that needs to be updated to your accounts balance ](/nmkr-studio/account/mint-coupons#buy-mint-coupons)and [start the updating process](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#push-the-changes-on-chain) for the selected tokens in bulk. The feature can be found in the drop down selection of the [Manage NFT tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab).<br>

[Push the changes on-chain](https://docs.nmkr.io/nmkr-studio/token/edit-after-mint-reveal#push-changes-on-chain) in the next step.

## Reveal tokens after sale (in bulk)

{% hint style="info" %}
For now, there is no option in NMKR Studio to update the Tokens in bulk, you will have to [reach out to us](https://nmkr.io/support) after preparing your project.&#x20;
{% endhint %}

[Upload the NFTs](https://docs.nmkr.io/nmkr-studio/token/upload) of the project with the correct images the tokens should have after the reveal.\
Then create a separate test project and upload the placeholder image that the tokens should have at the time of the sale. This project can be deleted afterwards, it is only to get the IPFS hash of the image that you want to use as placeholder image during the sale. You find it in the metadata of the token by clicking the [show metadata](https://docs.nmkr.io/nmkr-studio/token/metadata/fingerprint-metadata-preview) button, or you can directly copy it from the overview in the [Manage NFT Tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab).

<figure><img src="/files/BDUewkUH2olqBdcgQFwm" alt=""><figcaption><p>Copy the IPFS hash from your placeholder image</p></figcaption></figure>

\
The next step is to edit the [metadata template](https://docs.nmkr.io/nmkr-studio/project/metadata-template) of the project. There, you will now replace the \<ipfs\_link> with the hash of the placeholder image from the test project.\
In case you want to reveal custom fields(traits) together with the image after the sale, please also replace the placeholders of the custom fields with a "value" ( e.g. "wait for reveal").

```json
{
  "721": {
    "<policy_id>": {
      "<asset_name>": {
        "name": "<display_name>",
        "image": "<ipfs_link>",              --->  "src": "ipfs://Qmdp...xyz" 
        "mediaType": "<mime_type>",
        "body": "<body>",                    --->  "body": "wait for reveal" 
        "description": "<description>",
        "files": [
          {
            "name": "<display_name>",
            "mediaType": "<mime_type>",
            "src": "<ipfs_link>"              --->  "src": "ipfs://Qmdp...xyz" 
          }
        ]
      }
    },
    "version": "1.0"
  }
}
```

To prepare the project for the reveal, simply replace the IPFS hashs again with the \<ipfs\_link> placeholder. The same with the placeholders of the custom fields.\
NMKR Studio will now be able to replace the placeholders with the individual values of the Tokens metadata during the remint and burn process. \
\
Now you are going to [add 2ADA for every NFT that needs to be updated to your accounts balance](https://docs.nmkr.io/nmkr-studio/account/mint-coupons#buy-mint-coupons) and start the updating process for the selected tokens in bulk. The feature can be found in the drop down selection of the [Manage NFT tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) below your tokens overview.<br>

## Push changes on-chain

Select the tokens individually, or use the "all" button to checkmark all tokens on the page.\
Specifying the amount of tokens that can be shown on one page helps you to remint and burn up to 100 tokens in one go. For very big projects, please [open a ticket](https://nmkr.io/support), but please plan 3-4 working days for us to update the project for you.

<figure><img src="/files/v9g9hEn7uGx12VbtNGKU" alt=""><figcaption></figcaption></figure>

###


# Set up Sales

Minting on demand / offer a vending machine to let your customers mint on demand

Besides the option to [mint manually](https://docs.nmkr.io/nmkr-studio/minting/minting-on-demand) or [airdrop tokens](https://docs.nmkr.io/nmkr-studio/minting/airdropper), NMKR Pay offers a broad variety of features to set up the sales for your project to let your customer buy on demand via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) and the [Pay-in address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address).\
\
For the sales on demand there are basically two essential differentiations. The [specific sales](https://docs.nmkr.io/nmkr-studio/set-up-sales#specific-sales) and the [random sales](https://docs.nmkr.io/nmkr-studio/set-up-sales#random-sales). Both sales methods can be used with the [sales conditions](/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting) and [discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts).

### Random sales

Random sales will use the prices from the [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) and mint randomly reserved tokens out of a project. If a buyer decides to buy more than one token in one go, every token will be randomly selected and reserved from the project.\
\
To set up random sales, [specify prices in the price list ](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist)and enable [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) or the [Pay-in address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address).

### Specific sales

Specific sales will use the prices from the [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) or [specific token prices](https://docs.nmkr.io/nmkr-studio/token/edit#static-price-with-specific-sales).\
Specific sales only work with [NMKR Pay specific payment links](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/specific-payment-links).&#x20;


# Manage prices / Pricelist

Set up a price list for your sales on demand

NMKR Studio has a build in pricelist that allows you to specify price-amount pairs for your sales on demand via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) and the [Pay-in Address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address). It comes with some features like [discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts), [free drops](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/free-drops) and [prices specified in custom native Cardano tokens](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#prices-with-custom-tokens).

The prices are specified for every project separately, which allows you to also set up different sales for[ projects that share the same policy ID](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects). The button can be found in the actions bar of every project in the [NFT projects tab](https://docs.nmkr.io/nmkr-studio/project#nft-projects-tab).

<figure><img src="/files/fonFZu9Lj0QscV1AnVBE" alt=""><figcaption></figcaption></figure>

### Open the price list

<figure><img src="/files/E9wSH97BPmkMkuwDbrfU" alt=""><figcaption></figcaption></figure>

The following tab allows you to [create new prices](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices), [specify discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts), and also to set up [Sales Conditions](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting).

<figure><img src="/files/PfV5gHspJSGUtomXapci" alt=""><figcaption></figcaption></figure>


# Create new Prices

Specify prices in the price list feature of NMKR Studio

The prices you define in the price list of NMKR Studio apply to sales on demand via [NMKR Pay](/nmkr-studio/set-up-sales/nmkr-pay) and the Pay-in address. The price list allows you to set up different price/amount-pairs and also to specify [prices as FIAT currency prices](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#prices-in-fiat-currency), the ADA mint price will then be always calculated depending on the current market price of ADA. **You want to set up a price for every amount that should be able to buy in one transaction.**

{% hint style="info" %}
Out of rechnical reasons, there is a **minimum price of 6.5 ADA**. By using [MultiSig payments](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) we can actually **reduce the minimum price to 3ADA**. As this is not implemented to the user interface yet, please [create a ticket](https://nmkr.io/support) to set this up.
{% endhint %}

{% hint style="success" %}
To enable multiple token purchases in one transaction, you need to set up a price list with multiple price/amount-pairs.
{% endhint %}

{% hint style="warning" %}
Please read the details about the [NMKR minting fee and Sendback](https://docs.nmkr.io/nmkr-studio/pricing) before you set up prices.
{% endhint %}

<figure><img src="/files/p5IgkOw6NGwexDlGEryT" alt=""><figcaption></figcaption></figure>

### Create a new price

To create a new price-amount pair click "create new price".

<figure><img src="/files/0jhhBCLYcTglPFOK7jIG" alt=""><figcaption></figcaption></figure>

Specify the amount of tokens, the price for this amount of tokens and the [currency](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#prices-in-fiat-currency) in this tab.\
The option to specify a certain period where this price is valid is optional and you could also specify only a starting date or and expiry date for this price.

Activate the price and click "save".

<figure><img src="/files/7Abtu8itQAGuuy1iDgRO" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
How many NFTs can I sell per transaction?\
\
The maximum possible amountof tokens that can be bought in one Transaction depends on the size of the [metadata](https://docs.nmkr.io/nmkr-studio/token/metadata).\
Cardano has a maximum metadata size of 16kb. Each character, also special characters and whitespaces, is one byte.\
\
\
As Fungible Tokens all share the exact same metadata, so it would be only presented once per transaction, you can basically sell an unlimited amount.
{% endhint %}

For a free drop / 0 ADA price, please read how to [set up free drops](/nmkr-studio/set-up-sales/manage-prices-pricelist/free-drops).\
For discounts, please read [how to set up discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts).

### Custom Token for payment

**Beta-feature!**\
NMKR Studio allows you to offer minting with Cardano native custom Tokens and NFTs, please [read this article to learn how to set them up](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/custom-token-payment).

### Prices in FIAT currency

The prices in FIAT currencies can be set up during the regular creation of a price.\
Instead of ADA, please select any FIAT currency from the dropdown.

{% hint style="info" %}
This feautre does not enable [FIAT payment](/nmkr-studio/set-up-sales/nmkr-pay/fiat-eth-and-sol-payment) via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay), it will calculate the prices in ADA for a fixed FIAT currency price during each payment process depending on the current market price of ADA.\
\
Example:\
A price of 10 USD is specified in the price list.\
The current market price of ADA is 5$.\
Therefore, NMKR Pay will show a price of 2ADA in NMKR Pay.<br>
{% endhint %}

<figure><img src="/files/othikoL8zT7GdO8iP3Mb" alt=""><figcaption><p>Set up prices in FIAT currency</p></figcaption></figure>


# Free Drops

Offer free drops for your customers

Free claimable Drops are a cheaper way to offer your customers free tokens than the [airdrops](https://docs.nmkr.io/nmkr-studio/minting/airdropper).\
NMKR Studio utilizes NMKR Pay to let your customers claim the tokens for free.

### Set up free Drops

Beta feature!\
[NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) allows you to offer your customer free drops. For now, this feature can be only setup by us. [**So please open a ticket**](https://nmkr.io/support) and let us know to which project we should add the free drop.\
Please plan some time for us to set this up for you (1-2 working days).\
\
Fill up your balance with 2ADA for each token, to cover the minting fees.\
[More details](https://docs.nmkr.io/nmkr-studio/account/mint-coupons).

### Pricing of free Drops Customer side

The customer will pay 2ADA Deposit + 0,5ADA Cardano network fees for each token.\
The 2ADA that were paid as deposit will be sendback as MinUtxo\* together with the NFT to the customers wallet.\
\
\*The MinUtxo is a Cardano requirement. Every NFT needs to be sent together with a mimimum of ADA in the same transaction.

### Pricing of free Drops Seller side

As we technically waive the NMKR minting fee to enable free Drops for your customer, you have to prepay the 2ADA minting fee for every NFT in the project. If you are not selling out all the free tokens, we can refund the 2ADA for every remaining NFT in the project and disable the free drop.

### &#x20;<br>


# Custom Token payment

Set up prices for native cardano tokens

### Custom Token payment / Custom Token prices

**Beta-feature!**\
NMKR Studio allows you to offer minting with Cardano native custom Tokens and NFTs.\
Out of technical reasons, there is a minimum of 5 ADA that needs to be added to the payment with a custom token payment.

{% hint style="warning" %}
This feature does not work if you specified any [discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts) or [additional payout wallets](https://docs.nmkr.io/nmkr-studio/project/additional-payout-wallets).\
As this is a beta, to make it work for custom token sale and regular ADA sale at the same time in the same project is something we still have to work on. For now, you could [split the project](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#one-policy-for-multiple-projects) or better use different time windows for the sales.\
\
You can have ADA prices and ADA + FT prices active at the same time if you use the [Pay-In address](/nmkr-studio/set-up-sales/pay-in-address) for the custom token sales.
{% endhint %}

<figure><img src="/files/bQjvYl0Twv1rkN5inpbY" alt=""><figcaption></figcaption></figure>

To set this feature up, please click the "+" button when [setting up a new price](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices#create-a-new-price).

<figure><img src="/files/75bqBGyhRBXWLUgcTfWN" alt=""><figcaption></figcaption></figure>

Add at least 6.5 ADA to the price, this will be needed to cover the fees, as we are not directly converting the custom tokens into ADA but transferring the custom tokens to the sellers' wallet, this is a technical necessity.\
\
Add also the Cound of custom tokens and the policy ID.\
In this screenshot we are using the stablecoin Djed, which is recognized as DjedMicroUSD.\
Activate the price and click on save.

{% hint style="info" %}
Please always consider the decimals of this specific token.\
Djed has 6 decimals, which means 1 Djed = 1000000 DjedMicroUSD
{% endhint %}

<figure><img src="/files/p54g5Lrq8fMHuDVaiZKX" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Of course, you can also set up multiple prices options like only ADA or multiple CNT+ADA per amount, you just have to take care of a few important steps to make it working right.

1. set up the ADA only price first, then set up the prices for ADA+ CNT. Some ADA needs to be added as we need it as a technical minimum to cover the fees, sendback etc.
2. Set up the price amount pair for the CNT+ADA.
3. share the NMKR Pay link for ADA only payment and the pay-in address for the CNT+ADA payments.

NMKR Pay can also handle CNT payments, but as it is triggered by the amount ( \&c=1 parameter at the end of the payment link) it does not work with multiple price options per amount.
{% endhint %}

### Pay with NFTs

If you want to set up payment with NFTs instead of Fungible Tokens, please proceed as explained above, but leave the "Add. Token Assetname"- field empty when setting up the prices.\
\
Please also keep in mind, that this feature is not supported by [NMKR Pay](/nmkr-studio/set-up-sales/nmkr-pay) and can only be used with the[ Pay-In Address](/nmkr-studio/set-up-sales/pay-in-address).\
\
Please set a minimum price in ADA additionally to the NFTs.\
2 ADA are minting fee for each NFT + 2 ADA MinUtxo (sendback) + a technical minimum for the transaction, seller revenue etc. \
\
We recommend 7 ADA for one NFT + 4 ADA for each additional NFT that you sell.


# Discounts

Set up discounts by specific conditions

The price list in NMKR Studio allows you to specify discounts depending on the condition of the buyers wallet. These conditions can be a specific stake pool the buyer is delegating to, the policy ID of an asset the buyer holds in his wallet, or the wallet address of the buyers wallet.

The discount feature works with sales on demand via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) and the [Pay-in address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address).\
Usually, discounts will be sent to the customer as refunds in a separate transaction. However, if you use [MultiSig payments](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment), the refund will be deducted in the same transaction.

{% hint style="info" %}
Multiple Discounts will not stack up and only the highest discount will apply.\
\
Please make sure the discounts make sense with your pricing and, if specified, additional payout wallets!\
\
\
Discount Workflow:\
If [MultiSig](/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) is not activated, the discount will be sent together with the NFT back to the customer. It won't beindicated in NMKR Pay.
{% endhint %}

<figure><img src="/files/IJutGw4CCKamjmS79O2B" alt=""><figcaption></figcaption></figure>

### Create discount

Go to your [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) and click the "Pricselist Discounts" button.

<figure><img src="/files/zWVmUZNQSvAMmDjBM67q" alt=""><figcaption></figcaption></figure>

The following tab allows you to specify multiple discounts for your project by clicking the "create new discount" button.

<figure><img src="/files/T2qm3ywUNv6MDUMV7F0T" alt=""><figcaption></figcaption></figure>

You can now choose one of three conditions that need to be matched to grant the discount.

#### Discount by wallet address / whitelisting

This discount feature only grants discounts to wallet addresses that are whitelisted.\
To whitelist the addresses, please upload a csv file which contains a wallet address in each row.\
Please do not add Stake addresses here. This csv file can be created with any spreadsheet software like Excel or google sheets.

<figure><img src="/files/ghUos9BQCslxzAIQylSV" alt=""><figcaption></figcaption></figure>

Click upload addresses, the tab will automatically show the number of entries that are recognized.

<figure><img src="/files/pISBshZgW9B9eIoUeAuI" alt=""><figcaption></figcaption></figure>

Check if the entries count is correct, add the discount in % and activate the price. Confirm by clicking on "save".

<figure><img src="/files/V4NlbKPgyMv7I1CCwigo" alt=""><figcaption></figcaption></figure>

If you made a mistake here in the uploaded csv. or you want to add changes to it, please click "Clear Addresses" and upload the new file.\
\
"Download Addresses" will download the csv file.

#### Discount by holding a token of a specific policy ID

This discount feature will grant discounts to holders of a specific policy ID.\
It is required to specify the policy of a specific token and a minimum amount that need to be hold of this said token. \
Add the discount in % and activate the price. Confirm by clicking on "save".\
\
If you add multiple policy IDs by clicking on the "+", it will use an or-logic and means, the buyer must hold a token of either policy A or policy B.

<figure><img src="/files/DxC2ReYe4Zbnx6w91XXj" alt=""><figcaption><p>Discount by policy ID</p></figcaption></figure>

#### Discount by Delegation to a specific Stake Pool

This discount feature will grant discounts to a delegator to a specific stake pool.\
Add the discount in % and activate the price. Confirm by clicking on "save".\
\
If you add multiple pool IDs by clicking on the "+", it will use an or-logic and means, the buyer must delegate either to pool A or pool B.

<figure><img src="/files/EVzzrZEacV1FlLXHqcGh" alt=""><figcaption><p>Discount by Delegation to a certain stake pool</p></figcaption></figure>

#### Discount by Coupon Code

This discount feature will grant discounts to holders of unique coupon codes, allowing you to implement targeted and personalized promotions for your products or services.

To enable multiple different coupon codes, set up a discount with the coupon code condition for each code that you want to use.

<figure><img src="/files/AQPG92XT0MRQX0SEpkdo" alt=""><figcaption></figcaption></figure>

What we do here is, we create a custom parameter for the payment link like **\&cp=DAVE** (if DAVE is the coupon code). Simply add that at the end of the NMKR Pay link you get, after you've[ set a price](/nmkr-studio/set-up-sales/manage-prices-pricelist):&#x20;

E.g. <https://pay.nmkr.io/?p=your\\_policy\\_ID\\&c=&#x31;**\\&cp=DAVE>\*\*

Now, this custom parameter will be printed in the transactions overview.<br>

Besides that, we can grant discounts depending on this custom property and also set in an [additional payout wallet](/nmkr-studio/project/additional-payout-wallets) with specific split. These features are great to incentivize and support [affiliates.](/nmkr-studio/project/affiliate-links)


# Sales Conditions & Whitelisting

Customize your sales with sales conditions

Sales Conditions are a great feature to customize your sales on demand depending on your sales strategy and how you want to interact with your community. Sales conditions can for example be used to [let only holders of a specific policy ID or delegators of specific stake pool](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/sales-conditions-depending-on-policy-id-or-stake-pool) mint tokens. The most popular sales condition is the [whitelisting](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count).

{% hint style="info" %}
Sales Conditions check the condition of the buyers wallet at the beginning of the purchasing process. However, some sales conditions that limit the amount of tokens that a wallet can buy are also using our database to counteract the bypassing of such sales conditions for example due to moving tokens out of the wallet after the first sale to mint another token where the sales condition only allows to purchase one.
{% endhint %}

{% hint style="success" %}
Sales conditions can be combined to use them in a "and-logic" instead of the "or logic" that is given by adding for example multiple policy IDs into one Sales Condition.
{% endhint %}

<figure><img src="/files/uFGmO2ekFov9WF5YsFLc" alt=""><figcaption></figcaption></figure>


# Sales conditions depending on policy ID or stake pool

Several sales conditions in NMKR Studio are related to specific policy IDs or by stake pool

Specify sales conditions that check the condition of a wallet at the beginning of the purchase and only allow customers that fulfil these conditions to buy.

{% hint style="success" %}
Sales conditions can be combined to use them in a "and-logic" instead of the "or logic" that is given by adding for example multiple policy IDs into one Sales Condition.
{% endhint %}

## Add a Sales Condition

<figure><img src="/files/xrYnPV6U5HypGJNnL6sh" alt=""><figcaption></figcaption></figure>

To create a sales condition, go to the [manage prices tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) and select the "Sales Condition" button.

In the next step click the "Add Sale condition" button.

The dropdown menu in the next window allows you to select from multiple sales conditions methods that we want to explain in detail below.\
There are a lot of sales conditions, please scroll down in the dropdown.

### Buyer must have one or more NFTs with a specific policy ID

Allow only holders of a token with a specific policy ID or\* of specific policy IDs(+button) to mint a specified amount of tokens.

\
\*if you want to allow only holders of multiple policy IDs to mint, please just add multiple sales conditions, the "+button" here uses an or-logic.

<figure><img src="/files/drgqHImMtqcbOEsThsS9" alt=""><figcaption></figcaption></figure>

### Buyer must NOT have an NFT with a specific policy ID

Don't allow holders of a token with a specific policy ID or\* of specific policy IDs(+button) to mint tokens.\
\
\*if you want to not allow only holders of multiple policy IDs to mint, please just add multiple sales conditions, the "+button" here uses an or-logic.

<figure><img src="/files/gBxFR8ErSVUJT8jazWyy" alt=""><figcaption></figcaption></figure>

### Buyer must have less than X NFTs with a specific policy ID (also: limit sale per wallet)

Allow holders of a token with a specific policy ID or\* of specific policy IDs(+button) to mint a specified amount of tokens. This sales conditions requires adding a maximum Amount of Tokens that the buyer can buy.\
\
**It can be used to limit the amount a buyer could buy from your current project** if you use it with the[ policy ID](https://docs.nmkr.io/nmkr-studio/project/policy/managing-policies#show-policy) of your project. \
\
\*if you want to allow only holders of multiple policy IDs to mint, please just add multiple sales conditions, the "+button" here uses an or-logic.

<figure><img src="/files/OD1pTRBlVdYmWavAuu38" alt=""><figcaption></figcaption></figure>

### Buyer must have the same amount of NFTs with a specific policy ID

Allow only holders of a token with a specific policy ID or\* of specific policy IDs to mint tokens(+button) in the same amount he holds from one of the given policies. The higher number counts of one of the policies counts.

\*if you want to allow only holders of multiple policy IDs to mint, please just add multiple sales conditions, the "+button" here uses an or-logic.

<figure><img src="/files/IPGQ6ZxEagN2haOmd8LO" alt=""><figcaption></figcaption></figure>

### Buyer must have a minimum of NFTs with a specific policy ID

Allow only holders of a token with a specific policy ID or\* of specific policy IDs to mint a token(+button). This sales conditions requires adding a minimum Amount of Tokens that the buyer must hold.\
\
\*if you want to allow only holders of multiple policy IDs to mint, please just add multiple sales conditions, the "+button" here uses an or-logic.

<figure><img src="/files/ijuTQUlARqDCkPxVx4Q6" alt=""><figcaption></figcaption></figure>

### Buyer must stake on a specific stake pool

Allow only buyers that are delegating to a specific stake pool or one of multiple stake pools to mint a token. \
To use this sales condition, just insert the bech32 Stake pool ID of one or more (+ button) stake pools. The staking duration is currently not considered.

<figure><img src="/files/X30rxnY2WYiiCjKCemUS" alt=""><figcaption></figcaption></figure>


# Whitelist with Count

Allow only whitelisted wallet addresses to buy tokens from your project

This Sales Condition is to create the well known Whitelisting. Whitelisting means, that only previously specified addresses can buy tokens. In NMKR Studio that means you will upload a spreadsheet that contains the addresses and also the amount of tokens each specific address can buy from your project. Specifying the amount gives you a lot of flexibility to customize your minting.<br>

<figure><img src="/files/c5Da9KLXqkddVQ22tPjf" alt=""><figcaption></figcaption></figure>

If you need to collect the addresses of your user first,[ a policy snapshot](https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot) could be an option to do it.

### Create the whitelist as csv

Please open Excel, Google Sheets or any other spreadsheet software and create a new file and format it like in the example below.

<table><thead><tr><th width="543">Address</th><th>MaxCount</th></tr></thead><tbody><tr><td></td><td></td></tr><tr><td></td><td></td></tr><tr><td></td><td></td></tr></tbody></table>

You will now add one wallet address (not the Stake address) to every row in the spreadsheet in column A (Address) and specify the amount that this wallet should be able to buy in column B (MaxCount). There is no limit in the amount of addresses or amount of tokens, but please keep in mind that if you have more tokens added in the whitelisting than in the project itself, not everybody will be able to buy a token from your project.\
Your spreadsheet will now look like this:

| Address                             | MaxCount |
| ----------------------------------- | -------- |
| addr1qy55ts7h4txp9fre...ywnxs723f0x | 1        |
| addr1q8esrnq9vtn4k...gn3k9upqekx6lz | 5        |
| addr1q8xc4n8hkf0zu946...k9upqkelss5 | 2        |

{% hint style="danger" %}
Please make sure that the added addresses do not include any whitespaces.\
You can check for that in yous hseets software.\
select the column, rightclick and choose conditional formatting, format rule "text contains" and then write a single whitespace in the field. Choose a formating style like red background and confirm. All addresses can now be identified and fixed easily in the sheet.
{% endhint %}

Give the file a name and save it as CSV File (Comma Separated Values). \
There are no specifications about the name from our side.

{% hint style="info" %}
We were reported that German versions of Excel may export the CSV with semikolon (;) separated values. This won't work! Please copy the complete spreadsheet to Google Sheets and export the file there.
{% endhint %}

### Upload the whitelist&#x20;

The next step is to [add the sales Condition](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/sales-conditions-depending-on-policy-id-or-stake-pool#add-a-sales-condition) in NMKR Studio, go to the [manage prices tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) and click the "Add Sale condition" button.\
&#x20;Select the "whitelisting with count" and click on "Upload addresses (.csv file)".<br>

<figure><img src="/files/xTxbxp2CswGmO0lc9Xgh" alt=""><figcaption><p>Set up the whitelist sales condition</p></figcaption></figure>

Select the previously created whitelist csv file and upload it.\
The count above the "Upload addresses (.csv file)" button will now show the number of recognized wallets.

<figure><img src="/files/qmARStKETByv243HuSxo" alt=""><figcaption><p>Check the entries count if it fits to your whitelisted addresses</p></figcaption></figure>

{% hint style="info" %}
For the whitelisting NMKR Studio will always convert the wallet address to a stake address and will use the stake address for the whitelisting. The buyers can now buy tokens with every address that is related to the stake address. \
\
If a steak address is unintentionally added multiple times because you added multiple different receiveraddresses of the same wallet it will only consider the entry with the highest "MaxCount".
{% endhint %}

{% hint style="warning" %}
If you add multiple wallet addresses to the white list that belong to the same stake address, only the&#x20;
{% endhint %}

### Monitor whitelist usage

By clicking on "Show whitelist usage" will open a new tab where you can monitor the sales for each single whitelisted address. It allows you to search by address in the search bar too.

<figure><img src="/files/qhASQf6uB35UzsP29Yw1" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/He5bcFIr5qhsBk5TDszQ" alt=""><figcaption><p>Monitor the whitelist usage</p></figcaption></figure>

By clicking the "Export Whitelist usage" button you can now also export this list as csv.

### Edit whitelist

NMKR Studio allows you to manually edit the whitelist even after the update in the interface without needing to reupload a new file. **This means you can** [**add new addresses**](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count#add-new-addresses)**,** [**remove addresses**](#remove-addresses) **and** [**update the count of addresses**](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count#change-count-or-address) **from the NMKR Studio user interface during the sale.**

Please go to the whitelist usage tab, where you also want to monitor the addresses.<br>

<figure><img src="/files/oITLyVShMuM0yJe1VriN" alt=""><figcaption><p>Go to whitelist usage tab</p></figcaption></figure>

#### Add new addresses

To add a new address please click on "Add whitelist address" and submit the address and count there.

<figure><img src="/files/0Sf7T3VSe1rld0uHokAU" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/CxaEX1I1NBlDN9cSZ7Wt" alt=""><figcaption><p>Add the new address and specify the count</p></figcaption></figure>

#### Remove addresses

To remove an address please click the trash button and confirm that you want to delete the address.

<figure><img src="/files/3NegIX8mfFUSMf52zsdP" alt=""><figcaption><p>delete address from whitelist</p></figcaption></figure>

#### Change Count or address

The "Edit address" button allows you to change the address and the count of the whitelisted address.

<figure><img src="/files/NUKL3I6LydJz6b7fpD0J" alt=""><figcaption></figcaption></figure>

Change the count or address and save the changes.

<figure><img src="/files/ZvT5YyaxhrW1U5BKO7Gb" alt=""><figcaption></figcaption></figure>

### Reupload a changed whitelist

To reupload a new whitelist please go to the sales conditions tab and click the "edit" button in the actions on the right side of the whitelist sales condition.

<figure><img src="/files/ZvT4dS8Uojpecr93UOfR" alt=""><figcaption></figcaption></figure>

Please click "clear address" first to reset the whitelist usage tracking and then [upload the new file again](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/whitelist-with-count#upload-the-whitelist)

<figure><img src="/files/mzycXD7t4DSm8G0oi97U" alt=""><figcaption></figcaption></figure>


# Blacklist

In order to prevent known bad players from minting, you can also set up a blacklist with NMKR Studio

This sales condition allows you to upload a simple text file which contains the addresses that you want to be blocked from participating in your sales.

<figure><img src="/files/dwZ7sT3jVhfImEIv0fUn" alt=""><figcaption></figcaption></figure>

### Create a blacklist

A blacklist is a simple text file with the ending .txt like you can create with any text editor software.\
Write one address (no stake addresses) in each line and save the file. It does not need any special naming.

### Set up the Blacklist Sales Condition

The first step is to [add the sales Condition ](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting/sales-conditions-depending-on-policy-id-or-stake-pool#add-a-sales-condition)in NMKR Studio, go to the [manage prices tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) and click the "Add Sale condition" button.

\
&#x20;Select "blacklist" and click on "Upload addresses (.txt file)".

<figure><img src="/files/Nft09wP59CTEUhm5QMHa" alt=""><figcaption></figcaption></figure>

Check the number of entries if they show as many addresses as you wanted to block and click on save. Your blacklist is now ready.


# Test Sales Condition

Test your sales condition on mainnet without actually submitting a transaction

The test feature in the [sales conditions tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting) allows you to test the added sales conditions on the mainnet, without sending a transaction.<br>

<figure><img src="/files/gTTSisXRM3ekJ7FODgNX" alt=""><figcaption></figcaption></figure>

### Test the sales conditon

Click the "Test sale conditions on an address" button

<figure><img src="/files/7t6OSEUQKCTo5E9aA2Ay" alt=""><figcaption></figcaption></figure>

Insert any address in the following tab and specify an amount.

<figure><img src="/files/e2YpRfnPcfnSe0MMRcx8" alt=""><figcaption></figcaption></figure>

The test feature will now check how your specified sales conditions would apply to the given address and amount and respond if the sales conditions are met or not.


# Block Tokens

Block Tokens from being sold randomly or specifically

With NMKR Studio you can block either a certain amount of random tokens from being sold, or also a specific amount of tokens from being sold.

### Block a certain amount of random tokens

The best way to block random tokens out of your project from being sold is via the Edit tab of your project.[ Please read this part of the documentation to learn more about it](https://docs.nmkr.io/nmkr-studio/project/edit#block-nfts-from-sale).

<figure><img src="/files/Q6LK19mTzTnB5CoVa6G4" alt=""><figcaption></figcaption></figure>

### Block specific tokens from being sold

To block specific NFTs from being sold you have to select them and block them in the manage NFTs tab. [Please read this part of the documentation to learn more about it](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab#block-specific-nfts).

<figure><img src="/files/5sriVsEZuIqDNlKuOup5" alt=""><figcaption></figcaption></figure>


# NMKR Pay

Our payment gateway for Sales on Demand with Wallet Connector

What is NMKR Pay

NMKR Pay is a payment gateway that allows your customers to sign transactions and connect their wallets. It is a simpler and more user-friendly way to make purchases on the Cardano Blockchain. It is constantly being improved in order to maintain security, adaptability, and improvement.

<figure><img src="/files/7G9ApQ4zIweqe8yaAzXT" alt=""><figcaption></figcaption></figure>

### NMKR Pay vs. Pay-In Address

The [Pay-In Address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address) is a simple and basic method of minting that is still widely used, but it has some disadvantages for the Cardano network and your project when compared to NMKR Pay. The pay-in Address provides no bot protection and does not reserve any tokens before the payment is processed, resulting in far more transactions and a significantly higher load on the blockchain than is necessary. NMKR Pay is unquestionably superior technology, and it also includes a wide range of additional features that are beneficial for your sales.\
\
Let us point out the features of both methods in the following overview.

<table><thead><tr><th width="453.3333333333333">Feature</th><th width="138" align="center">NMKR Pay</th><th align="center">Pay-In Address</th></tr></thead><tbody><tr><td>Wallet Connector</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td>Bot Protection (Captcha)</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td>Selling <a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices">multiple amounts of Tokens</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/custom-token-payment">Custom Token Payment</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts">Discounts</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-eth-and-sol-payment">FIAT payment </a>(Credit Card via <a href="https://www.crossmint.com/">Crossmint</a>)</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-eth-and-sol-payment">ETH and SOL Payment</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment">MultiSig</a> payment</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#define-nmkr-pay-sale-start">Scheduled sale start </a>(displayed in NMKR Pay)</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices">Prices</a> with start and expiry date</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr><tr><td>Easy <a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/website-integration">website integration</a> (HTML)</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting">Sales Conditions</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr><tr><td><a href="https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#enable-queue-for-hyped-drops">Queue</a> (for hyped drops)</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td>Share sale on social media</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td>Multilingual Interface</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td>Display price in FIAT currency</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td>Reveal Token after sale</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td></tr><tr><td>Manual sending</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr><tr><td>Autonomously handling refunds</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr></tbody></table>

### Supported Wallets

NMKR Pay can be linked to the [most widely used and popular self-custodial Wallets](https://docs.nmkr.io/helpful-links/cardano-wallets#self-custodial-cardano-wallets). We are constantly integrating new wallets in order to maintain as much accessibility as possible. However, you can use NMKR Pay with wallets that are unable to use DApps because it provides a[ manual sending option](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/manual-sending-in-nmkr-pay) that allows your customers to generate a minting address to which they want to manually send their ADA.

### NMKR Pay Demo Links

[Free Mint, test out here!](https://pay.nmkr.io/?p=aea4e252315f4d129bdfa4aaf80e601c\&c=1)

[NMKR Pay with FIAT Payment ](https://pay.nmkr.io/?p=f89cdf63f01e46a190f19c08ccb91bd0\&c=1)(Only for showcase, do not pay!)


# Set up NMKR Pay

NMKR Pay can be set up for your project in very easy steps

## Enable NMKR Pay for your sales

A sale via NMKR Pay can be enabled within minutes and very simple steps.\
After [specifying prices](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist), you can directly [share the payment link](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#share-the-payment-link-or-integrate-to-website) or start with the [website integration](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/website-integration). If you have a very hyped drop we can also [set up a queue](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#enable-queue-for-hyped-drops).

<figure><img src="/files/mPLIic8BZPyYkHQqVcA2" alt=""><figcaption></figcaption></figure>

#### Specify prices in your price list for NMKR Pay

The first step is to [set up prices in your price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist).\
Once the prices are specified NMKR Pay is enabled and ready to be used for your sales.\
There are some settings, but these are optional.

#### NMKR Pay settings (optional)

Additional (optional) settings and the payment link for NMKR Pay can be found **below your price list** in the [manage price list tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist).

<figure><img src="/files/fmWeRhKVHDDXyyfZkcXA" alt=""><figcaption></figcaption></figure>

#### Enable MultiSig Payments

Please read the [documentation about MultiSig Payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) before activating this option.

<figure><img src="/files/q8Ge0R1vdpv1BhLL2ahK" alt=""><figcaption></figcaption></figure>

#### Enable FIAT Payments

FIAT Payment is enabled by standard. Please read the [documentation about FIAT payment here](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-payment).

#### Define NMKR Pay sale start

NMKR Pay allows you to define a starting date and time for your sales. This starting time will be displayed in NMKR Pay and allows you to share the payment link (or publicly integrate the buy button) in advance.

<figure><img src="/files/WQWF6d3TCmPeP6VeG0N1" alt=""><figcaption><p>Define sale start</p></figcaption></figure>

<figure><img src="/files/ZBVSPwiywUD7zjZkgnwd" alt=""><figcaption><p>Sale start notification in NMKR Pay</p></figcaption></figure>

## Share the payment link or integrate to website

You can now use the Payment link of NMKR Pay to share it with your community and enable random sales of your project (without quantity options). It can be found in the NMKR Pay settings below your [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist).

<figure><img src="/files/MVEN5bgIv4Ked4u3Hwk0" alt=""><figcaption><p>Random payment link for a single token sale</p></figcaption></figure>

{% hint style="success" %}
If you want to **integrate a payment button and also quantity options to your website** please learn more in the topic [Website Integration](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/website-integration).
{% endhint %}

### Payment link parameters

The payment link uses the following parameters:

#### \&c= as the Quantity parameter

\&c=1 would be used to buy one NFT.\
Only previously in the [price list](/nmkr-studio/set-up-sales/manage-prices-pricelist#open-the-price-list) specified quantities can be used.\
\
Example link:

```
https://pay.nmkr.io/?p=53cabab140554c69813x6d325e908f675f&c=1
```

#### \&pm= as the payment method parameter

```
&pm=   Payment method

possible inputs:
&pm=fiat
&pm=wallet
```

These parameters would be added to the [payment link](#share-the-payment-link-or-integrate-to-website) like that:

```
https://pay.nmkr.io/?p=53cabab140554c69813x6d325e908f675f&c=1&pm=fiat
```

#### \&ra= to specify the receiver independently of the purchaser

If you want to specify a wallet address as receiver of the minted NFT that is not the address that actually buys the NFT, please use the \&ra= parameter and add the receiving address.\
\
Example URL:

```
https://pay.nmkr.io/?p=53cabab140554c69813x6d325e908f675f&c=1&ra=addr1q8age27rx2kay0kcclx0nps3ym8d856fknr0qxafx49q4ej88dl3r6224d7nynl48s7kvnw2uugsqqjqa8ff2zppzgxqyv9ne2
```

NMKR Pay, will show a clear warning that the NFT will be received by another wallet address.

<figure><img src="/files/LFKQ0cBLmUXs80PxFauH" alt="" width="375"><figcaption></figcaption></figure>

#### \&cp= to specify custom property

This parameter would be sent back when using a [webhook](/nmkr-studio/project/notifications#notifications-via-webhook). You could therefore use that as an identifier with e.g. a customer id.\
Also, the custom property “\&cp=" can be used to create an [affiliate ](/nmkr-studio/project/affiliate-links)link.

### Quantity options / sell multiple tokens via NMKR Pay

Where the standard payment link only allows to mint single tokens, NMKR Pay can be also used to sell multiple tokens in one transaction.\
In oder to do so, you need to change the number at the ending (c=1) of the payment link.

**A payment link ending with c=1 will be for a single token sale,**\
**c=2 would be for two tokens, c=3 for three tokens and so on.**

{% hint style="info" %}
Please keep in mind that only the amounts specified in the[ price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices) will work.

\
For an integration of a Quantity Selection on your website, please read the topic [Website Integration](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/website-integration).
{% endhint %}

### Queue system

For NMKR Pay and the API we have two different Queue systems. [One triggers automatically when there is high load on our systems](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#high-load-queue), this queue also applies for the API, the other Queue is a [custom solution that can be set up for certain projects](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#custom-queue).<br>

#### High-load Queue

For highly anticipated drops, NMKR Pay can use a Queue System, which allows us to channel incoming payment requests and place your customers in a queue to process each sale in order to ensure a smooth sales process without overloading our system or the Cardano blockchain.\
\
The queue will automatically trigger when there is high load on our system, means there is a trigger that enables the queue, and it is not enabled by default. Once the requests are exceeding amount x / minute, the trigger will enable the queue and all following requests will be sent to the queue. Then the queue is automatically letting a certain amount of people per minute through to [NMKR Pay.](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay)<br>

{% hint style="info" %}
Some more important details about how this queque works:\
When you went through the queue, a cookie is set. When you buy an NFT, this cookie is deleted, and you must go through the queue again.
{% endhint %}

<figure><img src="/files/IHiSB9Btxx7JPJ41f93v" alt=""><figcaption><p>The NMKR Pay Queue</p></figcaption></figure>

#### Custom Queue

Besides the global queue, we also have the option to enable a custom queue for certain projects.\
This Queue can be enabled by us for your project and will be triggered differently and independently from the [high-load Queue](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#high-load-queue).

{% hint style="warning" %}
If you expect a very hyped drop, please [create a ticket](https://nmkr.io/support) with us to enable the Queue.\
Please plan at least 1-2 working days for us to set this up.
{% endhint %}


# MultiSig Payment

MultiSig Payments, the superior way to sell tokens

{% hint style="success" %}
We are currently testing a new Coin-Selection Method for MultiSig Payments. Even though we expect smooth operations, we encourage you to contact us if you encounter any problems.\
\
[Contact us!](https://nmkr.io/support)
{% endhint %}

MultiSig payments are comprehensive transactions in which **the payment, minting, distribution, and eventual discounts are all handled in a single transaction**. Obviously, this **reduces blockchain congestion** significantly because refunds for incorrect or late received transactions are no longer necessary, and the number of transactions is reduced from two to one. Because of the fewer transactions, the MultiSig method is **at least twice as fast** as the regular method.

The regular minting requires the buyer to send the payment “blindly” to the minting address to receive the Token or a refund in a second, separate transaction. Therefore, t**he End-User Risk is significantly reduced** with MultiSig payments, because the buyer can verify that he will receive the token when signing the transaction.

{% hint style="info" %}
What is important to know for you as seller is, that **you don't have to consider the Sendback in the price calculation** for your project. The sendback will be covered by the input transaction of the customer and not deducted from the sales revenue like it is the case with the regular method. \
*In case the buyer goes with the* [*"manual sending" methon in NMKR Pay*](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/manual-sending-in-nmkr-pay) *when MultiSig is active, he is asked to add a deposit, therefore this also isn't relevant for you.*
{% endhint %}

{% hint style="warning" %}
As the Buyer is able to see the token in the transaction he is signing, we recommend that the Tokens [asset\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name) is not related to the rarities and you don't publish a rarity list before the mint. If it is necessary that your rarities relate to the tokens serialisation, please use the serialisation only with the [display\_name](https://docs.nmkr.io/nmkr-studio/project/metadata-template#display_name) and use randomised [asset\_names](https://docs.nmkr.io/nmkr-studio/project/metadata-template#asset_name).
{% endhint %}

### Regular Payment vs. MultiSig Payment Minting

<table><thead><tr><th width="228.33333333333331">Details / Features</th><th align="center">MultiSig</th><th align="center">Regular</th></tr></thead><tbody><tr><td>Number of transactions</td><td align="center">1</td><td align="center">2 <br>(payment and mint are separate)</td></tr><tr><td>Blockchain congestion</td><td align="center">Low</td><td align="center">High<br>(Two Transactions needed for one Mint)</td></tr><tr><td>Minting Speed</td><td align="center">Fast</td><td align="center">Slow<br>(At least 2x slower because two Transactions needed for one Mint)</td></tr><tr><td>End-User risk<br></td><td align="center">Low<br>(Token mint is obvious in the transaction that is signed)</td><td align="center">High (Seller could theoretically mint and send the tokens or not)</td></tr><tr><td>Sendback</td><td align="center">Covered by Input-Transaction<br>(2 ADA additional Deposit required for manual sending)</td><td align="center">Covered from Sales price<br>(Must be calculated by seller in the sales price)</td></tr><tr><td>Works with the Pay-In Address</td><td align="center"><a href="https://emojipedia.org/cross-mark/">❌</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr><tr><td>Works with Sales Conditions</td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td><td align="center"><a href="https://emojipedia.org/check-mark-button/">✅</a></td></tr></tbody></table>

### On-Chain Example of a MultiSig transaction

{% embed url="<https://cardanoscan.io/transaction/8979cddf7a9799ef46caf4d6c4bdd8d93f3a625962207e0bdb65a628a12ed1ef?tab=utxo>" %}
On Chain Example of a MultiSig transaction
{% endembed %}

<figure><img src="/files/aHNxypxu3Ao75dmiP7Sg" alt=""><figcaption><p>MultiSig Transaction Inputs and Outputs explained</p></figcaption></figure>

### Enable MultiSig for your project

To enable MultiSig for your project, go to the [price list tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) of your project.\
After specifying at least one price, a toggle to enable MultiSig will appear.

<figure><img src="/files/Wr72us3pkOF5OzawZ25e" alt=""><figcaption></figcaption></figure>

The "disable manual sending" toggle that shows up when activating MultiSig allows you to disable the option that allows your customers to [send payment manually in NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/manual-sending-in-nmkr-pay). Having this option disabled may be helpful to prevent bots from minting, but may also make your sale less accessible for people that don't want to connect their wallets.


# Website Integration

Integrate NMKR Pay easily to your website via HTML

NMKR Pay can be integrated to any website by adding a HTML snippet to your website.\
Besides the single Token payment, you can also [add quantity options](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/website-integration#pay-button-with-quantity-options) where your customer selects the amount of tokens he want to buy from the dropdown.

{% hint style="info" %}
NMKR Pay won't work embedded in a HTML iframe tag. If you embed NMKR Pay in an iframe it won't be able to communicate with your browser extensions.
{% endhint %}

<figure><img src="/files/maVFddx3P9pCk1nHvFa3" alt=""><figcaption></figcaption></figure>

### Standard Pay button integration

For the NMKR Pay integration, please go to the [price list settings](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) of your project and  to the NMKR Pay integration tab.

<figure><img src="/files/iH2TIajcOwpOMZZ4pQXj" alt=""><figcaption><p>The NMKR Pay integration tab is right below your price list</p></figcaption></figure>

After you [created your prices](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/create-new-prices) and [set up NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay), you are now ready to integrate NMKR Pay to your website.

#### specify pay button design

The NMKR Pay button comes in three different designs and three different colours that can be selected in the dropdown. Depending on your selection the button link and also the HTML snippet that you can see below the links changes.

<figure><img src="/files/gs7yErQfVqBLC6tEFJRw" alt=""><figcaption></figcaption></figure>

#### Copy and paste the HTML snippet

Click on "copy code to clipboard" and paste the code on your website.

<figure><img src="/files/u6DQDcPKmuZTtpaZqCpF" alt=""><figcaption></figcaption></figure>

If you're new to HTML or haven't edited website code before:

* **HTML** (HyperText Markup Language) is the foundation of every webpage. It uses simple tags like \<div>, \<button>, or \<section> to place and organize elements (text, images, buttons, etc.).
* The NMKR Pay snippet is self-contained JavaScript + HTML that renders the button and handles wallet/fiat interactions. You only need to insert it into the right spot on your page—typically inside the \<body> section, often within a \<div> or custom block for positioning.
* Most website builders (WordPress, Wix, Squarespace, Webflow, Shopify) have a "Custom HTML", "Embed", or "Code" block/widget where you can paste it directly. For custom sites, open your HTML file in a text editor and paste between \<body> and \</body>.

For a beginner-friendly explanation of HTML structure, tags, and how to add custom code to a page, check out this free guide from [WebsitePlanet](https://www.websiteplanet.com/blog/html-guide-beginners/)

It covers essentials like:

* Basic page structure (\<!DOCTYPE>, \<head>, \<body>)
* Common tags (\<h1>, \<p>, \<img>, \<a>, \<div>)
* How to place elements exactly where you want them

This resource is straightforward, example-heavy, and perfect for understanding where to safely insert the NMKR Pay snippet without breaking your layout.

**Quick Placement Tips**

* **In a website builder:** Look for an "HTML" or "Embed Code" element and paste the snippet there.
* **In raw HTML:** Add it like this for better control:

HTML

```
<section class="payment-section">
  <h2>Purchase Your NFT</h2>
  <!-- Paste your NMKR Pay snippet here -->
  <div class="nmkr-pay-wrapper">
    [YOUR COPIED NMKR PAY HTML/JS SNIPPET]
  </div>
</section>
```

* **Important:** Do **not** place the snippet inside an \<iframe>, as it prevents communication with browser wallet extensions (e.g., Nami, Solflare).

If you want to test it before you embed it to your website, try it with an [online HTML tool](https://www.w3schools.com/html/tryit.asp?filename=tryhtml_default). \
The following is an example HTML snippet that you would copy and paste it directly to your website.

```html
<img src="https://studio.nmkr.io/images/buttons/paybutton_1_1.svg" onclick="javascript:openPaymentWindow()">

<script type="text/javascript">
            function openPaymentWindow() {
                const paymentUrl = "https://pay.nmkr.io/?p=7e221683f55e48b9a1f9e2666c6551b7&c=1";

                // Specify the popup width and height
                const popupWidth = 500;
                const popupHeight = 700;

                // Calculate the center of the screen
                const left = window.top.outerWidth / 2 + window.top.screenX - ( popupWidth / 2);
                const top = window.top.outerHeight / 2 + window.top.screenY - ( popupHeight / 2);

                const popup =  window.open(paymentUrl, "NFT-MAKER PRO Payment Gateway",  `popup=1, location=1, width=${popupWidth}, height=${popupHeight}, left=${left}, top=${top}`);

                // Show dim background
                document.body.style = "background: rgba(0, 0, 0, 0.5)";

                // Continuously check whether the popup has been closed
                const backgroundCheck = setInterval(function () {
                    if(popup.closed) {
                        clearInterval(backgroundCheck);

                        console.log("Popup closed");

                        // Remove dim background
                        document.body.style = "";
                    }
                }, 1000);
            }
        </script>

```

### Pay Button with quantity options

<figure><img src="/files/4DOwIZx1al5c4WEDNpdv" alt=""><figcaption></figcaption></figure>

To integrate a quantity option to your NMKR Pay integration simply add the following snipped and extend with the quantity options (\<option value="n">n\</option>) you need for your project.

```html
<p style="text-align:center;">  

<select id="NFT">
<option value="None">-- Select --</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
  
<br><br>
</script> </p> 
```

The second step is to change the parameter for the amount of the link in the HTML snippet that was copied from NMKR Studio from c=1"; to c="+NFT.value;

<figure><img src="/files/KXrYzwnGP10GPyzK8wwX" alt=""><figcaption><p>Change the amount defining ending of the payment link in your HTML snippet</p></figcaption></figure>

It will now look like this:

```html
const paymentUrl = "https://payment.nmkr.io/?p=29e512...039&c="+NFT.value;
```

{% hint style="warning" %}
Only price/amount-pairs that are previously specified in the [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) will work with the quantity options.
{% endhint %}

The following shows an example of an HTML integration with quantity option 1-5 NFTs per transaction.

```html

<p style="text-align:center;">  

<select id="NFT">
<option value="None">-- Select --</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
 
<br><br>

</script> </p>

<img src="https://pro.nft-maker.io/images/buttons/paybutton_1_1.svg" onclick="javascript:openPaymentWindow()">

<script type="text/javascript">
            function openPaymentWindow() {
                const paymentUrl = "https://pay.nmkr.io/?p=cec3419ddf2c4c5ca9b3abdbc719ff29&c="+NFT.value;

                // Specify the popup width and height
                const popupWidth = 500;
                const popupHeight = 700;

                // Calculate the center of the screen
                const left = window.top.outerWidth / 2 + window.top.screenX - ( popupWidth / 2);
                const top = window.top.outerHeight / 2 + window.top.screenY - ( popupHeight / 2);

                const popup =  window.open(paymentUrl, "NFT-MAKER PRO Payment Gateway",  `popup=1, location=1, width=${popupWidth}, height=${popupHeight}, left=${left}, top=${top}`);

                // Show dim background
                document.body.style = "background: rgba(0, 0, 0, 0.5)";

                // Continuously check whether the popup has been closed
                const backgroundCheck = setInterval(function () {
                    if(popup.closed) {
                        clearInterval(backgroundCheck);

                        console.log("Popup closed");

                        // Remove dim background
                        document.body.style = "";
                    }
                }, 1000);
            }
        </script>
```

### Useful parameters for the payment link

By adding the parameter \&pm=wallet or \&pm=fiat at the end of your payment link, you would skip the step where the user selects what payment method he wants to use.[<br>](https://pay.nmkr.io/?p=c6392d1f6047461993b5a5ff48d56d3e\&c=1\&pm=wallet)\
**\&pm=wallet** would lead directly to the payment via Cardano Wallet\
\
**\&pm=fiat** would lead directly to the [FIAT payment option, if enabled](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-eth-and-sol-payment).

#### Example

```
https://pay.nmkr.io/?p=c6392d1f60474xyz5a5ff48d56d3e&c=1&pm=wallet
```


# Specific Payment Links

Use specific payment links to sell specific tokens of your project

<figure><img src="/files/5UlwNvGWoY3ockc6VE19" alt=""><figcaption></figcaption></figure>

### Token specific prices

The specific payment link generally takes the prices from the [price list.](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist)\
But it also gives you the possibility to specify token specifc static prices.\
You can define them in the [edit section of your Token](https://docs.nmkr.io/nmkr-studio/token/edit#static-price-with-specific-sales).

### Specific payment links

The specific payment links can be accessed in the [manage NFTs Tab](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) of your project.\
In the action bar on the right, you find the button to access the link for every single token.

<figure><img src="/files/q02cB8DDXHRoGMJP4EgU" alt=""><figcaption></figcaption></figure>

The following tab allows you to directly access NMKR Pay with the specific payment of to copy the link.

<figure><img src="/files/MDrhy1frIkrR8ktFcX8v" alt=""><figcaption></figcaption></figure>

#### Bulk download specific payment links

The specific payment links for all tokens in your project can be downloaded as csv file.\
In order to do so, please [read the documentaion about how to export the csv file.](https://docs.nmkr.io/nmkr-studio/project/export-nft-as-csv)

The downloaded file will contain all your tokens of the project. In the **last column**, you will find the specific payment links


# Manual sending in NMKR Pay

Send ADA to a minting address without connecting your wallet

NMKR Pay offers, beside the [FIAT payment](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-payment) and the option to connect your wallets, also the classic "send ADA to address" minting like it is known from the the Pay-In Address. Unlike the Pay-In Address, manual minting benefits from the [advantages of the NMKR Pay Interface ](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay#nmkr-pay-vs.-pay-in-address)and it's bot protection captcha.

This feature is enabled by standard in NMKR Pay

<figure><img src="/files/zLbRViOT7ngWPKE04lID" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If your customer decides to pay manually for a token sale that has [MultiSig payments](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment) enabled, he will be asked to add a deposit.\
This deposit is meant to cover the sendback (MinUtxo) that would be otherwise not necessary via MultiSig payments and will be send back to the customer together with the NFT.
{% endhint %}

### Disable manual sending for NMKR Pay

The "manual sending" option can be disabled for NMKR Pay if it is used with [MultiSig payments](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment).

In order to do so, please go to the [price list tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) where you also find the [NMKR Pay integration settings](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/set-up-nmkr-pay#nmkr-pay-settings-optional) and use the "Disable manual minting button".

<figure><img src="/files/k8RdG0xkPFlkiDeJMe4b" alt=""><figcaption></figcaption></figure>

**Why would you want to disable this option?**\
Disabling this option is a good way to reduce the risk of bots minting from your project.\
Please be aware that the deactivation of this feature reduces the accessibility to your sales for users of some wallets that do not work with DApps like the [Daedalus Full-Node wallet](https://daedaluswallet.io/).


# FIAT ETH and SOL Payment

Allow your customers to pay with FIAT currency by using a Credit Card or ETH and SOL by connecting their wallet

<figure><img src="/files/HoRatzjsPPWTwMuPVcq1" alt=""><figcaption><p>Credit card information was removed from the video for security reasons.</p></figcaption></figure>

### Why FIAT, ETH and SOL?

Enabling this setting allows your customers to purchase your NFTs using Fiat Currency with their credit card, ETH and SOL via  [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay). To offer you this payment features, we partnered with [Crossmint](https://www.crossmint.com/). This is a great way to reduce barriers to entry for people who are not yet accustomed to using crypto (or Cardano).

This is particularly useful for projects who are aiming to cater to markets outside of the Cardano (or wider crypto) ecosystem.

{% hint style="info" %}
Note - enabling this option simply gives users the option to use it, they can still pay in ADA using the Payment Gateway.\
**However, if a customer does choose to pay in this way, it removes our ability to implement features such as** [**Sales Conditions**](/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting) **or** [**Discounts**](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts) **for that customer.**
{% endhint %}

{% hint style="warning" %}
This feature can only be enabled for users that are verified.\
[Please read this article to get verified.](https://docs.nmkr.io/nmkr-studio/account/registration-and-kyc#kyc-verification)
{% endhint %}

{% hint style="warning" %}
Fungible Token Sales are currently not supported with FIAT, ETH and SOL Payments.
{% endhint %}

{% hint style="info" %}
**Pricing and Limit**\
There are no additional costs for you as a seller. There are additional costs for the Credit Card payment for your buyer, these will be displayed during the sales process in in the Crossmint payment window.\
\
On the buyer side, there can be 1-2% fees expected from Crossmint + the fees that the credit card issues is charging.\
\
**FIAT payment is only available for sales prices from 5,00$.**\
There is a **1500$** **Limit** for FIAT transactions.\
In order to increase the transaction limit for your collection you’ll just need to fill out this form: <https://crossmint.typeform.com/limit-raise-req> to get it approved by Crossmint.
{% endhint %}

### Where does the NFT go?

Great observation, if the customer doesn't pay using ADA then how can we send the NFT to them? They probably don't currently have an ADA wallet.

To solve this, our payment partner [Crossmint](https://www.crossmint.com/) creates a temporary custodial Wallet, accessible for you in your crossmint account. We mint the NFT and send it to the new wallet once payment is received. The customer is then encouraged to create their own Cardano Wallet and transfer their NFTs from the custodial Wallet to this, thereby gaining complete custody.

### Where does the Fiat currency, ETH and SOL go?

The FIAT currency as well as ETH and SOL will be instantly converted into ADA and you as seller also receive the ADA directly to your [payout wallet](https://docs.nmkr.io/nmkr-studio/project/edit#edit-fundamental-settings-of-your-project).

## Set up FIAT, ETH and SOL payment for your project

FIAT, ETH and SOL Payment is by standard enabled. FIAT Payment only for projects with prices over 5$ and is disabled in NMKR Pay for sales with [sales conditions](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting).

<figure><img src="/files/BrDX85rQNehWTRUI769G" alt=""><figcaption></figcaption></figure>

### Enable/disable FIAT, ETH and SOL payment for your project

If you need to disable or enable the FIAT, ETH and SOL payment manually, you find the option in the [manage prices tab](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) after you specified a price.

<figure><img src="/files/LAMfSt4QbggDHigUnx4W" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
FIAT Payments over 1000$ will require your customer to KYC.\
This is is only to protect from credit card misuse by bad actors.
{% endhint %}


# Pay-In Address

A static minting address that can be easily shared with your customers

<figure><img src="/files/zdedCIV3TNO1qOa2r5aK" alt=""><figcaption></figcaption></figure>

The Pay-In Address is a single static address that can be shared with your community.\
It **automatically handles minting and distribution of tokens**, refunds and [discounts](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist/discounts) once the funds are received. It works with multiple token amounts that are specified in the [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) and is a very simple method to mint Tokens.\
\
The following is an example how you would share the address with your community:

<pre><code><strong>Please send your ADA to the mint address:
</strong><strong>addr1v909jz0nnfwpl49st5yjp0ndht4s5vs4d0mhuz8fvv0nhrqj8mdqx
</strong>
To mint 1 Token please send 10 ADA,
for 2 Tokens, please send 20 ADA,
for 5 Tokens, please send 50 ADA
</code></pre>

This Example may sound familiar to you, as the pay-in address is still very common in the CNFT Space. But it actually has some downsides, not only for the seller and buyer, but also for the Blockchain.

{% hint style="warning" %}
Before you want to enable this option, you want to [compare NMKR Pay with the Pay-In Address](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay#nmkr-pay-vs.-pay-in-address) to learn more about why we recommend to use NMKR Pay!\
\
Because the Pay-In Address is a public address, it has **no bot protection!**\
\
The Pay-In Address is also working with [Sales Conditions](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting).
{% endhint %}

### How the Pay-In Address works

Once the payment address receives a transaction with the correct amount of ADA that matches the prices in the price list, it will mint and send a token in a second transaction to the senders' wallet. The amount of tokens that are minted depends on the price/amount-pairs in the price list.

If the payment-address receives a transaction that does not contain the correct amount of ADA it will send a refund instead of the token.

### Enable the Pay-In Address

To activate the Pay-In address, please go to the[ price-list settings](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist) and specify your prices there. After that, please scroll down.\
The Pay-In Integration is found in the second tab, where also the NMKR Pay Integration can be found.

{% hint style="info" %}
The Pay-In Address and NMKR Pay can be used simultaneously with NMKR Pay.
{% endhint %}

<figure><img src="/files/HKrKdQR1KwdFxyyR2hoK" alt=""><figcaption></figcaption></figure>

The Pay-In address stays active for 7 days. If there is no input-transaction on the address, it will deactivate itself again.


# Auction

Sell your already minted token in an auction

The auction feature in NMKR Studio is a very simple auction feature, as it has no public interface yet to track the auctions we consider it as beta version.

### How does an auction in NMKR Studio work

1. After the speciation of a minimum bid and the auction duration, you will lock any **already minted token** in an auction address by sending it from your wallet to the auction address.&#x20;
2. The auction address will also be used to receive the bids. **Only the highest bid will remain in the address**. If a higher bid comes in, the lower bid will be fully refunded to the outbid bidder.&#x20;
3. At the end of the auction, the highest bid will be sent to the payout wallet and the NFT to the wallet that sent the highest bid.

{% hint style="info" %}
NMKR Studio allows you to run multiple auctions at the same time.\
However it is yet not possible to sell multiple tokens in one auction.\
\
We keep a 2% Marketplace fee for every successful auction.

If there are any royalties specified for the token, the royalties will also be deducted from the sales price.
{% endhint %}

### Set up an auction

The auction feature can be found in the menu under tools.

<figure><img src="/files/1HzoTw79SB0fCtDNjMqX" alt=""><figcaption></figcaption></figure>

Click "Create new auction".

<figure><img src="/files/UD3DJzRvSndttB8njIjb" alt=""><figcaption></figcaption></figure>

Give the auction a name (only for you visible) and specify a payout wallet that should receive the funds after the auction has ended. If your auction was not successful as the specified minimum bid  was not sent to the auction address, this payout wallet will also receive the NFT.

Specify the auction ending and click on save.

<figure><img src="/files/j2K3hMrujcjrzKSsgCSp" alt=""><figcaption><p>set up an auction</p></figcaption></figure>

The auction is now on standby with the state "wait for NFT lock" until you locked the NFT on the address. To lock a token, please click the "lock NFT" button.

<figure><img src="/files/9gQ20O0TvawxYWA1mJna" alt=""><figcaption></figcaption></figure>

Send the token **together with 2ADA in the same transaction** to the address given in the following tab.

{% hint style="warning" %}
Sending the 2ADA together with the token in the same transaction is very important, if the token is not sent together with 2ADA, the auction won't start.
{% endhint %}

<figure><img src="/files/L9RSHGOCKvtM7AZImcmI" alt=""><figcaption></figcaption></figure>

The locking of the token will immediately start the auction, and your auction address is available to receive bids. The auction will now be stated as "Running" and the NFT that is locked in the auction will show up in the NFT/Token column. If there are any royalties specified for the token, the royalty fee will be shown in the Royalties column.

<figure><img src="/files/6H5QGmd0kCKPOYYYieYA" alt=""><figcaption></figcaption></figure>

Click on show auction address to copy and share the address with your bidders.

<figure><img src="/files/bKCMWHo11IGaFkLfXQlm" alt=""><figcaption></figcaption></figure>

### Editing the auction

You can change the minimum bid and the duration of the auction by clicking on the edit button.

<figure><img src="/files/jJI0PRVEQSeSB0cy4zRM" alt=""><figcaption></figcaption></figure>

### Track the bidding process

The actual highest bid will be shown in the column "actual bid", if you need more details of the bidding history, please click "show transaction history".

<figure><img src="/files/wlC5ys8TQRm5xKiQLMKk" alt=""><figcaption></figcaption></figure>

The following tab now shows a detailed history of every transaction on the address.

<figure><img src="/files/Z1ZMvN3czGjuIXk8FX64" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
As there is no bidding interface yet for the auction feature. Your bidders can track the auction process via [cardanoscan.io](https://cardanoscan.io) by searching for the auction address.
{% endhint %}


# Minting

Mint the tokens on your own or let your customers mint on demand

### What is minting?

Minting is the process of writing the token onto the blockchain. During the minting process, the token will be added to the blockchain dedicated to the belonging policy by sending the token in a transaction to the receiver's wallet. Before the minting process, the tokens in your [project](https://docs.nmkr.io/nmkr-studio/project) are only created on the NMKR infrastructure and are not visible on the public Ledger of Cardano.

{% hint style="info" %}
Before a token can be sold on a secondary market, it has to be minted.\
\
The [NMKR Store](https://docs.nmkr.io/nmkr-store) will be capable of listing also unminted tokens.
{% endhint %}

### How can I mint a token in NMKR Studio

There are multiple ways to mint the tokens in NMKR Studio, they all can be associated to two categories.

#### Minting on Demand

Minting on demand means that your customers will trigger the minting process due to purchasing the token via [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay) or the [Pay-In Address](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address) directly to their own wallet[.](/nmkr-studio/set-up-sales/pay-in-address) The minting fees will be covered by the sales price that is previously specified in the [price list](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist).

{% hint style="info" %}
Please read the [documentation about the pricing](https://docs.nmkr.io/nmkr-studio/pricing) if you want to learn more about that.
{% endhint %}

#### Self-executed Minting

The process of executing the mint on your own can be accomplished either with a [manual minting process](https://docs.nmkr.io/nmkr-studio/minting/manual-minting) or with the [airdropper](https://docs.nmkr.io/nmkr-studio/minting/airdropper). For both methods the receiver, the token that should be minted and the amount is given by you. The fees to mint this token will be covered from your [account balance of available mints (Mint Coupons)](https://docs.nmkr.io/nmkr-studio/account/mint-coupons).

{% hint style="info" %}
To mint a token in order to sell it in a secondary market, you want to mint the token on your own via [manual minting](https://docs.nmkr.io/nmkr-studio/minting/manual-minting) or the [airdropper](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution) to your own wallet.\
\
Every minted NFT will cost 1[ Mint Coupon](https://docs.nmkr.io/nmkr-studio/account/mint-coupons), about 4.5 ADA.\
Please read the d[ocumentation about the pricing](https://docs.nmkr.io/nmkr-studio/pricing) if you want to learn more about that.
{% endhint %}


# Minting on Demand

Let your customers mint the tokens on demand

Minting on demand means that you let your customers mint the tokens on their own with a sales process. The benefits for that are that you don't have any upfront costs like you would have them if you [mint the tokens manually](https://docs.nmkr.io/nmkr-studio/minting/manual-minting) and sell them on secondary markets.

### Minting on demand in NMKR Studio

#### Minting on Demand with NMKR Pay

NMKR Studio offers two options for the minting on Demand, one is [**NMKR Pay**](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay), a fully automated payment gateway where your users are able to connect their wallets and sign the transaction to start the minting process. It supports all [common wallets on Cardano](https://docs.nmkr.io/helpful-links/cardano-wallets#self-custodial-cardano-wallets), payment via [manual sending ](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/manual-sending-in-nmkr-pay)and also [FIAT payments via Credit Card](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/fiat-payment). It comes with a bot protection and also offers [MultiSig payments](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay/multisig-payment).

#### Minting on demand with the Pay-In Address

The second option is the [**Pay-In Address**](https://docs.nmkr.io/nmkr-studio/set-up-sales/pay-in-address), a static address where your customers send a specific amount of ADA to start the minting address. It also handles refunds automatically and offers a very easy workaround. As it comes without a bot protection, we always recommend using the superior method; [NMKR Pay](https://docs.nmkr.io/nmkr-studio/set-up-sales/nmkr-pay).\
\
Both options are capable of using the [Sales Conditions and Whitelisting](https://docs.nmkr.io/nmkr-studio/set-up-sales/sales-conditions-and-whitelisting) and both use the [Pricelist](https://docs.nmkr.io/nmkr-studio/set-up-sales/manage-prices-pricelist).


# Manual Minting

Mint and send single tokens manually to specific wallet addresses

To mint and send single tokens directly to a wallet address you want to use the manual mint and send feature of NMKR Studio. <br>

<figure><img src="/files/010x7kBLkqFR5ig3LXs2" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The manual mint of 1 NFT will cost 1 [Mint Coupon](https://docs.nmkr.io/nmkr-studio/account/mint-coupons).\
It will also cost only 1 Mint Coupon if you are going to send multiple [Fungible Tokens](https://docs.nmkr.io/nmkr-studio/token#fungible-token).\
The amount that can be sent in one Transaction is depending on the metadata size\
(up to 1 Million Tokens).\
\
To further reduce the cost of manual minting, please set the [Sendback in your project settings to MinUtxo](https://docs.nmkr.io/nmkr-studio/project/edit#sendback-to-customer). This will calculate the sendback for each transaction depending on the metadata size and token amount.
{% endhint %}

Go to the[ manage NFTs tab of your project](https://docs.nmkr.io/nmkr-studio/token/manage-tokens-tab) and click the "Send to Address" button in the actions bar on the right of the specific token that you want to send to an address.

<figure><img src="/files/ueE6eDfcvVBC8SX6EWA6" alt=""><figcaption></figcaption></figure>

Add the Wallet Address or [adahandle](https://adahandle.com/) of the receiver and click "Mint and send NFT".

<figure><img src="/files/We78iZIBlhq259BU6ZSd" alt=""><figcaption><p>Mint and send NFT</p></figcaption></figure>

In case you are sending Fungible Tokens, please also select the amount to send.

<figure><img src="/files/BOLKixc6ZFhJSBaIdgyE" alt=""><figcaption><p>Mint and send FT</p></figcaption></figure>

The token will now be minted and sent to the holders' wallet. You can monitor process in the [Mint and Send Jobs tab](https://docs.nmkr.io/nmkr-studio/project/mint-and-send-jobs).


# Airdropper

Send tokens manually to your holders in bulk

The airdropper is a great tool to reward your holders with a free token or to send tokens out for a giveaway. It allows you to send tokens in bulk directly to the receiver's wallet.

{% hint style="info" %}
Each airdropped NFT costs about [one Mint Coupon](https://docs.nmkr.io/nmkr-studio/account/mint-coupons). Actually it takes a bit less as the drops were processed in batches and therefore it will cost less fees.\
\
To further reduce the cost of airdropping, please set the [Sendback in your project settings to MinUtxo](https://docs.nmkr.io/nmkr-studio/project/edit#sendback-to-customer). This will calculate the sendback for each transaction depending on the metadata size and token amount. A token airdrop with 3 NFTs in one transaction to one wallet costs with these settings and the standard metadata about 1.4 ADA.
{% endhint %}

<figure><img src="/files/m9IQb6aUnTAWQeJTgEUn" alt=""><figcaption></figcaption></figure>

As the airdropper will always use the tokens of a specific project, the button for the airdropper can be found in the actions bar of each project.

<figure><img src="/files/r29Re89EBIz9QM9cY0sQ" alt=""><figcaption></figcaption></figure>

It opens the airdropper window which gives you already a quick overview about his capabilities.

<figure><img src="/files/9iuNAxIDRakhdzy2pMns" alt=""><figcaption><p>The airdropper tool in NMKR Studio</p></figcaption></figure>

### Specific or random airdrop

There are two methods to send the airdrop. The random distribution or the specific distribution.

With the [**random distribution**](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution) you can either airdrop to [holders of a specific policy ID](https://docs.nmkr.io/nmkr-studio/minting/airdropper#airdrop-to-holders-of-a-specific-policy-id) or to an [uploaded address list](https://docs.nmkr.io/nmkr-studio/minting/airdropper#airdrop-with-address-list).\
\
The [**specific distribution**](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-specific-distribution) allows you to upload a csv. List that defines exactly which token in which amount should be sent to which address.


# Airdrop with random distribution

Send random airdrops

<figure><img src="/files/8soNo3eddfT08CXSRaW0" alt=""><figcaption></figcaption></figure>

Airdropping with a random distribution allows you to airdrop randomly selected tokens from your project to [holders of a specific policy ID](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#airdrop-to-holders-of-a-specific-policy-id) or to an [uploaded address list](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#airdrop-with-address-list).

<figure><img src="/files/t9B0U6w0Zy8rinX8demY" alt=""><figcaption><p>Select Random distribution in the airdropper</p></figcaption></figure>

### Airdrop to holders of a specific policy ID

Besides the option of uploading an address list, you can also decide to airdrop all holders of a specific policy id. For this, just select the option to "use addresses with a specific policy id".

<figure><img src="/files/ewn0iwJfAXYiNDSwNasp" alt=""><figcaption><p>Use the option to airdrop to holders of a specific policy ID</p></figcaption></figure>

Add the specific policy ID in the next step and confirm with "ok".

<figure><img src="/files/XGmsYqbxbOdwMi7HOV3e" alt=""><figcaption><p>Enter Policy ID and confirm</p></figcaption></figure>

You can now go to the next step, to [select the amount of tokens for the airdrop.](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#undefined)

### Airdrop with address list

In the first step, you will collect the addresses of the wallets that should receive the airdrop and put them into a txt file.

#### Prepare a txt file on your own

If you don't want to [use the csv file ](https://docs.nmkr.io/nmkr-studio/minting/airdropper/airdrop-with-random-distribution#use-the-file-from-the-policy-snapshot)from the [policy snapshot](https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot), please create a simple txt file, that has one wallet address (not stake addresses) in each line.

<figure><img src="/files/bwM8PNtw5s6GoxbxO9sJ" alt=""><figcaption><p>txt file for airdrop</p></figcaption></figure>

#### Use the file from the policy snapshot

If you want to use the policy snapshot tool's csv file with the airdropper, you have to copy out the wallet addresses (column F, not the stake addresses) from the csv file.

<figure><img src="/files/rqd8W5QrI4rmTxxwUwkK" alt=""><figcaption><p>Copy Column F from the policy snapshot</p></figcaption></figure>

And paste them into a simple txt file that can be created with any text editor software.\
Please write only one address in each line (should happen automatically if you copy and paste from the csv)

<figure><img src="/files/2TDpsxcFRQQAw7oSAdX0" alt=""><figcaption><p>Paste the addresse in a simple txt file</p></figcaption></figure>

#### Upload the txt file for the airdrop

This file can now be uploaded to the airdropper and the count will show how many addresses are recognised.

<figure><img src="/files/VcEbG4wm6plGqnLDRILF" alt=""><figcaption><p>Upload your txt file and check the count</p></figcaption></figure>

### Select amount of tokens for airdrop

Select the amount of tokens that should be airdropped to each address in the next step.

<figure><img src="/files/NnmbOG7JATSWMZjAcKRq" alt=""><figcaption><p>Select amount of tokens for each airdrop</p></figcaption></figure>

#### Decide how to airdrop to holders of multiple tokens

Addresses with multiple eligible tokens of a policy will appear on the list multiple times if the [cumulate option was disabled in the policy snapshot](https://docs.nmkr.io/nmkr-studio/tools/policy-snapshot#cumulate-stake-addresses-of-the-policy-snapshot), which is why you should select "**Send drop to ALL Addresses"** if you want to send the airdrop depending on the amount of eligible tokens that the wallet holds.&#x20;

If you want holders to send only one airdrop to their wallet independent of the amount of tokens they are holding, please use the option "**Only one drop per Wallet**".

<figure><img src="/files/1nVxl7F3HiuMNOSyu8gi" alt=""><figcaption></figcaption></figure>

Start the airdrop with the button "Start airdrop".

<figure><img src="/files/Tp5obTw3lan6REAjhiVp" alt=""><figcaption><p>Start airdrop</p></figcaption></figure>

If you want to check how your airdrops are processed, please go to [mint and send jobs](https://docs.nmkr.io/nmkr-studio/project/mint-and-send-jobs), as it also lists all airdrop jobs there.




---

[Next Page](/llms-full.txt/1)

