{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-standard-integration/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Customer API","llmstxt":{"hide":true}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"customer-api","__idx":0},"children":["Customer API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Customer API is a REST via HTTPS interface. You can use it to create a new customer (investor) entity in our system, to save their KYC data, request wallet openings, whitelist customers (= authorize them to hold a specific token) and to send order data."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["ℹ️ For API clients, integrating with our Customers API is the minimum level of integration required, since customers / investors cannot be created manually in our system."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["As a prerequisite to the NYALA API integration, you must already have built the following functions in your interface:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An API endpoint to transmit AML/KYC data, the Investor’s investment amount and"," ","number of tokens to NYALA."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An interface to display crypto wallet information (e.g. a link to view wallet in the"," ","blockchain explorer)."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An interface (e.g. a digital postbox) to share mandatory registry extracts with your Investors."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"tokenization-api-sequence-diagram","__idx":1},"children":["Tokenization API sequence diagram"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following steps detailed in this chapter’s sub-pages ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["must be followed in order"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["IMAGE"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Skipping a step of the process will likely result in an error."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authentication","__idx":2},"children":["Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This API uses ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["HMAC (Hash-based Message Authentication Code)"]}," for security. Every request must include an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorization"]}," header containing a signature generated using your Secret Key."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"headers","__idx":3},"children":["Headers"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Header"},"children":["Header"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Value"},"children":["Value"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorization"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HMAC <API_KEY>:<SIGNATURE>"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Content-Length"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The byte length of the request body"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"signature-calculation","__idx":4},"children":["Signature Calculation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The signature is a Base64 encoded HMAC-SHA256 hash. The \"message\" to be signed is constructed by concatenating the following strings in order:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Content Length"]},": The length of the request body (or \"0\" if empty)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["HTTP Method"]},": (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Normalized URL"]},": The full URL, converted to lowercase, with the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["?"]}," removed."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"javascript-example","__idx":5},"children":["JavaScript Example"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can use this logic in your frontend or Node.js applications:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"const msg = `${contentLength || 0}${method}${url.replace(\"?\", \"\").toLowerCase()}`;\nconst hmac = CryptoJS.HmacSHA256(msg, apiSecret);\nconst signature = CryptoJS.enc.Base64.stringify(hmac);\nconst authHeader = `HMAC ${apiKey}:${signature}`;","lang":"javascript"},"children":[]}]},"headings":[{"value":"Customer API","id":"customer-api","depth":1},{"value":"Tokenization API sequence diagram","id":"tokenization-api-sequence-diagram","depth":2},{"value":"Authentication","id":"authentication","depth":2},{"value":"Headers","id":"headers","depth":3},{"value":"Signature Calculation","id":"signature-calculation","depth":3},{"value":"JavaScript Example","id":"javascript-example","depth":3}],"frontmatter":{"seo":{"title":"Customer API"}},"lastModified":"2026-02-17T22:09:34.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/standard-integration/customer-api","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}