openapi: 3.0.4
servers:
  - url: https://api.nyala.de
    description: Production Environment
  - url: https://uat.api.nyala.de
    description: UAT / Sandbox Environment
info:
  title: Nyala Customer API
  description: >
    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.
  contact:
    name: Nyala Digital Asset AG
    url: https://www.nyala.de
    email: developer@nyala.de
  version: v1
  x-logo:
    url: https://developer.nyala.de/logo.png
    altText: Nyala External API
paths:
  /api/external/v1/customers:
    get:
      tags:
        - Customer
      summary: Getting a list of customers from institution.
      operationId: GetCustomers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAccountDtoListApiResponse'
    post:
      tags:
        - Customer
      summary: Creates a new customer inside the institution.
      operationId: CreateCustomer
      requestBody:
        description: Data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCustomerAccountDto'
          text/json:
            schema:
              $ref: '#/components/schemas/CreateCustomerAccountDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreateCustomerAccountDto'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuidApiResponse'
  /api/external/v1/customers/{customer-id}:
    get:
      tags:
        - Customer
      summary: Getting a customer by Id.
      operationId: GetCustomer
      parameters:
        - name: customer-id
          in: path
          description: Customer id.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAccountDtoApiResponse'
  /api/external/v1/customers/{customer-id}/retail-wallets:
    get:
      tags:
        - Retail Wallet
      summary: >-
        Returns a list of retail wallet object associated with the given
        customer id.
      operationId: GetRetailWalletsDetails
      parameters:
        - name: customer-id
          in: path
          description: Customer Id.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetailWalletDtoListApiResponse'
    post:
      tags:
        - Retail Wallet
      summary: Request a new wallet for a customer from the selected custodian.
      operationId: InitiateRetailWallet
      parameters:
        - name: customer-id
          in: path
          description: Customer Id.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: >-
          Contains Credentials to access the mnemonic seed. Encryption key file
          can be left empty, if it's stored on the Custodian side.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRetailWalletRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/CreateRetailWalletRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreateRetailWalletRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetailWalletDtoListApiResponse'
  /api/external/v1/retail-wallets/external:
    get:
      tags:
        - External Retail Wallet
      summary: List of external wallets.
      operationId: GetExternalRetailWallet
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalRetailWalletDtoListApiResponse'
    post:
      tags:
        - External Retail Wallet
      summary: Import external wallets into the system.
      operationId: CreateExternalRetailWallet
      requestBody:
        description: External wallets' public addresse with some metadata.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateExternalRetailWalletDto'
          text/json:
            schema:
              $ref: '#/components/schemas/CreateExternalRetailWalletDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreateExternalRetailWalletDto'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/CreateExternalRetailWalletResponseDtoApiResponse
  /api/external/v1/search:
    get:
      tags:
        - Customer
      summary: Searches for a customer by firstname lastname or email.
      operationId: QueryCustomers
      parameters:
        - name: searchText
          in: query
          description: search text.
          schema:
            type: string
        - name: take
          in: query
          description: take.
          schema:
            type: integer
            format: int32
            default: 100
        - name: skip
          in: query
          description: skip.
          schema:
            type: integer
            format: int32
            default: 0
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAccountDtoListApiResponse'
  /api/external/v1/status:
    get:
      tags:
        - Status
      summary: Get status of API.
      operationId: Get
      responses:
        '200':
          description: OK
  /api/external/v1/status/auth:
    get:
      tags:
        - Status
      summary: Returns the Users identity, if HMAC authentication worked.
      operationId: GetAuth
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticatedInstitutionDtoApiResponse'
  /api/external/v1/customers/{customer-id}/approve-for-monerium:
    post:
      tags:
        - Retail Wallet
      summary: |-
        Approves the customer for Monerium.
        Requests Ibans for all customer wallets from Monerium.
      operationId: ApproveForMonerium
      parameters:
        - name: customer-id
          in: path
          description: Customer Id.
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetailWalletDtoListApiResponse'
  /api/external/v1/customers/{customer-id}/asset-class-opt-in:
    post:
      tags:
        - Retail Wallet
      summary: Request to whitelist a retail wallet for an asset class.
      operationId: AssetClassOptin
      parameters:
        - name: customer-id
          in: path
          description: Customer id.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RetailWalletOptInDto'
          text/json:
            schema:
              $ref: '#/components/schemas/RetailWalletOptInDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/RetailWalletOptInDto'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuidApiResponse'
    patch:
      tags:
        - Retail Wallet
      summary: Update asset class optin.
      operationId: UpdateAssetClassOptin
      parameters:
        - name: customer-id
          in: path
          description: Customer id.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateOptInDto'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdateOptInDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdateOptInDto'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuidApiResponse'
  /api/external/v1/customers/{customer-id}/kyc:
    post:
      tags:
        - Customer
      summary: Saving KYC data for custodying customer wallets.
      operationId: SubmitCustomerKycData
      parameters:
        - name: customer-id
          in: path
          description: Customer id.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateKycData'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdateKycData'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdateKycData'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BooleanApiResponse'
  /api/external/v1/customers/{customer-id}/monerium-redeem:
    post:
      tags:
        - Retail Wallet
      summary: |-
        Monerium Redeem.
        Place Order on Monerium to Redeem.
      operationId: MoneriumRedeem
      parameters:
        - name: customer-id
          in: path
          description: Customer Id.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Request Dto.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedeemRequestDto'
          text/json:
            schema:
              $ref: '#/components/schemas/RedeemRequestDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/RedeemRequestDto'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetailWalletDtoListApiResponse'
  /api/external/v1/customers/{customer-id}/retail-wallets/{external-retail-wallet-id}/external-asset-class-opt-in:
    post:
      tags:
        - External Retail Wallet
      summary: Request to whitelist an external retail wallet for an asset class.
      operationId: ExternalAssetClassOptin
      parameters:
        - name: customer-id
          in: path
          description: Customer id.
          required: true
          schema:
            type: string
            format: uuid
        - name: external-retail-wallet-id
          in: path
          description: External retail wallet id.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalRetailWalletOptInDto'
          text/json:
            schema:
              $ref: '#/components/schemas/ExternalRetailWalletOptInDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/ExternalRetailWalletOptInDto'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GuidApiResponse'
components:
  schemas:
    AccountTypes:
      enum:
        - Unknown
        - Person
        - LegalEntity
      type: string
      format: int32
      x-custom-enum:
        name: AccountTypes
        enumObjects:
          - label: Unknown
            value: 0
          - label: Person
            value: 1
          - label: LegalEntity
            value: 2
    AssetClassEnum:
      enum:
        - Bond
        - Share
      type: string
      format: int32
      x-custom-enum:
        name: AssetClassEnum
        enumObjects:
          - label: Bond
            value: 0
          - label: Share
            value: 1
    AuthenticatedInstitutionDto:
      type: object
      properties:
        institutionName:
          type: string
          nullable: true
        productAccess:
          type: array
          items:
            $ref: '#/components/schemas/Products'
          nullable: true
        userName:
          type: string
          nullable: true
      additionalProperties: false
    AuthenticatedInstitutionDtoApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          $ref: '#/components/schemas/AuthenticatedInstitutionDto'
      additionalProperties: false
    BalancesInDecimalDto:
      type: object
      properties:
        nativeBalance:
          $ref: '#/components/schemas/DecimalBalanceAmount'
        nativeFreeDecimalBalanceString:
          type: string
          description: 1.234 format in string.
          nullable: true
          readOnly: true
        nativeLockedDecimalBalanceString:
          type: string
          description: 1.234 format in string.
          nullable: true
          readOnly: true
        nonNativeBalances:
          type: object
          additionalProperties:
            type: number
            format: double
          nullable: true
        nonNativeBalancesString:
          type: object
          additionalProperties:
            type: string
            nullable: true
          nullable: true
          readOnly: true
      additionalProperties: false
      description: >-
        Balances in human readable format: in case of LUNA: 1 luna is 1_000_000
        uluna, and here you should see 1.0.
    Blockchains:
      enum:
        - Stellar
        - Polygon
        - Peaq
      type: string
      format: int32
      x-custom-enum:
        name: Blockchains
        enumObjects:
          - label: NotSet
            value: 0
          - label: Bitcoin
            value: 1
          - label: Ethereum
            value: 2
          - label: Stellar
            value: 3
          - label: Litecoin
            value: 4
          - label: Polkadot
            value: 5
          - label: Kusama
            value: 6
          - label: Algorand
            value: 7
          - label: Cosmos
            value: 8
          - label: Terra
            value: 9
          - label: Polymesh
            value: 10
          - label: Binance
            value: 11
          - label: Solana
            value: 12
          - label: Cardano
            value: 13
          - label: Polygon
            value: 14
          - label: Avalanche
            value: 15
          - label: Peaq
            value: 16
          - label: Amoy
            value: 17
          - label: EthereumSmartContract
            value: 100
    BooleanApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          type: boolean
          readOnly: true
      additionalProperties: false
    CompanyConsent:
      enum:
        - Require
        - NotRequire
      type: string
      format: int32
      x-custom-enum:
        name: CompanyConsent
        enumObjects:
          - label: Require
            value: 0
          - label: NotRequire
            value: 1
    CountryDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        iso:
          type: string
          nullable: true
        isoCode3:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
      additionalProperties: false
    CreateCustomerAccountDto:
      required:
        - countryIso
        - email
        - firstname
        - lastname
        - postalCode
        - street
        - streetNo
        - town
        - type
      type: object
      properties:
        salutation:
          type: string
          description: Salutation such as "Herr", "Frau", "Mr.", "Ms.", etc.
          nullable: true
        title:
          maxLength: 64
          minLength: 0
          type: string
          description: Title such as "Dr.", "Prof.", etc.
          nullable: true
        firstname:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            First name of the investor. When sending values with accents (e.g.
            É, ç, ñ), send the values in UTF-8 charset.
        lastname:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            Last name of the investor. When sending values with accents (e.g. É,
            ç, ñ), send the values in UTF-8 charset.
        birthDate:
          type: string
          description: >-
            Date of birth not required at customer creation, but necessary for
            the KYC process. 
          format: date-time
          nullable: true
        phoneNumber:
          maxLength: 64
          minLength: 0
          type: string
          description: Phone number of the investor.
          format: tel
          nullable: true
        type:
          $ref: '#/components/schemas/AccountTypes'
        street:
          maxLength: 100
          minLength: 1
          type: string
          description: >-
            The street name where the investor resides. When sending values with
            accents (e.g. É, ç, ñ), send the values in UTF-8 charset.
        streetNo:
          maxLength: 100
          minLength: 1
          type: string
          description: The street number where the investor resides.
        postalCode:
          maxLength: 100
          minLength: 1
          type: string
          description: The postal code where the investor resides.
        town:
          maxLength: 100
          minLength: 1
          type: string
          description: >-
            The town in which the investor resides. When sending values with
            accents (e.g. É, ç, ñ), send the values in UTF-8 charset.
        countryIso:
          maxLength: 2
          minLength: 2
          type: string
          description: >-
            The country ISO code in which the investor resides. Use ISO 3166-1
            alpha-2 country codes.
        company:
          $ref: '#/components/schemas/CustomerCompanyDetailDto'
        nationalityIso:
          type: string
          description: >-
            The nationality ISO of the investor. Use ISO 3166-1 alpha-2 country
            codes.
          nullable: true
        gender:
          $ref: '#/components/schemas/GenderTypes'
        monerium:
          $ref: '#/components/schemas/MoneriumGanymedeDto'
        tanganyLegalPerson:
          $ref: '#/components/schemas/TanganyLegalPersonDto'
        custodyProvider:
          $ref: '#/components/schemas/CustodyProvider'
        email:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            The email which the investor used to register. This must be unique
            and cannot be reused by other investors.
          format: email
        hadcCustomerId:
          type: string
          format: uuid
          nullable: true
        id:
          type: string
          description: If not provided, it will be auto-generated.
          format: uuid
          nullable: true
      additionalProperties: false
    CreateExternalRetailWalletDto:
      type: object
      properties:
        blockchain:
          $ref: '#/components/schemas/Blockchains'
        publicAddress:
          type: string
          nullable: true
        accountId:
          type: string
          format: uuid
        name:
          type: string
          nullable: true
        externalId:
          type: string
          format: uuid
          nullable: true
      additionalProperties: false
    CreateExternalRetailWalletResponseDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        externalId:
          type: string
          format: uuid
          nullable: true
      additionalProperties: false
    CreateExternalRetailWalletResponseDtoApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          $ref: '#/components/schemas/CreateExternalRetailWalletResponseDto'
      additionalProperties: false
    CreateRetailWalletRequest:
      type: object
      properties:
        custodyProvider:
          $ref: '#/components/schemas/CustodyProvider'
      additionalProperties: false
    CustodyProvider:
      enum:
        - HADC
        - Tangany
        - TanganyExternal
        - Iris
      type: string
      format: int32
      x-custom-enum:
        name: CustodyProvider
        enumObjects:
          - label: HADC
            value: 0
          - label: Tangany
            value: 1
          - label: TanganyExternal
            value: 2
          - label: Iris
            value: 3
    CustomerAccountDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        firstname:
          type: string
          nullable: true
        lastname:
          type: string
          nullable: true
        institutionId:
          type: string
          format: uuid
        institutionName:
          type: string
          nullable: true
        salutation:
          type: string
          nullable: true
        type:
          $ref: '#/components/schemas/AccountTypes'
        birthDate:
          type: string
          format: date-time
          nullable: true
        title:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        phoneNumber:
          type: string
          nullable: true
        walletAccess:
          $ref: '#/components/schemas/RetailWalletAccessLevels'
        address:
          $ref: '#/components/schemas/CustomerAddressDto'
        nationalityId:
          type: string
          format: uuid
          nullable: true
        nationalityIso:
          type: string
          nullable: true
        gender:
          $ref: '#/components/schemas/GenderTypes'
        kycData:
          $ref: '#/components/schemas/KycDataDto'
        company:
          $ref: '#/components/schemas/CustomerCompanyDetailDto'
        approvedForMonerium:
          type: boolean
          nullable: true
        moneriumIban:
          type: string
          nullable: true
        tanganyCustomerId:
          type: string
          format: uuid
          nullable: true
        tanganyAuthorizedId:
          type: string
          format: uuid
          nullable: true
        tanganyOwnerId:
          type: string
          format: uuid
          nullable: true
        hadcCustomerId:
          type: string
          format: uuid
          nullable: true
      additionalProperties: false
    CustomerAccountDtoApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          $ref: '#/components/schemas/CustomerAccountDto'
      additionalProperties: false
    CustomerAccountDtoListApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/CustomerAccountDto'
          nullable: true
          readOnly: true
      additionalProperties: false
    CustomerAddressDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        street:
          type: string
          nullable: true
        streetNo:
          type: string
          nullable: true
        postalCode:
          type: string
          nullable: true
        town:
          type: string
          nullable: true
        country:
          $ref: '#/components/schemas/CountryDto'
        countryCode:
          type: string
          nullable: true
      additionalProperties: false
    CustomerCompanyDetailDto:
      required:
        - email
        - fullAddress
        - name
        - registerNumber
      type: object
      properties:
        name:
          maxLength: 255
          minLength: 1
          type: string
        registerNumber:
          maxLength: 255
          minLength: 1
          type: string
        fullAddress:
          maxLength: 255
          minLength: 1
          type: string
        email:
          maxLength: 64
          minLength: 1
          type: string
          format: email
      additionalProperties: false
      description: Only required when the account type is LegalEntity.
    DecimalBalanceAmount:
      type: object
      properties:
        free:
          type: number
          format: double
        locked:
          type: number
          format: double
      additionalProperties: false
    Error:
      type: object
      properties:
        code:
          type: string
          nullable: true
        message:
          type: string
          nullable: true
        field:
          type: string
          nullable: true
      additionalProperties: false
    ExternalRetailWalletDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        accountId:
          type: string
          format: uuid
        blockchain:
          $ref: '#/components/schemas/Blockchains'
        publicAddress:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        created:
          type: string
          format: date-time
      additionalProperties: false
    ExternalRetailWalletDtoListApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/ExternalRetailWalletDto'
          nullable: true
          readOnly: true
      additionalProperties: false
    ExternalRetailWalletOptInDto:
      required:
        - tokenizedAssetId
      type: object
      properties:
        tokenizedAssetId:
          type: string
          format: uuid
        approvedForDelivery:
          type: boolean
        amount:
          type: number
          format: double
        txHash:
          type: string
          nullable: true
      additionalProperties: false
    FiatCurrency:
      enum:
        - None
        - CHF
        - EUR
        - USD
      type: string
      format: int32
      x-custom-enum:
        name: FiatCurrency
        enumObjects:
          - label: None
            value: 0
          - label: CHF
            value: 756
          - label: EUR
            value: 1001
          - label: USD
            value: 1002
    GenderTypes:
      enum:
        - NotSet
        - Male
        - Female
        - Other
      type: string
      format: int32
      x-custom-enum:
        name: GenderTypes
        enumObjects:
          - label: NotSet
            value: 0
          - label: Male
            value: 1
          - label: Female
            value: 2
          - label: Other
            value: 3
    GuidApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          type: string
          format: uuid
          readOnly: true
      additionalProperties: false
    IdentVerifiedType:
      enum:
        - NotSet
        - Normal
        - Plain
      type: string
      format: int32
      x-custom-enum:
        name: IdentVerifiedType
        enumObjects:
          - label: NotSet
            value: 0
          - label: Normal
            value: 1
          - label: Plain
            value: 2
          - label: None
            value: -1
    IssuerWalletDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        groupId:
          type: string
          format: uuid
          nullable: true
        issuerWalletSeedId:
          type: string
          format: uuid
        role:
          $ref: '#/components/schemas/IssuerWalletRoles'
        created:
          type: string
          format: date-time
        blockchain:
          $ref: '#/components/schemas/Blockchains'
        publicAddress:
          type: string
          nullable: true
        accountIndex:
          type: integer
          format: int32
        name:
          type: string
          nullable: true
        balance:
          $ref: '#/components/schemas/BalancesInDecimalDto'
        tokenizedAssets:
          type: array
          items:
            $ref: '#/components/schemas/TokenizedAssetDto'
          nullable: true
        seedLockStatus:
          type: boolean
        nativeCryptoAssetSymbol:
          type: string
          nullable: true
        nativeCryptoAssetId:
          type: string
          format: uuid
          nullable: true
        isLocked:
          type: boolean
          nullable: true
      additionalProperties: false
    IssuerWalletRoles:
      enum:
        - Issuer
        - Distributor
        - ClaimIssuer
        - Agent
      type: string
      format: int32
      x-custom-enum:
        name: IssuerWalletRoles
        enumObjects:
          - label: Issuer
            value: 1
          - label: Distributor
            value: 2
          - label: ClaimIssuer
            value: 3
          - label: Agent
            value: 4
    KycAddressDto:
      required:
        - countryCodeIso2
        - postalCode
        - street
        - streetNo
        - town
      type: object
      properties:
        street:
          maxLength: 100
          minLength: 1
          type: string
          description: >-
            The street name where the investor resides. When sending values with
            accents (e.g. É, ç, ñ), send the values in UTF-8 charset.
        streetNo:
          maxLength: 100
          minLength: 1
          type: string
          description: The street number where the investor resides.
        postalCode:
          maxLength: 100
          minLength: 1
          type: string
          description: The postal code where the investor resides.
        town:
          maxLength: 100
          minLength: 1
          type: string
          description: >-
            The town in which the investor resides. When sending values with
            accents, send in UTF-8 charset.
        countryCodeIso2:
          maxLength: 2
          minLength: 1
          type: string
          description: ISO country codes (e.g. "DE").
      additionalProperties: false
    KycDataDto:
      required:
        - address
        - dateOfBirth
        - email
        - eulaAgreed
        - firstname
        - highCorruptionIndex
        - identVerified
        - lastname
        - nonPepPerson
        - nonSanctionedCountry
        - nonUsTaxPerson
        - placeOfBirth
      type: object
      properties:
        title:
          maxLength: 64
          minLength: 0
          type: string
          description: Title such as "Dr.", "Prof.", etc.
          nullable: true
        salutation:
          type: string
          description: Salutation such as "Herr", "Frau", "Mr.", "Ms.", etc.
          nullable: true
        firstname:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            First name of the investor. When sending values with accents (e.g.
            É, ç, ñ), send the values in UTF-8 charset.
        lastname:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            Last name of the investor. When sending values with accents (e.g. É,
            ç, ñ), send the values in UTF-8 charset.
        placeOfBirth:
          maxLength: 100
          minLength: 0
          type: string
          description: >-
            Place of birth denoted in the used identification document of the
            investor.
        dateOfBirth:
          type: string
          description: Date of birth is a regulatory requirement for the KYC process.
          format: date-time
        email:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            The email which the investor used to register. You can re-use the
            same input as from customer creation.
          format: email
        phoneNumber:
          type: string
          description: Phone number of the investor.
          nullable: true
        nonPepPerson:
          type: boolean
          description: >-
            Relates to the political exposure of the person. Indicates whether
            the person is NOT a Politically Exposed Person (PEP).
        highCorruptionIndex:
          type: boolean
          description: >-
            Relates to the country of residence. You can always send "false" if
            your KYC provider performs these checks automatically.
        nonSanctionedCountry:
          type: boolean
          description: >-
            Indicates the investor is NOT residing in a sanctioned country. You
            can always send "true" if your KYC provider performs these checks
            automatically.
        nonUsTaxPerson:
          type: boolean
          description: >-
            We do not accept persons subjected to US tax. Always set to "true"
            (if the person is not subject to taxes in the USA).
        identVerified:
          type: boolean
          description: >-
            Only send KYC data of customers that have been verified already.
            Hence, always set this field to "true".
        identVerifiedType:
          $ref: '#/components/schemas/IdentVerifiedType'
        tanganyIdentVerifiedType:
          $ref: '#/components/schemas/TanganyIdentVerifiedType'
        eulaAgreed:
          type: boolean
          description: >-
            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".
        address:
          $ref: '#/components/schemas/KycAddressDto'
        company:
          $ref: '#/components/schemas/CustomerCompanyDetailDto'
        nationalityIso:
          type: string
          description: >-
            The nationality ISO of the investor. Use ISO 3166-1 alpha-2 country
            codes. 
          nullable: true
        gender:
          $ref: '#/components/schemas/GenderTypes'
        tanganyLegalPerson:
          $ref: '#/components/schemas/TanganyLegalPersonDto'
      additionalProperties: false
    LegalKycDto:
      required:
        - businessDescription
        - isCreAvailable
      type: object
      properties:
        businessDescription:
          maxLength: 255
          minLength: 1
          type: string
          description: 'You can always send the following value: "Investor".'
        isCreAvailable:
          type: boolean
          description: You can always set this field to false.
      additionalProperties: false
    MixedRecordKeeping:
      enum:
        - 'True'
        - 'False'
      type: string
      format: int32
      x-custom-enum:
        name: MixedRecordKeeping
        enumObjects:
          - label: 'True'
            value: 0
          - label: 'False'
            value: 1
    MoneriumBasePersonalDto:
      required:
        - birthDay
        - country
        - firstname
        - lastname
        - nationality
      type: object
      properties:
        firstname:
          minLength: 1
          type: string
        lastname:
          minLength: 1
          type: string
        country:
          minLength: 1
          type: string
        nationality:
          minLength: 1
          type: string
        birthDay:
          minLength: 1
          type: string
          format: date
      additionalProperties: false
    MoneriumBeneficialOwnerDto:
      required:
        - birthDay
        - country
        - firstname
        - lastname
        - nationality
      type: object
      properties:
        firstname:
          minLength: 1
          type: string
        lastname:
          minLength: 1
          type: string
        country:
          minLength: 1
          type: string
        nationality:
          minLength: 1
          type: string
        birthDay:
          minLength: 1
          type: string
          format: date
        ownershipPercentage:
          type: string
          nullable: true
      additionalProperties: false
    MoneriumCorporateDetailsDto:
      required:
        - address
        - city
        - country
        - name
        - postalCode
        - registrationNumber
        - representatives
      type: object
      properties:
        name:
          minLength: 1
          type: string
        registrationNumber:
          minLength: 1
          type: string
        representatives:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/MoneriumRepresentativeDto'
        finalBeneficiaries:
          type: array
          items:
            $ref: '#/components/schemas/MoneriumBeneficialOwnerDto'
          nullable: true
        directors:
          type: array
          items:
            $ref: '#/components/schemas/MoneriumBasePersonalDto'
          nullable: true
        address:
          minLength: 1
          type: string
        postalCode:
          minLength: 1
          type: string
        city:
          minLength: 1
          type: string
        country:
          minLength: 1
          type: string
        countryState:
          type: string
          nullable: true
      additionalProperties: false
    MoneriumDocumentDto:
      required:
        - kind
        - number
      type: object
      properties:
        number:
          minLength: 1
          type: string
        kind:
          $ref: '#/components/schemas/MoneriumDocumentType'
      additionalProperties: false
    MoneriumDocumentType:
      enum:
        - passport
        - drivingLicense
        - nationalIdentityCard
      type: string
      description: >-
        The type of ID document. Passports, National ID cards, and driving
        licenses are supported.
      format: int32
      x-custom-enum:
        name: MoneriumDocumentType
        enumObjects:
          - label: passport
            value: 0
          - label: drivingLicense
            value: 1
          - label: nationalIdentityCard
            value: 2
    MoneriumGanymedeDto:
      type: object
      properties:
        profileDocument:
          $ref: '#/components/schemas/MoneriumDocumentDto'
        corporate:
          $ref: '#/components/schemas/MoneriumCorporateDetailsDto'
      additionalProperties: false
    MoneriumRepresentativeDto:
      required:
        - address
        - birthDay
        - city
        - country
        - firstname
        - idDocument
        - lastname
        - nationality
        - postalCode
      type: object
      properties:
        firstname:
          minLength: 1
          type: string
        lastname:
          minLength: 1
          type: string
        country:
          minLength: 1
          type: string
        nationality:
          minLength: 1
          type: string
        birthDay:
          minLength: 1
          type: string
          format: date
        address:
          minLength: 1
          type: string
        postalCode:
          minLength: 1
          type: string
        city:
          minLength: 1
          type: string
        countryState:
          type: string
          nullable: true
        idDocument:
          $ref: '#/components/schemas/MoneriumDocumentDto'
      additionalProperties: false
    Products:
      enum:
        - RetailWallet
        - Tokenization
      type: string
      format: int32
      x-custom-enum:
        name: Products
        enumObjects:
          - label: RetailWallet
            value: 101
          - label: Tokenization
            value: 103
    ProjectDto:
      required:
        - blockchain
        - institutionId
        - issueSize
        - name
      type: object
      properties:
        id:
          type: string
          format: uuid
          nullable: true
        name:
          minLength: 1
          type: string
        institutionId:
          type: string
          format: uuid
        userId:
          type: string
          format: uuid
          nullable: true
        creatorFirstName:
          type: string
          nullable: true
        creatorLastName:
          type: string
          nullable: true
        startOfSubscription:
          type: string
          description: Optional for Share Token Projects
          nullable: true
        endOfSubscription:
          type: string
          description: Optional for Share Token Projects
          nullable: true
        targetIssuanceDate:
          type: string
          description: Optional for Share Token Projects
          nullable: true
        dueDateOfPayments:
          type: string
          nullable: true
        terminationRights:
          type: string
          description: Required for Bond Token Projects
          nullable: true
        issueSize:
          minLength: 1
          type: string
        currency:
          $ref: '#/components/schemas/FiatCurrency'
        entryType:
          $ref: '#/components/schemas/ProjectEntryType'
        tokenType:
          $ref: '#/components/schemas/AssetClassEnum'
        status:
          $ref: '#/components/schemas/ProjectStatus'
        created:
          type: string
          nullable: true
        registryExtract:
          type: boolean
        errorMessage:
          type: string
          nullable: true
        blockchain:
          $ref: '#/components/schemas/Blockchains'
        currentPassphrase:
          type: string
          nullable: true
        projectPassphrase:
          type: string
          nullable: true
        seedCreated:
          type: boolean
      additionalProperties: false
    ProjectEntryType:
      enum:
        - Collective
        - Individual
      type: string
      format: int32
      x-custom-enum:
        name: ProjectEntryType
        enumObjects:
          - label: Collective
            value: 0
          - label: Individual
            value: 1
    ProjectStatus:
      enum:
        - Initiated
        - Live
        - InProgress
        - Active
        - Finished
        - Terminated
        - ActionNeeded
      type: string
      format: int32
      x-custom-enum:
        name: ProjectStatus
        enumObjects:
          - label: Initiated
            value: 0
          - label: Live
            value: 1
          - label: InProgress
            value: 2
          - label: Active
            value: 3
          - label: Finished
            value: 4
          - label: Terminated
            value: 5
          - label: ActionNeeded
            value: 6
    RedeemRequestDto:
      type: object
      properties:
        amount:
          type: string
          nullable: true
        iban:
          type: string
          nullable: true
      additionalProperties: false
    RelatedItemDto:
      required:
        - isFictitiousBeneficialOwner
        - isUltimateBeneficialOwner
      type: object
      properties:
        entityId:
          type: string
          description: >-
            The legal requirement is to create one per beneficial owner of the
            company (even if they do not have to go through the KYC process).
          format: uuid
          nullable: true
        position:
          maxLength: 255
          type: string
          description: Position of the beneficial owner in the company.
          nullable: true
        isFictitiousBeneficialOwner:
          type: boolean
          description: Indicates if this is a fictitious beneficial owner.
        isUltimateBeneficialOwner:
          type: boolean
          description: Indicates if this is the ultimate beneficial owner.
        sharePercentage:
          maxLength: 10
          type: string
          description: Share percentage of ownership.
          nullable: true
        naturalPerson:
          $ref: '#/components/schemas/TanganyNaturalPersonDto'
        legalPerson:
          $ref: '#/components/schemas/TanganyLegalPersonDto'
      additionalProperties: false
    RetailWalletAccessLevels:
      enum:
        - None
        - Basic
        - Full
      type: string
      format: int32
      x-custom-enum:
        name: RetailWalletAccessLevels
        enumObjects:
          - label: None
            value: 0
          - label: Basic
            value: 1
          - label: Full
            value: 2
    RetailWalletDto:
      type: object
      properties:
        blockchain:
          $ref: '#/components/schemas/Blockchains'
        publicAddress:
          type: string
          nullable: true
        id:
          type: string
          format: uuid
        balance:
          $ref: '#/components/schemas/BalancesInDecimalDto'
        seedLockStatus:
          type: boolean
        retailWalletSeedId:
          type: string
          format: uuid
          nullable: true
        accountId:
          type: string
          format: uuid
        created:
          type: string
          format: date-time
        transfers:
          type: array
          items:
            $ref: '#/components/schemas/TokenizedAssetTransferDto'
          nullable: true
        type:
          $ref: '#/components/schemas/RetailWalletType'
        status:
          $ref: '#/components/schemas/RetailWalletRequestStatus'
        isTangany:
          type: boolean
        isIrisWallet:
          type: boolean
          nullable: true
      additionalProperties: false
    RetailWalletDtoListApiResponse:
      type: object
      properties:
        errorMessageCodes:
          type: array
          items:
            type: string
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          nullable: true
          readOnly: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/RetailWalletDto'
          nullable: true
          readOnly: true
      additionalProperties: false
    RetailWalletOptInDto:
      required:
        - tokenizedAssetId
      type: object
      properties:
        tokenizedAssetId:
          type: string
          format: uuid
        approvedForDelivery:
          type: boolean
        amount:
          type: number
          format: double
        custodyProvider:
          $ref: '#/components/schemas/CustodyProvider'
      additionalProperties: false
    RetailWalletRequestStatus:
      enum:
        - New
        - Approved
        - WalletCreated
        - UpdatedKYCData
        - Rejected
        - Withdrawn
      type: string
      format: int32
      x-custom-enum:
        name: RetailWalletRequestStatus
        enumObjects:
          - label: New
            value: 0
          - label: Approved
            value: 1
          - label: WalletCreated
            value: 2
          - label: UpdatedKYCData
            value: 3
          - label: Rejected
            value: 4
          - label: Withdrawn
            value: 5
    RetailWalletType:
      enum:
        - RetailWallet
        - RetailWalletRequest
      type: string
      format: int32
      x-custom-enum:
        name: RetailWalletType
        enumObjects:
          - label: RetailWallet
            value: 1
          - label: RetailWalletRequest
            value: 2
    ReviewDecision:
      enum:
        - Pending
        - Approved
        - Rejected
        - Withdrawn
      type: string
      format: int32
      x-custom-enum:
        name: ReviewDecision
        enumObjects:
          - label: Pending
            value: 0
          - label: Approved
            value: 1
          - label: Rejected
            value: 2
          - label: Withdrawn
            value: 3
    SimpleAccessCredentialsDto:
      type: object
      additionalProperties: false
    TanganyCustomerAddressDto:
      required:
        - city
        - country
        - postcode
        - streetName
        - streetNumber
      type: object
      properties:
        country:
          maxLength: 2
          minLength: 1
          type: string
          description: ISO country code (e.g. "DE") where the company is registered.
        city:
          maxLength: 255
          minLength: 1
          type: string
          description: City where company is registered.
        postcode:
          maxLength: 255
          minLength: 1
          type: string
          description: Post code where company is registered.
        streetName:
          maxLength: 255
          minLength: 1
          type: string
          description: Street name where company is registered.
        streetNumber:
          maxLength: 255
          minLength: 1
          type: string
          description: Street number where company is registered.
      additionalProperties: false
    TanganyCustomerKycDocumentDto:
      type: object
      properties:
        nationality:
          maxLength: 2
          type: string
          description: >-
            Stated nationality. Must be a ISO 3166-1 Alpha-2 country code.
            Additionally "XX" is allowed for unknown states.
          nullable: true
        country:
          maxLength: 2
          type: string
          description: >-
            Document issuing country. Must be a ISO 3166-1 Alpha-2 country code.
            Additionally "XX" is allowed for unknown states. Nullable only for
            QES_bankident method - has to be set to null or removed from the
            object
          nullable: true
        number:
          maxLength: 255
          type: string
          description: >-
            ID of the document. Nullable only for eID and QES_bankident methods
            - has to be set to null or removed from the object
          nullable: true
        issuedBy:
          maxLength: 255
          type: string
          description: >-
            Name of the document issuer. Nullable only for eID and QES_bankident
            methods - has to be set to null or removed from the object
          nullable: true
        issueDate:
          type: string
          description: >-
            Date of issuance in the format YYYY-MM-DD. Must be >= 1900-01-01. If
            not provided, can be set to n/a. Nullable only for QES_bankident
            method - has to be set to null or removed from the object
          format: date
          nullable: true
        validUntil:
          type: string
          description: >-
            Stated expiration date of the document in the YYYY-MM-DD format.
            Must be >= 1900-01-01. Nullable only for QES_bankident method - has
            to be set to null or removed from the object
          format: date
          nullable: true
        type:
          $ref: '#/components/schemas/TanganyDocumentType'
        iban:
          maxLength: 34
          type: string
          description: >-
            International Bank Account Number comprised of 34 characters,
            letters and numbers. Nullable for all methods except QES_bankident
          nullable: true
        reference:
          type: string
          description: >-
            Reference or purpose of a transfer containing any characters.
            Nullable for all methods except QES_bankident
          nullable: true
      additionalProperties: false
      description: >-
        The document which was used for verification. Note that a document is
        required for all verification methods except for in_person
    TanganyCustomerKycDto:
      required:
        - date
        - id
        - method
      type: object
      properties:
        id:
          minLength: 1
          type: string
          format: uuid
        date:
          minLength: 1
          type: string
          format: date-time
        method:
          $ref: '#/components/schemas/TanganyIdentVerifiedType'
        document:
          $ref: '#/components/schemas/TanganyCustomerKycDocumentDto'
      additionalProperties: false
    TanganyDocumentType:
      enum:
        - Id_card
        - Passport
        - Other
      type: string
      description: >-
        Type of the document. Nullable only for QES_bankident method - has to be
        set to null or removed from the object
      format: int32
      x-custom-enum:
        name: TanganyDocumentType
        enumObjects:
          - label: Id_card
            value: 0
          - label: Passport
            value: 1
          - label: Other
            value: 2
    TanganyGenderType:
      enum:
        - M
        - F
        - X
      type: string
      format: int32
      x-custom-enum:
        name: TanganyGenderType
        enumObjects:
          - label: M
            value: 0
          - label: F
            value: 1
          - label: X
            value: 2
    TanganyIdentVerifiedType:
      enum:
        - Video_ident
        - Id_copy
        - Auto_ident
        - In_person
        - Eid
        - Post_ident
        - Qes_bankident
      type: string
      format: int32
      x-custom-enum:
        name: TanganyIdentVerifiedType
        enumObjects:
          - label: Video_ident
            value: 3
          - label: Id_copy
            value: 4
          - label: Auto_ident
            value: 5
          - label: In_person
            value: 6
          - label: Eid
            value: 7
          - label: Post_ident
            value: 8
          - label: Qes_bankident
            value: 9
    TanganyLegalPersonDto:
      required:
        - legalAddress
        - legalForm
        - name
        - related
      type: object
      properties:
        id:
          type: string
          description: Not required in case of creating new Tangany legal person
          format: uuid
          nullable: true
        name:
          maxLength: 255
          minLength: 1
          type: string
          description: The name of the company. You can re-use the value from company.name.
        legalForm:
          maxLength: 255
          minLength: 1
          type: string
          description: Legal form of company. E.g. "AG", "GmbH".
        commercialRegister:
          maxLength: 255
          type: string
          description: >-
            You may leave it blank. Legally speaking, only the register number
            is required.
          nullable: true
        leiCode:
          maxLength: 255
          type: string
          description: LEI code of the company.
          nullable: true
        taxId:
          maxLength: 255
          type: string
          description: Tax ID of the company.
          nullable: true
        vatId:
          maxLength: 255
          type: string
          description: Vat ID of the company.
          nullable: true
        isinCode:
          maxLength: 255
          type: string
          description: ISIN code of the company.
          nullable: true
        legalJurisdiction:
          maxLength: 2
          type: string
          description: >-
            ISO country code (e.g. "DE") where the legal entity is registered.
            Not mandatory, as this data is captured within the legalAddress
            object.
          nullable: true
        legalAddress:
          $ref: '#/components/schemas/TanganyCustomerAddressDto'
        postalAddress:
          $ref: '#/components/schemas/TanganyCustomerAddressDto'
        kyc:
          $ref: '#/components/schemas/LegalKycDto'
        related:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/RelatedItemDto'
      additionalProperties: false
    TanganyNaturalPersonDto:
      required:
        - birthDate
        - birthPlace
        - firstName
        - id
        - lastName
      type: object
      properties:
        id:
          minLength: 1
          type: string
          description: Customer ID received after creating a customer in NYALA's system.
          format: uuid
        firstName:
          maxLength: 255
          minLength: 1
          type: string
          description: >-
            First name of the investor. When sending values with accents (e.g.
            É, ç, ñ), send the values in UTF-8 charset.
        lastName:
          maxLength: 255
          minLength: 1
          type: string
          description: >-
            Last name of the investor. When sending values with accents (e.g. É,
            ç, ñ), send the values in UTF-8 charset.
        birthDate:
          minLength: 1
          type: string
          description: Date of birth is a regulatory requirement for the KYC process.
          format: date
        birthPlace:
          maxLength: 255
          minLength: 1
          type: string
          description: >-
            Place of birth denoted in the used identification document of the
            investor.
        title:
          maxLength: 255
          type: string
          description: 'Titles such as "Dr.", "Prof.", etc. '
          nullable: true
        gender:
          $ref: '#/components/schemas/TanganyGenderType'
        birthCountry:
          maxLength: 2
          type: string
          description: 'Country of birth using two-letter country code (ISO 3166-1 alpha-2) '
          nullable: true
        birthName:
          maxLength: 255
          type: string
          nullable: true
        nationality:
          maxLength: 2
          type: string
          description: ISO country codes (e.g. "DE").
          nullable: true
        address:
          $ref: '#/components/schemas/TanganyCustomerAddressDto'
        email:
          maxLength: 255
          type: string
          description: >-
            The email which the investor used to register. You can re-use the
            same input as from customer creation.
          nullable: true
        selfDeclaredAsPep:
          type: boolean
          description: >-
            Indicates whether the investor has self-declared as a Politically
            Exposed Person (PEP).
        kyc:
          $ref: '#/components/schemas/TanganyCustomerKycDto'
      additionalProperties: false
    TokenizedAssetDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
          nullable: true
        assetId:
          type: string
          nullable: true
        toiFilePathS3:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        unitName:
          maxLength: 10
          type: string
          nullable: true
        totalSupply:
          type: number
          format: double
        decimals:
          type: integer
          format: int32
        enableFreeze:
          type: boolean
        enableClawback:
          type: boolean
        url:
          type: string
          nullable: true
        metaData:
          type: string
          nullable: true
        issuerAddress:
          type: string
          nullable: true
        distributionAddress:
          type: string
          nullable: true
        blockchain:
          $ref: '#/components/schemas/Blockchains'
        reviewDecision:
          $ref: '#/components/schemas/ReviewDecision'
        reviewedAt:
          type: string
          format: date-time
          nullable: true
        reviewer:
          type: string
          nullable: true
        issuingMemo:
          type: string
          nullable: true
        isFungible:
          type: boolean
        projectId:
          type: string
          format: uuid
        isin:
          maxLength: 20
          type: string
          nullable: true
        isRegulatedSecurity:
          type: boolean
        isManuallyCreated:
          type: boolean
        agentWalletId:
          type: string
          format: uuid
          nullable: true
        claimIssuerWalletId:
          type: string
          format: uuid
          nullable: true
        issuerTxId:
          type: string
          nullable: true
        issuerAccountIndex:
          type: integer
          format: int32
        agentTxId:
          type: string
          nullable: true
        agentAccountIndex:
          type: integer
          format: int32
        agentAddress:
          type: string
          nullable: true
        cissuerAdress:
          type: string
          nullable: true
        tokeFactoryAddress:
          type: string
          nullable: true
        projectName:
          type: string
          nullable: true
        issuerWallet:
          $ref: '#/components/schemas/IssuerWalletDto'
        project:
          $ref: '#/components/schemas/ProjectDto'
        reportEnable:
          type: boolean
        created:
          type: string
          nullable: true
        hashValue:
          type: string
          nullable: true
        hasAIPSupport:
          type: boolean
        aipSetup:
          type: boolean
        aipLastBatchRun:
          type: string
          format: date-time
        aipBatchInterval:
          type: integer
          format: int32
        aiperC20TokenAddress:
          type: string
          nullable: true
        aipInterestRate:
          type: number
          format: double
        customAttributes:
          type: object
          additionalProperties:
            type: string
            nullable: true
          nullable: true
        firstCouponDate:
          type: string
          format: date-time
          nullable: true
        interestPaymentPeriod:
          type: integer
          format: int32
          nullable: true
        numberOfPayments:
          type: integer
          format: int32
          nullable: true
        price:
          maxLength: 100
          type: string
          nullable: true
        currency:
          $ref: '#/components/schemas/FiatCurrency'
        nominalAmountPerToken:
          type: string
          nullable: true
        issuerName:
          type: string
          nullable: true
        interestRate:
          type: string
          nullable: true
        duration:
          type: string
          nullable: true
        metaDataUrl:
          type: string
          nullable: true
        shareClass:
          type: string
          nullable: true
        votingRights:
          type: string
          nullable: true
        parValue:
          type: boolean
        votingRight:
          type: boolean
        companyConsent:
          $ref: '#/components/schemas/CompanyConsent'
        mixedRecordKeeping:
          $ref: '#/components/schemas/MixedRecordKeeping'
        tokenType:
          $ref: '#/components/schemas/AssetClassEnum'
        isAssetClassToken:
          type: boolean
        hasColisting:
          type: boolean
        paused:
          type: boolean
      additionalProperties: false
    TokenizedAssetTransferDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
        receiverRetailWalletId:
          type: string
          format: uuid
        receiverInstitutionId:
          type: string
          format: uuid
        status:
          $ref: '#/components/schemas/WalletTransactionStatus'
        created:
          type: string
          format: date-time
        txId:
          type: string
          nullable: true
        fromAddress:
          type: string
          nullable: true
        toAddress:
          type: string
          nullable: true
        amount:
          type: number
          format: double
        amountString:
          type: string
          nullable: true
          readOnly: true
        tokenizedAsset:
          $ref: '#/components/schemas/TokenizedAssetDto'
      additionalProperties: false
    UpdateKycData:
      required:
        - address
        - dateOfBirth
        - email
        - eulaAgreed
        - firstname
        - highCorruptionIndex
        - identVerified
        - lastname
        - nonPepPerson
        - nonSanctionedCountry
        - nonUsTaxPerson
        - placeOfBirth
      type: object
      properties:
        title:
          maxLength: 64
          minLength: 0
          type: string
          description: Title such as "Dr.", "Prof.", etc.
          nullable: true
        salutation:
          type: string
          description: Salutation such as "Herr", "Frau", "Mr.", "Ms.", etc.
          nullable: true
        firstname:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            First name of the investor. When sending values with accents (e.g.
            É, ç, ñ), send the values in UTF-8 charset.
        lastname:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            Last name of the investor. When sending values with accents (e.g. É,
            ç, ñ), send the values in UTF-8 charset.
        placeOfBirth:
          maxLength: 100
          minLength: 0
          type: string
          description: >-
            Place of birth denoted in the used identification document of the
            investor.
        dateOfBirth:
          type: string
          description: Date of birth is a regulatory requirement for the KYC process.
          format: date-time
        email:
          maxLength: 64
          minLength: 0
          type: string
          description: >-
            The email which the investor used to register. You can re-use the
            same input as from customer creation.
          format: email
        phoneNumber:
          type: string
          description: Phone number of the investor.
          nullable: true
        nonPepPerson:
          type: boolean
          description: >-
            Relates to the political exposure of the person. Indicates whether
            the person is NOT a Politically Exposed Person (PEP).
        highCorruptionIndex:
          type: boolean
          description: >-
            Relates to the country of residence. You can always send "false" if
            your KYC provider performs these checks automatically.
        nonSanctionedCountry:
          type: boolean
          description: >-
            Indicates the investor is NOT residing in a sanctioned country. You
            can always send "true" if your KYC provider performs these checks
            automatically.
        nonUsTaxPerson:
          type: boolean
          description: >-
            We do not accept persons subjected to US tax. Always set to "true"
            (if the person is not subject to taxes in the USA).
        identVerified:
          type: boolean
          description: >-
            Only send KYC data of customers that have been verified already.
            Hence, always set this field to "true".
        identVerifiedType:
          $ref: '#/components/schemas/IdentVerifiedType'
        tanganyIdentVerifiedType:
          $ref: '#/components/schemas/TanganyIdentVerifiedType'
        eulaAgreed:
          type: boolean
          description: >-
            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".
        address:
          $ref: '#/components/schemas/KycAddressDto'
        company:
          $ref: '#/components/schemas/CustomerCompanyDetailDto'
        nationalityIso:
          type: string
          description: >-
            The nationality ISO of the investor. Use ISO 3166-1 alpha-2 country
            codes. 
          nullable: true
        gender:
          $ref: '#/components/schemas/GenderTypes'
        tanganyLegalPerson:
          $ref: '#/components/schemas/TanganyLegalPersonDto'
        custodyProvider:
          $ref: '#/components/schemas/CustodyProvider'
        document:
          $ref: '#/components/schemas/TanganyCustomerKycDocumentDto'
        monerium:
          $ref: '#/components/schemas/MoneriumGanymedeDto'
      additionalProperties: false
    UpdateOptInDto:
      type: object
      properties:
        tokenizedAssetId:
          type: string
          format: uuid
        approvedForDelivery:
          type: boolean
        amount:
          type: number
          format: double
        custodyProvider:
          $ref: '#/components/schemas/CustodyProvider'
      additionalProperties: false
    WalletTransactionStatus:
      enum:
        - New
        - Pending
        - Rejected
        - Approved
        - Sent
        - Successful
        - Failed
        - TimedOut
        - FailedOnBlockChain
        - RecipientAddressNotFound
        - RecipientInvalidOptinStatus
      type: string
      format: int32
      x-custom-enum:
        name: WalletTransactionStatus
        enumObjects:
          - label: New
            value: 0
          - label: Pending
            value: 1
          - label: Rejected
            value: 2
          - label: Approved
            value: 3
          - label: Sent
            value: 4
          - label: Successful
            value: 5
          - label: Failed
            value: 6
          - label: TimedOut
            value: 7
          - label: FailedOnBlockChain
            value: 8
          - label: RecipientAddressNotFound
            value: 9
          - label: RecipientInvalidOptinStatus
            value: 10
tags:
  - name: Customer
    description: >-
      The first step in the tokenization lifecycle is to create a Customer that
      will receive the token.
  - name: Retail Wallet
    description: >-
      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.
