# Integration Cookbook This document provides step-by-step guides for common integration flows. ## Table of Contents 1. [Deploy a Token](#deploy-a-token) 2. [Place a Lien](#place-a-lien) 3. [Submit ISO-20022 Message](#submit-iso-20022-message) 4. [Generate and Dispatch Packet](#generate-and-dispatch-packet) 5. [Bridge Lock/Unlock](#bridge-lockunlock) ## Deploy a Token ### REST API ```bash POST /v1/tokens Authorization: Bearer Idempotency-Key: { "name": "USD Wrapped", "symbol": "USDW", "decimals": 18, "issuer": "0x1234...", "defaultLienMode": "ENCUMBERED", "bridgeOnly": false } ``` ### GraphQL ```graphql mutation { deployToken(input: { name: "USD Wrapped" symbol: "USDW" decimals: 18 issuer: "0x1234..." defaultLienMode: ENCUMBERED }) { code address policy { lienMode } } } ``` ## Place a Lien ### REST API ```bash POST /v1/liens Authorization: Bearer { "debtor": "0xabcd...", "amount": "1000000000000000000", "priority": 1, "reasonCode": "DEBT_ENFORCEMENT" } ``` ### GraphQL ```graphql mutation { placeLien(input: { debtor: "0xabcd..." amount: "1000000000000000000" priority: 1 reasonCode: DEBT_ENFORCEMENT }) { lienId amount active } } ``` ## Submit ISO-20022 Message ### Inbound (from rail adapter) ```bash POST /v1/iso/inbound Authorization: Bearer (or mTLS) Idempotency-Key: Content-Type: application/json { "msgType": "pacs.008", "instructionId": "0x1234...", "payloadHash": "0xabcd...", "payload": "...", "rail": "FEDWIRE" } ``` ### Outbound (from client) ```bash POST /v1/iso/outbound Authorization: Bearer Idempotency-Key: { "msgType": "pain.001", "instructionId": "0x1234...", "payloadHash": "0xabcd...", "payload": "...", "rail": "SEPA", "token": "0x5678...", "amount": "1000000000000000000", "accountRefId": "0xdef0...", "counterpartyRefId": "0x9876..." } ``` ## Generate and Dispatch Packet ### Step 1: Generate Packet ```bash POST /v1/packets Authorization: Bearer Idempotency-Key: { "triggerId": "abc123...", "channel": "PDF" } ``` ### Step 2: Dispatch Packet ```bash POST /v1/packets/{packetId}/dispatch Authorization: Bearer Idempotency-Key: { "channel": "EMAIL", "recipient": "recipient@example.com" } ``` ### Step 3: Record Acknowledgement ```bash POST /v1/packets/{packetId}/ack Authorization: Bearer Idempotency-Key: { "status": "ACCEPTED", "ackId": "ack-123" } ``` ## Bridge Lock/Unlock ### Lock Tokens ```bash POST /v1/bridge/lock Authorization: Bearer { "token": "0x1234...", "amount": "1000000000000000000", "targetChain": "0x0000...0001", "targetRecipient": "0xabcd..." } ``` ### Unlock Tokens ```bash POST /v1/bridge/unlock Authorization: Bearer Idempotency-Key: { "lockId": "lock-123", "token": "0x1234...", "to": "0xabcd...", "amount": "1000000000000000000", "sourceChain": "0x0000...0001", "sourceTx": "0x5678...", "proof": "0xdef0..." } ``` ## Webhook Integration ### Register Webhook ```bash POST /v1/webhooks Authorization: Bearer { "url": "https://example.com/webhooks", "events": ["triggers.created", "liens.placed"], "secret": "webhook-secret" } ``` ### Webhook Payload ```json { "eventId": "uuid", "eventType": "triggers.created", "occurredAt": "2024-01-01T00:00:00Z", "payload": { "triggerId": "abc123...", "rail": "FEDWIRE" }, "signatures": [{ "signer": "system", "signature": "hmac-sha256-signature" }] } ``` ### Verify Webhook Signature ```javascript const crypto = require('crypto'); function verifyWebhook(payload, signature, secret) { const hmac = crypto.createHmac('sha256', secret); const expectedSignature = hmac.update(JSON.stringify(payload)).digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expectedSignature) ); } ```