Mint assets
Issue new units to investors via API.
Minting creates new units of an asset and assigns them to specified wallet addresses. This guide covers how to mint assets programmatically using the API.
For the web interface approach, see the user guide.
Prerequisites
- Platform URL (e.g.,
https://your-platform.example.com) - API key from a user with Supply Management role on this asset (see Getting Started for API key setup)
- Wallet verification method enabled on your account (e.g., pincode or 2FA)
- Asset must be unpaused
- Recipients must have registered identities with required compliance verifications
Minting assets
Prepare API request
Construct the API request with recipient address and amount:
curl -X POST "https://your-platform.example.com/api/token/0x9459D52E60edBD3178f00F9055f6C117a21b4220/mint" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"amounts": ["1000000000000000000000", 18],
"walletVerification": {
"secretVerificationCode": "123456",
"verificationType": "PINCODE"
}
}'Asset address in path
The asset contract address is part of the URL path: /api/token/{tokenAddress}/mint
Execute mint transaction
When you execute the request, the platform:
- Validates your permissions - Confirms you have Supply Management role on this asset
- Verifies your wallet - Uses your pincode/2FA to authorize the blockchain transaction
- Checks recipient compliance - Ensures recipient has required verifications
- Executes the mint - Creates new units and assigns to recipient
Amount formatting
Asset amounts depend on the asset's decimal configuration. See Asset Decimals for formatting guidance.
Handle response
A successful response returns the updated asset data (showing key fields):
{
"id": "0x9459D52E60edBD3178f00F9055f6C117a21b4220",
"type": "equity",
"createdAt": "2025-01-15T10:30:00.000Z",
"name": "ACME Holdings Common Stock",
"symbol": "ACME",
"decimals": 18,
"basePrice": "[\"10000\",2]",
"basePriceCurrencyCode": "USD",
"totalSupply": "[\"1000000000000000000000\",18]",
"pausable": {
"paused": false
},
"capped": {
"cap": "[\"1000000000000000000000000\",18]"
}
}The response includes the full asset object with the updated totalSupply reflecting the newly minted units, along with additional fields like identity, accessControl, complianceModuleConfigs, userPermissions, and stats.
Batch minting
Issue units to multiple wallets in a single transaction:
Prepare batch request
Construct the request with arrays of recipients and amounts:
curl -X POST "https://your-platform.example.com/api/token/0x9459D52E60edBD3178f00F9055f6C117a21b4220/mint" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890",
"0x1234567890AbCdEf1234567890AbCdEf12345678"
],
"amounts": [
["500000000000000000000", 18],
["300000000000000000000", 18],
["200000000000000000000", 18]
],
"walletVerification": {
"secretVerificationCode": "123456",
"verificationType": "PINCODE"
}
}'Array length must match
The recipients and amounts arrays must have the same length. Each
recipient gets the corresponding amount at the same index.
Execute batch mint
The platform validates all recipients before executing. If any recipient fails compliance checks, the entire batch is rejected.
Batch limits:
- Maximum 100 recipients per API call
- For larger batches, split into multiple calls
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
recipients | string or array | Yes | Recipient wallet address(es) (0x...) |
amounts | string or array | Yes | Amount(s) as dnum tuple [scaled_value, decimals]. See Asset Decimals |
walletVerification | object | Yes | Your wallet verification |
walletVerification.secretVerificationCode | string | Yes | Your 6-digit PINCODE or TOTP code |
walletVerification.verificationType | string | Yes | "PINCODE", "OTP", or "SECRET_CODES" |
Troubleshooting
| Issue | Solution |
|---|---|
401 Unauthorized | API key is invalid, expired, or disabled |
403 USER_NOT_AUTHORIZED | Ensure your account has supplyManagement role on this asset |
Asset is paused | Unpause the asset first (see Pause/Unpause) |
Recipient identity not found | Recipient must create an account and register their identity |
Exceeds supply cap | Asset has reached maximum supply |
Insufficient collateral | Deposit more collateral before minting |
Recipient not compliant | Recipient missing required claims (KYC, accredited investor, etc) |
Recipients and amounts mismatch | Array lengths must be equal |
Amount must be positive | All amounts must be greater than 0 |
Related guides
- Pause/Unpause Assets - Enable/disable transfers
- Forced Transfer - Transfer assets administratively