{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Integration Guide","description":"Public TRP API for VASP-to-VASP Travel Rule data exchange.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"integration-guide"},"children":["Integration Guide"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide walks you from issuing your first API Key to receiving your"," ","first signed confirmation callback."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1.-provision-an-api-key"},"children":["1. Provision an API Key"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["API Keys are issued in the TRP dashboard. They are tied to a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer"]}," ","record (your VASP). Each key has:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["isActive"]}," — toggled in the dashboard,"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expiredAt"]}," — optional expiry date."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2.-issue-a-jwt"},"children":["2. Issue a JWT"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/auth/createtoken"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /auth/token"]}]}," with your"," ","API Key. You receive an access token valid for ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1 hour"]},". Cache it; do"," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," mint a new JWT on every call."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST /auth/token\nx-api-key: 9f31…b2\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3.-onboard-a-beneficiary--generate-a-travel-address"},"children":["3. Onboard a beneficiary → generate a Travel Address"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Whenever a user pastes a wallet address belonging to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["your"]}," customer,"," ","ask your beneficiary VASP for a Travel Address by calling"," ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/address/generatetraveladdress"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /travel-address/generate"]}]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The request schema is polymorphic — use the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["personType"]}," switcher"]}," in"," ","the right panel to toggle between natural person (физ. лицо) and legal"," ","entity (юр. лицо)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"4.-initiate-a-transfer"},"children":["4. Initiate a transfer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/transfer/initiatetransfer"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /transfers/initiate"]}]}," ","with the originator + beneficiary applicants, the asset / amount, and"," ","either:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["travelAddress"]}," — preferred OPEN_VASP flow, ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["or"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["beneficiary.email"]}," — fallback EMAIL flow."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always provide a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["callback"]}," URL. TRP will POST signed updates to it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["originator"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["beneficiary"]}," objects are also polymorphic — each can"," ","independently be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["natural"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["legal"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"5.-handle-callbacks"},"children":["5. Handle callbacks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/pages/callbacks"},"children":["Callbacks"]},". Verify ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-data-integrity"]}," before"," ","processing."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"6.-broadcast-the-on-chain-transaction"},"children":["6. Broadcast the on-chain transaction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After the on-chain broadcast, submit the txid:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST /transfers/txId?q={transferPublicId}\nAuthorization: Bearer {jwt}\n","lang":"http"},"children":[]}]},"headings":[{"value":"Integration Guide","id":"integration-guide","depth":1},{"value":"1. Provision an API Key","id":"1.-provision-an-api-key","depth":2},{"value":"2. Issue a JWT","id":"2.-issue-a-jwt","depth":2},{"value":"3. Onboard a beneficiary → generate a Travel Address","id":"3.-onboard-a-beneficiary--generate-a-travel-address","depth":2},{"value":"4. Initiate a transfer","id":"4.-initiate-a-transfer","depth":2},{"value":"5. Handle callbacks","id":"5.-handle-callbacks","depth":2},{"value":"6. Broadcast the on-chain transaction","id":"6.-broadcast-the-on-chain-transaction","depth":2}],"frontmatter":{"title":"Integration Guide","seo":{"title":"Integration Guide"}},"lastModified":"2026-05-11T08:02:14.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/pages/integration-guide","userData":{"isAuthenticated":false,"teams":["anonymous"]}}