components: schemas: # Core domain models (reference JSON Schema registry) Token: type: object required: - code - address - name - symbol - decimals - issuer properties: code: type: string pattern: '^[A-Z0-9]{1,10}$' address: type: string pattern: '^0x[a-fA-F0-9]{40}$' name: type: string symbol: type: string decimals: type: integer minimum: 0 maximum: 255 issuer: type: string pattern: '^0x[a-fA-F0-9]{40}$' policy: $ref: '#/components/schemas/TokenPolicy' createdAt: type: string format: date-time TokenPolicy: type: object properties: paused: type: boolean bridgeOnly: type: boolean bridge: type: string pattern: '^0x[a-fA-F0-9]{40}$' lienMode: type: string enum: ["OFF", "HARD_FREEZE", "ENCUMBERED"] forceTransferMode: type: boolean routes: type: array items: $ref: '#/components/schemas/Rail' Lien: type: object required: - lienId - debtor - amount - active properties: lienId: type: string debtor: type: string amount: type: string expiry: type: integer priority: type: integer authority: type: string reasonCode: $ref: '#/components/schemas/ReasonCode' active: type: boolean createdAt: type: string format: date-time updatedAt: type: string format: date-time ComplianceProfile: type: object required: - refId - allowed - frozen properties: refId: type: string pattern: '^0x[a-fA-F0-9]{64}$' allowed: type: boolean frozen: type: boolean riskTier: type: integer minimum: 0 maximum: 255 jurisdictionHash: type: string pattern: '^0x[a-fA-F0-9]{64}$' updatedAt: type: string format: date-time Trigger: type: object required: - triggerId - rail - msgType - state - instructionId properties: triggerId: type: string rail: $ref: '#/components/schemas/Rail' msgType: type: string state: $ref: '#/components/schemas/TriggerState' instructionId: type: string endToEndId: type: string payloadHash: type: string amount: type: string token: type: string accountRefId: type: string counterpartyRefId: type: string railTxRef: type: string nullable: true createdAt: type: string format: date-time updatedAt: type: string format: date-time Packet: type: object required: - packetId - payloadHash - channel - status properties: packetId: type: string triggerId: type: string instructionId: type: string payloadHash: type: string channel: type: string enum: ["PDF", "AS4", "EMAIL", "PORTAL"] messageRef: type: string nullable: true status: type: string enum: ["GENERATED", "DISPATCHED", "DELIVERED", "ACKNOWLEDGED", "FAILED"] acknowledgements: type: array items: type: object properties: ackId: type: string receivedAt: type: string format: date-time status: type: string enum: ["RECEIVED", "ACCEPTED", "REJECTED"] createdAt: type: string format: date-time dispatchedAt: type: string format: date-time nullable: true BridgeLock: type: object required: - lockId - token - amount - status properties: lockId: type: string token: type: string amount: type: string from: type: string targetChain: type: string targetRecipient: type: string status: type: string enum: ["LOCKED", "UNLOCKED", "PENDING"] sourceChain: type: string nullable: true sourceTx: type: string nullable: true proof: type: string nullable: true createdAt: type: string format: date-time unlockedAt: type: string format: date-time nullable: true AccountRef: type: object required: - refId properties: refId: type: string provider: type: string enum: ["BANK", "FINTECH", "CUSTODIAN", "OTHER"] metadata: type: object createdAt: type: string format: date-time WalletRef: type: object required: - refId properties: refId: type: string provider: type: string enum: ["WALLETCONNECT", "FIREBLOCKS", "METAMASK", "OTHER"] address: type: string metadata: type: object createdAt: type: string format: date-time # Enums ReasonCode: type: string enum: - OK - PAUSED - FROM_FROZEN - TO_FROZEN - FROM_NOT_COMPLIANT - TO_NOT_COMPLIANT - LIEN_BLOCK - INSUFF_FREE_BAL - BRIDGE_ONLY - NOT_ALLOWED_ROUTE - UNAUTHORIZED - CONFIG_ERROR TriggerState: type: string enum: - CREATED - VALIDATED - SUBMITTED_TO_RAIL - PENDING - SETTLED - REJECTED - CANCELLED - RECALLED Rail: type: string enum: - FEDWIRE - SWIFT - SEPA - RTGS # Request/Response models DeployTokenRequest: type: object required: - name - symbol - decimals - issuer properties: name: type: string symbol: type: string pattern: '^[A-Z0-9]{1,10}$' decimals: type: integer minimum: 0 maximum: 255 issuer: type: string pattern: '^0x[a-fA-F0-9]{40}$' defaultLienMode: type: string enum: ["OFF", "HARD_FREEZE", "ENCUMBERED"] default: "ENCUMBERED" bridgeOnly: type: boolean default: false bridge: type: string pattern: '^0x[a-fA-F0-9]{40}$' UpdatePolicyRequest: type: object properties: paused: type: boolean bridgeOnly: type: boolean bridge: type: string pattern: '^0x[a-fA-F0-9]{40}$' lienMode: type: string enum: ["OFF", "HARD_FREEZE", "ENCUMBERED"] forceTransferMode: type: boolean routes: type: array items: $ref: '#/components/schemas/Rail' MintRequest: type: object required: - to - amount properties: to: type: string pattern: '^0x[a-fA-F0-9]{40}$' amount: type: string reasonCode: $ref: '#/components/schemas/ReasonCode' BurnRequest: type: object required: - from - amount properties: from: type: string pattern: '^0x[a-fA-F0-9]{40}$' amount: type: string reasonCode: $ref: '#/components/schemas/ReasonCode' ClawbackRequest: type: object required: - from - to - amount properties: from: type: string pattern: '^0x[a-fA-F0-9]{40}$' to: type: string pattern: '^0x[a-fA-F0-9]{40}$' amount: type: string reasonCode: $ref: '#/components/schemas/ReasonCode' ForceTransferRequest: type: object required: - from - to - amount properties: from: type: string pattern: '^0x[a-fA-F0-9]{40}$' to: type: string pattern: '^0x[a-fA-F0-9]{40}$' amount: type: string reasonCode: $ref: '#/components/schemas/ReasonCode' PlaceLienRequest: type: object required: - debtor - amount properties: debtor: type: string amount: type: string expiry: type: integer minimum: 0 priority: type: integer minimum: 0 maximum: 255 reasonCode: $ref: '#/components/schemas/ReasonCode' ReduceLienRequest: type: object required: - reduceBy properties: reduceBy: type: string description: Amount to reduce by SetComplianceRequest: type: object required: - allowed properties: allowed: type: boolean riskTier: type: integer minimum: 0 maximum: 255 jurisdictionHash: type: string pattern: '^0x[a-fA-F0-9]{64}$' LinkAccountWalletRequest: type: object required: - accountRefId - walletRefId properties: accountRefId: type: string pattern: '^0x[a-fA-F0-9]{64}$' walletRefId: type: string pattern: '^0x[a-fA-F0-9]{64}$' SubmitInboundMessageRequest: type: object required: - msgType - instructionId - payloadHash - payload properties: msgType: type: string pattern: '^[a-z]+\\.[0-9]{3}$' instructionId: type: string endToEndId: type: string payloadHash: type: string payload: type: string description: ISO-20022 XML payload rail: $ref: '#/components/schemas/Rail' SubmitOutboundMessageRequest: type: object required: - msgType - instructionId - payloadHash - payload - token - amount - accountRefId - counterpartyRefId properties: msgType: type: string pattern: '^[a-z]+\\.[0-9]{3}$' instructionId: type: string endToEndId: type: string payloadHash: type: string payload: type: string description: ISO-20022 XML payload rail: $ref: '#/components/schemas/Rail' token: type: string pattern: '^0x[a-fA-F0-9]{40}$' amount: type: string accountRefId: type: string counterpartyRefId: type: string GeneratePacketRequest: type: object required: - triggerId - channel properties: triggerId: type: string channel: type: string enum: ["PDF", "AS4", "EMAIL", "PORTAL"] options: type: object description: Channel-specific options BridgeLockRequest: type: object required: - token - amount - targetChain - targetRecipient properties: token: type: string pattern: '^0x[a-fA-F0-9]{40}$' amount: type: string targetChain: type: string targetRecipient: type: string pattern: '^0x[a-fA-F0-9]{40}$' BridgeUnlockRequest: type: object required: - lockId - token - to - amount - sourceChain - sourceTx - proof properties: lockId: type: string token: type: string pattern: '^0x[a-fA-F0-9]{40}$' to: type: string pattern: '^0x[a-fA-F0-9]{40}$' amount: type: string sourceChain: type: string sourceTx: type: string proof: type: string description: Light client proof TransactionResponse: type: object properties: txHash: type: string pattern: '^0x[a-fA-F0-9]{64}$' status: type: string enum: ["PENDING", "SUCCESS", "FAILED"] blockNumber: type: integer nullable: true Error: type: object required: - code - message properties: code: type: string message: type: string reasonCode: $ref: '#/components/schemas/ReasonCode' details: type: object requestId: type: string