Skip to content
Last updated

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.

Scenario 1:

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 NameDescriptionExpected Values
institutionIdYour institutionID after having been onboarded on NYALA. InstitutionId is setup in Postman collection.UUID of your institution
tokenized-asset-idThe token Internal ID generated upon token creation.UUID of the tokenized asset
credentialsThis passphrase is set during the initial project creation.

ℹ️ Important Note: The customer's opt-in parameter Approved for Delivery must be set to True to receive tokens via this endpoint. If not enabled, you must first Update Asset Opt-In Approved for Delivery status. Wallets that have already received tokens via this endpoint cannot receive more through a second trigger after the initial transfer is confirmed on-chain.

Scenario 2:

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 NameDescriptionExpected Value
institutionIdYour institutionID after having been onboarded on NYALA. InstitutionId is setup in Postman collection.UUID of your institution
tokenized-asset-idThe token Internal ID (traceID in NYALA system).UUID of the tokenized asset
retailwalletIDThe retail wallet ID where tokens shall be sent. There is an endpoint to retrieve the retailwalletID via GET Retail Wallet DetailsUUID of the retail wallet
amountThe number of tokens to be transferred.100, 500, 1000
messageTransaction memo. Can be left empty."Investment allocation", "Token distribution Q1"
credentialsThis 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.