This step can only happen after you have started sending investor opt-ins for specific tokens.
Depending on your projects’ specificities, there are different endpoints that you can trigger.
After a set fundraising period, all tokens are distributed at once. This is the standard scenario for crowdfunding projects for example. In this scenario, investments are pooled into one account, and the tokens are distributed to all investors in one go at the cut-off date, typically after a set waiting period. In this case, you want to call POST Transfer asset class afd.
POST Transfer asset class approved for delivery (afd): /api/Tokenization/{institutionId}/tokenized-assets/{tokenizedAssetId}/transfer-asset-class-afd
Request Example
#### Request Example
```bash
# UAT BASE_URL: https://uat.vault.nyala.de
# Production BASE_URL: https://vault.nyala.de
# The {institutionId} is 8c8f78bc-78e0-47a7-b4e0-a793343175f0
# The {tokenizedAssetId} is ef86ea3e-f46f-4274-aad8-e83b1a241360
curl -X PUT {{BASE_URL}}/api/Tokenization/{institutionId}/tokenized-assets/{tokenizedAssetId}/transfer-asset-class-afd \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"passphrase": "{your-secure-passphrase}"
}'| Parameter Name | Description | Expected Values |
|---|---|---|
| institutionId | Your institutionID after having been onboarded on NYALA. InstitutionId is setup in Postman collection. | UUID of your institution |
| tokenized-asset-id | The token Internal ID generated upon token creation. | UUID of the tokenized asset |
| credentials | This passphrase is set during the initial project creation. |
ℹ️ Important Note: The customer's opt-in parameter
Approved for Deliverymust be set to True to receive tokens via this endpoint. If not enabled, you must first Update Asset Opt-InApproved for Deliverystatus. Wallets that have already received tokens via this endpoint cannot receive more through a second trigger after the initial transfer is confirmed on-chain.
Continuous fundraising and distributions. In this scenario, tokens are distributed to investors on an ongoing basis, as soon as their investment is confirmed (e.g., upon receipt of funds). For investors with recurring orders, you can use this endpoint to trigger distributions for new orders as well. You should call the POST Transfer asset class endpoint.
POST Transfer asset class /api/Tokenization/{institutionId}/tokenized-assets/{tokenizedAssetId}/transfer-asset-class
Request Example
# UAT BASE_URL: https://uat.vault.nyala.de
# Production BASE_URL: https://vault.nyala.de
# The {institutionId} is 8c8f78bc-78e0-47a7-b4e0-a793343175f0
# The {tokenizedAssetId} is ef86ea3e-f46f-4274-aad8-e83b1a241360
curl -X POST {{BASE_URL}}/api/Tokenization/{institutionId}/tokenized-assets/{tokenizedAssetId}/transfer-asset-class \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transfers": [
{
"retailWalletId": "390ab76f-a4f9-451b-802d-f865076630be",
"amount": 15,
"message": "Investor Distribution"
}
],
"credentials": {
"passphrase": "{your-secure-passphrase}"
}
}'| Parameter Name | Description | Expected Value |
|---|---|---|
| institutionId | Your institutionID after having been onboarded on NYALA. InstitutionId is setup in Postman collection. | UUID of your institution |
| tokenized-asset-id | The token Internal ID (traceID in NYALA system). | UUID of the tokenized asset |
| retailwalletID | The retail wallet ID where tokens shall be sent. There is an endpoint to retrieve the retailwalletID via GET Retail Wallet Details | UUID of the retail wallet |
| amount | The number of tokens to be transferred. | 100, 500, 1000 |
| message | Transaction memo. Can be left empty. | "Investment allocation", "Token distribution Q1" |
| credentials | This passphrase is set during the initial project creation. |
Response Example
{
"errorMessageCodes": null,
"data": [
{
"id": "c187bc8b-ce26-412b-8095-75c665d2fe35",
"walletId": "390ab76f-a4f9-451b-802d-f865076630be",
"result": "Initiated",
"optInStatus": 0,
"assetClassOptInStatus": 7
}
]
}Distributions are processed asynchronously and must be validated on the blockchain, which may take several minutes.
To monitor the transaction, send a request via GET Project transfers.
GET Project transfers /api/project/{institutionId}/{projectId}/transfers
Request Example
# UAT BASE_URL: https://uat.vault.nyala.de
# Production BASE_URL: https://vault.nyala.de
# {institutionId} = 8c8f78bc-78e0-47a7-b4e0-a793343175f0
# {projectId} = e30e0230-260c-4d78-b7b4-91b4bef263c3
curl -X GET https://uat.vault.nyala.de/api/project/8c8f78bc-78e0-47a7-b4e0-a793343175f0/e30e0230-260c-4d78-b7b4-91b4bef263c3/transfers \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Accept: application/json"Response Example
{
"errorMessageCodes": null,
"data": [
{
"id": "3b4032be-303a-4396-8eec-3e4286ef9072",
"receiverRetailWalletId": "390ab76f-a4f9-451b-802d-f865076630be",
"status": 4,
"created": "2026-02-16T14:04:17Z",
"txId": "0xaec8fdd0997a558ca031a721b3873843b6706a0db87d8a0386a5add8bca1aada",
"fromAddress": "0xFAd49EDeeE6F882e273DA477D81708338D42E666",
"toAddress": "0xbE039DF5378133b2366C746c79eF0Ec2292FAd68",
"amount": 15.0,
"tokenizedAsset": {
"id": "ef86ea3e-f46f-4274-aad8-e83b1a241360",
"unitName": "TK6976",
"assetId": "0xb665e3470C20e83a8d39781FFcf892E9066040e0"
...
}
}
]
}ℹ️ If you have triggered a transfer to the wrong wallet, do not worry! Since these tokens are regulated securities, our registrar is always capable of clawing them back and correcting the transfer. So, if tokens need to be taken back for any other (legal) reason after a transfer, please notify your TSE.