Skip to content

Nyala Customer API (v1)

NYALA's tokenization API allows you to issue tokens on Polygon & Stellar. It allows you to create and manage tokens - including tokenized securities that have an ISIN - and to manage customer data. Interactions such as creating a new customer entity, request a wallet opening, creating a token and distributing a token to a customer are covered in this document. During the onboarding process, an institution entity will be created for you.

Download OpenAPI description
Overview
URL
Nyala Digital Asset AG
Languages
Servers
Production Environment
https://api.nyala.de
UAT / Sandbox Environment
https://uat.api.nyala.de

The first step in the tokenization lifecycle is to create a Customer that will receive the token.

Operations

Getting a list of customers from institution.

Request

curl -i -X GET \
  https://api.nyala.de/api/external/v1/customers

Responses

OK

Bodyapplication/json
errorMessageCodesArray of strings or nullread-only
errorsArray of objects or null(Error)read-only
dataArray of objects or null(CustomerAccountDto)read-only
Response
application/json
{ "errorMessageCodes": [ "string" ], "errors": [ {} ], "data": [ {} ] }

Creates a new customer inside the institution.

Request

Body

Data.

salutationstring or null

Salutation such as "Herr", "Frau", "Mr.", "Ms.", etc.

titlestring or null[ 0 .. 64 ] characters

Title such as "Dr.", "Prof.", etc.

firstnamestring[ 0 .. 64 ] charactersrequired

First name of the investor. When sending values with accents (e.g. É, ç, ñ), send the values in UTF-8 charset.

lastnamestring[ 0 .. 64 ] charactersrequired

Last name of the investor. When sending values with accents (e.g. É, ç, ñ), send the values in UTF-8 charset.

birthDatestring or null(date-time)

Date of birth not required at customer creation, but necessary for the KYC process.

phoneNumberstring or null(tel)[ 0 .. 64 ] characters

Phone number of the investor.

typestring(int32)(AccountTypes)required
Enum"Unknown""Person""LegalEntity"
streetstring[ 1 .. 100 ] charactersrequired

The street name where the investor resides. When sending values with accents (e.g. É, ç, ñ), send the values in UTF-8 charset.

streetNostring[ 1 .. 100 ] charactersrequired

The street number where the investor resides.

postalCodestring[ 1 .. 100 ] charactersrequired

The postal code where the investor resides.

townstring[ 1 .. 100 ] charactersrequired

The town in which the investor resides. When sending values with accents (e.g. É, ç, ñ), send the values in UTF-8 charset.

countryIsostring= 2 charactersrequired

The country ISO code in which the investor resides. Use ISO 3166-1 alpha-2 country codes.

companyobject(CustomerCompanyDetailDto)

Only required when the account type is LegalEntity.

nationalityIsostring or null

The nationality ISO of the investor. Use ISO 3166-1 alpha-2 country codes.

genderstring(int32)(GenderTypes)
Enum"NotSet""Male""Female""Other"
moneriumobject(MoneriumGanymedeDto)
tanganyLegalPersonobject(TanganyLegalPersonDto)
custodyProviderstring(int32)(CustodyProvider)
Enum"HADC""Tangany""TanganyExternal""Iris"
emailstring(email)[ 0 .. 64 ] charactersrequired

The email which the investor used to register. This must be unique and cannot be reused by other investors.

hadcCustomerIdstring or null(uuid)
idstring or null(uuid)

If not provided, it will be auto-generated.

curl -i -X POST \
  https://api.nyala.de/api/external/v1/customers \
  -H 'Content-Type: application/json' \
  -d '{
    "salutation": "string",
    "title": "string",
    "firstname": "string",
    "lastname": "string",
    "birthDate": "2019-08-24T14:15:22Z",
    "phoneNumber": "string",
    "type": "Unknown",
    "street": "string",
    "streetNo": "string",
    "postalCode": "string",
    "town": "string",
    "countryIso": "st",
    "company": {
      "name": "string",
      "registerNumber": "string",
      "fullAddress": "string",
      "email": "user@example.com"
    },
    "nationalityIso": "string",
    "gender": "NotSet",
    "monerium": {
      "profileDocument": {
        "number": "string",
        "kind": "passport"
      },
      "corporate": {
        "name": "string",
        "registrationNumber": "string",
        "representatives": [
          {
            "firstname": "string",
            "lastname": "string",
            "country": "string",
            "nationality": "string",
            "birthDay": "2019-08-24",
            "address": "string",
            "postalCode": "string",
            "city": "string",
            "countryState": "string",
            "idDocument": {
              "number": "string",
              "kind": "passport"
            }
          }
        ],
        "finalBeneficiaries": [
          {
            "firstname": "string",
            "lastname": "string",
            "country": "string",
            "nationality": "string",
            "birthDay": "2019-08-24",
            "ownershipPercentage": "string"
          }
        ],
        "directors": [
          {
            "firstname": "string",
            "lastname": "string",
            "country": "string",
            "nationality": "string",
            "birthDay": "2019-08-24"
          }
        ],
        "address": "string",
        "postalCode": "string",
        "city": "string",
        "country": "string",
        "countryState": "string"
      }
    },
    "tanganyLegalPerson": {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "name": "string",
      "legalForm": "string",
      "commercialRegister": "string",
      "leiCode": "string",
      "taxId": "string",
      "vatId": "string",
      "isinCode": "string",
      "legalJurisdiction": "st",
      "legalAddress": {
        "country": "st",
        "city": "string",
        "postcode": "string",
        "streetName": "string",
        "streetNumber": "string"
      },
      "postalAddress": {
        "country": "st",
        "city": "string",
        "postcode": "string",
        "streetName": "string",
        "streetNumber": "string"
      },
      "kyc": {
        "businessDescription": "string",
        "isCreAvailable": true
      },
      "related": [
        {
          "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5",
          "position": "string",
          "isFictitiousBeneficialOwner": true,
          "isUltimateBeneficialOwner": true,
          "sharePercentage": "string",
          "naturalPerson": {
            "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
            "firstName": "string",
            "lastName": "string",
            "birthDate": "2019-08-24",
            "birthPlace": "string",
            "title": "string",
            "gender": "M",
            "birthCountry": "st",
            "birthName": "string",
            "nationality": "st",
            "address": {
              "country": "st",
              "city": "string",
              "postcode": "string",
              "streetName": "string",
              "streetNumber": "string"
            },
            "email": "string",
            "selfDeclaredAsPep": true,
            "kyc": {
              "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
              "date": "2019-08-24T14:15:22Z",
              "method": "Video_ident",
              "document": {
                "nationality": "st",
                "country": "st",
                "number": "string",
                "issuedBy": "string",
                "issueDate": "2019-08-24",
                "validUntil": "2019-08-24",
                "type": "Id_card",
                "iban": "string",
                "reference": "string"
              }
            }
          },
          "legalPerson": {}
        }
      ]
    },
    "custodyProvider": "HADC",
    "email": "user@example.com",
    "hadcCustomerId": "6f3ba510-55ec-488e-ac0c-6ea3b582f9ed",
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  }'

Responses

OK

Bodyapplication/json
errorMessageCodesArray of strings or nullread-only
errorsArray of objects or null(Error)read-only
datastring(uuid)read-only
Response
application/json
{ "errorMessageCodes": [ "string" ], "errors": [ {} ], "data": "808ac6e4-93ed-4040-85a5-6c71a2444e90" }

Request

Path
customer-idstring(uuid)required

Customer id.

curl -i -X GET \
  'https://api.nyala.de/api/external/v1/customers/{customer-id}'

Responses

OK

Bodyapplication/json
errorMessageCodesArray of strings or nullread-only
errorsArray of objects or null(Error)read-only
dataobject(CustomerAccountDto)
Response
application/json
{ "errorMessageCodes": [ "string" ], "errors": [ {} ], "data": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "firstname": "string", "lastname": "string", "institutionId": "cdae5c01-a629-4362-be56-52101ec22a49", "institutionName": "string", "salutation": "string", "type": "Unknown", "birthDate": "2019-08-24T14:15:22Z", "title": "string", "email": "string", "phoneNumber": "string", "walletAccess": "None", "address": {}, "nationalityId": "563be3ed-4854-427b-af32-b4b1edaa3f50", "nationalityIso": "string", "gender": "NotSet", "kycData": {}, "company": {}, "approvedForMonerium": true, "moneriumIban": "string", "tanganyCustomerId": "cc40149a-3820-4e83-9937-335fa7f60320", "tanganyAuthorizedId": "118e1b44-f5f8-4d0d-a111-66cabdff05e5", "tanganyOwnerId": "28e3c411-8361-45dc-9194-6f06b49469e5", "hadcCustomerId": "6f3ba510-55ec-488e-ac0c-6ea3b582f9ed" } }

Searches for a customer by firstname lastname or email.

Request

Query
searchTextstring

search text.

takeinteger(int32)

take.

Default 100
skipinteger(int32)

skip.

Default 0
curl -i -X GET \
  'https://api.nyala.de/api/external/v1/search?searchText=string&take=100&skip=0'

Responses

OK

Bodyapplication/json
errorMessageCodesArray of strings or nullread-only
errorsArray of objects or null(Error)read-only
dataArray of objects or null(CustomerAccountDto)read-only
Response
application/json
{ "errorMessageCodes": [ "string" ], "errors": [ {} ], "data": [ {} ] }

Saving KYC data for custodying customer wallets.

Request

Path
customer-idstring(uuid)required

Customer id.

Body

Data.

titlestring or null[ 0 .. 64 ] characters

Title such as "Dr.", "Prof.", etc.

salutationstring or null

Salutation such as "Herr", "Frau", "Mr.", "Ms.", etc.

firstnamestring[ 0 .. 64 ] charactersrequired

First name of the investor. When sending values with accents (e.g. É, ç, ñ), send the values in UTF-8 charset.

lastnamestring[ 0 .. 64 ] charactersrequired

Last name of the investor. When sending values with accents (e.g. É, ç, ñ), send the values in UTF-8 charset.

placeOfBirthstring[ 0 .. 100 ] charactersrequired

Place of birth denoted in the used identification document of the investor.

dateOfBirthstring(date-time)required

Date of birth is a regulatory requirement for the KYC process.

emailstring(email)[ 0 .. 64 ] charactersrequired

The email which the investor used to register. You can re-use the same input as from customer creation.

phoneNumberstring or null

Phone number of the investor.

nonPepPersonbooleanrequired

Relates to the political exposure of the person. Indicates whether the person is NOT a Politically Exposed Person (PEP).

highCorruptionIndexbooleanrequired

Relates to the country of residence. You can always send "false" if your KYC provider performs these checks automatically.

nonSanctionedCountrybooleanrequired

Indicates the investor is NOT residing in a sanctioned country. You can always send "true" if your KYC provider performs these checks automatically.

nonUsTaxPersonbooleanrequired

We do not accept persons subjected to US tax. Always set to "true" (if the person is not subject to taxes in the USA).

identVerifiedbooleanrequired

Only send KYC data of customers that have been verified already. Hence, always set this field to "true".

identVerifiedTypestring(int32)(IdentVerifiedType)
Enum"NotSet""Normal""Plain"
tanganyIdentVerifiedTypestring(int32)(TanganyIdentVerifiedType)
Enum"Video_ident""Id_copy""Auto_ident""In_person""Eid""Post_ident""Qes_bankident"
eulaAgreedbooleanrequired

Refers to the Smart Registry terms of use. Ensure that your end users always have to agree to the terms as part of their onboarding process, then always set to "true".

addressobject(KycAddressDto)required
address.​streetstring[ 1 .. 100 ] charactersrequired

The street name where the investor resides. When sending values with accents (e.g. É, ç, ñ), send the values in UTF-8 charset.

address.​streetNostring[ 1 .. 100 ] charactersrequired

The street number where the investor resides.

address.​postalCodestring[ 1 .. 100 ] charactersrequired

The postal code where the investor resides.

address.​townstring[ 1 .. 100 ] charactersrequired

The town in which the investor resides. When sending values with accents, send in UTF-8 charset.

address.​countryCodeIso2string[ 1 .. 2 ] charactersrequired

ISO country codes (e.g. "DE").

companyobject(CustomerCompanyDetailDto)

Only required when the account type is LegalEntity.

nationalityIsostring or null

The nationality ISO of the investor. Use ISO 3166-1 alpha-2 country codes.

genderstring(int32)(GenderTypes)
Enum"NotSet""Male""Female""Other"
tanganyLegalPersonobject(TanganyLegalPersonDto)
custodyProviderstring(int32)(CustodyProvider)
Enum"HADC""Tangany""TanganyExternal""Iris"
documentobject(TanganyCustomerKycDocumentDto)

The document which was used for verification. Note that a document is required for all verification methods except for in_person

moneriumobject(MoneriumGanymedeDto)
curl -i -X POST \
  'https://api.nyala.de/api/external/v1/customers/{customer-id}/kyc' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "string",
    "salutation": "string",
    "firstname": "string",
    "lastname": "string",
    "placeOfBirth": "string",
    "dateOfBirth": "2019-08-24T14:15:22Z",
    "email": "user@example.com",
    "phoneNumber": "string",
    "nonPepPerson": true,
    "highCorruptionIndex": true,
    "nonSanctionedCountry": true,
    "nonUsTaxPerson": true,
    "identVerified": true,
    "identVerifiedType": "NotSet",
    "tanganyIdentVerifiedType": "Video_ident",
    "eulaAgreed": true,
    "address": {
      "street": "string",
      "streetNo": "string",
      "postalCode": "string",
      "town": "string",
      "countryCodeIso2": "st"
    },
    "company": {
      "name": "string",
      "registerNumber": "string",
      "fullAddress": "string",
      "email": "user@example.com"
    },
    "nationalityIso": "string",
    "gender": "NotSet",
    "tanganyLegalPerson": {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "name": "string",
      "legalForm": "string",
      "commercialRegister": "string",
      "leiCode": "string",
      "taxId": "string",
      "vatId": "string",
      "isinCode": "string",
      "legalJurisdiction": "st",
      "legalAddress": {
        "country": "st",
        "city": "string",
        "postcode": "string",
        "streetName": "string",
        "streetNumber": "string"
      },
      "postalAddress": {
        "country": "st",
        "city": "string",
        "postcode": "string",
        "streetName": "string",
        "streetNumber": "string"
      },
      "kyc": {
        "businessDescription": "string",
        "isCreAvailable": true
      },
      "related": [
        {
          "entityId": "156e622c-6cdf-4c27-9bc9-2f2db69919f5",
          "position": "string",
          "isFictitiousBeneficialOwner": true,
          "isUltimateBeneficialOwner": true,
          "sharePercentage": "string",
          "naturalPerson": {
            "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
            "firstName": "string",
            "lastName": "string",
            "birthDate": "2019-08-24",
            "birthPlace": "string",
            "title": "string",
            "gender": "M",
            "birthCountry": "st",
            "birthName": "string",
            "nationality": "st",
            "address": {
              "country": "st",
              "city": "string",
              "postcode": "string",
              "streetName": "string",
              "streetNumber": "string"
            },
            "email": "string",
            "selfDeclaredAsPep": true,
            "kyc": {
              "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
              "date": "2019-08-24T14:15:22Z",
              "method": "Video_ident",
              "document": {
                "nationality": "st",
                "country": "st",
                "number": "string",
                "issuedBy": "string",
                "issueDate": "2019-08-24",
                "validUntil": "2019-08-24",
                "type": "Id_card",
                "iban": "string",
                "reference": "string"
              }
            }
          },
          "legalPerson": {}
        }
      ]
    },
    "custodyProvider": "HADC",
    "document": {
      "nationality": "st",
      "country": "st",
      "number": "string",
      "issuedBy": "string",
      "issueDate": "2019-08-24",
      "validUntil": "2019-08-24",
      "type": "Id_card",
      "iban": "string",
      "reference": "string"
    },
    "monerium": {
      "profileDocument": {
        "number": "string",
        "kind": "passport"
      },
      "corporate": {
        "name": "string",
        "registrationNumber": "string",
        "representatives": [
          {
            "firstname": "string",
            "lastname": "string",
            "country": "string",
            "nationality": "string",
            "birthDay": "2019-08-24",
            "address": "string",
            "postalCode": "string",
            "city": "string",
            "countryState": "string",
            "idDocument": {
              "number": "string",
              "kind": "passport"
            }
          }
        ],
        "finalBeneficiaries": [
          {
            "firstname": "string",
            "lastname": "string",
            "country": "string",
            "nationality": "string",
            "birthDay": "2019-08-24",
            "ownershipPercentage": "string"
          }
        ],
        "directors": [
          {
            "firstname": "string",
            "lastname": "string",
            "country": "string",
            "nationality": "string",
            "birthDay": "2019-08-24"
          }
        ],
        "address": "string",
        "postalCode": "string",
        "city": "string",
        "country": "string",
        "countryState": "string"
      }
    }
  }'

Responses

OK

Bodyapplication/json
errorMessageCodesArray of strings or nullread-only
errorsArray of objects or null(Error)read-only
databooleanread-only
Response
application/json
{ "errorMessageCodes": [ "string" ], "errors": [ {} ], "data": true }

The second step in the tokenization lifecycle is to request a retail wallet for the Customer newly created. The tokens will be sent to that wallet, and the private key to the wallet will be custodied using our technology.

Operations
Operations
Operations