{ "openapi": "3.1.0", "info": { "title": "Qustody API", "description": "Non-custodial custody and orchestration API for Quantum Chain (post-quantum blockchain).\nProvides Fireblocks-like operating model for institutional integrators:\nmulti-tenant vault/wallet management, transaction lifecycle with policy enforcement,\nexternal (callback-based) signing, webhook-driven event delivery, and full audit trail.\n", "version": "1.0.0", "contact": { "name": "Quantum Chain Platform Team" }, "license": { "name": "LGPL-3.0-or-later" } }, "servers": [ { "url": "{baseUrl}/v1", "description": "Qustody API", "variables": { "baseUrl": { "default": "https://api.qustody.io" } } } ], "tags": [ { "name": "health", "description": "Liveness and readiness probes" }, { "name": "tenants", "description": "Tenant (integrator) management" }, { "name": "vaults", "description": "Vault (logical wallet grouping) management" }, { "name": "wallets", "description": "Wallet (on-chain address) registration and lookup" }, { "name": "transactions", "description": "Transaction lifecycle \u2013 create, sign, approve, reject, query" }, { "name": "assets", "description": "Supported asset registry" }, { "name": "webhooks", "description": "Webhook endpoint management" }, { "name": "sso", "description": "Single Sign-On (OIDC and SAML) authentication" }, { "name": "tokens", "description": "Token Management \u2014 Beta / Proposed." } ], "security": [ { "BearerAPIKey": [] } ], "components": { "securitySchemes": { "BearerAPIKey": { "type": "http", "scheme": "bearer", "description": "API key authentication. Format: `Bearer {key_id}:{secret}`" }, "BearerJWT": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT", "description": "SSO JWT authentication. Obtained via OIDC or SAML login." } }, "schemas": { "Error": { "type": "object", "required": [ "code", "numericCode", "message" ], "properties": { "code": { "type": "string", "example": "INVALID_REQUEST" }, "numericCode": { "type": "integer", "description": "Machine-readable numeric error code (Fireblocks-compatible)", "example": 1100 }, "message": { "type": "string", "example": "missing required field: name" }, "details": { "type": "object" } } }, "PageResponse": { "type": "object", "properties": { "nextCursor": { "type": "string" }, "hasMore": { "type": "boolean" } } }, "Tenant": { "type": "object", "required": [ "id", "name", "status", "createdAt" ], "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "ACTIVE", "DISABLED" ] }, "callbackUrl": { "type": "string", "format": "uri" }, "ipAllowList": { "type": "array", "items": { "type": "string" } }, "metadata": { "type": "object", "additionalProperties": { "type": "string" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "CreateTenantRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "callbackUrl": { "type": "string", "format": "uri" }, "ipAllowList": { "type": "array", "items": { "type": "string" } }, "metadata": { "type": "object", "additionalProperties": { "type": "string" } } } }, "Vault": { "type": "object", "required": [ "id", "tenantId", "name", "status", "createdAt" ], "properties": { "id": { "type": "string", "format": "uuid" }, "tenantId": { "type": "string", "format": "uuid" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "ACTIVE", "ARCHIVED" ] }, "metadata": { "type": "object", "additionalProperties": { "type": "string" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "CreateVaultRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "metadata": { "type": "object", "additionalProperties": { "type": "string" } } } }, "Wallet": { "type": "object", "required": [ "id", "vaultId", "tenantId", "assetId", "address", "status", "createdAt" ], "properties": { "id": { "type": "string", "format": "uuid" }, "vaultId": { "type": "string", "format": "uuid" }, "tenantId": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "address": { "type": "string", "pattern": "^0x[a-fA-F0-9]{40}$" }, "publicKey": { "type": "string", "description": "Hex-encoded post-quantum public key" }, "label": { "type": "string" }, "status": { "type": "string", "enum": [ "ACTIVE", "ARCHIVED" ] }, "createdAt": { "type": "string", "format": "date-time" } } }, "RegisterWalletRequest": { "type": "object", "required": [ "assetId", "address", "publicKey", "signature" ], "properties": { "assetId": { "type": "string", "format": "uuid" }, "address": { "type": "string", "pattern": "^0x[a-fA-F0-9]{40}$" }, "publicKey": { "type": "string", "description": "Hex-encoded post-quantum public key", "minLength": 3904, "maxLength": 3904 }, "signature": { "type": "string", "description": "Hex-encoded post-quantum signature over the ownership challenge: Keccak256('qustody:register:' + lowercase_address). Proves the caller controls the private key for the given address.", "minLength": 6586, "maxLength": 6586 }, "label": { "type": "string" } } }, "VaultAsset": { "type": "object", "required": [ "vaultId", "assetId", "totalBalance", "available" ], "properties": { "vaultId": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "totalBalance": { "type": "string", "description": "Total balance in wei" }, "available": { "type": "string", "description": "Available balance in wei" }, "addresses": { "type": "array", "items": { "type": "object", "properties": { "address": { "type": "string" }, "publicKey": { "type": "string" }, "label": { "type": "string" } } } } } }, "Asset": { "type": "object", "required": [ "id", "symbol", "name", "type", "decimals", "chainId", "status" ], "properties": { "id": { "type": "string", "format": "uuid" }, "symbol": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "NATIVE", "QRC-20" ], "description": "Asset class. `QRC-20` denotes a Quantum Chain fungible token. The legacy value `ERC20` is accepted on input as a deprecated alias and will be removed; new clients must use `QRC-20`." }, "contractAddress": { "type": "string" }, "decimals": { "type": "integer" }, "chainId": { "type": "integer", "format": "int64" }, "status": { "type": "string", "enum": [ "ACTIVE", "DISABLED" ] } } }, "Transaction": { "type": "object", "required": [ "id", "tenantId", "sourceVaultId", "sourceWalletId", "destinationAddr", "assetId", "amount", "status", "createdAt" ], "properties": { "id": { "type": "string", "format": "uuid" }, "tenantId": { "type": "string", "format": "uuid" }, "externalId": { "type": "string" }, "sourceVaultId": { "type": "string", "format": "uuid" }, "sourceWalletId": { "type": "string", "format": "uuid" }, "destinationAddr": { "type": "string" }, "assetId": { "type": "string", "format": "uuid" }, "amount": { "type": "string", "description": "Wei-denominated amount as string" }, "fee": { "type": "string" }, "gasLimit": { "type": "integer", "format": "uint64" }, "nonce": { "type": "integer", "format": "uint64" }, "status": { "type": "string", "enum": [ "SUBMITTED", "QUEUED", "PENDING_AML_SCREENING", "PENDING_AUTHORIZATION", "APPROVED", "REJECTED", "PENDING_SIGNATURE", "SIGNED", "BROADCASTING", "CONFIRMING", "COMPLETED", "FAILED", "CANCELLED", "BLOCKED" ] }, "failureReason": { "type": "string" }, "chainTxHash": { "type": "string" }, "blockNumber": { "type": "integer", "format": "uint64" }, "confirmations": { "type": "integer", "format": "uint64" }, "note": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": { "type": "string" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "broadcastAt": { "type": "string", "format": "date-time" }, "confirmedAt": { "type": "string", "format": "date-time" } } }, "CreateTransferRequest": { "type": "object", "required": [ "sourceWalletId", "destinationAddr", "assetId", "amount" ], "properties": { "sourceWalletId": { "type": "string", "format": "uuid" }, "destinationAddr": { "type": "string", "pattern": "^0x[a-fA-F0-9]{40}$" }, "assetId": { "type": "string", "format": "uuid" }, "amount": { "type": "string", "description": "Wei-denominated amount as string" }, "externalId": { "type": "string", "description": "Client-provided idempotency/correlation ID" }, "note": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": { "type": "string" } } } }, "SigningPayload": { "type": "object", "required": [ "transactionId", "signingHash", "status" ], "properties": { "transactionId": { "type": "string", "format": "uuid" }, "signingHash": { "type": "string", "description": "Hex-encoded 32-byte Keccak256 digest to sign with your post-quantum key" }, "status": { "type": "string" }, "sourceAddress": { "type": "string" }, "destinationAddress": { "type": "string" }, "amount": { "type": "string" }, "assetId": { "type": "string", "format": "uuid" } } }, "SubmitSignatureRequest": { "type": "object", "required": [ "signature", "publicKey" ], "properties": { "signature": { "type": "string", "description": "Hex-encoded post-quantum signature" }, "publicKey": { "type": "string", "description": "Hex-encoded post-quantum public key" } } }, "Balance": { "type": "object", "required": [ "walletId", "assetId", "balance", "blockNumber" ], "properties": { "walletId": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "balance": { "type": "string", "description": "Wei-denominated balance as string" }, "blockNumber": { "type": "integer", "format": "uint64" } } }, "WebhookEndpoint": { "type": "object", "required": [ "id", "tenantId", "url", "status", "createdAt" ], "properties": { "id": { "type": "string", "format": "uuid" }, "tenantId": { "type": "string", "format": "uuid" }, "url": { "type": "string", "format": "uri" }, "events": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string", "enum": [ "ACTIVE", "DISABLED" ] }, "secret": { "type": "string", "description": "Only returned on creation" }, "createdAt": { "type": "string", "format": "date-time" } } }, "CreateWebhookRequest": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri" }, "events": { "type": "array", "items": { "type": "string" }, "description": "Event types to subscribe to (empty = all)" } } }, "WebhookEvent": { "type": "object", "required": [ "id", "type", "tenantId", "timestamp", "data" ], "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "transaction.created", "transaction.status_changed", "transaction.completed", "transaction.failed", "deposit.detected", "deposit.confirmed", "approval.required", "approval.decision" ] }, "tenantId": { "type": "string", "format": "uuid" }, "timestamp": { "type": "string", "format": "date-time" }, "data": { "type": "object" } } }, "TokenStandard": { "type": "object", "description": "A QRC token standard supported by Qustody. **Beta / Proposed.**", "properties": { "standard": { "type": "string", "enum": [ "QRC-20", "QRC-721", "QRC-1155", "QRC-1400", "QRC-3643", "QRC-4626", "QRC-3525" ] }, "title": { "type": "string" }, "description": { "type": "string" }, "supportsMint": { "type": "boolean" }, "supportsBurn": { "type": "boolean" }, "supportsRoles": { "type": "boolean" }, "supportsPause": { "type": "boolean" }, "supportsFreeze": { "type": "boolean" }, "supportsCompliance": { "type": "boolean" }, "supportsAllowlist": { "type": "boolean" }, "implementationStatus": { "type": "string", "enum": [ "IMPLEMENTED", "PROPOSED" ] } } }, "TokenTemplate": { "type": "object", "description": "A reviewed contract template. **Beta / Proposed.**", "properties": { "id": { "type": "string" }, "standard": { "$ref": "#/components/schemas/TokenStandard" }, "name": { "type": "string" }, "version": { "type": "string" }, "description": { "type": "string" }, "auditedBy": { "type": "string", "nullable": true }, "supportedChains": { "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string", "format": "date-time" } } }, "TokenSupplyPolicy": { "type": "object", "properties": { "mintable": { "type": "boolean" }, "burnable": { "type": "boolean" }, "maxSupply": { "type": "string", "description": "Decimal string in base units. Omit for uncapped." } } }, "TokenAdmin": { "type": "object", "required": [ "vaultAccountId" ], "properties": { "vaultAccountId": { "type": "string" }, "approvalPolicyId": { "type": "string" } } }, "TokenComplianceConfig": { "type": "object", "description": "Compliance and permissioned-transfer configuration.", "properties": { "permissionedTransfers": { "type": "boolean" }, "investorEligibilityProvider": { "type": "string" }, "jurisdictionFlags": { "type": "array", "items": { "type": "string" } }, "transferRestrictions": { "type": "object", "additionalProperties": true } } }, "Token": { "type": "object", "description": "A Qustody-managed token. **Beta / Proposed.**", "properties": { "id": { "type": "string" }, "standard": { "type": "string" }, "templateId": { "type": "string" }, "name": { "type": "string" }, "symbol": { "type": "string" }, "decimals": { "type": "integer" }, "network": { "type": "string" }, "contractAddress": { "type": "string", "nullable": true }, "status": { "type": "string", "enum": [ "DRAFT", "DEPLOYING", "DEPLOYED", "PAUSED", "RETIRED", "FAILED" ] }, "supplyPolicy": { "$ref": "#/components/schemas/TokenSupplyPolicy" }, "admin": { "$ref": "#/components/schemas/TokenAdmin" }, "complianceConfig": { "$ref": "#/components/schemas/TokenComplianceConfig" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "CreateTokenRequest": { "type": "object", "required": [ "standard", "name", "symbol", "decimals", "admin" ], "properties": { "standard": { "type": "string" }, "templateId": { "type": "string" }, "name": { "type": "string" }, "symbol": { "type": "string" }, "decimals": { "type": "integer" }, "initialSupply": { "type": "string" }, "supplyPolicy": { "$ref": "#/components/schemas/TokenSupplyPolicy" }, "admin": { "$ref": "#/components/schemas/TokenAdmin" }, "complianceConfig": { "$ref": "#/components/schemas/TokenComplianceConfig" }, "network": { "type": "string" } } }, "TokenDeployment": { "type": "object", "properties": { "tokenId": { "type": "string" }, "operationId": { "type": "string" }, "transactionRequestId": { "type": "string" }, "status": { "type": "string", "description": "Inherits the transaction state machine." }, "contractAddress": { "type": "string", "nullable": true }, "transactionHash": { "type": "string", "nullable": true }, "blockNumber": { "type": "integer", "nullable": true } } }, "DeployTokenRequest": { "type": "object", "required": [ "deployerWalletId" ], "properties": { "deployerWalletId": { "type": "string" }, "constructorArgs": { "type": "object", "additionalProperties": true }, "feeStrategy": { "type": "string", "enum": [ "LOW", "MEDIUM", "HIGH" ] } } }, "MintTokenRequest": { "type": "object", "required": [ "amount", "recipient" ], "properties": { "amount": { "type": "string" }, "recipient": { "type": "object", "additionalProperties": true }, "feeStrategy": { "type": "string", "enum": [ "LOW", "MEDIUM", "HIGH" ] } } }, "BurnTokenRequest": { "type": "object", "required": [ "amount", "from" ], "properties": { "amount": { "type": "string" }, "from": { "type": "object", "additionalProperties": true }, "feeStrategy": { "type": "string", "enum": [ "LOW", "MEDIUM", "HIGH" ] } } }, "TokenTransferRequest": { "type": "object", "required": [ "amount", "from", "to" ], "properties": { "amount": { "type": "string" }, "from": { "type": "object", "additionalProperties": true }, "to": { "type": "object", "additionalProperties": true }, "feeStrategy": { "type": "string", "enum": [ "LOW", "MEDIUM", "HIGH" ] } } }, "TokenRoleChangeRequest": { "type": "object", "required": [ "role", "subject" ], "properties": { "role": { "type": "string", "enum": [ "MINTER", "BURNER", "PAUSER", "FREEZER", "COMPLIANCE_OPERATOR", "OWNER" ] }, "subject": { "type": "object", "additionalProperties": true } } }, "TokenOperation": { "type": "object", "properties": { "id": { "type": "string" }, "tokenId": { "type": "string" }, "operationType": { "type": "string", "enum": [ "CREATE_TOKEN", "DEPLOY_TOKEN", "MINT", "BURN", "TRANSFER", "GRANT_ROLE", "REVOKE_ROLE", "PAUSE", "UNPAUSE", "FREEZE", "UNFREEZE", "UPDATE_COMPLIANCE", "ALLOWLIST_ADD", "ALLOWLIST_REMOVE" ] }, "status": { "type": "string", "description": "Inherits the transaction state machine." }, "transactionRequestId": { "type": "string", "nullable": true }, "transactionHash": { "type": "string", "nullable": true }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "data": { "type": "object", "additionalProperties": true } } } }, "parameters": { "cursor": { "name": "cursor", "in": "query", "schema": { "type": "string" }, "description": "Cursor for keyset pagination" }, "limit": { "name": "limit", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 50 } }, "idempotencyKey": { "name": "Idempotency-Key", "in": "header", "schema": { "type": "string" }, "description": "Idempotency key for safe retries (required for POST/PUT)" } } }, "paths": { "/healthz": { "get": { "operationId": "healthLive", "tags": [ "health" ], "summary": "Liveness probe", "security": [], "responses": { "200": { "description": "Service is alive", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string", "example": "ok" } } } } } } } } }, "/readyz": { "get": { "operationId": "healthReady", "tags": [ "health" ], "summary": "Readiness probe", "security": [], "responses": { "200": { "description": "Service is ready" }, "503": { "description": "Service is not ready" } } } }, "/tenants": { "post": { "operationId": "createTenant", "tags": [ "tenants" ], "summary": "Create a new tenant", "parameters": [ { "$ref": "#/components/parameters/idempotencyKey" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTenantRequest" } } } }, "responses": { "201": { "description": "Tenant created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Tenant" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } }, "get": { "operationId": "listTenants", "tags": [ "tenants" ], "summary": "List tenants", "parameters": [ { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/limit" } ], "responses": { "200": { "description": "Tenant list", "content": { "application/json": { "schema": { "type": "object", "properties": { "tenants": { "type": "array", "items": { "$ref": "#/components/schemas/Tenant" } }, "page": { "$ref": "#/components/schemas/PageResponse" } } } } } } } } }, "/tenants/{id}": { "get": { "operationId": "getTenant", "tags": [ "tenants" ], "summary": "Get tenant by ID", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Tenant details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Tenant" } } } }, "404": { "description": "Tenant not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/vault/accounts": { "post": { "operationId": "createVault", "tags": [ "vaults" ], "summary": "Create a vault", "parameters": [ { "$ref": "#/components/parameters/idempotencyKey" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateVaultRequest" } } } }, "responses": { "201": { "description": "Vault created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Vault" } } } } } }, "get": { "operationId": "listVaults", "tags": [ "vaults" ], "summary": "List vaults for authenticated tenant", "parameters": [ { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/limit" } ], "responses": { "200": { "description": "Vault list", "content": { "application/json": { "schema": { "type": "object", "properties": { "vaults": { "type": "array", "items": { "$ref": "#/components/schemas/Vault" } }, "page": { "$ref": "#/components/schemas/PageResponse" } } } } } } } } }, "/vault/accounts/{vaultAccountId}": { "get": { "operationId": "getVault", "tags": [ "vaults" ], "summary": "Get vault by ID", "parameters": [ { "name": "vaultAccountId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Vault details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Vault" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/vault/accounts/{vaultAccountId}/wallets": { "post": { "operationId": "registerWallet", "tags": [ "wallets" ], "summary": "Register an external wallet address", "description": "Non-custodial wallet registration. The caller provides the on-chain address,\nthe post-quantum public key, and a signature proving ownership. The custody\nservice verifies that the public key matches the address and that the signature\nis valid over the deterministic challenge Keccak256('qustody:register:' + address).\nThe custody service never holds private keys.\n", "parameters": [ { "name": "vaultAccountId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/idempotencyKey" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterWalletRequest" } } } }, "responses": { "201": { "description": "Wallet registered", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Wallet" } } } } } }, "get": { "operationId": "listWalletsByVault", "tags": [ "wallets" ], "summary": "List wallets in a vault", "parameters": [ { "name": "vaultAccountId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/limit" } ], "responses": { "200": { "description": "Wallet list", "content": { "application/json": { "schema": { "type": "object", "properties": { "wallets": { "type": "array", "items": { "$ref": "#/components/schemas/Wallet" } }, "page": { "$ref": "#/components/schemas/PageResponse" } } } } } } } } }, "/wallets/{id}": { "get": { "operationId": "getWallet", "tags": [ "wallets" ], "summary": "Get wallet by ID", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Wallet details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Wallet" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/wallets/{walletId}/balance": { "get": { "operationId": "getBalance", "tags": [ "wallets" ], "summary": "Get on-chain balance for a wallet", "parameters": [ { "name": "walletId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Current balance", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Balance" } } } } } } }, "/transactions": { "post": { "operationId": "createTransfer", "tags": [ "transactions" ], "summary": "Create a new transfer", "description": "Initiates a transfer through the custody lifecycle. The transaction\npasses through policy evaluation and, if approved, enters the\nPENDING_SIGNATURE state. The signing payload must be retrieved\nand signed externally using your post-quantum key.\n", "parameters": [ { "$ref": "#/components/parameters/idempotencyKey" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTransferRequest" } } } }, "responses": { "201": { "description": "Transaction created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transaction" } } } } } }, "get": { "operationId": "listTransactions", "tags": [ "transactions" ], "summary": "List transactions for authenticated tenant", "parameters": [ { "$ref": "#/components/parameters/cursor" }, { "$ref": "#/components/parameters/limit" }, { "name": "status", "in": "query", "schema": { "type": "string" } }, { "name": "vaultId", "in": "query", "schema": { "type": "string", "format": "uuid" } }, { "name": "walletId", "in": "query", "schema": { "type": "string", "format": "uuid" } }, { "name": "assetId", "in": "query", "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Transaction list", "content": { "application/json": { "schema": { "type": "object", "properties": { "transactions": { "type": "array", "items": { "$ref": "#/components/schemas/Transaction" } }, "page": { "$ref": "#/components/schemas/PageResponse" } } } } } } } } }, "/transactions/{id}": { "get": { "operationId": "getTransaction", "tags": [ "transactions" ], "summary": "Get transaction by ID", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Transaction details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transaction" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/transactions/{id}/signing_payload": { "get": { "operationId": "getSigningPayload", "tags": [ "transactions" ], "summary": "Retrieve the signing payload for external signing", "description": "Returns the Keccak256 hash that must be signed with your post-quantum key.\nOnly available when the transaction is in PENDING_SIGNATURE state.\n", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Signing payload", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SigningPayload" } } } }, "409": { "description": "Transaction not in signable state", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/transactions/{id}/signature": { "post": { "operationId": "submitSignature", "tags": [ "transactions" ], "summary": "Submit a post-quantum signature for the transaction", "description": "After signing the payload externally, submit the signature and\npublic key. The service validates the signature, assembles the\nsigned transaction, and broadcasts it to the Quantum Chain network.\n", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SubmitSignatureRequest" } } } }, "responses": { "200": { "description": "Signature accepted, transaction broadcasting", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transaction" } } } }, "400": { "description": "Invalid signature", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "409": { "description": "Transaction not in signable state", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/transactions/{id}/approve": { "post": { "operationId": "approveTransaction", "tags": [ "transactions" ], "summary": "Approve a transaction pending approval", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "reason": { "type": "string" } } } } } }, "responses": { "200": { "description": "Transaction approved", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transaction" } } } }, "409": { "description": "Not in approval state", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/transactions/{id}/reject": { "post": { "operationId": "rejectTransaction", "tags": [ "transactions" ], "summary": "Reject a transaction pending approval", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "reason": { "type": "string" } } } } } }, "responses": { "200": { "description": "Transaction rejected", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transaction" } } } }, "409": { "description": "Not in approval state", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/transactions/{id}/cancel": { "post": { "operationId": "cancelTransaction", "tags": [ "transactions" ], "summary": "Cancel a transaction that has not been broadcast", "description": "Cancels a transaction in SUBMITTED, PENDING_AUTHORIZATION,\nAPPROVED, or PENDING_SIGNATURE state. Once a transaction has\nbeen broadcast it cannot be cancelled.\n", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Transaction cancelled", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Transaction" } } } }, "409": { "description": "Transaction cannot be cancelled", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/vault/accounts/{vaultAccountId}/assets": { "get": { "operationId": "listVaultAssets", "tags": [ "vaults" ], "summary": "List assets in a vault account", "description": "Returns the asset breakdown for a vault account, aggregating\nwallets by asset with balance summaries.\n", "parameters": [ { "name": "vaultAccountId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Vault asset list", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/VaultAsset" } } } } } } } } } }, "/vault/accounts/{vaultAccountId}/assets/{assetId}": { "get": { "operationId": "getVaultAsset", "tags": [ "vaults" ], "summary": "Get a specific asset within a vault account", "parameters": [ { "name": "vaultAccountId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "assetId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Vault asset details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VaultAsset" } } } }, "404": { "description": "Asset not found in vault", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/assets": { "get": { "operationId": "listAssets", "tags": [ "assets" ], "summary": "List supported assets", "responses": { "200": { "description": "Asset list", "content": { "application/json": { "schema": { "type": "object", "properties": { "assets": { "type": "array", "items": { "$ref": "#/components/schemas/Asset" } } } } } } } } } }, "/assets/{id}": { "get": { "operationId": "getAsset", "tags": [ "assets" ], "summary": "Get asset by ID", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "200": { "description": "Asset details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Asset" } } } } } } }, "/webhooks": { "post": { "operationId": "createWebhook", "tags": [ "webhooks" ], "summary": "Register a webhook endpoint", "description": "Registers a URL to receive webhook events. The HMAC signing secret\nis returned only in the creation response \u2014 store it securely.\nPayloads are signed with HMAC-SHA256 and delivered in the\nX-Webhook-Signature header.\n", "parameters": [ { "$ref": "#/components/parameters/idempotencyKey" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWebhookRequest" } } } }, "responses": { "201": { "description": "Webhook endpoint created (includes secret)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookEndpoint" } } } } } }, "get": { "operationId": "listWebhooks", "tags": [ "webhooks" ], "summary": "List webhook endpoints for authenticated tenant", "responses": { "200": { "description": "Webhook endpoint list", "content": { "application/json": { "schema": { "type": "object", "properties": { "endpoints": { "type": "array", "items": { "$ref": "#/components/schemas/WebhookEndpoint" } } } } } } } } } }, "/webhooks/{id}": { "delete": { "operationId": "deleteWebhook", "tags": [ "webhooks" ], "summary": "Delete a webhook endpoint", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "204": { "description": "Webhook endpoint deleted" }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/auth/saml/metadata": { "get": { "operationId": "samlMetadata", "tags": [ "sso" ], "summary": "SAML SP metadata XML", "security": [], "responses": { "200": { "description": "SAML SP metadata", "content": { "application/xml": { "schema": { "type": "string" } } } } } } }, "/auth/saml/acs": { "post": { "operationId": "samlACS", "tags": [ "sso" ], "summary": "SAML Assertion Consumer Service", "description": "Receives a SAML Response from the IdP, validates the assertion, provisions the user if needed, and returns JWT tokens.", "security": [], "requestBody": { "required": true, "content": { "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "SAMLResponse" ], "properties": { "SAMLResponse": { "type": "string", "description": "Base64-encoded SAML Response from IdP" }, "RelayState": { "type": "string", "description": "Optional relay state (tenant ID override)" } } } } } }, "responses": { "200": { "description": "Authentication successful", "content": { "application/json": { "schema": { "type": "object", "required": [ "accessToken", "refreshToken", "expiresAt", "userId" ], "properties": { "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "expiresAt": { "type": "string", "format": "date-time" }, "userId": { "type": "string", "format": "uuid" } } } } } }, "400": { "description": "Invalid SAML response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "429": { "description": "Too many failed authentication attempts", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/auth/oidc/login": { "get": { "operationId": "oidcLogin", "tags": [ "sso" ], "summary": "Initiate OIDC login flow", "description": "Redirects the user to the configured OIDC provider for authentication.", "security": [], "parameters": [ { "name": "tenant_id", "in": "query", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "responses": { "302": { "description": "Redirect to OIDC provider" } } } }, "/auth/oidc/callback": { "get": { "operationId": "oidcCallback", "tags": [ "sso" ], "summary": "OIDC callback", "description": "Receives the OIDC authorization code, exchanges it for tokens, and returns JWT credentials.", "security": [], "parameters": [ { "name": "code", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "state", "in": "query", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Authentication successful", "content": { "application/json": { "schema": { "type": "object", "required": [ "accessToken", "refreshToken", "expiresAt", "userId" ], "properties": { "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "expiresAt": { "type": "string", "format": "date-time" }, "userId": { "type": "string", "format": "uuid" } } } } } }, "400": { "description": "Invalid callback parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "429": { "description": "Too many failed authentication attempts", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/token-standards": { "get": { "tags": [ "tokens" ], "summary": "List token standards", "x-status": "proposed", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageResponse" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/token-standards/{standard}": { "get": { "tags": [ "tokens" ], "summary": "Get token standard", "x-status": "proposed", "parameters": [ { "name": "standard", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenStandard" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/token-templates": { "get": { "tags": [ "tokens" ], "summary": "List token templates", "x-status": "proposed", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageResponse" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/token-templates/{templateId}": { "get": { "tags": [ "tokens" ], "summary": "Get token template", "x-status": "proposed", "parameters": [ { "name": "templateId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenTemplate" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens": { "post": { "tags": [ "tokens" ], "summary": "Create a token configuration", "x-status": "proposed", "parameters": [ { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTokenRequest" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Token" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } }, "get": { "tags": [ "tokens" ], "summary": "List tokens", "x-status": "proposed", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageResponse" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}": { "get": { "tags": [ "tokens" ], "summary": "Get token", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Token" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } }, "patch": { "tags": [ "tokens" ], "summary": "Update token configuration", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTokenRequest" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Token" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/deployment/estimate": { "post": { "tags": [ "tokens" ], "summary": "Estimate token deployment", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeployTokenRequest" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenDeployment" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/deploy": { "post": { "tags": [ "tokens" ], "summary": "Deploy token", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeployTokenRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenDeployment" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/deployment": { "get": { "tags": [ "tokens" ], "summary": "Get token deployment status", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenDeployment" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/mint": { "post": { "tags": [ "tokens" ], "summary": "Mint tokens", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MintTokenRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/burn": { "post": { "tags": [ "tokens" ], "summary": "Burn tokens", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BurnTokenRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/transfers": { "post": { "tags": [ "tokens" ], "summary": "Transfer tokens (typed wrapper)", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenTransferRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/roles": { "get": { "tags": [ "tokens" ], "summary": "List on-chain token roles", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageResponse" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/roles/grant": { "post": { "tags": [ "tokens" ], "summary": "Grant role", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenRoleChangeRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/roles/revoke": { "post": { "tags": [ "tokens" ], "summary": "Revoke role", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenRoleChangeRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/pause": { "post": { "tags": [ "tokens" ], "summary": "Pause token", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/unpause": { "post": { "tags": [ "tokens" ], "summary": "Unpause token", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/freeze": { "post": { "tags": [ "tokens" ], "summary": "Freeze address", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenRoleChangeRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/unfreeze": { "post": { "tags": [ "tokens" ], "summary": "Unfreeze address", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenRoleChangeRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/compliance": { "get": { "tags": [ "tokens" ], "summary": "Get token compliance config", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenComplianceConfig" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } }, "patch": { "tags": [ "tokens" ], "summary": "Update token compliance config", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenComplianceConfig" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/allowlist": { "get": { "tags": [ "tokens" ], "summary": "List allowlist entries", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageResponse" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } }, "post": { "tags": [ "tokens" ], "summary": "Add allowlist entry", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "Idempotency-Key", "in": "header", "required": true, "schema": { "type": "string" }, "description": "Required for any mutating token operation." } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tokens/{id}/allowlist/{address}": { "delete": { "tags": [ "tokens" ], "summary": "Remove allowlist entry", "x-status": "proposed", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "address", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/token-operations": { "get": { "tags": [ "tokens" ], "summary": "List token operations", "x-status": "proposed", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PageResponse" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/token-operations/{operationId}": { "get": { "tags": [ "tokens" ], "summary": "Get token operation", "x-status": "proposed", "parameters": [ { "name": "operationId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenOperation" } } } }, "default": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } } } }