The first step is to create a new project. A project can contain one or multiple tokens. The project object contains a few datapoints that will be common to all tokenized assets contained under it.
Please note that you must include the ID of your institution in the header of your requests.
POST new project: /api/Project/{institutionId}
Request Example:
# UAT BASE_URL: https://uat.vault.nyala.de
# Production BASE_URL: https://vault.nyala.de
# The {institution-id} is 8c8f78bc-78e0-47a7-b4e0-a793343175f0
curl -X POST {{BASE_URL}}/api/Project/8c8f78bc-78e0-47a7-b4e0-a793343175f0 \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "{your-project-name}",
"institutionId": "8c8f78bc-78e0-47a7-b4e0-a793343175f0",
"startOfSubscription": "2024-04-16",
"endOfSubscription": "2028-04-16",
"targetIssuanceDate": "2026-04-16",
"terminationRights": "no",
"issueSize": "100000",
"currency": "EUR",
"entryType": "Individual",
"tokenType": "Bond",
"projectPassphrase": "{your-secure-passphrase}",
"blockchain": "Polygon"
}'The ID of your newly created project will be returned in the response. Use it for subsequent calls to create tokens.
| Parameter | Description | Example Values |
|---|---|---|
| Institution ID | The UID of your institution. | "cdae5c01-a629-4362-be56-52101ec22a49" |
| Name | The name of your new project. | "Tech Company AG" |
| Total issue size | The currency amount that you aim to raise for this project. Please send a number in string format without dots, or commas or currency symbol. | "1000000" |
| Token type | The asset class that will be created. “Bond” or “Share” are currently supported. | "Bond" |
| Start of subscription | Optional: Planned start of the period during which investors can subscribe to the bond during a primary issuance ("fundraising period"). | "2026-01-31" |
| End of subscription | Optional: Planned start of the period during which investors can subscribe to the bond during a primary issuance ("fundraising period"). Can be left empty if there is no end. | "2026-01-31" |
| Target issuance date | Optional: Start of the bond's interest bearing period. | "2026-01-10" |
| Due date of payments | Optional: dates when coupon payments happen in the format of dd/mm/yyyy seperated by semicolons, e.g. "08/12/2024;08/12/2025". Indicative only and does not have influence on other calculations. Can be left empty. | "01/12/2026;01/12/2028" |
| Currency | The currency in which the tokenized security shall be issued. We currently support EUR for Euros and CHF for Swiss Francs. | "EUR" |
| Termination rights | Required for bonds only: can the investor end their investment on their end? | "False" |
| Entry type | Individual entry: tokenized securities are held in a separate individual account under the investor's name Collective entry: securities owned by many different investors are held in a joint account under the custody of a third party (limits individual access). Visible on-chain and immutable. | "Individual" |
| Blockchain | Choose on which blockchain the token is to be issued. Currently we support Polygon, Peaq and Stellar. | "Polygon" |
| Blockchain | The passphrase provides a layer of security when triggering blockchain operations. It is required for further token operations. It must be min 10 character and contain at least one uppercase and one lowercase letter. You must safeguard it and not lose it, although it can be recovered by contacting your NYALA Technical Sales Engineer (TSE). | "Passphraseprojectxyz" |
Response Example:
{
"errorMessageCodes": null,
"data": "165be3bd-ac69-43d5-8357-63df84330ab2"
}During the project creation, you will be requested to set a passphrase for this project. This passphrase will be required for further token operations related to this project.
ℹ️ If you lose the project passphrase, or if you send the wrong passphrase more than 3 times (which locks the issuer wallet seed), you must ask your Technical Sales Engineer to unlock it.
After successfully creating a project, you can update the project parameters at any time using the same endpoint.
PUT update project /api/Project/{institutionId}
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 {projectId} is 40ff9e56-cf2a-499a-9fe7-706e0e136eb7
curl -X PUT {{BASE_URL}}/api/Project/{institutionId} \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "40ff9e56-cf2a-499a-9fe7-706e0e136eb7",
"name": "Cayman Islands-750",
"startOfSubscription": "2024-04-16",
"endOfSubscription": "2028-04-16",
"targetIssuanceDate": "2026-04-16",
"dueDateOfPayments": null,
"terminationRights": "no",
"issueSize": "200000",
"entryType": 1,
"status": 0,
"blockchain": "Polygon"
}'| Parameter | Description |
|---|---|
| ID | The ID of the specific project you want to edit. |
| institutionID | Your institutionID after having been onboarded on NYALA. InstitutionId is set up in your Postman collection. |
You can also retrieve a list of projects using your institution's ID.
GET projects by institution ID /api/Project/{institutionId}
Request Example:
# UAT BASE_URL: https://uat.vault.nyala.de
# Production BASE_URL: https://vault.nyala.de
# The {institutionIid} is 8c8f78bc-78e0-47a7-b4e0-a793343175f0
curl -X GET {{BASE_URL}}/api/Project/{institutionId} \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"Response Example:
{
"errorMessageCodes": null,
"data": [
{
"id": "40ff9e56-cf2a-499a-9fe7-706e0e136eb7",
"name": "Cayman Islands-750",
"institutionId": "8c8f78bc-78e0-47a7-b4e0-a793343175f0",
"userId": "9fb3ccc5-a822-4af6-b218-08dd2b1c296f",
"creatorFirstName": "Integration",
"creatorLastName": "User",
"startOfSubscription": "2024-04-16",
"endOfSubscription": "2028-04-16",
"targetIssuanceDate": "2026-04-16",
"dueDateOfPayments": null,
"terminationRights": "no",
"issueSize": "100000",
"currency": 1001,
"entryType": 1,
"tokenType": 0,
"status": 1,
"created": "2026-02-16 00:01",
"registryExtract": false,
"errorMessage": null,
"blockchain": 14,
"currentPassphrase": null,
"projectPassphrase": null,
"seedCreated": false
}
]
}