{"openapi":"3.1.0","info":{"version":"2.0.325","title":"DFNS API","description":"The DFNS API: wallets, keys, transfers, transactions, policies, permissions, webhooks and more. Mirrored from https://docs.dfns.co/openapi.yaml, which is the source of truth. Authentication and User Action Signing: https://docs.dfns.co/api-reference/auth/index.","contact":{"name":"DFNS Support","url":"https://support.dfns.co"}},"servers":[{"url":"https://api.dfns.io","description":"Default - Europe"},{"url":"https://api.uae.dfns.io","description":"UAE"},{"url":"https://api.dfns.ninja","description":"<Deprecated> Staging"}],"components":{"securitySchemes":{"authenticationToken":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"**Bearer Token:** Used to authenticate API requests.\nMore details how to generate the token: [Authentication flows](https://docs.dfns.co/api-reference/auth/login-flows)"},"userActionSignature":{"type":"apiKey","in":"header","name":"X-DFNS-USERACTION","description":"**User Action Signature:** Used to sign the change-inducing API requests.\nMore details how to generate the token: [User Action Signing flows](https://docs.dfns.co/api-reference/auth/signing-flows)"}},"schemas":{"WebhookEnvelopeBase":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^whe-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Unique identifier for this webhook event.","example":"whe-544ul-uqgad-jkgltj5p6fvd04cj"},"date":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Timestamp when the event occurred.","example":"2023-04-14T20:41:28.715Z"},"retryOf":{"type":"string","minLength":1,"maxLength":64,"pattern":"^whe-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the original event if this is a retry.","example":"whe-544ul-uqgad-jkgltj5p6fvd04cj"},"timestampSent":{"type":"integer","description":"Unix timestamp when the event was sent","example":1719566994},"deliveryAttempt":{"type":"integer","minimum":1,"description":"Delivery attempt number","example":1}},"required":["id","date","timestampSent","deliveryAttempt"]},"AddressWatchNetwork":{"type":"string","description":"Network the address is watched on.","title":"Network","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bob","BobSepolia","Bsc","BscTestnet","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]},"AddressWatch":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the address watch.","example":"aw-0pbh4-7sdh4-2occ0e4r1g7obe8c"},"network":{"$ref":"#/components/schemas/AddressWatchNetwork"},"address":{"type":"string","description":"The watched on chain address."},"name":{"type":"string","maxLength":100,"description":"Address watch nickname."},"externalId":{"type":"string","maxLength":100,"description":"User-defined value that can be used to correlate the entity with an external system."},"status":{"type":"string","enum":["Active","Archived"],"description":"Address watch status."},"dateCreated":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when the address watch was created.","example":"2026-07-03T20:41:28.715Z"},"dateDeleted":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when the address watch was archived.","example":"2026-07-03T20:41:28.715Z"}},"required":["id","network","address","status","dateCreated"],"additionalProperties":false,"example":{"id":"aw-3f9b2-8k4m1-xxxxxxxxxxxxxxxx","network":"Ethereum","address":"0x00e3495cf6af59008f22ffaf32d4c92ac33dac47","name":"exchange-hot-wallet","status":"Active","dateCreated":"2026-07-03T20:41:28.715Z"}},"AddressWatchBlockchainEvent":{"type":"object","properties":{"id":{"type":"string","description":"Deterministic event id, safe to deduplicate on."},"addressWatchId":{"type":"string"},"network":{"$ref":"#/components/schemas/AddressWatchNetwork"},"name":{"type":"string","description":"Decoded event name."},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string","description":"Block scoped log index of the event, as a decimal string."},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"],"description":"Webhooks are emitted only once Confirmed; the list can contain Included events on networks with unfinalized indexing."},"data":{"type":"object","additionalProperties":{},"description":"Decoded event fields, the emitting contract included."}},"required":["id","addressWatchId","network","name","blockNumber","txHash","index","timestamp","status","data"],"example":{"id":"ce-2c5o1-eaqqp-xxxxxxxxxxxxxxxx","addressWatchId":"aw-1f04s-lqc9q-xxxxxxxxxxxxxxxx","network":"Ethereum","name":"OrderSettled","blockNumber":19036906,"txHash":"0x8e88793607610a83798eb5ec6dde861f3e459c7e4a22e78b0d2e675b86d0d1e7","index":"134","timestamp":"2026-01-18T23:03:59.000Z","status":"Confirmed","data":{"contract":"0x11a4a5aa04d840f0c692ba297dd60c2871ad0b56","orderId":"0x0102030405060708090a0b0c0d0e0f10","amount":"1000","currency":"EUR"}}},"Network":{"type":"string","title":"Network","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"]},"AddressWatchHistoryEvent":{"oneOf":[{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["NativeTransfer"]},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"liquidityPool":{"type":"string"},"balanceId":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","value","symbol","decimals","addressWatchId"],"title":"Native Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Aip21Transfer"]},"metadataAddress":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","metadataAddress","from","to","value","addressWatchId"],"title":"Aptos Fungible Asset (AIP-21) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["AsaTransfer"]},"assetId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"optIn":{"type":"boolean"},"optOut":{"type":"boolean"},"clawback":{"type":"boolean"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","assetId","from","to","value","addressWatchId"],"title":"Algorand Standard Asset Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["AssetTransfer"]},"assetId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","assetId","value","addressWatchId"],"title":"Cardano Asset Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Cip56Transfer"]},"instrumentId":{"type":"string"},"instrumentAdmin":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","instrumentId","instrumentAdmin","from","to","value","addressWatchId"],"title":"Canton Standard Token (CIP-56) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["CoinTransfer"]},"coin":{"type":"string"},"from":{"type":"string"},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","coin","from","value","addressWatchId"],"title":"Sui Coin Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Cis2Transfer"]},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"tokenAddress":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","value","tokenAddress","addressWatchId"],"title":"Concordium CIS2 Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Cis7Transfer"]},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"tokenId":{"type":"string"},"memo":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","value","tokenId","addressWatchId"],"title":"Concordium CIS7 Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Erc20Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","decimals","addressWatchId"],"title":"EVM Fungible Token (ERC-20) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Erc721Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId","addressWatchId"],"title":"EVM Non Fungible Token (ERC-721) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Erc7984Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","decimals","addressWatchId"],"title":"EVM Confidential Token (ERC-7984) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["HederaErc20Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"},"evmTxHash":{"type":"string","description":"EVM keccak256 hash of the HIP-410 inner tx. Absent on legacy-migrated rows."},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","decimals","addressWatchId"],"title":"Hedera EVM Fungible Token (ERC-20) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["HederaErc721Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"},"evmTxHash":{"type":"string","description":"EVM keccak256 hash of the HIP-410 inner tx. Absent on legacy-migrated rows."},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId","addressWatchId"],"title":"Hedera EVM Non Fungible Token (ERC-721) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Hip17Transfer"]},"tokenId":{"type":"string"},"serialNumber":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","tokenId","serialNumber","addressWatchId"],"title":"HIP17 Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["HtsTransfer"]},"tokenId":{"type":"string"},"froms":{"type":"array","items":{"type":"string"}},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"},"evmTxHash":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","froms","tos","value","addressWatchId"],"title":"HTS Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["IouTransfer"]},"currency":{"type":"string"},"issuer":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","currency","issuer","value","addressWatchId"],"title":"XRPL IOU Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["LockedCoinTransfer"]},"coin":{"type":"string"},"from":{"type":"string"},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","coin","from","value","addressWatchId"],"title":"Locked Coin Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Xls33Transfer"]},"issuanceId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","issuanceId","value","addressWatchId"],"title":"XRPL XLS-33 Token Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Sep41Transfer"]},"issuer":{"type":"string"},"assetCode":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"liquidityPool":{"type":"string"},"balanceId":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","issuer","assetCode","from","to","value","addressWatchId"],"title":"Stellar Classic Assets (SEP-41) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Snip2Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","addressWatchId"],"title":"Snip2 Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Snip3Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId","addressWatchId"],"title":"Snip3 Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["SplTransfer","Spl2022Transfer"]},"from":{"type":"string"},"to":{"type":"string"},"mint":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","mint","value","addressWatchId"],"title":"Solana Program Library Token (SPL and SPL 2022) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Tep74Transfer"]},"master":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","master","from","value","addressWatchId"],"title":"TON Jetton (TEP-74) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Trc10Transfer"]},"tokenId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","tokenId","from","to","value","addressWatchId"],"title":"TRON Native Fungible Token (TRC-10) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Trc20Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","addressWatchId"],"title":"TRON Smart Contract Fungible Token (TRC-20) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Trc721Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId","addressWatchId"],"title":"TRON Non Fungible Token (TRC-721) Transfer"},{"type":"object","properties":{"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["UtxoTransfer"]},"assetId":{"type":"string","description":"Only set for Cardano asset transfers."},"froms":{"type":"array","items":{"type":"string"}},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"},"outputs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"address":{"type":"string"},"value":{"type":"string"}},"required":["index","address","value"]},"description":"Outbound transfers only: per-recipient outputs of the transaction, change excluded."},"addressWatchId":{"type":"string"}},"required":["direction","network","blockNumber","txHash","timestamp","status","metadata","kind","froms","tos","value","addressWatchId"],"title":"UTXO Transfer"}],"example":{"kind":"Erc20Transfer","addressWatchId":"aw-3f9b2-8k4m1-xxxxxxxxxxxxxxxx","network":"Ethereum","direction":"In","blockNumber":19036906,"timestamp":"2026-07-03T23:03:59.000Z","status":"Confirmed","txHash":"0x8e88793607610a83798eb5ec6dde861f3e459c7e4a22e78b0d2e675b86d0d1e7","index":"134","contract":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","from":"0xea09cf8a006493566f8a8fd3d0b32ebff5939d6a","to":"0xc42754e6f79f15082613b2b4ebead83dcf8116b6","value":"1000000","decimals":6,"fee":"1542993669053672","metadata":{"asset":{"symbol":"USDC","decimals":6,"verified":true},"fee":{"symbol":"ETH","decimals":18,"verified":true}}}},"Agreement":{"type":["object","null"],"properties":{"id":{"type":"string","description":"ID of the agreement."},"agreementUrl":{"type":"string","description":"URL where the full agreement document can be viewed."},"details":{"type":"string","description":"Details of the agreement."},"agreementType":{"type":"string","enum":["PrivacyPolicy","TermsAndConditions","UniswapTermsOfService","UniswapPrivacyPolicy"],"description":"Type of the agreement."}},"required":["id","details","agreementType"],"additionalProperties":false,"description":"Latest unaccepted agreement, or `null` if none."},"Allocation":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^allctn-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Unique identifier for the allocation investment.","example":"allctn-7mnn0-rltpq-9bvps60gjm09td0j"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["0fns","SkySusds","GauntletUsdcPrime","SteakhouseUsdt","GauntletUsdcPrimeBase","SteakhouseUsdcBase","SentoraPyusdMain"],"description":"The DeFi protocol used for allocation generation. See [Create Allocation](https://docs.dfns.co/api-reference/allocations/create-allocation) for each protocol's provider, deposit asset, and network."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation."},"amount":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}],"description":"The total amount currently invested in this allocation."},"rewards":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}],"description":"The total rewards earned so far in this allocation."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date. When the allocation was created.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","walletId","protocol","amount","rewards","dateCreated"],"description":"A allocation investment representing funds deposited to earn interest from a DeFi protocol.","example":{"id":"allctn-6a3ku-bn8d7-8u5rs1oukojms7k8","walletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","protocol":"0fns","provider":"M0","amount":{"kind":"Erc20","contract":"0x0A7660979A67E4bC51E750C628C8479ff9F458aE","amount":"1000000000","metadata":{"network":"EthereumSepolia","name":"0fns","symbol":"0fnsSepolia","decimals":6,"tid":"erc20:0x0A7660979A67E4bC51E750C628C8479ff9F458aE"}},"rewards":{"kind":"Erc20","contract":"0x0A7660979A67E4bC51E750C628C8479ff9F458aE","amount":"5000000","metadata":{"network":"EthereumSepolia","name":"0fns","symbol":"0fnsSepolia","decimals":6,"tid":"erc20:0x0A7660979A67E4bC51E750C628C9479ff9F458aE"}},"dateCreated":"2025-10-09T10:57:55.758Z"}},"Requester":{"type":"object","properties":{"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"tokenId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^to-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Token id.","example":"to-202a0-cdo33-o65mbt6q758lvvnt"}},"required":["userId"],"description":"The user who initiated the request."},"AllocationAction":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^allctn-a-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Unique identifier for the allocation action.","example":"allctn-a-04p5n-gkkgd-5qk71nuev5n2ug1t"},"allocationId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^allctn-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Unique identifier for the allocation investment.","example":"allctn-7mnn0-rltpq-9bvps60gjm09td0j"},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"kind":{"type":"string","enum":["Deposit","Withdraw"],"description":"The type of action being performed on the allocation investment: Deposit to add funds or Withdraw to remove funds."},"status":{"type":"string","enum":["PendingPolicyApproval","InProgress","Completed","Failed","Rejected"],"description":"Status of the allocation action. Once initiated, the status will be InProgress, after processing it will be Completed or Failed."},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Deposit","Withdraw"],"description":"The type of action being performed on the allocation investment: Deposit to add funds or Withdraw to remove funds."},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"sourceAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Source asset and amount to spend (stablecoin for Deposit, 0fns for Withdraw).","title":"EVM Fungible Token (ERC-20)"},"targetAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Target asset and the minimum amount you will accept (0fns for Deposit, stablecoin for Withdraw).","title":"EVM Fungible Token (ERC-20)"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","sourceAsset","targetAsset"],"description":"Request body for a 0fns allocation action (deposit or withdrawal) from a quote.","title":"0fns Allocation Action Request"},{"type":"object","properties":{"kind":{"type":"string","enum":["Deposit","Withdraw"],"description":"The type of action being performed on the allocation investment: Deposit to add funds or Withdraw to remove funds."},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"amount":{"type":"string","pattern":"^\\d+$","description":"Underlying token amount in smallest unit, e.g. \"1000000\" = 1 USDC. Applies to both deposits and withdrawals."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","amount"],"description":"Request body for creating an allocation action (deposit or withdrawal) for a Yield.xyz vault allocation. The amount is expressed in the underlying token of the vault (e.g. USDC for Gauntlet USDC Prime).","title":"Yield.xyz Vault Allocation Action Request"},{"oneOf":[{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["0fns"],"description":"Ofns protocol"},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"sourceAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Source asset and amount to spend (the stablecoin for a deposit).","title":"EVM Fungible Token (ERC-20)"},"targetAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Target asset (0fns) and the minimum amount you will accept.","title":"EVM Fungible Token (ERC-20)"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","sourceAsset","targetAsset"],"description":"Request body for creating a 0fns allocation from a previously obtained quote.","title":"0fns Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SkySusds"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDS amount in smallest unit, e.g. \"1000000000000000000\" = 1 USDS"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDS into the Sky Savings Rate (sUSDS) vault on Ethereum, provided by Yield.xyz.","title":"Sky sUSDS Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["GauntletUsdcPrime"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount in smallest unit, e.g. \"1000000\" = 1 USDC"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDC into the Gauntlet USDC Prime (gtUSDC) vault on Ethereum, provided by Yield.xyz.","title":"Gauntlet gtUSDC Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SteakhouseUsdt"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDT amount in smallest unit, e.g. \"1000000\" = 1 USDT"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDT into the Steakhouse USDT (steakUSDT) vault on Ethereum, provided by Yield.xyz.","title":"Steakhouse USDT Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["GauntletUsdcPrimeBase"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount in smallest unit, e.g. \"1000000\" = 1 USDC"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDC into the Gauntlet USDC Prime (gtUSDCp) vault on Base, provided by Yield.xyz.","title":"Gauntlet USDC Prime (Base) Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SteakhouseUsdcBase"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount in smallest unit, e.g. \"1000000\" = 1 USDC"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDC into the Steakhouse USDC (steakUSDC) vault on Base, provided by Yield.xyz.","title":"Steakhouse USDC (Base) Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SentoraPyusdMain"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"PYUSD amount in smallest unit, e.g. \"1000000\" = 1 PYUSD"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of PYUSD into the Sentora PYUSD Main (senPYUSDMain) vault on Ethereum, provided by Yield.xyz.","title":"Sentora PYUSD Main Allocation Request"}],"description":"Request body for creating an allocation investment."}],"description":"The full request used for initiating this allocation action."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor paying network fees for this allocation action, if any.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"failureReason":{"type":"string","description":"The failure reason, if any. Only present when status is Failed."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date. When the allocation action was created.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","allocationId","kind","status","requester","requestBody","dateCreated"],"description":"A specific action performed on a allocation investment, such as depositing or withdrawing funds.","example":{"id":"allctn-a-6a3ku-bn8d7-8u5rs1oukojms7k8","allocationId":"allctn-6a3ku-bn8d7-8u5rs1oukojms7k8","externalId":"external-action-123","kind":"Deposit","status":"InProgress","requester":{"userId":"us-3v1ag-v6b36-afhm4zy59kjrn1fds","tokenId":"ut-341e5-12nj6-9a82ld2hjxqzkpji"},"requestBody":{"kind":"Deposit","sourceAsset":{"kind":"Erc20","contract":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1000000"},"targetAsset":{"kind":"Erc20","contract":"0x64df20A1814a6DD0F3d6f0A14073c47214c53f58","amount":"990000"}},"dateCreated":"2025-10-09T11:15:33.421Z"}},"Fido2Assertion":{"type":"object","properties":{"kind":{"type":"string","enum":["Fido2"]},"credentialAssertion":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential returned by the user's WebAuthn client."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object returned by the user's WebAuthn client."},"signature":{"type":"string","minLength":1,"description":"Base64url-encoded signature returned by the user's WebAuthn client."},"algorithm":{"type":"string","description":"The algorithm/digest that the credential will use to sign data. If the algoritm is not specified then the algorithm will be determined by the key."},"authenticatorData":{"type":"string","minLength":1,"description":"Base64url encoded authenticator data object returned by the user's WebAuthn client."},"userHandle":{"type":"string","description":"Base64url encoded userHandle returned by the user's WebAuthn client."}},"required":["credId","clientData","signature","authenticatorData"],"additionalProperties":false}},"required":["kind","credentialAssertion"],"additionalProperties":false,"description":"Use a Fido2 Credential, also known as Passkeys or WebauthN credential.","title":"Fido2/Passkeys"},"KeyAssertion":{"type":"object","properties":{"kind":{"type":"string","enum":["Key"]},"credentialAssertion":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential returned by the user's WebAuthn client."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object returned by the user's WebAuthn client."},"signature":{"type":"string","minLength":1,"description":"Base64url-encoded signature returned by the user's WebAuthn client."},"algorithm":{"type":"string","description":"The algorithm/digest that the credential will use to sign data. If the algoritm is not specified then the algorithm will be determined by the key."}},"required":["credId","clientData","signature"],"additionalProperties":false}},"required":["kind","credentialAssertion"],"additionalProperties":false,"description":"Use a \"raw\" public/private keypair.","title":"Public/Private key pair"},"PasswordProtectedKeyAssertion":{"type":"object","properties":{"kind":{"type":"string","enum":["PasswordProtectedKey"]},"credentialAssertion":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential returned by the user's WebAuthn client."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object returned by the user's WebAuthn client."},"signature":{"type":"string","minLength":1,"description":"Base64url-encoded signature returned by the user's WebAuthn client."},"algorithm":{"type":"string","description":"The algorithm/digest that the credential will use to sign data. If the algoritm is not specified then the algorithm will be determined by the key."}},"required":["credId","clientData","signature"],"additionalProperties":false}},"required":["kind","credentialAssertion"],"additionalProperties":false,"description":"Use an encrypted private key. ","title":"Password-protected Key"},"PasswordAssertion":{"type":"object","properties":{"kind":{"type":"string","enum":["Password"]},"password":{"type":"string","minLength":1,"description":"User password."}},"required":["kind","password"],"additionalProperties":false,"description":"Not supported, will be removed in a future release.","title":"<Deprecated> Password"},"FirstFactorAssertion":{"oneOf":[{"$ref":"#/components/schemas/Fido2Assertion"},{"$ref":"#/components/schemas/KeyAssertion"},{"$ref":"#/components/schemas/PasswordProtectedKeyAssertion"},{"$ref":"#/components/schemas/PasswordAssertion"}],"discriminator":{"propertyName":"kind","mapping":{"Fido2":"#/components/schemas/Fido2Assertion","Key":"#/components/schemas/KeyAssertion","PasswordProtectedKey":"#/components/schemas/PasswordProtectedKeyAssertion","Password":"#/components/schemas/PasswordAssertion"}},"description":"First factor credential used to sign the challenge."},"TotpAssertion":{"type":"object","properties":{"kind":{"type":"string","enum":["Totp"]},"otpCode":{"type":"string","minLength":1,"description":"TOTP one-time code."}},"required":["kind","otpCode"],"additionalProperties":false,"description":"Not supported, will be removed in a future release.","title":"<Deprecated> TOTP"},"SecondFactorAssertion":{"oneOf":[{"$ref":"#/components/schemas/Fido2Assertion"},{"$ref":"#/components/schemas/KeyAssertion"},{"$ref":"#/components/schemas/PasswordProtectedKeyAssertion"},{"$ref":"#/components/schemas/TotpAssertion"}],"discriminator":{"propertyName":"kind","mapping":{"Fido2":"#/components/schemas/Fido2Assertion","Key":"#/components/schemas/KeyAssertion","PasswordProtectedKey":"#/components/schemas/PasswordProtectedKeyAssertion","Totp":"#/components/schemas/TotpAssertion"}},"description":"Second factor credential used to authenticate a user."},"CredentialKind":{"type":"string","description":"The kind of credential.","enum":["Fido2","Key","PasswordProtectedKey","RecoveryKey","SessionKey"]},"AuditLog":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^uj-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"","example":"uj-22lhj-mp2ir-88at3r4cufpis60i"},{"type":"string","minLength":1,"maxLength":64,"pattern":"^to-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"","example":"to-202a0-cdo33-o65mbt6q758lvvnt"}],"description":"Log id."},"action":{"type":"string","description":"Action performed."},"actionToken":{"type":"string","description":"User Action Signature used as token for permorming this action."},"userId":{"type":["string","null"],"minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User who performed the action.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"username":{"type":["string","null"],"description":"Username who performed the action."},"datePerformed":{"type":["string","null"],"format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When this action was performed (consumed by its handler).","example":"2023-04-14T20:41:28.715Z"},"dateSigned":{"type":["string","null"],"format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date when the user action token was signed.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":["string","null"],"format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When this action reached its final outcome (handler finished and the HTTP status was recorded). Null for legacy rows recorded before outcome tracking.","example":"2023-04-14T20:41:28.715Z"},"responseStatus":{"type":["string","null"],"description":"Final HTTP status code returned for this action (e.g. \"200\", \"403\"). Null for legacy rows recorded before outcome tracking."},"responseError":{"type":["string","null"],"description":"Failure reason for the action, when it failed. Null on success or when no failure reason was recorded."},"firstFactorCredential":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the credential used to sign this action.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"kind":{"allOf":[{"$ref":"#/components/schemas/CredentialKind"},{"type":["string","null"],"description":"Kind of credential used to sign this action."}]},"publicKey":{"type":"string","description":"Public Key which can be used to verify signature."},"assertion":{"type":["object","null"],"properties":{"authenticatorData":{"type":["string","null"],"description":"Used to verify the signature for Fido2 credentials. Null for Key credentials, which sign clientData directly."},"clientData":{"type":"string","description":"Information, including challenge, which you can use to verify the signature."},"signature":{"type":"string","description":"Signature of the clientData (and authenticatorData for Fido2)."}},"required":["authenticatorData","clientData","signature"],"description":"Cryptographic signature evidence. Null when the action was recorded without a WebAuthn assertion (e.g. system-initiated actions or staff-flow org-owner creations)."}},"required":["id","kind","publicKey","assertion"],"description":"Cryptographic Signature details. Use these parameters if you want to validate the signature."}},"required":["id","action","actionToken","userId","username","datePerformed","dateSigned","dateResolved","responseStatus","responseError","firstFactorCredential"],"additionalProperties":false,"example":{"id":"uj-4vs1l-5012b-95825381215t26u8","action":"eyJwYXlsb2FkIjoie1wibmFtZVwi3215853bGlhXCJ9IiwibWV0aG9kIjoiUFVUIiwicGF0aCI6Ii93YWxsZX32584LTNsNmFwLXI0Y2J0LThqMDltaGh0YnU1MjQyYzgiLCJzZXJ2ZXIiOiJhcGkuZGZucy5pbyIsInN56534nkiOiJVcGRhdGUgd2FsbGV0IHdhLTNsNmFwLXI0Y2J0LThqMDlt84388jQyYzguIiwibm9uY2UiOiIifQ==","actionToken":"eyJ0eXAiOiJKV1QiLC453JFZERTQSJ9.eyJqdGkiOiJ1ai00dnMxbC01MDEyYi05NTg5Y3M0NXIy548nU4IiwiaXNzIjoiYXV0aC5kZm5zLmlvIiwiYXVk3543586XRoOnVzZXI6YWN0aW9uIiwic3ViIjoidXMtNG92aDQtNmEwaDgtODFvYWgwZmozdThsNmRqdC354348HBzOi8vY3VzdG9tL2FwcF9tZXRhZGF0YSI6eyJvcmdJZCI6Im9yLTFtZG9rLTV1dmgwLTllNzluOTlqNWE5azV1MWoiLCJmaXJzdEZhY3RvckNyZWRlbnRpYWxVdWlkIjoiY3ItN2JmcWstODl1YWctOG5scXZxdmd0NmR2ZDFtayIsInNlY29uZEZhY3RvckNyZWRlbnRpYWxVdWlkIjoiIiwiaGFzaCI6ImM5YTc5YjcxZjI0ZTRkMzJjNGJmN2M1NzlkYmQ3Y2RmZDRlNDUwOWFkMGM1ZmM5ZDVlNjEyYWFkODllMmQzOTYiLCJub25jZSI6Im5vLTVoMG44LWg5b211LTkxZHJqc2RjZnRxMzJmbmMifSwiaWF0IjoxNzYwMDE2MTg1LCJleHAiOjE3NjAwMTcwODV9.zva5vMQHkkbxGgk8IG2jHtbWOoftDA1ga_5INqLks2aCO9V29U3lWE9eE3Mu3M6z5SPHprF31BpIMW0jOzWbDA","datePerformed":"2025-10-09T13:23:05.134Z","dateSigned":"2025-10-09T13:23:04.000Z","dateResolved":"2025-10-09T13:23:05.600Z","responseStatus":"200","responseError":null,"userId":"us-4ovh4-6a0h8-81oa5584u8l6djt","username":"my-user@my-company.com","firstFactorCredential":{"id":"cr-7bfqk-89uag-8nlq12437958dvd1mk","kind":"Fido2","publicKey":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2315138132rYlwMzKbl458cZk\nyiHqVsN6QJRE/tqvqsdfq35eT8KEwjSGsh/Lv4LiWMFlnz/kIzjo6TCJpA==\n-----END PUBLIC KEY-----\n","assertion":{"authenticatorData":"k3SiDdanJToQdO2q1f3se58ELbhdGfzoZ3GRSPmOO9AdAAAAAA","clientData":"eyJ0eXBlIjoid2ViYXV0aG4uZ2V0qfses135ebmdlIjoiWlhsS2NGcERTVFpKYlU1dlRGUmFibGt5ZERKTVYwVXlZbnBXZGt4VWFIVmphbXd3V1ZkU2JrNHpXbk5QVjNOM1RVUlJhVXhEU25WaU1qVnFXbE5KTmtsdE5YWk1WRlUwWTBkVmVVeFVVblZaVkVGM1RGUm5lVTlIUlRKUFZFWXhZMjFPZEdFeVdYcE9WekJwVEVOS2QxbFliSE5pTWtaclUwZEdlbUZEU1RaSmJWSm9Xa2RhYkU5VVdUSmFSMVUxVFZSTk0xcEVUVFJQVjFFd1RrUlJlVTlFWXpGUFJFcHFUVlJKTVU1NlJYaE9hbWN6VFVkSk0xcEVTWGRaVjBsM1RsUlpNRmx0Vm14YWFtTXhUbGRLYWxwWFNYcE9Na2xwVEVOS2QxbFlVbTlKYW05cFRETmthR0pIZUd4a1NFMTJaREpGZEUweWR6SlpXRUYwWTJwU2FsbHVVWFJQUjI5M1QxY3hiMkZJVW1sa1ZGVjVUa1JLYWs5RFNYTkpiazR4WWxjeGFHTnVhMmxQYVVwV1kwZFNhR1JIVldka01rWnpZa2RXTUVsSVpHaE1WRTV6VG0xR2QweFlTVEJaTWtvd1RGUm9jVTFFYkhSaFIyZ3dXVzVWTVUxcVVYbFplbWQxU1c0dyIsIm9yaWdpbiI6Imh0dHBzOi8vYXBwLmRmbnMuaW8iLCJjcm9zc09yaWdpbiI6ZmFsc2V9","signature":"MEYCIQDq2iXdlHcsqf13se5BlK1VJFiMQuV1x-HTj1efWvu5dKGgIhAJOudYr43QPWNQnxu1Y1U7PJ3pxjQNhx7kBb821HZJNk"}}}},"PersonalAccessToken":{"type":"object","properties":{"accessToken":{"type":"string","description":"The access token. Only returned at creation time."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the access token was created.","example":"2023-04-14T20:41:28.715Z"},"credId":{"type":"string","description":"ID of the credential associated with the access token."},"isActive":{"type":"boolean","description":"Whether the access token is active."},"kind":{"type":"string","enum":["Pat","ServiceAccount","Token","Code","Recovery","Temp","Application"],"description":"Access token kind."},"linkedUserId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"linkedAppId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the application the access token is linked to.","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"name":{"type":"string","description":"Human-readable name of the access token."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the access token."},"publicKey":{"type":"string","description":"Public key associated with the access token."},"tokenId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^to-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Token id.","example":"to-202a0-cdo33-o65mbt6q758lvvnt"}},"required":["dateCreated","credId","isActive","kind","linkedUserId","linkedAppId","name","orgId","permissionAssignments","publicKey","tokenId"]},"Credential":{"type":"object","properties":{"kind":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"credentialId":{"type":"string","description":"Credential ID from the WebAuthn authenticator (base64url)."},"credentialUuid":{"type":"string","description":"Dfns-internal UUID of the credential."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the credential was created.","example":"2023-04-14T20:41:28.715Z"},"isActive":{"type":"boolean","description":"Whether the credential is active."},"name":{"type":"string","description":"Human-readable name of the credential."},"publicKey":{"type":"string","description":"Public key of the credential."},"relyingPartyId":{"type":"string","description":"Relying party identifier associated with the credential."},"origin":{"type":"string","description":"Origin where the credential was created."}},"required":["kind","credentialId","credentialUuid","dateCreated","isActive","name","publicKey","relyingPartyId","origin"]},"CreateCredentialFido2Attestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Fido2"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential returned by the user's WebAuthn client."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object returned by the user's WebAuthn client."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded attestation data returned by the user's WebAuthn client."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name of the credential."},"challengeIdentifier":{"type":"string","minLength":1,"description":"Challenge identifier returned by the create credential challenge endpoint."}},"required":["credentialKind","credentialInfo","credentialName","challengeIdentifier"],"additionalProperties":false,"description":"Register a Fido2 Credential, also known as Passkeys or WebauthN credential.","title":"Fido2/Passkeys"},"CreateCredentialKeyAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Key"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded public key."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name of the credential."},"challengeIdentifier":{"type":"string","minLength":1,"description":"Challenge identifier returned by the create credential challenge endpoint."}},"required":["credentialKind","credentialInfo","credentialName","challengeIdentifier"],"additionalProperties":false,"description":"Register a \"raw\" public/private keypair, mostly meant to be used by Service Accounts. See [Generate a Key Pair](https://docs.dfns.co/guides/developers/generate-a-key-pair) for more details.","title":"Public/Private key pair"},"CreateCredentialPasswordProtectedKeyAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["PasswordProtectedKey"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded public key."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"encryptedPrivateKey":{"type":"string","minLength":1,"description":"User-encrypted private key. Dfns does not have the password to decrypt it."},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name of the credential."},"challengeIdentifier":{"type":"string","minLength":1,"description":"Challenge identifier returned by the create credential challenge endpoint."}},"required":["credentialKind","credentialInfo","encryptedPrivateKey","credentialName","challengeIdentifier"],"additionalProperties":false,"description":"Register an encrypted private key. Note that Dfns only stores the encrypted private key and should not have access to the password to decrypt it!","title":"Password-protected Key"},"CreateCredentialRecoveryKeyAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["RecoveryKey"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the recovery credential."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded public key."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"encryptedPrivateKey":{"type":"string","minLength":1,"description":"User-encrypted private key for the recovery credential."},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name of the credential."},"challengeIdentifier":{"type":"string","minLength":1,"description":"Challenge identifier returned by the create credential challenge endpoint."}},"required":["credentialKind","credentialInfo","credentialName","challengeIdentifier"],"additionalProperties":false,"description":"Register a recovery key. See [Account Recovery](https://docs.dfns.co/api-reference/auth/account-recovery) for more details.","title":"Recovery Key"},"CreateCredentialPasswordAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Password"]},"credentialInfo":{"type":"object","properties":{"password":{"type":"string","minLength":1,"description":"User password."}},"required":["password"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name of the credential."},"challengeIdentifier":{"type":"string","minLength":1,"description":"Challenge identifier returned by the create credential challenge endpoint."}},"required":["credentialKind","credentialInfo","credentialName","challengeIdentifier"],"additionalProperties":false,"description":"Not supported, will be removed in a future release.","title":"<Deprecated> Password"},"CreateCredentialTotpAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Totp"]},"credentialInfo":{"type":"object","properties":{"otpCode":{"type":"string","minLength":1,"description":"TOTP one-time code."}},"required":["otpCode"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name of the credential."},"challengeIdentifier":{"type":"string","minLength":1,"description":"Challenge identifier returned by the create credential challenge endpoint."}},"required":["credentialKind","credentialInfo","credentialName","challengeIdentifier"],"additionalProperties":false,"description":"Not supported, will be removed in a future release.","title":"<Deprecated> TOTP"},"CreateCredentialSessionKeyAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["SessionKey"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Credential id of the session key. Must equal the nonce supplied at Initiate OIDC Login so the server can verify the key was bound to the OIDC id_token."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded public key."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name of the credential."},"challengeIdentifier":{"type":"string","minLength":1,"description":"Challenge identifier returned by the create credential challenge endpoint."}},"required":["credentialKind","credentialInfo","credentialName","challengeIdentifier"],"additionalProperties":false,"description":"Register an ephemeral session key bound to an OIDC login session.","title":"Session Key"},"Fido2Attestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Fido2"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential returned by the user's WebAuthn client."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object returned by the user's WebAuthn client."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded attestation data returned by the user's WebAuthn client."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name to assign to the credential."}},"required":["credentialKind","credentialInfo"],"additionalProperties":false,"description":"Register a Fido2 Credential, also known as Passkeys or WebauthN credential.","title":"Fido2/Passkeys"},"KeyAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Key"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded public key."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name to assign to the credential."}},"required":["credentialKind","credentialInfo"],"additionalProperties":false,"description":"Register a \"raw\" public/private keypair, mostly meant to be used by Service Accounts. See [Generate a Key Pair](https://docs.dfns.co/guides/developers/generate-a-key-pair) for more details.","title":"Public/Private key pair"},"PasswordAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Password"]},"credentialInfo":{"type":"object","properties":{"password":{"type":"string","minLength":1,"description":"User password."}},"required":["password"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name to assign to the credential."}},"required":["credentialKind","credentialInfo"],"additionalProperties":false,"description":"Not supported, will be removed in a future release.","title":"<Deprecated> Password"},"PasswordProtectedKeyAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["PasswordProtectedKey"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded public key."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"encryptedPrivateKey":{"type":"string","minLength":1,"description":"User-encrypted private key. Dfns does not have the password to decrypt it."},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name to assign to the credential."}},"required":["credentialKind","credentialInfo","encryptedPrivateKey"],"additionalProperties":false,"description":"Register an encrypted private key. Note that Dfns only stores the encrypted private key and should not have access to the password to decrypt it!","title":"Password-protected Key"},"FirstFactorAttestation":{"oneOf":[{"$ref":"#/components/schemas/Fido2Attestation"},{"$ref":"#/components/schemas/KeyAttestation"},{"$ref":"#/components/schemas/PasswordAttestation"},{"$ref":"#/components/schemas/PasswordProtectedKeyAttestation"}],"discriminator":{"propertyName":"credentialKind","mapping":{"Fido2":"#/components/schemas/Fido2Attestation","Key":"#/components/schemas/KeyAttestation","Password":"#/components/schemas/PasswordAttestation","PasswordProtectedKey":"#/components/schemas/PasswordProtectedKeyAttestation"}}},"TotpAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Totp"]},"credentialInfo":{"type":"object","properties":{"otpCode":{"type":"string","minLength":1,"description":"TOTP one-time code."}},"required":["otpCode"],"additionalProperties":false},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name to assign to the credential."}},"required":["credentialKind","credentialInfo"],"additionalProperties":false,"description":"Not supported, will be removed in a future release.","title":"<Deprecated> TOTP"},"SecondFactorAttestation":{"oneOf":[{"$ref":"#/components/schemas/Fido2Attestation"},{"$ref":"#/components/schemas/KeyAttestation"},{"$ref":"#/components/schemas/TotpAttestation"},{"$ref":"#/components/schemas/PasswordProtectedKeyAttestation"}],"discriminator":{"propertyName":"credentialKind","mapping":{"Fido2":"#/components/schemas/Fido2Attestation","Key":"#/components/schemas/KeyAttestation","Totp":"#/components/schemas/TotpAttestation","PasswordProtectedKey":"#/components/schemas/PasswordProtectedKeyAttestation"}}},"RecoveryKeyAttestation":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["RecoveryKey"]},"credentialInfo":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the recovery credential."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object."},"attestationData":{"type":"string","minLength":1,"description":"Base64url-encoded public key."}},"required":["credId","clientData","attestationData"],"additionalProperties":false},"encryptedPrivateKey":{"type":"string","minLength":1,"description":"User-encrypted private key for the recovery credential."},"credentialName":{"type":"string","minLength":1,"description":"Human-readable name to assign to the credential."}},"required":["credentialKind","credentialInfo"],"additionalProperties":false,"description":"Register a recovery key. See [Account Recovery](https://docs.dfns.co/api-reference/auth/account-recovery) for more details.","title":"Recovery Key"},"KeyScheme":{"type":"string","description":"The cryptographic scheme for the key.","enum":["ECDSA","EdDSA","Schnorr"]},"KeyCurve":{"type":"string","enum":["ed25519","secp256k1","stark"],"description":"The elliptic curve for the key."},"Wallet":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the wallet.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"network":{"type":"string","description":"Network this wallet is bound to.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"]},"address":{"type":"string","description":"Wallet address on its corresponding network."},"signingKey":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"scheme":{"$ref":"#/components/schemas/KeyScheme"},"curve":{"$ref":"#/components/schemas/KeyCurve"},"publicKey":{"type":"string","description":"Hex-encoded value of the public key.","example":"e2375c8c9e87bfcd0be8f29d76c818cabacd51584f72cb2222d49a13b036d84d3d"},"delegatedTo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The end user ID the key (and wallet) is delegated to.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"storeId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the key store the signing key lives in (see [List Key Stores](https://docs.dfns.co/api-reference/key-stores/list-key-stores)). Use it to tell wallets apart by custody setup, for instance to scope a policy to one store with the `keyStoreId` policy filter.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"}},"required":["id","scheme","curve","publicKey"],"description":"Details about the key underlying the wallet."},"status":{"type":"string","enum":["Active","Inactive","Archived"],"description":"Wallet status."},"dateCreated":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when wallet was created.","example":"2023-04-14T20:41:28.715Z"},"dateDeleted":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when wallet was deleted.","example":"2023-04-14T20:41:28.715Z"},"name":{"type":"string","maxLength":100,"description":"Wallet nickname."},"custodial":{"type":"boolean","description":"Whether the wallet is owned by an end user (non-custodial), or by your organization (custodial)."},"externalId":{"type":"string","maxLength":100,"description":"User-defined value that can be used to correlate the entity with an external system."},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Wallet Tag."},"maxItems":10,"description":"List of tags."},"validatorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cv-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"@deprecated use `networkInfo.validatorId` instead.","deprecated":true},"networkInfo":{"type":"object","properties":{"nonceAccounts":{"type":"array","items":{"type":"string"},"description":"Confirmed Solana durable-nonce accounts owned by this wallet."},"validatorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cv-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the validator on which the wallet is created for Canton networks.","example":"cv-7jeof-m584r-p35ucm37ko3cqgts"}},"description":"Additional chain-dependent information about the wallet. Only returned by Get Wallet."},"vaultId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The vault controlling this wallet, absent for ordinary wallets. A vault wallet is read-only, its funds move through the vault endpoints, and it carries its vault name and tags as its own.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"}},"required":["id","network","signingKey","status","dateCreated","custodial","tags"],"example":{"id":"wa-1f04s-lqc9q-xxxxxxxxxxxxxxxx","network":"Ethereum","address":"0x00e3495cf6af59008f22ffaf32d4c92ac33dac47","name":"trading hot wallet","signingKey":{"id":"key-6ece3-9l565-xxxxxxxxxxxxxxxx","scheme":"ECDSA","curve":"secp256k1","publicKey":"e2375c8c9e87bfcd0be8f29d76c818cabacd51584f72cb2222d49a13b036d84d3d","storeId":"store-2ab1c-4d5e6-xxxxxxxxxxxxxxxx"},"status":"Active","dateCreated":"2023-04-14T20:41:28.715Z","custodial":true,"tags":[]}},"User":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"isSSORequired":{"type":"boolean","description":"Whether the user must authenticate via SSO."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","isSSORequired","permissionAssignments"]},"UserGroup":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"name":{"type":"string","description":"Name of the group."},"description":{"type":"string","description":"Description of the group."},"memberCount":{"type":"integer","minimum":0,"description":"Number of members."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the group was created.","example":"2023-04-14T20:41:28.715Z"},"dateUpdated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the group was last updated.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","name","memberCount","dateCreated","dateUpdated"]},"UserGroupMember":{"type":"object","properties":{"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"username":{"type":"string","description":"Username/identifier of the member."},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"isActive":{"type":"boolean","description":"Whether the member is an active user."},"isArchived":{"type":"boolean","description":"Whether the member has been archived. Archived members hold no permissions."},"isServiceAccount":{"type":"boolean","description":"Whether the member is a service account."},"dateAdded":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the user was added to the group.","example":"2023-04-14T20:41:28.715Z"}},"required":["userId","username","kind","isActive","isArchived","isServiceAccount","dateAdded"]},"FeeSponsor":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Fee Sponsor id.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"name":{"type":"string","description":"Nickname for the Fee Sponsor. This is displayed on the transfer modal in the dashboard."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the wallet that is used to sponsor the fee for other wallets","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"Network used for the wallet."}]},"status":{"type":"string","enum":["Active","Deactivated","Archived"],"description":"Fee sponsor status."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the Fee Sponsor was created.","example":"2023-04-14T20:41:28.715Z"},"allowEndUser":{"type":"boolean","description":"Defines whether EndUsers and their delegated wallets can use this Fee Sponsor."}},"required":["id","walletId","network","status","dateCreated"],"additionalProperties":false,"example":{"id":"fs-1f04s-lqc9q-xxxxxxxxxxxxxxxx","walletId":"wa-1f04s-lqc9q-xxxxxxxxxxxxxxxx","network":"Solana","status":"Active","dateCreated":"2023-04-14T20:41:28.715Z"}},"Key":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Unique identifier for the key.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"scheme":{"$ref":"#/components/schemas/KeyScheme"},"curve":{"$ref":"#/components/schemas/KeyCurve"},"publicKey":{"type":"string","description":"Hex-encoded public key."},"masterKey":{"type":"boolean","description":"Whether this key can be used as a master key for HD derivation."},"derivedFrom":{"type":"object","properties":{"keyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The master key this key was derived from.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"path":{"type":"string","description":"The derivation path used."}},"required":["keyId","path"],"description":"Derivation info if this key was derived from a master key."},"name":{"type":"string","description":"Nickname for the key."},"status":{"type":"string","enum":["Active","Archived"],"description":"Current status of the key."},"custodial":{"type":"boolean","description":"Whether the key is custodial (owned by organization) or non-custodial (delegated to end user)."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the key was created.","example":"2023-04-14T20:41:28.715Z"},"imported":{"type":"boolean","description":"Whether this key was imported."},"exported":{"type":"boolean","description":"Whether this key has been exported."},"dateExported":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the key was exported.","example":"2023-04-14T20:41:28.715Z"},"dateDeleted":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the key was deleted.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","scheme","curve","publicKey","status","custodial","dateCreated"]},"BlockchainKind":{"type":"string","enum":["Algorand","Aptos","Bitcoin","BitcoinCash","Canton","Cardano","Concordium","Cosmos","Evm","Hedera","Icp","Iota","Kaspa","Near","Polymesh","Solana","Starknet","Stellar","Substrate","Sui","Tezos","Ton","Tron","Xrpl"]},"SignatureRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^sig-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Signature id.","example":"sig-4sfvl-f4iha-umighfi3hk4t54dr"},"keyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Hash"]},"hash":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{64}$","description":"32-byte hash in hex encoded format."},"taprootMerkleRoot":{"type":"string","pattern":"^(0x)?([0-9A-Fa-f]{64})?$","description":"Required when signing with a Schnorr key. Specify the merkle root for tweaking the signing key, or the empty string \"\" to tweak with the default merkle root."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","hash"],"additionalProperties":false,"description":"All cryptographic scheme support hash signing. Different blockchains will apply different hash functions to compute the hash.","title":"Hash"},{"type":"object","properties":{"kind":{"type":"string","enum":["Message"]},"message":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"An arbitrary hex encoded message."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","message"],"additionalProperties":false,"description":"Signs an arbitrary hex encoded arbitrary message.","title":"Message"},{"type":"object","properties":{"kind":{"type":"string","enum":["Transaction"]},"transaction":{"anyOf":[{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},{"type":"object","properties":{},"description":"Network-specific JSON transaction object. The accepted fields depend on the target network. For EVM chains the shape matches the EVM transaction object of [Sign and Broadcast Transaction](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction) (for example `to`, `value`, `data`, `nonce`, `gasLimit`, `maxFeePerGas`, `maxPriorityFeePerGas`). For other JSON networks (such as Starknet or Concordium), refer to the per-network formats described below.","title":"JSON transaction object"}],"description":"The unsigned hex-encoded transaction or JSON object for compatible networks"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","transaction"],"additionalProperties":false,"description":"Signs an unsigned transaction. The transaction parameter accepts hex-encoded transactions or JSON objects for compatible networks (Concordium, Starknet, Evm).\n\nThe following blockchains only accept JSON transaction objects (not hex strings): Concordium, Starknet.\n\nFor Starknet transactions, you may use invocation request objects (https://github.com/starkware-libs/starknet-specs/blob/v0.8.1/api/starknet_api_openrpc.json#L2621):\n\n| Field                         | Description                                                                                         | Type - Optional                  |\n|-------------------------------|-----------------------------------------------------------------------------------------------------|----------------------------------|\n| type                          | transaction type (always INVOKE              )                                                      | String (required)                |\n| calldata                      | **Array** of encoded function call parameters                                                       | **Array of Strings** (required)  |\n| nonce                         | Transaction nonce in hex format                                                                     | String (required)                |\n| version                       | Transaction version in hex format. Typically \"0x3\" for current transactions                         | String (required)                |\n| resourceBounds                | Gas bounds for L1, L2, and L1 data gas                                                              | Object (required)                |\n| ↳ resourceBounds.l1Gas        | L1 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l2Gas        | L2 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l1DataGas    | L1 data gas configuration with maxAmount and maxPricePerUnit                                        | Object (required)                |\n| tip                           | Transaction tip in hex format. Typically \"0x0\"                                                      | String (required)                |\n| paymasterData                 | Paymaster data array                                                                                | Array of Strings (required)      |\n| accountDeploymentData         | Account deployment data array                                                                       | Array of Strings (required)      |\n| nonceDataAvailabilityMode     | Data availability mode for nonce. Typically \"L1\" for now                                            | String (required)                |\n| feeDataAvailabilityMode       | Data availability mode for fee. Typically \"L1\" for now                                              | String (required)                |\n| chainId                       | The chain identifier in hex format                                                                  | String (required)                |\n| senderAddress                 | The address of the account sending the transaction                                                  | String (required)                |\n\nFor Concordium transactions, use account transaction objects (https://developer.concordium.software/concordium-node-sdk-js/classes/ccd_js_gen.ConcordiumGRPCClient.html):\n\n| Field                          | Description                                                                  | Type - Optional              |\n|--------------------------------|------------------------------------------------------------------------------|------------------------------|\n| header.sender                  | Account address (base58)                                                     | String (required)            |\n| header.nonce                   | Account nonce                                                                | String (required)            |\n| header.expiry                  | Unix epoch seconds expiry                                                    | Number (required)            |\n| header.executionEnergyAmount   | Max NRG for execution                                                        | String (required)            |\n| header.numSignatures           | Number of signatures                                                         | Number (optional)            |\n| payload                        | Transaction payload (type-specific, e.g. Transfer, RegisterData)             | Object (required)            |\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"blockchainKind\": \"Concordium\",\n  \"transaction\": {\n    \"header\": {\n      \"sender\": \"4FmiTW2L2AccyR36ZBRKNqwQvBJBH8CAXWMLB1dbX5WyZmRo6N\",\n      \"nonce\": \"42\",\n      \"expiry\": 1709510400,\n      \"executionEnergyAmount\": \"501\"\n    },\n    \"payload\": {\n      \"Transfer\": {\n        \"amount\": \"1000000\",\n        \"toAddress\": \"3U4sfVSqGG6XK8g6eho2qRYtnHc4MWJBG1dfxdtPGbfHwFxini\"\n      }\n    }\n  }\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": \"0xe703847735941a82520894f0965f5eb35ace69f01b77031f2cff22daca622887470de4df82000080\"\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"type\": \"INVOKE\",\n    \"calldata\": [\n      \"1\",\n      \"2009894490435840142178314390393166646092438090257831307886760648929397478285\",\n      \"232670485425082704932579856502088130646006032362877466777181098476241604910\",\n      \"3\",\n      \"296727860213112272332383824629975240127004024814636931420022890499591637514\",\n      \"1\",\n      \"0\"\n    ],\n    \"nonce\": \"0x51\",\n    \"version\": \"0x3\",\n    \"resourceBounds\": {\n      \"l1Gas\": { \"maxAmount\": \"0x0\", \"maxPricePerUnit\": \"0x239a01ff6e6c\" },\n      \"l2Gas\": { \"maxAmount\": \"0x1694a0\", \"maxPricePerUnit\": \"0x10c388d00\" },\n      \"l1DataGas\": { \"maxAmount\": \"0x120\", \"maxPricePerUnit\": \"0x98e8\" }\n    },\n    \"tip\": \"0x0\",\n    \"paymasterData\": [],\n    \"accountDeploymentData\": [],\n    \"nonceDataAvailabilityMode\": \"L1\",\n    \"feeDataAvailabilityMode\": \"L1\",\n    \"chainId\": \"0x534e5f5345504f4c4941\",\n    \"senderAddress\": \"0x0535a9762b984c876abe0b164b0ccedb0d23a78978c9fe87e29deae0ea890c72\"\n  }\n}\n```","title":"Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip191"]},"message":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"Hex-encoded message."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","message"],"additionalProperties":false,"description":"Signs a personal_sign message as defined in [EIP-191](https://eips.ethereum.org/EIPS/eip-191).","title":"EIP-191 personal_sign Message"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip712"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}},"description":"Type definitions."},"domain":{"type":"object","properties":{"name":{"type":"string","description":"Name of the signing domain."},"version":{"type":"string","description":"Current major version of the signing domain."},"chainId":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"string"}],"description":"Chain ID."},"verifyingContract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The address of the contract that will verify the signature."},"salt":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"32-byte value as a last-resort domain separator."}},"additionalProperties":false,"description":"Domain separator."},"message":{"type":"object","additionalProperties":{},"description":"Structured message to sign."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","types","domain","message"],"additionalProperties":false,"description":"Signs a typed structured data as defined in [EIP-712](https://eips.ethereum.org/EIPS/eip-712).","title":"EIP-712 TypedData"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip7702"]},"address":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The address of the contract the signer's EOA will be delegated to."},"nonce":{"type":"number","description":"The current nonce of the signer EOA."},"chainId":{"type":"number","description":"Chain ID."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","address","nonce","chainId"],"additionalProperties":false,"description":"Signs an authorization tuple for type 4 set code transaction defined in [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702).","title":"EIP-7702 Authorization"},{"type":"object","properties":{"kind":{"type":"string","enum":["Snip12"]},"primaryType":{"type":"string","description":"The primary type of the message."},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}},"description":"Type definitions."},"domain":{"type":"object","properties":{"name":{"type":"string","description":"Name of the signing domain."},"version":{"type":"string","description":"Current major version of the signing domain."},"chainId":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"string"}],"description":"Chain ID."},"revision":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Revision of the domain."}},"description":"Domain separator."},"message":{"type":"object","additionalProperties":{},"description":"Structured message to sign."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","primaryType","types","domain","message"],"additionalProperties":false,"description":"Signs a typed structured data as defined in [SNIP-12](https://github.com/starknet-io/SNIPs/blob/main/SNIPS/snip-12.md).","title":"SNIP-12 TypedData"},{"type":"object","properties":{"kind":{"type":"string","enum":["Psbt"]},"psbt":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The hex encoded PSBT."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","psbt"],"additionalProperties":false,"description":"Signs a partially signed Bitcoin / Litecoin transaction.","title":"PSBT"},{"type":"object","properties":{"kind":{"type":"string","enum":["Bip322"]},"message":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The generic message hex encoded."},"format":{"type":"string","enum":["Simple","Full"],"description":"Defaults to Simple if not present. The formatted signature is returned in the `signedData` field in the response."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","message"],"additionalProperties":false,"description":"Signs a generic message using [BIP-322](https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki). Note: signing payload construction depends on the targeted blockchain. Therefore it's tied to a specific `network` rather than the blockchain kind.","title":"BIP-322"},{"type":"object","properties":{"kind":{"type":"string","enum":["SignDocDirect"]},"signDoc":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The hex encoded `SignDoc` Protobuf."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","signDoc"],"additionalProperties":false,"description":"Signs an unsigned transaction using [sign mode direct](https://docs.cosmos.network/main/learn/advanced/transactions#sign_mode_direct-preferred).","title":"SignDocDirect"},{"type":"object","properties":{"kind":{"type":"string","enum":["SignerPayload"]},"payload":{"anyOf":[{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},{"type":"object","properties":{}}],"description":"The unsigned Signer Payload formatted as JSON, or as a serialized hex-encoded buffer.\n\nPlease refer to the original Polkadot definition for more details: [SignerPayloadJson](https://github.com/polkadot-js/api/blob/v16.2.2/packages/types/src/types/extrinsic.ts#L32). Note that additional fields will be rejected.\n\n| Field                | Description                                                                              | Type - Optional      |\n| -------------------- | ---------------------------------------------------------------------------------------- | -------------------- |\n| `address`            | ss58-encoded address of the sending account.                                             | String               |\n| `blockHash`          | The hash of the checkpoint block, hex encoded.                                           | String               |\n| `blockNumber`        | The checkpoint block number, hex encoded.                                                | String               |\n| `era`                | The number of blocks after the checkpoint for which a transaction is valid, hex encoded. | String               |\n| `genesisHash`        | The genesis hash of the chain, hex encoded.                                              | String               |\n| `metadataHash`       | The metadataHash for the CheckMetadataHash SignedExtension, hex encoded.                 | String *(optional)*  |\n| `mode`               | flag indicating whether to verify the metadata hash or not.                              | Integer *(optional)* |\n| `method`             | The encoded method with arguments, hex encoded.                                          | String               |\n| `nonce`              | The nonce for the transaction, hex encoded.                                              | String               |\n| `tip`                | The tip to increase transaction priority, hex encoded.                                   | String               |\n| `version`            | The version of the extrinsic.                                                            | Integer              |\n| `specVersion`        | The current spec version for the runtime, hex encoded.                                   | String               |\n| `transactionVersion` | The current transaction version for the runtime, hex encoded.                            | String               |\n| `signedExtensions`   | The applicable signed extensions for this runtime.                                       | Array<String>       |\n\n```json\n{\n  \"network\": \"Polymesh\",\n  \"kind\": \"SignerPayload\",\n  \"payload\": {\n    \"address\": \"5H5tTnmLUqRgvTZvTwCdBKYjKLBm2gkp7u38Q9UUdJa8m6rX\",\n    \"blockHash\": \"0x2ace05e703aa50b48c0ccccfc8b424f7aab9a1e2c424ed12e45d20b1e8ffd0d6\",\n    \"blockNumber\": \"0x00000000\",\n    \"era\": \"0x00\",\n    \"genesisHash\": \"0x2ace05e703aa50b48c0ccccfc8b424f7aab9a1e2c424ed12e45d20b1e8ffd0d6\",\n    \"method\": \"0x07141f3da32e72ac6eb6cb40d9e757594363a617b2c3964a2b6ec6895c6648f48d500000\",\n    \"nonce\": \"0x00000000\",\n    \"tip\": \"0x00000000000000000000000000000000\",\n    \"version\": 4,\n    \"specVersion\": \"0x006adb7a\",\n    \"transactionVersion\": \"0x00000007\",\n    \"signedExtensions\": []\n  }\n}\n```\n"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","payload"],"additionalProperties":false,"description":"Signs a [generic Signer Payload](https://github.com/polkadot-js/api/blob/v15.0.1/packages/types/src/extrinsic/SignerPayload.ts#L47-L51). Note: converting the generic signer payload to a signable extrinsic requires fetching metadata from the targeted blockchain. Therefore it's tied to a specific `network` rather than the blockchain kind.","title":"SignerPayload"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cip8"]},"payload":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The generic message hex encoded."},"externalAad":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"Allows an application to ask the user to sign some extra data but NOT put it inside the COSE structure (only as part of the data to sign)."},"context":{"type":"string","enum":["Signature1"]},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","context"],"additionalProperties":false,"description":"Signs an arbitrary message using [CIP-8](https://cips.cardano.org/cip/CIP-0008). Note: signing address depends on the targeted blockchain. Therefore it's tied to a specific `network` rather than the blockchain kind.","title":"CIP-8"},{"type":"object","properties":{"kind":{"type":"string","enum":["DfnsSmartAccountTransaction"]},"structured":{"type":"object","properties":{"address":{"type":"string"},"userOperations":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string"},"value":{"type":"string"},"data":{"type":"string"}},"required":["to"]}},"message":{"type":"object","properties":{"kind":{"type":"string","enum":["Eip712"]},"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"anyOf":[{"type":"number"},{"type":"string"}]},"verifyingContract":{"type":"string"},"salt":{"type":"string"}}},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"message":{"type":"object","additionalProperties":{}}},"required":["kind","domain","types","message"]},"authorization":{"type":"object","properties":{"kind":{"type":"string","enum":["Eip7702"]},"address":{"type":"string"},"nonce":{"type":"number"},"chainId":{"type":"number"}},"required":["kind","address","nonce","chainId"]}},"required":["address","userOperations","message"]},"signatures":{"type":"object","additionalProperties":{"type":"object","properties":{"r":{"type":"string","description":"The `r` component of the signature, hex encoded."},"s":{"type":"string","description":"The `s` component of the signature, hex encoded."},"recid":{"type":"number","description":"The recovery id, returned for ECDSA signatures on networks that need it to recover the signing public key."},"encoded":{"type":"string","description":"The signature already serialized in the format the target network expects, hex encoded and ready to use directly. For EdDSA (Ed25519) networks such as Solana this is the raw 64-byte `r || s` concatenation, where `r` and `s` are each a fixed 32 bytes. It is not ASN.1/DER encoded, so no DER parsing or re-padding of the components is needed."}},"required":["r","s"]}},"transactionReference":{"type":"string"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","structured","signatures","transactionReference"],"additionalProperties":false,"title":"Dfns Smart Account Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["StellarFeeBumpTransaction"]},"innerTransaction":{"type":"string"},"transactionReference":{"type":"string"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","innerTransaction","transactionReference"],"additionalProperties":false,"title":"Stellar Fee Bump Transaction"}]},"status":{"type":"string","enum":["Pending","Executing","Signed","Confirmed","Failed","Rejected"]},"reason":{"type":"string"},"signature":{"type":"object","properties":{"r":{"type":"string","description":"The `r` component of the signature, hex encoded."},"s":{"type":"string","description":"The `s` component of the signature, hex encoded."},"recid":{"type":"number","description":"The recovery id, returned for ECDSA signatures on networks that need it to recover the signing public key."},"encoded":{"type":"string","description":"The signature already serialized in the format the target network expects, hex encoded and ready to use directly. For EdDSA (Ed25519) networks such as Solana this is the raw 64-byte `r || s` concatenation, where `r` and `s` are each a fixed 32 bytes. It is not ASN.1/DER encoded, so no DER parsing or re-padding of the components is needed."}},"required":["r","s"]},"signatures":{"type":"array","items":{"type":"object","properties":{"r":{"type":"string","description":"The `r` component of the signature, hex encoded."},"s":{"type":"string","description":"The `s` component of the signature, hex encoded."},"recid":{"type":"number","description":"The recovery id, returned for ECDSA signatures on networks that need it to recover the signing public key."},"encoded":{"type":"string","description":"The signature already serialized in the format the target network expects, hex encoded and ready to use directly. For EdDSA (Ed25519) networks such as Solana this is the raw 64-byte `r || s` concatenation, where `r` and `s` are each a fixed 32 bytes. It is not ASN.1/DER encoded, so no DER parsing or re-padding of the components is needed."}},"required":["r","s"]}},"signedData":{"type":"string"},"network":{"$ref":"#/components/schemas/Network"},"txHash":{"type":"string"},"fee":{"type":"string"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"dateRequested":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the signature was requested.","example":"2023-04-14T20:41:28.715Z"},"datePolicyResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the signature was approved by policy reviewers.","example":"2023-04-14T20:41:28.715Z"},"dateSigned":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the signature was signed.","example":"2023-04-14T20:41:28.715Z"},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the signature was confirmed on chain.","example":"2023-04-14T20:41:28.715Z"},"externalId":{"type":"string"},"details":{"type":"object","additionalProperties":{},"description":"Structured representation of the data used to construct the signature (e.g. nonce, gas parameters). Shape is blockchain specific."}},"required":["id","keyId","requester","requestBody","status","dateRequested"]},"CantonValidator":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cv-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"cv-7jeof-m584r-p35ucm37ko3cqgts"},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"network":{"type":"string","enum":["Canton","CantonDevnet","CantonTestnet"],"description":"The Canton network this validator is configured for."},"name":{"type":"string","description":"Nickname for this validator."},"kind":{"type":"string","enum":["Shared","Custom"],"description":"`Shared` if using the Dfns-hosted shared validator, `Custom` if connecting your own validator."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the validator was linked.","example":"2023-04-14T20:41:28.715Z"},"partyHint":{"type":"string","description":"Party hint used to derive the Canton party id for wallets created under this validator."}},"required":["id","orgId","network","kind","dateCreated","partyHint"]},"Permission":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"name":{"type":"string","description":"Human-readable name of the permission (role)."},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations this permission grants access to. See [Permissions List](https://docs.dfns.co/core-concepts/roles-and-permissions#list-of-permissions) for available operations."},"status":{"type":"string","enum":["Active"],"description":"Current status of the permission."},"isImmutable":{"type":"boolean","description":"Whether this permission is system-managed and cannot be modified."},"isArchived":{"type":"boolean","description":"Whether this permission has been archived (soft-deleted)."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the permission was created.","example":"2023-04-14T20:41:28.715Z"},"dateUpdated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the permission was last updated.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","name","operations","status","isImmutable","isArchived","dateCreated","dateUpdated"],"additionalProperties":false},"ChangeRequestRequester":{"type":"object","properties":{"userId":{"type":"string"},"tokenId":{"type":"string"},"appId":{"type":"string"}},"required":["userId"],"description":"The user who initiated the change request."},"Policy":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Registry:Addresses:Modify"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Permissions:Assign"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["permissionId"],"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Permissions:Assign"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Permissions:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["permissionId"],"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Permissions:Modify"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Policies:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["policyId"],"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Policies:Modify"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Registry:ContractSchemas:Modify"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Wallets:Sign"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"]},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1},"description":"Whitelisted recipient addresses"}},"required":["addresses"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the destination address *is NOT whitelisted*.","title":"TransactionRecipientWhitelist"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`"}},"required":["limit","currency"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","title":"TransactionAmountLimit"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"]},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the asset lives on."}]},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased."},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens."}},"required":["network","tid","limit"],"additionalProperties":false},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers."}},"required":["assets"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","title":"TransactionAmountLimitNominal"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200."}},"required":["limit","currency","timeframe"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit.  The aggregate amount evaluated is based only on the wallet that triggered the policy.","title":"TransactionAmountVelocity"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200."}},"required":["limit","timeframe"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","title":"TransactionCountVelocity"},{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n  \nThis template can include variables, included in brackets. The following variables are currently supported:  `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID)."},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean"},"skipUnsupportedNetwork":{"type":"boolean"},"skipUnsupportedAsset":{"type":"boolean"},"skipChainalysisFailure":{"type":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"]}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisTransactionPrescreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      },\n      \"addresses\": {\n        \"categoryIds\": []\n      },\n      \"fallbackBehaviours\": {\n        \"skipUnscreenableTransaction\": false,\n        \"skipUnsupportedNetwork\": false,\n        \"skipUnsupportedAsset\": false,\n        \"skipChainalysisFailure\": false\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`<br><br>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`<br><br>`.direct`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`<br><br>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","title":"ChainalysisTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"]},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold."},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only."},"categories":{"type":"array","items":{"type":"string","minLength":1},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only."}},"required":["ruleIds","categories"]},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"]}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n</Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","title":"EllipticTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"]},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"]}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","title":"GlobalLedgerTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"]},"configuration":{"oneOf":[{"type":"object","properties":{"vendor":{"type":"string","enum":["Notabene"]},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours)."},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days)."}},"required":["vendor"],"additionalProperties":false,"title":"TravelRuleNotabeneConfiguration"},{"type":"object","properties":{"vendor":{"type":"string","enum":["Sumsub"]},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours)."}},"required":["vendor"],"additionalProperties":false,"title":"TravelRuleSumsubConfiguration"}]}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","title":"TravelRuleTransactionPrescreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"},{"type":"object","properties":{"kind":{"type":"string","enum":["NoAction"]}},"required":["kind"],"additionalProperties":false,"description":"\n    This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n  \"action\": {\n    \"kind\": \"NoAction\"\n  }\n}\n```\n    ","title":"NoAction"}]},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Wallets:Sign"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n  \nThis template can include variables, included in brackets. The following variables are currently supported:  `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID)."},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean"},"skipUnsupportedNetwork":{"type":"boolean"},"skipUnsupportedAsset":{"type":"boolean"},"skipChainalysisFailure":{"type":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"]}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts & exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisTransactionPrescreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      },\n      \"fallbackBehaviours\": {\n        \"skipUnscreenableTransaction\": false,\n        \"skipUnsupportedNetwork\": false,\n        \"skipUnsupportedAsset\": false,\n        \"skipChainalysisFailure\": false\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","title":"ChainalysisTransactionScreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["NoAction"]}},"required":["kind"],"additionalProperties":false,"description":"\n    This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n  \"action\": {\n    \"kind\": \"NoAction\"\n  }\n}\n```\n    ","title":"NoAction"}]},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Wallets:IncomingTransaction"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]}},"required":["alerts","exposures"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts & direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisQuarantineScreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`<br><br>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`<br><br>`.direct`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","title":"ChainalysisQuarantineScreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Vaults:ReleaseQuarantine"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Vaults:CreateLock"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"Vaults:ReplaceLock"},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Archived"]},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"activityKind":{"type":"string","enum":["UserAction"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"]},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them."}},"required":["userActionKinds"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["id","name","status","activityKind","rule","action"],"additionalProperties":false,"title":"UserAction"}]},"TransferRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^xfr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Transfer id.","example":"xfr-20g4k-nsdpo-mg6arrifgvid4orn"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The source wallet for this tranfer.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The blockchain network this transfer is on."}]},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"to":{"type":"string","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag (supported networks only)."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer. All EVM compatible networks and Bitcoin support `priority`. Not supported for other networks. It uses the [estimate fees](https://docs.dfns.co/api-reference/networks/estimate-fees) API to calculate the transfer fees. When not specified, defaults to `Standard` priority."},"createDestinationAccount":{"type":"boolean","description":"Whether to create the destination account on chains that require account creation (e.g., Stellar). Only valid for chains that require the receiver account to exist before transfer."},"offer":{"type":"boolean","description":"Optional field for Canton, if true it will create a transfer offer."},"expiresAt":{"type":"string","format":"date-time","description":"Optional field for Canton, especially useful in the context of offers"},"useDurableNonce":{"type":"boolean","description":"Optional Solana-only flag. When `true` the SOL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). Use this for offline-signing flows where the construct → broadcast gap may exceed 90 seconds. The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"structured":{"type":"object","additionalProperties":{}}},"required":["kind","to","amount"],"additionalProperties":false,"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-20 contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"structured":{"type":"object","additionalProperties":{}}},"required":["kind","contract","to","amount"],"additionalProperties":false,"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Aip21"]},"metadata":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The asset metadata address. "},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","metadata","to","amount"],"additionalProperties":false,"description":"Transfer Aptos fungible asset that implement the [AIP-21 specification](https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-21.md).","title":"Aptos Fungible Asset (AIP-21)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string","pattern":"^\\d+$","description":"The token asset id. "},"to":{"type":"string","pattern":"^[A-Z0-9]{58}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","assetId","to","amount"],"additionalProperties":false,"description":"Transfer Algorand standard assets, or [ASAs](https://developer.algorand.org/docs/get-details/asa/).","title":"Algorand Standard Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asset"]},"assetId":{"type":"string","description":"The token asset id. "},"to":{"type":"string","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","assetId","to","amount"],"additionalProperties":false,"description":"Transfer Cardano assets following [Mary update](https://docs.cardano.org/about-cardano/evolution/upgrades/mary)","title":"Cardano Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cip56"]},"instrumentAdmin":{"type":"string","pattern":"^[a-zA-Z0-9-_]*::1220[a-f0-9]{64}$","description":"The instrument admin address."},"instrumentId":{"type":"string","description":"The instrument id."},"to":{"type":"string","pattern":"^[a-zA-Z0-9-_]*::1220[a-f0-9]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo, recorded as the transfer reason on the ledger."},"offer":{"type":"boolean","description":"If true it will create a transfer offer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","instrumentAdmin","instrumentId","to","amount"],"additionalProperties":false,"description":"Transfer standard tokens that implement the [CIP-56 specification](https://github.com/global-synchronizer-foundation/cips/blob/main/cip-0056/cip-0056.md).","title":"Canton Standard Token (CIP-56)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis2"]},"to":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{50}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"tokenAddress":{"type":"string","description":"The token address following (https://proposals.concordium.com/CIS/cis-2.html#token-address)."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","amount","tokenAddress"],"additionalProperties":false,"description":"Transfer tokens that implement the [CIS-2 specification](https://proposals.concordium.software/CIS/cis-2.html).","title":"CIS-2 Standard"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis7"]},"to":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{50}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"tokenId":{"type":"string","description":"The Cis7 token identifier."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","amount","tokenId"],"additionalProperties":false,"description":"Transfer Concordium protocol level tokens. (https://proposals.concordium.com/CIS/cis-7.html#cis-7-protocol-level-tokens-plts)","title":"Concordium Protocol Level Token (CIS-7)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Coin"]},"coin":{"type":"string","description":"The coin identifier."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","coin","to","amount"],"additionalProperties":false,"description":"Transfer Sui fungible assets that implement [coin standard](https://docs.sui.io/standards/coin).","title":"Sui Coin"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc721"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-721 contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address."},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token to transfer."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","tokenId"],"additionalProperties":false,"description":"Transfer non-fungible tokens that implement the [ERC-721 specification](https://eips.ethereum.org/EIPS/eip-721)","title":"EVM Non Fungible Token (ERC-721)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc7984"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-7984 confidential token contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","amount"],"additionalProperties":false,"description":"Transfer confidential tokens that implement the [ERC-7984 specification](https://eips.ethereum.org/EIPS/eip-7984). The transfer amount is encrypted on-chain using Fully Homomorphic Encryption (FHE).","title":"EVM Confidential Token (ERC-7984)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hip17"]},"tokenId":{"type":"string","description":"The token to transfer."},"serialNumber":{"type":"string","pattern":"^\\d+$"},"to":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|0\\.0\\.(\\d+|[0-9a-fA-F]{40}|[0-9a-fA-F]{64,}))$","description":"The destination address."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","tokenId","serialNumber","to"],"additionalProperties":false,"description":"","title":"Hedera Non-Fungible Token (HIP-17)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hts"]},"tokenId":{"type":"string","description":"The token to transfer."},"to":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|0\\.0\\.(\\d+|[0-9a-fA-F]{40}|[0-9a-fA-F]{64,}))$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","tokenId","to","amount"],"additionalProperties":false,"description":"","title":"Hedera Tokens (HTS)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Iou"]},"currency":{"type":"string","description":"The IOU currency code."},"issuer":{"type":"string","pattern":"^r[1-9A-HJ-NP-Za-km-z]{24,34}$","description":"The IOU issuer address."},"to":{"type":"string","pattern":"^r[1-9A-HJ-NP-Za-km-z]{24,34}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","currency","issuer","to","amount"],"additionalProperties":false,"description":"Transfer XRPL IOU tokens with specified currency and issuer. (https://xrpl.org/docs/concepts/tokens/fungible-tokens/trust-line-tokens)","title":"XRPL IOU Token"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The asset issuer address."},"assetCode":{"type":"string","description":"The asset code."},"to":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","issuer","assetCode","to","amount"],"additionalProperties":false,"description":"Transfer classic [Stellar Assets](https://developers.stellar.org/docs/issuing-assets/anatomy-of-an-asset). They all implement the [SEP-41 token interface](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0041.md).","title":"Stellar Classic Assets (SEP-41)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Snip2"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The SNIP-2 (ERC-20-like) contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","amount"],"additionalProperties":false,"description":"Transfer fungible tokens that implement the [SNIP-2 (ERC-20-like) specification](https://github.com/starknet-io/SNIPs/blob/ea46a8777d8c8d53a43f45b7beb1abcc301a1a69/SNIPS/snip-2.md).","title":"Starknet SNIP-2 (ERC-20 like)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Snip3"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The SNIP-3 (ERC-721) contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token to transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","tokenId"],"additionalProperties":false,"description":"Transfer non-fungible tokens that implement the [SNIP-3 (ERC-721-like) specification](https://github.com/starknet-io/SNIPs/blob/ea46a8777d8c8d53a43f45b7beb1abcc301a1a69/SNIPS/snip-3.md)","title":"Starknet SNIP-3 (ERC-721-like)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"to":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The mint account address."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"createDestinationAccount":{"type":"boolean","description":"If `true`, pay to create the associated token account for the recipient if it doesn't exist. Defaults to `false`."},"useDurableNonce":{"type":"boolean","description":"Optional. When `true` the SPL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"structured":{"type":"object","additionalProperties":{}}},"required":["kind","to","amount","mint"],"additionalProperties":false,"title":"Solana Program Library Token (SPL and SPL 2022)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"to":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The destination address."},"master":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The Jetton master contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","master","amount"],"additionalProperties":false,"description":"Transfer [Jetton](https://github.com/ton-blockchain/TEPs/blob/master/text/0074-jettons-standard.md) tokens.","title":"TON Jetton (TEP-74)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token ID."},"to":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","tokenId","to","amount"],"additionalProperties":false,"description":"Transfer TRON's TRC-10 fungible tokens","title":"TRON Native Fungible Token (TRC-10)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc20"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"to":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","amount"],"additionalProperties":false,"description":"Transfer fungible tokens that implement the TRC-20 smart contract specification.","title":"TRON Smart Contract Fungible Token (TRC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc721"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"to":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The destination address."},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token to transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","tokenId"],"additionalProperties":false,"description":"Transfer non-fungible tokens that implement the TRC-721 smart contract specification.","title":"TRON Non Fungible Token (TRC-721)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Xls33"]},"issuanceId":{"type":"string","description":"The XLS-33 issuance identifier."},"to":{"type":"string","pattern":"^r[1-9A-HJ-NP-Za-km-z]{24,34}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","issuanceId","to","amount"],"additionalProperties":false,"description":"Transfer XRPL XLS-33 Token with specified issuance ID. (https://xrpl.org/docs/concepts/tokens/fungible-tokens/multi-purpose-tokens","title":"XRPL XLS-33 Token"}]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"],"description":"Additional metadata about the transfered asset."},"status":{"type":"string","enum":["Pending","Executing","Broadcasted","Confirmed","Failed","Rejected"],"description":"Transfer status.\n\n| Status | Definition |\n| --- | --- |\n| `Pending` | The request is pending approval due to a policy applied to the wallet. |\n| `Executing` | The request is approved and is in the process of being executed. note this status is only set for a short time between pending and broadcasted. |\n| `Broadcasted` | The transaction has been successfully written to the mempool. |\n| `Confirmed` | The transaction has been confirmed on-chain by our indexing pipeline. |\n| `Failed` | Indicates either system failure to complete the request or the transaction failed on chain. |\n| `Rejected` | The request has been rejected by a policy approval action. |"},"reason":{"type":"string","description":"The reason for a failed transfer."},"debugTrace":{"description":"Raw blockchain node diagnostics, when available. Omitted when the diagnostic or response size limit is exceeded."},"txHash":{"type":"string","description":"The blockchain transaction hash for this transfer."},"fee":{"type":"string","description":"The fee paid for this transfer in minimum denomination."},"dateRequested":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transfer was requested.","example":"2023-04-14T20:41:28.715Z"},"datePolicyResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transfer was approved by policy reviewers.","example":"2023-04-14T20:41:28.715Z"},"dateBroadcasted":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transfer was broadcasted to the blockchain.","example":"2023-04-14T20:41:28.715Z"},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transfer was confirmed on chain.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The id of the approval request if this transfer triggered a policy.","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"externalId":{"type":"string","description":"The external id provided at transfer creation time."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The fee sponsor id used to pay for the transfer fees.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"replacementId":{"type":"string","description":"The id of the replacement transaction (cancel or speed-up) issued for this transfer."},"details":{"type":"object","additionalProperties":{},"description":"Structured representation of the data used to construct the signature (e.g. nonce, gas parameters). Shape is blockchain specific."}},"required":["id","walletId","network","requester","requestBody","metadata","status","dateRequested"]},"TransactionRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^tx-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Transaction id.","example":"tx-583hu-sp2p7-slvb9nqpa3hd8bus"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"network":{"$ref":"#/components/schemas/Network"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Transaction"]},"transaction":{"anyOf":[{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},{"type":"object","properties":{}}],"description":"A JSON transaction object (recommended for EVM and other compatible networks) or an unsigned hex-encoded transaction."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","transaction"],"additionalProperties":false,"description":"Signs an unsigned transaction and broadcasts it to chain. This is the recommended transaction `kind` for EVM networks — use it instead of the deprecated `Evm` and `Eip1559` kinds. It accepts a JSON transaction object (type 0 legacy, 2 EIP-1559, or 4 EIP-7702) as well as a hex-encoded raw transaction.\nFor EVM transactions, you may use JSON objects:\n\n| Field                | Description                                                                                                                                                                                                                         | Type - Optional              |\n|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|\n| type                 | Ethereum transaction type. 0 for legacy transaction; 2 for EIP-1559 transaction; 4 for EIP-7702 transaction. Default is 2 if undefined.                                                                                             | Integer (optional)           |\n| to                   | The destination address or target contract. Leave undefined when the transaction is a contract deployment.                                                                                                                          | String (optional)            |\n| value                | The amount of native tokens to transfer in minimum denomination.                                                                                                                                                                    | String (optional)            |\n| data                 | ABI encoded function call data in hex format. Can also be the encoded smart contract data when the transaction is a contract deployment.                                                                                            | String (optional)            |\n| nonce                | The transaction number to guarantee idempotency. If omitted, it will be provided automatically. Note the same nonce can be submitted multiple times with a higher maxFeePerGas to \"overwrite\" existing transactions in the mempool. | Integer or String (optional) |\n| gasLimit             | The maximum amount of gas that can be spent for executing the transaction. If omitted, it will be calculated automatically.                                                                                                         | String (optional)            |\n| gasPrice             | The amount of per unit gas. Only valid for a type 0 legacy transaction. If omitted, it will be calculated automatically.                                                                                                            | String (optional)            |\n| maxFeePerGas         | The maximum amount of per unit gas willing to be paid for the transaction. Valid for type 2 and type 4 transactions. If omitted, it will be calculated automatically.                                                               | String (optional)            |\n| maxPriorityFeePerGas | The maximum amount of per unit gas to be included as a tip to the validator. Valid for type 2 and type 4 transactions. If omitted, it will be calculated automatically.                                                             | String (optional)            |\n| authorizationList    | A list that indicates what code the signer of each authorization desires to execute in the context of their EOA. Only valid for type 4 transaction.                                                                                 | Authorization (optional)     |\n\nFor Starknet transactions, you may use invocation request objects (https://github.com/starkware-libs/starknet-specs/blob/v0.8.1/api/starknet_api_openrpc.json#L2621):\n\n| Field                         | Description                                                                                         | Type - Optional                  |\n|-------------------------------|-----------------------------------------------------------------------------------------------------|----------------------------------|\n| calldata                      | **Array** of encoded function call parameters                                                       | **Array of Strings** (required)  |\n| nonce                         | Transaction nonce in hex format                                                                     | String (required)                |\n| version                       | Transaction version in hex format. Typically \"0x3\" for current transactions                         | String (required)                |\n| resourceBounds                | Gas bounds for L1, L2, and L1 data gas                                                              | Object (required)                |\n| ↳ resourceBounds.l1Gas        | L1 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l2Gas        | L2 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l1DataGas    | L1 data gas configuration with maxAmount and maxPricePerUnit                                        | Object (required)                |\n| tip                           | Transaction tip in hex format. Typically \"0x0\"                                                      | String (required)                |\n| paymasterData                 | Paymaster data array                                                                                | Array of Strings (required)      |\n| accountDeploymentData         | Account deployment data array                                                                       | Array of Strings (required)      |\n| nonceDataAvailabilityMode     | Data availability mode for nonce. Typically \"L1\" for now                                            | String (required)                |\n| feeDataAvailabilityMode       | Data availability mode for fee. Typically \"L1\" for now                                              | String (required)                |\n\nFor Concordium transactions, you may use JSON objects (from https://github.com/Concordium/concordium-node-sdk-js/blob/sdk/12.0.0-alpha.3/packages/sdk/src/transactions/Transaction.ts#L102)\n\n| Field                            | Description                                                                                                                                                  | Type - Optional\n|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|\n| Header                           | Transaction header for the intermediary state of account transactions, i.e. prior to being signing.                                                          | Object (required)               |\n| ↳ Header.executionEnergyAmount   | The destination address or target contract. Leave undefined when the transaction is a contract deployment.                                                   | String/Number/BigInt (required) |\n| ↳ Header.numSignatures           | The number of signatures the transaction can hold. If \"undefined\", this will be defined at the time of signing                                               | Integer (optional)              |\n| ↳ Header.sender                  | The account address that is source of this transaction                                                                                                       | String (optional)               |\n| ↳ Header.nonce                   | The account nonce                                                                                                                                            | String/Number/BigInt (optional) |\n| ↳ Header.expiry                  | expiration of the transaction                                                                                                                                | Integer (optional)              |\n| Payload                          | The transaction account payload in JSON format (https://github.com/Concordium/concordium-node-sdk-js/blob/main/packages/sdk/src/accountTransactions.ts#L646) | Object (required)               |\n\n\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"to\": \"0x00fb58432ef9d418bf6688bcf0a226d2fcaa18e2\",\n    \"data\": \"0x40d097c3000000000000000000000000d2f77f85a50cdd650ca562f3a180284e1d5b4934\",\n    \"maxFeePerGas\": \"1626000000000\",\n    \"maxPriorityFeePerGas\": \"1332000000000\"\n  }\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"type\": \"INVOKE\",\n    \"calldata\": [\n      \"1\",\n      \"2009894490435840142178314390393166646092438090257831307886760648929397478285\",\n      \"232670485425082704932579856502088130646006032362877466777181098476241604910\",\n      \"3\",\n      \"296727860213112272332383824629975240127004024814636931420022890499591637514\",\n      \"1\",\n      \"0\"\n    ],\n    \"nonce\": \"0x51\",\n    \"version\": \"0x3\",\n    \"resourceBounds\": {\n      \"l1Gas\": { \"maxAmount\": \"0x0\", \"maxPricePerUnit\": \"0x239a01ff6e6c\" },\n      \"l2Gas\": { \"maxAmount\": \"0x1694a0\", \"maxPricePerUnit\": \"0x10c388d00\" },\n      \"l1DataGas\": { \"maxAmount\": \"0x120\", \"maxPricePerUnit\": \"0x98e8\" }\n    },\n    \"tip\": \"0x0\",\n    \"paymasterData\": [],\n    \"accountDeploymentData\": [],\n    \"nonceDataAvailabilityMode\": \"L1\",\n    \"feeDataAvailabilityMode\": \"L1\",\n  }\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"header\": {\n      \"sender\": undefined,\n      \"nonce\": undefined,\n      \"expiry\": undefined,\n      \"executionEnergyAmount\": 300\n    },\n    \"payload\": {\n      \"type\": \"transferWithMemo\",\n      \"toAddress\": \"4HhAcToZs6rtxGcgsBRS3VcjeAECPTTSTFVUKS6rBSVEZAPL6d\",\n      \"memo\": \"000968656c6c6f20636364\",\n      \"amount\": \"1\"\n    }\n  }\n}\n```\n","title":"Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Psbt"]},"psbt":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The hex encoded PSBT."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","psbt"],"additionalProperties":false,"description":"Signs a partially signed Bitcoin / Litecoin transaction.","title":"PSBT"},{"type":"object","properties":{"kind":{"type":"string","enum":["SignDocDirect"]},"signDoc":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","signDoc"],"additionalProperties":false,"description":"Signs an unsigned transaction using [sign mode direct](https://docs.cosmos.network/main/learn/advanced/transactions#sign_mode_direct-preferred).","title":"SignDocDirect"},{"type":"object","properties":{"kind":{"type":"string","enum":["UserOperations"]},"userOperations":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address or target contract."},"value":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"data":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"ABI encoded function call data in hex format."}},"required":["to"]}},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"A fee sponsor id to sponsor the transaction fee by another wallet. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","userOperations","feeSponsorId"],"additionalProperties":false,"description":"Signs one or more user operations and broadcasts to chain using a sponsored transaction. Used for invoking arbitrary smart contract calls, including batch operations, with a [fee sponsor](https://docs.dfns.co/features/fee-sponsors).\n\nCan only be used with a fee sponsor. Unsponsored user operations are not supported.","title":"EVM Sponsored transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["FunctionCall"]},"call":{"type":"object","properties":{},"description":"Function call arguments"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","call"],"additionalProperties":false,"description":"Calls an on-chain function that mutates state.","title":"Function Call"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransferPreapproval"]},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Enable canton coin auto approval.","title":"Canton Transfer Preapproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Evm"]},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"value":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"data":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"nonce":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}],"description":"The current nonce of the signer EOA."},"gasLimit":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Deprecated. Only support type 2 transactions. Use the new JSON format with `Transaction` kind instead which has support for legacy and type 4 transactions.","title":"<Deprecated> EVM Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip1559"]},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"value":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"data":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"nonce":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"gasLimit":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"maxFeePerGas":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"maxPriorityFeePerGas":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Deprecated. Only support type 2 transactions. Use the new JSON format with `Transaction` kind instead which has support for legacy and type 4 transactions.","title":"<Deprecated> EVM EIP-1559"},{"type":"object","properties":{"kind":{"type":"string","enum":["CreateSolanaNonceAccounts"]},"nonceAuthority":{"type":"string","description":"Optional Solana address. The wallet that will own the nonce accounts (be their on-chain authority). When omitted, the URL wallet bootstraps for itself. When set, the URL wallet pays the rent and signs the bootstrap, but the resulting accounts' authority is this address — used to bootstrap on behalf of an offline wallet that can't sign within the 90-second blockhash window."},"count":{"type":"integer","exclusiveMinimum":0,"maximum":8,"description":"Optional. Number of nonce accounts to create in one bootstrap transaction (1–8; capped by Solana max-tx-size budget). Defaults to 1."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"Priority for the bootstrap fee. Defaults to Standard."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Creates Solana durable-nonce accounts owned by the calling wallet (or by `nonceAuthority` for cross-bootstrap). Pre-populates the wallet's nonce account pool so subsequent transfers can use `useDurableNonce: true`.","title":"Create Solana Nonce Accounts"},{"type":"object","properties":{"kind":{"type":"string","enum":["AcceptInboundAsset"]},"issuer":{"type":"string","description":"Stellar (G-address) or XRPL (r-address) issuer of the asset."},"assetCode":{"type":"string","description":"Stellar asset code (1–12 ASCII alphanumeric chars)."},"currency":{"type":"string","description":"XRPL IOU currency code."},"assetId":{"type":"string","pattern":"^\\d+$","description":"Algorand Standard Asset (ASA) id."},"tokenId":{"type":"string","description":"Hedera token entity id, e.g. \"0.0.456858\"."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Accept a non-native asset into the wallet on chains that gate inbound holding at the protocol level. Maps to Stellar `ChangeTrust`, XRPL `TrustSet`, Algorand asset opt-in (a 0-amount asset transfer to self), Hedera `TokenAssociate`, or Canton `TransferPreapproval`. The body fields differ per network — see the field descriptions.","title":"AcceptInboundAsset"},{"type":"object","properties":{"kind":{"type":"string","enum":["SolanaCctpBurn"]},"usdcMint":{"type":"string","description":"Source USDC SPL mint address."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount to burn (6 decimals)."},"destinationDomain":{"type":"integer","description":"CCTP destination domain."},"mintRecipient":{"type":"string","description":"Destination recipient as a bytes32 0x-hex value (EVM address left-padded)."},"maxFee":{"type":"string","pattern":"^\\d+$","description":"Max fee Circle may deduct from the burn."},"minFinalityThreshold":{"type":"integer","description":"CCTP min finality threshold (1000 Fast, 2000 Standard)."},"useDurableNonce":{"type":"boolean","description":"Bind the burn to a durable nonce instead of a recent blockhash."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Fee sponsor that pays the burn network fee and the ephemeral event-account rent.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","usdcMint","amount","destinationDomain","mintRecipient","maxFee","minFinalityThreshold"],"additionalProperties":false,"description":"Builds and broadcasts Circle's CCTP v2 depositForBurnWithHook on a Solana source. bik constructs the instruction (reserving a durable nonce in-band when requested) and co-signs the ephemeral event account; the wallet's MPC key signs the owner.","title":"Solana CCTP Burn"},{"type":"object","properties":{"kind":{"type":"string","enum":["StellarCctpApprove"]},"issuer":{"type":"string","description":"USDC SEP-41 issuer (G… account)."},"assetCode":{"type":"string","description":"USDC asset code."},"amount":{"type":"string","pattern":"^\\d+$","description":"Allowance for the CCTP TokenMessengerMinter, in Stellar-local 7-decimal units."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","issuer","assetCode","amount"],"additionalProperties":false,"description":"SEP-41 approve of Circle's CCTP TokenMessengerMinter as a USDC spender on a Stellar source — required before StellarCctpBurn, which pulls the funds via transfer_from. bik builds and simulates the Soroban invocation; the wallet signs the transaction.","title":"Stellar CCTP Approve"},{"type":"object","properties":{"kind":{"type":"string","enum":["StellarCctpBurn"]},"issuer":{"type":"string","description":"USDC SEP-41 issuer (G… account)."},"assetCode":{"type":"string","description":"USDC asset code."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount to burn, in Stellar-local 7-decimal units."},"destinationDomain":{"type":"integer","description":"CCTP destination domain."},"mintRecipient":{"type":"string","description":"Destination recipient as a bytes32 0x-hex value (EVM address left-padded)."},"maxFee":{"type":"string","pattern":"^\\d+$","description":"Max fee Circle may deduct from the burn, in 7-decimal units."},"minFinalityThreshold":{"type":"integer","description":"CCTP min finality threshold (2000 Standard; Stellar has no Fast tier)."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","issuer","assetCode","amount","destinationDomain","mintRecipient","maxFee","minFinalityThreshold"],"additionalProperties":false,"description":"Builds and broadcasts Circle's CCTP v2 deposit_for_burn_with_hook on a Stellar source. Requires a prior StellarCctpApprove. bik builds and simulates the Soroban invocation; the wallet signs the transaction.","title":"Stellar CCTP Burn"},{"type":"object","properties":{"kind":{"type":"string","enum":["StellarCctpClaim"]},"message":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The attested CCTP message, hex-encoded (from Circle IRIS)."},"attestation":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"Circle's attestation over the message, hex-encoded."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","message","attestation"],"additionalProperties":false,"description":"Claims an attested inbound CCTP mint on a Stellar destination by calling mint_and_forward on Circle's CctpForwarder — Circle's Forwarding Service does not deliver to Stellar. The call is permissionless; this wallet only pays the Soroban fee, and the USDC is forwarded to the recipient encoded in the burn's hook.","title":"Stellar CCTP Claim"},{"type":"object","properties":{"kind":{"type":"string","enum":["SettleOffer"]},"txHash":{"type":"string"},"decision":{"type":"string","enum":["Accept","Reject"]},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","txHash","decision"],"additionalProperties":false,"description":"Transaction for accepting or refusing a transfer offer.","title":"Offer Settlement"},{"type":"object","properties":{"kind":{"type":"string","enum":["ActivateAccount"]},"args":{"type":"object","properties":{}},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Transaction for activating an account after creation.","title":"Account Activation"},{"type":"object","properties":{"kind":{"type":"string","enum":["CancelTransaction"]},"txHash":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"signedTx":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","signedTx"],"additionalProperties":false,"description":"Transaction cancelling a previously sent transaction.","title":"Transaction Cancellation"},{"type":"object","properties":{"kind":{"type":"string","enum":["SpeedUpTransaction"]},"txHash":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"signedTx":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","txHash","signedTx"],"additionalProperties":false,"description":"Transaction speeding up a previously sent transaction.","title":"Transaction Speed Up"}]},"status":{"type":"string","enum":["Pending","Executing","Broadcasted","Confirmed","Failed","Rejected"]},"reason":{"type":"string","description":"The reason for a failed transaction."},"debugTrace":{"description":"Raw blockchain node diagnostics, when available. Omitted when the diagnostic or response size limit is exceeded."},"txHash":{"type":"string"},"fee":{"type":"string"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"dateRequested":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transaction was requested.","example":"2023-04-14T20:41:28.715Z"},"datePolicyResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transaction was approved by policy reviewers.","example":"2023-04-14T20:41:28.715Z"},"dateBroadcasted":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transaction was broadcasted to the blockchain.","example":"2023-04-14T20:41:28.715Z"},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the transaction was confirmed on chain.","example":"2023-04-14T20:41:28.715Z"},"externalId":{"type":"string"},"replacementId":{"type":"string","description":"The id of the replacement transaction (cancel or speed-up) issued for this transaction."},"details":{"type":"object","additionalProperties":{},"description":"Structured representation of the data used to construct the signature (e.g. nonce, gas parameters). Shape is blockchain specific."}},"required":["id","walletId","network","requester","requestBody","status","dateRequested"]},"Swap":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Swap id.","example":"swap-5ch70-fc3n7-3k2cbo8d7q5lnts4"},"quoteId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the quote this swap is based on.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"reference":{"type":["string","null"],"description":"Optional user-defined reference for this Swap."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"status":{"type":"string","enum":["PendingPolicyApproval","InProgress","Completed","Failed","Rejected"],"description":"Swap status."},"provider":{"type":"string","enum":["UniswapX","UniswapClassic","CircleCctp"],"description":"Swap provider."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor paying network fees for this swap, if any.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"quotedSourceAsset":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}],"description":"The source asset for this swap transaction."},"quotedTargetAsset":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}],"description":"The target asset for this swap transaction."},"slippageBps":{"type":"number","description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you are willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the swap was initiated."},"requestBody":{"anyOf":[{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapClassic"]},"quoteId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Quote to use for this swap.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"reference":{"type":"string","description":"An optional reference for this Swap."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this swap. When set, the swap transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","quoteId","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapClassic Swap Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapX"]},"quoteId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Quote to use for this swap.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"reference":{"type":"string","description":"An optional reference for this Swap."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this swap. When set, the swap transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","quoteId","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapX Swap Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["CircleCctp"]},"quoteId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Quote to use for this swap.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"reference":{"type":"string","description":"An optional reference for this Swap."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this swap. When set, the swap transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"feeToleranceBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The maximum fee you will accept for this CCTP transfer, in [basis points](https://en.wikipedia.org/wiki/Basis_point) (BPS) of the amount. CCTP is burn-and-mint with no price slippage; this caps the bridge/forwarding fee — which varies with chain congestion and Fast vs Standard speed — so the burn does not revert if the fee rises. One basis point equals 0.01%."}},"required":["provider","quoteId","walletId","sourceAsset","targetAsset","feeToleranceBps"],"title":"CircleCctp Swap Request"}]},{"type":"object","properties":{}}],"description":"The full request used for initiating this swap."},"requester":{"$ref":"#/components/schemas/Requester"},"failureReason":{"type":"string","description":"The failure reason, if any. Only present when status is Failed."},"protocolStatus":{"type":"string","description":"Provider-specific intermediate state, only set while `status` is InProgress. Values are opaque strings — clients map them to progress bars, labels or icons as needed. For CCTP one of: `signing-permit`, `approving-source`, `burning-source`, `awaiting-source-finality`, `awaiting-attestation`, `awaiting-forwarder`, `claiming-destination`. Undefined for providers without intermediate sub-states."}},"required":["id","quoteId","reference","walletId","targetWalletId","status","provider","quotedSourceAsset","quotedTargetAsset","slippageBps","dateCreated","requestBody","requester"],"example":{"id":"swap-6a3ku-bn8d7-8u5rs1oukojms7k8","quoteId":"swapQuote-3hgv4-q8tbf-8v2ajmrbmg6m4i9t","reference":null,"walletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","targetWalletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","status":"PendingPolicyApproval","provider":"UniswapClassic","quotedSourceAsset":{"kind":"Native","amount":"10000000000","metadata":{"network":"EthereumSepolia","name":"Ethereum","symbol":"SepoliaETH","decimals":18,"tid":"native:eth"}},"quotedTargetAsset":{"kind":"Erc20","contract":"0xda0be7efd234295395d4204d0df4358339b57b27","amount":"6467571553831928182","metadata":{"network":"EthereumSepolia","name":"Test","symbol":"Test","decimals":18,"tid":"erc20:0xda0be7efd234295395d4204d0df4358339b57b27"}},"slippageBps":100,"dateCreated":"2025-09-11T10:57:55.758Z","requestBody":{"quoteId":"swapQuote-3hgv4-q8tbf-8v2ajmrbmg6m4i9t","walletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","targetWalletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","provider":"UniswapClassic","slippageBps":100,"sourceAsset":{"kind":"Native","amount":"10000000000"},"targetAsset":{"kind":"Erc20","contract":"0xda0be7efd234295395d4204d0df4358339b57b27","amount":"653003161"}},"requester":{"userId":"us-48r5q-eshfg-9pmr2lo6bmpr4i4i","tokenId":"to-4etah-smoal-9n3rmhul4dpaueg5"}}},"WalletHistoryEvent":{"oneOf":[{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["NativeTransfer"]},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"liquidityPool":{"type":"string"},"balanceId":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","value","symbol","decimals"],"title":"Native Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Aip21Transfer"]},"metadataAddress":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","metadataAddress","from","to","value"],"title":"Aptos Fungible Asset (AIP-21) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["AsaTransfer"]},"assetId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"optIn":{"type":"boolean"},"optOut":{"type":"boolean"},"clawback":{"type":"boolean"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","assetId","from","to","value"],"title":"Algorand Standard Asset Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["AssetTransfer"]},"assetId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","assetId","value"],"title":"Cardano Asset Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Cip56Transfer"]},"instrumentId":{"type":"string"},"instrumentAdmin":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","instrumentId","instrumentAdmin","from","to","value"],"title":"Canton Standard Token (CIP-56) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["CoinTransfer"]},"coin":{"type":"string"},"from":{"type":"string"},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","coin","from","value"],"title":"Sui Coin Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Cis2Transfer"]},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"tokenAddress":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","value","tokenAddress"],"title":"Concordium CIS2 Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Cis7Transfer"]},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"tokenId":{"type":"string"},"memo":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","value","tokenId"],"title":"Concordium CIS7 Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Erc20Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","decimals"],"title":"EVM Fungible Token (ERC-20) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Erc721Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId"],"title":"EVM Non Fungible Token (ERC-721) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Erc7984Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","decimals"],"title":"EVM Confidential Token (ERC-7984) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["HederaErc20Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"},"evmTxHash":{"type":"string","description":"EVM keccak256 hash of the HIP-410 inner tx. Absent on legacy-migrated rows."},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"decimals":{"type":"number","description":"@deprecated use metadata.asset.decimals instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value","decimals"],"title":"Hedera EVM Fungible Token (ERC-20) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["HederaErc721Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"},"evmTxHash":{"type":"string","description":"EVM keccak256 hash of the HIP-410 inner tx. Absent on legacy-migrated rows."},"symbol":{"type":"string","description":"@deprecated use metadata.asset.symbol instead"},"verified":{"type":"boolean","description":"@deprecated use metadata.asset.verified instead"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId"],"title":"Hedera EVM Non Fungible Token (ERC-721) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Hip17Transfer"]},"tokenId":{"type":"string"},"serialNumber":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","tokenId","serialNumber"],"title":"HIP17 Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["HtsTransfer"]},"tokenId":{"type":"string"},"froms":{"type":"array","items":{"type":"string"}},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"},"transactionId":{"type":"string"},"evmTxHash":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","froms","tos","value"],"title":"HTS Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["IouTransfer"]},"currency":{"type":"string"},"issuer":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","currency","issuer","value"],"title":"XRPL IOU Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["LockedCoinTransfer"]},"coin":{"type":"string"},"from":{"type":"string"},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","coin","from","value"],"title":"Locked Coin Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Xls33Transfer"]},"issuanceId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","issuanceId","value"],"title":"XRPL XLS-33 Token Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Sep41Transfer"]},"issuer":{"type":"string"},"assetCode":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"},"liquidityPool":{"type":"string"},"balanceId":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","issuer","assetCode","from","to","value"],"title":"Stellar Classic Assets (SEP-41) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Snip2Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value"],"title":"Snip2 Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Snip3Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId"],"title":"Snip3 Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["SplTransfer","Spl2022Transfer"]},"from":{"type":"string"},"to":{"type":"string"},"mint":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","mint","value"],"title":"Solana Program Library Token (SPL and SPL 2022) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Tep74Transfer"]},"master":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"},"memo":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","master","from","value"],"title":"TON Jetton (TEP-74) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Trc10Transfer"]},"tokenId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","tokenId","from","to","value"],"title":"TRON Native Fungible Token (TRC-10) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Trc20Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","value"],"title":"TRON Smart Contract Fungible Token (TRC-20) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["Trc721Transfer"]},"contract":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"tokenId":{"type":"string"},"fee":{"type":"string"}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","contract","from","to","tokenId"],"title":"TRON Non Fungible Token (TRC-721) Transfer"},{"type":"object","properties":{"walletId":{"type":"string"},"direction":{"type":"string","enum":["In","Out"]},"network":{"$ref":"#/components/schemas/Network"},"blockNumber":{"type":"number"},"txHash":{"type":"string"},"index":{"type":"string"},"timestamp":{"type":"string"},"status":{"type":"string","enum":["Included","Confirmed"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}},"fee":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"kind":{"type":"string","enum":["UtxoTransfer"]},"assetId":{"type":"string","description":"Only set for Cardano asset transfers."},"froms":{"type":"array","items":{"type":"string"}},"tos":{"type":"array","items":{"type":"string"}},"value":{"type":"string"},"fee":{"type":"string"},"outputs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"address":{"type":"string"},"value":{"type":"string"}},"required":["index","address","value"]},"description":"Outbound transfers only: per-recipient outputs of the transaction, change excluded."}},"required":["walletId","direction","network","blockNumber","txHash","timestamp","status","metadata","kind","froms","tos","value"],"title":"UTXO Transfer"}],"example":{"kind":"Erc20Transfer","walletId":"wa-1f04s-lqc9q-xxxxxxxxxxxxxxxx","network":"Ethereum","direction":"Out","blockNumber":19036906,"timestamp":"2024-01-18T23:03:59.000Z","status":"Confirmed","txHash":"0x8e88793607610a83798eb5ec6dde861f3e459c7e4a22e78b0d2e675b86d0d1e7","index":"134","contract":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","from":"0xea09cf8a006493566f8a8fd3d0b32ebff5939d6a","to":"0xc42754e6f79f15082613b2b4ebead83dcf8116b6","value":"1000000","decimals":6,"fee":"1542993669053672","metadata":{"asset":{"symbol":"USDC","decimals":6,"verified":true},"fee":{"symbol":"ETH","decimals":18,"verified":true}}}},"VaultReleaseQuarantineRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-rqr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault release quarantine request id.","example":"vlt-rqr-0ipkf-csl11-mp40010tudj6ir2a"},"vaultId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"},"quarantineId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-qua-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault quarantine id.","example":"vlt-qua-7ein9-uptvv-uuegt9p5n69ocs4q"},"network":{"type":"string"},"transactionHash":{"type":"string"},"kytResult":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["Chainalysis"]},"transferReference":{"type":"string"},"providerUserId":{"type":"string","description":"Grouping key registered with the provider (\"userId\" in Chainalysis terms)."},"externalId":{"type":"string","description":"Provider-side id of the registered transfer."},"alerts":{"type":"array","items":{"type":"object","properties":{"level":{"type":"string","enum":["Low","Medium","High","Severe"]},"categoryId":{"type":["number","null"]}},"required":["level","categoryId"]}},"exposure":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryId":{"type":["number","null"]},"name":{"type":["string","null"]}},"required":["categoryId","name"]}},"required":["direct"]},"maxAlertLevel":{"type":["string","null"],"enum":["Low","Medium","High","Severe"]}},"required":["provider","transferReference","providerUserId","externalId","alerts","exposure","maxAlertLevel"],"title":"Chainalysis KYT Result"},{"type":"object","properties":{"provider":{"type":"string","enum":["Elliptic"]},"transferReference":{"type":"string"},"providerUserId":{"type":"string","description":"Grouping key registered with the provider (\"userId\" in Chainalysis terms)."},"externalId":{"type":"string","description":"Provider-side id of the registered transfer."},"alerts":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":["string","null"]}},"required":["categoryId"]}},"riskScore":{"type":["number","null"]}},"required":["provider","transferReference","providerUserId","externalId","alerts","riskScore"],"title":"Elliptic KYT Result"}],"description":"KYT screening result recorded for the quarantined deposit, when available. Policies of rule kind `ChainalysisQuarantineScreening` evaluate this stored result when the release is requested."},"requester":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"],"additionalProperties":false},"reason":{"type":"string"},"rejectionReason":{"type":"string","description":"Set when the request was rejected (policy block or approval denial)."},"status":{"type":"string","enum":["Pending","Executed","Rejected"],"description":"Vault release quarantine request status."},"approvalId":{"type":"string","description":"Set when the release is pending a policy approval."},"dateCreated":{"type":"string","format":"date-time"}},"required":["id","vaultId","quarantineId","network","transactionHash","requester","status","dateCreated"],"additionalProperties":false,"description":"Request to release quarantined funds into the available balance. Executed immediately unless a policy requires approval, in which case it stays Pending until the approval resolves."},"VaultLockRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lkr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault lock request id.","example":"vlt-lkr-2ic5h-80vdm-jfi6ohbf8spv10cr"},"vaultId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"},"network":{"type":"string"},"tid":{"type":"string"},"amount":{"type":"string"},"externalId":{"type":"string"},"reason":{"type":"string","description":"The reason or note the lock is requested with."},"beneficiary":{"type":"string","description":"The address the locked funds are sent to on transfer."},"requester":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"],"additionalProperties":false},"rejectionReason":{"type":"string","description":"Set when the request was rejected (policy block or approval denial)."},"status":{"type":"string","enum":["Pending","Executed","Rejected"],"description":"Vault lock request status."},"approvalId":{"type":"string","description":"Set when the lock creation is pending a policy approval."},"lockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Set when the request was executed and the lock created.","example":"vlt-lck-0lf1e-8a8ag-2ak7vrvusrj3so0j"},"dateCreated":{"type":"string","format":"date-time"}},"required":["id","vaultId","network","tid","amount","requester","status","dateCreated"],"additionalProperties":false,"description":"Request to lock vault funds. Executed immediately unless a policy requires approval, in which case it stays Pending until the approval resolves."},"VaultLockReplaceRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lrr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault lock replace request id.","example":"vlt-lrr-0a29c-jl128-3cec0nntle8k1jjf"},"vaultId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"},"lockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault lock id.","example":"vlt-lck-0lf1e-8a8ag-2ak7vrvusrj3so0j"},"network":{"type":"string"},"tid":{"type":"string"},"currentAmount":{"type":"string","description":"The total locked amount at the time the update was requested."},"newAmount":{"type":"string","description":"The requested new total locked amount."},"reason":{"type":"string","description":"The reason or note the update is requested with."},"requester":{"type":"object","properties":{"userId":{"type":"string"}},"required":["userId"],"additionalProperties":false},"rejectionReason":{"type":"string","description":"Set when the request was rejected (policy block or approval denial)."},"status":{"type":"string","enum":["Pending","Executed","Rejected"],"description":"Vault lock request status."},"approvalId":{"type":"string","description":"Set when the update is pending a policy approval."},"newLockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Set when the request was executed: the replacement lock created at the new amount.","example":"vlt-lck-0lf1e-8a8ag-2ak7vrvusrj3so0j"},"dateCreated":{"type":"string","format":"date-time"}},"required":["id","vaultId","lockId","network","tid","currentAmount","newAmount","requester","status","dateCreated"],"additionalProperties":false,"description":"Request to change a lock's amount. Executes immediately unless a policy requires approval, in which case the request stays Pending until the approval resolves. On execution the lock is replaced: the existing lock is released and a new lock (newLockId) is created at the new amount."},"PolicyApproval":{"type":"object","properties":{"id":{"type":"string"},"initiatorId":{"type":"string"},"activity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Wallets:Sign"]},"transferRequest":{"$ref":"#/components/schemas/TransferRequest"},"transactionRequest":{"$ref":"#/components/schemas/TransactionRequest"},"signatureRequest":{"$ref":"#/components/schemas/SignatureRequest"},"swapRequest":{"$ref":"#/components/schemas/Swap"}},"required":["kind"],"description":"\n      A \"`Wallets:Sign`\" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:\n\n* a Transfer Request (created using the endpoint [Transfer Asset from Wallet](https://docs.dfns.co/api-reference/wallets/transfer-asset))\n* a Transaction Request (created using the endpoint [Broadcast Transaction from Wallet](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction))\n* a Signature Request (created using the endpoint [Generate Signature from Wallet](https://docs.dfns.co/api-reference/keys/generate-signature))\n","title":"Wallets:Sign"},{"type":"object","properties":{"kind":{"type":"string","enum":["Wallets:IncomingTransaction"]},"blockchainEvent":{"$ref":"#/components/schemas/WalletHistoryEvent"}},"required":["kind","blockchainEvent"],"description":"A \"`Wallets:IncomingTransaction`\" activity represents when our indexers detected an incoming transaction into a wallet. This activity kind has to be used with the rule kind \"`ChainalysisTransactionScreening`\" (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page), and the action kind \"`NoAction`\", meaning that no actual action will be taken as a result of the Chainalysis screening, other than notifying you through a webhook event if the policy is triggered. The reason for that, is that the incoming transaction is already on-chain, so the funds are already in the wallet, we cannot block that transfer on chain.","title":"Wallets:IncomingTransaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Vaults:ReleaseQuarantine"]},"releaseQuarantineRequest":{"$ref":"#/components/schemas/VaultReleaseQuarantineRequest"}},"required":["kind","releaseQuarantineRequest"],"description":"A \"`Vaults:ReleaseQuarantine`\" activity represents a request to release quarantined vault funds into the available balance, created as a result of calling the endpoint ReleaseQuarantine (`POST /vaults/:vaultId/quarantines/:quarantineId/release`). The funds stay quarantined until the approval process completes.","title":"Vaults:ReleaseQuarantine"},{"type":"object","properties":{"kind":{"type":"string","enum":["Vaults:CreateLock"]},"lockRequest":{"$ref":"#/components/schemas/VaultLockRequest"}},"required":["kind","lockRequest"],"description":"A \"`Vaults:CreateLock`\" activity represents a request to lock vault funds, created as a result of calling the endpoint CreateVaultLock (`POST /vaults/:vaultId/locks`). The lock is not created until the approval process completes.","title":"Vaults:CreateLock"},{"type":"object","properties":{"kind":{"type":"string","enum":["Vaults:ReplaceLock"]},"lockReplaceRequest":{"$ref":"#/components/schemas/VaultLockReplaceRequest"}},"required":["kind","lockReplaceRequest"],"description":"A \"`Vaults:ReplaceLock`\" activity represents a request to change the amount of a vault lock, created as a result of calling the endpoint ReplaceVaultLock (`POST /vaults/:vaultId/locks/:lockId/replace`). Once the approval process completes, the lock is replaced: it is released and a new lock is created at the requested amount.","title":"Vaults:ReplaceLock"},{"type":"object","properties":{"kind":{"type":"string","enum":["Policies:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"kind":{"type":"string","enum":["Policy"]},"operationKind":{"type":"string","enum":["Update"]},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"]},"entityId":{"type":"string"},"dateCreated":{"type":"string","format":"date-time"},"dateResolved":{"type":"string","format":"date-time"},"approvalId":{"type":"string"},"body":{"$ref":"#/components/schemas/Policy"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false}},"required":["kind","changeRequest"],"description":"\n      A \"`Policies:Modify`\" activity represents any activity which involves updating or archiving a policy. These activities are Policy change requests, created as a result of calling either:\n\n* the endpoint [Update Policy](https://docs.dfns.co/api-reference/policies/update-policy)\n* the endpoint [Delete Policy](https://docs.dfns.co/api-reference/policies/delete-policy)\n","title":"Policies:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["Permissions:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the change request.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"description":"Current status of the change request."},"entityId":{"type":"string","description":"ID of the entity being changed."},"userActionId":{"type":"string","description":"User action of the change request."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was created.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was resolved.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["Permission"]},"operationKind":{"type":"string","enum":["Update"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"name":{"type":"string","description":"Human-readable name of the permission (role)."},"status":{"type":"string","enum":["Active"],"description":"Current status of the permission."},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations this permission grants access to. See [Permissions List](https://docs.dfns.co/core-concepts/roles-and-permissions#list-of-permissions) for available operations."},"isImmutable":{"type":"boolean","description":"Whether this permission is system-managed and cannot be modified."},"isArchived":{"type":"boolean","description":"Whether this permission has been archived (soft-deleted)."}},"required":["id","name","status","operations","isImmutable","isArchived"],"additionalProperties":false}},"required":["id","requester","status","entityId","dateCreated","kind","operationKind","body"],"additionalProperties":false}},"required":["kind","changeRequest"],"description":"\n      A \"`Permissions:Modify`\" activity represents any activity which involves updating or archiving a permission. These activities are Permission change requests, created as a result of calling either:\n\n* the endpoint [Update Permission](https://docs.dfns.co/api-reference/permissions/update-permission)\n* the endpoint [Delete Permission](https://docs.dfns.co/api-reference/permissions/archive-permission)\n","title":"Permissions:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["Permissions:Assign"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the change request.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"description":"Current status of the change request."},"entityId":{"type":"string","description":"ID of the entity being changed."},"userActionId":{"type":"string","description":"User action of the change request."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was created.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was resolved.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["Assignment"]},"operationKind":{"type":"string","enum":["Create","Delete"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"identityId":{"type":"string","description":"ID of the identity the permission is assigned to. Can be a user ID, a service account ID, a personal access token (PAT) ID, or a user group ID."},"isImmutable":{"type":"boolean","description":"Whether this assignment is system-managed and cannot be modified."}},"required":["id","permissionId","identityId","isImmutable"],"additionalProperties":false}},"required":["id","requester","status","entityId","dateCreated","kind","operationKind","body"],"additionalProperties":false}},"required":["kind","changeRequest"],"description":"\n      A \"`Permissions:Assign`\" activity represents any activity which involves assigning a permission (or revoking it, aka \"deleting a permission assignment\"). These activities are Assignment change requests, created as a result of calling either:\n\n* the endpoint [Assign Permission](https://docs.dfns.co/api-reference/permissions/assign-permission)\n* the endpoint [Revoke Permission](https://docs.dfns.co/api-reference/permissions/revoke-permission)\n","title":"Permissions:Assign"},{"type":"object","properties":{"kind":{"type":"string","enum":["Registry:Addresses:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["Alias"]},"body":{"oneOf":[{"type":"object","properties":{"entityId":{"type":"string"},"alias":{"type":"string"},"operationKind":{"type":"string","enum":["Create"]},"description":{"type":"string","minLength":1,"maxLength":200},"values":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"memo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},"value":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[a-zA-Z0-9_:.-]+$"}},"required":["network","value"]}}},"required":["add"]}},"required":["entityId","alias","operationKind","values"],"additionalProperties":false,"title":"Alias creation"},{"type":"object","properties":{"entityId":{"type":"string"},"alias":{"type":"string"},"operationKind":{"type":"string","enum":["Update"]},"description":{"type":["string","null"],"minLength":1,"maxLength":200},"values":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"memo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},"value":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[a-zA-Z0-9_:.-]+$"}},"required":["network","value"]}},"remove":{"type":"array","items":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"memo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},"value":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[a-zA-Z0-9_:.-]+$"}},"required":["network","value"]}}},"required":["add","remove"]}},"required":["entityId","alias","operationKind","values"],"additionalProperties":false,"title":"Alias update"},{"type":"object","properties":{"entityId":{"type":"string"},"alias":{"type":"string"},"operationKind":{"type":"string","enum":["Delete"]}},"required":["entityId","alias","operationKind"],"title":"Alias deletion"}]}},"required":["id","kind","body"]}},"required":["kind","changeRequest"],"description":"","title":"Registry:Addresses:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["Registry:ContractSchemas:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["SmartContract"]},"operationKind":{"type":"string","enum":["Create","Delete"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"cs-30ude-5i87r-gfrpg3fi68l2u14b"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9-]+$"},"description":{"type":"string","minLength":1,"maxLength":200},"network":{"type":"string","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Bob","BobSepolia","Bsc","BscTestnet","Berachain","BerachainBepolia","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiPacific1","SeiAtlantic2","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]},"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"schema":{}},"required":["id","name","network","address"]}},"required":["id","kind","operationKind","body"]}},"required":["kind","changeRequest"],"description":"","title":"Registry:ContractSchemas:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"]},"userAction":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"action":{"type":"object","properties":{"host":{"type":"string"},"method":{"type":"string"},"path":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"string"}},"body":{}},"required":["host","method","path"]}},"required":["id","kind","action"]}},"required":["kind","userAction"],"description":"","title":"UserAction"}]},"status":{"type":"string","enum":["Pending","Approved","Denied","Expired"]},"expirationDate":{"type":"string"},"dateCreated":{"type":"string"},"dateUpdated":{"type":"string"},"dateResolved":{"type":"string"},"policyEvaluations":{"type":"array","items":{"type":"object","properties":{"policyId":{"type":"string"},"triggered":{"type":"boolean"},"reason":{"type":"string"},"context":{}},"required":["policyId","triggered","reason"]}},"decisions":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"date":{"type":"string"},"reason":{"type":["string","null"]},"value":{"type":"string","enum":["Approved","Denied"]}},"required":["userId","date","reason","value"]}}},"required":["id","initiatorId","activity","status","dateUpdated","policyEvaluations","decisions"],"additionalProperties":false},"Stake":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"stk-0pmu3-tog2k-fdtn0teii2i4r13f"},"provider":{"type":"string","enum":["Figment"],"description":"The staking infrastructure provider used to manage the stake."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"status":{"type":"string","enum":["Active","Failed","Staking","Unbonding","Unbond","Withdrawing","Withdrawn"],"description":"Status of the stake position.\n\n| Status | Definition |\n| --- | --- |\n| `Staking` | The stake is being created and funds are being delegated to the validator. |\n| `Active` | The stake is active and earning rewards. |\n| `Unbonding` | The stake is in the process of being unbonded (cooldown period). |\n| `Unbond` | The stake has been unbonded and is ready for withdrawal. |\n| `Withdrawing` | The staked funds are in the process of being withdrawn. |\n| `Withdrawn` | The staked funds have been fully withdrawn. |\n| `Failed` | The staking operation failed. |"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"allOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Babylon"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"duration":{"type":"number"}},"required":["protocol","walletId","provider","amount","duration"],"title":"Babylon"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"}},"required":["protocol","walletId","provider","amount"],"title":"Ethereum"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"validator":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"minItems":1}},"required":["protocol","walletId","validator","amount"],"title":"Iota"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"candidate":{"type":"string","description":"Coinbase address of the XDC masternode to register"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in wei (min 10,000,000 XDC)"}},"required":["protocol","walletId","candidate","amount"],"title":"Xdc"}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the stake was created.","example":"2023-04-14T20:41:28.715Z"},"protocol":{"type":"string","enum":["Babylon"]},"data":{"type":"object","properties":{"finalityProviders":{"type":"array","items":{"type":"string"}},"covenantPubkeys":{"type":"array","items":{"type":"string"}},"magicBytes":{"type":"string"},"covenantThreshold":{"type":"number"},"minUnbondingTime":{"type":"number"},"lockHeight":{"type":"number"}},"required":["finalityProviders","covenantPubkeys","magicBytes","covenantThreshold","minUnbondingTime","lockHeight"]}},"required":["id","walletId","status","requester","requestBody","dateCreated","protocol","data"],"title":"Babylon"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"stk-0pmu3-tog2k-fdtn0teii2i4r13f"},"provider":{"type":"string","enum":["Figment"],"description":"The staking infrastructure provider used to manage the stake."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"status":{"type":"string","enum":["Active","Failed","Staking","Unbonding","Unbond","Withdrawing","Withdrawn"],"description":"Status of the stake position.\n\n| Status | Definition |\n| --- | --- |\n| `Staking` | The stake is being created and funds are being delegated to the validator. |\n| `Active` | The stake is active and earning rewards. |\n| `Unbonding` | The stake is in the process of being unbonded (cooldown period). |\n| `Unbond` | The stake has been unbonded and is ready for withdrawal. |\n| `Withdrawing` | The staked funds are in the process of being withdrawn. |\n| `Withdrawn` | The staked funds have been fully withdrawn. |\n| `Failed` | The staking operation failed. |"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"allOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Babylon"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"duration":{"type":"number"}},"required":["protocol","walletId","provider","amount","duration"],"title":"Babylon"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"}},"required":["protocol","walletId","provider","amount"],"title":"Ethereum"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"validator":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"minItems":1}},"required":["protocol","walletId","validator","amount"],"title":"Iota"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"candidate":{"type":"string","description":"Coinbase address of the XDC masternode to register"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in wei (min 10,000,000 XDC)"}},"required":["protocol","walletId","candidate","amount"],"title":"Xdc"}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the stake was created.","example":"2023-04-14T20:41:28.715Z"},"protocol":{"type":"string","enum":["Iota"]},"data":{"type":"object","properties":{"kind":{"type":"string","enum":["Iota","LockedIota"]},"stakedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"amount":{"type":"string"},"expirationDate":{"type":"string"}},"required":["id","amount"]}},"amount":{"type":"string"},"validator":{"type":"string"}},"required":["kind","amount","validator"]}},"required":["id","walletId","status","requester","requestBody","dateCreated","protocol","data"],"title":"Iota"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"stk-0pmu3-tog2k-fdtn0teii2i4r13f"},"provider":{"type":"string","enum":["Figment"],"description":"The staking infrastructure provider used to manage the stake."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"status":{"type":"string","enum":["Active","Failed","Staking","Unbonding","Unbond","Withdrawing","Withdrawn"],"description":"Status of the stake position.\n\n| Status | Definition |\n| --- | --- |\n| `Staking` | The stake is being created and funds are being delegated to the validator. |\n| `Active` | The stake is active and earning rewards. |\n| `Unbonding` | The stake is in the process of being unbonded (cooldown period). |\n| `Unbond` | The stake has been unbonded and is ready for withdrawal. |\n| `Withdrawing` | The staked funds are in the process of being withdrawn. |\n| `Withdrawn` | The staked funds have been fully withdrawn. |\n| `Failed` | The staking operation failed. |"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"allOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Babylon"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"duration":{"type":"number"}},"required":["protocol","walletId","provider","amount","duration"],"title":"Babylon"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"}},"required":["protocol","walletId","provider","amount"],"title":"Ethereum"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"validator":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"minItems":1}},"required":["protocol","walletId","validator","amount"],"title":"Iota"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"candidate":{"type":"string","description":"Coinbase address of the XDC masternode to register"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in wei (min 10,000,000 XDC)"}},"required":["protocol","walletId","candidate","amount"],"title":"Xdc"}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the stake was created.","example":"2023-04-14T20:41:28.715Z"},"protocol":{"type":"string","enum":["Ethereum"]},"data":{"type":["object","null"],"properties":{"validator":{"type":"object","properties":{"pubkey":{"type":"string"},"withdrawalAddress":{"type":"string"}},"required":["pubkey","withdrawalAddress"]}},"required":["validator"]}},"required":["id","walletId","status","requester","requestBody","dateCreated","protocol","data"],"title":"Ethereum"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"stk-0pmu3-tog2k-fdtn0teii2i4r13f"},"provider":{"type":"string","enum":["Figment"],"description":"The staking infrastructure provider used to manage the stake."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"status":{"type":"string","enum":["Active","Failed","Staking","Unbonding","Unbond","Withdrawing","Withdrawn"],"description":"Status of the stake position.\n\n| Status | Definition |\n| --- | --- |\n| `Staking` | The stake is being created and funds are being delegated to the validator. |\n| `Active` | The stake is active and earning rewards. |\n| `Unbonding` | The stake is in the process of being unbonded (cooldown period). |\n| `Unbond` | The stake has been unbonded and is ready for withdrawal. |\n| `Withdrawing` | The staked funds are in the process of being withdrawn. |\n| `Withdrawn` | The staked funds have been fully withdrawn. |\n| `Failed` | The staking operation failed. |"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"allOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Babylon"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"duration":{"type":"number"}},"required":["protocol","walletId","provider","amount","duration"],"title":"Babylon"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"}},"required":["protocol","walletId","provider","amount"],"title":"Ethereum"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"validator":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"minItems":1}},"required":["protocol","walletId","validator","amount"],"title":"Iota"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"candidate":{"type":"string","description":"Coinbase address of the XDC masternode to register"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in wei (min 10,000,000 XDC)"}},"required":["protocol","walletId","candidate","amount"],"title":"Xdc"}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the stake was created.","example":"2023-04-14T20:41:28.715Z"},"protocol":{"type":"string","enum":["Xdc"]},"data":{"type":"object","properties":{"candidate":{"type":"string"},"amount":{"type":"string"},"proposeBlockNumber":{"type":"string"},"withdrawBlockNumber":{"type":"string"},"withdrawIndex":{"type":"string"}},"required":["candidate","amount"]}},"required":["id","walletId","status","requester","requestBody","dateCreated","protocol","data"],"title":"Xdc"}]},"StakeAction":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stka-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"stka-567ui-9g9b7-ftgvpstk8qfa71b4"},"stakeId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"stk-0pmu3-tog2k-fdtn0teii2i4r13f"},"status":{"type":"string","enum":["PendingPolicyApproval","InProgress","Completed","Failed","Rejected"],"description":"Status of the stake action.\n\n| Status | Definition |\n| --- | --- |\n| `PendingPolicyApproval` | The action is pending approval due to a policy applied to the wallet. |\n| `InProgress` | The action has been initiated and is being processed. |\n| `Completed` | The action has been successfully completed. |\n| `Failed` | The action has failed. Check failureReason for details. |\n| `Rejected` | The action has been rejected by a policy approval action. |"},"transactionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^tx-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Deprecated.","example":"tx-583hu-sp2p7-slvb9nqpa3hd8bus"},"signatureId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^sig-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Deprecated.","example":"sig-4sfvl-f4iha-umighfi3hk4t54dr"},"transactionHash":{"type":"string","description":"Deprecated."},"kind":{"type":"string","enum":["Stake","Unbond","Deposit","Withdraw"],"description":"The type of staking action being performed.\n\n| Kind | Definition |\n| --- | --- |\n| `Stake` | Delegate funds to a validator to begin earning rewards. |\n| `Unbond` | Initiate the unbonding process to release staked funds (subject to cooldown). |\n| `Deposit` | Add additional funds to an existing stake position. |\n| `Withdraw` | Withdraw unbonded funds from the stake position. |"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"anyOf":[{"allOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Babylon"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"duration":{"type":"number"}},"required":["protocol","walletId","provider","amount","duration"],"title":"Babylon"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"}},"required":["protocol","walletId","provider","amount"],"title":"Ethereum"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"validator":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"minItems":1}},"required":["protocol","walletId","validator","amount"],"title":"Iota"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"candidate":{"type":"string","description":"Coinbase address of the XDC masternode to register"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in wei (min 10,000,000 XDC)"}},"required":["protocol","walletId","candidate","amount"],"title":"Xdc"}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]},{"allOf":[{"anyOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"kind":{"type":"string","enum":["Withdraw"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["protocol","kind","amount"],"title":"IOTA Withdrawal"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"kind":{"type":"string","enum":["Deposit"]},"amount":{"type":"string","pattern":"^\\d+$"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}}},"required":["protocol","kind","amount"],"title":"IOTA Deposit"}]},{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"kind":{"type":"string","enum":["Withdraw"]}},"required":["protocol","kind"],"title":"Ethereum Withdrawal"},{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"kind":{"type":"string","enum":["Withdraw"]}},"required":["protocol","kind"],"title":"XDC Withdrawal"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"kind":{"type":"string","enum":["Unbond"]}},"required":["protocol","kind"],"title":"XDC Unbond"}]}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]}]},"failureReason":{"type":"string","description":"The failure reason, if any. Only present when status is Failed."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the stake action was created.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","stakeId","status","kind","requester","requestBody","dateCreated"]},"SwapQuote":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the Swap Quote.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"If not provided, the walletId is used as the target wallet. If provided, this field is currently required to be the same as walletId","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["UniswapX","UniswapClassic","CircleCctp"],"description":"Swap provider."},"sourceAsset":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}],"description":"The source asset that will be spent on the swap transaction."},"targetAsset":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}],"description":"The target asset that will be received with the swap transaction."},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."},"fee":{"type":"string","pattern":"^\\d+$","description":"Total fee deducted from the source amount to reach the target amount, in the source asset base units. Set for CCTP (the quoted maxFee Circle may deduct); omitted for providers that do not surface a single fee figure."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the quote was created."},"requestBody":{"anyOf":[{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapClassic"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction, following the same stucture as the [transfer API](https://docs.dfns.co/api-reference/wallets/transfer-asset)."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["kind","contract"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["kind","mint"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction, follows the same structure as sourceAsset, but doesn't include the amount."},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapClassic Swap Quote Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapX"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction, following the same stucture as the [transfer API](https://docs.dfns.co/api-reference/wallets/transfer-asset)."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["kind","contract"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["kind","mint"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction, follows the same structure as sourceAsset, but doesn't include the amount."},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapX Swap Quote Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["CircleCctp"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction, following the same stucture as the [transfer API](https://docs.dfns.co/api-reference/wallets/transfer-asset)."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["kind","contract"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["kind","mint"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction, follows the same structure as sourceAsset, but doesn't include the amount."},"feeToleranceBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The maximum fee you will accept for this CCTP transfer, in [basis points](https://en.wikipedia.org/wiki/Basis_point) (BPS) of the amount. CCTP is burn-and-mint with no price slippage; this caps the bridge/forwarding fee — which varies with chain congestion and Fast vs Standard speed — so the burn does not revert if the fee rises. One basis point equals 0.01%."},"speed":{"type":"string","enum":["Fast","Standard"],"description":"Selects Fast (~8–20s, small fast-burn fee) or Standard (~13–19min, no fast-burn fee)."},"useDurableNonce":{"type":"boolean","description":"Solana-source only. Bind the burn to a durable nonce so it survives signing delays."}},"required":["provider","walletId","sourceAsset","targetAsset","feeToleranceBps"],"title":"CircleCctp Swap Quote Request"}]},{"type":"object","properties":{}}],"description":"The full request used for obtaining this quote."},"requester":{"$ref":"#/components/schemas/Requester"}},"required":["id","walletId","provider","sourceAsset","targetAsset","slippageBps","dateCreated","requestBody","requester"],"example":{"id":"swapQuote-3hgv4-q8tbf-8v2ajmrbmg6m4i9t","walletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","targetWalletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","provider":"UniswapClassic","sourceAsset":{"kind":"Native","amount":"10000000000","metadata":{"network":"EthereumSepolia","name":"Ethereum","symbol":"SepoliaETH","decimals":18,"tid":"native:eth"}},"targetAsset":{"kind":"Erc20","contract":"0xda0be7efd234295395d4204d0df4358339b57b27","amount":"6467571553831928182","metadata":{"network":"EthereumSepolia","name":"Test","symbol":"Test","decimals":18,"tid":"erc20:0xda0be7efd234295395d4204d0df4358339b57b27"}},"slippageBps":100,"dateCreated":"2025-09-11T10:52:15.039Z","requestBody":{"provider":"UniswapClassic","walletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","targetWalletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","sourceAsset":{"kind":"Native","amount":"10000000000"},"targetAsset":{"kind":"Erc20","contract":"0xda0be7efd234295395d4204d0df4358339b57b27"},"slippageBps":100},"requester":{"userId":"us-48r5q-eshfg-9pmr2lo6bmpr4i4i","tokenId":"to-4etah-smoal-9n3rmhul4dpaueg5"}}},"TenantUser":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser"]},"username":{"type":"string"},"isRegistered":{"type":"boolean"},"isActive":{"type":"boolean"},"isSSORequired":{"type":"boolean"},"externalId":{"type":"string"},"permissions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"operations":{"type":"array","items":{"type":"string"}}},"required":["id","name","operations"]}},"orgs":{"type":"array","items":{"type":"object","properties":{"orgId":{"type":"string"},"name":{"type":"string"}},"required":["orgId","name"]},"description":"orgs this user has access to"}},"required":["id","kind","username","isRegistered","isActive","isSSORequired","permissions","orgs"]},"VaultAddress":{"type":"object","properties":{"walletId":{"type":"string"},"network":{"type":"string"},"address":{"type":"string"}},"required":["walletId","network","address"],"additionalProperties":false,"description":"Vault address object."},"Vault":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"},"orgId":{"type":"string"},"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"externalId":{"type":"string"},"dateCreated":{"type":"string","format":"date-time"},"dateUpdated":{"type":"string","format":"date-time"},"addresses":{"type":"array","items":{"$ref":"#/components/schemas/VaultAddress"},"description":"The vault's addresses."}},"required":["id","orgId","tags","dateCreated","dateUpdated"],"additionalProperties":false,"description":"Vault object."},"VaultLock":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault lock id.","example":"vlt-lck-0lf1e-8a8ag-2ak7vrvusrj3so0j"},"vaultId":{"type":"string"},"network":{"type":"string"},"tid":{"type":"string"},"amount":{"type":"string"},"owner":{"type":"string","description":"The user that created the lock. Only this user can update or delete it."},"externalId":{"type":"string"},"reason":{"type":"string","description":"The reason or note the lock was created with."},"beneficiary":{"type":"string","description":"The address the locked funds are sent to on transfer. Set at creation and inherited on update."},"transferId":{"type":"string","description":"Set when the owner transferred the lock: the outgoing transfer sending `transferAmount` of the locked funds to the beneficiary. The funds stay locked until that transfer is confirmed, which deletes the lock. Cleared if the transfer fails, so the lock can be transferred again."},"transferAmount":{"type":"string","description":"Set with `transferId`: the amount being sent to the beneficiary, in minimum denomination. The remainder of the locked amount returns to the available balance when the lock is deleted."},"replacesLockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Set when this lock was created by an update: the lock it replaces.","example":"vlt-lck-0lf1e-8a8ag-2ak7vrvusrj3so0j"},"replacedByLockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Set when this lock was released by an update: the lock that replaced it.","example":"vlt-lck-0lf1e-8a8ag-2ak7vrvusrj3so0j"},"dateCreated":{"type":"string","format":"date-time"},"dateDeleted":{"type":"string","format":"date-time"}},"required":["id","vaultId","network","tid","amount","owner","dateCreated"],"additionalProperties":false,"description":"Vault lock object: funds manually locked for off-chain settlement or escrow. The owner can release them back to the vault or transfer them to the beneficiary."},"VaultQuarantine":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-qua-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault quarantine id.","example":"vlt-qua-7ein9-uptvv-uuegt9p5n69ocs4q"},"vaultId":{"type":"string"},"network":{"type":"string"},"transactionHash":{"type":"string","description":"The transaction that deposited the quarantined funds."},"kytResult":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["Chainalysis"]},"transferReference":{"type":"string"},"providerUserId":{"type":"string","description":"Grouping key registered with the provider (\"userId\" in Chainalysis terms)."},"externalId":{"type":"string","description":"Provider-side id of the registered transfer."},"alerts":{"type":"array","items":{"type":"object","properties":{"level":{"type":"string","enum":["Low","Medium","High","Severe"]},"categoryId":{"type":["number","null"]}},"required":["level","categoryId"]}},"exposure":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryId":{"type":["number","null"]},"name":{"type":["string","null"]}},"required":["categoryId","name"]}},"required":["direct"]},"maxAlertLevel":{"type":["string","null"],"enum":["Low","Medium","High","Severe"]}},"required":["provider","transferReference","providerUserId","externalId","alerts","exposure","maxAlertLevel"],"title":"Chainalysis KYT Result"},{"type":"object","properties":{"provider":{"type":"string","enum":["Elliptic"]},"transferReference":{"type":"string"},"providerUserId":{"type":"string","description":"Grouping key registered with the provider (\"userId\" in Chainalysis terms)."},"externalId":{"type":"string","description":"Provider-side id of the registered transfer."},"alerts":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":["string","null"]}},"required":["categoryId"]}},"riskScore":{"type":["number","null"]}},"required":["provider","transferReference","providerUserId","externalId","alerts","riskScore"],"title":"Elliptic KYT Result"}],"description":"KYT screening result recorded for the quarantined deposit, when available. Policies of rule kind `ChainalysisQuarantineScreening` evaluate this stored result when the release is requested."},"dateReleased":{"type":"string","format":"date-time","description":"Set when the quarantined funds have been released into the available balance."},"dateCreated":{"type":"string","format":"date-time"}},"required":["id","vaultId","network","transactionHash","dateCreated"],"additionalProperties":false,"description":"Vault quarantine object: an incoming deposit held out of the available balance until released."},"VaultAsset":{"type":"object","properties":{"kind":{"type":"string"},"network":{"type":"string"},"tid":{"type":"string"},"decimals":{"type":"number"},"symbol":{"type":"string"},"verified":{"type":"boolean"},"availableBalance":{"type":"string"},"quarantinedBalance":{"type":"string"},"lockedBalance":{"type":"string"},"quotes":{"type":"object","properties":{"USD":{"type":"number"}}}},"required":["kind","network","tid","decimals","availableBalance","quarantinedBalance","lockedBalance"],"additionalProperties":false,"description":"Vault asset with balances broken down by kind and USD unit price."},"VaultNetWorth":{"type":"object","properties":{"available":{"type":"object","properties":{"USD":{"type":"number"}}},"quarantined":{"type":"object","properties":{"USD":{"type":"number"}}},"locked":{"type":"object","properties":{"USD":{"type":"number"}}},"total":{"type":"object","properties":{"USD":{"type":"number"}}}},"required":["available","quarantined","locked","total"],"additionalProperties":false,"description":"Vault net worth in fiat, broken down by balance kind plus a total."},"VaultBalanceEntry":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["Available","Outgoing","Fee","Incoming","Locked","Quarantined"],"description":"Vault balance kind."},"network":{"type":"string"},"tid":{"type":"string"},"amount":{"type":"string"},"transferId":{"type":"string"},"quarantineId":{"type":"string"},"lockId":{"type":"string"}},"required":["id","kind","network","tid","amount"],"additionalProperties":false,"description":"Vault balance entry object."},"VaultHistoryIncomingTransfer":{"type":"object","properties":{"txHash":{"type":"string"},"index":{"type":"string"},"senders":{"type":"array","items":{"type":"string"},"description":"The addresses the funds came from. Empty when the on-chain transfer could not be resolved."},"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["txHash","senders"],"additionalProperties":false},"VaultHistoryEvent":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-evt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The ledger event that opened this item.","example":"vlt-evt-3u8g0-s3s4u-a9ic2otj312313kn"},"vaultId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The vault wallet the item is on.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"timestamp":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the item was opened: the deposit, the transfer request or the lock event.","example":"2023-04-14T20:41:28.715Z"},"network":{"$ref":"#/components/schemas/Network"},"tid":{"type":"string","description":"The token identifier of the asset moved (e.g. `native:eth`, `erc20:0x...`)."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount moved, in minimum denomination: deposited for incoming transfers, sent for outgoing transfers, locked or unlocked for lock kinds."},"kind":{"type":"string","enum":["IncomingTransfer"]},"status":{"type":"string","enum":["Quarantined","PendingPolicyApproval","Released"],"description":"`Quarantined` until a release is requested, `PendingPolicyApproval` while the release awaits policy approval, `Released` once the funds are available."},"quarantine":{"$ref":"#/components/schemas/VaultQuarantine"},"incomingTransfer":{"$ref":"#/components/schemas/VaultHistoryIncomingTransfer"}},"required":["id","vaultId","walletId","timestamp","network","tid","amount","kind","status","quarantine","incomingTransfer"],"additionalProperties":false,"title":"Incoming Transfer"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-evt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The ledger event that opened this item.","example":"vlt-evt-3u8g0-s3s4u-a9ic2otj312313kn"},"vaultId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The vault wallet the item is on.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"timestamp":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the item was opened: the deposit, the transfer request or the lock event.","example":"2023-04-14T20:41:28.715Z"},"network":{"$ref":"#/components/schemas/Network"},"tid":{"type":"string","description":"The token identifier of the asset moved (e.g. `native:eth`, `erc20:0x...`)."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount moved, in minimum denomination: deposited for incoming transfers, sent for outgoing transfers, locked or unlocked for lock kinds."},"kind":{"type":"string","enum":["OutgoingTransfer"]},"status":{"type":"string","enum":["PendingPolicyApproval","InProgress","Confirmed","Failed","Rejected"],"description":"`PendingPolicyApproval` while the transfer awaits policy approval, `InProgress` while it is being executed or awaits on-chain confirmation, then the settled outcome of the transfer."},"transferRequest":{"$ref":"#/components/schemas/TransferRequest"},"lock":{"allOf":[{"$ref":"#/components/schemas/VaultLock"},{"description":"Set when the transfer sends locked funds: the lock they come from."}]}},"required":["id","vaultId","walletId","timestamp","network","tid","amount","kind","status","transferRequest"],"additionalProperties":false,"title":"Outgoing Transfer"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-evt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The ledger event that opened this item.","example":"vlt-evt-3u8g0-s3s4u-a9ic2otj312313kn"},"vaultId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id.","example":"vlt-5vbsp-u62g1-ostmunqgds5o9tc2"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The vault wallet the item is on.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"timestamp":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the item was opened: the deposit, the transfer request or the lock event.","example":"2023-04-14T20:41:28.715Z"},"network":{"$ref":"#/components/schemas/Network"},"tid":{"type":"string","description":"The token identifier of the asset moved (e.g. `native:eth`, `erc20:0x...`)."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount moved, in minimum denomination: deposited for incoming transfers, sent for outgoing transfers, locked or unlocked for lock kinds."},"kind":{"type":"string","enum":["LockCreated","LockDeleted"]},"lock":{"$ref":"#/components/schemas/VaultLock"}},"required":["id","vaultId","walletId","timestamp","network","tid","amount","kind","lock"],"additionalProperties":false,"title":"Lock"}],"description":"Vault history item: an incoming or outgoing transfer with its current status, or a lock event, with the related quarantine, transfer request or lock embedded."},"BulkWalletCreationJobHandle":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^bwc-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the bulk wallet creation job.","example":"bwc-7jk0a-j19vv-4fhcj3452jceonu0"},"status":{"type":"string","enum":["Pending","InProgress","Completed","PartiallyCompleted","Failed"],"description":"Bulk wallet creation job status."}},"required":["id","status"]},"BulkWalletNetwork":{"type":"string","enum":["Ethereum","EthereumSepolia","EthereumHolesky","EthereumHoodi","Bsc","BscTestnet","Base","BaseSepolia","ArbitrumOne","ArbitrumSepolia","Optimism","OptimismSepolia","Tron","TronNile","Solana","SolanaDevnet"],"description":"Network the wallets will be created on."},"BulkWalletCreationJob":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^bwc-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the bulk wallet creation job.","example":"bwc-7jk0a-j19vv-4fhcj3452jceonu0"},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the org that owns the job.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"status":{"type":"string","enum":["Pending","InProgress","Completed","PartiallyCompleted","Failed"],"description":"Bulk wallet creation job status."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"Network the wallets are created on."}]},"namePrefix":{"type":"string","description":"Name prefix shared by every wallet in the batch; wallet at index N is named `${namePrefix}${N}`."},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Wallet Tag."},"maxItems":10,"description":"List of tags."},"totalCount":{"type":"integer","description":"Total number of wallets requested in the batch."},"completedCount":{"type":"integer","description":"Number of wallets created so far."},"keystoreId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store the batch keys are minted in.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"masterKeyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Master key the batch wallets are derived from.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"reason":{"type":"string","description":"Failure reason, set when the job did not complete fully."},"nextRetryDate":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when the job is next retried.","example":"2023-04-14T20:41:28.715Z"},"nextRetryAttempt":{"type":"integer","description":"Number of retry attempts made so far."},"dateCreated":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when the job was created.","example":"2023-04-14T20:41:28.715Z"},"dateUpdated":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when the job was last updated.","example":"2023-04-14T20:41:28.715Z"},"dateCompleted":{"type":"string","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date string when the job finished.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","orgId","status","network","namePrefix","tags","totalCount","completedCount","keystoreId","dateCreated","dateUpdated"],"example":{"id":"bwc-1f04s-lqc9q-xxxxxxxxxxxxxxxx","orgId":"or-1f04s-lqc9q-xxxxxxxxxxxxxxxx","status":"InProgress","network":"Ethereum","namePrefix":"user-","tags":[],"totalCount":500000,"completedCount":12000,"keystoreId":"ks-1f04s-lqc9q-xxxxxxxxxxxxxxxx","dateCreated":"2023-04-14T20:41:28.715Z","dateUpdated":"2023-04-14T20:41:28.715Z"}},"Offer":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^offer-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Offer id.","example":"offer-3ugfu-o8duj-vqu770ckmg7ilhp4"},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"network":{"$ref":"#/components/schemas/Network"},"kind":{"type":"string","enum":["Native","Aip21","Asa","Coin","Cip56","Erc20","Erc721","Erc7984","Asset","Hip17","Hts","Sep41","Spl","Spl2022","Snip2","Snip3","Tep74","Trc10","Trc20","Trc721","Cis7","Cis2","Iou","Xls33"]},"metadata":{"type":"object","properties":{"asset":{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"integer","description":"Number of decimals used by the asset, see [this guide](https://docs.dfns.co/guides/developers/displaying-balances) for more details."},"verified":{"type":"boolean","description":"Whether the asset is verified by DFNS as legitimate."},"quotes":{"type":"object","properties":{"EUR":{"type":"number"},"USD":{"type":"number"}},"description":"Corresponding asset price in USD at the time of transfer."}}}},"required":["asset"]},"txHash":{"type":"string"},"status":{"type":"string","enum":["Pending","Accepted","Rejected","Withdrawn","Expired"]},"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"timestamp":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the offer was created.","example":"2023-04-14T20:41:28.715Z"},"expiresAt":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the offer expires.","example":"2023-04-14T20:41:28.715Z"},"memo":{"type":"string"},"settlementTransactionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^tx-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Transaction id.","example":"tx-583hu-sp2p7-slvb9nqpa3hd8bus"},"dateSettled":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the offer was settled.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","orgId","walletId","network","kind","metadata","txHash","status","from","to","value","timestamp"]},"WebhookWithSecret":{"type":"object","properties":{"id":{"type":"string","description":"Webhook ID"},"url":{"type":"string","description":"Webhook url"},"events":{"type":"array","items":{"anyOf":[{"type":"string","enum":["policy.triggered","policy.approval.pending","policy.approval.resolved","key.created","key.deleted","key.delegated","key.exported","wallet.blockchainevent.detected","wallet.blockchain_event.transfer.included","wallet.blockchain_event.misc.confirmed","wallet.created","wallet.activated","wallet.delegated","wallet.exported","wallet.signature.failed","wallet.signature.rejected","wallet.signature.requested","wallet.signature.signed","wallet.transaction.broadcasted","wallet.transaction.confirmed","wallet.transaction.failed","wallet.transaction.rejected","wallet.transaction.requested","wallet.transfer.broadcasted","wallet.transfer.confirmed","wallet.transfer.failed","wallet.transfer.rejected","wallet.transfer.requested","wallet.offer.received","wallet.offer.accepted","wallet.offer.rejected","wallet.offer.withdrawn","wallet.tags.modified","vault.created","vault.updated","vault.tags.modified","vault.event.created","address_watch.blockchain_event.transfer.confirmed","address_watch.blockchain_event.misc.confirmed","payout.action.required","allocation.action.created","allocation.action.completed","allocation.action.failed","swap.requested","swap.rejected","swap.completed","swap.failed"],"description":"WebhookEventKind"},{"type":"string","enum":["*"]}],"description":"WebhookEventKind"},"description":"All events this webhook is subscribed to."},"status":{"type":"string","enum":["Enabled","Disabled"],"description":"Webhook status"},"description":{"type":"string","description":"Short description this webhook's purpose"},"dateCreated":{"type":"string","description":"Date when webhook was created"},"dateUpdated":{"type":"string","description":"Date when webhook was last updated"},"secret":{"type":"string","description":"The secret associated with this webhook, with which webhook requests will be signed."}},"required":["id","url","events","status","dateCreated","dateUpdated","secret"]},"Webhook":{"type":"object","properties":{"id":{"type":"string","description":"Webhook ID"},"url":{"type":"string","description":"Webhook url"},"events":{"type":"array","items":{"anyOf":[{"type":"string","enum":["policy.triggered","policy.approval.pending","policy.approval.resolved","key.created","key.deleted","key.delegated","key.exported","wallet.blockchainevent.detected","wallet.blockchain_event.transfer.included","wallet.blockchain_event.misc.confirmed","wallet.created","wallet.activated","wallet.delegated","wallet.exported","wallet.signature.failed","wallet.signature.rejected","wallet.signature.requested","wallet.signature.signed","wallet.transaction.broadcasted","wallet.transaction.confirmed","wallet.transaction.failed","wallet.transaction.rejected","wallet.transaction.requested","wallet.transfer.broadcasted","wallet.transfer.confirmed","wallet.transfer.failed","wallet.transfer.rejected","wallet.transfer.requested","wallet.offer.received","wallet.offer.accepted","wallet.offer.rejected","wallet.offer.withdrawn","wallet.tags.modified","vault.created","vault.updated","vault.tags.modified","vault.event.created","address_watch.blockchain_event.transfer.confirmed","address_watch.blockchain_event.misc.confirmed","payout.action.required","allocation.action.created","allocation.action.completed","allocation.action.failed","swap.requested","swap.rejected","swap.completed","swap.failed"],"description":"WebhookEventKind"},{"type":"string","enum":["*"]}],"description":"WebhookEventKind"},"description":"All events this webhook is subscribed to."},"status":{"type":"string","enum":["Enabled","Disabled"],"description":"Webhook status"},"description":{"type":"string","description":"Short description this webhook's purpose"},"dateCreated":{"type":"string","description":"Date when webhook was created"},"dateUpdated":{"type":"string","description":"Date when webhook was last updated"}},"required":["id","url","events","status","dateCreated","dateUpdated"]},"WebhookEvent":{"type":"object","properties":{"id":{"type":"string","description":"WebhookEvent ID"},"date":{"type":"string","description":"ISO date string when event was raised"},"kind":{"type":"string","enum":["policy.triggered","policy.approval.pending","policy.approval.resolved","key.created","key.deleted","key.delegated","key.exported","wallet.blockchainevent.detected","wallet.blockchain_event.transfer.included","wallet.blockchain_event.misc.confirmed","wallet.created","wallet.activated","wallet.delegated","wallet.exported","wallet.signature.failed","wallet.signature.rejected","wallet.signature.requested","wallet.signature.signed","wallet.transaction.broadcasted","wallet.transaction.confirmed","wallet.transaction.failed","wallet.transaction.rejected","wallet.transaction.requested","wallet.transfer.broadcasted","wallet.transfer.confirmed","wallet.transfer.failed","wallet.transfer.rejected","wallet.transfer.requested","wallet.offer.received","wallet.offer.accepted","wallet.offer.rejected","wallet.offer.withdrawn","wallet.tags.modified","vault.created","vault.updated","vault.tags.modified","vault.event.created","address_watch.blockchain_event.transfer.confirmed","address_watch.blockchain_event.misc.confirmed","payout.action.required","allocation.action.created","allocation.action.completed","allocation.action.failed","swap.requested","swap.rejected","swap.completed","swap.failed"],"description":"Webhook event"},"data":{"type":"object","additionalProperties":{}},"status":{"type":"string","description":"Status code of the webhook request"},"error":{"type":"string","description":"Error message if any error happened during the webhook request."},"timestampSent":{"type":"integer","exclusiveMinimum":0,"description":"Unix timestamp when the event was forwarded to the webhook url by our servers."}},"required":["id","date","kind","data","status","timestampSent"]},"Error":{"type":"object","description":"The error envelope returned by every DFNS API endpoint on a 4xx or 5xx status.","required":["error"],"properties":{"error":{"type":"object","required":["id","status","message"],"properties":{"id":{"type":"string","description":"The error ID. Share it with DFNS support to help troubleshoot the issue.","example":"2038837570328299032"},"status":{"type":"integer","description":"The HTTP status code.","example":404},"message":{"type":"string","description":"What went wrong. Read it before retrying: it names the field or condition at fault.","example":"wallet not found"},"details":{"type":"object","description":"Structured data with additional context, such as the IDs involved.","additionalProperties":true,"example":{"walletId":"wa-1f04s-lqc9q-xxxxxxxxxxxxxxxx"}}}}}}},"parameters":{},"responses":{"Error":{"description":"An error, returned in the DFNS JSON error envelope. Status codes and their causes: https://docs.dfns.co/api-reference/error-codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/address-watches":{"post":{"operationId":"createAddressWatch","summary":"Create Address Watch","tags":["Address Watches"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Registers an on chain address to watch. An address watch is not controlled by Dfns: it holds no key, it cannot sign or move funds. The indexer matches on chain activity touching the address and sends the corresponding webhooks.\n\nThe address must already exist on chain and is normalized to the form the indexer matches on (lowercase for EVM networks). Only networks that support address watches are accepted. A given address can only be watched once per network within an organization while the watch is Active.\n\nWatching an address that was previously deleted re-activates the deleted watch, with the ID, the nickname and the externalId it had before: the request body is only used to find it.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`AddressWatches:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"network":{"allOf":[{"$ref":"#/components/schemas/AddressWatchNetwork"},{"description":"Network to watch the address on. Only networks that support address watches are accepted."}]},"address":{"type":"string","minLength":1,"maxLength":256,"description":"The on chain address to watch."},"name":{"type":"string","maxLength":100,"description":"Address watch nickname."},"externalId":{"type":"string","maxLength":100,"description":"User-defined value that can be used to correlate the entity with an external system."}},"required":["network","address"],"additionalProperties":false},"examples":{"Ethereum":{"value":{"network":"Ethereum","address":"0x00e3495cf6af59008f22ffaf32d4c92ac33dac47","name":"exchange-hot-wallet"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressWatch"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listAddressWatches","summary":"List Address Watches","tags":["Address Watches"],"security":[{"authenticationToken":[]}],"description":"Retrieves the list of address watches in your organization. Pagination is supported via limit and paginationToken parameters.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`AddressWatches:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AddressWatch"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/address-watches/{addressWatchId}":{"delete":{"operationId":"deleteAddressWatch","summary":"Delete Address Watch","tags":["Address Watches"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deletes an address watch. Once deleted, the address is not watched anymore, no webhook is sent for it, and it won't count in your overall organisation wallet count. Watching the same address again on the same network re-activates this watch, with the same ID and the same history.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`AddressWatches:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The address watch to delete."},"required":true,"description":"The address watch to delete.","name":"addressWatchId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressWatch"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getAddressWatch","summary":"Get Address Watch","tags":["Address Watches"],"security":[{"authenticationToken":[]}],"description":"Retrieves an address watch by its ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`AddressWatches:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The address watch to retrieve."},"required":true,"description":"The address watch to retrieve.","name":"addressWatchId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressWatch"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/address-watches/{addressWatchId}/assets":{"get":{"operationId":"getAddressWatchAssets","summary":"Get Address Watch Assets","tags":["Address Watches"],"security":[{"authenticationToken":[]}],"description":"Retrieves the list of assets held by the address watch, as tracked by the indexer. Balances are tracked from the moment the watch is created.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`AddressWatches:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The address watch to retrieve the assets of."},"required":true,"description":"The address watch to retrieve the assets of.","name":"addressWatchId","in":"path"},{"schema":{"type":"string","enum":["true"]},"required":false,"name":"netWorth","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"addressWatchId":{"type":"string"},"network":{"$ref":"#/components/schemas/AddressWatchNetwork"},"assets":{"type":"array","items":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Aip21"]},"metadata":{"type":"string"}},"required":["kind","metadata"],"title":"Aptos Fungible Assets (AIP-21)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string"}},"required":["kind","assetId"],"title":"Algorand Standard Assets (ASAs)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis2"]},"tokenAddress":{"type":"string"}},"required":["kind","tokenAddress"],"title":"Concordium CIS-2 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20","Snip2","Trc20"]},"contract":{"type":"string"}},"required":["kind","contract"],"title":"EVM ERC-20/Starknet SNIP-2/TRON TRC-20 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc7984"]},"contract":{"type":"string"}},"required":["kind","contract"],"title":"EVM ERC-7984 confidential tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hts"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"Hedera tokens (HTS)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Iou"]},"currency":{"type":"string"},"issuer":{"type":"string"}},"required":["kind","currency","issuer"],"title":"XRP Ledger IOU tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cip56"]},"instrumentId":{"type":"string"},"instrumentAdmin":{"type":"string"}},"required":["kind","instrumentId","instrumentAdmin"],"title":"Canton CIP-56 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Coin","LockedCoin"]},"coin":{"type":"string"}},"required":["kind","coin"],"title":"Sui/IOTA Coin assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Xls33"]},"issuanceId":{"type":"string"}},"required":["kind","issuanceId"],"title":"XRP Ledger MPL (XLS-33) tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asset"]},"assetId":{"type":"string"}},"required":["kind","assetId"],"title":"Polymesh/Cardano assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis7"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"Concordium PLTs ( CIS-7 tokens)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar SEP-41 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"TRON TRC-10 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"mint":{"type":"string"}},"required":["kind","mint"],"title":"Solana SPL/SPL2022 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"master":{"type":"string"}},"required":["kind","master"],"title":"TON TEP-74 Jetton"}]},{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"number"},"verified":{"type":"boolean"},"balance":{"type":"string"},"quotes":{"type":"object","properties":{"USD":{"type":"number"}},"description":"Current market price of the asset, keyed by fiat currency (e.g. USD). Sourced from DFNS market data."}},"required":["decimals","balance"]}]}},"netWorth":{"type":"object","properties":{"USD":{"type":"number"}}}},"required":["addressWatchId","network","assets"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/address-watches/{addressWatchId}/blockchain-events":{"get":{"operationId":"getAddressWatchBlockchainEvents","summary":"Get Address Watch Blockchain Events","tags":["Address Watches"],"security":[{"authenticationToken":[]}],"description":"Retrieves a list of decoded blockchain events indexed for the specified address watch.\n\nBlockchain events are not value transfers: asset and token transfers are listed by\n[Get Address Watch History](https://docs.dfns.co/api-reference/address-watches/get-address-watch-history) instead.\nEvents from the same transaction share the same `txHash` across both lists.\n\nItems are sorted by descending block number; within one block the item order is not the on-chain\norder. `index` is the block scoped log index as a decimal string: sort by `blockNumber` and the\nnumeric value of `index` to recover the on-chain order. Webhook delivery is at-least-once and\nunordered; use `id` to deduplicate.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`AddressWatches:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Address watch you want to get the blockchain events from."},"required":true,"description":"Address watch you want to get the blockchain events from.","name":"addressWatchId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"name","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"contract","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"txHash","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AddressWatchBlockchainEvent"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."},"addressWatchId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Address watch id.","example":"aw-0pbh4-7sdh4-2occ0e4r1g7obe8c"},"network":{"$ref":"#/components/schemas/AddressWatchNetwork"}},"required":["items","addressWatchId","network"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/address-watches/{addressWatchId}/history":{"get":{"operationId":"getAddressWatchHistory","summary":"Get Address Watch History","tags":["Address Watches"],"security":[{"authenticationToken":[]}],"description":"Retrieves the list of indexed on chain activities for the specified address watch.\n\nThe list reflects the indexed on chain activity from the moment the watch was created. Events from before the watch are not backfilled.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`AddressWatches:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Address watch you want to get the history from."},"required":true,"description":"Address watch you want to get the history from.","name":"addressWatchId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["In","Out"],"description":"Transfer direction."},"required":false,"description":"Transfer direction.","name":"direction","in":"query"},{"schema":{"type":"string","enum":["NativeTransfer","Aip21Transfer","AsaTransfer","AssetTransfer","Cip56Transfer","Cis2Transfer","Cis7Transfer","CoinTransfer","Erc20Transfer","Erc721Transfer","Erc7984Transfer","HederaErc20Transfer","HederaErc721Transfer","Hip17Transfer","HtsTransfer","IouTransfer","LockedCoinTransfer","Sep41Transfer","Snip2Transfer","Snip3Transfer","SplTransfer","Spl2022Transfer","Tep74Transfer","Trc10Transfer","Trc20Transfer","Trc721Transfer","UtxoTransfer","Xls33Transfer"],"description":"Blockchain event kind."},"required":false,"description":"Blockchain event kind.","name":"kind","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"contract","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AddressWatchHistoryEvent"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."},"addressWatchId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^aw-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Address watch id.","example":"aw-0pbh4-7sdh4-2occ0e4r1g7obe8c"},"network":{"$ref":"#/components/schemas/AddressWatchNetwork"}},"required":["items","addressWatchId","network"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/agreements/latest-unaccepted":{"get":{"operationId":"getLatestUnacceptedAgreement","summary":"Get Latest Unaccepted Agreement","tags":["Agreements"],"security":[{"authenticationToken":[]}],"description":"Get the latest unaccepted agreement for a specific agreement type","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Agreements:Read`: Always required."},"parameters":[{"schema":{"type":"string","enum":["PrivacyPolicy","TermsAndConditions","UniswapTermsOfService","UniswapPrivacyPolicy"],"description":"Type of agreement to look up."},"required":true,"description":"Type of agreement to look up.","name":"agreementType","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"latestAgreement":{"$ref":"#/components/schemas/Agreement"}},"required":["latestAgreement"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/agreements/{agreementId}/accept":{"post":{"operationId":"recordAgreementAcceptance","summary":"Record Agreement Acceptance","tags":["Agreements"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Record the acceptance of a specific agreement by its ID","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Agreements:Accept`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"description":"ID of the agreement to accept."},"required":true,"description":"ID of the agreement to accept.","name":"agreementId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"agreementId":{"type":"string","description":"ID of the agreement that was accepted."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"dateAccepted":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the agreement was accepted.","example":"2023-04-14T20:41:28.715Z"}},"required":["agreementId","userId","dateAccepted"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/allocations/get-0fns-quote":{"post":{"operationId":"createAllocationQuote","summary":"Request 0fns Allocation Quote","tags":["Allocations"],"security":[{"authenticationToken":[]}],"description":"Get a price quote for a 0fns deposit or withdrawal at the current market rate.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["0fns"]},"kind":{"type":"string","enum":["Deposit","Withdraw"],"description":"The type of action being performed on the allocation investment: Deposit to add funds or Withdraw to remove funds."},"sourceAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},"targetAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["kind","contract"]}},"required":["walletId","protocol","kind","sourceAsset","targetAsset"],"description":"Request a 0fns conversion price quote (deposit: stablecoin→0fns; withdraw: 0fns→stablecoin)."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["0fns","SkySusds","GauntletUsdcPrime","SteakhouseUsdt","GauntletUsdcPrimeBase","SteakhouseUsdcBase","SentoraPyusdMain"],"description":"The DeFi protocol used for allocation generation. See [Create Allocation](https://docs.dfns.co/api-reference/allocations/create-allocation) for each protocol's provider, deposit asset, and network."},"kind":{"type":"string","enum":["Deposit","Withdraw"],"description":"The type of action being performed on the allocation investment: Deposit to add funds or Withdraw to remove funds."},"sourceAsset":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}]},"targetAsset":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}]},{"type":"object","properties":{"metadata":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"tid":{"type":"string"}},"required":["network","decimals"]}},"required":["metadata"]}],"description":"Expected output at current market price."},"estFillTime":{"type":"integer","description":"Estimated fill time in seconds."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the quote was created.","example":"2023-04-14T20:41:28.715Z"}},"required":["walletId","protocol","kind","sourceAsset","targetAsset","estFillTime","dateCreated"],"description":"A 0fns conversion price quote."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/allocations":{"post":{"operationId":"createAllocation","summary":"Create Allocation","tags":["Allocations"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new allocation.\n\nAn allocation deposits assets from one of your wallets into a rewards-earning protocol. Two providers are available:\n\n| Provider  | Description                                                                                                                   | Supported chains                   |\n|-----------|---------------------------------------------------------------------------------------------------------------------------------|------------------------------------|\n| M0        | Offers the `0fns` protocol, an extension to the M0 USD-based stablecoin $M. Trade USDC on Ethereum into 0fns to earn rewards. | Ethereum Mainnet, Ethereum Sepolia |\n| Yield.xyz | Offers a set of DeFi vault strategies, each with its own APY. Deposit the vault's underlying token; withdraw it at any time.    | Ethereum Mainnet, Base             |\n\nThe `protocol` field selects the strategy:\n\n| `protocol`              | Provider  | Strategy                          | Deposit asset | Network  |\n|---------------------------|-----------|-----------------------------------|---------------|----------|\n| `0fns`                  | M0        | 0fns                              | USDC          | Ethereum |\n| `SkySusds`              | Yield.xyz | Sky Savings Rate (sUSDS)          | USDS          | Ethereum |\n| `GauntletUsdcPrime`     | Yield.xyz | Gauntlet USDC Prime (gtUSDC)      | USDC          | Ethereum |\n| `SteakhouseUsdt`        | Yield.xyz | Steakhouse USDT (steakUSDT)       | USDT          | Ethereum |\n| `GauntletUsdcPrimeBase` | Yield.xyz | Gauntlet USDC Prime (gtUSDCp)     | USDC          | Base     |\n| `SteakhouseUsdcBase`    | Yield.xyz | Steakhouse USDC (steakUSDC)       | USDC          | Base     |\n| `SentoraPyusdMain`      | Yield.xyz | Sentora PYUSD Main (senPYUSDMain) | PYUSD         | Ethereum |\n\nYield.xyz vaults are available on mainnet networks only.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Allocations:Create`: Always required   \n`Wallets:Transactions:Create`: Always required. Allocation transactions are broadcast from your wallet.   \n`FeeSponsors:Use`: Required if `feeSponsorId` is specified and the sponsoree wallet belongs to an `EndUser` user kind."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["0fns"],"description":"Ofns protocol"},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"sourceAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Source asset and amount to spend (the stablecoin for a deposit).","title":"EVM Fungible Token (ERC-20)"},"targetAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Target asset (0fns) and the minimum amount you will accept.","title":"EVM Fungible Token (ERC-20)"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","sourceAsset","targetAsset"],"description":"Request body for creating a 0fns allocation from a previously obtained quote.","title":"0fns Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SkySusds"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDS amount in smallest unit, e.g. \"1000000000000000000\" = 1 USDS"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDS into the Sky Savings Rate (sUSDS) vault on Ethereum, provided by Yield.xyz.","title":"Sky sUSDS Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["GauntletUsdcPrime"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount in smallest unit, e.g. \"1000000\" = 1 USDC"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDC into the Gauntlet USDC Prime (gtUSDC) vault on Ethereum, provided by Yield.xyz.","title":"Gauntlet gtUSDC Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SteakhouseUsdt"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDT amount in smallest unit, e.g. \"1000000\" = 1 USDT"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDT into the Steakhouse USDT (steakUSDT) vault on Ethereum, provided by Yield.xyz.","title":"Steakhouse USDT Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["GauntletUsdcPrimeBase"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount in smallest unit, e.g. \"1000000\" = 1 USDC"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDC into the Gauntlet USDC Prime (gtUSDCp) vault on Base, provided by Yield.xyz.","title":"Gauntlet USDC Prime (Base) Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SteakhouseUsdcBase"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"USDC amount in smallest unit, e.g. \"1000000\" = 1 USDC"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of USDC into the Steakhouse USDC (steakUSDC) vault on Base, provided by Yield.xyz.","title":"Steakhouse USDC (Base) Allocation Request"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"protocol":{"type":"string","enum":["SentoraPyusdMain"]},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"provider":{"type":"string","enum":["M0","Yield.xyz"],"description":"The provider handling this allocation. `M0` offers the 0fns protocol; `Yield.xyz` offers vault strategies on Ethereum and Base."},"amount":{"type":"string","pattern":"^\\d+$","description":"PYUSD amount in smallest unit, e.g. \"1000000\" = 1 PYUSD"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["walletId","protocol","amount"],"description":"Request body for creating an allocation of PYUSD into the Sentora PYUSD Main (senPYUSDMain) vault on Ethereum, provided by Yield.xyz.","title":"Sentora PYUSD Main Allocation Request"}],"description":"Request body for creating an allocation investment."},"examples":{"Ofns":{"value":{"externalId":"ext-123","walletId":"wa-4g991-s29to-9hrq4nbuto6ih33b","protocol":"0fns","sourceAsset":{"kind":"Erc20","contract":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1000000"},"targetAsset":{"kind":"Erc20","contract":"0x64df20A1814a6DD0F3d6f0A14073c47214c53f58","amount":"990000"}}},"GauntletUsdcPrime":{"value":{"externalId":"ext-456","walletId":"wa-4g991-s29to-9hrq4nbuto6ih33b","protocol":"GauntletUsdcPrime","provider":"Yield.xyz","amount":"1000000000"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Allocation"},{"type":"object","properties":{"actions":{"type":"array","items":{"$ref":"#/components/schemas/AllocationAction"}}},"required":["actions"]}],"description":"A allocation investment representing funds deposited to earn interest from a DeFi protocol."}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listAllocations","summary":"List Allocations","tags":["Allocations"],"security":[{"authenticationToken":[]}],"description":"Lists the allocations of your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Allocations:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Allocation"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/allocations/{allocationId}/actions":{"post":{"operationId":"createAllocationAction","summary":"Create Allocation Action","tags":["Allocations"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new action for an existing allocation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Allocations:Update`: Always required   \n`Wallets:Transactions:Create`: Always required. Allocation transactions are broadcast from your wallet.   \n`FeeSponsors:Use`: Required if `feeSponsorId` is specified and the sponsoree wallet belongs to an `EndUser` user kind."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Unique identifier for the allocation investment."},"required":true,"description":"Unique identifier for the allocation investment.","name":"allocationId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Deposit","Withdraw"],"description":"The type of action being performed on the allocation investment: Deposit to add funds or Withdraw to remove funds."},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"sourceAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Source asset and amount to spend (stablecoin for Deposit, 0fns for Withdraw).","title":"EVM Fungible Token (ERC-20)"},"targetAsset":{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"description":"Target asset and the minimum amount you will accept (0fns for Deposit, stablecoin for Withdraw).","title":"EVM Fungible Token (ERC-20)"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","sourceAsset","targetAsset"],"description":"Request body for a 0fns allocation action (deposit or withdrawal) from a quote.","title":"0fns Allocation Action Request"},{"type":"object","properties":{"kind":{"type":"string","enum":["Deposit","Withdraw"],"description":"The type of action being performed on the allocation investment: Deposit to add funds or Withdraw to remove funds."},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"amount":{"type":"string","pattern":"^\\d+$","description":"Underlying token amount in smallest unit, e.g. \"1000000\" = 1 USDC. Applies to both deposits and withdrawals."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","amount"],"description":"Request body for creating an allocation action (deposit or withdrawal) for a Yield.xyz vault allocation. The amount is expressed in the underlying token of the vault (e.g. USDC for Gauntlet USDC Prime).","title":"Yield.xyz Vault Allocation Action Request"}],"description":"Request body for creating an allocation action."}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Allocation"},{"type":"object","properties":{"actions":{"type":"array","items":{"$ref":"#/components/schemas/AllocationAction"}}},"required":["actions"]}],"description":"A allocation investment representing funds deposited to earn interest from a DeFi protocol."}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listAllocationActions","summary":"List Allocation Actions","tags":["Allocations"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of actions for a specific allocation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Allocations:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Unique identifier for the allocation investment."},"required":true,"description":"Unique identifier for the allocation investment.","name":"allocationId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AllocationAction"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/allocations/{allocationId}":{"get":{"operationId":"getAllocation","summary":"Get Allocation","tags":["Allocations"],"security":[{"authenticationToken":[]}],"description":"Retrieve the details of a specific allocation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Allocations:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Unique identifier for the allocation investment."},"required":true,"description":"Unique identifier for the allocation investment.","name":"allocationId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Allocation"},{"type":"object","properties":{"actions":{"type":"array","items":{"$ref":"#/components/schemas/AllocationAction"}}},"required":["actions"]}],"description":"A allocation investment representing funds deposited to earn interest from a DeFi protocol."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/allocations/info":{"get":{"operationId":"getAllocationsInfo","summary":"Get Allocations Info","tags":["Allocations"],"security":[{"authenticationToken":[]}],"description":"Retrieve the current reward rate (APY) for each supported allocation protocol.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Allocations:Read`: Always required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"0fns":{"type":"object","properties":{"rewardsRate":{"type":"number"}},"required":["rewardsRate"]},"SkySusds":{"type":"object","properties":{"rewardsRate":{"type":"number"}},"required":["rewardsRate"]},"GauntletUsdcPrime":{"type":"object","properties":{"rewardsRate":{"type":"number"}},"required":["rewardsRate"]},"SteakhouseUsdt":{"type":"object","properties":{"rewardsRate":{"type":"number"}},"required":["rewardsRate"]},"GauntletUsdcPrimeBase":{"type":"object","properties":{"rewardsRate":{"type":"number"}},"required":["rewardsRate"]},"SteakhouseUsdcBase":{"type":"object","properties":{"rewardsRate":{"type":"number"}},"required":["rewardsRate"]},"SentoraPyusdMain":{"type":"object","properties":{"rewardsRate":{"type":"number"}},"required":["rewardsRate"]}}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/allocations/cancel-0fns-order-placement":{"post":{"operationId":"cancel0fnsOrderPlacement","summary":"Cancel an unfilled 0fns order placement","tags":["Allocations"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Craft and broadcast an on-chain cancelOrder to cancel a 0fns OrderBook order placement that was not filled, reclaiming its escrow. The escrowed input token is returned to the wallet that funded the order.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Allocations:Update`: Always required   \n`Wallets:Transactions:Create`: Always required. The cancellation (cancelOrder) is broadcast from your wallet.   \n`FeeSponsors:Use`: Required if `feeSponsorId` is specified and the sponsoree wallet belongs to an `EndUser` user kind."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"allocationActionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^allctn-a-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The 0fns allocation action whose unfilled OrderBook order placement should be cancelled.","example":"allctn-a-04p5n-gkkgd-5qk71nuev5n2ug1t"},"externalId":{"type":"string","description":"An optional external identifier provided by the client to ensure idempotency and prevent duplicate operations."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this allocation. When set, allocation transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["allocationActionId"],"description":"Cancel an unfilled 0fns OrderBook order placement and reclaim its escrow to the funding wallet.","title":"0fns Order Placement Cancellation Request"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the broadcast on-chain cancelOrder transaction."}},"required":["transactionId"],"description":"The broadcast 0fns order-placement cancellation transaction."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/action":{"post":{"operationId":"createUserActionSignature","summary":"Create User Action Signature","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Completes the user action signing process and provides a signing token that can be used to verify the user intended to perform the action.\n\nThis is the first step of the [User Action Signing flow](https://docs.dfns.co/api-reference/auth/signing-flows).\n\nThe type of credentials used to sign the action is determined by the `kind` field in the nested objects (`firstFactor` and `secondFactor`). Supported credential kinds are:\n* `Fido2`: User action is signed by a user's signing device using `WebAuthn`.\n* `Key`: User action is signed by a user's, or token's, private key.\n* `PasswordProtectedKey`: Login challenge is signed by the decrypted user's private key that was sent during [Create User Action Signature Challenge](https://docs.dfns.co/api-reference/auth/create-user-action-challenge) step.\n","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"challengeIdentifier":{"type":"string","description":"Temporary authentication token returned by the Create Challenge endpoint."},"firstFactor":{"$ref":"#/components/schemas/FirstFactorAssertion"},"secondFactor":{"$ref":"#/components/schemas/SecondFactorAssertion"}},"required":["challengeIdentifier","firstFactor"],"additionalProperties":false},"examples":{"Fido2 Passkey credential":{"value":{"challengeIdentifier":"eyJ0e...fQNA","firstFactor":{"kind":"Fido2","credentialAssertion":{"credId":"c1QEdgnPLJargwzy3cbYKny4Q18u0hr97unXsF3DiE8","clientData":"eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiTVdNME1tWTVZVFEwTURSaU56ZGhOVEZoTnpZNU9EUXdOV0k1WlRRNFkyUmhPRFppTkRrM1pUWXpPVEU1T0dZeU1EY3haakJqWXprNE1tUTVZelkxTUEiLCJvcmlnaW4iOiJodHRwczovL2FwcC5kZm5zLm5pbmphIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ","authenticatorData":"WT-zFZUBbJHfBkmhzTlPf49LTn7asLeTQKhm_riCvFgFAAAAAA","signature":"MEUCIQDJ8G9J1NTjdoKx0yloYw45bpn6fJhcqCoUGiZuOU1IAQIgAtPt7S8FHFYW9OMHh3S5FVAxk-lhli-2lX22bBNSDog","userHandle":"dXMtMmJhMGgtbHZwMnEtOHYxODYwcGNqMWJoNWlyaQ"}}}},"Key Credential":{"value":{"challengeIdentifier":"eyJ0e...fQNA","firstFactor":{"kind":"Key","credentialAssertion":{"credId":"6Ca6tAOFTx2odyJBnCoRO-gPvfpfy0EOoOcEaxfxIOk","clientData":"eyJ0eXBlIjoia2V5LmdldCIsImNoYWxsZW5nZSI6Ik1XTTBNbVk1WVRRME1EUmlOemRoTlRGaE56WTVPRFF3TldJNVpUUTRZMlJoT0RaaU5EazNaVFl6T1RFNU9HWXlNRGN4WmpCall6azRNbVE1WXpZMU1BIiwib3JpZ2luIjoiaHR0cHM6Ly9hcHAuZGZucy5uaW5qYSIsImNyb3NzT3JpZ2luIjpmYWxzZX0","signature":"owt8WtpJT_6eEuw4UwdIX2HMMwENgk0SrI-RoCMPhx_9YMVpNKJGmJfHUusf_R1Mor9a_hinQVuXj4_XRdeJFSY2AySXSUk"}}}},"Password-protected Key Credential":{"value":{"challengeIdentifier":"eyJ0e...fQNA","firstFactor":{"kind":"PasswordProtectedKey","credentialAssertion":{"credId":"6Ca6tAOFTx2odyJBnCoRO-gPvfpfy0EOoOcEaxfxIOk","clientData":"eyJ0eXBlIjoia2V5LmdldCIsImNoYWxsZW5nZSI6Ik1XTTBNbVk1WVRRME1EUmlOemRoTlRGaE56WTVPRFF3TldJNVpUUTRZMlJoT0RaaU5EazNaVFl6T1RFNU9HWXlNRGN4WmpCall6azRNbVE1WXpZMU1BIiwib3JpZ2luIjoiaHR0cHM6Ly9hcHAuZGZucy5uaW5qYSIsImNyb3NzT3JpZ2luIjpmYWxzZX0","signature":"owt8WtpJT_6eEuw4UwdIX2HMMwENgk0SrI-RoCMPhx_9YMVpNKJGmJfHUusf_R1Mor9a_hinQVuXj4_XRdeJFSY2AySXSUk"}}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"userAction":{"type":"string","description":"Signing token to use to verify the user intended to perform the action."}},"required":["userAction"],"example":{"userAction":"eyJ0eX...bzrQakA"}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/action/init":{"post":{"operationId":"createUserActionChallenge","summary":"Create User Action Challenge","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Starts a user action signing session, returning a challenge that will be used to verify the user's intent to perform an action.\n  \n  This is the first step of the [User Action Signing flow](https://docs.dfns.co/api-reference/auth/signing-flows).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userActionServerKind":{"type":"string","enum":["Api"],"description":"Optional indicator of which Dfns service being called."},"userActionHttpMethod":{"type":"string","enum":["POST","PUT","DELETE","GET"],"description":"The HTTP method that will be used to make the request that is being signed."},"userActionHttpPath":{"type":"string","minLength":1,"description":"The path of the request that is being signed."},"userActionPayload":{"type":"string","description":"The JSON-encoded body of the request that is being signed."}},"required":["userActionHttpMethod","userActionHttpPath","userActionPayload"],"additionalProperties":false,"example":{"userActionPayload":"{\"name\": \"My PAT\",\"publicKey\": \"-----BEGIN PUBLIC KEY-----\\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZQt0YI2hdsFNmKJesSkAHldyPLIV\\nFLI/AhQ5eGasA7jU8tEXOb6nGvxRaTIXrgZ2NPdk78O8zMqz5u9AekH8jA==\\n-----END PUBLIC KEY-----\",\"daysValid\": 365,\"permissionId\": \"pm-delaw-avoca-v16r37fpp8koqebc\"}","userActionHttpMethod":"POST","userActionHttpPath":"/auth/pats"}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"challenge":{"type":"string","description":"Challenge (string) to be signed by the requester with his private key."},"challengeIdentifier":{"type":"string","description":"A JWT that identifies the signing session."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"array","items":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/CredentialKind"},"factor":{"type":"string","enum":["first","second","either"],"description":"Indicates if the credential can be used as a first factor, second factor, or either; can be `first`, `second`, or `either`."},"requiresSecondFactor":{"type":"boolean","description":"When true indicates a second factor credential is required if the credential is used as a first factor."}},"required":["kind","factor","requiresSecondFactor"]},"description":"Identifies the kind of credentials that can be used to sign the user action."},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"allowCredentials":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"List of keys that the user can use to sign the user action."},"passwordProtectedKey":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"encryptedPrivateKey":{"type":"string","description":"Encrypted Private Key. Only the user knows the password to decrypt it and have access to the private key."}},"required":["type","id","encryptedPrivateKey"]},"description":"List of password protected keys that the user can use to sign the login challenge."},"webauthn":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"List of WebAuthn credentials that the user can use to sign the user action."}},"required":["key","webauthn"],"description":"List of credentials that the user can use to sign the user action."},"externalAuthenticationUrl":{"type":"string","description":"Optional url containing a secret value that can be used to enable cross device/origin signing."}},"required":["challenge","challengeIdentifier","supportedCredentialKinds","userVerification","attestation","allowCredentials","externalAuthenticationUrl"],"example":{"supportedCredentialKinds":[{"kind":"Fido2","factor":"first","requiresSecondFactor":true}],"challenge":"MWM0MmY5YTQ0MDRiNzdhNTFhNzY5ODQwNWI5ZTQ4Y2RhODZiNDk3ZTYzOTE5OGYyMDcxZjBjYzk4MmQ5YzY1MA","challengeIdentifier":"eyJ0e...fQNA","userVerification":"required","attestation":"direct","externalAuthenticationUrl":"","allowCredentials":{"key":[],"passwordProtectedKey":[{"type":"public-key","id":"hIjkx5PqVxz8wbtuvOh2UYHEY1QXS8mMfKeEDGt-0Fo=","encryptedPrivateKey":"LsXVskHYqqrKKxBC9KvqStLEmxak5Y7NaboDDlRSIW7evUJpQTT1AYvx0EsFskmriaVb3AjTCGEv7gqUKokml1USL7+dVmrUVhV+cNWtS5AorvRuZr1FMGVKFkW1pKJhFNH2e2O661UhpyXsRXzcmksA7ZN/V37ZK7ITue0gs6I="}],"webauthn":[{"type":"public-key","id":"c1QEdgnPLJargwzy3cbYKny4Q18u0hr97unXsF3DiE8"}]}}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/action/logs":{"get":{"operationId":"listAuditLogs","summary":"List Audit Logs","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"\n  Gets all signature events which have occurred in the over the timeframe. The time range is unbounded, but the export is capped at 100,000 rows. When the result is truncated, the `X-Dfns-Result-Truncated: true` response header is set and a trailing `# TRUNCATED ...` line is appended to the CSV; narrow the time range to retrieve all data.\n\nStartTime and EndTime are URL-encoded UTC ISO timestamps:\n`startTime=2025-08-29T02%3A46%3A40Z`   \n`endTime=2025-09-01T02%3A46%3A40Z`   \n\nAn additional optional query parameter, `userId` can be specified to filter down events to a particular user. The API will return results found in CSV format.\n\n\nDfns maintains a script which can be used for audit log signature validation: [WebAuthn Signature Verifier](https://github.com/dfns/dfns-sdk-python/tree/main/examples/verify-webauthn-signature)\n\n","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Logs:Read`: Always required."},"parameters":[{"schema":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Start of the range."},"required":true,"description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Start of the range.","name":"startTime","in":"query"},{"schema":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). End of the range. The export is capped at 100,000 rows."},"required":true,"description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). End of the range. The export is capped at 100,000 rows.","name":"endTime","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Provide a user id to list events from that particular user only."},"required":false,"description":"Provide a user id to list events from that particular user only.","name":"userId","in":"query"}],"responses":{"200":{"description":"Success","content":{"text/csv":{"schema":{"type":"string","description":"List of event in CSV format. Content contains:\n\n| Field | Type | description |\n| ----- | ---- | ----------- |\n| Date Performed | date-time | When the action was performed |\n| Audit Log ID | log id | id of the log (to use with [Get Audit Log](https://docs.dfns.co/api-reference/auth/get-audit-log)) |\n| User ID | user id | User id who performed the action |\n| Username | string | Username who performed the action |\n| Primary Credential ID | credential id | Credential used by the user |\n| Action Path | string | Path of this action |\n| Summary | string | Summary of this action |\n| Date Signed | date-time | When the user action token was signed |\n| Date Resolved | date-time | When the action reached its final outcome. Empty for legacy rows recorded before outcome tracking |\n| Response Status | string | Final HTTP status code returned for the action (e.g. 200, 403). Empty for legacy rows |\n| Response Error | string | Failure reason for the action, when it failed. Empty on success |\n\nCheck out '[Get Audit Log](https://docs.dfns.co/api-reference/auth/get-audit-log)' response for more details about those fields.\n    ","example":"Date Performed,Audit Log ID,User ID,Username,Primary Credential ID,Action Path,Summary,Date Signed,Date Resolved,Response Status,Response Error\n2025-10-09T13:23:05.134Z,uj-4vs1l-5012b-9589s12d57t26u8,us-4ovh4-6a0h8-81d2df5e2u8l6djt,my-user@my-company.com,cr-7bfqk-89uag-8nle1s2d3f8e6dvd1mk,/wallets/wa-3l6ap-r4cbt-8js1e2f3s8u5242c8,Update wallet wa-3l6ap-r4cbt-8j09mhse1f3s5e242c8.,2025-10-09T13:23:04.000Z,2025-10-09T13:23:05.600Z,200,"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/action/logs/{id}":{"get":{"operationId":"getAuditLog","summary":"Get Audit Log","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"\nGets detailed information for a particular audit log. Specifically, the API returns the action performed, as well as the `firstFactorCredential` in which you will find the signature information required to validate it. \n\nDfns maintains a script which can be used for audit log signature validation: [WebAuthn Signature Verifier](https://github.com/dfns/dfns-sdk-python/tree/main/examples/verify-webauthn-signature)\n\nBecause the response includes the full signed action (request body and path), details are only returned for actions on routes that Dfns has marked as safe to expose (the same set forwarded to SIEM exports). Requesting details for any other event returns `403 Forbidden`.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Logs:Read`: Always required."},"parameters":[{"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"pattern":"^uj-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"","example":"uj-22lhj-mp2ir-88at3r4cufpis60i"},{"type":"string","minLength":1,"maxLength":64,"pattern":"^to-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"","example":"to-202a0-cdo33-o65mbt6q758lvvnt"}],"description":"Log id you need information about."},"required":true,"description":"Log id you need information about.","name":"id","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLog"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/apps":{"get":{"operationId":"listApplications","summary":"List Applications","tags":["Auth"],"security":[{"authenticationToken":[]}],"deprecated":true,"description":"<Warning>\n  Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/deprecation/applications-deprecation).\n  </Warning>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"appId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the application (deprecated).","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["ServerSideApplication","ClientSideApplication"]},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"expectedRpId":{"type":"string","description":"Expected relying party ID for webauthn (deprecated)."},"name":{"type":"string","description":"Human-readable name of the application."},"isActive":{"type":"boolean","description":"Whether the application is active."},"expectedOrigin":{"type":"string","description":"Expected origin for webauthn (deprecated)."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the application."},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"},"description":"Access tokens associated with the application."}},"required":["appId","kind","orgId","name","isActive","permissionAssignments","accessTokens"]},"description":"Current page items."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/apps/{appId}":{"get":{"operationId":"getApplication","summary":"Get Application","tags":["Auth"],"security":[{"authenticationToken":[]}],"deprecated":true,"description":"<Warning>\n  Applications are deprecated and will be removed in a future release. See details [here](https://docs.dfns.co/deprecation/applications-deprecation).\n  </Warning>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the application (deprecated)."},"required":true,"description":"ID of the application (deprecated).","name":"appId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"appId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the application (deprecated).","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["ServerSideApplication","ClientSideApplication"]},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"expectedRpId":{"type":"string","description":"Expected relying party ID for webauthn (deprecated)."},"name":{"type":"string","description":"Human-readable name of the application."},"isActive":{"type":"boolean","description":"Whether the application is active."},"expectedOrigin":{"type":"string","description":"Expected origin for webauthn (deprecated)."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the application."},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"},"description":"Access tokens associated with the application."}},"required":["appId","kind","orgId","name","isActive","permissionAssignments","accessTokens"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials":{"post":{"operationId":"createCredential","summary":"Create Credential","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Part of the flow [Create Credential Regular flow](https://docs.dfns.co/api-reference/auth/credentials#regular-flow).\n\nAdds a new credential to a user's account. See [Credential Kinds](https://docs.dfns.co/api-reference/auth/credentials#credential-kinds) for all supported credential types.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateCredentialFido2Attestation"},{"$ref":"#/components/schemas/CreateCredentialKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialPasswordProtectedKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialRecoveryKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialPasswordAttestation"},{"$ref":"#/components/schemas/CreateCredentialTotpAttestation"}],"discriminator":{"propertyName":"credentialKind","mapping":{"Fido2":"#/components/schemas/CreateCredentialFido2Attestation","Key":"#/components/schemas/CreateCredentialKeyAttestation","PasswordProtectedKey":"#/components/schemas/CreateCredentialPasswordProtectedKeyAttestation","RecoveryKey":"#/components/schemas/CreateCredentialRecoveryKeyAttestation","Password":"#/components/schemas/CreateCredentialPasswordAttestation","Totp":"#/components/schemas/CreateCredentialTotpAttestation"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credential"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listCredentials","summary":"List Credentials","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"List all credentials for a user.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Credential"},"description":"Current page items."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials/init":{"post":{"operationId":"createCredentialChallenge","summary":"Create Credential Challenge","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Part of the flow [Create Credential Regular flow](https://docs.dfns.co/api-reference/auth/credentials#regular-flow).\n  \n  Starts a create user credential session, returning a challenge that will be used to verify the user's identity.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","Totp"]}},"required":["kind"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Fido2"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","temporaryAuthenticationToken"],"description":"Fido2 Credential, also known as Passkeys or WebauthN credential.","title":"Fido2/Passkeys"},{"type":"object","properties":{"kind":{"type":"string","enum":["Key"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams","temporaryAuthenticationToken"],"description":"\"raw\" public/private keypair.","title":"Public/Private key pair"},{"type":"object","properties":{"kind":{"type":"string","enum":["PasswordProtectedKey"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams","temporaryAuthenticationToken"],"description":"Encrypted private key. ","title":"Password-protected Key"},{"type":"object","properties":{"kind":{"type":"string","enum":["RecoveryKey"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams","temporaryAuthenticationToken"],"description":"Use an recovery key. ","title":"Recovery Credentials"},{"type":"object","properties":{"kind":{"type":"string","enum":["Password"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","temporaryAuthenticationToken"],"description":"Not supported, will be removed in a future release.","title":"<Deprecated> Password"},{"type":"object","properties":{"kind":{"type":"string","enum":["Totp"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"otpUrl":{"type":"string","description":"Provisioning URL for the TOTP authenticator."},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","otpUrl","temporaryAuthenticationToken"],"description":"Not supported, will be removed in a future release.","title":"<Deprecated> TOTP"},{"type":"object","properties":{"kind":{"type":"string","enum":["SessionKey"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams"],"description":"Ephemeral key bound to an OIDC login session.","title":"Session Key"}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials/activate":{"put":{"operationId":"activateCredential","summary":"Activate Credential","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Activates a credential that was previously deactivated. If the credential is already activated no action is taken.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"credentialUuid":{"type":"string","minLength":1,"description":"UUID of the credential to activate."}},"required":["credentialUuid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable success message."}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials/{credentialUuid}":{"delete":{"operationId":"deleteCredential","summary":"Delete Credential","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a specific credential.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"credentialUuid","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials/deactivate":{"put":{"operationId":"deactivateCredential","summary":"Deactivate Credential","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deactivates a credential that was previously active. If the credential is already deactivated no action is taken.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"credentialUuid":{"type":"string","minLength":1,"description":"UUID of the credential to deactivate."}},"required":["credentialUuid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable success message."}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials/code":{"post":{"operationId":"createCredentialCode","summary":"Create Credential Code","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Part of the [Create Credential With Code flow](https://docs.dfns.co/api-reference/auth/credentials#create-credential-with-code-flow).\n\nCreates a one-time-code that can then be used to create a new credential from a place you don't have access to one of your existing credential.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expiration":{"anyOf":[{"type":"string","format":"date-time"},{"type":"integer","exclusiveMinimum":0}],"description":"Code expiration, as an ISO-8601 datetime string, or a unix timestamp"}},"required":["expiration"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"One-time code that can be used to create a new credential."},"expiration":{"type":"string","description":"Code expiration, as an ISO-8601 datetime string or a unix timestamp."}},"required":["code","expiration"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials/code/init":{"post":{"operationId":"createCredentialChallengeWithCode","summary":"Create Credential Challenge With Code","tags":["Auth"],"security":[{}],"description":"Part of the flow [Create Credential With Code](https://docs.dfns.co/api-reference/auth/credentials#create-credential-with-code-flow).\n\nCreates a credential challenge using a one time code-time-code. This challenge must then be signed by the new credential, before finalizing the flow.\n","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"credentialKind":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","Totp"]},"code":{"type":"string","minLength":1,"description":"One-time code obtained from the create credential code endpoint."}},"required":["credentialKind","code"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Fido2"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","temporaryAuthenticationToken"],"description":"Fido2 Credential, also known as Passkeys or WebauthN credential.","title":"Fido2/Passkeys"},{"type":"object","properties":{"kind":{"type":"string","enum":["Key"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams","temporaryAuthenticationToken"],"description":"\"raw\" public/private keypair.","title":"Public/Private key pair"},{"type":"object","properties":{"kind":{"type":"string","enum":["PasswordProtectedKey"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams","temporaryAuthenticationToken"],"description":"Encrypted private key. ","title":"Password-protected Key"},{"type":"object","properties":{"kind":{"type":"string","enum":["RecoveryKey"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams","temporaryAuthenticationToken"],"description":"Use an recovery key. ","title":"Recovery Credentials"},{"type":"object","properties":{"kind":{"type":"string","enum":["Password"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","temporaryAuthenticationToken"],"description":"Not supported, will be removed in a future release.","title":"<Deprecated> Password"},{"type":"object","properties":{"kind":{"type":"string","enum":["Totp"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"otpUrl":{"type":"string","description":"Provisioning URL for the TOTP authenticator."},"temporaryAuthenticationToken":{"type":"string","description":"@deprecated use challengeIdentifier instead"}},"required":["kind","user","challengeIdentifier","otpUrl","temporaryAuthenticationToken"],"description":"Not supported, will be removed in a future release.","title":"<Deprecated> TOTP"},{"type":"object","properties":{"kind":{"type":"string","enum":["SessionKey"]},"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challengeIdentifier":{"type":"string","description":"Challenge identifier to be used in the subsequent create credential request."},"challenge":{"type":"string","description":"Challenge value to be signed by the credential."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]}}},"required":["kind","user","challengeIdentifier","challenge","attestation","pubKeyCredParams"],"description":"Ephemeral key bound to an OIDC login session.","title":"Session Key"}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/credentials/code/verify":{"post":{"operationId":"createCredentialWithCode","summary":"Create Credential With Code","tags":["Auth"],"security":[{}],"description":"Finalizes the flow [Create Credential With Code](https://docs.dfns.co/api-reference/auth/credentials#create-credential-with-code-flow).\n  \nAdds a new credential to a user's account. This endpoint is similar to the [Create Credential](https://docs.dfns.co/api-reference/auth/create-credential) endpoint, except:\n* it does not need the user to be authenticated\n* it does not need user action signing\n* it will only work with the challenge gotten from the [Create Credential Challenge With Code](https://docs.dfns.co/api-reference/auth/create-credential-challenge-with-code) endpoint\n\n  ","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateCredentialFido2Attestation"},{"$ref":"#/components/schemas/CreateCredentialKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialPasswordProtectedKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialRecoveryKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialPasswordAttestation"},{"$ref":"#/components/schemas/CreateCredentialTotpAttestation"}],"discriminator":{"propertyName":"credentialKind","mapping":{"Fido2":"#/components/schemas/CreateCredentialFido2Attestation","Key":"#/components/schemas/CreateCredentialKeyAttestation","PasswordProtectedKey":"#/components/schemas/CreateCredentialPasswordProtectedKeyAttestation","RecoveryKey":"#/components/schemas/CreateCredentialRecoveryKeyAttestation","Password":"#/components/schemas/CreateCredentialPasswordAttestation","Totp":"#/components/schemas/CreateCredentialTotpAttestation"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credential"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/init":{"post":{"operationId":"createLoginChallenge","summary":"Create Login Challenge","tags":["Auth"],"security":[{}],"description":"Start a user login session, returning a challenge that will be used to verify the user's identity.\n\nIf the user has a credential of kind `PasswordProtectedKey` a temporary one time code needs to be passed in the `loginCode` field.\n\nIf the user has at least one discoverable WebAuthn credential, `username` is optional (username-less flow).","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user. Optional when the user has at least one discoverable WebAuthn credential."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"loginCode":{"type":"string","description":"One-time login code, required when the user has a credential of kind `PasswordProtectedKey`."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"challenge":{"type":"string","description":"Challenge (string) to be signed by the requester with his private key."},"challengeIdentifier":{"type":"string","description":"A JWT that identifies the signing session."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"array","items":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/CredentialKind"},"factor":{"type":"string","enum":["first","second","either"],"description":"Indicates if the credential can be used as a first factor, second factor, or either; can be `first`, `second`, or `either`."},"requiresSecondFactor":{"type":"boolean","description":"When true indicates a second factor credential is required if the credential is used as a first factor."}},"required":["kind","factor","requiresSecondFactor"]},"description":"Identifies the kind of credentials that can be used to sign the user action."},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"allowCredentials":{"type":"object","properties":{"key":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"List of keys that the user can use to sign the user action."},"passwordProtectedKey":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"encryptedPrivateKey":{"type":"string","description":"Encrypted Private Key. Only the user knows the password to decrypt it and have access to the private key."}},"required":["type","id","encryptedPrivateKey"]},"description":"List of password protected keys that the user can use to sign the login challenge."},"webauthn":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"List of WebAuthn credentials that the user can use to sign the user action."}},"required":["key","webauthn"],"description":"List of credentials that the user can use to sign the user action."},"externalAuthenticationUrl":{"type":"string","description":"Optional url containing a secret value that can be used to enable cross device/origin signing."}},"required":["challenge","challengeIdentifier","supportedCredentialKinds","userVerification","attestation","allowCredentials","externalAuthenticationUrl"],"example":{"supportedCredentialKinds":[{"kind":"Fido2","factor":"first","requiresSecondFactor":true}],"challenge":"MWM0MmY5YTQ0MDRiNzdhNTFhNzY5ODQwNWI5ZTQ4Y2RhODZiNDk3ZTYzOTE5OGYyMDcxZjBjYzk4MmQ5YzY1MA","challengeIdentifier":"eyJ0e...fQNA","userVerification":"required","attestation":"direct","externalAuthenticationUrl":"","allowCredentials":{"key":[],"passwordProtectedKey":[{"type":"public-key","id":"hIjkx5PqVxz8wbtuvOh2UYHEY1QXS8mMfKeEDGt-0Fo=","encryptedPrivateKey":"LsXVskHYqqrKKxBC9KvqStLEmxak5Y7NaboDDlRSIW7evUJpQTT1AYvx0EsFskmriaVb3AjTCGEv7gqUKokml1USL7+dVmrUVhV+cNWtS5AorvRuZr1FMGVKFkW1pKJhFNH2e2O661UhpyXsRXzcmksA7ZN/V37ZK7ITue0gs6I="}],"webauthn":[{"type":"public-key","id":"c1QEdgnPLJargwzy3cbYKny4Q18u0hr97unXsF3DiE8"}]}}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/delegated":{"post":{"operationId":"delegatedLogin","summary":"Delegated Login","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"\n  <Warning>\nOnly a [Service Account](https://docs.dfns.co/api-reference/auth/service-accounts) can use this endpoint.\n</Warning>\n\nLogs a user into an organization without the user's credentials.\n\nIf you want to use your own authentication system, while still using `Delegated Signing`, you can use this endpoint to authenticate a user without needing the user's credentials.\n\nThe user authentication token can be used for read operations within the Dfns API, however, write operations will still require the user to sign the action.\n","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Delegated:Login`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user to log in."}},"required":["username"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Authentication token issued to the user."},"expiry":{"type":"number","description":"Token expiration time in epoch milliseconds."},"identity":{"type":"object","properties":{"orgId":{"type":"string"},"tenantId":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["userId","username"],"description":"Decoded identity for the issued token. Populated for flows whose token is not a Dfns-minted JWT (e.g. OIDC passthrough) so clients can skip JWT decoding; absent on flows where the token's claims carry the same fields."}},"required":["token"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login":{"post":{"operationId":"login","x-dfns-deprecated-operation-id":"completeUserLogin","summary":"Complete User Login","tags":["Auth"],"security":[{}],"description":"Completes the login process and provides the authenticated user with their authentication token.\n\nThe type of credentials used to login is determined by the `kind` field in the nested objects (`firstFactor` and `secondFactor`). Supported credential kinds are:\n* `Fido2`: Login challenge is signed by a user's signing device using `WebAuthn`.\n* `Key`: Login challenge is signed by a user's private key.\n* `PasswordProtectedKey`: Login challenge is signed by the decrypted user's private key that was sent during the [Create Login Challenge](https://docs.dfns.co/api-reference/auth/create-login-challenge) step.\n","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"challengeIdentifier":{"type":"string","description":"Temporary authentication token returned by the Create Challenge endpoint."},"firstFactor":{"$ref":"#/components/schemas/FirstFactorAssertion"},"secondFactor":{"$ref":"#/components/schemas/SecondFactorAssertion"}},"required":["challengeIdentifier","firstFactor"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"token":{"type":"string","description":"Authentication token issued to the user."},"expiry":{"type":"number","description":"Token expiration time in epoch milliseconds."},"identity":{"type":"object","properties":{"orgId":{"type":"string"},"tenantId":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["userId","username"],"description":"Decoded identity for the issued token. Populated for flows whose token is not a Dfns-minted JWT (e.g. OIDC passthrough) so clients can skip JWT decoding; absent on flows where the token's claims carry the same fields."}},"required":["token"]},{"type":"object","properties":{"ssoClientId":{"type":"string","description":"Identifier of the SSO client to use to complete the login flow."}},"required":["ssoClientId"]}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/logout":{"put":{"operationId":"logout","summary":"Logout","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Completes the user logout process.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"allSessions":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable success message."}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/oidc/credentials":{"post":{"operationId":"oidcLoginCredentials","summary":"Oidc Login Credentials","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Registers the first credential for an OIDC-authenticated user, bootstrapping from the credential challenge issued by [Complete OIDC Login](/api-reference/auth/complete-oidc-login). Rejected if the user already has an active first-factor credential; use [Create Credential](/api-reference/auth/create-credential) in that case.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateCredentialFido2Attestation"},{"$ref":"#/components/schemas/CreateCredentialKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialPasswordProtectedKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialRecoveryKeyAttestation"},{"$ref":"#/components/schemas/CreateCredentialPasswordAttestation"},{"$ref":"#/components/schemas/CreateCredentialTotpAttestation"},{"$ref":"#/components/schemas/CreateCredentialSessionKeyAttestation"}],"discriminator":{"propertyName":"credentialKind","mapping":{"Fido2":"#/components/schemas/CreateCredentialFido2Attestation","Key":"#/components/schemas/CreateCredentialKeyAttestation","PasswordProtectedKey":"#/components/schemas/CreateCredentialPasswordProtectedKeyAttestation","RecoveryKey":"#/components/schemas/CreateCredentialRecoveryKeyAttestation","Password":"#/components/schemas/CreateCredentialPasswordAttestation","Totp":"#/components/schemas/CreateCredentialTotpAttestation","SessionKey":"#/components/schemas/CreateCredentialSessionKeyAttestation"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credential"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/oidc":{"post":{"operationId":"oidcLogin","x-dfns-deprecated-operation-id":"completeOidcLogin","summary":"Complete OIDC Login","tags":["Auth"],"security":[{}],"description":"Completes the OIDC login process by exchanging the authorization code obtained from the identity provider. Returns the user's authentication token; when the verified user has no active first-factor credential yet, the response also includes a credential challenge so the client can register one before performing any user-action-signed operation.","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Authorization code obtained from the IdP"},"state":{"type":"string","description":"State forwarded by the IdP"}},"required":["code","state"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Authentication token issued to the user."},"expiry":{"type":"number","description":"Token expiration time in epoch milliseconds."},"identity":{"type":"object","properties":{"orgId":{"type":"string"},"tenantId":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["userId","username"],"description":"Decoded identity for the issued token. Populated for flows whose token is not a Dfns-minted JWT (e.g. OIDC passthrough) so clients can skip JWT decoding; absent on flows where the token's claims carry the same fields."},"credentialChallenge":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"challenge":{"type":"string","description":"Challenge to be signed by the credential being registered."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"object","properties":{"firstFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as first factor."},"secondFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as second factor."}},"required":["firstFactor","secondFactor"],"description":"Credential kinds that can be used to register the user."},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]},"description":"Public key credential parameters supported for the registration."},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"Credentials to exclude from the registration (already registered for the user)."},"otpUrl":{"type":"string","description":"URL to provision a TOTP credential, when applicable."},"challengeIdentifier":{"type":"string","description":"Short-lived JWT that identifies the challenge; echo it back on credential completion."}},"required":["user","challenge","supportedCredentialKinds","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","otpUrl","challengeIdentifier"],"description":"Credential challenge offering all supported first-factor credential kinds. Included when the user has no active first-factor credential; absent once one is registered."}},"required":["token"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/oidc/init":{"post":{"operationId":"oidcLoginInit","x-dfns-deprecated-operation-id":"initiateOidcLogin","summary":"Initiate OIDC Login","tags":["Auth"],"security":[{}],"description":"Initialize the OIDC login process by returning the identity provider authorization URL to redirect the user to.","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"redirectUri":{"type":"string","format":"uri","description":"Redirect URI used for the authentication flow"},"nonce":{"type":"string","minLength":1,"description":"Session-key mode only: client-generated nonce (the credential id of the session key the client will register) that binds the OIDC id_token to that credential. Required when auth.oidc.sessionKeys.enabled is on; rejected otherwise."}},"required":["redirectUri"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string","format":"uri","description":"The URL to redirect the user to authenticate with the IdP"}},"required":["redirectUrl"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/code":{"post":{"operationId":"sendLoginCode","summary":"Send Login Code","tags":["Auth"],"security":[{}],"description":"\n  Sends a temporary one time code to the user that can be used during login flow.\n\nIf the user has a credential of kind `PasswordProtectedKey` a temporary one time code needs to be passed in the `loginCode` field. That's because the [Create Login Challenge](https://docs.dfns.co/api-reference/auth/create-login-challenge) is unauthenticated and returns the encrypted private key of the user. So we need a first step to verify the identity of the user to prevent anybody from fetching the encrypted private key and trying to brute force it offline.\n\n  ","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user to send the login code to."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"}},"required":["username"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable success message."}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/social":{"post":{"operationId":"socialLogin","summary":"Social Login","tags":["Auth"],"security":[{}],"description":"Logs a user in with a JWT id token issued by a social login provider and provides the authenticated user with their authentication token.","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"socialLoginProviderKind":{"type":"string","enum":["Oidc"],"description":"Social login provider used to issue the JWT."},"idToken":{"type":"string","description":"JWT id token issued by the social login provider."}},"required":["socialLoginProviderKind","idToken"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Authentication token issued to the user."},"expiry":{"type":"number","description":"Token expiration time in epoch milliseconds."},"identity":{"type":"object","properties":{"orgId":{"type":"string"},"tenantId":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["userId","username"],"description":"Decoded identity for the issued token. Populated for flows whose token is not a Dfns-minted JWT (e.g. OIDC passthrough) so clients can skip JWT decoding; absent on flows where the token's claims carry the same fields."}},"required":["token"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/sso":{"post":{"operationId":"ssoLogin","x-dfns-deprecated-operation-id":"completeSsoLogin","summary":"Complete SSO Login","tags":["Auth"],"security":[{}],"description":"Completes the SSO login process by exchanging the authorization code obtained from the identity provider for the user's authentication token.","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Authorization code obtained from the IdP"},"state":{"type":"string","description":"State forwarded by the IdP"}},"required":["code","state"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Authentication token issued to the user."},"expiry":{"type":"number","description":"Token expiration time in epoch milliseconds."},"identity":{"type":"object","properties":{"orgId":{"type":"string"},"tenantId":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["userId","username"],"description":"Decoded identity for the issued token. Populated for flows whose token is not a Dfns-minted JWT (e.g. OIDC passthrough) so clients can skip JWT decoding; absent on flows where the token's claims carry the same fields."}},"required":["token"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/login/sso/init":{"post":{"operationId":"ssoLoginInit","x-dfns-deprecated-operation-id":"initiateSsoLogin","summary":"Initiate SSO Login","tags":["Auth"],"security":[{}],"description":"Initialize the login process with SSO by returning the IdP URL to call.","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"clientId":{"type":"string","description":"Client Id obtained from the IdP"},"redirectUri":{"type":"string","format":"uri","description":"Redirect URI used for the authentication flow"}},"required":["clientId","redirectUri"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ssoRedirectUrl":{"type":"string","format":"uri","description":"The URL to redirect the user to authenticate with the IdP"}},"required":["ssoRedirectUrl"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/tokens":{"post":{"operationId":"exchangeAccessToken","summary":"Exchange Access Token","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Only for TenantUsers - Exchanges the current user access token, for an org-bound or tenant-bound token. The user must have access to the target org / tenant. The new access token expiration won't exceed the current token's one.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","description":"ID of the Organisation or Tenant for which you wish to obtain an access token."}},"required":["target"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/pats":{"get":{"operationId":"listPersonalAccessTokens","summary":"List Personal Access Tokens","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of your Personal Access Tokens.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"},"description":"Current page items."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"createPersonalAccessToken","summary":"Create Personal Access Token","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new Personal Access Token for the caller.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Auth:Pats:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Human-readable name of the Personal Access Token."},"publicKey":{"type":"string","pattern":"^-----BEGIN (RSA )?PUBLIC KEY-----[A-Za-z0-9+/=\\n\\r\\\\]+-----END (RSA )?PUBLIC KEY-----\\s?$"},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"externalId":{"type":"string","description":"Value that can be used to correlate the entity with an external system."},"daysValid":{"type":"integer","exclusiveMinimum":0,"description":"Number of days the token will be valid for."},"secondsValid":{"type":"integer","exclusiveMinimum":0,"description":"Number of seconds the token will be valid for."}},"required":["name","publicKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string","description":"The access token. Only returned at creation time."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the access token was created.","example":"2023-04-14T20:41:28.715Z"},"credId":{"type":"string","description":"ID of the credential associated with the access token."},"isActive":{"type":"boolean","description":"Whether the access token is active."},"kind":{"type":"string","enum":["Pat","ServiceAccount","Token","Code","Recovery","Temp","Application"]},"linkedUserId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"linkedAppId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the application the access token is linked to.","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"name":{"type":"string","description":"Human-readable name of the access token."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"publicKey":{"type":"string","description":"Public key associated with the access token."},"tokenId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^to-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Token id.","example":"to-202a0-cdo33-o65mbt6q758lvvnt"},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the access token."}},"required":["accessToken","dateCreated","credId","isActive","kind","linkedUserId","linkedAppId","name","orgId","publicKey","tokenId","permissionAssignments"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/pats/{tokenId}":{"get":{"operationId":"getPersonalAccessToken","summary":"Get Personal Access Token","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Retrieve a specific Personal Access Token.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Token id."},"required":true,"description":"Token id.","name":"tokenId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAccessToken"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updatePersonalAccessToken","summary":"Update Personal Access Token","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Update a specific Personal Access Token.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Token id."},"required":true,"description":"Token id.","name":"tokenId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Updated human-readable name of the Personal Access Token."},"externalId":{"type":"string","description":"Value that can be used to correlate the entity with an external system."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAccessToken"}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deletePersonalAccessToken","summary":"Delete Personal Access Token","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a specific Personal Access Token.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Token id."},"required":true,"description":"Token id.","name":"tokenId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAccessToken"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/pats/{tokenId}/activate":{"put":{"operationId":"activatePersonalAccessToken","summary":"Activate Personal Access Token","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Activate a specific Personal Access Token.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Token id."},"required":true,"description":"Token id.","name":"tokenId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAccessToken"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/pats/{tokenId}/deactivate":{"put":{"operationId":"deactivatePersonalAccessToken","summary":"Deactivate Personal Access Token","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deactivates a personal access token that was previously active. If the token is already deactivated no action is taken.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Token id."},"required":true,"description":"Token id.","name":"tokenId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAccessToken"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/recover/user/delegated":{"post":{"operationId":"createDelegatedRecoveryChallenge","summary":"Create Delegated Recovery Challenge","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"\n<Warning>\nOnly a [Service Account](https://docs.dfns.co/api-reference/auth/service-accounts) can use this endpoint.\n</Warning>\n\nStarts a recovery session for a user under your brand, without sending a Dfns recovery email. Call this after you have verified the user's identity with your own auth system.\n\nThe response returns a recovery challenge. Pass it to your frontend so the user can decrypt their recovery credential and sign, then call [Recover User](https://docs.dfns.co/api-reference/auth/recover-user) to complete the recovery and register fresh credentials.\n\n<Note>This endpoint is for users that registered through the \"Delegated\" registration flow. For users registered through the \"Direct\" registration flow, the endpoints [Send Recovery Code Email](https://docs.dfns.co/api-reference/auth/send-recovery-code-email) + [Create Recovery Challenge](https://docs.dfns.co/api-reference/auth/create-recovery-challenge) should be used.</Note>\n","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Delegated:Recover`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":1,"description":"Username/identifier of the user to recover."},"credentialId":{"type":"string","minLength":1,"description":"Identifier of the recovery credential to use."}},"required":["username","credentialId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"temporaryAuthenticationToken":{"type":"string","description":"JWT used to identify the registration session when calling Complete User Registration."},"challenge":{"type":"string","description":"Challenge to be signed by the credential being registered."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"object","properties":{"firstFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as first factor."},"secondFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as second factor."}},"required":["firstFactor","secondFactor"],"description":"Credential kinds that can be used to register the user."},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]},"description":"Public key credential parameters supported for the registration."},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"Credentials to exclude from the registration (already registered for the user)."},"otpUrl":{"type":"string","description":"URL to provision a TOTP credential, when applicable."},"allowedRecoveryCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the recovery credential."},"encryptedRecoveryKey":{"type":"string","description":"Encrypted recovery key associated with this credential."}},"required":["id","encryptedRecoveryKey"],"additionalProperties":false}}},"required":["user","temporaryAuthenticationToken","challenge","supportedCredentialKinds","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","otpUrl","allowedRecoveryCredentials"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/recover/user":{"post":{"operationId":"recover","x-dfns-deprecated-operation-id":"recoverUser","summary":"Recover User","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Recovers a user, using a recovery credential. After successfully recovering the user, all of the user's previous credentials and personal access tokens will be invalidated.\n\nThis flow requires cryptographic validation of newly created credential(s) using a recovery credential. The `recovery.credentialAssertion.clientData` field's challenge must be the _base64url-encoded_ representation of the `newCredential` object.\n\nThe process is as follows:\n\n1. Construct the `newCredential` object, using the challenge obtained from either the [Create Recovery Challenge](https://docs.dfns.co/api-reference/auth/create-recovery-challenge) or [Create Delegated Recovery Challenge](https://docs.dfns.co/api-reference/auth/create-delegated-recovery-challenge) endpoints.\n2. Serialize the `newCredential` object to JSON and then base64url-encode the resulting JSON string. This _base64url-encoded_ string will serve as the challenge for the `recovery.credentialAssertion` object.\n3. Construct the `recovery.credentialAssertion` object, using the _base64url-encoded_ string generated in step 2 as its challenge.\n","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account    \n✅ Recovery Code\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"recovery":{"type":"object","properties":{"kind":{"type":"string","enum":["RecoveryKey"]},"credentialAssertion":{"type":"object","properties":{"credId":{"type":"string","minLength":1,"description":"Base64url-encoded id of the credential returned by the user's WebAuthn client."},"clientData":{"type":"string","minLength":1,"description":"Base64url-encoded, stringified JSON [client data](https://docs.dfns.co/api-reference/auth/credentials-data#client-data) object returned by the user's WebAuthn client."},"signature":{"type":"string","minLength":1,"description":"Base64url-encoded signature returned by the user's WebAuthn client."},"algorithm":{"type":"string","description":"The algorithm/digest that the credential will use to sign data. If the algoritm is not specified then the algorithm will be determined by the key."}},"required":["credId","clientData","signature"],"additionalProperties":false}},"required":["kind","credentialAssertion"],"additionalProperties":false},"newCredentials":{"type":"object","properties":{"firstFactorCredential":{"$ref":"#/components/schemas/FirstFactorAttestation"},"secondFactorCredential":{"$ref":"#/components/schemas/SecondFactorAttestation"},"recoveryCredential":{"$ref":"#/components/schemas/RecoveryKeyAttestation"}},"required":["firstFactorCredential"],"additionalProperties":false}},"required":["recovery","newCredentials"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"credential":{"type":"object","properties":{"uuid":{"type":"string","description":"UUID of the credential that was registered."},"kind":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"],"description":"Kind of credential that was registered."},"name":{"type":"string","description":"Human-readable name of the credential."}},"required":["uuid","kind","name"]},"user":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"username":{"type":"string","description":"Username/identifier of the user."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"}},"required":["id","username"]}},"required":["credential","user"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/recover/user/init":{"post":{"operationId":"createRecoveryChallenge","summary":"Create Recovery Challenge","tags":["Auth"],"security":[{}],"description":"Starts a user recovery session from the recovery code received by email. It returns a challenge that will be used to verify the user's identity.\n\n<Note>This endpoint is for users that registered through the \"Direct\" registration flow. For users registered through the \"Delegated\" registration flow, the endpoint [Create Delegated Recovery Challenge](https://docs.dfns.co/api-reference/auth/create-delegated-recovery-challenge) should be used.</Note>\n","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":1,"description":"Username/identifier of the user to recover."},"verificationCode":{"type":"string","minLength":1,"description":"Recovery verification code sent to the user by email."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"credentialId":{"type":"string","minLength":1,"description":"Identifier of the recovery credential to use."}},"required":["username","verificationCode","credentialId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"temporaryAuthenticationToken":{"type":"string","description":"JWT used to identify the registration session when calling Complete User Registration."},"challenge":{"type":"string","description":"Challenge to be signed by the credential being registered."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"object","properties":{"firstFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as first factor."},"secondFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as second factor."}},"required":["firstFactor","secondFactor"],"description":"Credential kinds that can be used to register the user."},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]},"description":"Public key credential parameters supported for the registration."},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"Credentials to exclude from the registration (already registered for the user)."},"otpUrl":{"type":"string","description":"URL to provision a TOTP credential, when applicable."},"allowedRecoveryCredentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the recovery credential."},"encryptedRecoveryKey":{"type":"string","description":"Encrypted recovery key associated with this credential."}},"required":["id","encryptedRecoveryKey"],"additionalProperties":false}}},"required":["user","temporaryAuthenticationToken","challenge","supportedCredentialKinds","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","otpUrl","allowedRecoveryCredentials"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/recover/user/code":{"post":{"operationId":"sendRecoveryCode","x-dfns-deprecated-operation-id":"sendRecoveryCodeEmail","summary":"Send Recovery Code Email","tags":["Auth"],"security":[{}],"description":"Send the user a recovery verification code. This code is used as a second factor to verify the user initiated the recovery request.\n  \n  <Note>This endpoint is for users that registered through the \"Direct\" registration flow. For users registered through the \"Delegated\" registration flow, the endpoint [Create Delegated Recovery Challenge](https://docs.dfns.co/api-reference/auth/create-delegated-recovery-challenge) should be used.</Note>\n  ","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":1,"description":"Username/identifier of the user to send the recovery code to."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"}},"required":["username"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable success message."}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/registration/delegated":{"post":{"operationId":"createDelegatedRegistrationChallenge","summary":"Create Delegated Registration Challenge","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"<Warning>\nOnly a [Service Account](https://docs.dfns.co/api-reference/auth/service-accounts) can use this endpoint.\n</Warning>\n\nReturns a registration challenge for the targeted user, which can be passed to the user for passkey creation and registration completion.\n\nThe response includes:\n- Basic info about the targeted user\n- A registration challenge\n- A `temporaryAuthenticationToken` to authenticate the next request in the flow\n\nNext steps are\n1. pass the challenge to your user in your frontend / app, so he can create new passkey & recovery credentials and sign the challenge with it. All credentials registered need to sign this challenge. See [Implement end-user recovery](https://docs.dfns.co/guides/developers/end-user-recovery).\n2. then call [Complete User Registration](https://docs.dfns.co/api-reference/auth/complete-user-registration) or [Complete End User Registration with Wallets](https://docs.dfns.co/api-reference/auth/complete-end-user-registration-with-wallets) with that signed challenge, using the `temporaryAuthenticationToken` as Bearer token.\n\n<Note>\nThis endpoint is for users previously created through [Create User](https://docs.dfns.co/api-reference/auth/create-user) endpoint with `registration: 'Delegated'`(*).\n\n_(*) Legacy behaviour - still supported:_\n\nIf you target an `EndUser`, which was not previously created with \"Create User\" endpoint, then this end user will be created on-the-fly within this endpoint.\nIf you previously relied on this behaviour, update your code, before this legacy behaviour deprecation. Instead, you should call the \"Create User\" endpoint first, passing `registration: \"Delegated\"`, after which you can call this endpoint.\n</Note>\n\n","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Delegated:Register`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","minLength":1,"description":"Username/identifier (any unique string accepted, e.g. your internal user ID or email)."},"kind":{"type":"string","enum":["CustomerEmployee","EndUser"],"description":"Can be `CustomerEmployee` or `EndUser`."},"externalId":{"type":"string","minLength":1,"description":"Optional external identifier for the user, used for cross-referencing with your own systems."}},"required":["email","kind"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"temporaryAuthenticationToken":{"type":"string","description":"JWT used to identify the registration session when calling Complete User Registration."},"challenge":{"type":"string","description":"Challenge to be signed by the credential being registered."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"object","properties":{"firstFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as first factor."},"secondFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as second factor."}},"required":["firstFactor","secondFactor"],"description":"Credential kinds that can be used to register the user."},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]},"description":"Public key credential parameters supported for the registration."},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"Credentials to exclude from the registration (already registered for the user)."},"otpUrl":{"type":"string","description":"URL to provision a TOTP credential, when applicable."}},"required":["user","temporaryAuthenticationToken","challenge","supportedCredentialKinds","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","otpUrl"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/registration/init":{"post":{"operationId":"createRegistrationChallenge","summary":"Create Registration Challenge","tags":["Auth"],"security":[{}],"description":"Starts a user registration session from the registration code received by email. It returns a challenge that will need to be signed by a passkey and used to perform the step [Complete User Registration](/api-reference/auth/complete-user-registration). Either `orgId` or `tenantId` needs to be specified.\n\n<Note>\nThis endpoint is for users previously created through [Create User](https://docs.dfns.co/api-reference/auth/create-user) endpoint with `registration: \"Direct\"`, and received a registration code by email.\n</Note>\n","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id. Provide exactly one of `orgId` or `tenantId`, never both.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id. Provide exactly one of `orgId` or `tenantId`, never both.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"username":{"type":"string","minLength":1,"description":"Username/identifier of the user being registered (any unique string accepted, e.g. email)."},"registrationCode":{"type":"string","minLength":1,"description":"One-time registration code sent to the user by email."}},"required":["username","registrationCode"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"temporaryAuthenticationToken":{"type":"string","description":"JWT used to identify the registration session when calling Complete User Registration."},"challenge":{"type":"string","description":"Challenge to be signed by the credential being registered."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"object","properties":{"firstFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as first factor."},"secondFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as second factor."}},"required":["firstFactor","secondFactor"],"description":"Credential kinds that can be used to register the user."},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]},"description":"Public key credential parameters supported for the registration."},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"Credentials to exclude from the registration (already registered for the user)."},"otpUrl":{"type":"string","description":"URL to provision a TOTP credential, when applicable."}},"required":["user","temporaryAuthenticationToken","challenge","supportedCredentialKinds","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","otpUrl"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/registration/social":{"post":{"operationId":"createSocialRegistrationChallenge","summary":"Create Social Registration Challenge","tags":["Auth"],"security":[{}],"description":"Starts an end-user registration session by passing a JWT obtained by an IdP. It returns a challenge that will need to be signed by a passkey and used to perform [Complete End User Registration with Wallets](/api-reference/auth/complete-end-user-registration-with-wallets).","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"socialLoginProviderKind":{"type":"string","enum":["Oidc"],"description":"Social login provider used to issue the JWT."},"idToken":{"type":"string","description":"JWT id token issued by the social login provider."}},"required":["socialLoginProviderKind","idToken"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"Base64url-encoded user handle (WebAuthn user.id)."},"displayName":{"type":"string","description":"Display name of the user."},"name":{"type":"string","description":"Username of the user."}},"required":["id","displayName","name"]},"temporaryAuthenticationToken":{"type":"string","description":"JWT used to identify the registration session when calling Complete User Registration."},"challenge":{"type":"string","description":"Challenge to be signed by the credential being registered."},"rp":{"type":"object","properties":{"id":{"type":"string","description":"ID of the WebAuthn relying party (typically a domain name)."},"name":{"type":"string","description":"Human-readable name of the relying party."}},"required":["id","name"],"description":"Deprecated. Should not be used."},"supportedCredentialKinds":{"type":"object","properties":{"firstFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as first factor."},"secondFactor":{"type":"array","items":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"]},"description":"Credential kinds accepted as second factor."}},"required":["firstFactor","secondFactor"],"description":"Credential kinds that can be used to register the user."},"authenticatorSelection":{"type":"object","properties":{"authenticatorAttachment":{"type":"string","enum":["platform","cross-platform"]},"residentKey":{"type":"string","enum":["required","preferred","discouraged"]},"requireResidentKey":{"type":"boolean"},"userVerification":{"type":"string","enum":["required","preferred","discouraged"],"description":"Value indicating if the user should be prompted for a second factor. Can be one of the following values:\n* required to indicate the user must be prompted for their pin, biometrics, or another second factor option\n* preferred to indicate the user should be prompted for a second factor if it is supported\n* discouraged to indicate the user should not be prompted for their second factor unless the device requires it\n"}},"required":["residentKey","requireResidentKey","userVerification"]},"attestation":{"type":"string","enum":["none","indirect","direct","enterprise"],"description":"Identifies the information needed to verify the user's signing certificate; can be one of the following:\n* none: indicates no attestation data is required\n* indirect: indicates the attestation data should be given, but that it can be generated using an Anonymization CA\n* direct: indicates the attestation data must be given and should be generated by the authenticator\n* enterprise: indicates the attestation data should include information to uniquely identify the user's device\n"},"pubKeyCredParams":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"]},"alg":{"type":"number"}},"required":["type","alg"]},"description":"Public key credential parameters supported for the registration."},"excludeCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["public-key"],"description":"Is always `public-key`."},"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID that identifies the credential.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"}},"required":["type","id"]},"description":"Credentials to exclude from the registration (already registered for the user)."},"otpUrl":{"type":"string","description":"URL to provision a TOTP credential, when applicable."}},"required":["user","temporaryAuthenticationToken","challenge","supportedCredentialKinds","authenticatorSelection","attestation","pubKeyCredParams","excludeCredentials","otpUrl"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/registration":{"post":{"operationId":"register","x-dfns-deprecated-operation-id":"completeUserRegistration","summary":"Complete User Registration","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Completes the user registration process and creates the user's initial credentials.\n\nAll credentials submitted in this call (`firstFactorCredential`, `secondFactorCredential`, `recoveryCredential`) sign the same challenge returned by the registration init endpoint ([Create Registration Challenge](https://docs.dfns.co/api-reference/auth/create-registration-challenge), [Create Delegated Registration Challenge](https://docs.dfns.co/api-reference/auth/create-delegated-registration-challenge), or [Create Social Registration Challenge](https://docs.dfns.co/api-reference/auth/create-social-registration-challenge)).\n\nAlways include a `recoveryCredential` for end users. Without one, a user who loses their device cannot recover access and you must initiate a delegated recovery manually. See [Implement end-user recovery](https://docs.dfns.co/guides/developers/end-user-recovery).\n\nThe type of credentials being registered is determined by the `credentialKind` field in the nested objects (`firstFactorCredential` , `secondFactorCredential` and `recoveryCredential`). Supported credential kinds are:\n* `Fido2`: User action is signed by a user's signing device using `WebAuthn`.\n* `Key`: User action is signed by a user's, or token's, private key.\n* `PasswordProtectedKey`: User action is signed by a user's, or token's, private key. The encrypted version of the private key is stored by Dfns and returns during the signing flow for the user to decrypt it.\n* `RecoveryKey` : Similar to `PasswordProtectedKey`, but this credential can only be used to recover an account not to sign an action or login. Once this credential is used all the other user's credentials are invalidated.\n","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account    \n✅ Registration Code\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"firstFactorCredential":{"$ref":"#/components/schemas/FirstFactorAttestation"},"secondFactorCredential":{"$ref":"#/components/schemas/SecondFactorAttestation"},"recoveryCredential":{"$ref":"#/components/schemas/RecoveryKeyAttestation"}},"required":["firstFactorCredential"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"credential":{"type":"object","properties":{"uuid":{"type":"string","description":"UUID of the credential that was registered."},"kind":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"],"description":"Kind of credential that was registered."},"name":{"type":"string","description":"Human-readable name of the credential."}},"required":["uuid","kind","name"]},"user":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"username":{"type":"string","description":"Username/identifier of the user."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"}},"required":["id","username"]}},"required":["credential","user"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/registration/enduser":{"post":{"operationId":"registerEndUser","x-dfns-deprecated-operation-id":"completeEndUserRegistrationWithWallets","summary":"Complete End User Registration with Wallets","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Completes the end user registration process and creates the user's initial credentials along with delegated wallets for the new end user.\n\nAll credentials submitted in this call (`firstFactorCredential`, `secondFactorCredential`, `recoveryCredential`) sign the same challenge returned by the registration init endpoint ([Create Delegated Registration Challenge](https://docs.dfns.co/api-reference/auth/create-delegated-registration-challenge) or [Create Social Registration Challenge](https://docs.dfns.co/api-reference/auth/create-social-registration-challenge)).\n\nAlways include a `recoveryCredential` for end users. Without one, a user who loses their device cannot recover access and you must initiate a delegated recovery manually. See [Implement end-user recovery](https://docs.dfns.co/guides/developers/end-user-recovery).\n\nThe type of credentials being registered is determined by the `credentialKind` field in the nested objects (`firstFactorCredential` , `secondFactorCredential` and `recoveryCredential`). Supported credential kinds are:\n* `Fido2`: User action is signed by a user's signing device using `WebAuthn`.\n* `Key`: User action is signed by a user's, or token's, private key.\n* `PasswordProtectedKey`: User action is signed by a user's, or token's, private key. The encrypted version of the private key is stored by Dfns and returns during the signing flow for the user to decrypt it.\n* `RecoveryKey`: Similar to `PasswordProtectedKey`, but this credential can only be used to recover an account, not to sign an action or login. Once this credential is used, all the other user's credentials are invalidated.\n\nThe number of delegated wallets created and the wallet types are determined by the `wallets` specifications. The end user is automatically assigned `ManagedDefaultEndUserAccess` managed permission that grants the end user full access to the wallets.","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account    \n✅ Registration Code\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"firstFactorCredential":{"$ref":"#/components/schemas/FirstFactorAttestation"},"secondFactorCredential":{"$ref":"#/components/schemas/SecondFactorAttestation"},"recoveryCredential":{"$ref":"#/components/schemas/RecoveryKeyAttestation"},"wallets":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"]},"name":{"type":"string","maxLength":100,"description":"Wallet nickname."}},"required":["network"],"additionalProperties":false},"minItems":1}},"required":["firstFactorCredential","wallets"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"credential":{"type":"object","properties":{"uuid":{"type":"string","description":"UUID of the credential that was registered."},"kind":{"type":"string","enum":["Fido2","Key","Password","PasswordProtectedKey","RecoveryKey","SessionKey","Totp"],"description":"Kind of credential that was registered."},"name":{"type":"string","description":"Human-readable name of the credential."}},"required":["uuid","kind","name"]},"user":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"username":{"type":"string","description":"Username/identifier of the user."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"}},"required":["id","username"]},"authentication":{"type":"object","properties":{"token":{"type":"string","description":"Authentication token issued to the user."},"expiry":{"type":"number","description":"Token expiration time in epoch milliseconds."},"identity":{"type":"object","properties":{"orgId":{"type":"string"},"tenantId":{"type":"string"},"userId":{"type":"string"},"username":{"type":"string"}},"required":["userId","username"],"description":"Decoded identity for the issued token. Populated for flows whose token is not a Dfns-minted JWT (e.g. OIDC passthrough) so clients can skip JWT decoding; absent on flows where the token's claims carry the same fields."}},"required":["token"]},"wallets":{"type":"array","items":{"$ref":"#/components/schemas/Wallet"}}},"required":["credential","user","authentication","wallets"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/registration/code":{"put":{"operationId":"resendRegistrationCode","summary":"Resend Registration Code","tags":["Auth"],"security":[{}],"description":"Sends the user a new registration code. The previous registration code will be marked invalid. If the user has already completed their registration no action will be taken.\n\n<Note>\nThis endpoint is for users previously created through [Create User](https://docs.dfns.co/api-reference/auth/create-user) endpoint with `registration: \"Direct\"`, and received a registration code by email.\n</Note>","x-mint":{"content":"#### Authentication\n\nNo authentication required.\n\n#### Required Permissions\n\nNo authentication required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":1,"description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"}},"required":["username"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable success message."}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/service-accounts":{"get":{"operationId":"listServiceAccounts","summary":"List Service Accounts","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"List all Service Accounts in your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:ServiceAccounts:Read`: Always required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"userInfo":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","permissionAssignments"]},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":["userInfo","accessTokens"]},"description":"Current page items."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"createServiceAccount","summary":"Create Service Account","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new Service Account for your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Auth:ServiceAccounts:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Human-readable name of the Service Account."},"publicKey":{"type":"string","pattern":"^-----BEGIN (RSA )?PUBLIC KEY-----[A-Za-z0-9+/=\\n\\r\\\\]+-----END (RSA )?PUBLIC KEY-----\\s?$"},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"externalId":{"type":"string","description":"Value that can be used to correlate the entity with an external system."},"daysValid":{"type":"integer","exclusiveMinimum":0,"description":"Number of days the service account will be valid for."},"federatedIdentity":{"type":"object","properties":{"issuer":{"type":"string","minLength":1,"description":"OIDC issuer trusted for this account."},"identity":{"type":"string","minLength":1,"description":"Identity value extracted from the IdP access token per the org OIDC config. Must be unique within the org."}},"required":["issuer","identity"],"description":"When set, the service account authenticates every request with an IdP access token instead of a Dfns-minted one. Mutually exclusive with daysValid."}},"required":["name","publicKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"userInfo":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","permissionAssignments"]},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":["userInfo","accessTokens"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/service-accounts/{serviceAccountId}":{"get":{"operationId":"getServiceAccount","summary":"Get Service Account","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Get information about a specific Service Account.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:ServiceAccounts:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the service account."},"required":true,"description":"ID of the service account.","name":"serviceAccountId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"userInfo":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","permissionAssignments"]},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":["userInfo","accessTokens"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateServiceAccount","summary":"Update Service Account","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Update a specific Service Account.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:ServiceAccounts:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the service account."},"required":true,"description":"ID of the service account.","name":"serviceAccountId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Updated human-readable name of the Service Account."},"externalId":{"type":"string","description":"Value that can be used to correlate the entity with an external system."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"userInfo":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","permissionAssignments"]},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":["userInfo","accessTokens"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteServiceAccount","summary":"Delete Service Account","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a specific Service Account.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:ServiceAccounts:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the service account."},"required":true,"description":"ID of the service account.","name":"serviceAccountId","in":"path"},{"schema":{"type":["boolean","null"],"default":false,"description":"If true, bypasses the policy approver check and deletes immediately."},"required":false,"description":"If true, bypasses the policy approver check and deletes immediately.","name":"force","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"userInfo":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","permissionAssignments"]},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":["userInfo","accessTokens"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/service-accounts/{serviceAccountId}/activate":{"put":{"operationId":"activateServiceAccount","summary":"Activate Service Account","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Re-activate a previously deactivated Service Account. New Service Accounts are active as soon as they are created, so this is only needed after a Service Account has been deactivated.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:ServiceAccounts:Activate`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the service account."},"required":true,"description":"ID of the service account.","name":"serviceAccountId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"userInfo":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","permissionAssignments"]},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":["userInfo","accessTokens"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/service-accounts/{serviceAccountId}/deactivate":{"put":{"operationId":"deactivateServiceAccount","summary":"Deactivate Service Account","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deactivate a specific Service Account.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:ServiceAccounts:Deactivate`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the service account."},"required":true,"description":"ID of the service account.","name":"serviceAccountId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"force":{"type":"boolean","default":false,"description":"If true, bypasses the policy approver check and deactivates immediately."}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"userInfo":{"type":"object","properties":{"username":{"type":"string","description":"Username/identifier of the user (any unique string accepted, e.g. your internal user ID or email)."},"name":{"type":"string","description":"Display name of the user."},"userId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"kind":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"],"description":"User kind."},"credentialUuid":{"type":"string","description":"UUID of the user's primary credential."},"credentialId":{"type":"string","description":"The credential id used for user-action signing, derived as base64url(sha256(publicKey))."},"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"tenantId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^acct-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Tenant id.","example":"acct-24hka-dhili-9hgvdlvr1ohpibp4"},"permissions":{"type":"array","items":{"type":"string"},"description":"@deprecated - Flat list of API operations the user has access to."},"isActive":{"type":"boolean","description":"Whether the user is active."},"isServiceAccount":{"type":"boolean","description":"Whether the user is a service account."},"isRegistered":{"type":"boolean","description":"Whether the user has completed registration."},"permissionAssignments":{"type":"array","items":{"type":"object","properties":{"permissionName":{"type":"string","description":"Human-readable name of the permission (role)."},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"assignmentId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations granted by this permission."}},"required":["permissionName","permissionId","assignmentId"]},"description":"Permissions (roles) assigned to the user."}},"required":["username","name","userId","kind","credentialUuid","isActive","isServiceAccount","isRegistered","permissionAssignments"]},"accessTokens":{"type":"array","items":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":["userInfo","accessTokens"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/service-accounts/credentials":{"post":{"operationId":"createServiceAccountCredential","summary":"Create Service Account Credential","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Add a new Key credential to the OIDC service account authenticated by this request. The caller must be an OIDC service account — the IdP access token identifies the SA; the user-action is signed with an existing active credential to prove rotation authority.","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"publicKey":{"type":"string","pattern":"^-----BEGIN (RSA )?PUBLIC KEY-----[A-Za-z0-9+/=\\n\\r\\\\]+-----END (RSA )?PUBLIC KEY-----\\s?$"},"name":{"type":"string","minLength":1,"description":"Human-readable name of the credential."}},"required":["publicKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credential"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/service-accounts/credentials/{credentialUuid}":{"delete":{"operationId":"deleteServiceAccountCredential","summary":"Delete Service Account Credential","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a credential of the OIDC service account authenticated by this request. The caller must be an OIDC service account. At least one active credential must remain after the delete.","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"credentialUuid","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/users/{userId}/activate":{"put":{"operationId":"activateUser","summary":"Activate User","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Activate a specific User.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Activate`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/users/{userId}/deactivate":{"put":{"operationId":"deactivateUser","summary":"Deactivate User","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deactivate a specific User.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Deactivate`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"force":{"type":"boolean","default":false,"description":"If true, deactivates the user even when they are the last admin, a policy names them as an approver, or a policy needs them to reach a quorum, so a compromised last admin can be cut off. The org can be left with no active admin, and with policies that can no longer reach their quorum."}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/users/{userId}":{"delete":{"operationId":"deleteUser","summary":"Delete User","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a specific User.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getUser","summary":"Get User","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Retrieve information about a specific User.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateUser","summary":"Update User","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Update a specific User.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"isSSORequired":{"type":"boolean"}},"required":["isSSORequired"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/users":{"post":{"operationId":"createUser","summary":"Create User","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new user in the caller's org.\n\nThe registration flow this user will go through depends on the `registration` kind specified:\n- If `Direct`, we orchestrate the user's registration: he will receive an email from us directly. Then be redirected to our dashboard to finish registration and onboard there. This is only available for `CustomerEmployee`. This is for users meant to use our dashboard directly (in addition to custom apps you may build).\n- if `Delegated`, you orchestrate the user's registration: he won't receive an email from us. It's your responsibility to verify your user's identity & email, before you programmatically kick-off their registration (cf [Delegated Registration doc](https://docs.dfns.co/api-reference/auth/registration-flows#delegated-users-registration-flow)). This is available for either `CustomerEmployee` or `EndUser`. This is for users meant to only use your own apps (not our dashboard), who should not interact with us directly.\n\nIf `registration` is unspecified, the default behaviour depends on the user kind:\n- `CustomerEmployee`: defaults to `Direct` registration: sends a registration email from us.\n- `EndUser`: defaults to `Delegated` registration (only option for those): does not send a registration email.\n\nPermission-wise, when the new user gets created:\n- `CustomerEmployee` hold no permissions upon creation. Use permission endpoints to grant some.\n- `EndUser` hold the default `ManagedDefaultEndUserAccess` which is granted by default to all EndUsers. Use permission endpoints to update this default end-user permission. (cf [Managed Permissions](https://docs.dfns.co/core-concepts/roles-and-permissions#manageddefaultenduseraccess))\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","minLength":2,"description":"For `CustomerEmployee` kind, it needs to be the email address of the new user. For `EndUser` kind, it can be a username/identifier (any unique string accepted, e.g. your internal user ID or email)."},"kind":{"type":"string","enum":["CustomerEmployee","EndUser"],"description":"The kind of user being created. It can be \"`CustomerEmployee`\" or \"`EndUser`\"."},"externalId":{"type":"string","description":"Value that can be used to correlate the entity with an external system."},"isSSORequired":{"type":"boolean","default":false,"description":"Defaults to `false`. If set to `true`, the user will have to authenticate via SSO. Can only be set to `true` for kind: `CustomerEmployee`."},"registration":{"type":"string","enum":["Direct","Delegated"],"default":"Direct","description":"Controls the kind of registration flow this user will go through. Can be \"Direct\" or \"Delegated\". More details in endpoint description."}},"required":["email","kind"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listUsers","summary":"List Users","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"List all Users in your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Read`: Always required."},"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":200,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"]},{"type":"array","items":{"type":"string","enum":["TenantUser","CustomerEmployee","EndUser"]}}],"description":"Filter users by kind. One or several can be added."},"required":false,"description":"Filter users by kind. One or several can be added.","name":"kind","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/User"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/users/invite":{"post":{"operationId":"inviteTenantUser","summary":"Invite Tenant User","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Invite an existing Tenant User in the caller's org. The invited Tenant User starts without any permissions within the org.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Auth:Users:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address of the existing Tenant User."},"kind":{"type":"string","enum":["TenantUser"],"description":"The kind of user being invited. It can only be \"`TenantUser`\""}},"required":["email","kind"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/user-groups":{"post":{"operationId":"createUserGroup","summary":"Create User Group","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a user group in the caller's org. A group holds permissions through the regular permission assignment endpoint, and its members hold those permissions in addition to their own.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_+.-]+$","description":"Name of the group. Unique within the org or tenant, ignoring case. A deleted group frees its name for reuse."},"description":{"type":"string","minLength":1,"maxLength":1024,"description":"Description of the group."}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listUserGroups","summary":"List User Groups","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"List the user groups in the caller's org.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/UserGroup"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/user-groups/{userGroupId}":{"get":{"operationId":"getUserGroup","summary":"Get User Group","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"Get a specific user group.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateUserGroup","summary":"Update User Group","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Rename a user group or change its description. Fields left out keep their value. Its permissions and members are unaffected. Returns the group on success (200), or the pending user action if a policy requires approval (202).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_+.-]+$","description":"Name of the group. Unique within the org or tenant, ignoring case. A deleted group frees its name for reuse."},"description":{"type":["string","null"],"minLength":1,"maxLength":1024,"description":"Description of the group. Null removes it."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteUserGroup","summary":"Delete User Group","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a user group. Its permission assignments are revoked and its members are removed. The name can be reused. Returns an empty body on success (200), or the pending user action if a policy requires approval (202).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/auth/user-groups/{userGroupId}/members":{"get":{"operationId":"listUserGroupMembers","summary":"List User Group Members","tags":["Auth"],"security":[{"authenticationToken":[]}],"description":"List the members of a user group.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Members:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/UserGroupMember"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"addUserGroupMembers","summary":"Add User Group Members","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Add users to a user group. Each member gains every permission assigned to the group, in addition to their own. Returns an empty body on success (200), or the pending user action if a policy requires approval (202).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Members:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"minItems":1,"maxItems":100,"description":"Users to add. Users already in the group are left unchanged."}},"required":["userIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"removeUserGroupMembers","summary":"Remove User Group Members","tags":["Auth"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Remove users from a user group. Each removed user loses every permission they held only through this group. Returns an empty body on success (200), or the pending user action if a policy requires approval (202).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Auth:UserGroups:Members:Remove`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"minItems":1,"maxItems":100,"description":"Users to remove. Users not in the group are left unchanged."}},"required":["userIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/exchanges/{exchangeId}":{"get":{"operationId":"getExchange","summary":"Get Exchange","tags":["Exchanges"],"security":[{"authenticationToken":[]}],"description":"Retrieve the details of a specific exchange integration configuration.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Exchanges:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"exchangeId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["Binance","Kraken","CoinbaseApp","CoinbasePrime"]},"dateCreated":{"type":"string"}},"required":["id","kind","dateCreated"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteExchange","summary":"Delete Exchange","tags":["Exchanges"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete the exchange configuration from your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Exchanges:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"exchangeId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","enum":[true]}},"required":["deleted"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/exchanges":{"post":{"operationId":"createExchange","summary":"Create Exchange","tags":["Exchanges"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Link your organization with a cryptocurrency exchange.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Exchanges:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"kind":{"type":"string","enum":["Binance","Kraken","CoinbaseApp","CoinbasePrime"]},"readConfiguration":{"type":"object","properties":{"publicApiKey":{"type":"string"},"privateApiKey":{"type":"string"},"password":{"type":"string"},"otp":{"type":"string"}},"required":["publicApiKey","privateApiKey"]},"writeConfiguration":{"type":"object","properties":{"publicApiKey":{"type":"string"},"privateApiKey":{"type":"string"},"password":{"type":"string"},"otp":{"type":"string"}},"required":["publicApiKey","privateApiKey"]}},"required":["kind","readConfiguration","writeConfiguration"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["Binance","Kraken","CoinbaseApp","CoinbasePrime"]},"dateCreated":{"type":"string"}},"required":["id","kind","dateCreated"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listExchanges","summary":"List Exchanges","tags":["Exchanges"],"security":[{"authenticationToken":[]}],"description":"List all configured exchange integrations.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Exchanges:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["Binance","Kraken","CoinbaseApp","CoinbasePrime"]},"dateCreated":{"type":"string"}},"required":["id","kind","dateCreated"]},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/exchanges/{exchangeId}/accounts":{"get":{"operationId":"listAccounts","summary":"List Accounts","tags":["Exchanges"],"security":[{"authenticationToken":[]}],"description":"Get a list of accounts for a specific exchange.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Exchanges:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"exchangeId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"exchangeId":{"type":"string"},"exchangeName":{"type":"string"}},"required":["id","exchangeId"]},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/exchanges/{exchangeId}/accounts/{accountId}/assets":{"get":{"operationId":"listAccountAssets","summary":"List Account Assets","tags":["Exchanges"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of assets for a specific account on a specific exchange.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Exchanges:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"exchangeId","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"accountId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"balance":{"type":"string"}},"required":["symbol","balance"]},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/exchanges/{exchangeId}/accounts/{accountId}/assets/{asset}/withdrawal-networks":{"get":{"operationId":"listAssetWithdrawalNetworks","summary":"List Asset Withdrawal Networks","tags":["Exchanges"],"security":[{"authenticationToken":[]}],"description":"Lists the networks to which the given asset can be withdrawn from an exchange account.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Exchanges:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"exchangeId","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"accountId","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"asset","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Aip21"]},"metadata":{"type":"string"}},"required":["kind","metadata"],"title":"Aptos Fungible Assets (AIP-21)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string"}},"required":["kind","assetId"],"title":"Algorand Standard Assets (ASAs)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis2"]},"tokenAddress":{"type":"string"}},"required":["kind","tokenAddress"],"title":"Concordium CIS-2 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20","Snip2","Trc20"]},"contract":{"type":"string"}},"required":["kind","contract"],"title":"EVM ERC-20/Starknet SNIP-2/TRON TRC-20 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc7984"]},"contract":{"type":"string"}},"required":["kind","contract"],"title":"EVM ERC-7984 confidential tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hts"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"Hedera tokens (HTS)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Iou"]},"currency":{"type":"string"},"issuer":{"type":"string"}},"required":["kind","currency","issuer"],"title":"XRP Ledger IOU tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cip56"]},"instrumentId":{"type":"string"},"instrumentAdmin":{"type":"string"}},"required":["kind","instrumentId","instrumentAdmin"],"title":"Canton CIP-56 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Coin","LockedCoin"]},"coin":{"type":"string"}},"required":["kind","coin"],"title":"Sui/IOTA Coin assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Xls33"]},"issuanceId":{"type":"string"}},"required":["kind","issuanceId"],"title":"XRP Ledger MPL (XLS-33) tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asset"]},"assetId":{"type":"string"}},"required":["kind","assetId"],"title":"Polymesh/Cardano assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis7"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"Concordium PLTs ( CIS-7 tokens)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar SEP-41 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"TRON TRC-10 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"mint":{"type":"string"}},"required":["kind","mint"],"title":"Solana SPL/SPL2022 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"master":{"type":"string"}},"required":["kind","master"],"title":"TON TEP-74 Jetton"}]},{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"decimals":{"type":"number"}},"required":["network","decimals"]}]}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/exchanges/{exchangeId}/accounts/{accountId}/deposits":{"post":{"operationId":"createDeposit","x-dfns-deprecated-operation-id":"createExchangeDeposit","summary":"Create Exchange Deposit","tags":["Exchanges"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new exchange deposit transaction.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Exchanges:Deposits:Create`: Always required.   \n`Wallets:Transfers:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"description":"The exchange id obtained from the Create Exchange endpoint. Ex: `ex-1f04s-lqc9q-xxxxxxxxxxxxxxxx`"},"required":true,"description":"The exchange id obtained from the Create Exchange endpoint. Ex: `ex-1f04s-lqc9q-xxxxxxxxxxxxxxxx`","name":"exchangeId","in":"path"},{"schema":{"type":"string","minLength":1,"description":"Unique identifier for the account like \"spot\""},"required":true,"description":"Unique identifier for the account like \"spot\"","name":"accountId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer. All EVM compatible networks and Bitcoin support `priority`. Not supported for other networks. It uses the [estimate fees](https://docs.dfns.co/api-reference/networks/estimate-fees) API to calculate the transfer fees. When not specified, defaults to `Standard` priority."},"createDestinationAccount":{"type":"boolean","description":"Whether to create the destination account on chains that require account creation (e.g., Stellar). Only valid for chains that require the receiver account to exist before transfer."},"offer":{"type":"boolean","description":"Optional field for Canton, if true it will create a transfer offer."},"expiresAt":{"type":"string","format":"date-time","description":"Optional field for Canton, especially useful in the context of offers"},"useDurableNonce":{"type":"boolean","description":"Optional Solana-only flag. When `true` the SOL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). Use this for offline-signing flows where the construct → broadcast gap may exceed 90 seconds. The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","walletId"],"description":"","title":"Native Assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-20 contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token ID."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","tokenId","amount","walletId"],"description":"","title":"TRON Native Fungible Token (TRC-10)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc20"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"TRON Smart Contract Fungible Token (TRC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string","pattern":"^\\d+$","description":"The token asset id. "},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","assetId","amount","walletId"],"description":"","title":"Algorand Standard Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The asset issuer address."},"assetCode":{"type":"string","description":"The asset code."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","issuer","assetCode","amount","walletId"],"description":"","title":"Stellar Classic Assets (SEP-41)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The mint account address."},"createDestinationAccount":{"type":"boolean","description":"If `true`, pay to create the associated token account for the recipient if it doesn't exist. Defaults to `false`."},"useDurableNonce":{"type":"boolean","description":"Optional. When `true` the SPL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","mint","walletId"],"description":"","title":"Solana Program Library Token (SPL and SPL 2022)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"master":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The Jetton master contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","master","amount","walletId"],"description":"","title":"TON Jetton (TEP-74)"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"exchangeId":{"type":"string"},"accountId":{"type":"string"},"transferId":{"type":"string"},"exchangeReference":{"type":"string"},"kind":{"type":"string","enum":["Withdrawal","Deposit"]},"walletId":{"type":"string"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer. All EVM compatible networks and Bitcoin support `priority`. Not supported for other networks. It uses the [estimate fees](https://docs.dfns.co/api-reference/networks/estimate-fees) API to calculate the transfer fees. When not specified, defaults to `Standard` priority."},"createDestinationAccount":{"type":"boolean","description":"Whether to create the destination account on chains that require account creation (e.g., Stellar). Only valid for chains that require the receiver account to exist before transfer."},"offer":{"type":"boolean","description":"Optional field for Canton, if true it will create a transfer offer."},"expiresAt":{"type":"string","format":"date-time","description":"Optional field for Canton, especially useful in the context of offers"},"useDurableNonce":{"type":"boolean","description":"Optional Solana-only flag. When `true` the SOL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). Use this for offline-signing flows where the construct → broadcast gap may exceed 90 seconds. The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","walletId"],"description":"","title":"Native Assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-20 contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token ID."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","tokenId","amount","walletId"],"description":"","title":"TRON Native Fungible Token (TRC-10)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc20"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"TRON Smart Contract Fungible Token (TRC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string","pattern":"^\\d+$","description":"The token asset id. "},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","assetId","amount","walletId"],"description":"","title":"Algorand Standard Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The asset issuer address."},"assetCode":{"type":"string","description":"The asset code."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","issuer","assetCode","amount","walletId"],"description":"","title":"Stellar Classic Assets (SEP-41)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The mint account address."},"createDestinationAccount":{"type":"boolean","description":"If `true`, pay to create the associated token account for the recipient if it doesn't exist. Defaults to `false`."},"useDurableNonce":{"type":"boolean","description":"Optional. When `true` the SPL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","mint","walletId"],"description":"","title":"Solana Program Library Token (SPL and SPL 2022)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"master":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The Jetton master contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","master","amount","walletId"],"description":"","title":"TON Jetton (TEP-74)"}]},"dateCreated":{"type":"string"}},"required":["id","exchangeId","accountId","kind","walletId","requester","requestBody","dateCreated"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/exchanges/{exchangeId}/accounts/{accountId}/withdrawals":{"post":{"operationId":"createWithdrawal","x-dfns-deprecated-operation-id":"createExchangeWithdrawal","summary":"Create Exchange Withdrawal","tags":["Exchanges"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new exchange withdrawal transaction.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Exchanges:Withdrawals:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"description":"The exchange id obtained from the Create Exchange endpoint. Ex: `ex-1f04s-lqc9q-xxxxxxxxxxxxxxxx`"},"required":true,"description":"The exchange id obtained from the Create Exchange endpoint. Ex: `ex-1f04s-lqc9q-xxxxxxxxxxxxxxxx`","name":"exchangeId","in":"path"},{"schema":{"type":"string","minLength":1,"description":"Unique identifier for the account like \"spot\""},"required":true,"description":"Unique identifier for the account like \"spot\"","name":"accountId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer. All EVM compatible networks and Bitcoin support `priority`. Not supported for other networks. It uses the [estimate fees](https://docs.dfns.co/api-reference/networks/estimate-fees) API to calculate the transfer fees. When not specified, defaults to `Standard` priority."},"createDestinationAccount":{"type":"boolean","description":"Whether to create the destination account on chains that require account creation (e.g., Stellar). Only valid for chains that require the receiver account to exist before transfer."},"offer":{"type":"boolean","description":"Optional field for Canton, if true it will create a transfer offer."},"expiresAt":{"type":"string","format":"date-time","description":"Optional field for Canton, especially useful in the context of offers"},"useDurableNonce":{"type":"boolean","description":"Optional Solana-only flag. When `true` the SOL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). Use this for offline-signing flows where the construct → broadcast gap may exceed 90 seconds. The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","walletId"],"description":"","title":"Native Assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-20 contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token ID."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","tokenId","amount","walletId"],"description":"","title":"TRON Native Fungible Token (TRC-10)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc20"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"TRON Smart Contract Fungible Token (TRC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string","pattern":"^\\d+$","description":"The token asset id. "},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","assetId","amount","walletId"],"description":"","title":"Algorand Standard Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The asset issuer address."},"assetCode":{"type":"string","description":"The asset code."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","issuer","assetCode","amount","walletId"],"description":"","title":"Stellar Classic Assets (SEP-41)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The mint account address."},"createDestinationAccount":{"type":"boolean","description":"If `true`, pay to create the associated token account for the recipient if it doesn't exist. Defaults to `false`."},"useDurableNonce":{"type":"boolean","description":"Optional. When `true` the SPL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","mint","walletId"],"description":"","title":"Solana Program Library Token (SPL and SPL 2022)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"master":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The Jetton master contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","master","amount","walletId"],"description":"","title":"TON Jetton (TEP-74)"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"exchangeId":{"type":"string"},"accountId":{"type":"string"},"transferId":{"type":"string"},"exchangeReference":{"type":"string"},"kind":{"type":"string","enum":["Withdrawal","Deposit"]},"walletId":{"type":"string"},"requester":{"$ref":"#/components/schemas/Requester"},"requestBody":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer. All EVM compatible networks and Bitcoin support `priority`. Not supported for other networks. It uses the [estimate fees](https://docs.dfns.co/api-reference/networks/estimate-fees) API to calculate the transfer fees. When not specified, defaults to `Standard` priority."},"createDestinationAccount":{"type":"boolean","description":"Whether to create the destination account on chains that require account creation (e.g., Stellar). Only valid for chains that require the receiver account to exist before transfer."},"offer":{"type":"boolean","description":"Optional field for Canton, if true it will create a transfer offer."},"expiresAt":{"type":"string","format":"date-time","description":"Optional field for Canton, especially useful in the context of offers"},"useDurableNonce":{"type":"boolean","description":"Optional Solana-only flag. When `true` the SOL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). Use this for offline-signing flows where the construct → broadcast gap may exceed 90 seconds. The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","walletId"],"description":"","title":"Native Assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-20 contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token ID."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","tokenId","amount","walletId"],"description":"","title":"TRON Native Fungible Token (TRC-10)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc20"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","contract","amount","walletId"],"description":"","title":"TRON Smart Contract Fungible Token (TRC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string","pattern":"^\\d+$","description":"The token asset id. "},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","assetId","amount","walletId"],"description":"","title":"Algorand Standard Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The asset issuer address."},"assetCode":{"type":"string","description":"The asset code."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","issuer","assetCode","amount","walletId"],"description":"","title":"Stellar Classic Assets (SEP-41)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The mint account address."},"createDestinationAccount":{"type":"boolean","description":"If `true`, pay to create the associated token account for the recipient if it doesn't exist. Defaults to `false`."},"useDurableNonce":{"type":"boolean","description":"Optional. When `true` the SPL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","amount","mint","walletId"],"description":"","title":"Solana Program Library Token (SPL and SPL 2022)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"master":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The Jetton master contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"walletId":{"type":"string","minLength":1},"otp":{"type":"string","minLength":6,"maxLength":6}},"required":["kind","master","amount","walletId"],"description":"","title":"TON Jetton (TEP-74)"}]},"dateCreated":{"type":"string"}},"required":["id","exchangeId","accountId","kind","walletId","requester","requestBody","dateCreated"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/fee-sponsors":{"post":{"operationId":"createFeeSponsor","summary":"Create Fee Sponsor","tags":["Fee Sponsors"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new `FeeSponsor` associated with a sponsor wallet. Returns a new fee sponsor entity with the `id` to be used when making a transfer.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`FeeSponsors:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nickname for the Fee Sponsor. This will be displayed on the transfer modal in the dashboard."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the wallet that will be used to sponsor the fee for other wallets.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"allowEndUser":{"type":"boolean","default":false,"description":"Defines whether EndUsers and their delegated wallets can use this Fee Sponsor."}},"required":["walletId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeSponsor"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listFeeSponsors","summary":"List Fee Sponsors","tags":["Fee Sponsors"],"security":[{"authenticationToken":[]}],"description":"Retrieves all Fee Sponsors configured in your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`FeeSponsors:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FeeSponsor"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/fee-sponsors/{feeSponsorId}":{"get":{"operationId":"getFeeSponsor","summary":"Get Fee Sponsor","tags":["Fee Sponsors"],"security":[{"authenticationToken":[]}],"description":"Retrieve a Fee Sponsor information by ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`FeeSponsors:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Which Fee Sponsor you wish to retrieve."},"required":true,"description":"Which Fee Sponsor you wish to retrieve.","name":"feeSponsorId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeSponsor"}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteFeeSponsor","summary":"Delete Fee Sponsor","tags":["Fee Sponsors"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a Fee Sponsor. This action is irreversible. The fee sponsor won't be able to be used anymore when making a transfer.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`FeeSponsors:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Which Fee Sponsor you wish to delete."},"required":true,"description":"Which Fee Sponsor you wish to delete.","name":"feeSponsorId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeSponsor"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/fee-sponsors/{feeSponsorId}/deactivate":{"put":{"operationId":"deactivateFeeSponsor","summary":"Deactivate Fee Sponsor","tags":["Fee Sponsors"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deactivate a Fee Sponsor: The fee sponsor won't be able to be used anymore when making a transfer.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`FeeSponsors:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Which Fee Sponsor you wish to deactivate."},"required":true,"description":"Which Fee Sponsor you wish to deactivate.","name":"feeSponsorId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeSponsor"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/fee-sponsors/{feeSponsorId}/activate":{"put":{"operationId":"activateFeeSponsor","summary":"Activate Fee Sponsor","tags":["Fee Sponsors"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Activate a Fee Sponsor: The fee sponsor can be used when making a transfer.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`FeeSponsors:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Which Fee Sponsor you wish to activate."},"required":true,"description":"Which Fee Sponsor you wish to activate.","name":"feeSponsorId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeSponsor"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/fee-sponsors/{feeSponsorId}/fees":{"get":{"operationId":"listSponsoredFees","summary":"List Sponsored Fees","tags":["Fee Sponsors"],"security":[{"authenticationToken":[]}],"description":"Retrieves all fees paid by the specific Fee Sponsor.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`FeeSponsors:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Fee Sponsor to retrieve the fees from."},"required":true,"description":"Fee Sponsor to retrieve the fees from.","name":"feeSponsorId","in":"path"},{"schema":{"type":"string","pattern":"^\\d+$"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Fee Sponsor id.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"sponsoreeId":{"type":"string","description":"Id of the entity being sponsored, e.g. a wallet id."},"requestId":{"type":"string","description":"Id of the request that was sponsored."},"fee":{"type":"string","description":"Fee amount that was paid for the request"},"dateRequested":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the sponsorship was requested.","example":"2023-04-14T20:41:28.715Z"},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). When the sponsorship was confirmed.","example":"2023-04-14T20:41:28.715Z"}},"required":["feeSponsorId","sponsoreeId","requestId","dateRequested","dateConfirmed"]}},"nextPageToken":{"type":"string"}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys":{"post":{"operationId":"createKey","summary":"Create Key","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a key for the given scheme and curve. Returns the new key entity. ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Create`: Always required   \n`Keys:Delegate`: Required if `delegateTo` is specified.   \n`Keys:ChildKeys:Create`: Required if `deriveFrom` is specified."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scheme":{"$ref":"#/components/schemas/KeyScheme"},"curve":{"$ref":"#/components/schemas/KeyCurve"},"name":{"type":"string","maxLength":100,"description":"Nickname for the key."},"masterKey":{"type":"boolean","description":"Whether this key can be used as a master key for HD derivation."},"deriveFrom":{"type":"object","properties":{"keyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The master key to derive from.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"path":{"type":"string","pattern":"^m(\\/(0|[1-9]\\d{0,9}))+$","description":"Use this to specify the derivation path of the signing key. One will be auto generated if left blank."}},"required":["keyId"],"description":"Options for hierarchical deterministic key derivation."},"storeId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The key store to save the key to.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"delegateTo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the end user to delegate this key to.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"delayDelegation":{"type":"boolean","description":"Whether to delay delegation until explicitly triggered."}},"required":["scheme","curve"],"additionalProperties":false},"examples":{"EdDSA":{"value":{"scheme":"EdDSA","curve":"ed25519"}},"Schnorr":{"value":{"scheme":"Schnorr","curve":"secp256k1"}},"Stark":{"value":{"scheme":"ECDSA","curve":"stark"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Key"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listKeys","summary":"List Keys","tags":["Keys"],"security":[{"authenticationToken":[]}],"description":"Retrieve all keys registered for your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Filter by owner id or username."},"required":false,"description":"Filter by owner id or username.","name":"owner","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Key"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys/{keyId}/delegate":{"post":{"operationId":"delegateKey","summary":"Delegate Key","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"<Warning>\nOnly keys created with \"`delayDelegation: true`\" can then be delegated to an end-user. It means you need to know ahead of time that you're creating a wallet meant to be delegated to an end-user later. This is a safety to prevent, for example, a treasury wallet from being unintentionally delegated to an end-user.\n</Warning>\n\n<Note>\nWhen a key is delegated to an end user, all wallets using this key as the signing key are also automatically delegated to the same end user. Key and wallet ownerships are guaranteed to be always consistent.\n</Note>\n\n<Danger>\nThis operation is irreversible. The key ownership will be transferred to the end-user\n</Danger>\n\nIn most cases, when you want to implement [Wallet Delegation](https://docs.dfns.co/guides/developers/delegated-wallets), simply create the wallet by directly delegating it to an end user, in which case it will the non-custodial from the start.  There are some rare cases, however, where the key or wallet must be created before the user has accessed to the system.  To accommodate this, we've added the ability to create a key or wallet in delay delegation mode, and then later delegate it (i.e.: transfer ownership of it) to an end user via this endpoint.\n","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Delegate`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key to delegate. Must have been created with `delayDelegation: true`."},"required":true,"description":"The key to delegate. Must have been created with `delayDelegation: true`.","name":"keyId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"delegateTo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the end user to transfer ownership of the key to.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"}},"required":["delegateTo"],"additionalProperties":false},"examples":{"Delegate":{"value":{"delegateTo":"us-1a2b3-c4d5e-6f7g8h9i0jklmno"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"keyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The delegated key.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"status":{"type":"string","enum":["Delegated"],"description":"The key status after delegation."}},"required":["keyId","status"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys/{keyId}":{"delete":{"operationId":"deleteKey","summary":"Delete Key","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deletes the key and all wallets using this key. Once deleted, keys (and wallets) are not usable anymore, and won't count in your overall organisation wallet count.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key to delete."},"required":true,"description":"The key to delete.","name":"keyId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Key"},{"additionalProperties":false}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getKey","summary":"Get Key","tags":["Keys"],"security":[{"authenticationToken":[]}],"description":"Retrieves a key information by its ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key to retrieve."},"required":true,"description":"The key to retrieve.","name":"keyId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Key"},{"type":"object","properties":{"wallets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"network":{"type":"string","description":"The network of the wallet.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"]}},"required":["id","network"]},"description":"Wallets associated with this key."},"store":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"kind":{"type":"string","enum":["Hsm","Mpc","OfflineSigner"],"description":"The type of key store."},"keyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The key id within the store.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"derivationPath":{"type":"string","description":"The HD derivation path if applicable."},"reconstructionThreshold":{"type":"number","description":"The minimum number of key shares required to reconstruct this MPC key. Omitted for non-MPC keys."}},"required":["id","kind","keyId"],"description":"Key store details."}},"required":["wallets","store"]}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateKey","summary":"Update Key","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Updates the name of an existing key.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key to update."},"required":true,"description":"The key to update.","name":"keyId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":["string","null"],"maxLength":100,"description":"New nickname for the key. Pass `null` to clear the existing name."}},"required":["name"],"additionalProperties":false},"examples":{"Rename":{"value":{"name":"my-treasury-key"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Key"},{"additionalProperties":false}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys/{keyId}/derive":{"post":{"operationId":"deriveKey","summary":"Derive Key","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Dfns decentralized key management network supports threshold Diffie-Hellman protocol based on [GLOW20 paper](https://eprint.iacr.org/2020/096). You can use the DH protocol to derive output from a domain separation tag and a seed value. The derivation process is deterministic, i.e. the same Diffie-Hellman key and seed will lead to the same derived output. To ensure reproducibility, we use hash to curve [RFC9380](https://www.rfc-editor.org/rfc/rfc9380.html) and standard ciphersuite `secp256k1_XMD:SHA-256_SSWU_RO_`.\n\n<Tip>\nThe seed doesn’t need to be secret. Without access to the DH key, it is not possible to do the derivation, even if the seed is known. Moreover, if both seed and derived output are known, it’s also not possible to do the derivation for another seed without having access to the DH key.\n</Tip>\n\nThis endpoint only supports Diffie-Hellman keys. Regular threshold signature keys, like `ECDSA` or `EdDSA`, will not work. You can create a Diffie-Hellman key with the [Create Key](https://docs.dfns.co/api-reference/keys/create-key) endpoint using `scheme=DH` and `curve=secp256k1`.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Vrf:Derive`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The Diffie-Hellman key to derive from. Must be a key created with `scheme=DH`."},"required":true,"description":"The Diffie-Hellman key to derive from. Must be a key created with `scheme=DH`.","name":"keyId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"Hex-encoded domain separation tag used as an input to the derivation."},"seed":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"Hex-encoded seed value to derive from. The seed does not need to be secret."}},"required":["domain","seed"],"additionalProperties":false},"examples":{"Derive":{"value":{"domain":"0x64666e732d646f6d61696e","seed":"0x73656564"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"output":{"type":"string","description":"Hex-encoded derived output. Deterministic for a given key, domain and seed."}},"required":["output"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys/{keyId}/export":{"post":{"operationId":"exportKey","summary":"Export Key","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Dfns secures private keys by generating them as MPC key shares in our decentralized key management network.  Our goal is to eliminate all single points of failure (SPOFs) associated with blockchain private keys.\n\nIn certain circumstances, however, customers require Dfns to export a private key. In this case, Dfns exposes the following endpoint which can be used in conjunction with our [export SDK](https://github.com/dfns/dfns-sdk-ts/tree/m/examples/sdk/export-wallet). Each signer returns its key share encrypted to an encryption key you provide; the full private key is reconstituted client-side and is never assembled on Dfns servers.\n\n<Danger>\nOnce a key is exported and reconstituted, it becomes a single point of failure that Dfns can no longer protect: anyone who obtains it controls the wallet and its assets, and Dfns can not guarantee the security of transactions signed with it. You are solely responsible for the exported key's security — its storage, encryption, access controls, and protection against theft or misuse. Key export is not enabled by default; contact our support team to have it activated for your organization.\n</Danger>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Export`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key to export."},"required":true,"description":"The key to export.","name":"keyId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"encryptionKey":{"type":"string","minLength":1,"description":"The public encryption key the signers should encrypt their key shares to."},"supportedSchemes":{"type":"array","items":{"type":"object","properties":{"protocol":{"anyOf":[{"type":"string","enum":["CGGMP24","FROST","FROST_BITCOIN","GLOW20_DH","KU23"]},{"type":"string","enum":["CGGMP21"]}],"description":"An MPC protocol the client supports."},"curve":{"type":"string","enum":["ed25519","secp256k1","stark"],"description":"An elliptic curve the client supports."}},"required":["protocol","curve"],"additionalProperties":false},"description":"The protocol/curve combinations the client is able to reconstruct the key from."}},"required":["encryptionKey","supportedSchemes"],"additionalProperties":false},"examples":{"Export":{"value":{"encryptionKey":"<hex-encoded-public-encryption-key>","supportedSchemes":[{"protocol":"CGGMP21","curve":"secp256k1"}]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"publicKey":{"type":"string","description":"Hex-encoded public key of the exported key."},"protocol":{"anyOf":[{"type":"string","enum":["CGGMP24","FROST","FROST_BITCOIN","GLOW20_DH","KU23"]},{"type":"string","enum":["CGGMP21"]}],"description":"The MPC protocol the key shares are for."},"curve":{"type":"string","enum":["ed25519","secp256k1","stark"],"description":"The elliptic curve of the exported key."},"minSigners":{"type":"number","description":"The TSS threshold of the wallet private signing key shares"},"encryptedKeyShares":{"type":"array","items":{"type":"object","properties":{"signerId":{"type":"string","description":"Base64-encoded ID of the signer exported the encrypted keyshare"},"encryptedKeyShare":{"type":"string","description":"Base64-encoded keyshare"}},"required":["signerId","encryptedKeyShare"]},"description":"Keyshares of the exported wallet. They are encrypted with the provided encryption key. The exported private key is re-constructed from these keyshares."}},"required":["publicKey","protocol","curve","minSigners","encryptedKeyShares"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys/{keyId}/signatures":{"post":{"operationId":"generateSignature","summary":"Generate Signature","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Request to generate a signature with the key. **This process does not broadcast anything on-chain**, this is just an off-chain signature request.\n\nDfns is compatible with any blockchain that uses a supported [key format](https://docs.dfns.co/networks/supported-key-formats). If Dfns doesn't officially integrate with a blockchain, you can use hash signing to generate the signatures to interact with the chain.\n\n<Note>\nIf you were using the deprecated `POST /wallets/{walletId}/signatures` endpoint, then you should now use this one. See the [deprecation notice](https://docs.dfns.co/deprecation/keys-and-multichain-migration-guide) to get more information about how to change your code. TL,DR: from a wallet you can obtain the key as `wallet.signingKey.id`.\n</Note>\n","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Signatures:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key to sign with."},"required":true,"description":"The key to sign with.","name":"keyId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Hash"]},"hash":{"type":"string","pattern":"^(0x)?[0-9a-fA-F]{64}$","description":"32-byte hash in hex encoded format."},"taprootMerkleRoot":{"type":"string","pattern":"^(0x)?([0-9A-Fa-f]{64})?$","description":"Required when signing with a Schnorr key. Specify the merkle root for tweaking the signing key, or the empty string \"\" to tweak with the default merkle root."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","hash"],"additionalProperties":false,"description":"All cryptographic scheme support hash signing. Different blockchains will apply different hash functions to compute the hash.","title":"Hash"},{"type":"object","properties":{"kind":{"type":"string","enum":["Message"]},"message":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"An arbitrary hex encoded message."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","message"],"additionalProperties":false,"description":"Signs an arbitrary hex encoded arbitrary message.","title":"Message"},{"type":"object","properties":{"kind":{"type":"string","enum":["Transaction"]},"transaction":{"anyOf":[{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},{"type":"object","properties":{},"description":"Network-specific JSON transaction object. The accepted fields depend on the target network. For EVM chains the shape matches the EVM transaction object of [Sign and Broadcast Transaction](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction) (for example `to`, `value`, `data`, `nonce`, `gasLimit`, `maxFeePerGas`, `maxPriorityFeePerGas`). For other JSON networks (such as Starknet or Concordium), refer to the per-network formats described below.","title":"JSON transaction object"}],"description":"The unsigned hex-encoded transaction or JSON object for compatible networks"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","transaction"],"additionalProperties":false,"description":"Signs an unsigned transaction. The transaction parameter accepts hex-encoded transactions or JSON objects for compatible networks (Concordium, Starknet, Evm).\n\nThe following blockchains only accept JSON transaction objects (not hex strings): Concordium, Starknet.\n\nFor Starknet transactions, you may use invocation request objects (https://github.com/starkware-libs/starknet-specs/blob/v0.8.1/api/starknet_api_openrpc.json#L2621):\n\n| Field                         | Description                                                                                         | Type - Optional                  |\n|-------------------------------|-----------------------------------------------------------------------------------------------------|----------------------------------|\n| type                          | transaction type (always INVOKE              )                                                      | String (required)                |\n| calldata                      | **Array** of encoded function call parameters                                                       | **Array of Strings** (required)  |\n| nonce                         | Transaction nonce in hex format                                                                     | String (required)                |\n| version                       | Transaction version in hex format. Typically \"0x3\" for current transactions                         | String (required)                |\n| resourceBounds                | Gas bounds for L1, L2, and L1 data gas                                                              | Object (required)                |\n| ↳ resourceBounds.l1Gas        | L1 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l2Gas        | L2 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l1DataGas    | L1 data gas configuration with maxAmount and maxPricePerUnit                                        | Object (required)                |\n| tip                           | Transaction tip in hex format. Typically \"0x0\"                                                      | String (required)                |\n| paymasterData                 | Paymaster data array                                                                                | Array of Strings (required)      |\n| accountDeploymentData         | Account deployment data array                                                                       | Array of Strings (required)      |\n| nonceDataAvailabilityMode     | Data availability mode for nonce. Typically \"L1\" for now                                            | String (required)                |\n| feeDataAvailabilityMode       | Data availability mode for fee. Typically \"L1\" for now                                              | String (required)                |\n| chainId                       | The chain identifier in hex format                                                                  | String (required)                |\n| senderAddress                 | The address of the account sending the transaction                                                  | String (required)                |\n\nFor Concordium transactions, use account transaction objects (https://developer.concordium.software/concordium-node-sdk-js/classes/ccd_js_gen.ConcordiumGRPCClient.html):\n\n| Field                          | Description                                                                  | Type - Optional              |\n|--------------------------------|------------------------------------------------------------------------------|------------------------------|\n| header.sender                  | Account address (base58)                                                     | String (required)            |\n| header.nonce                   | Account nonce                                                                | String (required)            |\n| header.expiry                  | Unix epoch seconds expiry                                                    | Number (required)            |\n| header.executionEnergyAmount   | Max NRG for execution                                                        | String (required)            |\n| header.numSignatures           | Number of signatures                                                         | Number (optional)            |\n| payload                        | Transaction payload (type-specific, e.g. Transfer, RegisterData)             | Object (required)            |\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"blockchainKind\": \"Concordium\",\n  \"transaction\": {\n    \"header\": {\n      \"sender\": \"4FmiTW2L2AccyR36ZBRKNqwQvBJBH8CAXWMLB1dbX5WyZmRo6N\",\n      \"nonce\": \"42\",\n      \"expiry\": 1709510400,\n      \"executionEnergyAmount\": \"501\"\n    },\n    \"payload\": {\n      \"Transfer\": {\n        \"amount\": \"1000000\",\n        \"toAddress\": \"3U4sfVSqGG6XK8g6eho2qRYtnHc4MWJBG1dfxdtPGbfHwFxini\"\n      }\n    }\n  }\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": \"0xe703847735941a82520894f0965f5eb35ace69f01b77031f2cff22daca622887470de4df82000080\"\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"type\": \"INVOKE\",\n    \"calldata\": [\n      \"1\",\n      \"2009894490435840142178314390393166646092438090257831307886760648929397478285\",\n      \"232670485425082704932579856502088130646006032362877466777181098476241604910\",\n      \"3\",\n      \"296727860213112272332383824629975240127004024814636931420022890499591637514\",\n      \"1\",\n      \"0\"\n    ],\n    \"nonce\": \"0x51\",\n    \"version\": \"0x3\",\n    \"resourceBounds\": {\n      \"l1Gas\": { \"maxAmount\": \"0x0\", \"maxPricePerUnit\": \"0x239a01ff6e6c\" },\n      \"l2Gas\": { \"maxAmount\": \"0x1694a0\", \"maxPricePerUnit\": \"0x10c388d00\" },\n      \"l1DataGas\": { \"maxAmount\": \"0x120\", \"maxPricePerUnit\": \"0x98e8\" }\n    },\n    \"tip\": \"0x0\",\n    \"paymasterData\": [],\n    \"accountDeploymentData\": [],\n    \"nonceDataAvailabilityMode\": \"L1\",\n    \"feeDataAvailabilityMode\": \"L1\",\n    \"chainId\": \"0x534e5f5345504f4c4941\",\n    \"senderAddress\": \"0x0535a9762b984c876abe0b164b0ccedb0d23a78978c9fe87e29deae0ea890c72\"\n  }\n}\n```","title":"Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip191"]},"message":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"Hex-encoded message."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","message"],"additionalProperties":false,"description":"Signs a personal_sign message as defined in [EIP-191](https://eips.ethereum.org/EIPS/eip-191).","title":"EIP-191 personal_sign Message"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip712"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}},"description":"Type definitions."},"domain":{"type":"object","properties":{"name":{"type":"string","description":"Name of the signing domain."},"version":{"type":"string","description":"Current major version of the signing domain."},"chainId":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"string"}],"description":"Chain ID."},"verifyingContract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The address of the contract that will verify the signature."},"salt":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"32-byte value as a last-resort domain separator."}},"additionalProperties":false,"description":"Domain separator."},"message":{"type":"object","additionalProperties":{},"description":"Structured message to sign."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","types","domain","message"],"additionalProperties":false,"description":"Signs a typed structured data as defined in [EIP-712](https://eips.ethereum.org/EIPS/eip-712).","title":"EIP-712 TypedData"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip7702"]},"address":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The address of the contract the signer's EOA will be delegated to."},"nonce":{"type":"number","description":"The current nonce of the signer EOA."},"chainId":{"type":"number","description":"Chain ID."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","address","nonce","chainId"],"additionalProperties":false,"description":"Signs an authorization tuple for type 4 set code transaction defined in [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702).","title":"EIP-7702 Authorization"},{"type":"object","properties":{"kind":{"type":"string","enum":["Snip12"]},"primaryType":{"type":"string","description":"The primary type of the message."},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}},"description":"Type definitions."},"domain":{"type":"object","properties":{"name":{"type":"string","description":"Name of the signing domain."},"version":{"type":"string","description":"Current major version of the signing domain."},"chainId":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"string"}],"description":"Chain ID."},"revision":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Revision of the domain."}},"description":"Domain separator."},"message":{"type":"object","additionalProperties":{},"description":"Structured message to sign."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","primaryType","types","domain","message"],"additionalProperties":false,"description":"Signs a typed structured data as defined in [SNIP-12](https://github.com/starknet-io/SNIPs/blob/main/SNIPS/snip-12.md).","title":"SNIP-12 TypedData"},{"type":"object","properties":{"kind":{"type":"string","enum":["Psbt"]},"psbt":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The hex encoded PSBT."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","psbt"],"additionalProperties":false,"description":"Signs a partially signed Bitcoin / Litecoin transaction.","title":"PSBT"},{"type":"object","properties":{"kind":{"type":"string","enum":["Bip322"]},"message":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The generic message hex encoded."},"format":{"type":"string","enum":["Simple","Full"],"description":"Defaults to Simple if not present. The formatted signature is returned in the `signedData` field in the response."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","message"],"additionalProperties":false,"description":"Signs a generic message using [BIP-322](https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki). Note: signing payload construction depends on the targeted blockchain. Therefore it's tied to a specific `network` rather than the blockchain kind.","title":"BIP-322"},{"type":"object","properties":{"kind":{"type":"string","enum":["SignDocDirect"]},"signDoc":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The hex encoded `SignDoc` Protobuf."},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","signDoc"],"additionalProperties":false,"description":"Signs an unsigned transaction using [sign mode direct](https://docs.cosmos.network/main/learn/advanced/transactions#sign_mode_direct-preferred).","title":"SignDocDirect"},{"type":"object","properties":{"kind":{"type":"string","enum":["SignerPayload"]},"payload":{"anyOf":[{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},{"type":"object","properties":{}}],"description":"The unsigned Signer Payload formatted as JSON, or as a serialized hex-encoded buffer.\n\nPlease refer to the original Polkadot definition for more details: [SignerPayloadJson](https://github.com/polkadot-js/api/blob/v16.2.2/packages/types/src/types/extrinsic.ts#L32). Note that additional fields will be rejected.\n\n| Field                | Description                                                                              | Type - Optional      |\n| -------------------- | ---------------------------------------------------------------------------------------- | -------------------- |\n| `address`            | ss58-encoded address of the sending account.                                             | String               |\n| `blockHash`          | The hash of the checkpoint block, hex encoded.                                           | String               |\n| `blockNumber`        | The checkpoint block number, hex encoded.                                                | String               |\n| `era`                | The number of blocks after the checkpoint for which a transaction is valid, hex encoded. | String               |\n| `genesisHash`        | The genesis hash of the chain, hex encoded.                                              | String               |\n| `metadataHash`       | The metadataHash for the CheckMetadataHash SignedExtension, hex encoded.                 | String *(optional)*  |\n| `mode`               | flag indicating whether to verify the metadata hash or not.                              | Integer *(optional)* |\n| `method`             | The encoded method with arguments, hex encoded.                                          | String               |\n| `nonce`              | The nonce for the transaction, hex encoded.                                              | String               |\n| `tip`                | The tip to increase transaction priority, hex encoded.                                   | String               |\n| `version`            | The version of the extrinsic.                                                            | Integer              |\n| `specVersion`        | The current spec version for the runtime, hex encoded.                                   | String               |\n| `transactionVersion` | The current transaction version for the runtime, hex encoded.                            | String               |\n| `signedExtensions`   | The applicable signed extensions for this runtime.                                       | Array<String>       |\n\n```json\n{\n  \"network\": \"Polymesh\",\n  \"kind\": \"SignerPayload\",\n  \"payload\": {\n    \"address\": \"5H5tTnmLUqRgvTZvTwCdBKYjKLBm2gkp7u38Q9UUdJa8m6rX\",\n    \"blockHash\": \"0x2ace05e703aa50b48c0ccccfc8b424f7aab9a1e2c424ed12e45d20b1e8ffd0d6\",\n    \"blockNumber\": \"0x00000000\",\n    \"era\": \"0x00\",\n    \"genesisHash\": \"0x2ace05e703aa50b48c0ccccfc8b424f7aab9a1e2c424ed12e45d20b1e8ffd0d6\",\n    \"method\": \"0x07141f3da32e72ac6eb6cb40d9e757594363a617b2c3964a2b6ec6895c6648f48d500000\",\n    \"nonce\": \"0x00000000\",\n    \"tip\": \"0x00000000000000000000000000000000\",\n    \"version\": 4,\n    \"specVersion\": \"0x006adb7a\",\n    \"transactionVersion\": \"0x00000007\",\n    \"signedExtensions\": []\n  }\n}\n```\n"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","payload"],"additionalProperties":false,"description":"Signs a [generic Signer Payload](https://github.com/polkadot-js/api/blob/v15.0.1/packages/types/src/extrinsic/SignerPayload.ts#L47-L51). Note: converting the generic signer payload to a signable extrinsic requires fetching metadata from the targeted blockchain. Therefore it's tied to a specific `network` rather than the blockchain kind.","title":"SignerPayload"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cip8"]},"payload":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The generic message hex encoded."},"externalAad":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"Allows an application to ask the user to sign some extra data but NOT put it inside the COSE structure (only as part of the data to sign)."},"context":{"type":"string","enum":["Signature1"]},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","context"],"additionalProperties":false,"description":"Signs an arbitrary message using [CIP-8](https://cips.cardano.org/cip/CIP-0008). Note: signing address depends on the targeted blockchain. Therefore it's tied to a specific `network` rather than the blockchain kind.","title":"CIP-8"},{"type":"object","properties":{"kind":{"type":"string","enum":["DfnsSmartAccountTransaction"]},"structured":{"type":"object","properties":{"address":{"type":"string"},"userOperations":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string"},"value":{"type":"string"},"data":{"type":"string"}},"required":["to"]}},"message":{"type":"object","properties":{"kind":{"type":"string","enum":["Eip712"]},"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"anyOf":[{"type":"number"},{"type":"string"}]},"verifyingContract":{"type":"string"},"salt":{"type":"string"}}},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"message":{"type":"object","additionalProperties":{}}},"required":["kind","domain","types","message"]},"authorization":{"type":"object","properties":{"kind":{"type":"string","enum":["Eip7702"]},"address":{"type":"string"},"nonce":{"type":"number"},"chainId":{"type":"number"}},"required":["kind","address","nonce","chainId"]}},"required":["address","userOperations","message"]},"signatures":{"type":"object","additionalProperties":{"type":"object","properties":{"r":{"type":"string","description":"The `r` component of the signature, hex encoded."},"s":{"type":"string","description":"The `s` component of the signature, hex encoded."},"recid":{"type":"number","description":"The recovery id, returned for ECDSA signatures on networks that need it to recover the signing public key."},"encoded":{"type":"string","description":"The signature already serialized in the format the target network expects, hex encoded and ready to use directly. For EdDSA (Ed25519) networks such as Solana this is the raw 64-byte `r || s` concatenation, where `r` and `s` are each a fixed 32 bytes. It is not ASN.1/DER encoded, so no DER parsing or re-padding of the components is needed."}},"required":["r","s"]}},"transactionReference":{"type":"string"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","structured","signatures","transactionReference"],"additionalProperties":false,"title":"Dfns Smart Account Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["StellarFeeBumpTransaction"]},"innerTransaction":{"type":"string"},"transactionReference":{"type":"string"},"network":{"$ref":"#/components/schemas/Network"},"blockchainKind":{"$ref":"#/components/schemas/BlockchainKind"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","innerTransaction","transactionReference"],"additionalProperties":false,"title":"Stellar Fee Bump Transaction"}]},"examples":{"Bip322":{"value":{"network":"BitcoinSignet","kind":"Bip322","message":"0x49206c6f76652044666e73"}},"Cip8":{"value":{"network":"CardanoPreprod","kind":"Cip8","payload":"0x49206c6f76652044666e73","externalAad":"0x616464697469706e616c5f64617461","context":"Signature1"}},"Eip191":{"value":{"blockchainKind":"Evm","kind":"Eip191","message":"0x49206c6f76652044666e73"}},"Eip712":{"value":{"blockchainKind":"Evm","kind":"Eip712","types":{"Person":[{"name":"name","type":"string"},{"name":"wallet","type":"address"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person"},{"name":"contents","type":"string"}]},"domain":{"name":"Ether Mail","version":"1","chainId":1,"verifyingContract":"0x1b352de7a926ebd1bf52194dab487c2cb0793a9b","salt":"0xf2d857f4a3edcb9b78b4d503bfe733db1e3f6cdc2b7971ee739626c97e86a558"},"message":{"from":{"name":"Chris","wallet":"0x00e3495cf6af59008f22ffaf32d4c92ac33dac47"},"to":{"name":"Bob","wallet":"0xcc0ee1a1c5e788b61916c8f1c96c960f9a9d3db7"},"contents":"Hello, Bob!"}}},"Eip7702":{"value":{"blockchainKind":"Evm","kind":"Eip7702","chainId":1,"address":"0xf5138ba9777A42F76437Ecd5F3cDb96Decd72b4e","nonce":0}},"Hash":{"value":{"kind":"Hash","hash":"0xd356339fa071e88335fdfab167cb600430522b71839d8556fa351fe1b4cd7556"}},"Message":{"value":{"blockchainKind":"Evm","kind":"Message","message":"0x49206c6f76652044666e73"}},"Psbt":{"value":{"blockchainKind":"Bitcoin","kind":"Psbt","psbt":"0x70736274ff0100db02000000019fc89619065ef6b81415397bb9879dfc78cacbaae66072d69eb619bfd79d5cba0200000000fdffffff0350c3000000000000225120cc8f48c274c1ac263046c301cb9e028979c8e89c4060b4b857c414ed6e7b43760000000000000000496a476262743400223d31efd004ca86999dedb0b32445f8ead685b4e99d92ec19ea0e211afd9672a99172cdc13644990aabe785f1595843de7f884249a28cc3170112e7a018b0c6fa00a2171b0000000000225120223d31efd004ca86999dedb0b32445f8ead685b4e99d92ec19ea0e211afd9672dd5d03000001012b9ceb1b0000000000225120223d31efd004ca86999dedb0b32445f8ead685b4e99d92ec19ea0e211afd9672011720223d31efd004ca86999dedb0b32445f8ead685b4e99d92ec19ea0e211afd967200000000"}},"Hash (Schnorr)":{"value":{"kind":"Hash","hash":"0xd356339fa071e88335fdfab167cb600430522b71839d8556fa351fe1b4cd7556","taprootMerkleRoot":""}},"Transaction":{"value":{"blockchainKind":"Evm","kind":"Transaction","transaction":"0xe703847735941a82520894f0965f5eb35ace69f01b77031f2cff22daca622887470de4df82000080"}},"Transaction (EVM JSON)":{"value":{"blockchainKind":"Evm","kind":"Transaction","transaction":{"to":"0xd964d741998edc275f3800eed113378a391951d9","value":"20000000000000000","nonce":"3","gasLimit":"21000","maxFeePerGas":"2000000000","maxPriorityFeePerGas":"1000000000"}}},"Transaction (Concordium JSON)":{"value":{"blockchainKind":"Concordium","kind":"Transaction","transaction":{"header":{"sender":"4FmiTW2L2AccyR36ZBRKNqwQvBJBH8CAXWMLB1dbX5WyZmRo6N","nonce":"42","expiry":1709510400,"executionEnergyAmount":"501"},"payload":{"Transfer":{"amount":"1000000","toAddress":"3U4sfVSqGG6XK8g6eho2qRYtnHc4MWJBG1dfxdtPGbfHwFxini"}}}}},"Transaction (Starknet JSON)":{"value":{"blockchainKind":"Starknet","kind":"Transaction","transaction":{"type":"INVOKE","calldata":["1","2009894490435840142178314390393166646092438090257831307886760648929397478285","232670485425082704932579856502088130646006032362877466777181098476241604910","3","296727860213112272332383824629975240127004024814636931420022890499591637514","1","0"],"nonce":"0x51","version":"0x3","resourceBounds":{"l1Gas":{"maxAmount":"0x0","maxPricePerUnit":"0x239a01ff6e6c"},"l2Gas":{"maxAmount":"0x1694a0","maxPricePerUnit":"0x10c388d00"},"l1DataGas":{"maxAmount":"0x120","maxPricePerUnit":"0x98e8"}},"tip":"0x0","paymasterData":[],"accountDeploymentData":[],"nonceDataAvailabilityMode":"L1","feeDataAvailabilityMode":"L1","chainId":"0x534e5f5345504f4c4941","senderAddress":"0x0535a9762b984c876abe0b164b0ccedb0d23a78978c9fe87e29deae0ea890c72"}}},"SignerPayload":{"value":{"network":"PolymeshTestnet","kind":"SignerPayload","payload":{"address":"5ELwJvCPKBxLm3rve77JGDmHv2FNNE2nUW17FXhBs7Tws4Cr","blockHash":"0x2ace05e703aa50b48c0ccccfc8b424f7aab9a1e2c424ed12e45d20b1e8ffd0d6","blockNumber":"0x00000000","era":"0x00","genesisHash":"0x2ace05e703aa50b48c0ccccfc8b424f7aab9a1e2c424ed12e45d20b1e8ffd0d6","method":"0x07141f3da32e72ac6eb6cb40d9e757594363a617b2c3964a2b6ec6895c6648f48d500000","mode":0,"nonce":"0x00000000","tip":"0x00000000000000000000000000000000","specVersion":"0x006adb7a","transactionVersion":"0x00000007","version":4,"signedExtensions":[]}}},"Snip12":{"value":{"blockchainKind":"Starknet","kind":"Snip12","primaryType":"Mail","types":{"StarkNetDomain":[{"name":"name","type":"felt"},{"name":"version","type":"felt"},{"name":"chainId","type":"felt"},{"name":"revision","type":"felt"}],"Person":[{"name":"name","type":"felt"},{"name":"wallet","type":"felt"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person"},{"name":"contents","type":"felt"}]},"domain":{"name":"StarkNet Mail","version":"1","chainId":"0x534e5f4d41494e","revision":1},"message":{"from":{"name":"Alice","wallet":"0x1234567890123456789012345678901234567890"},"to":{"name":"Bob","wallet":"0x0987654321098765432109876543210987654321"},"contents":"Hello Bob!"}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignatureRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listSignatures","summary":"List Signatures","tags":["Keys"],"security":[{"authenticationToken":[]}],"description":"List all signature requests for a key.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Signatures:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key to list signatures for."},"required":true,"description":"The key to list signatures for.","name":"keyId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SignatureRequest"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."},"keyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The key these signatures belong to.","example":"key-01snl-t56gb-j8tsok0vn802p80i"}},"required":["items","keyId"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys/{keyId}/signatures/{signatureId}":{"get":{"operationId":"getSignature","summary":"Get Signature","tags":["Keys"],"security":[{"authenticationToken":[]}],"description":"Retrieve a signature request details.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Signatures:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The key that was used for signing."},"required":true,"description":"The key that was used for signing.","name":"keyId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The signature request to retrieve."},"required":true,"description":"The signature request to retrieve.","name":"signatureId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignatureRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/keys/import":{"post":{"operationId":"importKey","summary":"Import Key","tags":["Keys"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Dfns secures private keys by generating them as MPC key shares in our decentralized key management network.  This happens by default when you create a [key](https://docs.dfns.co/api-reference/keys/create-key) or [wallet](https://docs.dfns.co/api-reference/wallets/create-wallet).\n\nIn some circumstances, however, you may need to import an existing private key into Dfns infrastructure, instead of creating a brand new wallet with Dfns and transfer funds to it. As an example, you might want to keep an existing wallet if its address is tied to a smart contract which you don't want to re-deploy.\n\nIn such a case, Dfns exposes this key import API endpoint, which can be used in conjunction with our [import SDK](https://github.com/dfns/dfns-sdk-ts/tree/m/examples/sdk/import-wallet).   Note this is intended to be used only to migrate wallets when first onboarding onto the Dfns platform.\n\n<Danger>\nDfns can not guarantee the security of imported wallets, as we have no way to control who had access to the private key prior to import.  For this reason, this feature is restricted to Enterprise customers who have signed a contractual addendum limiting our liability for imported keys.  Please contact your sales representative for more information.\n</Danger>\n","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Import`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":100,"description":"Nickname for the imported key."},"curve":{"type":"string","enum":["ed25519","secp256k1","stark"],"description":"The elliptic curve of the private key being imported."},"protocol":{"anyOf":[{"type":"string","enum":["CGGMP24","FROST","FROST_BITCOIN","GLOW20_DH","KU23"]},{"type":"string","enum":["CGGMP21"]}],"description":"The MPC protocol the key shares are formatted for."},"minSigners":{"type":"integer","exclusiveMinimum":0,"description":"The TSS threshold: the minimum number of key shares required to sign."},"encryptedKeyShares":{"type":"array","items":{"type":"object","properties":{"signerId":{"type":"string","minLength":1,"description":"ID of the signer this key share is for."},"encryptedKeyShare":{"type":"string","minLength":1,"description":"The key share encrypted to the target signer."}},"required":["signerId","encryptedKeyShare"]},"minItems":1,"description":"One key share per signer, each encrypted to that signer."},"masterKey":{"type":"boolean","description":"Specify to create an extended master key for HD derivation."}},"required":["curve","protocol","minSigners","encryptedKeyShares"],"additionalProperties":false},"examples":{"Import":{"value":{"name":"my-imported-key","curve":"secp256k1","protocol":"CGGMP21","minSigners":2,"encryptedKeyShares":[{"signerId":"signer-1","encryptedKeyShare":"<base64-encrypted-share>"},{"signerId":"signer-2","encryptedKeyShare":"<base64-encrypted-share>"},{"signerId":"signer-3","encryptedKeyShare":"<base64-encrypted-share>"}]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Key"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/networks/fees":{"get":{"operationId":"estimateFees","summary":"Estimate Fees","tags":["Networks"],"security":[{"authenticationToken":[]}],"description":"Gets real-time fee details for a given network, allowing users to make decisions based on their preferences for transaction speed/priority. Three levels of priority will be displayed: `slow`, `standard`, `fast`.\n\nLegacy (pre-London) EVM networks such as Ethereum Classic do not support EIP-1559 fee estimation and are not listed here. When broadcasting on those networks, omit `priority` and a legacy `gasPrice` is filled automatically.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","enum":["Bitcoin","BitcoinSignet","BitcoinTestnet4","Litecoin","LitecoinTestnet","Dogecoin","DogecoinTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Bob","BobSepolia","Bsc","BscTestnet","Berachain","BerachainBepolia","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiPacific1","SeiAtlantic2","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia","Solana","SolanaDevnet"]},"required":true,"name":"network","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Bitcoin"]},"network":{"type":"string","enum":["Bitcoin","BitcoinSignet","BitcoinTestnet4","Litecoin","LitecoinTestnet","Dogecoin","DogecoinTestnet"]},"blockNumber":{"type":"number"},"slow":{"type":"object","properties":{"feeRate":{"type":"string","description":"Fee rate denominated in satoshis (the lowest denomination) per virtual byte.","example":"12"},"blockHorizon":{"type":"number","description":"Target number of blocks within which a transaction at this fee rate is expected to confirm.","example":2}},"required":["feeRate","blockHorizon"]},"standard":{"type":"object","properties":{"feeRate":{"type":"string","description":"Fee rate denominated in satoshis (the lowest denomination) per virtual byte.","example":"12"},"blockHorizon":{"type":"number","description":"Target number of blocks within which a transaction at this fee rate is expected to confirm.","example":2}},"required":["feeRate","blockHorizon"]},"fast":{"type":"object","properties":{"feeRate":{"type":"string","description":"Fee rate denominated in satoshis (the lowest denomination) per virtual byte.","example":"12"},"blockHorizon":{"type":"number","description":"Target number of blocks within which a transaction at this fee rate is expected to confirm.","example":2}},"required":["feeRate","blockHorizon"]}},"required":["kind","network","blockNumber","slow","standard","fast"],"title":"Bitcoin"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip1559"]},"network":{"type":"string","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Bob","BobSepolia","Bsc","BscTestnet","Berachain","BerachainBepolia","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiPacific1","SeiAtlantic2","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]},"blockNumber":{"type":"number"},"slow":{"type":"object","properties":{"maxPriorityFeePerGas":{"type":"string","description":"Maximum priority fee (tip) per unit of gas, denominated in wei (the lowest denomination).","example":"1500000000"},"maxFeePerGas":{"type":"string","description":"Maximum total fee per unit of gas, denominated in wei (the lowest denomination).","example":"1626000000000"}},"required":["maxPriorityFeePerGas","maxFeePerGas"]},"standard":{"type":"object","properties":{"maxPriorityFeePerGas":{"type":"string","description":"Maximum priority fee (tip) per unit of gas, denominated in wei (the lowest denomination).","example":"1500000000"},"maxFeePerGas":{"type":"string","description":"Maximum total fee per unit of gas, denominated in wei (the lowest denomination).","example":"1626000000000"}},"required":["maxPriorityFeePerGas","maxFeePerGas"]},"fast":{"type":"object","properties":{"maxPriorityFeePerGas":{"type":"string","description":"Maximum priority fee (tip) per unit of gas, denominated in wei (the lowest denomination).","example":"1500000000"},"maxFeePerGas":{"type":"string","description":"Maximum total fee per unit of gas, denominated in wei (the lowest denomination).","example":"1626000000000"}},"required":["maxPriorityFeePerGas","maxFeePerGas"]},"baseFeePerGas":{"type":"string","description":"Base fee per unit of gas of the latest block, denominated in wei (the lowest denomination).","example":"1000000000"}},"required":["kind","network","blockNumber","slow","standard","fast","baseFeePerGas"],"description":"For EIP-1559, we  provide 2 different fields for each strategy: `maxFee` (per Gas) and `maxPriorityFee` (per Gas). To compute these estimations, we look at the block history, compute three different percentiles for the rewards offered by the transactions in the blocks, and then calculate the average for each strategy.","title":"EVM EIP-1559"},{"type":"object","properties":{"kind":{"type":"string","enum":["Solana"]},"network":{"type":"string","enum":["Solana","SolanaDevnet"]},"blockNumber":{"type":"number"},"slow":{"type":"object","properties":{"computeUnitPrice":{"type":"string","description":"Price per compute unit, denominated in micro-lamports (the lowest denomination).","example":"10000"}},"required":["computeUnitPrice"]},"standard":{"type":"object","properties":{"computeUnitPrice":{"type":"string","description":"Price per compute unit, denominated in micro-lamports (the lowest denomination).","example":"10000"}},"required":["computeUnitPrice"]},"fast":{"type":"object","properties":{"computeUnitPrice":{"type":"string","description":"Price per compute unit, denominated in micro-lamports (the lowest denomination).","example":"10000"}},"required":["computeUnitPrice"]}},"required":["kind","network","blockNumber","slow","standard","fast"],"title":"Solana"}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/networks/{network}/call-function":{"post":{"operationId":"callFunction","summary":"Call Function","tags":["Networks"],"security":[{"authenticationToken":[]}],"description":"Call a read-only function on a smart contract. In Solidity, these are functions with the state mutability set to `view`.\n\n  <Note>\n  Currently only works on EVM compatible chains.\n  </Note>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","description":"Network name formatted in kebab case"},"required":true,"description":"Network name formatted in kebab case","name":"network","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Address of the contract to call"},"abi":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"stateMutability":{"type":"string"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"components":{"type":"array","items":{"type":"object"}}},"required":["name","type"]}},"outputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"components":{"type":"array","items":{"type":"object"}}},"required":["name","type"]}}},"required":["type","name","stateMutability","inputs","outputs"],"description":"ABI of the read-only function to invoke"},"calldata":{"type":"object","properties":{},"description":"Function call arguments"}},"required":["contract","abi"],"additionalProperties":false,"description":"Calls an on-chain read function.","title":"Call Function"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/networks/{network}/validators/{validatorId}":{"get":{"operationId":"getCantonValidator","summary":"Get Canton Validator","tags":["Networks"],"security":[{"authenticationToken":[]}],"description":"Return a configured Canton Validator in your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Networks:Canton:Validators:Read`: Always required."},"parameters":[{"schema":{"type":"string","enum":["canton","canton-devnet","canton-testnet"]},"required":true,"name":"network","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cv-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"validatorId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CantonValidator"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateCantonValidator","summary":"Update Canton Validator","tags":["Networks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Update an existing Canton Validator configuration.\n  \n  Read details about the process [here](https://docs.dfns.co/networks/canton). ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Networks:Canton:Validators:Update`: Always required."},"parameters":[{"schema":{"type":"string","enum":["canton","canton-devnet","canton-testnet"]},"required":true,"name":"network","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cv-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"validatorId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nickname for this validator."},"validator":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to reach the API at this address. The calls will be originating from our IP addresses (see [Dfns Environments](https://docs.dfns.co/api-reference/regions))"},"oauth2":{"type":"object","properties":{"domain":{"type":"string","format":"uri","description":"your OAuth2 tenant domain. Provided by your auth provider. "},"tokenPath":{"type":"string","description":"token endpoint from your authorization provider. We will call this endpoint on your tenant domain (i.e.: `<domain>/<token path>`)"},"audience":{"type":"string","description":"the audience your configured on your auth provider. It is suggested to start with `https://canton.network.global`."},"clientId":{"type":"string","description":"The client id from your auth provider for this application."},"clientSecret":{"type":"string","description":"The client secret from your auth provider for this application."}},"required":["domain","audience","clientId","clientSecret"],"description":"How Dfns will authenticate into your validator/ledger. You should have setup authentication already (see details [here](https://docs.dev.sync.global/validator_operator/validator_helm.html#helm-validator-auth)), you can reuse the same Application details. See examples in this endpoint payload examples above."}},"required":["url","oauth2"]},"ledger":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to reach the API at this address. The calls will be originating from our IP addresses (see [Dfns Environments](https://docs.dfns.co/api-reference/regions))"},"oauth2":{"type":"object","properties":{"domain":{"type":"string","format":"uri","description":"your OAuth2 tenant domain. Provided by your auth provider. "},"tokenPath":{"type":"string","description":"token endpoint from your authorization provider. We will call this endpoint on your tenant domain (i.e.: `<domain>/<token path>`)"},"audience":{"type":"string","description":"the audience your configured on your auth provider. It is suggested to start with `https://canton.network.global`."},"clientId":{"type":"string","description":"The client id from your auth provider for this application."},"clientSecret":{"type":"string","description":"The client secret from your auth provider for this application."}},"required":["domain","audience","clientId","clientSecret"],"description":"How Dfns will authenticate into your validator/ledger. You should have setup authentication already (see details [here](https://docs.dev.sync.global/validator_operator/validator_helm.html#helm-validator-auth)), you can reuse the same Application details. See examples in this endpoint payload examples above."}},"required":["url","oauth2"]}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CantonValidator"}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteCantonValidator","summary":"Delete Canton Validator","tags":["Networks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a specific Canton Validator configuration.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Networks:Canton:Validators:Delete`: Always required."},"parameters":[{"schema":{"type":"string","enum":["canton","canton-devnet","canton-testnet"]},"required":true,"name":"network","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cv-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"validatorId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CantonValidator"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/networks/{network}/validators":{"post":{"operationId":"createCantonValidator","summary":"Create Canton Validator","tags":["Networks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Link a Canton Validator to your organization. This is required in order to create wallets or interact with the Canton network.\n\n  The `Shared` option allows you to use a shared validator hosted by Dfns and get started in seconds, while the `Custom` option allows you to connect your own validator and ledger nodes using OAuth2 authentication.\n\n  Read details about the process [here](https://docs.dfns.co/networks/canton). ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Networks:Canton:Validators:Create`: Always required."},"parameters":[{"schema":{"type":"string","enum":["canton","canton-devnet","canton-testnet"]},"required":true,"name":"network","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nickname for this validator."},"kind":{"type":"string","enum":["Shared"]}},"required":["kind"],"description":"Use Dfns' shared validator to create your Canton Wallets. See [here](https://docs.dfns.co/networks/canton)","title":"Dfns Shared validator"},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nickname for this validator."},"kind":{"type":"string","enum":["Custom"]},"validator":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to reach the API at this address. The calls will be originating from our IP addresses (see [Dfns Environments](https://docs.dfns.co/api-reference/regions))"},"oauth2":{"type":"object","properties":{"domain":{"type":"string","format":"uri","description":"your OAuth2 tenant domain. Provided by your auth provider. "},"tokenPath":{"type":"string","description":"token endpoint from your authorization provider. We will call this endpoint on your tenant domain (i.e.: `<domain>/<token path>`)"},"audience":{"type":"string","description":"the audience your configured on your auth provider. It is suggested to start with `https://canton.network.global`."},"clientId":{"type":"string","description":"The client id from your auth provider for this application."},"clientSecret":{"type":"string","description":"The client secret from your auth provider for this application."}},"required":["domain","audience","clientId","clientSecret"],"description":"How Dfns will authenticate into your validator/ledger. You should have setup authentication already (see details [here](https://docs.dev.sync.global/validator_operator/validator_helm.html#helm-validator-auth)), you can reuse the same Application details. See examples in this endpoint payload examples above."}},"required":["url","oauth2"],"description":"Configuration to reach your validator Signing API. We will call the validator External Signing API at the url (and using the credentials) defined below ; for instance `$URL/api/validator/v0/admin/external-party/topology/generate`. See the underlying calls details [here](https://docs.dev.sync.global/app_dev/validator_api/index.html#validator-api-external-signing)."},"ledger":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to reach the API at this address. The calls will be originating from our IP addresses (see [Dfns Environments](https://docs.dfns.co/api-reference/regions))"},"oauth2":{"type":"object","properties":{"domain":{"type":"string","format":"uri","description":"your OAuth2 tenant domain. Provided by your auth provider. "},"tokenPath":{"type":"string","description":"token endpoint from your authorization provider. We will call this endpoint on your tenant domain (i.e.: `<domain>/<token path>`)"},"audience":{"type":"string","description":"the audience your configured on your auth provider. It is suggested to start with `https://canton.network.global`."},"clientId":{"type":"string","description":"The client id from your auth provider for this application."},"clientSecret":{"type":"string","description":"The client secret from your auth provider for this application."}},"required":["domain","audience","clientId","clientSecret"],"description":"How Dfns will authenticate into your validator/ledger. You should have setup authentication already (see details [here](https://docs.dev.sync.global/validator_operator/validator_helm.html#helm-validator-auth)), you can reuse the same Application details. See examples in this endpoint payload examples above."}},"required":["url","oauth2"],"description":"Configuration to reach your validator Ledger JSON API. We will call endpoints such as `/v2/state/ledger-end`, `/v2/state/active-contracts`, `/v2/parties/participant-id`, `/v2/interactive-submission/prepare`, `/v2/interactive-submission/execute`, `/v2/commands/completions`. See the underlying details [here](https://docs.dev.sync.global/app_dev/ledger_api/index.html)."}},"required":["kind","validator","ledger"],"description":"Connect your own validator. See [here](https://docs.dfns.co/networks/canton) for more info.","title":"Your own custom validator"}]},"examples":{"Shared Validator":{"value":{"kind":"Shared","name":"My shared validator"}},"Custom Validator | Auth0":{"value":{"kind":"Custom","name":"My validator with auth0 credentials","validator":{"url":"https://validator.testnet.mydomain.com/","oauth2":{"domain":"https://xxxxxx.us.auth0.com","clientId":"xxxxxx","clientSecret":"xxxxxxx","audience":"https://canton.network.global"}},"ledger":{"url":"https://ledger.testnet.mydomain.com/","oauth2":{"domain":"https://xxxxxx.us.auth0.com","clientId":"xxxxxx","clientSecret":"xxxxxxx","audience":"https://canton.network.global"}}}},"Custom Validator | Okta":{"value":{"kind":"Custom","name":"My validator with auth0 credentials","validator":{"url":"https://validator.testnet.mydomain.com/","oauth2":{"domain":"https://xxxxxx.okta.com","tokenPath":"oauth2/xxxxxx/v1/token","clientId":"xxxxxx","clientSecret":"xxxxxxx","audience":"https://validator.testnet.mydomain.com/"}},"ledger":{"url":"https://ledger.testnet.mydomain.com/","oauth2":{"domain":"https://xxxxxx.okta.com","tokenPath":"oauth2/xxxxxx/v1/token","clientId":"xxxxxx","clientSecret":"xxxxxxx","audience":"https://ledger.testnet.mydomain.com/"}}}},"Custom Validator | Keycloak":{"value":{"kind":"Custom","name":"My validator with auth0 credentials","validator":{"url":"https://validator.testnet.mydomain.com/","oauth2":{"domain":"https://my-own-server.running-keycloak.com","tokenPath":"/auth/realms/xxxxx/protocol/openid-connect/token","clientId":"xxxxxx","clientSecret":"xxxxxxx","audience":"https://validator.testnet.mydomain.com/"}},"ledger":{"url":"https://ledger.testnet.mydomain.com/","oauth2":{"domain":"https://my-own-server.running-keycloak.com","tokenPath":"/auth/realms/xxxxx/protocol/openid-connect/token","clientId":"xxxxxx","clientSecret":"xxxxxxx","audience":"https://ledger.testnet.mydomain.com/"}}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CantonValidator"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listCantonValidators","summary":"List Canton Validators","tags":["Networks"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of configured Canton Validators in your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Networks:Canton:Validators:Read`: Always required."},"parameters":[{"schema":{"type":"string","enum":["canton","canton-devnet","canton-testnet"]},"required":true,"name":"network","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CantonValidator"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/networks/{network}/transactions/reindex":{"post":{"operationId":"reindexTransaction","summary":"Reindex Transaction","tags":["Networks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Re-index a finalized transaction that is missing from your wallets' history. A transaction that is already indexed is not processed again.\n\n  <Note>\n  Limited to 10 requests per organization per 10 minutes.\n  </Note>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Networks:Transactions:Reindex`: Always required."},"parameters":[{"schema":{"type":"string","description":"Network name formatted in kebab case"},"required":true,"description":"Network name formatted in kebab case","name":"network","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"txHash":{"type":"string","minLength":1,"description":"Hash of the transaction to re-index"}},"required":["txHash"],"additionalProperties":false,"description":"Re-indexes a finalized transaction.","title":"Reindex Transaction"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins":{"post":{"operationId":"createPayin","summary":"Create Payin","tags":["Payins"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"\n    Deliver stablecoin from the organisation's provider balance to a wallet on-chain.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"provider":{"type":"string","enum":["CircleMint"]},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."}},"required":["walletId","amount","provider","currency"],"title":"Circle Mint Create Payin"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"provider":{"type":"string","enum":["Borderless"]},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO-3166 Alpha-2 country the fiat deposit originates from."},"borderlessAccountId":{"type":"string","description":"Borderless account ID; its registered asset address must match the destination wallet address."},"paymentMethod":{"type":"string","enum":["Wire","ACH","Sepa"],"description":"The fiat payment rail the payer uses to fund the deposit."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","description":"The ERC-20 contract address of the asset to deliver."}},"required":["kind","contract"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"mint":{"type":"string","description":"The token mint address of the asset to deliver."}},"required":["kind","mint"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset to deliver on-chain. Must be supported by Borderless on the wallet network."},"quoteId":{"type":"string","description":"Executable quote to redeem (from Create Payin Quote), locking its rate until it expires."}},"required":["walletId","amount","provider","currency","country","borderlessAccountId","paymentMethod","asset"],"title":"Borderless Create Payin"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^payin-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payin id.","example":"payin-59t9u-eng2t-dd9p5nm02uc81sto"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the funds are delivered on (the destination wallet network)."}]},"status":{"type":"string","enum":["Processing","Completed","Failed"],"description":"The current status of the payin."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payin."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["CircleMint"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingTransfer","Completed","Failed"],"description":"The Circle Mint execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"recipientAddressId":{"type":"string","description":"Circle recipient-registry id for the destination address (approved once in Circle's console)."},"circleTransferId":{"type":"string","description":"The id of the Circle transfer delivering the funds on-chain."},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the delivery transfer."},"dateTransferConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the transfer confirmed on-chain.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus"],"description":"Circle Mint provider-specific payin data."}},"required":["id","walletId","amount","currency","network","status","requester","dateCreated","provider","data"],"title":"Circle Mint Payin"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^payin-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payin id.","example":"payin-59t9u-eng2t-dd9p5nm02uc81sto"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the funds are delivered on (the destination wallet network)."}]},"status":{"type":"string","enum":["Processing","Completed","Failed"],"description":"The current status of the payin."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payin."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["Borderless"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingDeposit","Completed","Failed"],"description":"The Borderless execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"borderlessAccountId":{"type":"string","description":"The Borderless account whose registered asset address receives the funds."},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO-3166 Alpha-2 country the fiat deposit originates from."},"paymentMethod":{"type":"string","enum":["Wire","ACH","Sepa"],"description":"The fiat payment rail the payer uses to fund the deposit."},"asset":{"type":"string","description":"The provider's code of the asset being delivered (e.g. USDT_POLYGON)."},"quoteId":{"type":"string","description":"The executable quote the payin was created with, if any."},"borderlessTransactionId":{"type":"string","description":"The id of the Borderless deposit transaction."},"pfiName":{"type":"string","description":"The Participating Financial Institution fulfilling the deposit."},"depositInstruction":{"type":"object","properties":{"paymentMethod":{"type":"string","description":"The fiat payment rail these instructions apply to."},"details":{"type":"object","properties":{"depositMessage":{"type":["string","null"],"description":"Reference the payer must include with the payment."},"bankName":{"type":["string","null"]},"bankAccountNumber":{"type":["string","null"]},"bankRoutingNumber":{"type":["string","null"]},"bankBeneficiaryName":{"type":["string","null"]},"bankBeneficiaryAddress":{"type":["string","null"]},"bankAddress":{"type":["string","null"]},"iban":{"type":["string","null"]},"bic":{"type":["string","null"]},"accountHolderName":{"type":["string","null"]}},"additionalProperties":{"type":["string","null"]},"description":"Rail-dependent bank details to send the fiat to."}},"required":["paymentMethod","details"],"description":"Bank details + reference the payer must wire the fiat to. Absent until Borderless issues them.","title":"Borderless Deposit Instruction"},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the stablecoin delivery."},"dateDeliveryConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain delivery was confirmed.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus","borderlessAccountId","country","paymentMethod","asset"],"description":"Borderless provider-specific payin data."}},"required":["id","walletId","amount","currency","network","status","requester","dateCreated","provider","data"],"title":"Borderless Payin"}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listPayins","summary":"List Payins","tags":["Payins"],"security":[{"authenticationToken":[]}],"description":"List payins with optional filtering and pagination.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Filter payins by wallet ID."},"required":false,"description":"Filter payins by wallet ID.","name":"walletId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["Processing","Completed","Failed"],"description":"The current status of the payin."},"description":"Filter payins by status (comma-separated)."},"required":false,"description":"Filter payins by status (comma-separated).","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["CircleMint","Borderless"],"description":"Payin provider."},"description":"Filter payins by provider (comma-separated)."},"required":false,"description":"Filter payins by provider (comma-separated).","name":"provider","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^payin-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payin id.","example":"payin-59t9u-eng2t-dd9p5nm02uc81sto"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the funds are delivered on (the destination wallet network)."}]},"status":{"type":"string","enum":["Processing","Completed","Failed"],"description":"The current status of the payin."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payin."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["CircleMint"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingTransfer","Completed","Failed"],"description":"The Circle Mint execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"recipientAddressId":{"type":"string","description":"Circle recipient-registry id for the destination address (approved once in Circle's console)."},"circleTransferId":{"type":"string","description":"The id of the Circle transfer delivering the funds on-chain."},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the delivery transfer."},"dateTransferConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the transfer confirmed on-chain.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus"],"description":"Circle Mint provider-specific payin data."}},"required":["id","walletId","amount","currency","network","status","requester","dateCreated","provider","data"],"title":"Circle Mint Payin"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^payin-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payin id.","example":"payin-59t9u-eng2t-dd9p5nm02uc81sto"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the funds are delivered on (the destination wallet network)."}]},"status":{"type":"string","enum":["Processing","Completed","Failed"],"description":"The current status of the payin."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payin."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["Borderless"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingDeposit","Completed","Failed"],"description":"The Borderless execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"borderlessAccountId":{"type":"string","description":"The Borderless account whose registered asset address receives the funds."},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO-3166 Alpha-2 country the fiat deposit originates from."},"paymentMethod":{"type":"string","enum":["Wire","ACH","Sepa"],"description":"The fiat payment rail the payer uses to fund the deposit."},"asset":{"type":"string","description":"The provider's code of the asset being delivered (e.g. USDT_POLYGON)."},"quoteId":{"type":"string","description":"The executable quote the payin was created with, if any."},"borderlessTransactionId":{"type":"string","description":"The id of the Borderless deposit transaction."},"pfiName":{"type":"string","description":"The Participating Financial Institution fulfilling the deposit."},"depositInstruction":{"type":"object","properties":{"paymentMethod":{"type":"string","description":"The fiat payment rail these instructions apply to."},"details":{"type":"object","properties":{"depositMessage":{"type":["string","null"],"description":"Reference the payer must include with the payment."},"bankName":{"type":["string","null"]},"bankAccountNumber":{"type":["string","null"]},"bankRoutingNumber":{"type":["string","null"]},"bankBeneficiaryName":{"type":["string","null"]},"bankBeneficiaryAddress":{"type":["string","null"]},"bankAddress":{"type":["string","null"]},"iban":{"type":["string","null"]},"bic":{"type":["string","null"]},"accountHolderName":{"type":["string","null"]}},"additionalProperties":{"type":["string","null"]},"description":"Rail-dependent bank details to send the fiat to."}},"required":["paymentMethod","details"],"description":"Bank details + reference the payer must wire the fiat to. Absent until Borderless issues them.","title":"Borderless Deposit Instruction"},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the stablecoin delivery."},"dateDeliveryConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain delivery was confirmed.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus","borderlessAccountId","country","paymentMethod","asset"],"description":"Borderless provider-specific payin data."}},"required":["id","walletId","amount","currency","network","status","requester","dateCreated","provider","data"],"title":"Borderless Payin"}]},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins/quote":{"post":{"operationId":"createPayinQuote","x-dfns-deprecated-operation-id":"requestPayinQuote","summary":"Request Payin Quote","tags":["Payins"],"security":[{"authenticationToken":[]}],"description":"Request a quote from a given provider for a payin. Returns the stablecoin amount to be delivered and the fees.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet — determines the network the funds are delivered on.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"provider":{"type":"string","enum":["Borderless"]},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO-3166 Alpha-2 country the fiat deposit originates from."},"borderlessAccountId":{"type":"string","description":"Borderless account ID the deposit would be made to."},"paymentMethod":{"type":"string","enum":["Wire","ACH","Sepa"],"description":"The fiat payment rail the payer uses to fund the deposit."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","description":"The ERC-20 contract address of the asset to deliver."}},"required":["kind","contract"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"mint":{"type":"string","description":"The token mint address of the asset to deliver."}},"required":["kind","mint"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset to deliver on-chain. Must be supported by Borderless on the wallet network."}},"required":["walletId","amount","currency","provider","country","borderlessAccountId","paymentMethod","asset"],"title":"Borderless Create Payin Quote"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["CircleMint","Borderless"],"description":"Payin provider."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the stablecoin would be delivered on."}]},"tid":{"type":"string","description":"The asset (token id) that would be delivered."},"timestamp":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the quote was generated."},"quotes":{"type":"array","items":{"type":"object","properties":{"quoteId":{"type":"string","description":"Executable quote id — pass it to Create Payin to lock this rate until it expires."},"dateExpires":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the executable quote expires.","example":"2023-04-14T20:41:28.715Z"},"offer":{"type":"object","properties":{"amount":{"type":"number","description":"Amount of the stablecoin to be delivered on-chain, net of fees."},"fees":{"type":"number","description":"Total fees, in the fiat currency."}},"required":["amount","fees"],"description":"The offer from the provider."}},"required":["offer"]},"description":"Array of quotes from the provider(s)."}},"required":["provider","currency","network","tid","timestamp","quotes"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins/recipients":{"post":{"operationId":"createPayinRecipient","x-dfns-deprecated-operation-id":"registerPayinRecipient","summary":"Register Payin Recipient","tags":["Payins"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"\n    Register a wallet's address as an payin recipient with the provider. The registration then needs\n    to be approved on the provider's side (for Circle Mint: by an administrator in the Mint Console)\n    before payins to that wallet can be created.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["CircleMint"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet to register as a Circle Mint recipient.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."}},"required":["provider","walletId","currency"],"title":"Circle Mint Register Payin Recipient"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["CircleMint","Borderless"],"description":"Payin provider."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet whose address is (to be) registered as a recipient.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"status":{"type":"string","enum":["NotRegistered","PendingVerification","Active"],"description":"Recipient status."},"recipientAddressId":{"type":"string","description":"The provider's recipient-registry id, once registered."}},"required":["provider","walletId","currency","status"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getPayinRecipient","summary":"Get Payin Recipient","tags":["Payins"],"security":[{"authenticationToken":[]}],"description":"\n    Check whether a wallet's address is registered (and approved) as an payin recipient with the provider.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Read`: Always required."},"parameters":[{"schema":{"type":"string","enum":["CircleMint","Borderless"],"description":"The payin provider to check the recipient with."},"required":true,"description":"The payin provider to check the recipient with.","name":"provider","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The wallet whose recipient status to check."},"required":true,"description":"The wallet whose recipient status to check.","name":"walletId","in":"query"},{"schema":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"required":true,"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC).","name":"currency","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["CircleMint","Borderless"],"description":"Payin provider."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet whose address is (to be) registered as a recipient.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"status":{"type":"string","enum":["NotRegistered","PendingVerification","Active"],"description":"Recipient status."},"recipientAddressId":{"type":"string","description":"The provider's recipient-registry id, once registered."}},"required":["provider","walletId","currency","status"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins/{payinId}":{"get":{"operationId":"getPayin","x-dfns-deprecated-operation-id":"getPayinStatus","summary":"Get Payin Status","tags":["Payins"],"security":[{"authenticationToken":[]}],"description":"\n    Retrieve the current status of an payin by its ID.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Payin id."},"required":true,"description":"Payin id.","name":"payinId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^payin-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payin id.","example":"payin-59t9u-eng2t-dd9p5nm02uc81sto"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the funds are delivered on (the destination wallet network)."}]},"status":{"type":"string","enum":["Processing","Completed","Failed"],"description":"The current status of the payin."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payin."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["CircleMint"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingTransfer","Completed","Failed"],"description":"The Circle Mint execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"recipientAddressId":{"type":"string","description":"Circle recipient-registry id for the destination address (approved once in Circle's console)."},"circleTransferId":{"type":"string","description":"The id of the Circle transfer delivering the funds on-chain."},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the delivery transfer."},"dateTransferConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the transfer confirmed on-chain.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus"],"description":"Circle Mint provider-specific payin data."}},"required":["id","walletId","amount","currency","network","status","requester","dateCreated","provider","data"],"title":"Circle Mint Payin"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^payin-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payin id.","example":"payin-59t9u-eng2t-dd9p5nm02uc81sto"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The destination wallet for the on-ramped funds.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"amount":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"The amount to deliver on-chain, in currency units (e.g. \"100.00\")."},"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the funds are delivered on (the destination wallet network)."}]},"status":{"type":"string","enum":["Processing","Completed","Failed"],"description":"The current status of the payin."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payin."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payin was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["Borderless"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingDeposit","Completed","Failed"],"description":"The Borderless execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"borderlessAccountId":{"type":"string","description":"The Borderless account whose registered asset address receives the funds."},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO-3166 Alpha-2 country the fiat deposit originates from."},"paymentMethod":{"type":"string","enum":["Wire","ACH","Sepa"],"description":"The fiat payment rail the payer uses to fund the deposit."},"asset":{"type":"string","description":"The provider's code of the asset being delivered (e.g. USDT_POLYGON)."},"quoteId":{"type":"string","description":"The executable quote the payin was created with, if any."},"borderlessTransactionId":{"type":"string","description":"The id of the Borderless deposit transaction."},"pfiName":{"type":"string","description":"The Participating Financial Institution fulfilling the deposit."},"depositInstruction":{"type":"object","properties":{"paymentMethod":{"type":"string","description":"The fiat payment rail these instructions apply to."},"details":{"type":"object","properties":{"depositMessage":{"type":["string","null"],"description":"Reference the payer must include with the payment."},"bankName":{"type":["string","null"]},"bankAccountNumber":{"type":["string","null"]},"bankRoutingNumber":{"type":["string","null"]},"bankBeneficiaryName":{"type":["string","null"]},"bankBeneficiaryAddress":{"type":["string","null"]},"bankAddress":{"type":["string","null"]},"iban":{"type":["string","null"]},"bic":{"type":["string","null"]},"accountHolderName":{"type":["string","null"]}},"additionalProperties":{"type":["string","null"]},"description":"Rail-dependent bank details to send the fiat to."}},"required":["paymentMethod","details"],"description":"Bank details + reference the payer must wire the fiat to. Absent until Borderless issues them.","title":"Borderless Deposit Instruction"},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the stablecoin delivery."},"dateDeliveryConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain delivery was confirmed.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus","borderlessAccountId","country","paymentMethod","asset"],"description":"Borderless provider-specific payin data."}},"required":["id","walletId","amount","currency","network","status","requester","dateCreated","provider","data"],"title":"Borderless Payin"}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins/accounts":{"get":{"operationId":"listPayinAccounts","summary":"List Payin Accounts","tags":["Payins"],"security":[{"authenticationToken":[]}],"description":"List the provider accounts, with their registered wallet addresses per asset. An account is created on the provider platform (e.g. the Borderless dashboard) and its registered addresses serve both directions: a payin delivers to — and a payout is funded from — a wallet whose address is registered on the account.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Read`: Always required."},"parameters":[{"schema":{"type":"string","enum":["CircleMint","Borderless"],"description":"The provider to list accounts from. Only Borderless has payin accounts."},"required":true,"description":"The provider to list accounts from. Only Borderless has payin accounts.","name":"provider","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string","description":"The provider's account id."},"name":{"type":"string","description":"The account name, when the provider has one."},"assets":{"type":"array","items":{"type":"object","properties":{"asset":{"type":"string","description":"The provider's asset code (e.g. USDC_ETHEREUM)."},"address":{"type":"string","description":"The registered destination address for the asset."}},"required":["asset","address"]},"description":"The assets registered on the account, with their destination addresses."}},"required":["accountId","assets"]},"description":"The provider accounts available for payins."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins/balances":{"get":{"operationId":"listPayinBalances","summary":"List Payin Balances","tags":["Payins"],"security":[{"authenticationToken":[]}],"description":"\n    The organisation's available balance at the payin provider, one entry per currency —\n    the funds payins can deliver on-chain.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Read`: Always required."},"parameters":[{"schema":{"type":"string","enum":["CircleMint","Borderless"],"description":"The payin provider to fetch balances from."},"required":true,"description":"The payin provider to fetch balances from.","name":"provider","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["CircleMint","Borderless"],"description":"Payin provider."},"currency":{"type":"string","description":"Fiat currency of the balance (e.g. USD, EUR)."},"amount":{"type":"string","description":"Available amount in currency units (e.g. \"408.82\")."}},"required":["provider","currency","amount"]}}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins/options":{"get":{"operationId":"listPayinOptions","summary":"List Payin Options","tags":["Payins"],"security":[{"authenticationToken":[]}],"description":"List the currently available payin options — deliverable assets and fiat currency/payment-method/country combinations — as covered by the active provider institutions.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Read`: Always required."},"parameters":[{"schema":{"type":"string","enum":["CircleMint","Borderless"],"description":"The provider to list options from. Only Borderless has coverage-dependent options."},"required":true,"description":"The provider to list options from. Only Borderless has coverage-dependent options.","name":"provider","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"string"},"description":"The provider's asset codes deliverable by the active PFIs."},"currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","enum":["USD","EUR"],"description":"Fiat currency of the payin (for Circle Mint it determines the delivered stablecoin: USD → USDC, EUR → EURC)."},"paymentMethods":{"type":"array","items":{"type":"object","properties":{"paymentMethod":{"type":"string","enum":["Wire","ACH","Sepa"],"description":"The fiat payment rail the payer uses to fund the deposit."},"countries":{"type":"array","items":{"type":"string"},"description":"ISO-3166 Alpha-2 countries the fiat can be paid from with this payment method."}},"required":["paymentMethod","countries"]},"description":"The payment methods available for this currency, with their eligible countries."}},"required":["currency","paymentMethods"]},"description":"The fiat currencies payins can be funded with, per payment method and country."}},"required":["assets","currencies"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payins/accounts/assets":{"post":{"operationId":"registerPayinAccountAsset","summary":"Register Payin Account Asset","tags":["Payins"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Register a wallet's address for an asset on a provider account, a prerequisite for both payins (the wallet receives the delivered asset) and payouts (the wallet funds the withdrawal). Returns the updated account.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payins:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["Borderless"]},"borderlessAccountId":{"type":"string","description":"The Borderless account to register the asset on."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet whose address becomes the delivery destination for the asset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","description":"The ERC-20 contract address of the asset to deliver."}},"required":["kind","contract"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"mint":{"type":"string","description":"The token mint address of the asset to deliver."}},"required":["kind","mint"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset to deliver on-chain. Must be supported by Borderless on the wallet network."}},"required":["provider","borderlessAccountId","walletId","asset"],"title":"Borderless Register Payin Account Asset"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"The provider's account id."},"name":{"type":"string","description":"The account name, when the provider has one."},"assets":{"type":"array","items":{"type":"object","properties":{"asset":{"type":"string","description":"The provider's asset code (e.g. USDC_ETHEREUM)."},"address":{"type":"string","description":"The registered destination address for the asset."}},"required":["asset","address"]},"description":"The assets registered on the account, with their destination addresses."}},"required":["accountId","assets"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payouts":{"post":{"operationId":"createPayout","summary":"Create Payout","tags":["Payouts"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"\n    Create a new payout to convert crypto assets to fiat currency.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payouts:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID to remit funds from.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"externalId":{"type":"string","description":"Optional idempotency key to ensure only one payout is created."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."}},"required":["kind","amount","contract"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."}},"required":["kind","amount","mint"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset to be paid out."},"fiatCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO-4217 fiat currency code for the payout."},"provider":{"type":"string","enum":["Borderless"]},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO-3166 Alpha-2 country code for the payout destination."},"borderlessAccountId":{"type":"string","description":"Borderless account ID specifying who is paying out funds."},"paymentInstructionsId":{"type":"string","description":"Borderless payment instructions ID specifying fiat settlement instructions."},"paymentPurpose":{"type":"string","enum":["salary payment","personal remittance","rent payment","property purchase","owned account abroad","advertising expenses","advisory fees","business insurance","construction","delivery fees","education","exports","donation","hotel","loan payment","maintenance expenses","medical expense","office expenses","royalty fees","service charge","shares investment","tax payment","transportation fees","travel","utility bills","other"],"description":"Borderless reason/purpose for the payment."}},"required":["walletId","asset","fiatCurrency","provider","country","borderlessAccountId","paymentInstructionsId","paymentPurpose"],"title":"Borderless Create Payout"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID to remit funds from.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"externalId":{"type":"string","description":"Optional idempotency key to ensure only one payout is created."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."}},"required":["kind","amount","contract"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."}},"required":["kind","amount","mint"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset to be paid out."},"fiatCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO-4217 fiat currency code for the payout."},"provider":{"type":"string","enum":["CircleMint"]},"destination":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bank"]},"bankId":{"type":"string","description":"The Circle Mint bank account id to pay out to (the org links banks on Circle's website)."},"rail":{"type":"string","enum":["wire","sepa","sepa_instant"],"description":"The Circle Mint payout rail."}},"required":["type","bankId","rail"],"title":"Circle Mint Bank Destination"},{"type":"object","properties":{"type":{"type":"string","enum":["balance"]}},"required":["type"],"title":"Circle Mint Balance Destination"}],"description":"Where the redeemed fiat goes: 'bank' wires it to a linked bank account; 'balance' holds it in the org's Circle Mint balance."}},"required":["walletId","asset","fiatCurrency","provider","destination"],"title":"Circle Mint Create Payout"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["Borderless"]},"data":{"type":"object","properties":{"borderlessAccountId":{"type":"string","description":"The Borderless account ID associated with the payout."},"paymentInstructionsId":{"type":"string","description":"The Borderless payment instructions ID linked to the destination bank account."},"paymentPurpose":{"type":"string","enum":["salary payment","personal remittance","rent payment","property purchase","owned account abroad","advertising expenses","advisory fees","business insurance","construction","delivery fees","education","exports","donation","hotel","loan payment","maintenance expenses","medical expense","office expenses","royalty fees","service charge","shares investment","tax payment","transportation fees","travel","utility bills","other"],"description":"The purpose of the withdrawal payment."},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was confirmed via Action Confirm.","example":"2023-04-14T20:41:28.715Z"},"dateCanceled":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was canceled via Action Cancel.","example":"2023-04-14T20:41:28.715Z"},"executionStatus":{"type":"string","enum":["Initializing","AwaitingPayoutInstructions","AwaitingPayoutConfirmation","SubmittingPayoutTransfer","PendingPolicyApproval","DepositProcessing","DisbursementPending","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Borderless execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"country":{"type":"string","description":"ISO-3166 Alpha-2 country code for the payout destination."},"borderlessPayoutId":{"type":"string","description":"The ID assigned by Borderless when the payout is created."},"depositAddress":{"type":"string","description":"The on-chain address to remit funds to."},"transferId":{"type":"string","description":"The Dfns transfer ID used to settle the payout."},"transactionHash":{"type":"string","description":"The blockchain transaction hash once the transfer is confirmed."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Borderless verified fiat has settled.","example":"2023-04-14T20:41:28.715Z"}},"required":["borderlessAccountId","paymentInstructionsId","paymentPurpose","executionStatus","country"],"description":"Borderless provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Borderless Payout"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["CircleMint"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingDeposit","DepositConfirmed","AwaitingPayout","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Circle Mint execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"bankId":{"type":"string","description":"The Circle Mint bank account id the fiat is paid out to; absent for a balance destination."},"rail":{"type":"string","enum":["wire","sepa","sepa_instant"],"description":"The payout rail; absent for a balance destination."},"paymentIntentId":{"type":"string","description":"Circle payment intent id (the unique per-operation deposit intent)."},"depositAddress":{"type":"string","description":"The unique per-operation address the wallet remits USDC/EURC to."},"transferId":{"type":"string","description":"The Dfns transfer id used to send funds to the deposit address."},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the deposit transfer."},"circlePayoutId":{"type":"string","description":"The id assigned by Circle when the fiat payout is created."},"trackingRef":{"type":"string","description":"Circle tracking reference for the fiat payout."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Circle confirmed the fiat payout.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus"],"description":"Circle Mint provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Circle Mint Payout"}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listPayouts","summary":"List Payouts","tags":["Payouts"],"security":[{"authenticationToken":[]}],"description":"List payouts with optional filtering and pagination.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payouts:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Filter payouts by wallet ID."},"required":false,"description":"Filter payouts by wallet ID.","name":"walletId","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"Dfns managed payout status."},"description":"Filter payouts by status (comma-separated)."},"required":false,"description":"Filter payouts by status (comma-separated).","name":"status","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["Borderless","CircleMint"],"description":"Payout provider."},"description":"Filter payouts by provider (comma-separated)."},"required":false,"description":"Filter payouts by provider (comma-separated).","name":"provider","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["Borderless"]},"data":{"type":"object","properties":{"borderlessAccountId":{"type":"string","description":"The Borderless account ID associated with the payout."},"paymentInstructionsId":{"type":"string","description":"The Borderless payment instructions ID linked to the destination bank account."},"paymentPurpose":{"type":"string","enum":["salary payment","personal remittance","rent payment","property purchase","owned account abroad","advertising expenses","advisory fees","business insurance","construction","delivery fees","education","exports","donation","hotel","loan payment","maintenance expenses","medical expense","office expenses","royalty fees","service charge","shares investment","tax payment","transportation fees","travel","utility bills","other"],"description":"The purpose of the withdrawal payment."},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was confirmed via Action Confirm.","example":"2023-04-14T20:41:28.715Z"},"dateCanceled":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was canceled via Action Cancel.","example":"2023-04-14T20:41:28.715Z"},"executionStatus":{"type":"string","enum":["Initializing","AwaitingPayoutInstructions","AwaitingPayoutConfirmation","SubmittingPayoutTransfer","PendingPolicyApproval","DepositProcessing","DisbursementPending","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Borderless execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"country":{"type":"string","description":"ISO-3166 Alpha-2 country code for the payout destination."},"borderlessPayoutId":{"type":"string","description":"The ID assigned by Borderless when the payout is created."},"depositAddress":{"type":"string","description":"The on-chain address to remit funds to."},"transferId":{"type":"string","description":"The Dfns transfer ID used to settle the payout."},"transactionHash":{"type":"string","description":"The blockchain transaction hash once the transfer is confirmed."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Borderless verified fiat has settled.","example":"2023-04-14T20:41:28.715Z"}},"required":["borderlessAccountId","paymentInstructionsId","paymentPurpose","executionStatus","country"],"description":"Borderless provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Borderless Payout"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["CircleMint"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingDeposit","DepositConfirmed","AwaitingPayout","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Circle Mint execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"bankId":{"type":"string","description":"The Circle Mint bank account id the fiat is paid out to; absent for a balance destination."},"rail":{"type":"string","enum":["wire","sepa","sepa_instant"],"description":"The payout rail; absent for a balance destination."},"paymentIntentId":{"type":"string","description":"Circle payment intent id (the unique per-operation deposit intent)."},"depositAddress":{"type":"string","description":"The unique per-operation address the wallet remits USDC/EURC to."},"transferId":{"type":"string","description":"The Dfns transfer id used to send funds to the deposit address."},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the deposit transfer."},"circlePayoutId":{"type":"string","description":"The id assigned by Circle when the fiat payout is created."},"trackingRef":{"type":"string","description":"Circle tracking reference for the fiat payout."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Circle confirmed the fiat payout.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus"],"description":"Circle Mint provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Circle Mint Payout"}]},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payouts/quote":{"post":{"operationId":"requestPayoutQuote","summary":"Request Payout Quote","tags":["Payouts"],"security":[{"authenticationToken":[]}],"description":"Request a quote from a given provider for a payout. Returns estimated fiat amount and fees.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payouts:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID to use for determining the network.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."}},"required":["kind","amount","contract"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."}},"required":["kind","amount","mint"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset to be paid out."},"fiatCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO-4217 fiat currency code for the payout quote."},"provider":{"type":"string","enum":["Borderless"]},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO-3166 Alpha-2 country code for the payout destination."}},"required":["walletId","asset","fiatCurrency","provider","country"],"title":"Borderless Create Payout Quote"},{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID to use for determining the network.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."}},"required":["kind","amount","contract"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."}},"required":["kind","amount","mint"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset to be paid out."},"fiatCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO-4217 fiat currency code for the payout quote."},"provider":{"type":"string","enum":["CircleMint"]}},"required":["walletId","asset","fiatCurrency","provider"],"title":"Circle Mint Create Payout Quote"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["Borderless","CircleMint"],"description":"Payout provider."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being quoted, enriched with network and metadata."},"timestamp":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the quote was generated."},"quotes":{"type":"array","items":{"type":"object","properties":{"quoteId":{"type":"string","description":"Quote ID from the provider, if applicable."},"offer":{"type":"object","properties":{"fiatCurrency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO-4217 fiat currency code."},"amount":{"type":"number","description":"Amount of fiat currency to be received net of fees."},"fees":{"type":"number","description":"Total fees associated with the transfer."}},"required":["fiatCurrency","amount","fees"],"description":"The offer from the provider."}},"required":["offer"]},"description":"Array of quotes from the provider(s)."}},"required":["provider","asset","timestamp","quotes"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payouts/{payoutId}":{"get":{"operationId":"getPayout","x-dfns-deprecated-operation-id":"getPayoutStatus","summary":"Get Payout Status","tags":["Payouts"],"security":[{"authenticationToken":[]}],"description":"\n    Retrieve the current status of a payout by its ID.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payouts:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Payout id."},"required":true,"description":"Payout id.","name":"payoutId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["Borderless"]},"data":{"type":"object","properties":{"borderlessAccountId":{"type":"string","description":"The Borderless account ID associated with the payout."},"paymentInstructionsId":{"type":"string","description":"The Borderless payment instructions ID linked to the destination bank account."},"paymentPurpose":{"type":"string","enum":["salary payment","personal remittance","rent payment","property purchase","owned account abroad","advertising expenses","advisory fees","business insurance","construction","delivery fees","education","exports","donation","hotel","loan payment","maintenance expenses","medical expense","office expenses","royalty fees","service charge","shares investment","tax payment","transportation fees","travel","utility bills","other"],"description":"The purpose of the withdrawal payment."},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was confirmed via Action Confirm.","example":"2023-04-14T20:41:28.715Z"},"dateCanceled":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was canceled via Action Cancel.","example":"2023-04-14T20:41:28.715Z"},"executionStatus":{"type":"string","enum":["Initializing","AwaitingPayoutInstructions","AwaitingPayoutConfirmation","SubmittingPayoutTransfer","PendingPolicyApproval","DepositProcessing","DisbursementPending","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Borderless execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"country":{"type":"string","description":"ISO-3166 Alpha-2 country code for the payout destination."},"borderlessPayoutId":{"type":"string","description":"The ID assigned by Borderless when the payout is created."},"depositAddress":{"type":"string","description":"The on-chain address to remit funds to."},"transferId":{"type":"string","description":"The Dfns transfer ID used to settle the payout."},"transactionHash":{"type":"string","description":"The blockchain transaction hash once the transfer is confirmed."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Borderless verified fiat has settled.","example":"2023-04-14T20:41:28.715Z"}},"required":["borderlessAccountId","paymentInstructionsId","paymentPurpose","executionStatus","country"],"description":"Borderless provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Borderless Payout"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["CircleMint"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingDeposit","DepositConfirmed","AwaitingPayout","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Circle Mint execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"bankId":{"type":"string","description":"The Circle Mint bank account id the fiat is paid out to; absent for a balance destination."},"rail":{"type":"string","enum":["wire","sepa","sepa_instant"],"description":"The payout rail; absent for a balance destination."},"paymentIntentId":{"type":"string","description":"Circle payment intent id (the unique per-operation deposit intent)."},"depositAddress":{"type":"string","description":"The unique per-operation address the wallet remits USDC/EURC to."},"transferId":{"type":"string","description":"The Dfns transfer id used to send funds to the deposit address."},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the deposit transfer."},"circlePayoutId":{"type":"string","description":"The id assigned by Circle when the fiat payout is created."},"trackingRef":{"type":"string","description":"Circle tracking reference for the fiat payout."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Circle confirmed the fiat payout.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus"],"description":"Circle Mint provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Circle Mint Payout"}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/payouts/{payoutId}/action":{"post":{"operationId":"createPayoutAction","summary":"Create Payout Action","tags":["Payouts"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"\n    Perform an action on a payout, such as confirming or canceling.\n  ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Payouts:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Payout id."},"required":true,"description":"Payout id.","name":"payoutId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"action":{"type":"string","enum":["Confirm"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID to use for the transfer.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"transfer":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The counterparty address for the payout."}},"required":["kind","amount","contract","to"],"title":"ERC-20 Transfer"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"to":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The counterparty address for the payout."}},"required":["kind","amount","mint","to"],"title":"SPL/SPL-2022 Transfer"}],"description":"The transfer details for the payout settlement."}},"required":["action","walletId","transfer"],"title":"Confirm Payout Action"},{"type":"object","properties":{"action":{"type":"string","enum":["Cancel"]}},"required":["action"],"title":"Cancel Payout Action"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/permissions/{permissionId}/archive":{"put":{"operationId":"archivePermission","summary":"Archive Permission","tags":["Permissions"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"@deprecated in favor of \"deletePermission\".\nDeletes a permission (aka \"Role\").","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"isArchived":{"type":"boolean","description":"@deprecated - use \"deletePermission\" method instead"}},"required":["isArchived"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Permission"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/permissions/{permissionId}":{"delete":{"operationId":"deletePermission","summary":"Delete Permission","tags":["Permissions"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deletes a permission (aka \"Role\").","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getPermission","summary":"Get Permission","tags":["Permissions"],"security":[{"authenticationToken":[]}],"description":"Retrieves a permission (role) by ID, including any pending change request.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Permission"},{"type":"object","properties":{"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the change request.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"description":"Current status of the change request."},"entityId":{"type":"string","description":"ID of the entity being changed."},"userActionId":{"type":"string","description":"User action of the change request."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was created.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was resolved.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["Permission"]},"operationKind":{"type":"string","enum":["Update"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"name":{"type":"string","description":"Human-readable name of the permission (role)."},"status":{"type":"string","enum":["Active"],"description":"Current status of the permission."},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations this permission grants access to. See [Permissions List](https://docs.dfns.co/core-concepts/roles-and-permissions#list-of-permissions) for available operations."},"isImmutable":{"type":"boolean","description":"Whether this permission is system-managed and cannot be modified."},"isArchived":{"type":"boolean","description":"Whether this permission has been archived (soft-deleted)."}},"required":["id","name","status","operations","isImmutable","isArchived"],"additionalProperties":false}},"required":["id","requester","status","entityId","dateCreated","kind","operationKind","body"],"additionalProperties":false}}}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updatePermission","summary":"Update Permission","tags":["Permissions"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Updates the name or operations of an existing permission (role).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"New name for the permission (role)."},"operations":{"type":"array","items":{"anyOf":[{"type":"string","enum":["Auth:Logs:Read","Auth:Users:Create","Auth:Users:Read","Auth:Users:Update","Auth:Users:Activate","Auth:Users:Deactivate","Auth:Users:Delete","Auth:UserGroups:Create","Auth:UserGroups:Read","Auth:UserGroups:Update","Auth:UserGroups:Delete","Auth:UserGroups:Members:Read","Auth:UserGroups:Members:Add","Auth:UserGroups:Members:Remove","Auth:ServiceAccounts:Create","Auth:ServiceAccounts:Read","Auth:ServiceAccounts:Update","Auth:ServiceAccounts:Activate","Auth:ServiceAccounts:Deactivate","Auth:ServiceAccounts:Delete","Auth:Pats:Create","Auth:Delegated:Register","Auth:Delegated:Login","Auth:Delegated:Recover","Agreements:Read","Agreements:Accept","Exchanges:Create","Exchanges:Read","Exchanges:Delete","Exchanges:Deposits:Create","Exchanges:Withdrawals:Create","FeeSponsors:Create","FeeSponsors:Read","FeeSponsors:Update","FeeSponsors:Delete","FeeSponsors:Use","Orgs:Read","Orgs:Update","Orgs:Settings:Read","Orgs:Settings:Update","Permissions:Create","Permissions:Read","Permissions:Update","Permissions:Assign","Permissions:Revoke","Permissions:Delete","Permissions:Assignments:Read","Policies:Create","Policies:Read","Policies:Update","Policies:Delete","Policies:Evaluations:Read","Policies:Evaluations:Vote","Registry:Addresses:Create","Registry:Addresses:Read","Registry:Addresses:Update","Registry:Addresses:Delete","Registry:ContractSchemas:Create","Registry:ContractSchemas:Read","Registry:ContractSchemas:Delete","Registry:VerifiedAssets:Create","Registry:VerifiedAssets:Read","Registry:VerifiedAssets:Delete","Stakes:Create","Stakes:Read","Stakes:Update","Swaps:Create","Swaps:Read","Payouts:Create","Payouts:Read","Payouts:Update","Payins:Create","Payins:Read","Allocations:Create","Allocations:Update","Allocations:Read","Keys:Create","Keys:Read","Keys:Update","Keys:Reuse","Keys:Delegate","Keys:Import","Keys:Export","Keys:Delete","Keys:Vrf:Derive","Keys:ChildKeys:Create","Keys:Signatures:Create","Keys:Signatures:Read","KeyStores:Read","KeyStores:Instructions:Cancel","KeyStores:Instructions:Fleets:Create","KeyStores:Instructions:Fleets:Clone","KeyStores:Instructions:Fleets:Users:Add","KeyStores:Instructions:Fleets:Keys:Harvest","KeyStores:Instructions:Fleets:Provisioners:Add","KeyStores:Instructions:Keys:ProveControl","KeyStores:Instructions:Keys:Sign","Networks:Canton:Validators:Create","Networks:Canton:Validators:Read","Networks:Canton:Validators:Update","Networks:Canton:Validators:Delete","Networks:Transactions:Reindex","Wallets:Create","Wallets:Read","Wallets:Update","Wallets:Tags:Add","Wallets:Tags:Remove","Wallets:Transactions:Create","Wallets:Transactions:Read","Wallets:Transactions:Abort","Wallets:Transfers:Create","Wallets:Transfers:Read","Wallets:Transfers:Abort","Wallets:Offers:Read","Wallets:Offers:Settle","AddressWatches:Create","AddressWatches:Read","AddressWatches:Delete","Vaults:Create","Vaults:Read","Vaults:Update","Vaults:Tags:Add","Vaults:Tags:Remove","Vaults:Quarantines:Release","Vaults:Locks:Create","Vaults:Locks:Release","Vaults:Locks:Transfer","Vaults:Transfers:Create","Webhooks:Create","Webhooks:Read","Webhooks:Update","Webhooks:Delete","Webhooks:Ping","Webhooks:Events:Read","Billing:Read","Billing:Manage","Activities:Read","Analytics:Read"]},{"type":"string","enum":["Auth:Register:Delegated","Auth:Login:Delegated","Auth:Recover:Delegated","Agreements:Acceptance:Create","Agreements:Acceptance:Read","Events:Read","Permissions:Archive","Policies:Archive","Policies:Approvals:Read","Policies:Approvals:Approve","Signers:ListSigners","Payouts:Write","Keys:Derive","Networks:CantonValidators:Create","Networks:CantonValidators:Read","Networks:CantonValidators:Update","Networks:CantonValidators:Delete","Wallets:Tags:Delete","Vaults:Tags:Delete","Vaults:Addresses:Create","Vaults:Locks:Delete","Billing:Write","KeyStores:Fleets:Cancel","KeyStores:Fleets:Create","KeyStores:Fleets:Clone","KeyStores:Fleets:AddMacUser","KeyStores:Fleets:AddProvisioner","KeyStores:Fleets:KeyHarvest","KeyStores:ProofOfControl:Create","KeyStores:OnchainSignatures:Create","Tenant:Billing:Write","Tenant:Settings:Write"]}]},"minItems":1,"description":"New list of API operations this permission grants access to. See [Permissions List](https://docs.dfns.co/core-concepts/roles-and-permissions#list-of-permissions) for available operations."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Permission"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/permissions/{permissionId}/assignments":{"post":{"operationId":"assignPermission","summary":"Assign Permission","tags":["Permissions"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Assigns a permission (role) to an identity (user, PAT, service account or user group), granting it access to the operations defined in the permission. Returns the assignment on success (200), or a pending change request if approval is required (202).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Assign`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","minLength":1,"description":"ID of the identity to assign the permission to. Can be a user ID, a service account ID, a personal access token (PAT) ID, or a user group ID. A permission assigned to a user group applies to every member of the group."}},"required":["identityId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"identityId":{"type":"string","description":"ID of the identity the permission is assigned to. Can be a user ID, a service account ID, a personal access token (PAT) ID, or a user group ID."},"isImmutable":{"type":"boolean","description":"Whether this assignment is system-managed and cannot be modified."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the assignment was created.","example":"2023-04-14T20:41:28.715Z"},"dateUpdated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the assignment was last updated.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","permissionId","identityId","isImmutable","dateCreated","dateUpdated"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listAssignments","x-dfns-deprecated-operation-id":"listPermissionAssignments","summary":"List Permission Assignments","tags":["Permissions"],"security":[{"authenticationToken":[]}],"description":"Lists all permission (role) assignments for a given permission.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Assignments:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"identityId":{"type":"string","description":"ID of the identity the permission is assigned to. Can be a user ID, a service account ID, a personal access token (PAT) ID, or a user group ID."},"isImmutable":{"type":"boolean","description":"Whether this assignment is system-managed and cannot be modified."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the assignment was created.","example":"2023-04-14T20:41:28.715Z"},"dateUpdated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the assignment was last updated.","example":"2023-04-14T20:41:28.715Z"}},"required":["id","permissionId","identityId","isImmutable","dateCreated","dateUpdated"],"additionalProperties":false},{"type":"object","properties":{"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the change request.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"description":"Current status of the change request."},"entityId":{"type":"string","description":"ID of the entity being changed."},"userActionId":{"type":"string","description":"User action of the change request."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was created.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was resolved.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["Assignment"]},"operationKind":{"type":"string","enum":["Create","Delete"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"identityId":{"type":"string","description":"ID of the identity the permission is assigned to. Can be a user ID, a service account ID, a personal access token (PAT) ID, or a user group ID."},"isImmutable":{"type":"boolean","description":"Whether this assignment is system-managed and cannot be modified."}},"required":["id","permissionId","identityId","isImmutable"],"additionalProperties":false}},"required":["id","requester","status","entityId","dateCreated","kind","operationKind","body"],"additionalProperties":false}}}]},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/permissions":{"post":{"operationId":"createPermission","summary":"Create Permission","tags":["Permissions"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new permission (also referred to as \"role\" in the dashboard) that grants access to the specified API operations.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Human-readable name for the permission (role)."},"operations":{"type":"array","items":{"anyOf":[{"type":"string","enum":["Auth:Logs:Read","Auth:Users:Create","Auth:Users:Read","Auth:Users:Update","Auth:Users:Activate","Auth:Users:Deactivate","Auth:Users:Delete","Auth:UserGroups:Create","Auth:UserGroups:Read","Auth:UserGroups:Update","Auth:UserGroups:Delete","Auth:UserGroups:Members:Read","Auth:UserGroups:Members:Add","Auth:UserGroups:Members:Remove","Auth:ServiceAccounts:Create","Auth:ServiceAccounts:Read","Auth:ServiceAccounts:Update","Auth:ServiceAccounts:Activate","Auth:ServiceAccounts:Deactivate","Auth:ServiceAccounts:Delete","Auth:Pats:Create","Auth:Delegated:Register","Auth:Delegated:Login","Auth:Delegated:Recover","Agreements:Read","Agreements:Accept","Exchanges:Create","Exchanges:Read","Exchanges:Delete","Exchanges:Deposits:Create","Exchanges:Withdrawals:Create","FeeSponsors:Create","FeeSponsors:Read","FeeSponsors:Update","FeeSponsors:Delete","FeeSponsors:Use","Orgs:Read","Orgs:Update","Orgs:Settings:Read","Orgs:Settings:Update","Permissions:Create","Permissions:Read","Permissions:Update","Permissions:Assign","Permissions:Revoke","Permissions:Delete","Permissions:Assignments:Read","Policies:Create","Policies:Read","Policies:Update","Policies:Delete","Policies:Evaluations:Read","Policies:Evaluations:Vote","Registry:Addresses:Create","Registry:Addresses:Read","Registry:Addresses:Update","Registry:Addresses:Delete","Registry:ContractSchemas:Create","Registry:ContractSchemas:Read","Registry:ContractSchemas:Delete","Registry:VerifiedAssets:Create","Registry:VerifiedAssets:Read","Registry:VerifiedAssets:Delete","Stakes:Create","Stakes:Read","Stakes:Update","Swaps:Create","Swaps:Read","Payouts:Create","Payouts:Read","Payouts:Update","Payins:Create","Payins:Read","Allocations:Create","Allocations:Update","Allocations:Read","Keys:Create","Keys:Read","Keys:Update","Keys:Reuse","Keys:Delegate","Keys:Import","Keys:Export","Keys:Delete","Keys:Vrf:Derive","Keys:ChildKeys:Create","Keys:Signatures:Create","Keys:Signatures:Read","KeyStores:Read","KeyStores:Instructions:Cancel","KeyStores:Instructions:Fleets:Create","KeyStores:Instructions:Fleets:Clone","KeyStores:Instructions:Fleets:Users:Add","KeyStores:Instructions:Fleets:Keys:Harvest","KeyStores:Instructions:Fleets:Provisioners:Add","KeyStores:Instructions:Keys:ProveControl","KeyStores:Instructions:Keys:Sign","Networks:Canton:Validators:Create","Networks:Canton:Validators:Read","Networks:Canton:Validators:Update","Networks:Canton:Validators:Delete","Networks:Transactions:Reindex","Wallets:Create","Wallets:Read","Wallets:Update","Wallets:Tags:Add","Wallets:Tags:Remove","Wallets:Transactions:Create","Wallets:Transactions:Read","Wallets:Transactions:Abort","Wallets:Transfers:Create","Wallets:Transfers:Read","Wallets:Transfers:Abort","Wallets:Offers:Read","Wallets:Offers:Settle","AddressWatches:Create","AddressWatches:Read","AddressWatches:Delete","Vaults:Create","Vaults:Read","Vaults:Update","Vaults:Tags:Add","Vaults:Tags:Remove","Vaults:Quarantines:Release","Vaults:Locks:Create","Vaults:Locks:Release","Vaults:Locks:Transfer","Vaults:Transfers:Create","Webhooks:Create","Webhooks:Read","Webhooks:Update","Webhooks:Delete","Webhooks:Ping","Webhooks:Events:Read","Billing:Read","Billing:Manage","Activities:Read","Analytics:Read"]},{"type":"string","enum":["Auth:Register:Delegated","Auth:Login:Delegated","Auth:Recover:Delegated","Agreements:Acceptance:Create","Agreements:Acceptance:Read","Events:Read","Permissions:Archive","Policies:Archive","Policies:Approvals:Read","Policies:Approvals:Approve","Signers:ListSigners","Payouts:Write","Keys:Derive","Networks:CantonValidators:Create","Networks:CantonValidators:Read","Networks:CantonValidators:Update","Networks:CantonValidators:Delete","Wallets:Tags:Delete","Vaults:Tags:Delete","Vaults:Addresses:Create","Vaults:Locks:Delete","Billing:Write","KeyStores:Fleets:Cancel","KeyStores:Fleets:Create","KeyStores:Fleets:Clone","KeyStores:Fleets:AddMacUser","KeyStores:Fleets:AddProvisioner","KeyStores:Fleets:KeyHarvest","KeyStores:ProofOfControl:Create","KeyStores:OnchainSignatures:Create","Tenant:Billing:Write","Tenant:Settings:Write"]}]},"minItems":1,"description":"List of API operations this permission grants access to. See [Permissions List](https://docs.dfns.co/core-concepts/roles-and-permissions#list-of-permissions) for available operations."}},"required":["name","operations"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Permission"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listPermissions","summary":"List Permissions","tags":["Permissions"],"security":[{"authenticationToken":[]}],"description":"Lists all permissions (roles) in the organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Permission"},{"type":"object","properties":{"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the change request.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"description":"Current status of the change request."},"entityId":{"type":"string","description":"ID of the entity being changed."},"userActionId":{"type":"string","description":"User action of the change request."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was created.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was resolved.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["Permission"]},"operationKind":{"type":"string","enum":["Update"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"name":{"type":"string","description":"Human-readable name of the permission (role)."},"status":{"type":"string","enum":["Active"],"description":"Current status of the permission."},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations this permission grants access to. See [Permissions List](https://docs.dfns.co/core-concepts/roles-and-permissions#list-of-permissions) for available operations."},"isImmutable":{"type":"boolean","description":"Whether this permission is system-managed and cannot be modified."},"isArchived":{"type":"boolean","description":"Whether this permission has been archived (soft-deleted)."}},"required":["id","name","status","operations","isImmutable","isArchived"],"additionalProperties":false}},"required":["id","requester","status","entityId","dateCreated","kind","operationKind","body"],"additionalProperties":false}}}]},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/permissions/{permissionId}/assignments/{assignmentId}":{"delete":{"operationId":"revokePermission","summary":"Revoke Permission","tags":["Permissions"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Revokes a permission (role) assignment, removing the identity's access to the operations granted by the permission.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Permissions:Revoke`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment."},"required":true,"description":"ID of the permission assignment.","name":"assignmentId","in":"path"},{"schema":{"type":["boolean","null"],"default":false,"description":"If true, bypasses the approval process and revokes immediately."},"required":false,"description":"If true, bypasses the approval process and revokes immediately.","name":"force","in":"query"}],"responses":{"200":{"description":"Success"},"default":{"$ref":"#/components/responses/Error"}}}},"/v2/policies/{policyId}":{"delete":{"operationId":"deletePolicy","summary":"Delete Policy","tags":["Policies"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete an existing policy.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"policyId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getPolicy","summary":"Get Policy","tags":["Policies"],"security":[{"authenticationToken":[]}],"description":"Retrieve information about a specific policy.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"policyId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Policy"},{"type":"object","properties":{"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"kind":{"type":"string","enum":["Policy"]},"operationKind":{"type":"string","enum":["Update"]},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"]},"entityId":{"type":"string"},"dateCreated":{"type":"string","format":"date-time"},"dateResolved":{"type":"string","format":"date-time"},"approvalId":{"type":"string"},"body":{"$ref":"#/components/schemas/Policy"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false}}}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updatePolicy","summary":"Update Policy","tags":["Policies"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Update an existing policy. The policy status is not editable through this endpoint — the update body has no `status` field. To deactivate a policy, use the Archive Policy endpoint instead.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"policyId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"","title":"Registry:Addresses:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Permissions:Assign"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["permissionId"],"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Permissions:Assign`\" activity represents any activity which involves assigning a permission (or revoking it, aka \"deleting a permission assignment\"). These activities are Assignment change requests, created as a result of calling either:\n\n* the endpoint [Assign Permission](https://docs.dfns.co/api-reference/permissions/assign-permission)\n* the endpoint [Revoke Permission](https://docs.dfns.co/api-reference/permissions/revoke-permission)","title":"Permissions:Assign"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Permissions:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["permissionId"],"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Permissions:Modify`\" activity represents any activity which involves updating or archiving a permission. These activities are Permission change requests, created as a result of calling either:\n\n* the endpoint [Update Permission](https://docs.dfns.co/api-reference/permissions/update-permission)\n* the endpoint [Delete Permission](https://docs.dfns.co/api-reference/permissions/archive-permission)","title":"Permissions:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Policies:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["policyId"],"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Policies:Modify`\" activity represents any activity which involves updating or archiving a policy. These activities are Policy change requests, created as a result of calling either:\n\n* the endpoint [Update Policy](https://docs.dfns.co/api-reference/policies/update-policy)\n* the endpoint [Delete Policy](https://docs.dfns.co/api-reference/policies/delete-policy)\n","title":"Policies:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Registry:ContractSchemas:Modify`\" activity represents any activity which modifies a Contract Schema registered for execution in the Dfns Dashboard","title":"Registry:ContractSchemas:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Wallets:Sign"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"]},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1},"description":"Whitelisted recipient addresses"}},"required":["addresses"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the destination address *is NOT whitelisted*.","title":"TransactionRecipientWhitelist"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`"}},"required":["limit","currency"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","title":"TransactionAmountLimit"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"]},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the asset lives on."}]},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased."},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens."}},"required":["network","tid","limit"],"additionalProperties":false},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers."}},"required":["assets"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","title":"TransactionAmountLimitNominal"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200."}},"required":["limit","currency","timeframe"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit.  The aggregate amount evaluated is based only on the wallet that triggered the policy.","title":"TransactionAmountVelocity"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200."}},"required":["limit","timeframe"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","title":"TransactionCountVelocity"},{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n  \nThis template can include variables, included in brackets. The following variables are currently supported:  `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID)."},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean"},"skipUnsupportedNetwork":{"type":"boolean"},"skipUnsupportedAsset":{"type":"boolean"},"skipChainalysisFailure":{"type":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"]}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisTransactionPrescreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      },\n      \"addresses\": {\n        \"categoryIds\": []\n      },\n      \"fallbackBehaviours\": {\n        \"skipUnscreenableTransaction\": false,\n        \"skipUnsupportedNetwork\": false,\n        \"skipUnsupportedAsset\": false,\n        \"skipChainalysisFailure\": false\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`<br><br>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`<br><br>`.direct`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`<br><br>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","title":"ChainalysisTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"]},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold."},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only."},"categories":{"type":"array","items":{"type":"string","minLength":1},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only."}},"required":["ruleIds","categories"]},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"]}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n</Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","title":"EllipticTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"]},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"]}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","title":"GlobalLedgerTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"]},"configuration":{"oneOf":[{"type":"object","properties":{"vendor":{"type":"string","enum":["Notabene"]},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours)."},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days)."}},"required":["vendor"],"additionalProperties":false,"title":"TravelRuleNotabeneConfiguration"},{"type":"object","properties":{"vendor":{"type":"string","enum":["Sumsub"]},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours)."}},"required":["vendor"],"additionalProperties":false,"title":"TravelRuleSumsubConfiguration"}]}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","title":"TravelRuleTransactionPrescreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"},{"type":"object","properties":{"kind":{"type":"string","enum":["NoAction"]}},"required":["kind"],"additionalProperties":false,"description":"\n    This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n  \"action\": {\n    \"kind\": \"NoAction\"\n  }\n}\n```\n    ","title":"NoAction"}]},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Wallets:Sign`\" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:\n\n* a Transfer Request (created using the endpoint [Transfer Asset from Wallet](https://docs.dfns.co/api-reference/wallets/transfer-asset))\n* a Transaction Request (created using the endpoint [Broadcast Transaction from Wallet](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction))\n* a Signature Request (created using the endpoint [Generate Signature from Wallet](https://docs.dfns.co/api-reference/keys/generate-signature))\n","title":"Wallets:Sign"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n  \nThis template can include variables, included in brackets. The following variables are currently supported:  `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID)."},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean"},"skipUnsupportedNetwork":{"type":"boolean"},"skipUnsupportedAsset":{"type":"boolean"},"skipChainalysisFailure":{"type":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"]}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts & exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisTransactionPrescreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      },\n      \"fallbackBehaviours\": {\n        \"skipUnscreenableTransaction\": false,\n        \"skipUnsupportedNetwork\": false,\n        \"skipUnsupportedAsset\": false,\n        \"skipChainalysisFailure\": false\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","title":"ChainalysisTransactionScreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["NoAction"]}},"required":["kind"],"additionalProperties":false,"description":"\n    This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n  \"action\": {\n    \"kind\": \"NoAction\"\n  }\n}\n```\n    ","title":"NoAction"}]},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Wallets:IncomingTransaction`\" activity represents when our indexers detected an incoming transaction into a wallet. This activity kind has to be used with a KYT screening rule kind (\"`ChainalysisTransactionScreening`\" — see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page), and the action kind \"`NoAction`\", meaning that no actual action will be taken as a result of the screening, other than notifying you through a webhook event if the policy is triggered. The reason for that, is that the incoming transaction is already on-chain, so the funds are already in the wallet, we cannot block that transfer on chain.","title":"Wallets:IncomingTransaction"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]}},"required":["alerts","exposures"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts & direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisQuarantineScreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`<br><br>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`<br><br>`.direct`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","title":"ChainalysisQuarantineScreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Vaults:ReleaseQuarantine`\" activity represents a request to release quarantined vault funds into the available balance. With the action kind \"`RequestApproval`\", the funds stay quarantined until the configured quorum of approvers approves the release; the release then executes automatically. With the action kind \"`Block`\", releasing quarantined funds is not allowed.","title":"Vaults:ReleaseQuarantine"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Vaults:CreateLock`\" activity represents a request to lock vault funds. With the action kind \"`RequestApproval`\", the lock is not created until the configured quorum of approvers approves the request; the lock is then created automatically. With the action kind \"`Block`\", locking vault funds is not allowed.","title":"Vaults:CreateLock"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Vaults:ReplaceLock`\" activity represents a request to change the amount of a vault lock. With the action kind \"`RequestApproval`\", the lock is not replaced until the configured quorum of approvers approves the request; the lock is then automatically released and recreated at the new amount. With the action kind \"`Block`\", updating vault lock amounts is not allowed.","title":"Vaults:ReplaceLock"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["UserAction"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"]},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them."}},"required":["userActionKinds"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"","title":"UserAction"}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/v2/policy-approvals/{approvalId}/decisions":{"post":{"operationId":"createApprovalDecision","summary":"Create Approval Decision","tags":["Policies"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Approve or Reject an Approval request.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Evaluations:Vote`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"approvalId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","enum":["Approved","Denied"]},"reason":{"type":"string","maxLength":1000}},"required":["value"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyApproval"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/v2/policies":{"post":{"operationId":"createPolicy","summary":"Create Policy","tags":["Policies"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Setup a new Policy for your organization.\n  \n  Every policy requires a rule to be specified. Upon policy evaluation, the configuration specified in the rule will be used to determine whether the policy should trigger or not for a given activity.\n  \n  By exposing controls on permissions and policies, Dfns enables the specification of an admin quorum to approve sensitive actions which could change system governance.   Note Dfns does not expose a separate \"admin quorum\" concept like some of our competitors - we simply enable this use case as another configuration of the policy engine itself.   This was chosen to promote flexibility as not every customer will have the same requirements around creating and managing admin quorums.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"","title":"Registry:Addresses:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Permissions:Assign"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["permissionId"],"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Permissions:Assign`\" activity represents any activity which involves assigning a permission (or revoking it, aka \"deleting a permission assignment\"). These activities are Assignment change requests, created as a result of calling either:\n\n* the endpoint [Assign Permission](https://docs.dfns.co/api-reference/permissions/assign-permission)\n* the endpoint [Revoke Permission](https://docs.dfns.co/api-reference/permissions/revoke-permission)","title":"Permissions:Assign"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Permissions:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"permissionId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["permissionId"],"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Permissions:Modify`\" activity represents any activity which involves updating or archiving a permission. These activities are Permission change requests, created as a result of calling either:\n\n* the endpoint [Update Permission](https://docs.dfns.co/api-reference/permissions/update-permission)\n* the endpoint [Delete Permission](https://docs.dfns.co/api-reference/permissions/archive-permission)","title":"Permissions:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Policies:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},"filters":{"type":"object","properties":{"policyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"required":["policyId"],"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Policies:Modify`\" activity represents any activity which involves updating or archiving a policy. These activities are Policy change requests, created as a result of calling either:\n\n* the endpoint [Update Policy](https://docs.dfns.co/api-reference/policies/update-policy)\n* the endpoint [Delete Policy](https://docs.dfns.co/api-reference/policies/delete-policy)\n","title":"Policies:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Registry:ContractSchemas:Modify"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Registry:ContractSchemas:Modify`\" activity represents any activity which modifies a Contract Schema registered for execution in the Dfns Dashboard","title":"Registry:ContractSchemas:Modify"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Wallets:Sign"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionRecipientWhitelist"]},"configuration":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","minLength":1},"description":"Whitelisted recipient addresses"}},"required":["addresses"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the destination address *is NOT whitelisted*.","title":"TransactionRecipientWhitelist"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountLimit"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`"},"currency":{"type":"string","enum":["USD"],"description":"Fiat currency, currently only `USD`"}},"required":["limit","currency"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the wallet activity detected is transferring some value whose amount is equal to or greater than a given limit. The limit is inclusive: a transfer whose value exactly equals the limit also triggers.\n\nThe limit is expressed in a fiat `currency` and evaluated against the market value of the transfer. To set a threshold in the asset's own units instead, use `TransactionAmountLimitNominal`.\n\nNote: If the amount of the wallet activity cannot be evaluated for any reason (eg. market prices are not available, or eg. the amount cannot be inferred from a wallet signature request, etc.), by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","title":"TransactionAmountLimit"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountLimitNominal"]},"configuration":{"type":"object","properties":{"assets":{"type":"array","items":{"type":"object","properties":{"network":{"allOf":[{"$ref":"#/components/schemas/Network"},{"description":"The network the asset lives on."}]},"tid":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9_]+:[^\\s](?:[ ]?[^\\s])*$","description":"The Dfns token identifier of the asset, for example `native:eth` or `erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`. Must be canonical: token contract addresses on hex based networks are lower cased."},"limit":{"type":"string","pattern":"^\\d+$","description":"Amount limit in the minimum denomination of the asset, as an integer string, matching how a transfer expresses its amount. For an 18 decimal token `\"5000000000000000000\"` is 5 whole tokens."}},"required":["network","tid","limit"],"additionalProperties":false},"minItems":1,"maxItems":100,"description":"The assets this rule applies to, each with its own limit. A transfer of an asset that is not listed does not trigger the rule. The limit applies to each matching transfer individually; nothing is accumulated across transfers."}},"required":["assets"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the wallet activity detected is transferring more of a listed asset than that asset's limit.\n\nEach limit is expressed in the minimum denomination of its own asset and compared against the transferred amount directly, so the verdict needs no market data and does not move with a price. To set a threshold on the fiat value of a transfer instead, use `TransactionAmountLimit`.\n\nLimits are asset exact: an asset is identified by its network and its Dfns token identifier, so a wrapped or staked derivative is a different asset from the thing it tracks, and a transfer of an asset the rule does not list will not trigger it.\n\nNote: If the transferred amount or the asset cannot be determined for any reason, by default the rule will trigger the policy (this is called \"failing closed\" and is generally considered a security best practice).","title":"TransactionAmountLimitNominal"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionAmountVelocity"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Amount limit in `currency`"},"currency":{"type":"string","enum":["USD"],"description":"Currency for the amount limit above"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200."}},"required":["limit","currency","timeframe"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the cumulative amount transferred from a given wallet within a given timeframe is greater than a specified limit.  The aggregate amount evaluated is based only on the wallet that triggered the policy.","title":"TransactionAmountVelocity"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransactionCountVelocity"]},"configuration":{"type":"object","properties":{"limit":{"type":"number","description":"Count limit"},"timeframe":{"type":"integer","minimum":1,"maximum":43200,"description":"Time period in minutes. Minimum 1, Maximum 43,200."}},"required":["limit","timeframe"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule will trigger if the number of wallet activities for a given wallet within a given timeframe, is greater than a specified limit. The aggregate number of transactions evaluated is based only on the wallet that triggered the policy.","title":"TransactionCountVelocity"},{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisTransactionPrescreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]},"addresses":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n  \nThis template can include variables, included in brackets. The following variables are currently supported:  `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID)."},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean"},"skipUnsupportedNetwork":{"type":"boolean"},"skipUnsupportedAsset":{"type":"boolean"},"skipChainalysisFailure":{"type":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"]}},"required":["alerts","exposures","addresses","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nIt's a rule based on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) KYT integration (Know-Your-Transaction). Upon transfer attempt, we will first register the transfer with Chainalysis (as a [\"withdrawal attempt\"](https://docs.chainalysis.com/api/kyt/#registration-register-a-withdrawal-attempt)), and fetch the screening results (alerts, exposures, addresses detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisTransactionPrescreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      },\n      \"addresses\": {\n        \"categoryIds\": []\n      },\n      \"fallbackBehaviours\": {\n        \"skipUnscreenableTransaction\": false,\n        \"skipUnsupportedNetwork\": false,\n        \"skipUnsupportedAsset\": false,\n        \"skipChainalysisFailure\": false\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`<br><br>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any [alert is returned in Chainalysis results](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-alerts). Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`<br><br>`.direct`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a [direct exposure](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-direct-exposure) of any category detected by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `addresses`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, an [address](https://docs.chainalysis.com/api/kyt/#withdrawal-attempts-get-address-identifications) of any category identified by chainalysis will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `fallbackBehaviours`<br><br>`.skipUnscreenableTransaction`* | boolean | Behaviour if the wallet activity is not screenable (eg. if it's a signature request of a hash). If true, a transaction which is \"unscreenable\" will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedNetwork`* | boolean | Behaviour if the wallet activity is on a network not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported network will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipUnsupportedAsset`* | boolean | Behaviour if the wallet activity is with a asset not supported by chainalysis, or not yet supported in the dfns-chainalysis integration. If true, an unsupported asset will just be skipped, and policy will not trigger |\n| `fallbackBehaviours.skipChainalysisFailure`* | boolean | Behaviour if any issue with Chainalysis calls (timeout, results took too long, rate limiting errors, any error). If true, will skip if any error happens |\n\n","title":"ChainalysisTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["EllipticTransactionPrescreening"]},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"number","minimum":0,"maximum":10,"description":"Risk score threshold (0-10, decimals allowed). The policy triggers if the Elliptic risk score is at or above the threshold."},"triggeredRules":{"type":"object","properties":{"ruleIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"IDs of risk rules from your Elliptic risk model. If any of these rules matched the analysis, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only."},"categories":{"type":"array","items":{"type":"string","minLength":1},"description":"Elliptic category names (eg. \"Dark Market\"), matched case-insensitively. If a matched risk rule involves any of these categories, the policy triggers regardless of the risk score. Leave empty to trigger on the risk score threshold only."}},"required":["ruleIds","categories"]},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip requests on a network not supported yet in our Elliptic integration"},"skipEllipticFailure":{"type":"boolean","description":"skip any failure of the Elliptic analysis (timeout, rate limiting, any error)"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipEllipticFailure"]}},"required":["riskScoreThreshold","triggeredRules","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Elliptic integration is activated from the Dfns dashboard settings.\n</Info>\n\nThis rule uses Elliptic KYT for pre-screening outgoing transfers. Upon transfer attempt, we run a synchronous Elliptic wallet analysis of the destination address, and check the returned risk score against the configured threshold, plus any configured risk rules / categories. If at or above the threshold, or if a configured rule / category matched, the policy is triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","title":"EllipticTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["GlobalLedgerTransactionPrescreening"]},"configuration":{"type":"object","properties":{"riskScoreThreshold":{"type":"integer","minimum":0,"maximum":100,"description":"Risk score threshold (0-100). Policy triggers if address/transaction risk score >= threshold"},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean","description":"skip all wallet requests that cannot be screened (eg. raw signatures)"},"skipUnsupportedNetwork":{"type":"boolean","description":"skip transfer requests to a network not supported yet in our GlobalLedger integration"},"skipUnsupportedAsset":{"type":"boolean","description":"skip transfer requests of an asset not supported by our GlobalLedger integration"},"skipGlobalLedgerFailure":{"type":"boolean","description":"skips any errors from GlobalLedger API request"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipGlobalLedgerFailure"]}},"required":["riskScoreThreshold","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule uses GlobalLedger KYT for pre-screening outgoing transfers by checking the destination address risk score.\n\nUpon transfer attempt, we will query GlobalLedger's address risk API, and check if the risk score (0-100) is at or above the configured threshold, or if any alerts show up. If so, the policy will be triggered.\n\nIt's called \"Pre\"-screening, because the scanned transaction is not on chain yet, it's still a transaction attempt.","title":"GlobalLedgerTransactionPrescreening"},{"type":"object","properties":{"kind":{"type":"string","enum":["TravelRuleTransactionPrescreening"]},"configuration":{"oneOf":[{"type":"object","properties":{"vendor":{"type":"string","enum":["Notabene"]},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours)."},"autoClearAfterDeliveredTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"description":"Seconds after delivery before a still-pending evaluation clears. Maximum 2592000 (30 days)."}},"required":["vendor"],"additionalProperties":false,"title":"TravelRuleNotabeneConfiguration"},{"type":"object","properties":{"vendor":{"type":"string","enum":["Sumsub"]},"autoTriggerTimeoutSeconds":{"type":"integer","minimum":0,"maximum":2592000,"default":86400,"description":"Seconds to wait for the vendor's verdict before the policy action applies. Maximum 2592000 (30 days). Defaults to 86400 (24 hours)."}},"required":["vendor"],"additionalProperties":false,"title":"TravelRuleSumsubConfiguration"}]}},"required":["kind","configuration"],"additionalProperties":false,"description":"This rule applies a Travel Rule check to outgoing transfers through the vendor selected in `configuration.vendor`: [Notabene](https://docs.dfns.co/integrations/travel-rule/notabene) or Sumsub. It can only be used once that vendor's integration is activated from the Dfns dashboard settings.\n\nIt ***ONLY*** applies to Dfns [Transfer Asset](https://docs.dfns.co/api-reference/wallets/transfer-asset) Api Calls. It is NOT supported for Transfers initiated via the dashboard. Upon transfer attempt with a [TravelRule](https://docs.dfns.co/api-reference/wallets/transfer-asset#body-travel-rule) payload, we call the vendor's APIs on your behalf to validate and submit the travel rule message, then wait for its outcome. With Notabene, Dfns waits for a response from the counterparty (for custodial transfers) or from Notabene (for non-custodial transfers). With Sumsub, Dfns submits a Travel Rule message and waits for Sumsub to report its outcome. In both cases the wait is bounded by `configuration.autoTriggerTimeoutSeconds`, after which the policy's configured action is applied.\n\nThe transfer's `travelRule` payload must be of the kind matching `configuration.vendor` — a mismatch triggers the policy and applies its configured action. A given wallet must be covered by at most one travel-rule policy (of any vendor): if several travel-rule policies apply to the same transfer carrying a `travelRule` payload, it is treated as a misconfiguration and blocked without contacting any vendor. Signatures and transfers without a payload are not affected, since the rule does not apply to them.\n\nIt's called \"Pre\"-screening, because the transaction is not on chain yet, it's still a transaction attempt (before the transaction actually make it on chain).","title":"TravelRuleTransactionPrescreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"},{"type":"object","properties":{"kind":{"type":"string","enum":["NoAction"]}},"required":["kind"],"additionalProperties":false,"description":"\n    This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n  \"action\": {\n    \"kind\": \"NoAction\"\n  }\n}\n```\n    ","title":"NoAction"}]},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Wallets:Sign`\" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:\n\n* a Transfer Request (created using the endpoint [Transfer Asset from Wallet](https://docs.dfns.co/api-reference/wallets/transfer-asset))\n* a Transaction Request (created using the endpoint [Broadcast Transaction from Wallet](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction))\n* a Signature Request (created using the endpoint [Generate Signature from Wallet](https://docs.dfns.co/api-reference/keys/generate-signature))\n","title":"Wallets:Sign"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Wallets:IncomingTransaction"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisTransactionScreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]},"userIdTemplate":{"type":"string","minLength":1,"maxLength":50,"pattern":"^([a-zA-Z0-9_:-]|{wallet\\.id}|{wallet\\.externalId})+$","default":"dfns","description":"**Deprecated** — set `userIdTemplate` on the Chainalysis integration setting instead; when set there, the integration-level template takes precedence over this one.\n\nValue sent to Chainalysis as the \"user ID\". Used by Chainalysis for grouping transaction screenings.\n  \nThis template can include variables, included in brackets. The following variables are currently supported:  `{wallet.id}` and `{wallet.externalId}`.\nAs an example, if you set `userIdTemplate: \"dfns:{wallet.id}_{wallet.externalId}\"`, when your wallet receives a transaction that gets screened by a Chainalysis policy, the \"user ID\" sent to Chainalysis will be `dfns:wa-xxx_yyy` (`wa-xxx` being the wallet ID, and `yyy` being the wallet external ID)."},"fallbackBehaviours":{"type":"object","properties":{"skipUnscreenableTransaction":{"type":"boolean"},"skipUnsupportedNetwork":{"type":"boolean"},"skipUnsupportedAsset":{"type":"boolean"},"skipChainalysisFailure":{"type":"boolean"}},"required":["skipUnscreenableTransaction","skipUnsupportedNetwork","skipUnsupportedAsset","skipChainalysisFailure"]}},"required":["alerts","exposures","fallbackBehaviours"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nThis rule can be used on a policy of `activityKind` = `Wallets:IncomingTransaction`, and with the action kind `NoAction`. It's a rule based on Chainalysis KYT integration (Know-Your-Transaction). Upon an incoming transaction detectedby our indexers, we will [register the transfer with Chainalysis](https://docs.chainalysis.com/api/kyt/#registration-register-a-transfer), and fetch the results of the analysis (alerts & exposures detected). Based on the results, and the configuration of this rule, the policy will be triggered.\n\nThe shape of the rule is almost like the `ChainalysisTransactionPrescreening` rule, expect the the `address` property is not supported.\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisTransactionPrescreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      },\n      \"fallbackBehaviours\": {\n        \"skipUnscreenableTransaction\": false,\n        \"skipUnsupportedNetwork\": false,\n        \"skipUnsupportedAsset\": false,\n        \"skipChainalysisFailure\": false\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\nPlease refer to the configuration for the `ChainalysisTransactionPrescreening` rule.\n","title":"ChainalysisTransactionScreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["NoAction"]}},"required":["kind"],"additionalProperties":false,"description":"\n    This action kind means that nothing will happen after policy rule evaluation. It's meant to be used with policy rules \"`ChainalysisTransactionPrescreening`\" or \"`ChainalysisTransactionScreening`\". This action is for when you just want the KYT analysis rule to be run, and then if triggered, those result returned in a `policy.triggered` [Webhook Event](https://docs.dfns.co/api-reference/webhook-events).\n\n```json\n{\n  \"action\": {\n    \"kind\": \"NoAction\"\n  }\n}\n```\n    ","title":"NoAction"}]},"filters":{"type":"object","properties":{"walletId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"walletTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false},"keyId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key id.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"keyStoreId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store id.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Wallets:IncomingTransaction`\" activity represents when our indexers detected an incoming transaction into a wallet. This activity kind has to be used with a KYT screening rule kind (\"`ChainalysisTransactionScreening`\" — see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page), and the action kind \"`NoAction`\", meaning that no actual action will be taken as a result of the screening, other than notifying you through a webhook event if the policy is triggered. The reason for that, is that the incoming transaction is already on-chain, so the funds are already in the wallet, we cannot block that transfer on chain.","title":"Wallets:IncomingTransaction"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:ReleaseQuarantine"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"},{"type":"object","properties":{"kind":{"type":"string","enum":["ChainalysisQuarantineScreening"]},"configuration":{"type":"object","properties":{"alerts":{"type":"object","properties":{"alertLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH","SEVERE"]},"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["alertLevel","categoryIds"]},"exposures":{"type":"object","properties":{"direct":{"type":"object","properties":{"categoryIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0}}},"required":["categoryIds"]}},"required":["direct"]}},"required":["alerts","exposures"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"description":"\n<Info>\nThis rule can only be used once the Chainalysis integration is activated from the Dfns dashboard settings. (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page).\n</Info>\n\nThis rule can be used on a policy of `activityKind` = `Vaults:ReleaseQuarantine`. When a quarantined vault deposit was screened by Chainalysis KYT, the screening result (alerts & direct exposure) is stored with the quarantine. When a release of the quarantined funds is requested, this rule evaluates that **stored** result — no new Chainalysis call is made. Based on the stored result and the configuration of this rule, the policy will be triggered.\n\nIf the quarantine has **no stored KYT result** (the result was not received yet, the network/asset is not supported by the Chainalysis integration, or screening failed), the rule **always triggers** (fail closed): the release then follows the policy action (approval or block).\n\n```json\n{\n  \"rule\": {\n    \"kind\": \"ChainalysisQuarantineScreening\",\n    \"configuration\": {\n      \"alerts\": {\n        \"alertLevel\": \"LOW\",\n        \"categoryIds\": []\n      },\n      \"exposures\": {\n        \"direct\": {\n          \"categoryIds\": []\n        }\n      }\n    }\n  }\n}\n```\n\n**Configuration**\n\n| Property | Type | Description |\n| --- | --- | --- |\n| `alerts`<br><br>`.alertLevel`* | `string` | Minimum alert level above which the rule should trigger, if any alert was returned in the stored Chainalysis results. Can be `LOW`, `MEDIUM`, `HIGH`, or `SEVERE` |\n| `alerts`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, alerts of any category will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n| `exposures`<br><br>`.direct`<br><br>`.categoryIds`* | list of integers | List of Chainalysis category IDs (see [here](https://docs.chainalysis.com/api/kyt/#categories)). If you leave this list empty, a direct exposure of any category in the stored results will trigger the rule. Otherwise, if you only want the rule to trigger on specific categories, you can specify some in the list. |\n","title":"ChainalysisQuarantineScreening"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Vaults:ReleaseQuarantine`\" activity represents a request to release quarantined vault funds into the available balance. With the action kind \"`RequestApproval`\", the funds stay quarantined until the configured quorum of approvers approves the release; the release then executes automatically. With the action kind \"`Block`\", releasing quarantined funds is not allowed.","title":"Vaults:ReleaseQuarantine"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:CreateLock"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Vaults:CreateLock`\" activity represents a request to lock vault funds. With the action kind \"`RequestApproval`\", the lock is not created until the configured quorum of approvers approves the request; the lock is then created automatically. With the action kind \"`Block`\", locking vault funds is not allowed.","title":"Vaults:CreateLock"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["Vaults:ReplaceLock"]},"rule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["AlwaysTrigger"]},"configuration":{"type":"object","properties":{},"additionalProperties":false}},"required":["kind"],"additionalProperties":false,"description":"This rule will always be triggered, meaning that if this rule is defined on a policy, the policy will always trigger the policy action, regardless of the activity details.","title":"AlwaysTrigger"}]},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{"vaultId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false},"vaultTags":{"type":"object","properties":{"hasAny":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100},"hasAll":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"A \"`Vaults:ReplaceLock`\" activity represents a request to change the amount of a vault lock. With the action kind \"`RequestApproval`\", the lock is not replaced until the configured quorum of approvers approves the request; the lock is then automatically released and recreated at the new amount. With the action kind \"`Block`\", updating vault lock amounts is not allowed.","title":"Vaults:ReplaceLock"},{"type":"object","properties":{"name":{"type":"string"},"activityKind":{"type":"string","enum":["UserAction"]},"rule":{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"]},"configuration":{"type":"object","properties":{"userActionKinds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"The user actions this rule applies to. The rule triggers on any of them."}},"required":["userActionKinds"],"additionalProperties":false}},"required":["kind","configuration"],"additionalProperties":false,"title":"UserAction"},"action":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["RequestApproval"]},"approvalGroups":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quorum":{"type":"integer","minimum":1},"approvers":{"type":"object","properties":{"userId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"Users and service accounts who may approve."},"userGroupId":{"type":"object","properties":{"in":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id.","example":"ug-139tf-f58l8-lsbt6dp47lfsdvgh"},"minItems":1,"maxItems":100}},"required":["in"],"additionalProperties":false,"description":"User groups whose members may approve."}},"additionalProperties":false},"initiatorCanApprove":{"type":"boolean","description":"Whether the initiator of the activity can participate in the approval."},"serviceAccountsCanApprove":{"type":"boolean","description":"Whether service accounts can participate in the approval for this group."}},"required":["quorum","approvers"],"additionalProperties":false},"minItems":1},"autoRejectTimeout":{"type":["integer","null"],"minimum":1}},"required":["kind","approvalGroups"],"additionalProperties":false,"description":"\nThis action means that activity will first require an Approval process to be completed before it can  be executed (or be aborted if someone rejects it during the approval process).\n\nOne or several groups of approvers need to be specified. These groups define who is allowed to approve / reject an activity.\n\nThe activity will only be executed if all approver groups reach their \"quorum\" of approvals. Otherwise, if any one user within any approver group rejects, then the activity is aborted and the call is not executed.\n\nThe example below shows a `RequestApproval` action, configured with one approval group requiring 2 approvals amongst three specific users.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"RequestApproval\",\n    \"autoRejectTimeout\": 60, // minutes\n    \"approvalGroups\": [\n      {\n        \"name\": \"Admins\",\n        \"quorum\": 2, // only 2 approvers required in that group \n        \"approvers\": {\n          \"userId\": {\n            \"in\": [\"us-...1\", \"us-...2\", \"us-...3\"],\n          }\n        }\n      }\n    ],\n\n  }\n}\n```\n\n**Don't lock yourself up**\n\nBy default, users cannot approve an activity they initiated themselves, even if they are in an approval group. To allow this, you must set `initiatorCanApprove: true`.\n\n*Example 1:* For any wallet transfer, a policy is setup to require approval from **1 specific admin user** (eg. the CEO). `initiatorCanApprove` was not set to `true`. If the CEO himself initiates a transfer, no-one can approve his transfer and it's stuck.\n\n*Example 2:* Company has only 3 users. A policy is setup to require approval from **any 3 users** (`quorum: 3`) for any modification of a policy. `initiatorCanApprove` was not set to `true`. In this case, they are locked, and the policy cannot be modified: whoever requests a modification cannot approve, and the policy is therefore always missing one approver. To unlock, they would need to invite a new user and give him the rights to approve as well.\n    ","title":"RequestApproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Block"]}},"required":["kind"],"additionalProperties":false,"description":"This action means that the activity will be blocked if the policy is triggered.\n\n```json\n{\n  \"action\": {\n    \"kind\": \"Block\"\n  }\n}\n```\n","title":"Block"}]},"filters":{"type":"object","properties":{}}},"required":["name","activityKind","rule","action"],"additionalProperties":false,"description":"","title":"UserAction"}]},"examples":{"Chainalysis Transaction Prescreening":{"value":{"name":"chainalysis prescreening policy","activityKind":"Wallets:Sign","rule":{"kind":"ChainalysisTransactionPrescreening","configuration":{"alerts":{"alertLevel":"LOW","categoryIds":[]},"exposures":{"direct":{"categoryIds":[]}},"addresses":{"alertLevel":"LOW","categoryIds":[]},"fallbackBehaviours":{"skipUnscreenableTransaction":false,"skipUnsupportedNetwork":false,"skipUnsupportedAsset":false,"skipChainalysisFailure":false}}},"action":{"kind":"Block"},"filters":{"walletId":{"in":["wa-4sql3-a6ct4-8j2q8ih86d853rgg","wa-j9btt-5s9o8-i3r8373ddg0usn3"]}}}},"Transaction Amount Limit in fiat":{"value":{"name":"transfers worth 25,000 USD or more need approval","activityKind":"Wallets:Sign","rule":{"kind":"TransactionAmountLimit","configuration":{"limit":25000,"currency":"USD"}},"action":{"kind":"RequestApproval","autoRejectTimeout":60,"approvalGroups":[{"name":"treasury","quorum":2,"approvers":{"userId":{"in":["us-2j5db-4t9ku-9nv7c8pmqk1f3rgb","us-7q1mv-h3d0s-4l8ptn6cyj2wk5fa","us-b4xna-r7wcp-8k3fgm1dtq9sv6ez"]}}}]}}},"Transaction Amount Limit in the units of each asset":{"value":{"name":"hard cap of 5 ETH and 100,000 USDC per transfer","activityKind":"Wallets:Sign","filters":{"walletId":{"in":["wa-4sql3-a6ct4-8j2q8ih86d853rgg"]}},"rule":{"kind":"TransactionAmountLimitNominal","configuration":{"assets":[{"network":"Ethereum","tid":"native:eth","limit":"5000000000000000000"},{"network":"Ethereum","tid":"erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","limit":"100000000000"}]}},"action":{"kind":"Block"}}},"Approval on every transfer from a key store":{"value":{"name":"cold storage transfers need 2 approvals","activityKind":"Wallets:Sign","rule":{"kind":"AlwaysTrigger"},"action":{"kind":"RequestApproval","approvalGroups":[{"name":"treasury","quorum":2,"approvers":{"userId":{"in":["us-2j5db-4t9ku-9nv7c8pmqk1f3rgb","us-7q1mv-h3d0s-4l8ptn6cyj2wk5fa"]}}}]},"filters":{"keyStoreId":{"in":["store-2ab1c-4d5e6-8j2q8ih86d853rgg"]}}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listPolicies","summary":"List Policies","tags":["Policies"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of policies on your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Read`: Always required."},"parameters":[{"schema":{"type":"string","pattern":"^\\d+$"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["Active","Archived"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Policy"},{"type":"object","properties":{"pendingChangeRequest":{"type":"object","properties":{"id":{"type":"string"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"kind":{"type":"string","enum":["Policy"]},"operationKind":{"type":"string","enum":["Update"]},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"]},"entityId":{"type":"string"},"dateCreated":{"type":"string","format":"date-time"},"dateResolved":{"type":"string","format":"date-time"},"approvalId":{"type":"string"},"body":{"$ref":"#/components/schemas/Policy"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false}}}]}},"nextPageToken":{"type":"string"}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/v2/policies/travel-rule/sumsub/public-key":{"get":{"operationId":"getSumsubTravelRulePublicKey","summary":"Get Sumsub Travel Rule public key","tags":["Policies"],"security":[{"authenticationToken":[]}],"description":"Retrieve the RSA public key (JWK, RFC 7517) of the org's Sumsub Travel Rule integration. Use it to JWE-encrypt (RSA-OAEP-256 / A256GCM, compact serialization) the JWS-signed IVMS101 payload client-side before submitting a transfer screened by a Sumsub Travel Rule policy. Requires Travel Rule to be enabled for the tenant and an activated Sumsub integration on the org.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transfers:Create`: Always required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"kty":{"type":"string","enum":["RSA"]},"kid":{"type":"string","minLength":1,"maxLength":256},"n":{"type":"string","minLength":342,"maxLength":2048,"pattern":"^(?!A[A-P][A-Za-z0-9_-])(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$"},"e":{"type":"string","minLength":1,"maxLength":16,"pattern":"^(?!A[A-P][A-Za-z0-9_-])(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$"},"use":{"type":"string","maxLength":16}},"required":["kty","kid","n","e"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/v2/policy-approvals/{approvalId}":{"get":{"operationId":"getApproval","summary":"Get Approval","tags":["Policies"],"security":[{"authenticationToken":[]}],"description":"Retrieve information about a specific approval request.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Evaluations:Read`: Always required."},"parameters":[{"schema":{"type":"string"},"required":true,"name":"approvalId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyApproval"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/v2/policy-approvals":{"get":{"operationId":"listApprovals","summary":"List Approvals","tags":["Policies"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of pending approval requests.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Policies:Evaluations:Read`: Always required."},"parameters":[{"schema":{"type":"string","pattern":"^\\d+$"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["Pending","Approved","Denied","Expired"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string"},"required":false,"name":"initiatorId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"approverId","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PolicyApproval"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/fleet-operations/cancel":{"post":{"operationId":"cancelFleetOperation","summary":"Cancel Fleet Operation","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Cancel`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string","minLength":1},"reason":{"type":"string","minLength":1,"maxLength":2000}},"required":["groupId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string"},"storeId":{"type":"string"},"orgId":{"type":"string"},"status":{"type":"string","enum":["Initialized","InReview","Rejected","Approved","Canceled"]},"createdBy":{"type":"string"},"submittedBy":{"type":["string","null"]},"dateSubmitted":{"type":["string","null"]},"reviewedBy":{"type":["string","null"]},"dateReviewed":{"type":["string","null"]},"canceledBy":{"type":["string","null"]},"dateCanceled":{"type":["string","null"]},"reason":{"type":["string","null"]},"dateCreated":{"type":"string"},"operations":{"type":"array","items":{"type":"object","properties":{"operationId":{"type":"string"},"kind":{"type":"string","enum":["Genesis","Clone","AddMacUser","KeyHarvest","AddProvisioner"]},"status":{"type":"string","enum":["Initialized","InReview","Rejected","Approved","Canceled"]},"dateCreated":{"type":"string"}},"required":["operationId","kind","status","dateCreated"]}}},"required":["groupId","storeId","orgId","status","createdBy","submittedBy","dateSubmitted","reviewedBy","dateReviewed","canceledBy","dateCanceled","reason","dateCreated","operations"]}}}},"default":{"$ref":"#/components/responses/Error"}},"description":"Cancel Fleet Operation."}},"/key-stores/{storeId}/add-mac-user/input":{"post":{"operationId":"createAddMacUserInput","summary":"Create Add Mac User Input","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates the input archive for an add-mac-user fleet operation, which registers a new Mac operator machine with an HSM in the key store's trust set.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Users:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["AddMacUser"]},"macTargetSerial":{"type":"string","minLength":1},"hsmTargetSerial":{"type":"string","minLength":1}},"required":["kind","macTargetSerial","hsmTargetSerial"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","description":"Zip archive containing `input/input.json`, the add-mac-user fleet-input document."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/add-provisioner/input":{"post":{"operationId":"createAddProvisionerInput","summary":"Create Add Provisioner Input","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates the input archive for an add-provisioner fleet operation, which registers a new provisioner YubiKey into the key store's governance set.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Provisioners:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["AddProvisioner"]},"yubikeySerial":{"type":"string","minLength":1},"hsmTargetSerial":{"type":"string","minLength":1}},"required":["kind","yubikeySerial","hsmTargetSerial"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","description":"Zip archive containing `input/input.json`, the add-provisioner fleet-input document."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/clone/input":{"post":{"operationId":"createCloneInput","summary":"Create Clone Input","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates the input archive for a clone fleet operation, which replicates a key store from a source HSM to a target HSM.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Clone`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["Clone"]},"hsmSourceSerial":{"type":"string","minLength":1},"hsmTargetSerial":{"type":"string","minLength":1},"macTargetSerial":{"type":"string","minLength":1}},"required":["kind","hsmSourceSerial","hsmTargetSerial"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","description":"Zip archive containing `input/input.json`, the clone fleet-input document."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/genesis/input":{"post":{"operationId":"createGenesisInput","summary":"Create Genesis Input","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates the input archive for a genesis fleet operation, which provisions a new offline signer fleet and generates the key store's initial signing keys.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["Genesis"]},"numProvisioners":{"type":"integer","minimum":1,"maximum":5},"numOperational":{"type":"integer","minimum":1,"maximum":5},"numSecp256k1":{"type":"integer","minimum":0,"maximum":2000},"numEd25519":{"type":"integer","minimum":0,"maximum":2000},"hsmGenesisSerial":{"type":"string","minLength":1},"macGenesisSerial":{"type":"string","minLength":1},"hsmGenesisFirmwareVersion":{"type":"string","enum":["2.4"]},"debugOptions":{"type":"object","additionalProperties":{},"description":"Development environments only (rejected with a 400 in production). Deep-merged over the generated genesis `options` block: objects merge recursively, any other value (including new fields and type changes) replaces the existing value."}},"required":["kind","numProvisioners","numOperational","numSecp256k1","numEd25519","hsmGenesisSerial"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","description":"Zip archive containing `input/input.json`, the genesis fleet-input document."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/key-harvest/input":{"post":{"operationId":"createKeyHarvestInput","summary":"Create Key Harvest Input","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Keys:Harvest`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["KeyHarvest"]},"hsmTargetSerial":{"type":"string","minLength":1},"macTargetSerial":{"type":"string","minLength":1},"macTargetUsername":{"type":"string","minLength":1},"numSecp256k1":{"type":"integer","minimum":0,"maximum":2000},"numEd25519":{"type":"integer","minimum":0,"maximum":2000}},"required":["kind","hsmTargetSerial","macTargetSerial","macTargetUsername"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","description":"Zip archive containing `input/input.json`, the key-harvest fleet-input document."}}}},"default":{"$ref":"#/components/responses/Error"}},"description":"Create Key Harvest Input."}},"/key-stores/{storeId}/onchain-sign/input":{"post":{"operationId":"createOnchainSignInput","summary":"Create Onchain Sign Input","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates the input archive for an onchain-sign operation covering the key store's pending signature requests.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Keys:Sign`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","description":"Zip archive containing `input/input.json` and `input-annex/keys.jsonl` for the onchain-sign roundtrip."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/proof-of-control/input":{"post":{"operationId":"createProofOfControlInput","summary":"Create Proof Of Control Input","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates the input archive for a proof-of-control operation covering the keys of the specified wallets.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Keys:ProveControl`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"walletIds":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":100}},"required":["walletIds"]}}}},"responses":{"200":{"description":"Success","content":{"application/zip":{"schema":{"type":"string","description":"Zip archive containing `input/input.json` (proof of control spec) and `input-annex/wrapped-keystore.jsonl` (one key per line)."}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores":{"get":{"operationId":"listKeyStores","summary":"List Key Stores","tags":["Signers"],"security":[{"authenticationToken":[]}],"description":"Lists the key stores of your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Read`: Always required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["Hsm","Mpc","OfflineSigner"]},"name":{"type":"string"},"primary":{"type":"boolean"}},"required":["id","kind","primary"]}}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/signers":{"get":{"operationId":"listSigners","summary":"List Signers","tags":["Signers"],"security":[{"authenticationToken":[]}],"description":"Lists the signer clusters of your key store, including each signer's ID and encryption public key.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Read`: Always required."},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"clusters":{"type":"array","items":{"type":"object","properties":{"clusterId":{"type":"string"},"signers":{"type":"array","items":{"type":"object","properties":{"signerId":{"type":"string"},"encryptionKey":{"type":"string"}},"required":["signerId","encryptionKey"]}}},"required":["clusterId","signers"]}}},"required":["clusters"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/add-mac-user/output":{"post":{"operationId":"submitAddMacUserOutput","summary":"Submit Add Mac User Output","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Submits the output archive produced by the offline signer fleet for an add-mac-user operation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Users:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fileChecksum":{"type":"string","pattern":"^[a-f0-9]{64}$"},"outputJson":{"type":"object","properties":{"type":{"type":"string","enum":["fleet-output"]},"version":{"type":"number","enum":[1]},"status":{"type":"string","enum":["success"]},"org_id":{"type":"string","minLength":1},"fleet_id":{"type":"string","minLength":1},"fleet_label":{"type":"string","minLength":1},"keystore_id":{"type":"string","minLength":1},"group_id":{"type":"string","minLength":1},"online_domain":{"type":"string","minLength":1},"governance":{"type":"object","additionalProperties":{}},"outputs":{"type":"object","additionalProperties":{"type":"object","properties":{"success":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["genesis-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"provisioners":{"type":"object","additionalProperties":{"type":"string"}},"hsm_sealed":{},"key_harvest":{"type":"object","properties":{"ed25519-start":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":0},"error":{"type":["string","null"]},"secp256k1-start":{"type":"integer","minimum":0},"secp256k1":{"type":"integer","minimum":0}},"required":["ed25519-start","ed25519","error","secp256k1-start","secp256k1"]}},"required":["type","hsm_serial","hsm_identity_key","mac_serial","mac_se_wrap_key_pub_key","provisioners","key_harvest"],"title":"Genesis Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["clone-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Clone Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-mac-user"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_username":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Add Mac User Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-provisioner"]},"ceremony_mode":{"type":"string","minLength":1},"provisioner_label":{"type":"string","minLength":1},"provisioner_public_key_hex":{"type":"string","pattern":"^[a-f0-9]+$"},"yubikey_serial":{"type":"string","minLength":1}},"required":["type","provisioner_label","provisioner_public_key_hex","yubikey_serial"],"title":"Add Provisioner Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["key-harvest"]},"hsm_target_serial":{"type":"string","minLength":1},"mac_target_serial":{"type":"string","minLength":1},"mac_target_username":{"type":"string","minLength":1},"key_harvest":{"type":"object","properties":{"secp256k1":{"type":"integer","minimum":1},"secp256k1_end":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":1},"ed25519_end":{"type":"integer","minimum":0}}}},"required":["type","hsm_target_serial","mac_target_serial","mac_target_username","key_harvest"],"title":"Key Harvest Registration"}]}},"required":["success"]}}},"required":["type","version","status","org_id","fleet_id","fleet_label","keystore_id","group_id","online_domain","outputs"]}},"required":["fileChecksum","outputJson"]},"file":{"type":"string","format":"binary"}},"required":["data","file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/add-provisioner/output":{"post":{"operationId":"submitAddProvisionerOutput","summary":"Submit Add Provisioner Output","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Submits the output archive produced by the offline signer fleet for an add-provisioner operation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Provisioners:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fileChecksum":{"type":"string","pattern":"^[a-f0-9]{64}$"},"outputJson":{"type":"object","properties":{"type":{"type":"string","enum":["fleet-output"]},"version":{"type":"number","enum":[1]},"status":{"type":"string","enum":["success"]},"org_id":{"type":"string","minLength":1},"fleet_id":{"type":"string","minLength":1},"fleet_label":{"type":"string","minLength":1},"keystore_id":{"type":"string","minLength":1},"group_id":{"type":"string","minLength":1},"online_domain":{"type":"string","minLength":1},"governance":{"type":"object","additionalProperties":{}},"outputs":{"type":"object","additionalProperties":{"type":"object","properties":{"success":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["genesis-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"provisioners":{"type":"object","additionalProperties":{"type":"string"}},"hsm_sealed":{},"key_harvest":{"type":"object","properties":{"ed25519-start":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":0},"error":{"type":["string","null"]},"secp256k1-start":{"type":"integer","minimum":0},"secp256k1":{"type":"integer","minimum":0}},"required":["ed25519-start","ed25519","error","secp256k1-start","secp256k1"]}},"required":["type","hsm_serial","hsm_identity_key","mac_serial","mac_se_wrap_key_pub_key","provisioners","key_harvest"],"title":"Genesis Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["clone-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Clone Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-mac-user"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_username":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Add Mac User Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-provisioner"]},"ceremony_mode":{"type":"string","minLength":1},"provisioner_label":{"type":"string","minLength":1},"provisioner_public_key_hex":{"type":"string","pattern":"^[a-f0-9]+$"},"yubikey_serial":{"type":"string","minLength":1}},"required":["type","provisioner_label","provisioner_public_key_hex","yubikey_serial"],"title":"Add Provisioner Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["key-harvest"]},"hsm_target_serial":{"type":"string","minLength":1},"mac_target_serial":{"type":"string","minLength":1},"mac_target_username":{"type":"string","minLength":1},"key_harvest":{"type":"object","properties":{"secp256k1":{"type":"integer","minimum":1},"secp256k1_end":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":1},"ed25519_end":{"type":"integer","minimum":0}}}},"required":["type","hsm_target_serial","mac_target_serial","mac_target_username","key_harvest"],"title":"Key Harvest Registration"}]}},"required":["success"]}}},"required":["type","version","status","org_id","fleet_id","fleet_label","keystore_id","group_id","online_domain","outputs"]}},"required":["fileChecksum","outputJson"]},"file":{"type":"string","format":"binary"}},"required":["data","file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/clone/output":{"post":{"operationId":"submitCloneOutput","summary":"Submit Clone Output","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Submits the output archive produced by the offline signer fleet for a clone operation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Clone`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fileChecksum":{"type":"string","pattern":"^[a-f0-9]{64}$"},"outputJson":{"type":"object","properties":{"type":{"type":"string","enum":["fleet-output"]},"version":{"type":"number","enum":[1]},"status":{"type":"string","enum":["success"]},"org_id":{"type":"string","minLength":1},"fleet_id":{"type":"string","minLength":1},"fleet_label":{"type":"string","minLength":1},"keystore_id":{"type":"string","minLength":1},"group_id":{"type":"string","minLength":1},"online_domain":{"type":"string","minLength":1},"governance":{"type":"object","additionalProperties":{}},"outputs":{"type":"object","additionalProperties":{"type":"object","properties":{"success":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["genesis-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"provisioners":{"type":"object","additionalProperties":{"type":"string"}},"hsm_sealed":{},"key_harvest":{"type":"object","properties":{"ed25519-start":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":0},"error":{"type":["string","null"]},"secp256k1-start":{"type":"integer","minimum":0},"secp256k1":{"type":"integer","minimum":0}},"required":["ed25519-start","ed25519","error","secp256k1-start","secp256k1"]}},"required":["type","hsm_serial","hsm_identity_key","mac_serial","mac_se_wrap_key_pub_key","provisioners","key_harvest"],"title":"Genesis Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["clone-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Clone Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-mac-user"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_username":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Add Mac User Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-provisioner"]},"ceremony_mode":{"type":"string","minLength":1},"provisioner_label":{"type":"string","minLength":1},"provisioner_public_key_hex":{"type":"string","pattern":"^[a-f0-9]+$"},"yubikey_serial":{"type":"string","minLength":1}},"required":["type","provisioner_label","provisioner_public_key_hex","yubikey_serial"],"title":"Add Provisioner Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["key-harvest"]},"hsm_target_serial":{"type":"string","minLength":1},"mac_target_serial":{"type":"string","minLength":1},"mac_target_username":{"type":"string","minLength":1},"key_harvest":{"type":"object","properties":{"secp256k1":{"type":"integer","minimum":1},"secp256k1_end":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":1},"ed25519_end":{"type":"integer","minimum":0}}}},"required":["type","hsm_target_serial","mac_target_serial","mac_target_username","key_harvest"],"title":"Key Harvest Registration"}]}},"required":["success"]}}},"required":["type","version","status","org_id","fleet_id","fleet_label","keystore_id","group_id","online_domain","outputs"]}},"required":["fileChecksum","outputJson"]},"file":{"type":"string","format":"binary"}},"required":["data","file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/genesis/output":{"post":{"operationId":"submitGenesisOutput","summary":"Submit Genesis Output","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Submits the output archive produced by the offline signer fleet for a genesis operation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fileChecksum":{"type":"string","pattern":"^[a-f0-9]{64}$"},"outputJson":{"type":"object","properties":{"type":{"type":"string","enum":["fleet-output"]},"version":{"type":"number","enum":[1]},"status":{"type":"string","enum":["success"]},"org_id":{"type":"string","minLength":1},"fleet_id":{"type":"string","minLength":1},"fleet_label":{"type":"string","minLength":1},"keystore_id":{"type":"string","minLength":1},"group_id":{"type":"string","minLength":1},"online_domain":{"type":"string","minLength":1},"governance":{"type":"object","additionalProperties":{}},"outputs":{"type":"object","additionalProperties":{"type":"object","properties":{"success":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["genesis-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"provisioners":{"type":"object","additionalProperties":{"type":"string"}},"hsm_sealed":{},"key_harvest":{"type":"object","properties":{"ed25519-start":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":0},"error":{"type":["string","null"]},"secp256k1-start":{"type":"integer","minimum":0},"secp256k1":{"type":"integer","minimum":0}},"required":["ed25519-start","ed25519","error","secp256k1-start","secp256k1"]}},"required":["type","hsm_serial","hsm_identity_key","mac_serial","mac_se_wrap_key_pub_key","provisioners","key_harvest"],"title":"Genesis Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["clone-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Clone Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-mac-user"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_username":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Add Mac User Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-provisioner"]},"ceremony_mode":{"type":"string","minLength":1},"provisioner_label":{"type":"string","minLength":1},"provisioner_public_key_hex":{"type":"string","pattern":"^[a-f0-9]+$"},"yubikey_serial":{"type":"string","minLength":1}},"required":["type","provisioner_label","provisioner_public_key_hex","yubikey_serial"],"title":"Add Provisioner Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["key-harvest"]},"hsm_target_serial":{"type":"string","minLength":1},"mac_target_serial":{"type":"string","minLength":1},"mac_target_username":{"type":"string","minLength":1},"key_harvest":{"type":"object","properties":{"secp256k1":{"type":"integer","minimum":1},"secp256k1_end":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":1},"ed25519_end":{"type":"integer","minimum":0}}}},"required":["type","hsm_target_serial","mac_target_serial","mac_target_username","key_harvest"],"title":"Key Harvest Registration"}]}},"required":["success"]}}},"required":["type","version","status","org_id","fleet_id","fleet_label","keystore_id","group_id","online_domain","outputs"]}},"required":["fileChecksum","outputJson"]},"file":{"type":"string","format":"binary"}},"required":["data","file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/key-harvest/output":{"post":{"operationId":"submitKeyHarvestOutput","summary":"Submit Key Harvest Output","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Fleets:Keys:Harvest`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fileChecksum":{"type":"string","pattern":"^[a-f0-9]{64}$"},"outputJson":{"type":"object","properties":{"type":{"type":"string","enum":["fleet-output"]},"version":{"type":"number","enum":[1]},"status":{"type":"string","enum":["success"]},"org_id":{"type":"string","minLength":1},"fleet_id":{"type":"string","minLength":1},"fleet_label":{"type":"string","minLength":1},"keystore_id":{"type":"string","minLength":1},"group_id":{"type":"string","minLength":1},"online_domain":{"type":"string","minLength":1},"governance":{"type":"object","additionalProperties":{}},"outputs":{"type":"object","additionalProperties":{"type":"object","properties":{"success":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["genesis-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"provisioners":{"type":"object","additionalProperties":{"type":"string"}},"hsm_sealed":{},"key_harvest":{"type":"object","properties":{"ed25519-start":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":0},"error":{"type":["string","null"]},"secp256k1-start":{"type":"integer","minimum":0},"secp256k1":{"type":"integer","minimum":0}},"required":["ed25519-start","ed25519","error","secp256k1-start","secp256k1"]}},"required":["type","hsm_serial","hsm_identity_key","mac_serial","mac_se_wrap_key_pub_key","provisioners","key_harvest"],"title":"Genesis Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["clone-registration"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Clone Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-mac-user"]},"ceremony_mode":{"type":"string","minLength":1},"hsm_target_serial":{"type":"string","minLength":1},"hsm_identity_key":{"type":"string","pattern":"^[a-f0-9]+$"},"mac_target_serial":{"type":"string","minLength":1},"mac_username":{"type":"string","minLength":1},"mac_se_wrap_key_pub_key":{"type":"string","minLength":1},"hsm_sealed":{}},"required":["type","hsm_target_serial","hsm_identity_key","mac_target_serial","mac_se_wrap_key_pub_key"],"title":"Add Mac User Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["add-provisioner"]},"ceremony_mode":{"type":"string","minLength":1},"provisioner_label":{"type":"string","minLength":1},"provisioner_public_key_hex":{"type":"string","pattern":"^[a-f0-9]+$"},"yubikey_serial":{"type":"string","minLength":1}},"required":["type","provisioner_label","provisioner_public_key_hex","yubikey_serial"],"title":"Add Provisioner Registration"},{"type":"object","properties":{"type":{"type":"string","enum":["key-harvest"]},"hsm_target_serial":{"type":"string","minLength":1},"mac_target_serial":{"type":"string","minLength":1},"mac_target_username":{"type":"string","minLength":1},"key_harvest":{"type":"object","properties":{"secp256k1":{"type":"integer","minimum":1},"secp256k1_end":{"type":"integer","minimum":0},"ed25519":{"type":"integer","minimum":1},"ed25519_end":{"type":"integer","minimum":0}}}},"required":["type","hsm_target_serial","mac_target_serial","mac_target_username","key_harvest"],"title":"Key Harvest Registration"}]}},"required":["success"]}}},"required":["type","version","status","org_id","fleet_id","fleet_label","keystore_id","group_id","online_domain","outputs"]}},"required":["fileChecksum","outputJson"]},"file":{"type":"string","format":"binary"}},"required":["data","file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"default":{"$ref":"#/components/responses/Error"}},"description":"Submit Key Harvest Output."}},"/key-stores/{storeId}/onchain-sign/output":{"post":{"operationId":"submitOnchainSignOutput","summary":"Submit Onchain Sign Output","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Submits the output archive produced by the offline signer fleet for an onchain-sign operation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Keys:Sign`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fileChecksum":{"type":"string","pattern":"^[a-f0-9]{64}$"},"outputJson":{"type":"object","properties":{"type":{"type":"string","enum":["keystore-output"]},"version":{"type":"number","enum":[1]},"org_id":{"type":"string","minLength":1},"fleet_id":{"type":"string","minLength":1},"keystore_id":{"type":"string","minLength":1},"group_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["success","partial","fail"]},"outputs":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["proof-of-control-v1"]},"result":{"anyOf":[{"type":"object","properties":{"success":{"type":"object","properties":{"signer_public_key":{"type":"string","pattern":"^[a-f0-9]+$"},"prefix":{"type":"string","pattern":"^[a-f0-9]+$"},"message":{"type":"string","minLength":1},"exact_bytes_signed":{"type":"string","pattern":"^[a-f0-9]{64}$"},"signature":{"type":"string","pattern":"^[a-f0-9]+$"}},"required":["signer_public_key","prefix","message","exact_bytes_signed","signature"]}},"required":["success"],"additionalProperties":false},{"type":"object","properties":{"fail":{"type":"object","properties":{"message":{"type":"string","minLength":1},"code":{"type":"string","minLength":1}},"required":["message","code"]}},"required":["fail"],"additionalProperties":false}]}},"required":["type","result"],"title":"Proof of Control Output"},{"type":"object","properties":{"type":{"type":"string","enum":["onchain-sign-v1"]},"result":{"anyOf":[{"type":"object","properties":{"success":{"type":"object","additionalProperties":{"type":"object","properties":{"signer_public_key":{"type":"string","pattern":"^[a-f0-9]+$"},"exact_bytes_signed":{"type":"string","pattern":"^[a-f0-9]+$"},"signature":{"type":"string","pattern":"^[a-f0-9]+$"}},"required":["signer_public_key","exact_bytes_signed","signature"]}}},"required":["success"],"additionalProperties":false},{"type":"object","properties":{"fail":{"type":"object","properties":{"message":{"type":"string","minLength":1},"code":{"type":"string","minLength":1}},"required":["message","code"]}},"required":["fail"],"additionalProperties":false}]}},"required":["type","result"],"title":"Onchain Sign Output"}]}}},"required":["type","version","org_id","fleet_id","keystore_id","group_id","status","outputs"]}},"required":["fileChecksum","outputJson"]},"file":{"type":"string","format":"binary"}},"required":["data","file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success","partial"]}},"required":["status"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/key-stores/{storeId}/proof-of-control/output":{"post":{"operationId":"submitProofOfControlOutput","summary":"Submit Proof Of Control Output","tags":["Signers"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Submits the output archive produced by the offline signer fleet for a proof-of-control operation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`KeyStores:Instructions:Keys:ProveControl`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"storeId","in":"path"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fileChecksum":{"type":"string","pattern":"^[a-f0-9]{64}$"},"outputJson":{"type":"object","properties":{"type":{"type":"string","enum":["keystore-output"]},"version":{"type":"number","enum":[1]},"org_id":{"type":"string","minLength":1},"fleet_id":{"type":"string","minLength":1},"keystore_id":{"type":"string","minLength":1},"group_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["success","partial","fail"]},"outputs":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["proof-of-control-v1"]},"result":{"anyOf":[{"type":"object","properties":{"success":{"type":"object","properties":{"signer_public_key":{"type":"string","pattern":"^[a-f0-9]+$"},"prefix":{"type":"string","pattern":"^[a-f0-9]+$"},"message":{"type":"string","minLength":1},"exact_bytes_signed":{"type":"string","pattern":"^[a-f0-9]{64}$"},"signature":{"type":"string","pattern":"^[a-f0-9]+$"}},"required":["signer_public_key","prefix","message","exact_bytes_signed","signature"]}},"required":["success"],"additionalProperties":false},{"type":"object","properties":{"fail":{"type":"object","properties":{"message":{"type":"string","minLength":1},"code":{"type":"string","minLength":1}},"required":["message","code"]}},"required":["fail"],"additionalProperties":false}]}},"required":["type","result"],"title":"Proof of Control Output"},{"type":"object","properties":{"type":{"type":"string","enum":["onchain-sign-v1"]},"result":{"anyOf":[{"type":"object","properties":{"success":{"type":"object","additionalProperties":{"type":"object","properties":{"signer_public_key":{"type":"string","pattern":"^[a-f0-9]+$"},"exact_bytes_signed":{"type":"string","pattern":"^[a-f0-9]+$"},"signature":{"type":"string","pattern":"^[a-f0-9]+$"}},"required":["signer_public_key","exact_bytes_signed","signature"]}}},"required":["success"],"additionalProperties":false},{"type":"object","properties":{"fail":{"type":"object","properties":{"message":{"type":"string","minLength":1},"code":{"type":"string","minLength":1}},"required":["message","code"]}},"required":["fail"],"additionalProperties":false}]}},"required":["type","result"],"title":"Onchain Sign Output"}]}}},"required":["type","version","org_id","fleet_id","keystore_id","group_id","status","outputs"]}},"required":["fileChecksum","outputJson"]},"file":{"type":"string","format":"binary"}},"required":["data","file"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success","partial"]}},"required":["status"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/staking/stakes":{"post":{"operationId":"createStake","summary":"Create Stake","tags":["Staking"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new stake.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Stakes:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"provider":{"type":"string","enum":["Figment"],"description":"Staking Provider"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"}},"required":["protocol","walletId","provider","amount"],"title":"Ethereum"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"validator":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in min units"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"minItems":1}},"required":["protocol","walletId","validator","amount"],"title":"Iota"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet making the deposit.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"candidate":{"type":"string","description":"Coinbase address of the XDC masternode to register"},"amount":{"type":"string","pattern":"^\\d+$","description":"Transaction amount denominated in wei (min 10,000,000 XDC)"}},"required":["protocol","walletId","candidate","amount"],"title":"Xdc"}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]},"examples":{"Ethereum":{"value":{"externalId":"ext-123","walletId":"wa-4g991-s29to-9hrq4nbuto6ih33b","protocol":"Ethereum","provider":"Figment","amount":"32000000000000000000"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Stake"},{"type":"object","properties":{"actions":{"type":"array","items":{"$ref":"#/components/schemas/StakeAction"}}},"required":["actions"]}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listStakes","summary":"List Stakes","tags":["Staking"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of stakes.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Stakes:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Stake"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/staking/stakes/{stakeId}/actions":{"post":{"operationId":"createStakeAction","summary":"Create Stake Action","tags":["Staking"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new action for an existing stake.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Stakes:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"stakeId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"anyOf":[{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"kind":{"type":"string","enum":["Withdraw"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["protocol","kind","amount"],"title":"IOTA Withdrawal"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Iota"]},"kind":{"type":"string","enum":["Deposit"]},"amount":{"type":"string","pattern":"^\\d+$"},"lockedIotas":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}}},"required":["protocol","kind","amount"],"title":"IOTA Deposit"}]},{"type":"object","properties":{"protocol":{"type":"string","enum":["Ethereum"]},"kind":{"type":"string","enum":["Withdraw"]}},"required":["protocol","kind"],"title":"Ethereum Withdrawal"},{"oneOf":[{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"kind":{"type":"string","enum":["Withdraw"]}},"required":["protocol","kind"],"title":"XDC Withdrawal"},{"type":"object","properties":{"protocol":{"type":"string","enum":["Xdc"]},"kind":{"type":"string","enum":["Unbond"]}},"required":["protocol","kind"],"title":"XDC Unbond"}]}]},{"type":"object","properties":{"externalId":{"type":"string"}}}]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Stake"},{"type":"object","properties":{"actions":{"type":"array","items":{"$ref":"#/components/schemas/StakeAction"}}},"required":["actions"]}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listStakeActions","summary":"List Stake Actions","tags":["Staking"],"security":[{"authenticationToken":[]}],"description":"Retrieve the list of actions for a specific stake.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Stakes:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"stakeId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/StakeAction"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/staking/stakes/{stakeId}":{"get":{"operationId":"getStakes","summary":"Get Stakes","tags":["Staking"],"security":[{"authenticationToken":[]}],"description":"Retrieve the details of a specific stake.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Stakes:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"stakeId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Stake"},{"type":"object","properties":{"actions":{"type":"array","items":{"$ref":"#/components/schemas/StakeAction"}}},"required":["actions"]}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/staking/stakes/{stakeId}/rewards":{"get":{"operationId":"getStakeRewards","summary":"Get Stake Rewards","tags":["Staking"],"security":[{"authenticationToken":[]}],"description":"Retrieves the rewards linked to a specific stake.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Stakes:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^stk-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"stakeId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string"},"balance":{"type":"string"}},"required":["symbol","balance"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/swaps":{"post":{"operationId":"createSwap","summary":"Create Swap","tags":["Swaps"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new swap based on an existing quote. This is the second step of the [Swap flow](https://docs.dfns.co/api-reference/swaps#flow-overview).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Swaps:Create`: Always required   \n`Wallets:Transactions:Create`: Always required. Swap transactions are broadcast from your wallet.   \n`FeeSponsors:Use`: Required if `feeSponsorId` is specified and the sponsoree wallet belongs to an `EndUser` user kind."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapClassic"]},"quoteId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Quote to use for this swap.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"reference":{"type":"string","description":"An optional reference for this Swap."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this swap. When set, the swap transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","quoteId","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapClassic Swap Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapX"]},"quoteId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Quote to use for this swap.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"reference":{"type":"string","description":"An optional reference for this Swap."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this swap. When set, the swap transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","quoteId","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapX Swap Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["CircleCctp"]},"quoteId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^swapQuote-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Quote to use for this swap.","example":"swapQuote-7n9p0-cth75-6l74n2sj7u73ooeq"},"reference":{"type":"string","description":"An optional reference for this Swap."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`. Used for attesting that the swap is being created with the same parameters as the quote.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction. Used for attesting that the swap is being created with the same parameters as the quote."},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will pay the network fees for this swap. When set, the swap transactions are broadcast as sponsored user operations.","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"feeToleranceBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The maximum fee you will accept for this CCTP transfer, in [basis points](https://en.wikipedia.org/wiki/Basis_point) (BPS) of the amount. CCTP is burn-and-mint with no price slippage; this caps the bridge/forwarding fee — which varies with chain congestion and Fast vs Standard speed — so the burn does not revert if the fee rises. One basis point equals 0.01%."}},"required":["provider","quoteId","walletId","sourceAsset","targetAsset","feeToleranceBps"],"title":"CircleCctp Swap Request"}]},"examples":{"confirmingAnExistingQuote":{"value":{"quoteId":"swapQuote-3hgv4-q8tbf-8v2ajmrbmg6m4i9t","reference":"optional reference for record keeping","provider":"UniswapClassic","walletId":"wa-123456-12345678","targetWalletId":"wa-123456-87654321","slippageBps":50,"sourceAsset":{"kind":"Native","amount":"1000000000000000000"},"targetAsset":{"kind":"Erc20","contract":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"5600000"}}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Swap"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listSwaps","summary":"List Swaps","tags":["Swaps"],"security":[{"authenticationToken":[]}],"description":"List all swaps with pagination","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Swaps:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Swap"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/swaps/quotes":{"post":{"operationId":"requestSwapQuote","summary":"Request Swap Quote","tags":["Swaps"],"security":[{"authenticationToken":[]}],"description":"Request a quote from a given provider for swapping assets. This is the first step of the [Swap flow](https://docs.dfns.co/api-reference/swaps#flow-overview).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapClassic"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction, following the same stucture as the [transfer API](https://docs.dfns.co/api-reference/wallets/transfer-asset)."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["kind","contract"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["kind","mint"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction, follows the same structure as sourceAsset, but doesn't include the amount."},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapClassic Swap Quote Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["UniswapX"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction, following the same stucture as the [transfer API](https://docs.dfns.co/api-reference/wallets/transfer-asset)."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["kind","contract"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["kind","mint"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction, follows the same structure as sourceAsset, but doesn't include the amount."},"slippageBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The slippage tolerance for this trade in [basis point](https://en.wikipedia.org/wiki/Basis_point) (BPS). Slippage tolerance defines the maximum price difference you're willing to accept during a trade from the estimated quote, ensuring you still receive at least a minimum number of tokens if the price shifts. One basis point equals one-hundredth of a percentage point, or 0.01%."}},"required":["provider","walletId","sourceAsset","targetAsset","slippageBps"],"title":"UniswapX Swap Quote Request"},{"type":"object","properties":{"provider":{"type":"string","enum":["CircleCctp"]},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet spending the sourceAsset.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"targetWalletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the Dfns wallet receiving the target asset. Currently this value must be the same as the `walletId`.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"sourceAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","amount"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","contract","amount"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","mint","amount"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+$"}},"required":["kind","issuer","assetCode","amount"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The source asset that will be spent on the Swap transaction, following the same stucture as the [transfer API](https://docs.dfns.co/api-reference/wallets/transfer-asset)."},"targetAsset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["kind","contract"],"title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl"]},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["kind","mint"],"title":"Solana Fungible Token (SPL)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar Fungible Token (SEP-41)"}],"description":"The target asset that will be received with the Swap transaction, follows the same structure as sourceAsset, but doesn't include the amount."},"feeToleranceBps":{"type":"integer","minimum":0,"maximum":10000,"description":"The maximum fee you will accept for this CCTP transfer, in [basis points](https://en.wikipedia.org/wiki/Basis_point) (BPS) of the amount. CCTP is burn-and-mint with no price slippage; this caps the bridge/forwarding fee — which varies with chain congestion and Fast vs Standard speed — so the burn does not revert if the fee rises. One basis point equals 0.01%."},"speed":{"type":"string","enum":["Fast","Standard"],"description":"Selects Fast (~8–20s, small fast-burn fee) or Standard (~13–19min, no fast-burn fee)."},"useDurableNonce":{"type":"boolean","description":"Solana-source only. Bind the burn to a durable nonce so it survives signing delays."}},"required":["provider","walletId","sourceAsset","targetAsset","feeToleranceBps"],"title":"CircleCctp Swap Quote Request"}]},"examples":{"UniswapClassic":{"value":{"walletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","targetWalletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","provider":"UniswapClassic","sourceAsset":{"kind":"Native","amount":"1000000000000000000"},"targetAsset":{"kind":"Erc20","contract":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"slippageBps":50}},"UniswapX":{"value":{"walletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","targetWalletId":"wa-3l3cj-l8mq7-8q78f9nopq7f1qjv","provider":"UniswapX","sourceAsset":{"kind":"Erc20","contract":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1000000000000000000"},"targetAsset":{"kind":"Native","amount":"1000000000000000000"},"slippageBps":50}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapQuote"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/swaps/{swapId}":{"get":{"operationId":"getSwap","summary":"Get Swap","tags":["Swaps"],"security":[{"authenticationToken":[]}],"description":"Get details of a specific swap by its ID","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Swaps:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Id of the swap for which we want to get details."},"required":true,"description":"Id of the swap for which we want to get details.","name":"swapId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Swap"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/swaps/quotes/{quoteId}":{"get":{"operationId":"getSwapQuote","summary":"Get Swap Quote","tags":["Swaps"],"security":[{"authenticationToken":[]}],"description":"Get details of a specific swap quote by its ID","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\nNo permission required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The ID of the Swap Quote."},"required":true,"description":"The ID of the Swap Quote.","name":"quoteId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapQuote"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/permissions/{permissionId}/assign":{"post":{"operationId":"assignTenantPermission","summary":"Assign Tenant Permission","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a permission that allows certain specified operations to be executed. \n  \n  Response is either the permission object itself (success) or a reason why it was not possible to create the permission (failure).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Permissions:Assign`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","minLength":1,"description":"ID of the identity to assign the permission to. Can be a user ID, a service account ID, or a personal access token (PAT) ID."}},"required":["identityId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/permissions/{permissionId}/revoke":{"post":{"operationId":"revokeTenantPermission","summary":"Revoke Tenant Permission","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Revokes a permission assignment (success) or gives reason why it's not possible (failure).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Permissions:Revoke`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","minLength":1,"description":"ID of the identity to revoke the permission from. Can be a user ID, a service account ID, or a personal access token (PAT) ID."}},"required":["identityId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success"},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/permissions/{permissionId}":{"get":{"operationId":"getTenantPermission","summary":"Get Tenant Permission","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"Retrieves a specific permission (success) or gives a reason why it's not possible (failure).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Permissions:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"ID of the permission (also referred to as \"role\" in the dashboard)."},"required":true,"description":"ID of the permission (also referred to as \"role\" in the dashboard).","name":"permissionId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Permission"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/permissions":{"get":{"operationId":"listTenantPermissions","summary":"List Tenant Permissions","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"Retrieves a list of permissions (success) or gives a reason why it's not possible (failure).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Permissions:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Permission"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/users":{"post":{"operationId":"createTenantUser","summary":"Create Tenant User","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new Tenant User. This creates the user and sends him an email with a registration code. The user is created without any permissions.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Users:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"The email address of the new user."},"externalId":{"type":"string","description":"Value that can be used to correlate the entity with an external system."},"isSSORequired":{"type":"boolean","default":false,"description":"If set to true, the user will have to authenticate via SSO"}},"required":["email"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantUser"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listTenantUsers","summary":"List Tenant Users","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"List all Users in your Tenant.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Users:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TenantUser"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/users/{userId}":{"put":{"operationId":"updateTenantUser","summary":"Update Tenant User","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Updates a new Tenant User details.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Users:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"isSSORequired":{"type":"boolean"}},"required":["isSSORequired"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteTenantUser","summary":"Delete Tenant User","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a specific Tenant User.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Users:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getTenantUser","summary":"Get Tenant User","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"Get a Tenant User.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Users:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"User id."},"required":true,"description":"User id.","name":"userId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantUser"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/orgs":{"get":{"operationId":"listOrgs","summary":"List Orgs","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"List all Orgs in your Tenant.\nBy default, returns non-archived Orgs, unless specific status are passed","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Orgs:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["Active","Suspended","Archived"]},{"type":"array","items":{"type":"string","enum":["Active","Suspended","Archived"]}}]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Suspended","Archived"]},"dateCreated":{"type":"string"}},"required":["id","name","status","dateCreated"],"additionalProperties":false},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"createOrg","summary":"Create Org","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a new Org in your Tenant. The creator of the org will be granted access to the Org as the first Org Admin.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Orgs:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50},"keyStores":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"primary":{"type":"boolean"}},"required":["id"]}}},"required":["name","keyStores"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"org":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["org"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/user-groups":{"post":{"operationId":"createTenantUserGroup","summary":"Create Tenant User Group","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Create a user group in the caller's tenant. A group holds tenant permissions through the tenant permission assignment endpoint, and its members hold those permissions in addition to their own.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_+.-]+$","description":"Name of the group. Unique within the org or tenant, ignoring case. A deleted group frees its name for reuse."},"description":{"type":"string","minLength":1,"maxLength":1024,"description":"Description of the group."}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listTenantUserGroups","summary":"List Tenant User Groups","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"List the user groups in the caller's tenant.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/UserGroup"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/user-groups/{userGroupId}":{"get":{"operationId":"getTenantUserGroup","summary":"Get Tenant User Group","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"Get a specific user group of the caller's tenant.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateTenantUserGroup","summary":"Update Tenant User Group","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Rename a user group of the caller's tenant or change its description. Fields left out keep their value. Its permissions and members are unaffected.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_+.-]+$","description":"Name of the group. Unique within the org or tenant, ignoring case. A deleted group frees its name for reuse."},"description":{"type":["string","null"],"minLength":1,"maxLength":1024,"description":"Description of the group. Null removes it."}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteTenantUserGroup","summary":"Delete Tenant User Group","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Delete a user group of the caller's tenant. Its tenant permission assignments are revoked and its members are removed. The name can be reused.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/user-groups/{userGroupId}/members":{"get":{"operationId":"listTenantUserGroupMembers","summary":"List Tenant User Group Members","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"List the members of a user group of the caller's tenant.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Members:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/UserGroupMember"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"addTenantUserGroupMembers","summary":"Add Tenant User Group Members","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Add tenant users to a user group. Each member gains every tenant permission assigned to the group, in addition to their own.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Members:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"minItems":1,"maxItems":100,"description":"Tenant users to add. Users already in the group are left unchanged."}},"required":["userIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"removeTenantUserGroupMembers","summary":"Remove Tenant User Group Members","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Remove tenant users from a user group. Each removed user immediately loses every tenant permission they held only through this group.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:UserGroups:Members:Remove`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ug-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User group id."},"required":true,"description":"User group id.","name":"userGroupId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"User id.","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"minItems":1,"maxItems":100,"description":"Tenant users to remove. Users not in the group are left unchanged."}},"required":["userIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/orgs/{orgId}":{"get":{"operationId":"getOrg","summary":"Get Org","tags":["Tenant"],"security":[{"authenticationToken":[]}],"description":"Get details on a single Org within your Tenant.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Orgs:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Organization id."},"required":true,"description":"Organization id.","name":"orgId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"org":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Suspended","Archived"]},"dateCreated":{"type":"string"}},"required":["id","name","status","dateCreated"],"additionalProperties":false}},"required":["org"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateOrg","summary":"Update Org","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Update the name of an Org within your Tenant.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Orgs:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Organization id."},"required":true,"description":"Organization id.","name":"orgId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"org":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["Active","Suspended","Archived"]},"dateCreated":{"type":"string"}},"required":["id","name","status","dateCreated"],"additionalProperties":false}},"required":["org"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/tenant/orgs/{orgId}/status":{"put":{"operationId":"updateOrgStatus","summary":"Update Org Status","tags":["Tenant"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Change the status of an Org within your Tenant.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n❌ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n❌ Personal Access Token not allowed    \n❌ Service Account\n\n#### Required Permissions\n\n`Tenant:Orgs:Status:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Organization id."},"required":true,"description":"Organization id.","name":"orgId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["Active","Suspended","Archived"]}},"required":["status"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults":{"post":{"operationId":"createVault","summary":"Create Vault","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new Vault.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Vault Tag."},"maxItems":10,"default":[]},"externalId":{"type":"string","maxLength":100}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vault"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listVaults","summary":"List Vaults","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Retrieves the list of Vaults in your organization.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Vault"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/addresses":{"post":{"operationId":"createVaultAddress","summary":"Create Vault Address","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a vault address (managed wallet) on a network that supports vaults — EVM networks, Bitcoin, and Solana (native SOL and SPL/Token-2022 tokens). Add one network per call.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"network":{"type":"string","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","Bob","BobSepolia","Bsc","BscTestnet","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]}},"required":["network"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultAddress"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/locks":{"post":{"operationId":"createVaultLock","summary":"Create Vault Lock","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Requests locking funds from the vault's available balance for off-chain settlement or escrow. Returns the created lock (200), or the pending lock request (202) when a policy requires approval.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Locks:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"network":{"type":"string","description":"The EVM network the locked asset is on.","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Bob","BobSepolia","Bsc","BscTestnet","Berachain","BerachainBepolia","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiPacific1","SeiAtlantic2","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]},"tid":{"type":"string","description":"The token identifier of the asset to lock (e.g. `native:eth` or `erc20:0x...`)."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount to lock, in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique id from your system. Unique per vault among live locks: a replacement lock inherits it, and it cannot be reused by a new lock, even after the lock is deleted."},"reason":{"type":"string","description":"An optional reason or note for the lock."},"beneficiary":{"type":"string","description":"The address on `network` the locked funds are sent to when the owner transfers the lock. Immutable once set; a lock without a beneficiary can only be released."}},"required":["network","tid","amount"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultLock"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listVaultLocks","summary":"List Vault Locks","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Lists a vault's locks, active and released.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string"},"required":false,"name":"network","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tid","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VaultLock"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/transfers":{"post":{"operationId":"createVaultTransfer","summary":"Create Vault Transfer","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a transfer out of a vault, reserving the amount and estimated fee from the vault's available balance.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Transfers:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"network":{"type":"string","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","Bob","BobSepolia","Bsc","BscTestnet","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"],"description":"The network the transfer is on."},"tid":{"type":"string","description":"The token identifier of the asset to transfer (e.g. `native:eth`, `native:btc`, `native:sol`, or `spl:<mint>`)."},"to":{"type":"string","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount to transfer, in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique id from your system."}},"required":["network","tid","to","amount"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}":{"get":{"operationId":"getVault","summary":"Get Vault","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Retrieves a Vault by its ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The vault to retrieve."},"required":true,"description":"The vault to retrieve.","name":"vaultId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vault"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateVault","summary":"Update Vault","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Updates an existing Vault.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":200},"externalId":{"type":"string","maxLength":100}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vault"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/locks/{lockId}":{"get":{"operationId":"getVaultLock","summary":"Get Vault Lock","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Retrieves a vault lock by its ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The lock to retrieve."},"required":true,"description":"The lock to retrieve.","name":"lockId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultLock"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/quarantines/{quarantineId}":{"get":{"operationId":"getVaultQuarantine","summary":"Get Vault Quarantine","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Retrieves a vault quarantine by its ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-qua-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The quarantine to retrieve."},"required":true,"description":"The quarantine to retrieve.","name":"quarantineId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultQuarantine"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/assets":{"get":{"operationId":"listVaultAssets","summary":"List Vault Assets","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Lists a vault's assets with balances (available/quarantined/locked) and USD valuation.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":["boolean","null"],"default":false},"required":false,"name":"showUnverified","in":"query"},{"schema":{"type":"string"},"required":false,"name":"network","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VaultAsset"}},"netWorth":{"$ref":"#/components/schemas/VaultNetWorth"}},"required":["items","netWorth"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/balances":{"get":{"operationId":"listVaultBalances","summary":"List Vault Balances","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Lists a vault's balance entries.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["Available","Outgoing","Fee","Incoming","Locked","Quarantined"],"description":"Vault balance kind."},"required":false,"description":"Vault balance kind.","name":"kind","in":"query"},{"schema":{"type":"string"},"required":false,"name":"network","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tid","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VaultBalanceEntry"}},"nextPageToken":{"type":"string"}},"required":["items"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/history":{"get":{"operationId":"listVaultHistory","summary":"List Vault History","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Lists a vault's history, most recent first: one item per incoming or outgoing transfer, carrying its current status, and one per lock creation or deletion.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","Bob","BobSepolia","Bsc","BscTestnet","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]},{"type":"array","items":{"type":"string","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","Bob","BobSepolia","Bsc","BscTestnet","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]}}],"description":"Only items on these networks. Repeat the parameter to pass several."},"required":false,"description":"Only items on these networks. Repeat the parameter to pass several.","name":"network","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Only items moving these assets, by token identifier. Repeat the parameter to pass several. Combine with `network`, as a token identifier can exist on several networks."},"required":false,"description":"Only items moving these assets, by token identifier. Repeat the parameter to pass several. Combine with `network`, as a token identifier can exist on several networks.","name":"tid","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["IncomingTransfer","OutgoingTransfer","LockCreated","LockDeleted"],"description":"Vault history item kind."},{"type":"array","items":{"type":"string","enum":["IncomingTransfer","OutgoingTransfer","LockCreated","LockDeleted"],"description":"Vault history item kind."}}],"description":"Only items of these kinds. Repeat the parameter to pass several."},"required":false,"description":"Only items of these kinds. Repeat the parameter to pass several.","name":"kind","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VaultHistoryEvent"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/quarantines":{"get":{"operationId":"listVaultQuarantines","summary":"List Vault Quarantines","tags":["Vaults"],"security":[{"authenticationToken":[]}],"description":"Lists a vault's quarantines, active and released.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string"},"required":false,"name":"network","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VaultQuarantine"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/quarantines/{quarantineId}/release":{"post":{"operationId":"releaseQuarantine","summary":"Release Quarantine","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Releases quarantined funds into the available balance.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Quarantines:Release`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-qua-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault quarantine id."},"required":true,"description":"Vault quarantine id.","name":"quarantineId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultReleaseQuarantineRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/locks/{lockId}/release":{"post":{"operationId":"releaseVaultLock","summary":"Release Vault Lock","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Releases a lock, returning the locked funds to the vault's available balance. Owner only.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Locks:Release`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault lock id."},"required":true,"description":"Vault lock id.","name":"lockId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultLock"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/tags":{"put":{"operationId":"tagVault","summary":"Tag Vault","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Add tags to a vault.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Tags:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Vault Tag."},"minItems":1,"maxItems":10}},"required":["tags"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"untagVault","summary":"Untag Vault","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Removes the specified tags from a vault.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Tags:Remove`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Vault Tag."},"minItems":1}},"required":["tags"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/locks/{lockId}/transfer":{"post":{"operationId":"transferVaultLock","summary":"Transfer Vault Lock","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Sends part or all of the locked amount to the lock's beneficiary, paying the network fee from the vault's available balance. Owner only, not subject to policies. Returns the outgoing transfer. The funds stay locked while it is in flight; once confirmed the lock is deleted and any unsent remainder returns to the available balance. If the transfer fails the lock stays in place and can be transferred again.","x-mint":{"content":"#### Authentication\n\n❌ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Locks:Transfer`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault lock id."},"required":true,"description":"Vault lock id.","name":"lockId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"string","pattern":"^\\d+$","description":"The amount to send to the lock's beneficiary, in minimum denomination. At most the locked amount; the unsent remainder returns to the vault's available balance once the transfer is confirmed."}},"required":["amount"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/vaults/{vaultId}/locks/{lockId}/replace":{"post":{"operationId":"replaceVaultLock","summary":"Replace Vault Lock","tags":["Vaults"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Requests replacing a lock with a new lock at a new total amount. Owner only. Executed immediately unless a policy requires approval. On execution the lock is released, a new lock is created at the new amount (carrying over the owner, externalId and reason), and the new lock is returned. If a policy requires approval, responds 202 with the pending replace request instead.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Vaults:Locks:Release`: Always required.   \n`Vaults:Locks:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault id."},"required":true,"description":"Vault id.","name":"vaultId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^vlt-lck-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Vault lock id."},"required":true,"description":"Vault lock id.","name":"lockId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"string","pattern":"^\\d+$","description":"The new total locked amount, in minimum denomination. To release the lock entirely, use DeleteVaultLock instead."},"reason":{"type":"string","description":"An optional reason or note for the update."}},"required":["amount"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultLock"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transactions/{transactionId}/abort":{"put":{"operationId":"abortTransaction","summary":"Abort Transaction","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Aborts a transaction that is currently in 'Executing' status and has not yet been signed. Sets the transaction status to 'Failed' and removes it from the retry queue.\n\n  This is useful when a transaction is stuck in the execution pipeline (e.g., during construct or sign phase) and you want to abort it without waiting for it to fail on its own.\n\n  Unlike cancel, which creates a replacement on-chain transaction, abort simply marks the transaction as failed without any blockchain interaction.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Abort`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transaction id."},"required":true,"description":"Transaction id.","name":"transactionId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transfers/{transferId}/abort":{"put":{"operationId":"abortTransfer","summary":"Abort Transfer","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Aborts a transfer that is currently in 'Executing' status and has not yet been signed. Sets the transfer status to 'Failed' and removes it from the retry queue.\n\n  This is useful when a transfer is stuck in the execution pipeline (e.g., during construct or sign phase) and you want to abort it without waiting for it to fail on its own.\n\n  Unlike cancel, which creates a replacement on-chain transaction, abort simply marks the transfer as failed without any blockchain interaction.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transfers:Abort`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transfer id."},"required":true,"description":"Transfer id.","name":"transferId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/activate":{"post":{"operationId":"activateWallet","summary":"Activate Wallet","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Activates a wallet by deploying the account contract on-chain, making it ready for transactions.\n\n    This operation is required for wallets on networks where you need to explicitly activate your account on-chain\n    before it can be used for transactions.\n\n    - **Starknet**: Deploys the account contract using the wallet's public key to initialize the account on the blockchain. No additional parameters required.\n    - **Concordium**: Deploys the account using credential deployment information and cryptographic randomness returned by the IDApp.\n    - **Canton**: Registers the wallet on a validator. You must specify the `validatorId` to activate the wallet. Before activation, the wallet cannot be used and its address will not have a prefix.\n","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Create`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{},"additionalProperties":false,"description":"Starknet: No parameters required."},{"type":"object","properties":{"expiry":{"type":"number","description":"Expiry timestamp of the Credential Deployment"},"unsignedCdiStr":{"type":"string","description":"Unsigned Credential Deployment to sign"}},"required":["expiry","unsignedCdiStr"],"description":"The full credential deployment request object returned by the Concordium IdApp.\n    Please see the example in dfns-sdk-ts on how to retrieve the CredentialDeploymentTx and activate a Concordium wallet.\n    (https://github.com/dfns/dfns-sdk-ts/tree/m/examples/libs/concordium)\n    "},{"type":"object","properties":{"validatorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cv-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the validator on which the wallet is created for Canton networks","example":"cv-7jeof-m584r-p35ucm37ko3cqgts"}},"required":["validatorId"],"additionalProperties":false}]},"examples":{"Starknet Activation":{"value":{}},"Concordium Activation":{"value":{"expiry":1698768000,"unsignedCdiStr":"{\"proofs\":{\"challenge\":\"...\",\"commitments\":\"...\"},\"ipIdentity\":0,\"credentialPublicKeys\":{\"threshold\":1,\"keys\":{\"0\":{\"schemeId\":\"Ed25519\",\"verifyKey\":\"...\"}}},\"policy\":{\"validTo\":\"202412\",\"createdAt\":\"202410\",\"revealedAttributes\":{}},\"credId\":\"...\",\"revocationThreshold\":1,\"arData\":{\"0\":{\"encIdCredPubShare\":\"...\"}}}"}},"Canton Activation":{"value":{"validatorId":"cv-12o3k-t44tq-9ecb13hivsksiafg"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/bulk-create":{"post":{"operationId":"bulkCreateWallets","summary":"Bulk Create Wallets","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a batch of custodial wallets asynchronously via HD key derivation. Returns a job handle immediately; poll the bulk-create job endpoints for progress.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Create`: Always required   \n`Keys:Create`: Always required. Bulk creation always creates a new master [Key entity](https://docs.dfns.co/api-reference/keys) for the batch.   \n`Wallets:Tags:Add`: Required if `tags` are specified."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/BulkWalletNetwork"},"count":{"type":"integer","minimum":1,"maximum":1000000,"description":"Number of wallets to create in the batch (1 to 1000000)."},"name":{"type":"string","minLength":1,"maxLength":94,"description":"Required name prefix shared by every wallet in the batch; wallet at index N is named `${name}${N}`."},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Wallet Tag."},"maxItems":10,"description":"List of tags applied to every wallet in the batch. If specified, requires the `Wallets:Tags:Add` permission."},"keystoreId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^store-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Key store to mint the batch master key in. Defaults to your organization primary store.","example":"store-425nf-ebf0a-qq22t6qra51tj8j0"}},"required":["network","count","name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkWalletCreationJobHandle"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listBulkWalletJobs","summary":"List Bulk Wallet Jobs","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"List the org bulk wallet creation jobs, most recent first, with progress and status.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["Pending","InProgress","Completed","PartiallyCompleted","Failed"],"description":"Filter jobs by status."},"required":false,"description":"Filter jobs by status.","name":"status","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BulkWalletCreationJob"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/bulk-create/{jobId}":{"get":{"operationId":"getBulkWalletJob","summary":"Get Bulk Wallet Job","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieve a single bulk wallet creation job by its ID, with progress and status.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^bwc-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The bulk wallet creation job to retrieve."},"required":true,"description":"The bulk wallet creation job to retrieve.","name":"jobId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkWalletCreationJob"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/bulk-create/{jobId}/wallets":{"get":{"operationId":"listBulkWalletJobWallets","summary":"List Bulk Wallet Job Wallets","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"List every wallet created by a bulk wallet creation job, ordered by wallet ID and paginated. Only available once the job has completed.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^bwc-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The bulk wallet creation job whose wallets to list."},"required":true,"description":"The bulk wallet creation job whose wallets to list.","name":"jobId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":2000,"default":500,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Wallet"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transactions":{"post":{"operationId":"signAndBroadcastTransaction","summary":"Sign and Broadcast Transaction","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Sign & Broadcast transaction enables communication with any arbitrary smart contract of the target blockchain. You can construct a transaction that performs a complex task and this endpoint will sign the transaction, add the signature and broadcast it to chain. It can be used to call smart contract functions like mint tokens and even deploy new smart contracts.\n\n| Status      | Definition                                                                                                                                      |\n|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------|\n| Pending     | The request is pending approval due to a policy applied to the wallet.                                                                          |\n| Executing   | The request is approved and is in the process of being executed. note this status is only set for a short time between pending and broadcasted. |\n| Broadcasted | The transaction has been successfully written to the mempool.                                                                                   |\n| Confirmed   | The transaction has been confirmed on-chain by our indexing pipeline.                                                                           |\n| Failed      | Indicates either a system failure to complete the request or the transaction failed on chain.                                                   |\n| Rejected    | The request has been rejected by a policy approval action.                                                                                      |\n\n\n  <Info>\n  for reading from a \"view\" function on EVM chains, please use [Read Contract](https://docs.dfns.co/api-reference/networks/call-function) endpoint.\n  </Info>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Create`: Always required   \n`FeeSponsors:Use`: Required if `feeSponsorId` is specified."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Transaction"]},"transaction":{"anyOf":[{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},{"type":"object","properties":{}}],"description":"A JSON transaction object (recommended for EVM and other compatible networks) or an unsigned hex-encoded transaction."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","transaction"],"additionalProperties":false,"description":"Signs an unsigned transaction and broadcasts it to chain. This is the recommended transaction `kind` for EVM networks — use it instead of the deprecated `Evm` and `Eip1559` kinds. It accepts a JSON transaction object (type 0 legacy, 2 EIP-1559, or 4 EIP-7702) as well as a hex-encoded raw transaction.\nFor EVM transactions, you may use JSON objects:\n\n| Field                | Description                                                                                                                                                                                                                         | Type - Optional              |\n|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|\n| type                 | Ethereum transaction type. 0 for legacy transaction; 2 for EIP-1559 transaction; 4 for EIP-7702 transaction. Default is 2 if undefined.                                                                                             | Integer (optional)           |\n| to                   | The destination address or target contract. Leave undefined when the transaction is a contract deployment.                                                                                                                          | String (optional)            |\n| value                | The amount of native tokens to transfer in minimum denomination.                                                                                                                                                                    | String (optional)            |\n| data                 | ABI encoded function call data in hex format. Can also be the encoded smart contract data when the transaction is a contract deployment.                                                                                            | String (optional)            |\n| nonce                | The transaction number to guarantee idempotency. If omitted, it will be provided automatically. Note the same nonce can be submitted multiple times with a higher maxFeePerGas to \"overwrite\" existing transactions in the mempool. | Integer or String (optional) |\n| gasLimit             | The maximum amount of gas that can be spent for executing the transaction. If omitted, it will be calculated automatically.                                                                                                         | String (optional)            |\n| gasPrice             | The amount of per unit gas. Only valid for a type 0 legacy transaction. If omitted, it will be calculated automatically.                                                                                                            | String (optional)            |\n| maxFeePerGas         | The maximum amount of per unit gas willing to be paid for the transaction. Valid for type 2 and type 4 transactions. If omitted, it will be calculated automatically.                                                               | String (optional)            |\n| maxPriorityFeePerGas | The maximum amount of per unit gas to be included as a tip to the validator. Valid for type 2 and type 4 transactions. If omitted, it will be calculated automatically.                                                             | String (optional)            |\n| authorizationList    | A list that indicates what code the signer of each authorization desires to execute in the context of their EOA. Only valid for type 4 transaction.                                                                                 | Authorization (optional)     |\n\nFor Starknet transactions, you may use invocation request objects (https://github.com/starkware-libs/starknet-specs/blob/v0.8.1/api/starknet_api_openrpc.json#L2621):\n\n| Field                         | Description                                                                                         | Type - Optional                  |\n|-------------------------------|-----------------------------------------------------------------------------------------------------|----------------------------------|\n| calldata                      | **Array** of encoded function call parameters                                                       | **Array of Strings** (required)  |\n| nonce                         | Transaction nonce in hex format                                                                     | String (required)                |\n| version                       | Transaction version in hex format. Typically \"0x3\" for current transactions                         | String (required)                |\n| resourceBounds                | Gas bounds for L1, L2, and L1 data gas                                                              | Object (required)                |\n| ↳ resourceBounds.l1Gas        | L1 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l2Gas        | L2 gas configuration with maxAmount and maxPricePerUnit                                             | Object (required)                |\n| ↳ resourceBounds.l1DataGas    | L1 data gas configuration with maxAmount and maxPricePerUnit                                        | Object (required)                |\n| tip                           | Transaction tip in hex format. Typically \"0x0\"                                                      | String (required)                |\n| paymasterData                 | Paymaster data array                                                                                | Array of Strings (required)      |\n| accountDeploymentData         | Account deployment data array                                                                       | Array of Strings (required)      |\n| nonceDataAvailabilityMode     | Data availability mode for nonce. Typically \"L1\" for now                                            | String (required)                |\n| feeDataAvailabilityMode       | Data availability mode for fee. Typically \"L1\" for now                                              | String (required)                |\n\nFor Concordium transactions, you may use JSON objects (from https://github.com/Concordium/concordium-node-sdk-js/blob/sdk/12.0.0-alpha.3/packages/sdk/src/transactions/Transaction.ts#L102)\n\n| Field                            | Description                                                                                                                                                  | Type - Optional\n|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|\n| Header                           | Transaction header for the intermediary state of account transactions, i.e. prior to being signing.                                                          | Object (required)               |\n| ↳ Header.executionEnergyAmount   | The destination address or target contract. Leave undefined when the transaction is a contract deployment.                                                   | String/Number/BigInt (required) |\n| ↳ Header.numSignatures           | The number of signatures the transaction can hold. If \"undefined\", this will be defined at the time of signing                                               | Integer (optional)              |\n| ↳ Header.sender                  | The account address that is source of this transaction                                                                                                       | String (optional)               |\n| ↳ Header.nonce                   | The account nonce                                                                                                                                            | String/Number/BigInt (optional) |\n| ↳ Header.expiry                  | expiration of the transaction                                                                                                                                | Integer (optional)              |\n| Payload                          | The transaction account payload in JSON format (https://github.com/Concordium/concordium-node-sdk-js/blob/main/packages/sdk/src/accountTransactions.ts#L646) | Object (required)               |\n\n\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"to\": \"0x00fb58432ef9d418bf6688bcf0a226d2fcaa18e2\",\n    \"data\": \"0x40d097c3000000000000000000000000d2f77f85a50cdd650ca562f3a180284e1d5b4934\",\n    \"maxFeePerGas\": \"1626000000000\",\n    \"maxPriorityFeePerGas\": \"1332000000000\"\n  }\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"type\": \"INVOKE\",\n    \"calldata\": [\n      \"1\",\n      \"2009894490435840142178314390393166646092438090257831307886760648929397478285\",\n      \"232670485425082704932579856502088130646006032362877466777181098476241604910\",\n      \"3\",\n      \"296727860213112272332383824629975240127004024814636931420022890499591637514\",\n      \"1\",\n      \"0\"\n    ],\n    \"nonce\": \"0x51\",\n    \"version\": \"0x3\",\n    \"resourceBounds\": {\n      \"l1Gas\": { \"maxAmount\": \"0x0\", \"maxPricePerUnit\": \"0x239a01ff6e6c\" },\n      \"l2Gas\": { \"maxAmount\": \"0x1694a0\", \"maxPricePerUnit\": \"0x10c388d00\" },\n      \"l1DataGas\": { \"maxAmount\": \"0x120\", \"maxPricePerUnit\": \"0x98e8\" }\n    },\n    \"tip\": \"0x0\",\n    \"paymasterData\": [],\n    \"accountDeploymentData\": [],\n    \"nonceDataAvailabilityMode\": \"L1\",\n    \"feeDataAvailabilityMode\": \"L1\",\n  }\n}\n```\n\n```json\n{\n  \"kind\": \"Transaction\",\n  \"transaction\": {\n    \"header\": {\n      \"sender\": undefined,\n      \"nonce\": undefined,\n      \"expiry\": undefined,\n      \"executionEnergyAmount\": 300\n    },\n    \"payload\": {\n      \"type\": \"transferWithMemo\",\n      \"toAddress\": \"4HhAcToZs6rtxGcgsBRS3VcjeAECPTTSTFVUKS6rBSVEZAPL6d\",\n      \"memo\": \"000968656c6c6f20636364\",\n      \"amount\": \"1\"\n    }\n  }\n}\n```\n","title":"Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Psbt"]},"psbt":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"The hex encoded PSBT."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","psbt"],"additionalProperties":false,"description":"Signs a partially signed Bitcoin / Litecoin transaction.","title":"PSBT"},{"type":"object","properties":{"kind":{"type":"string","enum":["SignDocDirect"]},"signDoc":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","signDoc"],"additionalProperties":false,"description":"Signs an unsigned transaction using [sign mode direct](https://docs.cosmos.network/main/learn/advanced/transactions#sign_mode_direct-preferred).","title":"SignDocDirect"},{"type":"object","properties":{"kind":{"type":"string","enum":["UserOperations"]},"userOperations":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address or target contract."},"value":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"data":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$","description":"ABI encoded function call data in hex format."}},"required":["to"]}},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"A fee sponsor id to sponsor the transaction fee by another wallet. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","userOperations","feeSponsorId"],"additionalProperties":false,"description":"Signs one or more user operations and broadcasts to chain using a sponsored transaction. Used for invoking arbitrary smart contract calls, including batch operations, with a [fee sponsor](https://docs.dfns.co/features/fee-sponsors).\n\nCan only be used with a fee sponsor. Unsponsored user operations are not supported.","title":"EVM Sponsored transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["FunctionCall"]},"call":{"type":"object","properties":{},"description":"Function call arguments"},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind","call"],"additionalProperties":false,"description":"Calls an on-chain function that mutates state.","title":"Function Call"},{"type":"object","properties":{"kind":{"type":"string","enum":["TransferPreapproval"]},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Enable canton coin auto approval.","title":"Canton Transfer Preapproval"},{"type":"object","properties":{"kind":{"type":"string","enum":["Evm"]},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"value":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"data":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"nonce":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}],"description":"The current nonce of the signer EOA."},"gasLimit":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Deprecated. Only support type 2 transactions. Use the new JSON format with `Transaction` kind instead which has support for legacy and type 4 transactions.","title":"<Deprecated> EVM Transaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Eip1559"]},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"value":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"data":{"type":"string","pattern":"^(0x)?([0-9a-fA-F][0-9a-fA-F])*$"},"nonce":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"gasLimit":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"maxFeePerGas":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"maxPriorityFeePerGas":{"anyOf":[{"type":"string","pattern":"^\\d+$"},{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}]},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Deprecated. Only support type 2 transactions. Use the new JSON format with `Transaction` kind instead which has support for legacy and type 4 transactions.","title":"<Deprecated> EVM EIP-1559"},{"type":"object","properties":{"kind":{"type":"string","enum":["CreateSolanaNonceAccounts"]},"nonceAuthority":{"type":"string","description":"Optional Solana address. The wallet that will own the nonce accounts (be their on-chain authority). When omitted, the URL wallet bootstraps for itself. When set, the URL wallet pays the rent and signs the bootstrap, but the resulting accounts' authority is this address — used to bootstrap on behalf of an offline wallet that can't sign within the 90-second blockhash window."},"count":{"type":"integer","exclusiveMinimum":0,"maximum":8,"description":"Optional. Number of nonce accounts to create in one bootstrap transaction (1–8; capped by Solana max-tx-size budget). Defaults to 1."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"Priority for the bootstrap fee. Defaults to Standard."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Creates Solana durable-nonce accounts owned by the calling wallet (or by `nonceAuthority` for cross-bootstrap). Pre-populates the wallet's nonce account pool so subsequent transfers can use `useDurableNonce: true`.","title":"Create Solana Nonce Accounts"},{"type":"object","properties":{"kind":{"type":"string","enum":["AcceptInboundAsset"]},"issuer":{"type":"string","description":"Stellar (G-address) or XRPL (r-address) issuer of the asset."},"assetCode":{"type":"string","description":"Stellar asset code (1–12 ASCII alphanumeric chars)."},"currency":{"type":"string","description":"XRPL IOU currency code."},"assetId":{"type":"string","pattern":"^\\d+$","description":"Algorand Standard Asset (ASA) id."},"tokenId":{"type":"string","description":"Hedera token entity id, e.g. \"0.0.456858\"."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key (read more [here](https://docs.dfns.co/api-reference/idempotency))."}},"required":["kind"],"additionalProperties":false,"description":"Accept a non-native asset into the wallet on chains that gate inbound holding at the protocol level. Maps to Stellar `ChangeTrust`, XRPL `TrustSet`, Algorand asset opt-in (a 0-amount asset transfer to self), Hedera `TokenAssociate`, or Canton `TransferPreapproval`. The body fields differ per network — see the field descriptions.","title":"AcceptInboundAsset"}]},"examples":{"Eip1559":{"value":{"kind":"Eip1559","to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffc","value":"1","maxFeePerGas":"1000000000","maxPriorityFeePerGas":"1000000"}},"EVM Transaction":{"value":{"kind":"Transaction","transaction":{"to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffb","value":"1"}}},"Function Call":{"value":{"kind":"FunctionCall","call":{"contract":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","abi":{"type":"function","name":"transfer","stateMutability":"nonpayable","inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},"calldata":{"to":"0xd964d741998edc275f3800eed113378a391951d9","value":"1000000"}}}},"Starknet Transaction":{"value":{"kind":"Transaction","transaction":{"calldata":["1","2009894490435840142178314390393166646092438090257831307886760648929397478285","232670485425082704932579856502088130646006032362877466777181098476241604910","3","296727860213112272332383824629975240127004024814636931420022890499591637514","1","0"],"nonce":"0x51","version":"0x3","resourceBounds":{"l1Gas":{"maxAmount":"0x0","maxPricePerUnit":"0x239a01ff6e6c"},"l2Gas":{"maxAmount":"0x1694a0","maxPricePerUnit":"0x10c388d00"},"l1DataGas":{"maxAmount":"0x120","maxPricePerUnit":"0x98e8"}},"tip":"0x0","paymasterData":[],"accountDeploymentData":[],"nonceDataAvailabilityMode":"L1","feeDataAvailabilityMode":"L1"}}},"Concordium Transaction":{"value":{"kind":"Transaction","transaction":{"header":{"executionEnergyAmount":300},"payload":{"type":"transferWithMemo","toAddress":"4HhAcToZs6rtxGcgsBRS3VcjeAECPTTSTFVUKS6rBSVEZAPL6d","memo":"000968656c6c6f20636364","amount":"1"}}}},"Psbt":{"value":{"kind":"Psbt","psbt":"0x70736274ff0100710200000001ca17431a33a13d3ef8bfb041c8546071f9d3a609abe3c91efbed83265e1426730100000000ffffffff02e803000000000000160014a40a65b46ff36c53f1afb8e35e25a4c0bcfc9979d6d1150000000000160014237ad8ba2ffd992f6ebc7ab388e77f00fc87d1c9000000000001011f54d6150000000000160014237ad8ba2ffd992f6ebc7ab388e77f00fc87d1c9000000"}},"Transaction":{"value":{"kind":"Transaction","transaction":"0xe703847735941a82520894f0965f5eb35ace69f01b77031f2cff22daca622887470de4df82000080"}},"SignDoc":{"value":{"kind":"SignDocDirect","signDoc":"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"}},"User Operations":{"value":{"kind":"UserOperations","userOperations":[{"to":"0x1c7d4b196cb0c7b01d743fbc6116a902379c7238","data":"a9059cbb000000000000000000000000d964d741998edc275f3800eed113378a391951d90000000000000000000000000000000000000000000000000000000000000001"},{"to":"0x1c7d4b196cb0c7b01d743fbc6116a902379c7238","data":"a9059cbb000000000000000000000000e5a2ebc128e262ab1e3bd02bffbe16911adfbffb0000000000000000000000000000000000000000000000000000000000000001"}],"feeSponsorId":"fs-5ercu-e9r9u-8fpqi8bvu2eah0e2"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listTransactions","summary":"List Transactions","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves a list of transactions requests for the specified wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TransactionRequest"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"}},"required":["items","walletId"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transactions/{transactionId}/cancel":{"post":{"operationId":"cancelTransaction","summary":"Cancel Transaction","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Cancels an EVM transaction by creating a replacement transaction with the same nonce. The new transaction sends 0 value to the same address, effectively nullifying the original transaction.\n  \n  This endpoint works for:\n  - EVM-compatible networks (Ethereum, Polygon, BSC, etc.)\n  - Transactions that are in 'Broadcasted' status (pending inclusion in a block)\n  - Transactions that are in 'Failed' status, but failed off-chain (before being broadcasted to the network)\n  \n  The cancellation works by:\n  1. Extracting the nonce from the original transaction's signed data\n  2. Creating a new transaction to the same wallet address with 0 amount\n  3. Using the same nonce to either:\n     - Replace the original transaction in the mempool (if it was broadcasted)\n     - Consume the nonce that was reserved but not used (if the transaction failed off-chain)\n  \n  Note: For transactions that were broadcasted on-chain, success is not guaranteed as it depends on network conditions and whether the original transaction has already been mined.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Create`: Always required.   \n`Wallets:Transactions:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transaction id."},"required":true,"description":"Transaction id.","name":"transactionId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transfers/{transferId}/cancel":{"post":{"operationId":"cancelTransfer","summary":"Cancel Transfer","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Cancels an EVM transfer by creating a replacement transaction with the same nonce. The new transaction sends 0 value to the same address, effectively nullifying the original transfer.\n  \n  This endpoint works for:\n  - EVM-compatible networks (Ethereum, Polygon, BSC, etc.)\n  - Transfers that are in 'Broadcasted' status (pending inclusion in a block)\n  - Transfers that are in 'Failed' status, but failed off-chain (before being broadcasted to the network)\n  \n  The cancellation works by:\n  1. Extracting the nonce from the original transfer's signed data\n  2. Creating a new transaction to the same wallet address with 0 amount\n  3. Using the same nonce to either:\n     - Replace the original transaction in the mempool (if it was broadcasted)\n     - Consume the nonce that was reserved but not used (if the transfer failed off-chain)\n  \n  Note: For transfers that were broadcasted on-chain, success is not guaranteed as it depends on network conditions and whether the original transaction has already been mined.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Create`: Always required.   \n`Wallets:Transfers:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transfer id."},"required":true,"description":"Transfer id.","name":"transferId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/canton/ledger-api":{"post":{"operationId":"cantonLedgerApiProxy","x-dfns-deprecated-operation-id":"proxyARequestToTheCantonLedgerApi","summary":"Proxy a request to the Canton Ledger API","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Proxies a request to the Canton Ledger API associated with this wallet, using the validator's OAuth2 credentials. Restricted to a curated allow-list of read-style resources. Used to satisfy the Canton WalletConnect `canton_ledgerApi` method.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"requestMethod":{"type":"string","enum":["GET","POST"],"description":"The HTTP method used against the Canton Ledger API."},"resource":{"type":"string","minLength":1,"description":"The Canton Ledger API resource path, beginning with `/v2/` (e.g. `/v2/state/active-contracts`)."},"body":{"description":"Optional JSON body, forwarded verbatim for POST resources. Must be omitted for GET resources."}},"required":["requestMethod","resource"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transactions/{transactionId}/speed-up":{"post":{"operationId":"speedUpTransaction","summary":"Speed Up Transaction","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Speeds up a transaction by creating a replacement transaction with the same parameters but higher gas fees.\n  \n  This endpoint only works for:\n  - EVM-compatible networks (Ethereum, Polygon, BSC, etc.)\n  - Transactions that are in 'Broadcasted' status (already submitted to blockchain, but not confirmed yet)\n  \n  The speed-up works by:\n  1. Extracting the parameters from the original broadcasted transaction\n  2. Creating a new transaction with the same nonce, recipient, value, and data\n  3. Using higher gas fees (maximum between 10% bump or Fast network fees)\n  4. Replacing the original transaction in the mempool\n  \n  Note: Success is not guaranteed as it depends on network conditions and whether the original transaction has already been mined.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Create`: Always required.   \n`Wallets:Transactions:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transaction id."},"required":true,"description":"Transaction id.","name":"transactionId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transfers/{transferId}/speed-up":{"post":{"operationId":"speedUpTransfer","summary":"Speed Up Transfer","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Speeds up a transfer by creating a replacement transaction with the same parameters but higher gas fees.\n  \n  This endpoint only works for:\n  - EVM-compatible networks (Ethereum, Polygon, BSC, etc.)\n  - Transfers that are in 'Broadcasted' status (already submitted to blockchain, but not confirmed yet)\n  \n  The speed-up works by:\n  1. Extracting the parameters from the original broadcasted transfer\n  2. Creating a new transaction with the same nonce, recipient, value, and data\n  3. Using higher gas fees (maximum between 10% bump or Fast network fees)\n  4. Replacing the original transaction in the mempool\n  \n  Note: Success is not guaranteed as it depends on network conditions and whether the original transaction has already been mined.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Create`: Always required.   \n`Wallets:Transfers:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transfer id."},"required":true,"description":"Transfer id.","name":"transferId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets":{"post":{"operationId":"createWallet","summary":"Create Wallet","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Creates a new Wallet associated with the given chain (such as Bitcoin or Ethereum ). Returns a new wallet entity.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Create`: Always required   \n`Keys:Create`: Required if wallet creation also creates a new [Key entity](https://docs.dfns.co/api-reference/keys). This is the default behavior.   \n`Keys:Reuse`: Required if `signingKey.id` is specified. Wallet will reuse an existing key instead of creating a new one.   \n`Keys:ChildKeys:Create`: Required if `signingKey.deriveFrom` is specified.   \n`Keys:Delegate`: Required if `delegateTo` is specified.   \n`Wallets:Tags:Add`: Required if `tags` are specified."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"network":{"type":"string","description":"Network used for the wallet.","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"]},"name":{"type":"string","maxLength":100,"description":"Wallet nickname."},"signingKey":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Use this parameter to create a wallet from an existing key. This enables one key to be used across multiple networks and have the same address if networks share the same address format, ex. `Ethereum` and `Polygon`. If specified, requires the `Keys:Reuse` permission. If the key is delegated to an end user, then the new wallet will be automatically delegated to the same end user.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"scheme":{"allOf":[{"$ref":"#/components/schemas/KeyScheme"},{"description":"Use this to specify the new key scheme for networks that support multiple key formats. ex. use `Schnorr` to create a `Bitcoin Taproot` wallet."}]},"curve":{"allOf":[{"$ref":"#/components/schemas/KeyCurve"},{"description":"Use this to specify the new key curve for networks that support multiple key formats."}]},"storeId":{"type":"string","description":"Use this to specify the key store the key material is saved to."},"deriveFrom":{"type":"object","properties":{"keyId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^key-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The master key to derive from.","example":"key-01snl-t56gb-j8tsok0vn802p80i"},"path":{"type":"string","pattern":"^m(\\/(0|[1-9]\\d{0,9}))+$","description":"Use this to specify the derivation path of the signing key. One will be auto generated if left blank."}},"required":["keyId"],"description":"Use this for hierarchical deterministic key derivation."}},"description":"Options for the wallet's underlying key"},"delegateTo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^us-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the end user to delegate this wallet to. The wallet will only be usable by the end user. More info [here](https://docs.dfns.co/advanced/delegated-wallets).","example":"us-6b58p-r53sr-rlrd3l5cj3uc4ome"},"delayDelegation":{"type":"boolean","default":false,"description":"Specify if you want to create the wallet from a service account and later [delegate it](/api-reference/keys/delegate-key) to an end user."},"externalId":{"type":"string","maxLength":100,"description":"User-defined value that can be used to correlate the entity with an external system"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Wallet Tag."},"maxItems":10,"description":"List of tags to be created for this wallet. If specified, requires the `Wallets:Tags:Add` permission, like the [Tag Wallet](https://docs.dfns.co/api-reference/wallets/tag-wallet) endpoint."}},"required":["network"],"additionalProperties":false},"examples":{"Bitcoin Taproot":{"value":{"network":"BitcoinSignet","signingKey":{"scheme":"Schnorr"}}},"Multi chain":{"value":{"network":"BaseSepolia","signingKey":{"id":"key-b56ng-qm1c8-pqaki69j8jmmafo"}}},"Ethereum":{"value":{"network":"Ethereum","name":"trading hot wallet"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Wallet"},{"additionalProperties":false}]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listWallets","summary":"List Wallets","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves the list of Wallets in your organization. You can filter the results by owner (either by owner id or owner username). The list cannot be filtered by tags or externalId — those are set at wallet creation only; to segment wallets by tag or externalId, list them and filter client-side, or maintain the mapping in your own system. Pagination is supported via limit and paginationToken parameters.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Filter by owner id or username."},"required":false,"description":"Filter by owner id or username.","name":"owner","in":"query"},{"schema":{"type":"string","minLength":1,"description":"@deprecated use owner instead"},"required":false,"description":"@deprecated use owner instead","name":"ownerId","in":"query"},{"schema":{"type":"string","minLength":1,"description":"@deprecated use owner instead"},"required":false,"description":"@deprecated use owner instead","name":"ownerUsername","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Wallet"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transactions/{transactionId}":{"get":{"operationId":"getTransaction","summary":"Get Transaction","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieve information about a specific transaction.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transactions:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transaction id."},"required":true,"description":"Transaction id.","name":"transactionId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transfers/{transferId}":{"get":{"operationId":"getTransfer","summary":"Get Transfer","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves a Wallet Transfer Request by its ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transfers:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Transfer id."},"required":true,"description":"Transfer id.","name":"transferId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}":{"get":{"operationId":"getWallet","summary":"Get Wallet","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves a Wallet information by its ID.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The wallet to retrieve."},"required":true,"description":"The wallet to retrieve.","name":"walletId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Wallet"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateWallet","summary":"Update Wallet","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Updates the name of an existing wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"walletId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":["string","null"],"maxLength":100},"externalId":{"type":["string","null"],"maxLength":100}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Wallet"},{"additionalProperties":false}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/assets":{"get":{"operationId":"getWalletAssets","summary":"Get Wallet Assets","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves a list of assets owned by the specified wallet.  Return values vary by chain as shown below. Each asset includes its current USD market price (`quotes`); pass `netWorth=true` to also return the wallet's total USD value (net worth).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"walletId","in":"path"},{"schema":{"type":"string","enum":["true"],"description":"Set to `true` to include the total fiat value (net worth) of all assets held in the wallet."},"required":false,"description":"Set to `true` to include the total fiat value (net worth) of all assets held in the wallet.","name":"netWorth","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"walletId":{"type":"string"},"network":{"$ref":"#/components/schemas/Network"},"assets":{"type":"array","items":{"allOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]}},"required":["kind"],"title":"Native assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Aip21"]},"metadata":{"type":"string"}},"required":["kind","metadata"],"title":"Aptos Fungible Assets (AIP-21)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string"}},"required":["kind","assetId"],"title":"Algorand Standard Assets (ASAs)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis2"]},"tokenAddress":{"type":"string"}},"required":["kind","tokenAddress"],"title":"Concordium CIS-2 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20","Snip2","Trc20"]},"contract":{"type":"string"}},"required":["kind","contract"],"title":"EVM ERC-20/Starknet SNIP-2/TRON TRC-20 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc7984"]},"contract":{"type":"string"}},"required":["kind","contract"],"title":"EVM ERC-7984 confidential tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hts"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"Hedera tokens (HTS)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Iou"]},"currency":{"type":"string"},"issuer":{"type":"string"}},"required":["kind","currency","issuer"],"title":"XRP Ledger IOU tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cip56"]},"instrumentId":{"type":"string"},"instrumentAdmin":{"type":"string"}},"required":["kind","instrumentId","instrumentAdmin"],"title":"Canton CIP-56 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Coin","LockedCoin"]},"coin":{"type":"string"}},"required":["kind","coin"],"title":"Sui/IOTA Coin assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Xls33"]},"issuanceId":{"type":"string"}},"required":["kind","issuanceId"],"title":"XRP Ledger MPL (XLS-33) tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asset"]},"assetId":{"type":"string"}},"required":["kind","assetId"],"title":"Polymesh/Cardano assets"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis7"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"Concordium PLTs ( CIS-7 tokens)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string"},"assetCode":{"type":"string"}},"required":["kind","issuer","assetCode"],"title":"Stellar SEP-41 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string"}},"required":["kind","tokenId"],"title":"TRON TRC-10 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"mint":{"type":"string"}},"required":["kind","mint"],"title":"Solana SPL/SPL2022 tokens"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"master":{"type":"string"}},"required":["kind","master"],"title":"TON TEP-74 Jetton"}]},{"type":"object","properties":{"symbol":{"type":"string"},"decimals":{"type":"number"},"verified":{"type":"boolean"},"balance":{"type":"string"},"quotes":{"type":"object","properties":{"USD":{"type":"number"}},"description":"Current market price of the asset, keyed by fiat currency (e.g. USD). Sourced from DFNS market data."}},"required":["decimals","balance"]}]}},"netWorth":{"type":"object","properties":{"USD":{"type":"number"}},"description":"Total fiat value (net worth) of all assets held in the wallet, keyed by currency (e.g. USD). Returned only when the request includes `netWorth=true`."}},"required":["walletId","network","assets"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/history":{"get":{"operationId":"getWalletHistory","summary":"Get Wallet History","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves a list of historical on chain activities for the specified wallet.\n\nThe list reflects the indexed on-chain activity: it includes confirmed transactions only.\n\nIf you need to list your on-going or failed transactions please use the related endpoints (\n[List Transfers](https://docs.dfns.co/api-reference/wallets/list-transfers) or\n[List Transactions](https://docs.dfns.co/api-reference/wallets/list-transactions)\ndepending on the API you are using).","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet you want to get the history from."},"required":true,"description":"Wallet you want to get the history from.","name":"walletId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","enum":["In","Out"],"description":"Transfer direction."},"required":false,"description":"Transfer direction.","name":"direction","in":"query"},{"schema":{"type":"string","enum":["NativeTransfer","Aip21Transfer","AsaTransfer","AssetTransfer","Cip56Transfer","Cis2Transfer","Cis7Transfer","CoinTransfer","Erc20Transfer","Erc721Transfer","Erc7984Transfer","HederaErc20Transfer","HederaErc721Transfer","Hip17Transfer","HtsTransfer","IouTransfer","LockedCoinTransfer","Sep41Transfer","Snip2Transfer","Snip3Transfer","SplTransfer","Spl2022Transfer","Tep74Transfer","Trc10Transfer","Trc20Transfer","Trc721Transfer","UtxoTransfer","Xls33Transfer"],"description":"Blockchain event kind."},"required":false,"description":"Blockchain event kind.","name":"kind","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"contract","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WalletHistoryEvent"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"network":{"$ref":"#/components/schemas/Network"}},"required":["items","walletId","network"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/nfts":{"get":{"operationId":"getWalletNfts","summary":"Get Wallet Nfts","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves a list of NFTs owned by the specified Wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"walletId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"walletId":{"type":"string"},"network":{"$ref":"#/components/schemas/Network"},"nfts":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string","description":"The NFT id."},"symbol":{"type":"string","description":"The NFT symbol."},"tokenUri":{"type":"string","description":"The NFT metadata URI."}},"required":["kind","assetId"],"title":"Algorand NFT"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc721","Snip3","Trc721"]},"contract":{"type":"string","description":"contract address."},"tokenId":{"type":"string","description":"The NFT id."},"symbol":{"type":"string","description":"The NFT symbol."},"tokenUri":{"type":"string","description":"The NFT metadata URI."}},"required":["kind","contract","tokenId"],"title":"ERC/TRC-721 NFT"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hip17"]},"tokenId":{"type":"string","description":"The NFT id."},"serialNumber":{"type":"string","description":"The NFT serial number."},"symbol":{"type":"string","description":"The NFT symbol."},"tokenUri":{"type":"string","description":"The NFT metadata URI."}},"required":["kind","tokenId","serialNumber"],"title":"Hedera NFT"}]}}},"required":["walletId","network","nfts"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/import":{"post":{"operationId":"importWallet","summary":"Import Wallet","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"<Warning>\nThis endpoint is not enabled by default. [Contact Dfns](https://support.dfns.co) to have it activated.\n</Warning>\n\nDfns secures private keys by generating them as MPC key shares in our decentralized key management network.  This happens by default when you [create a wallet](https://docs.dfns.co/api-reference/wallets/create-wallet).\n\nIn some circumstances, however, you may need to import an existing wallet (an existing private key) into Dfns infrastructure, instead of creating a brand new wallet with Dfns and transfer funds to it. As an example, you might want to keep an existing wallet if its address is tied to a smart contract which you don't want to re-deploy.\n\nIn such a case, Dfns exposes this wallet import API endpoint, which can be used in conjunction with our [import SDK](https://github.com/dfns/dfns-sdk-ts/tree/m/examples/sdk/import-wallet).   Note this is intended to be used only to migrate wallets when first onboarding onto the Dfns platform.\n\n<Danger>\nDfns can not guarantee the security of imported wallets, as we have no way to control who had access to the private key prior to import.  For this reason, this feature is restricted to Enterprise customers who have signed a contractual addendum limiting our liability for imported keys.  Please contact your sales representative for more information.\n</Danger>\n","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Keys:Import`: Always required.   \n`Wallets:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":100,"description":"Nickname for the imported key."},"curve":{"type":"string","enum":["ed25519","secp256k1","stark"],"description":"The elliptic curve of the private key being imported."},"protocol":{"anyOf":[{"type":"string","enum":["CGGMP24","FROST","FROST_BITCOIN","GLOW20_DH","KU23"]},{"type":"string","enum":["CGGMP21"]}],"description":"The MPC protocol the key shares are formatted for."},"minSigners":{"type":"integer","exclusiveMinimum":0,"description":"The TSS threshold: the minimum number of key shares required to sign."},"encryptedKeyShares":{"type":"array","items":{"type":"object","properties":{"signerId":{"type":"string","minLength":1,"description":"ID of the signer this key share is for."},"encryptedKeyShare":{"type":"string","minLength":1,"description":"The key share encrypted to the target signer."}},"required":["signerId","encryptedKeyShare"]},"minItems":1,"description":"One key share per signer, each encrypted to that signer."},"network":{"type":"string","enum":["Algorand","AlgorandTestnet","Aptos","AptosTestnet","ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Berachain","BerachainBepolia","Bitcoin","BitcoinSignet","BitcoinTestnet4","BitcoinCash","Bob","BobSepolia","Bsc","BscTestnet","Canton","CantonTestnet","Cardano","CardanoPreprod","Concordium","ConcordiumTestnet","Celo","CeloSepolia","Codex","CodexSepolia","CosmosHub4","CosmosIcsTestnet","Dogecoin","DogecoinTestnet","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","Hedera","HederaTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","InternetComputer","Ion","IonTestnet","Iota","IotaTestnet","Kusama","KusamaAssetHub","Litecoin","LitecoinTestnet","Monad","MonadTestnet","Movement","MovementTestnet","Near","NearTestnet","Optimism","OptimismSepolia","Origyn","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Paseo","PaseoAssetHub","Polkadot","PolkadotAssetHub","Polygon","PolygonAmoy","Polymesh","PolymeshTestnet","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiAtlantic2","SeiPacific1","Solana","SolanaDevnet","Sonic","SonicTestnet","Starknet","StarknetSepolia","Stellar","StellarTestnet","Sui","SuiTestnet","Tezos","TezosShadownet","Tempo","TempoModerato","Tsc","TscTestnet1","Ton","TonTestnet","Tron","TronNile","Westend","WestendAssetHub","Xdc","XdcApothem","XLayer","XLayerSepolia","XrpLedger","XrpLedgerTestnet"]},"externalId":{"type":"string"}},"required":["curve","protocol","minSigners","encryptedKeyShares","network"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Wallet"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/transfers":{"get":{"operationId":"listTransfers","summary":"List Transfers","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieves a list of transfer requests for the specified wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transfers:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TransferRequest"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"}},"required":["items","walletId"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"transferAsset","summary":"Transfer Asset","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"\nTransfer an asset out of the specified wallet to a destination address.\nFor all fungible token transfers, the transfer amount must be specified in the minimum denomination of that token.\nFor example, use the amount in Satoshi for a Bitcoin transfer, or the amount in Wei for an Ethereum transfer etc.\n\nSee the different options in the Body description below. You can also select your kind of transfers in the payload examples in the different languages.\n\n<Tip>\nBinance chains users can use ERC transfers for BEP tokens and Native transfers for BNB.\n</Tip>\n\n<Note>\nSome blockchains may require additional steps before the transfer can be completed, such as creating a destination account (e.g., Stellar). Please refer to the specific blockchain documentation for any prerequisites or additional requirements.\n</Note>\n    ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Transfers:Create`: Always required   \n`FeeSponsors:Use`: Required if `feeSponsorId` is specified."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"The source wallet id (`wa-...`)."},"required":true,"description":"The source wallet id (`wa-...`).","name":"walletId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Native"]},"to":{"type":"string","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of native tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag (supported networks only)."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer. All EVM compatible networks and Bitcoin support `priority`. Not supported for other networks. It uses the [estimate fees](https://docs.dfns.co/api-reference/networks/estimate-fees) API to calculate the transfer fees. When not specified, defaults to `Standard` priority."},"createDestinationAccount":{"type":"boolean","description":"Whether to create the destination account on chains that require account creation (e.g., Stellar). Only valid for chains that require the receiver account to exist before transfer."},"offer":{"type":"boolean","description":"Optional field for Canton, if true it will create a transfer offer."},"expiresAt":{"type":"string","format":"date-time","description":"Optional field for Canton, especially useful in the context of offers"},"useDurableNonce":{"type":"boolean","description":"Optional Solana-only flag. When `true` the SOL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). Use this for offline-signing flows where the construct → broadcast gap may exceed 90 seconds. The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","amount"],"additionalProperties":false,"description":"Transfer the native token of the network. All networks support the native token type.","title":"Native Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Aip21"]},"metadata":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The asset metadata address. "},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","metadata","to","amount"],"additionalProperties":false,"description":"Transfer Aptos fungible asset that implement the [AIP-21 specification](https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-21.md).","title":"Aptos Fungible Asset (AIP-21)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asa"]},"assetId":{"type":"string","pattern":"^\\d+$","description":"The token asset id. "},"to":{"type":"string","pattern":"^[A-Z0-9]{58}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","assetId","to","amount"],"additionalProperties":false,"description":"Transfer Algorand standard assets, or [ASAs](https://developer.algorand.org/docs/get-details/asa/).","title":"Algorand Standard Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Asset"]},"assetId":{"type":"string","description":"The token asset id. "},"to":{"type":"string","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","assetId","to","amount"],"additionalProperties":false,"description":"Transfer Cardano assets following [Mary update](https://docs.cardano.org/about-cardano/evolution/upgrades/mary)","title":"Cardano Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cip56"]},"instrumentAdmin":{"type":"string","pattern":"^[a-zA-Z0-9-_]*::1220[a-f0-9]{64}$","description":"The instrument admin address."},"instrumentId":{"type":"string","description":"The instrument id."},"to":{"type":"string","pattern":"^[a-zA-Z0-9-_]*::1220[a-f0-9]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo, recorded as the transfer reason on the ledger."},"offer":{"type":"boolean","description":"If true it will create a transfer offer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","instrumentAdmin","instrumentId","to","amount"],"additionalProperties":false,"description":"Transfer standard tokens that implement the [CIP-56 specification](https://github.com/global-synchronizer-foundation/cips/blob/main/cip-0056/cip-0056.md).","title":"Canton Standard Token (CIP-56)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis2"]},"to":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{50}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"tokenAddress":{"type":"string","description":"The token address following (https://proposals.concordium.com/CIS/cis-2.html#token-address)."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","amount","tokenAddress"],"additionalProperties":false,"description":"Transfer tokens that implement the [CIS-2 specification](https://proposals.concordium.software/CIS/cis-2.html).","title":"CIS-2 Standard"},{"type":"object","properties":{"kind":{"type":"string","enum":["Cis7"]},"to":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{50}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"tokenId":{"type":"string","description":"The Cis7 token identifier."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","amount","tokenId"],"additionalProperties":false,"description":"Transfer Concordium protocol level tokens. (https://proposals.concordium.com/CIS/cis-7.html#cis-7-protocol-level-tokens-plts)","title":"Concordium Protocol Level Token (CIS-7)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Coin"]},"coin":{"type":"string","description":"The coin identifier."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","coin","to","amount"],"additionalProperties":false,"description":"Transfer Sui fungible assets that implement [coin standard](https://docs.sui.io/standards/coin).","title":"Sui Coin"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-20 contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","amount"],"additionalProperties":false,"description":"Send (initiate) an ERC-20 or BEP-20 token transfer. Use request `kind: \"Erc20\"` on all EVM chains, including BNB Smart Chain (BEP-20 tokens). Note: `Erc20` is the request kind; the wallet-history and webhook event you read back later is `Erc20Transfer`. Transfers fungible tokens that implement the [ERC-20 specification](https://eips.ethereum.org/EIPS/eip-20).","title":"EVM Fungible Token (ERC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc721"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-721 contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address."},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token to transfer."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","tokenId"],"additionalProperties":false,"description":"Transfer non-fungible tokens that implement the [ERC-721 specification](https://eips.ethereum.org/EIPS/eip-721)","title":"EVM Non Fungible Token (ERC-721)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Erc7984"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The ERC-7984 confidential token contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"priority":{"type":"string","enum":["Slow","Standard","Fast"],"description":"The priority that determines the fees paid for the transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","amount"],"additionalProperties":false,"description":"Transfer confidential tokens that implement the [ERC-7984 specification](https://eips.ethereum.org/EIPS/eip-7984). The transfer amount is encrypted on-chain using Fully Homomorphic Encryption (FHE).","title":"EVM Confidential Token (ERC-7984)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hip17"]},"tokenId":{"type":"string","description":"The token to transfer."},"serialNumber":{"type":"string","pattern":"^\\d+$"},"to":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|0\\.0\\.(\\d+|[0-9a-fA-F]{40}|[0-9a-fA-F]{64,}))$","description":"The destination address."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","tokenId","serialNumber","to"],"additionalProperties":false,"description":"","title":"Hedera Non-Fungible Token (HIP-17)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Hts"]},"tokenId":{"type":"string","description":"The token to transfer."},"to":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|0\\.0\\.(\\d+|[0-9a-fA-F]{40}|[0-9a-fA-F]{64,}))$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","tokenId","to","amount"],"additionalProperties":false,"description":"","title":"Hedera Tokens (HTS)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Iou"]},"currency":{"type":"string","description":"The IOU currency code."},"issuer":{"type":"string","pattern":"^r[1-9A-HJ-NP-Za-km-z]{24,34}$","description":"The IOU issuer address."},"to":{"type":"string","pattern":"^r[1-9A-HJ-NP-Za-km-z]{24,34}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","currency","issuer","to","amount"],"additionalProperties":false,"description":"Transfer XRPL IOU tokens with specified currency and issuer. (https://xrpl.org/docs/concepts/tokens/fungible-tokens/trust-line-tokens)","title":"XRPL IOU Token"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sep41"]},"issuer":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The asset issuer address."},"assetCode":{"type":"string","description":"The asset code."},"to":{"type":"string","pattern":"^(G[A-Z0-9]{55}|M[A-Z0-9]{68})$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","issuer","assetCode","to","amount"],"additionalProperties":false,"description":"Transfer classic [Stellar Assets](https://developers.stellar.org/docs/issuing-assets/anatomy-of-an-asset). They all implement the [SEP-41 token interface](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0041.md).","title":"Stellar Classic Assets (SEP-41)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Snip2"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The SNIP-2 (ERC-20-like) contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","amount"],"additionalProperties":false,"description":"Transfer fungible tokens that implement the [SNIP-2 (ERC-20-like) specification](https://github.com/starknet-io/SNIPs/blob/ea46a8777d8c8d53a43f45b7beb1abcc301a1a69/SNIPS/snip-2.md).","title":"Starknet SNIP-2 (ERC-20 like)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Snip3"]},"contract":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The SNIP-3 (ERC-721) contract address."},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The destination address."},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token to transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","tokenId"],"additionalProperties":false,"description":"Transfer non-fungible tokens that implement the [SNIP-3 (ERC-721-like) specification](https://github.com/starknet-io/SNIPs/blob/ea46a8777d8c8d53a43f45b7beb1abcc301a1a69/SNIPS/snip-3.md)","title":"Starknet SNIP-3 (ERC-721-like)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"to":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The mint account address."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"createDestinationAccount":{"type":"boolean","description":"If `true`, pay to create the associated token account for the recipient if it doesn't exist. Defaults to `false`."},"useDurableNonce":{"type":"boolean","description":"Optional. When `true` the SPL transfer is built as a durable-nonce transaction using one of the wallet's nonce accounts (picked server-side). The wallet's nonce account pool must be pre-populated via `POST /wallets/{id}/transactions` with `kind: CreateSolanaNonceAccounts`."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","amount","mint"],"additionalProperties":false,"description":"Transfer [SPL tokens](https://spl.solana.com/token) or [SPL 2022 tokens](https://spl.solana.com/token-2022).","title":"Solana Program Library Token (SPL and SPL 2022)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Tep74"]},"to":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The destination address."},"master":{"type":"string","pattern":"^(?:[A-Za-z0-9\\-_]{48}|\\d+:[a-fA-F0-9]{64})$","description":"The Jetton master contract address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","to","master","amount"],"additionalProperties":false,"description":"Transfer [Jetton](https://github.com/ton-blockchain/TEPs/blob/master/text/0074-jettons-standard.md) tokens.","title":"TON Jetton (TEP-74)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc10"]},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token ID."},"to":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","tokenId","to","amount"],"additionalProperties":false,"description":"Transfer TRON's TRC-10 fungible tokens","title":"TRON Native Fungible Token (TRC-10)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc20"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"to":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","amount"],"additionalProperties":false,"description":"Transfer fungible tokens that implement the TRC-20 smart contract specification.","title":"TRON Smart Contract Fungible Token (TRC-20)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Trc721"]},"contract":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The smart contract address."},"to":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$","description":"The destination address."},"tokenId":{"type":"string","pattern":"^\\d+$","description":"The token to transfer."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","contract","to","tokenId"],"additionalProperties":false,"description":"Transfer non-fungible tokens that implement the TRC-721 smart contract specification.","title":"TRON Non Fungible Token (TRC-721)"},{"type":"object","properties":{"kind":{"type":"string","enum":["Xls33"]},"issuanceId":{"type":"string","description":"The XLS-33 issuance identifier."},"to":{"type":"string","pattern":"^r[1-9A-HJ-NP-Za-km-z]{24,34}$","description":"The destination address."},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of tokens to transfer in minimum denomination."},"memo":{"anyOf":[{"type":"string","maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},{"type":"string","enum":[""]}],"description":"The memo or destination tag."},"externalId":{"type":"string","minLength":1,"maxLength":50,"description":"A unique ID from your system. It can be leveraged to be used as an idempotency key. (read more [here](https://docs.dfns.co/api-reference/idempotency))"},"travelRule":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Notabene"]},"beneficiaryVASPdid":{"type":"string"},"beneficiaryProof":{"type":"object","additionalProperties":{}},"originator":{"type":"object","additionalProperties":{}},"beneficiary":{"type":"object","additionalProperties":{}}},"required":["kind","originator","beneficiary"],"additionalProperties":false,"title":"Notabene Travel Rule"},{"type":"object","properties":{"kind":{"type":"string","enum":["Sumsub"]},"ivms101":{"type":"object","properties":{"version":{"type":"string","enum":["IVMS101.2023"],"description":"IVMS101 payload version. Must be `IVMS101.2023`."},"data":{"type":"string","minLength":1,"description":"Originator and beneficiary IVMS101 data, JWS-signed then JWE-encrypted (compact serialization) with the Sumsub public key. Retrieve the key from the Sumsub travel rule public key endpoint. Dfns never decrypts this value. The cleartext payload must use the IVMS 101.2023 field names (`Originator.originatorPerson[]`, `Beneficiary.beneficiaryPerson[]`, `naturalPersonNameIdentifierType`) and include `payloadMetadata: { \"payloadVersion\": \"101.2023\" }`; without it Sumsub parses the payload as IVMS 101.2020 and silently ignores the 2023 field names."},"filledFields":{"type":"array","items":{"type":"string","minLength":1},"description":"IVMS101 field paths present in `data`, e.g. `Originator.originatorPerson[].naturalPerson.name.nameIdentifier[].primaryIdentifier` and `payloadMetadata.payloadVersion`."}},"required":["version","data","filledFields"],"additionalProperties":false},"beneficiaryVaspId":{"type":"string","minLength":1,"description":"Sumsub id of the beneficiary VASP, for a transfer to a hosted (custodial) wallet. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."},"beneficiaryWalletType":{"type":"string","enum":["unhosted"],"description":"Set to `unhosted` for a transfer to a self-custody wallet, which skips VASP attribution. Set exactly one of `beneficiaryVaspId` or `beneficiaryWalletType`."}},"required":["kind","ivms101"],"additionalProperties":false,"title":"Sumsub Travel Rule"}],"description":"A travel rule payload to associate with the transfer. (read more [here](https://docs.dfns.co/features/travel-rule))"},"feeSponsorId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^fs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Id of the fee sponsor that will be used to pay for your transfer fees, it might not be available for all blockchains. (read more [here](https://docs.dfns.co/features/fee-sponsors))","example":"fs-5vqdl-gliqk-b4rfukqauov1sp7j"}},"required":["kind","issuanceId","to","amount"],"additionalProperties":false,"description":"Transfer XRPL XLS-33 Token with specified issuance ID. (https://xrpl.org/docs/concepts/tokens/fungible-tokens/multi-purpose-tokens","title":"XRPL XLS-33 Token"}]},"examples":{"Native":{"value":{"kind":"Native","to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffb","amount":"1"}},"Asa":{"value":{"kind":"Asa","assetId":"10458941","to":"CJLKQWNTSQU64F4OBJSQK35THVI4KE4QIT3KEYB4CRBHQAIMO2CD6JWBCY","amount":"1"}},"Cardano Asset":{"description":"Transfer Cardano assets following [Mary update](https://docs.cardano.org/about-cardano/evolution/upgrades/mary)","value":{"kind":"Asset","assetId":"c003c63129289a15b2d87216ce7366ea1832cfb9fc967f524ff1a8b564666e73636f696e","to":"addr_test1vqucg65d0c2fmjexgeenwz4acajyfxj8qqewu9xl5vmq32casygkx","amount":"1"}},"Cip56":{"value":{"kind":"Cip56","instrumentAdmin":"dfnsdev1::12209b43bea8836d8cb65f3e05515f44b19daf1cf9110096e407c50fb7134e0823ea","instrumentId":"DfnsToken2","to":"dfns1::122035ead564c650e3051c6bad8e01f319b9db0acbfd2e0acf1c05baebcef16cb468","amount":"100000000000"}},"Cis2":{"value":{"kind":"Cis2","tokenAddress":"33ojRvaXs8J2","to":"4HhAcToZs6rtxGcgsBRS3VcjeAECPTTSTFVUKS6rBSVEZAPL6d","amount":"3"}},"Coin":{"value":{"kind":"Coin","coin":"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC","to":"0x1d9c96adb0eda0b3beca44ed89143444b4147b30f06eef7bfc39cbbff848f6e5","amount":"1"}},"Erc20":{"value":{"kind":"Erc20","contract":"0x6f14c02fc1f78322cfd7d707ab90f18bad3b54f5","to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffb","amount":"1"}},"Erc20 Fee Sponsor":{"value":{"kind":"Erc20","contract":"0xF56636F7eD43068BEbe9D5Dc7486e70D10bCa5ac","to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffb","amount":"1000000000000000000","feeSponsorId":"fs-5c47l-bp7f9-82n9raruj5n3spbe"}},"Erc721":{"value":{"kind":"Erc721","contract":"0xc98f6a0670de5029faf44db6c35d935d534708cf","to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffb","tokenId":"1"}},"Erc7984":{"value":{"kind":"Erc7984","contract":"0x593E77e7E2bEe748aa27942E1f2069b5B6902625","to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffb","amount":"1000000"}},"Native Fee Sponsor":{"value":{"kind":"Native","to":"0xe5a2ebc128e262ab1e3bd02bffbe16911adfbffb","amount":"1","feeSponsorId":"fs-5c47l-bp7f9-82n9raruj5n3spbe"}},"Native Offer":{"description":"Set `offer` field to `true` to create a transfer offer. Currently only supported on Canton.","value":{"kind":"Native","to":"dfns1::122035ead564c650e3051c6bad8e01f319b9db0acbfd2e0acf1c05baebcef16cb468","amount":"100000000000","offer":true}},"Cis7":{"value":{"kind":"Cis7","tokenId":"USDR","to":"4HhAcToZs6rtxGcgsBRS3VcjeAECPTTSTFVUKS6rBSVEZAPL6d","amount":"1000000"}},"Sep41":{"value":{"kind":"Sep41","issuer":"GCIQLRAXSY4FDEMCEPOGQICBZKJZBRZURKSD75BFKASMFUKYMFAUQVQ5","assetCode":"Dfns","to":"GCVGVFCH2ECV2KIHJ46Q5NPFMTO5RAD3KGRJ3ZBHAZ37EMMAL7DOXXRS","amount":"1"}},"Sep41 Fee Sponsor":{"value":{"kind":"Sep41","issuer":"GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5","assetCode":"USDC","to":"GC32HQJNYDEMOSFLA5JFW4AREK4IXV4PMAGHMNBNE7ZF4X4SIRGN5ACC","amount":"1","feeSponsorId":"fs-43hcm-1pa06-99i97tj9srfnnlla"}},"Snip2":{"description":"Transfer fungible tokens that implement the SNIP-2 (ERC-20-like) specification on Starknet","value":{"kind":"Snip2","contract":"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7","to":"0x00a7f1280ab53c49cb06878ba23496359bd94f2d786baee710ec1f34acd40a0a","amount":"1000000000000000000"}},"Snip3":{"description":"Transfer non-fungible tokens that implement the SNIP-3 (ERC-721-like) specification on Starknet","value":{"kind":"Snip3","contract":"0x0367b438f8b77137bdeccf457676677e134c82c92f9580eda85df4f61236c101","to":"0x00a7f1280ab53c49cb06878ba23496359bd94f2d786baee710ec1f34acd40a0a","tokenId":"1"}},"Spl":{"value":{"kind":"Spl","mint":"BhkGzPPoadnw1sAymCj2zNH3JuBe6Lk68hNAcFNhMGeH","to":"3U6stgsD1FmA7o3omUguritCU8iWmUM7Rs6KqAHHxHVZ","amount":"1"}},"Tep74":{"value":{"kind":"Tep74","master":"kQBFAGo2Af6omLixtgsqqte_QXpZfjbEe8VfsqW_cWLyFz-h","to":"0QAWf1Hx6ZFX6-IQ2zsZTthHWOMNQHmoKFbuhQRvV3F_b3yd","amount":"1"}},"Trc10":{"value":{"kind":"Trc10","tokenId":"1005273","to":"TADDx31pdCFfp3XrYxp6fQGbRxriYFLTrx","amount":"1"}},"Trc721":{"value":{"kind":"Trc721","contract":"TKgnDMWHYmwH24REe9XnrnwcNCvtb53n8Q","to":"TADDx31pdCFfp3XrYxp6fQGbRxriYFLTrx","tokenId":"0"}},"Iou":{"value":{"kind":"Iou","currency":"USD","issuer":"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq","to":"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe","amount":"1000000"}},"Xls33":{"value":{"kind":"Xls33","issuanceId":"ABCDEF123456789","to":"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe","amount":"1000000"}}}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/tags":{"put":{"operationId":"tagWallet","summary":"Tag Wallet","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Add a [Tag](https://docs.dfns.co/api-reference/wallets/tags) to a wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Tags:Add`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"walletId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Wallet Tag."},"minItems":1,"maxItems":10}},"required":["tags"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"untagWallet","summary":"Untag Wallet","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Removes the specified tags from a wallet. ","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Tags:Remove`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"walletId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_.:/+-]{1,100}$","description":"Wallet Tag."},"maxItems":10,"description":"List of tags."}},"required":["tags"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/offers/{offerId}":{"get":{"operationId":"getOffer","summary":"Get Offer","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieve information about a specific offer received on your wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Offers:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^offer-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Offer id."},"required":true,"description":"Offer id.","name":"offerId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Offer"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/offers":{"get":{"operationId":"listOffers","summary":"List Offers","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"List all offers received on a specific wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Offers:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Offer"},"description":"Current page items."},"nextPageToken":{"type":"string","description":"token to use as `paginationToken` to request the next page."}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/offers/{offerId}/accept":{"put":{"operationId":"acceptOffer","summary":"Accept Offer","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Accept an offer received on your wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Offers:Settle`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^offer-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Offer id."},"required":true,"description":"Offer id.","name":"offerId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Offer"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/{walletId}/offers/{offerId}/reject":{"put":{"operationId":"rejectOffer","summary":"Reject Offer","tags":["Wallets"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Reject an offer received on your wallet.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n✅ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Offers:Settle`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Wallet id."},"required":true,"description":"Wallet id.","name":"walletId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^offer-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Offer id."},"required":true,"description":"Offer id.","name":"offerId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Offer"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/wallets/all/history":{"get":{"operationId":"listOrgWalletHistory","summary":"List Org Wallet History","tags":["Wallets"],"security":[{"authenticationToken":[]}],"description":"Retrieve the transaction history across all wallets within a specified timeframe. The time range is unbounded, but the CSV export is capped at 100,000 rows.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Wallets:Read`: Always required."},"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Maximum number of items to return."},"required":false,"description":"Maximum number of items to return.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request."},"required":false,"description":"Opaque token used to retrieve the next page. Returned as `nextPageToken` from the previous request.","name":"paginationToken","in":"query"},{"schema":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Start of the time range to query."},"required":true,"description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Start of the time range to query.","name":"startTime","in":"query"},{"schema":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). End of the time range to query."},"required":true,"description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). End of the time range to query.","name":"endTime","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"orgId":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string"},"walletId":{"type":"string"},"network":{"type":"string"},"direction":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":"string"},"tokenId":{"type":"string"},"asset":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"string"},"fee":{"type":"string"},"feeSymbol":{"type":"string"},"feeDecimals":{"type":"string"},"txHash":{"type":"string"},"verified":{"type":"boolean"},"usdAmount":{"type":"string"}},"required":["timestamp","walletId","network","direction","txHash"]}},"nextPageToken":{"type":"string"}},"required":["orgId","items"]},{"type":"string"}]}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/webhooks":{"post":{"operationId":"createWebhook","summary":"Create Webhook","tags":["Webhooks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Register a new webhook.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Create`: Always required."},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Webhook url"},"status":{"type":"string","enum":["Enabled","Disabled"],"description":"Webhook status"},"description":{"type":"string","maxLength":256},"events":{"type":"array","items":{"anyOf":[{"type":"string","enum":["policy.triggered","policy.approval.pending","policy.approval.resolved","key.created","key.deleted","key.delegated","key.exported","wallet.blockchainevent.detected","wallet.blockchain_event.transfer.included","wallet.blockchain_event.misc.confirmed","wallet.created","wallet.activated","wallet.delegated","wallet.exported","wallet.signature.failed","wallet.signature.rejected","wallet.signature.requested","wallet.signature.signed","wallet.transaction.broadcasted","wallet.transaction.confirmed","wallet.transaction.failed","wallet.transaction.rejected","wallet.transaction.requested","wallet.transfer.broadcasted","wallet.transfer.confirmed","wallet.transfer.failed","wallet.transfer.rejected","wallet.transfer.requested","wallet.offer.received","wallet.offer.accepted","wallet.offer.rejected","wallet.offer.withdrawn","wallet.tags.modified","vault.created","vault.updated","vault.tags.modified","vault.event.created","address_watch.blockchain_event.transfer.confirmed","address_watch.blockchain_event.misc.confirmed","payout.action.required","allocation.action.created","allocation.action.completed","allocation.action.failed","swap.requested","swap.rejected","swap.completed","swap.failed"],"description":"WebhookEventKind"},{"type":"string","enum":["*"]}],"description":"WebhookEventKind"},"minItems":1,"description":"All events this webhook is subscribed to."}},"required":["url","events"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookWithSecret"}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listWebhooks","summary":"List Webhooks","tags":["Webhooks"],"security":[{"authenticationToken":[]}],"description":"List all webhooks for the authenticated user's organization. The results are paginated.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Read`: Always required."},"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"nextPageToken":{"type":"string"}},"required":["items"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/webhooks/{webhookId}":{"delete":{"operationId":"deleteWebhook","summary":"Delete Webhook","tags":["Webhooks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Deletes an existing webhook registration.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Delete`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"webhookId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","enum":[true]}},"required":["deleted"]}}}},"default":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getWebhook","summary":"Get Webhook","tags":["Webhooks"],"security":[{"authenticationToken":[]}],"description":"Retrieve information about a specific webhook.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"webhookId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"default":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"updateWebhook","summary":"Update Webhook","tags":["Webhooks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"Update the definition of an existing webhook.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Update`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"webhookId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Webhook url"},"description":{"type":"string","maxLength":256},"events":{"type":"array","items":{"anyOf":[{"type":"string","enum":["policy.triggered","policy.approval.pending","policy.approval.resolved","key.created","key.deleted","key.delegated","key.exported","wallet.blockchainevent.detected","wallet.blockchain_event.transfer.included","wallet.blockchain_event.misc.confirmed","wallet.created","wallet.activated","wallet.delegated","wallet.exported","wallet.signature.failed","wallet.signature.rejected","wallet.signature.requested","wallet.signature.signed","wallet.transaction.broadcasted","wallet.transaction.confirmed","wallet.transaction.failed","wallet.transaction.rejected","wallet.transaction.requested","wallet.transfer.broadcasted","wallet.transfer.confirmed","wallet.transfer.failed","wallet.transfer.rejected","wallet.transfer.requested","wallet.offer.received","wallet.offer.accepted","wallet.offer.rejected","wallet.offer.withdrawn","wallet.tags.modified","vault.created","vault.updated","vault.tags.modified","vault.event.created","address_watch.blockchain_event.transfer.confirmed","address_watch.blockchain_event.misc.confirmed","payout.action.required","allocation.action.created","allocation.action.completed","allocation.action.failed","swap.requested","swap.rejected","swap.completed","swap.failed"],"description":"WebhookEventKind"},{"type":"string","enum":["*"]}],"description":"WebhookEventKind"},"minItems":1,"description":"All events this webhook is subscribed to."},"status":{"type":"string","enum":["Enabled","Disabled"],"description":"Webhook status"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/webhooks/{webhookId}/ping":{"post":{"operationId":"pingWebhook","summary":"Ping Webhook","tags":["Webhooks"],"security":[{"authenticationToken":[],"userActionSignature":[]}],"description":"This endpoint is meant for webhook setup and troubleshooting. Calling the endpoint will trigger a fake test event that will be pushed to the webhook URL. The fake event will not be saved and not appear in further requests to Webhook Events.","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Ping`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"webhookId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"error":{"type":"string"}},"required":["status"],"additionalProperties":false}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/webhooks/{webhookId}/events/{webhookEventId}":{"get":{"operationId":"getWebhookEvent","summary":"Get Webhook Event","tags":["Webhooks"],"security":[{"authenticationToken":[]}],"description":"Retrieve a specific webhook event details by its ID.\n  \n<Warning>\nWe only keep a trace of those Webhook Events in our system for a **retention period of 31 days**. Past that, they are discarded, so you cannot see them using [List Webhook Events](https://docs.dfns.co/api-reference/webhooks/list-webhook-events) or [Get Webhook Event](https://docs.dfns.co/api-reference/webhooks/get-webhook-event) endpoints.\n</Warning>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Events:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wh-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"webhookId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^whe-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$"},"required":true,"name":"webhookEventId","in":"path"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"}}}},"default":{"$ref":"#/components/responses/Error"}}}},"/webhooks/{webhookId}/events":{"get":{"operationId":"listWebhookEvents","summary":"List Webhook Events","tags":["Webhooks"],"security":[{"authenticationToken":[]}],"description":"Lists all events for a given webhook. \n\n\n<Warning>\nWe only keep a trace of those Webhook Events in our system for a **retention period of 31 days**. Past that, they are discarded, so you cannot see them using [List Webhook Events](https://docs.dfns.co/api-reference/webhooks/list-webhook-events) or [Get Webhook Event](https://docs.dfns.co/api-reference/webhooks/get-webhook-event) endpoints.\n</Warning>","x-mint":{"content":"#### Authentication\n\n✅ Tenant User (`TenantUser`)    \n✅ Organization User (`CustomerEmployee`)    \n❌ End User (`EndUser`)    \n✅ Service Account\n\n#### Required Permissions\n\n`Webhooks:Events:Read`: Always required."},"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"webhookId","in":"path"},{"schema":{"type":"string","enum":["policy.triggered","policy.approval.pending","policy.approval.resolved","key.created","key.deleted","key.delegated","key.exported","wallet.blockchainevent.detected","wallet.blockchain_event.transfer.included","wallet.blockchain_event.misc.confirmed","wallet.created","wallet.activated","wallet.delegated","wallet.exported","wallet.signature.failed","wallet.signature.rejected","wallet.signature.requested","wallet.signature.signed","wallet.transaction.broadcasted","wallet.transaction.confirmed","wallet.transaction.failed","wallet.transaction.rejected","wallet.transaction.requested","wallet.transfer.broadcasted","wallet.transfer.confirmed","wallet.transfer.failed","wallet.transfer.rejected","wallet.transfer.requested","wallet.offer.received","wallet.offer.accepted","wallet.offer.rejected","wallet.offer.withdrawn","wallet.tags.modified","vault.created","vault.updated","vault.tags.modified","vault.event.created","address_watch.blockchain_event.transfer.confirmed","address_watch.blockchain_event.misc.confirmed","payout.action.required","allocation.action.created","allocation.action.completed","allocation.action.failed","swap.requested","swap.rejected","swap.completed","swap.failed"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"deliveryFailed","in":"query"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"paginationToken","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEvent"}},"nextPageToken":{"type":"string"}},"required":["items"]}}}},"default":{"$ref":"#/components/responses/Error"}}}}},"webhooks":{"payout.action.required":{"post":{"summary":"Payout Action Required","description":"A [payout](https://docs.dfns.co/features/payouts) requires an action (for example, a confirmation) before it can proceed.","tags":["Payouts"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["payout.action.required"]},"data":{"type":"object","properties":{"actionKind":{"type":"string","enum":["Confirmation"],"description":"The kind of action required."},"payout":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["Borderless"]},"data":{"type":"object","properties":{"borderlessAccountId":{"type":"string","description":"The Borderless account ID associated with the payout."},"paymentInstructionsId":{"type":"string","description":"The Borderless payment instructions ID linked to the destination bank account."},"paymentPurpose":{"type":"string","enum":["salary payment","personal remittance","rent payment","property purchase","owned account abroad","advertising expenses","advisory fees","business insurance","construction","delivery fees","education","exports","donation","hotel","loan payment","maintenance expenses","medical expense","office expenses","royalty fees","service charge","shares investment","tax payment","transportation fees","travel","utility bills","other"],"description":"The purpose of the withdrawal payment."},"dateConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was confirmed via Action Confirm.","example":"2023-04-14T20:41:28.715Z"},"dateCanceled":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the settlement was canceled via Action Cancel.","example":"2023-04-14T20:41:28.715Z"},"executionStatus":{"type":"string","enum":["Initializing","AwaitingPayoutInstructions","AwaitingPayoutConfirmation","SubmittingPayoutTransfer","PendingPolicyApproval","DepositProcessing","DisbursementPending","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Borderless execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"country":{"type":"string","description":"ISO-3166 Alpha-2 country code for the payout destination."},"borderlessPayoutId":{"type":"string","description":"The ID assigned by Borderless when the payout is created."},"depositAddress":{"type":"string","description":"The on-chain address to remit funds to."},"transferId":{"type":"string","description":"The Dfns transfer ID used to settle the payout."},"transactionHash":{"type":"string","description":"The blockchain transaction hash once the transfer is confirmed."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Borderless verified fiat has settled.","example":"2023-04-14T20:41:28.715Z"}},"required":["borderlessAccountId","paymentInstructionsId","paymentPurpose","executionStatus","country"],"description":"Borderless provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Borderless Payout"},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pyt-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Payout id.","example":"pyt-4ihii-9lonb-tmhjo9bor4odmb5h"},"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"The wallet ID used for the payout.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"fiatCurrency":{"type":"string","description":"ISO-4217 fiat currency code for the payout."},"asset":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Erc20"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"contract":{"type":"string","description":"The ERC-20 contract address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","contract","network"],"title":"ERC-20 Asset"},{"type":"object","properties":{"kind":{"type":"string","enum":["Spl","Spl2022"]},"amount":{"type":"string","pattern":"^\\d+$","description":"The amount of the asset to be paid out in minimum denomination."},"mint":{"type":"string","description":"The token mint address."},"network":{"$ref":"#/components/schemas/Network"},"metadata":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the token."},"symbol":{"type":"string","description":"The ticker symbol of the token."},"decimals":{"type":"integer","description":"Number of decimals used by the token."},"verified":{"type":"boolean","description":"Whether the token is verified by DFNS as legitimate."}},"required":["decimals"]}},"required":["kind","amount","mint","network"],"title":"SPL/SPL-2022 Asset"}],"description":"The asset being paid out, including token descriptor and metadata."},"externalId":{"type":"string","description":"Optional external identifier for idempotency."},"status":{"type":"string","enum":["Processing","Completed","Failed","Rejected","Expired","Canceled"],"description":"The current status of the payout."},"requester":{"allOf":[{"$ref":"#/components/schemas/Requester"},{"description":"The user/token that initiated the payout."}]},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was created.","example":"2023-04-14T20:41:28.715Z"},"dateFinalized":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the payout was finalized.","example":"2023-04-14T20:41:28.715Z"},"provider":{"type":"string","enum":["CircleMint"]},"data":{"type":"object","properties":{"executionStatus":{"type":"string","enum":["Initializing","AwaitingDeposit","DepositConfirmed","AwaitingPayout","Completed","Rejected","Failed","Expired","Canceled"],"description":"The Circle Mint execution status."},"statusReason":{"type":"string","description":"Reason for the current status, primarily for failure cases."},"bankId":{"type":"string","description":"The Circle Mint bank account id the fiat is paid out to; absent for a balance destination."},"rail":{"type":"string","enum":["wire","sepa","sepa_instant"],"description":"The payout rail; absent for a balance destination."},"paymentIntentId":{"type":"string","description":"Circle payment intent id (the unique per-operation deposit intent)."},"depositAddress":{"type":"string","description":"The unique per-operation address the wallet remits USDC/EURC to."},"transferId":{"type":"string","description":"The Dfns transfer id used to send funds to the deposit address."},"transactionHash":{"type":"string","description":"The blockchain transaction hash of the deposit transfer."},"circlePayoutId":{"type":"string","description":"The id assigned by Circle when the fiat payout is created."},"trackingRef":{"type":"string","description":"Circle tracking reference for the fiat payout."},"dateDepositConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when the on-chain deposit was confirmed.","example":"2023-04-14T20:41:28.715Z"},"datePayoutConfirmed":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). ISO 8601 timestamp when Circle confirmed the fiat payout.","example":"2023-04-14T20:41:28.715Z"}},"required":["executionStatus"],"description":"Circle Mint provider-specific payout data."}},"required":["id","walletId","fiatCurrency","asset","status","requester","dateCreated","provider","data"],"title":"Circle Mint Payout"}]}},"required":["actionKind","payout"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookPayoutActionRequired"}},"swap.requested":{"post":{"summary":"Swap Requested","description":"A swap has been requested and is pending policy evaluation.","tags":["Swaps"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["swap.requested"]},"data":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"swap":{"$ref":"#/components/schemas/Swap"}},"required":["orgId","swap"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookSwapRequested"}},"swap.rejected":{"post":{"summary":"Swap Rejected","description":"A swap has been rejected by a policy.","tags":["Swaps"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["swap.rejected"]},"data":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"swap":{"$ref":"#/components/schemas/Swap"}},"required":["orgId","swap"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookSwapRejected"}},"swap.completed":{"post":{"summary":"Swap Completed","description":"A swap has completed successfully.","tags":["Swaps"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["swap.completed"]},"data":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"swap":{"$ref":"#/components/schemas/Swap"}},"required":["orgId","swap"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookSwapCompleted"}},"swap.failed":{"post":{"summary":"Swap Failed","description":"A swap request has failed to process.","tags":["Swaps"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["swap.failed"]},"data":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^or-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Organization id.","example":"or-30tnh-itmjs-s235s5ontr3r23h2"},"swap":{"$ref":"#/components/schemas/Swap"}},"required":["orgId","swap"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookSwapFailed"}},"allocation.action.created":{"post":{"summary":"Allocation Action Created","description":"An allocation action (deposit or withdrawal) has been created and is now in progress","tags":["Allocations"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["allocation.action.created"]},"data":{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"allocationAction":{"$ref":"#/components/schemas/AllocationAction"}},"required":["walletId","allocationAction"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookAllocationActionCreated"}},"allocation.action.completed":{"post":{"summary":"Allocation Action Completed","description":"An allocation action has completed successfully","tags":["Allocations"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["allocation.action.completed"]},"data":{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"allocationAction":{"$ref":"#/components/schemas/AllocationAction"}},"required":["walletId","allocationAction"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookAllocationActionCompleted"}},"allocation.action.failed":{"post":{"summary":"Allocation Action Failed","description":"An allocation action has failed to process","tags":["Allocations"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["allocation.action.failed"]},"data":{"type":"object","properties":{"walletId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wa-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"Wallet id.","example":"wa-5pfuu-9euek-h0odgb6snva8ph3k"},"allocationAction":{"$ref":"#/components/schemas/AllocationAction"}},"required":["walletId","allocationAction"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookAllocationActionFailed"}},"vault.created":{"post":{"summary":"Vault Created","description":"A vault has been created","tags":["Vaults"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["vault.created"]},"data":{"type":"object","properties":{"vault":{"$ref":"#/components/schemas/Vault"}},"required":["vault"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookVaultCreated"}},"vault.updated":{"post":{"summary":"Vault Updated","description":"A vault has been updated","tags":["Vaults"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["vault.updated"]},"data":{"type":"object","properties":{"vault":{"$ref":"#/components/schemas/Vault"}},"required":["vault"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookVaultUpdated"}},"vault.tags.modified":{"post":{"summary":"Vault Tags Modified","description":"Tags have been added to or removed from a vault","tags":["Vaults"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["vault.tags.modified"]},"data":{"type":"object","properties":{"vaultId":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"tagsAdded":{"type":"array","items":{"type":"string"}},"tagsRemoved":{"type":"array","items":{"type":"string"}}},"required":["vaultId","tags","tagsAdded","tagsRemoved"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookVaultTagsModified"}},"vault.event.created":{"post":{"summary":"Vault Event Created","description":"An entry has been appended to the vault balance ledger: an incoming transfer was detected, quarantined funds were released, or an outgoing transfer was initiated, confirmed, aborted, rejected or failed (see the `kind` field of the vault event)","tags":["Vaults"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["vault.event.created"]},"data":{"type":"object","properties":{"vaultEvent":{"$ref":"#/components/schemas/VaultEvent"}},"required":["vaultEvent"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookVaultEventCreated"}},"wallet.created":{"post":{"summary":"Wallet Created","description":"A new wallet has been [created](https://docs.dfns.co/api-reference/wallets/create-wallet).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.created"]},"data":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Wallet"}},"required":["wallet"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletCreated"}},"wallet.activated":{"post":{"summary":"Wallet Activated","description":"A wallet has been [activated](https://docs.dfns.co/api-reference/wallets/activate-wallet) (for example, a Canton wallet).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.activated"]},"data":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Wallet"}},"required":["wallet"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletActivated"}},"wallet.delegated":{"post":{"summary":"Wallet Delegated","description":"A wallet has been [delegated](https://docs.dfns.co/api-reference/wallets/delegate-wallet) to an end user.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.delegated"]},"data":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Wallet"}},"required":["wallet"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletDelegated"}},"wallet.tags.modified":{"post":{"summary":"Wallet Tags Modified","description":"The tags of a wallet have been modified.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.tags.modified"]},"data":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Wallet"},"tagsRemoved":{"type":"array","items":{"type":"string"}},"tagsAdded":{"type":"array","items":{"type":"string"}}},"required":["wallet","tagsRemoved","tagsAdded"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTagsModified"}},"wallet.exported":{"post":{"summary":"Wallet Exported","description":"A wallet has been exported (deprecated).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.exported"]},"data":{"type":"object","properties":{"wallet":{"$ref":"#/components/schemas/Wallet"}},"required":["wallet"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletExported"}},"wallet.blockchainevent.detected":{"post":{"summary":"Blockchain Event Detected","description":"A wallet event has been confirmed on chain (e.g.: a deposit). The `blockchainEvent.kind` field identifies the type of asset transfer and varies by network and asset (for example `NativeTransfer`, `Erc20Transfer`, `UtxoTransfer`, `SplTransfer`, `Trc20Transfer`); see the full list of event kinds per chain in the [webhook events reference](https://docs.dfns.co/api-reference/webhook-events). The confirmation delay per network is listed [here](https://docs.dfns.co/networks).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.blockchainevent.detected"]},"data":{"type":"object","properties":{"blockchainEvent":{"$ref":"#/components/schemas/WalletHistoryEvent"},"wallet":{"$ref":"#/components/schemas/Wallet"}},"required":["blockchainEvent","wallet"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletBlockchaineventDetected"}},"wallet.blockchain_event.transfer.included":{"post":{"summary":"Blockchain Event Transfer Included","description":"A transfer to a wallet has been included in a block but is not yet confirmed on chain. Available only for selected networks ([see list](https://docs.dfns.co/networks)).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.blockchain_event.transfer.included"]},"data":{"type":"object","properties":{"blockchainEvent":{"$ref":"#/components/schemas/WalletHistoryEvent"},"wallet":{"$ref":"#/components/schemas/Wallet"}},"required":["blockchainEvent","wallet"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletBlockchainEventTransferIncluded"}},"address_watch.blockchain_event.transfer.confirmed":{"post":{"summary":"Address Watch Blockchain Event Transfer Confirmed","description":"A transfer touching a watched address has been confirmed on chain (e.g.: a deposit).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["address_watch.blockchain_event.transfer.confirmed"]},"data":{"type":"object","properties":{"blockchainEvent":{"$ref":"#/components/schemas/AddressWatchHistoryEvent"},"addressWatch":{"$ref":"#/components/schemas/AddressWatch"}},"required":["blockchainEvent","addressWatch"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookAddressWatchBlockchainEventTransferConfirmed"}},"wallet.offer.received":{"post":{"summary":"Offer Received","description":"A new transfer [offer](https://docs.dfns.co/api-reference/wallets/list-offers) has been made to a wallet.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.offer.received"]},"data":{"type":"object","properties":{"offer":{"$ref":"#/components/schemas/Offer"}},"required":["offer"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletOfferReceived"}},"wallet.offer.accepted":{"post":{"summary":"Offer Accepted","description":"A transfer [offer](https://docs.dfns.co/api-reference/wallets/accept-offer) has been accepted and the settlement confirmed on chain.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.offer.accepted"]},"data":{"type":"object","properties":{"offer":{"$ref":"#/components/schemas/Offer"}},"required":["offer"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletOfferAccepted"}},"wallet.offer.rejected":{"post":{"summary":"Offer Rejected","description":"A transfer [offer](https://docs.dfns.co/api-reference/wallets/reject-offer) has been rejected and the settlement confirmed on chain.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.offer.rejected"]},"data":{"type":"object","properties":{"offer":{"$ref":"#/components/schemas/Offer"}},"required":["offer"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletOfferRejected"}},"wallet.offer.withdrawn":{"post":{"summary":"Offer Withdrawn","description":"A transfer offer has been withdrawn by the sender.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.offer.withdrawn"]},"data":{"type":"object","properties":{"offer":{"$ref":"#/components/schemas/Offer"}},"required":["offer"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletOfferWithdrawn"}},"wallet.transfer.requested":{"post":{"summary":"Transfer Requested","description":"A [wallet transfer](https://docs.dfns.co/api-reference/wallets/transfer-asset) request has been created.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transfer.requested"]},"data":{"type":"object","properties":{"transferRequest":{"$ref":"#/components/schemas/TransferRequest"}},"required":["transferRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransferRequested"}},"wallet.transfer.failed":{"post":{"summary":"Transfer Failed","description":"A [wallet transfer](https://docs.dfns.co/api-reference/wallets/transfer-asset) request has failed to process.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transfer.failed"]},"data":{"type":"object","properties":{"transferRequest":{"$ref":"#/components/schemas/TransferRequest"}},"required":["transferRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransferFailed"}},"wallet.transfer.rejected":{"post":{"summary":"Transfer Rejected","description":"A [wallet transfer](https://docs.dfns.co/api-reference/wallets/transfer-asset) request with a policy approval has been rejected.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transfer.rejected"]},"data":{"type":"object","properties":{"transferRequest":{"$ref":"#/components/schemas/TransferRequest"}},"required":["transferRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransferRejected"}},"wallet.transfer.broadcasted":{"post":{"summary":"Transfer Broadcasted","description":"A [wallet transfer](https://docs.dfns.co/api-reference/wallets/transfer-asset) request has been submitted to the mempool.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transfer.broadcasted"]},"data":{"type":"object","properties":{"transferRequest":{"$ref":"#/components/schemas/TransferRequest"}},"required":["transferRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransferBroadcasted"}},"wallet.transfer.confirmed":{"post":{"summary":"Transfer Confirmed","description":"A [wallet transfer](https://docs.dfns.co/api-reference/wallets/transfer-asset) request has been confirmed on chain. The confirmation delay per network is listed [here](https://docs.dfns.co/networks).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transfer.confirmed"]},"data":{"type":"object","properties":{"transferRequest":{"$ref":"#/components/schemas/TransferRequest"}},"required":["transferRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransferConfirmed"}},"wallet.transaction.broadcasted":{"post":{"summary":"Transaction Broadcasted","description":"A [broadcast transaction](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction) request has been submitted to the mempool.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transaction.broadcasted"]},"data":{"type":"object","properties":{"transactionRequest":{"$ref":"#/components/schemas/TransactionRequest"}},"required":["transactionRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransactionBroadcasted"}},"wallet.transaction.confirmed":{"post":{"summary":"Transaction Confirmed","description":"A [broadcast transaction](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction) request has been confirmed on chain. The confirmation delay per network is listed [here](https://docs.dfns.co/networks).","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transaction.confirmed"]},"data":{"type":"object","properties":{"transactionRequest":{"$ref":"#/components/schemas/TransactionRequest"}},"required":["transactionRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransactionConfirmed"}},"wallet.transaction.failed":{"post":{"summary":"Transaction Failed","description":"A [broadcast transaction](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction) request has failed to process. Indicates either a system failure to complete the request or that the transaction failed on chain.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transaction.failed"]},"data":{"type":"object","properties":{"transactionRequest":{"$ref":"#/components/schemas/TransactionRequest"}},"required":["transactionRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransactionFailed"}},"wallet.transaction.rejected":{"post":{"summary":"Transaction Rejected","description":"A [broadcast transaction](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction) request with a policy approval has been rejected.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transaction.rejected"]},"data":{"type":"object","properties":{"transactionRequest":{"$ref":"#/components/schemas/TransactionRequest"}},"required":["transactionRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransactionRejected"}},"wallet.transaction.requested":{"post":{"summary":"Transaction Requested","description":"A [broadcast transaction](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction) request has been created.","tags":["Wallets"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.transaction.requested"]},"data":{"type":"object","properties":{"transactionRequest":{"$ref":"#/components/schemas/TransactionRequest"}},"required":["transactionRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletTransactionRequested"}},"key.created":{"post":{"summary":"Key Created","description":"A key has been [created](https://docs.dfns.co/api-reference/keys/create-key).","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["key.created"]},"data":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/Key"}},"required":["key"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookKeyCreated"}},"key.delegated":{"post":{"summary":"Key Delegated","description":"A key has been [delegated](https://docs.dfns.co/api-reference/keys/delegate-key) to an end user.","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["key.delegated"]},"data":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/Key"}},"required":["key"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookKeyDelegated"}},"key.deleted":{"post":{"summary":"Key Deleted","description":"A key has been [deleted](https://docs.dfns.co/api-reference/keys/delete-key).","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["key.deleted"]},"data":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/Key"},"wallets":{"type":"array","items":{"$ref":"#/components/schemas/Wallet"}}},"required":["key","wallets"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookKeyDeleted"}},"key.exported":{"post":{"summary":"Key Exported","description":"A key has been [exported](https://docs.dfns.co/api-reference/keys/export-key).","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["key.exported"]},"data":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/Key"}},"required":["key"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookKeyExported"}},"wallet.signature.requested":{"post":{"summary":"Signature Requested","description":"A [generate signature](https://docs.dfns.co/api-reference/keys/generate-signature) request has been created.","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.signature.requested"]},"data":{"type":"object","properties":{"signatureRequest":{"$ref":"#/components/schemas/SignatureRequest"}},"required":["signatureRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletSignatureRequested"}},"wallet.signature.failed":{"post":{"summary":"Signature Failed","description":"A [generate signature](https://docs.dfns.co/api-reference/keys/generate-signature) request has failed to process.","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.signature.failed"]},"data":{"type":"object","properties":{"signatureRequest":{"$ref":"#/components/schemas/SignatureRequest"}},"required":["signatureRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletSignatureFailed"}},"wallet.signature.rejected":{"post":{"summary":"Signature Rejected","description":"A [generate signature](https://docs.dfns.co/api-reference/keys/generate-signature) request with a policy approval has been rejected.","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.signature.rejected"]},"data":{"type":"object","properties":{"signatureRequest":{"$ref":"#/components/schemas/SignatureRequest"}},"required":["signatureRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletSignatureRejected"}},"wallet.signature.signed":{"post":{"summary":"Signature Complete","description":"A [generate signature](https://docs.dfns.co/api-reference/keys/generate-signature) request has completed. The signature is available.","tags":["Keys"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["wallet.signature.signed"]},"data":{"type":"object","properties":{"signatureRequest":{"$ref":"#/components/schemas/SignatureRequest"}},"required":["signatureRequest"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWalletSignatureSigned"}},"policy.activity.resolved":{"post":{"summary":"Policy Activity Resolved","description":"A policy has been fulfilled.","tags":["Policies"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["policy.activity.resolved"]},"data":{"anyOf":[{"type":"object","properties":{"activityId":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["Cleared"]},{"type":"string","enum":["Blocked"]}]},"activityKind":{"type":"string","enum":["UserAction"]},"userAction":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"action":{"type":"object","properties":{"host":{"type":"string"},"method":{"type":"string"},"path":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"string"}},"body":{}},"required":["host","method","path"]}},"required":["id","kind","action"]},"impliedAssignments":{"type":"array","items":{"type":"object","properties":{"change":{"type":"string","enum":["Grant","Revoke"]},"permission":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"userIds":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["change","permission","userIds"],"additionalProperties":false}},"approverOfPolicyIds":{"type":"array","items":{"type":"string"}}},"required":["activityId","status","activityKind","userAction"]},{"type":"object","properties":{"activityId":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["Cleared"]},{"type":"string","enum":["Blocked"]}]},"activityKind":{"type":"string","enum":["Wallets:Sign","Wallets:IncomingTransaction","Vaults:ReleaseQuarantine","Vaults:CreateLock","Vaults:ReplaceLock","Permissions:Modify","Permissions:Assign","Policies:Modify","Registry:Addresses:Modify","Registry:ContractSchemas:Modify"]}},"required":["activityId","status","activityKind"]}]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookPolicyActivityResolved"}},"policy.approval.pending":{"post":{"summary":"Policy Approval Pending","description":"A new [Approval](https://docs.dfns.co/api-reference/policy-approvals) process has been created and is pending.","tags":["Policies"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["policy.approval.pending"]},"data":{"type":"object","properties":{"approval":{"$ref":"#/components/schemas/PolicyApproval"}},"required":["approval"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookPolicyApprovalPending"}},"policy.approval.resolved":{"post":{"summary":"Policy Approval Resolved","description":"An [Approval](https://docs.dfns.co/api-reference/policy-approvals) process is finalized: it has been either approved or rejected.","tags":["Policies"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["policy.approval.resolved"]},"data":{"type":"object","properties":{"activityId":{"type":"string"},"activityKind":{"type":"string","enum":["Registry:Addresses:Modify","Registry:ContractSchemas:Modify","Permissions:Modify","Permissions:Assign","Policies:Modify","Wallets:Sign","Wallets:IncomingTransaction","Vaults:ReleaseQuarantine","Vaults:CreateLock","Vaults:ReplaceLock","UserAction"]},"status":{"type":"string","enum":["Pending","Approved","Denied","Expired"]}},"required":["activityId","activityKind","status"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookPolicyApprovalResolved"}},"policy.triggered":{"post":{"summary":"Policy Triggered","description":"A policy got triggered upon some activity (the policy rule got evaluated, and it triggered).","tags":["Policies"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["policy.triggered"]},"data":{"type":"object","properties":{"policyEvaluation":{"type":"object","properties":{"id":{"type":"string"},"triggered":{"type":"boolean"},"status":{"type":"string","enum":["Cleared","Blocked","Pending","ApprovalRequired","Canceled"]},"reason":{"type":"string"},"date":{"type":"string"},"policy":{"$ref":"#/components/schemas/Policy"},"activity":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["Wallets:Sign"]},"transferRequest":{"$ref":"#/components/schemas/TransferRequest"},"transactionRequest":{"$ref":"#/components/schemas/TransactionRequest"},"signatureRequest":{"$ref":"#/components/schemas/SignatureRequest"},"swapRequest":{"$ref":"#/components/schemas/Swap"}},"required":["kind"],"description":"\n      A \"`Wallets:Sign`\" activity represents any activity which involves signing with a wallet. Currently, in our API, these can be:\n\n* a Transfer Request (created using the endpoint [Transfer Asset from Wallet](https://docs.dfns.co/api-reference/wallets/transfer-asset))\n* a Transaction Request (created using the endpoint [Broadcast Transaction from Wallet](https://docs.dfns.co/api-reference/wallets/sign-and-broadcast-transaction))\n* a Signature Request (created using the endpoint [Generate Signature from Wallet](https://docs.dfns.co/api-reference/keys/generate-signature))\n","title":"Wallets:Sign"},{"type":"object","properties":{"kind":{"type":"string","enum":["Wallets:IncomingTransaction"]},"blockchainEvent":{"$ref":"#/components/schemas/WalletHistoryEvent"}},"required":["kind","blockchainEvent"],"description":"A \"`Wallets:IncomingTransaction`\" activity represents when our indexers detected an incoming transaction into a wallet. This activity kind has to be used with the rule kind \"`ChainalysisTransactionScreening`\" (see more on [Chainalysis](https://docs.dfns.co/integrations/aml-kyt/chainalysis) integration page), and the action kind \"`NoAction`\", meaning that no actual action will be taken as a result of the Chainalysis screening, other than notifying you through a webhook event if the policy is triggered. The reason for that, is that the incoming transaction is already on-chain, so the funds are already in the wallet, we cannot block that transfer on chain.","title":"Wallets:IncomingTransaction"},{"type":"object","properties":{"kind":{"type":"string","enum":["Vaults:ReleaseQuarantine"]},"releaseQuarantineRequest":{"$ref":"#/components/schemas/VaultReleaseQuarantineRequest"}},"required":["kind","releaseQuarantineRequest"],"description":"A \"`Vaults:ReleaseQuarantine`\" activity represents a request to release quarantined vault funds into the available balance, created as a result of calling the endpoint ReleaseQuarantine (`POST /vaults/:vaultId/quarantines/:quarantineId/release`). The funds stay quarantined until the approval process completes.","title":"Vaults:ReleaseQuarantine"},{"type":"object","properties":{"kind":{"type":"string","enum":["Vaults:CreateLock"]},"lockRequest":{"$ref":"#/components/schemas/VaultLockRequest"}},"required":["kind","lockRequest"],"description":"A \"`Vaults:CreateLock`\" activity represents a request to lock vault funds, created as a result of calling the endpoint CreateVaultLock (`POST /vaults/:vaultId/locks`). The lock is not created until the approval process completes.","title":"Vaults:CreateLock"},{"type":"object","properties":{"kind":{"type":"string","enum":["Vaults:ReplaceLock"]},"lockReplaceRequest":{"$ref":"#/components/schemas/VaultLockReplaceRequest"}},"required":["kind","lockReplaceRequest"],"description":"A \"`Vaults:ReplaceLock`\" activity represents a request to change the amount of a vault lock, created as a result of calling the endpoint ReplaceVaultLock (`POST /vaults/:vaultId/locks/:lockId/replace`). Once the approval process completes, the lock is replaced: it is released and a new lock is created at the requested amount.","title":"Vaults:ReplaceLock"},{"type":"object","properties":{"kind":{"type":"string","enum":["Policies:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"kind":{"type":"string","enum":["Policy"]},"operationKind":{"type":"string","enum":["Update"]},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"]},"entityId":{"type":"string"},"dateCreated":{"type":"string","format":"date-time"},"dateResolved":{"type":"string","format":"date-time"},"approvalId":{"type":"string"},"body":{"$ref":"#/components/schemas/Policy"}},"required":["id","requester","kind","operationKind","status","entityId","dateCreated","body"],"additionalProperties":false}},"required":["kind","changeRequest"],"description":"\n      A \"`Policies:Modify`\" activity represents any activity which involves updating or archiving a policy. These activities are Policy change requests, created as a result of calling either:\n\n* the endpoint [Update Policy](https://docs.dfns.co/api-reference/policies/update-policy)\n* the endpoint [Delete Policy](https://docs.dfns.co/api-reference/policies/delete-policy)\n","title":"Policies:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["Permissions:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the change request.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"description":"Current status of the change request."},"entityId":{"type":"string","description":"ID of the entity being changed."},"userActionId":{"type":"string","description":"User action of the change request."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was created.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was resolved.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["Permission"]},"operationKind":{"type":"string","enum":["Update"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"name":{"type":"string","description":"Human-readable name of the permission (role)."},"status":{"type":"string","enum":["Active"],"description":"Current status of the permission."},"operations":{"type":"array","items":{"type":"string"},"description":"List of API operations this permission grants access to. See [Permissions List](https://docs.dfns.co/core-concepts/roles-and-permissions#list-of-permissions) for available operations."},"isImmutable":{"type":"boolean","description":"Whether this permission is system-managed and cannot be modified."},"isArchived":{"type":"boolean","description":"Whether this permission has been archived (soft-deleted)."}},"required":["id","name","status","operations","isImmutable","isArchived"],"additionalProperties":false}},"required":["id","requester","status","entityId","dateCreated","kind","operationKind","body"],"additionalProperties":false}},"required":["kind","changeRequest"],"description":"\n      A \"`Permissions:Modify`\" activity represents any activity which involves updating or archiving a permission. These activities are Permission change requests, created as a result of calling either:\n\n* the endpoint [Update Permission](https://docs.dfns.co/api-reference/permissions/update-permission)\n* the endpoint [Delete Permission](https://docs.dfns.co/api-reference/permissions/archive-permission)\n","title":"Permissions:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["Permissions:Assign"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cr-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the change request.","example":"cr-6uunn-bm6ja-f6rmod5kqrk5rbel"},"requester":{"$ref":"#/components/schemas/ChangeRequestRequester"},"status":{"type":"string","enum":["Applied","Failed","Pending","Rejected"],"description":"Current status of the change request."},"entityId":{"type":"string","description":"ID of the entity being changed."},"userActionId":{"type":"string","description":"User action of the change request."},"dateCreated":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was created.","example":"2023-04-14T20:41:28.715Z"},"dateResolved":{"type":"string","format":"date-time","description":"[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (must be UTC). Date the change request was resolved.","example":"2023-04-14T20:41:28.715Z"},"approvalId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^ap-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"ap-2a9in-tt2a1-983lho480p35ejd0"},"kind":{"type":"string","enum":["Assignment"]},"operationKind":{"type":"string","enum":["Create","Delete"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^as-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission assignment.","example":"as-1vcmc-qrek0-6b4vii9pln60907e"},"permissionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^pm-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the permission (also referred to as \"role\" in the dashboard).","example":"pm-37vj4-jkr4l-lc9945spfftkne57"},"identityId":{"type":"string","description":"ID of the identity the permission is assigned to. Can be a user ID, a service account ID, a personal access token (PAT) ID, or a user group ID."},"isImmutable":{"type":"boolean","description":"Whether this assignment is system-managed and cannot be modified."}},"required":["id","permissionId","identityId","isImmutable"],"additionalProperties":false}},"required":["id","requester","status","entityId","dateCreated","kind","operationKind","body"],"additionalProperties":false}},"required":["kind","changeRequest"],"description":"\n      A \"`Permissions:Assign`\" activity represents any activity which involves assigning a permission (or revoking it, aka \"deleting a permission assignment\"). These activities are Assignment change requests, created as a result of calling either:\n\n* the endpoint [Assign Permission](https://docs.dfns.co/api-reference/permissions/assign-permission)\n* the endpoint [Revoke Permission](https://docs.dfns.co/api-reference/permissions/revoke-permission)\n","title":"Permissions:Assign"},{"type":"object","properties":{"kind":{"type":"string","enum":["Registry:Addresses:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["Alias"]},"body":{"oneOf":[{"type":"object","properties":{"entityId":{"type":"string"},"alias":{"type":"string"},"operationKind":{"type":"string","enum":["Create"]},"description":{"type":"string","minLength":1,"maxLength":200},"values":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"memo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},"value":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[a-zA-Z0-9_:.-]+$"}},"required":["network","value"]}}},"required":["add"]}},"required":["entityId","alias","operationKind","values"],"additionalProperties":false,"title":"Alias creation"},{"type":"object","properties":{"entityId":{"type":"string"},"alias":{"type":"string"},"operationKind":{"type":"string","enum":["Update"]},"description":{"type":["string","null"],"minLength":1,"maxLength":200},"values":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"memo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},"value":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[a-zA-Z0-9_:.-]+$"}},"required":["network","value"]}},"remove":{"type":"array","items":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/Network"},"memo":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9]+$"},"value":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[a-zA-Z0-9_:.-]+$"}},"required":["network","value"]}}},"required":["add","remove"]}},"required":["entityId","alias","operationKind","values"],"additionalProperties":false,"title":"Alias update"},{"type":"object","properties":{"entityId":{"type":"string"},"alias":{"type":"string"},"operationKind":{"type":"string","enum":["Delete"]}},"required":["entityId","alias","operationKind"],"title":"Alias deletion"}]}},"required":["id","kind","body"]}},"required":["kind","changeRequest"],"description":"","title":"Registry:Addresses:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["Registry:ContractSchemas:Modify"]},"changeRequest":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["SmartContract"]},"operationKind":{"type":"string","enum":["Create","Delete"]},"body":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^cs-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","example":"cs-30ude-5i87r-gfrpg3fi68l2u14b"},"name":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9-]+$"},"description":{"type":"string","minLength":1,"maxLength":200},"network":{"type":"string","enum":["ArbitrumOne","ArbitrumSepolia","Arc","ArcTestnet","Areum","AvalancheC","AvalancheCFuji","Base","BaseSepolia","Bob","BobSepolia","Bsc","BscTestnet","Berachain","BerachainBepolia","Celo","CeloSepolia","Codex","CodexSepolia","Ethereum","EthereumClassic","EthereumClassicMordor","EthereumSepolia","EthereumHoodi","FlareC","FlareCCoston2","FlowEvm","FlowEvmTestnet","HyperEvm","HyperEvmTestnet","Ink","InkSepolia","Monad","MonadTestnet","Optimism","OptimismSepolia","Plasma","PlasmaTestnet","Plume","PlumeSepolia","Polygon","PolygonAmoy","Rayls","RaylsTestnet","Robinhood","RobinhoodSepolia","SeiPacific1","SeiAtlantic2","Sonic","SonicTestnet","Tempo","TempoModerato","Tsc","TscTestnet1","Xdc","XdcApothem","XLayer","XLayerSepolia"]},"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"schema":{}},"required":["id","name","network","address"]}},"required":["id","kind","operationKind","body"]}},"required":["kind","changeRequest"],"description":"","title":"Registry:ContractSchemas:Modify"},{"type":"object","properties":{"kind":{"type":"string","enum":["UserAction"]},"userAction":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"action":{"type":"object","properties":{"host":{"type":"string"},"method":{"type":"string"},"path":{"type":"string"},"params":{"type":"object","additionalProperties":{"type":"string"}},"body":{}},"required":["host","method","path"]}},"required":["id","kind","action"]}},"required":["kind","userAction"],"description":"","title":"UserAction"}]},"context":{"type":"object","additionalProperties":{}},"autoRejectDate":{"type":"string"},"autoClearDate":{"type":"string"}},"required":["id","reason","date","policy","activity","context"]}},"required":["policyEvaluation"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookPolicyTriggered"}},"webhook.event.retry.triggered":{"post":{"summary":"Webhook Event Retry Triggered","description":"Inbound event DFNS sends to your endpoint when it automatically retries a failed webhook delivery. This is a webhook event you receive, not an API method you can call. See [Webhook Event Deliveries & Retries](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries) for details.","tags":["Webhooks"],"requestBody":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/WebhookEnvelopeBase"},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook.event.retry.triggered"]},"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of this webhook retry event."},"webhookId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^wh-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the webhook to which this event is delivered.","example":"wh-705m3-si5pq-k3kkp3vv9fnehdil"},"retryOf":{"type":"string","minLength":1,"maxLength":64,"pattern":"^whe-[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{14,16}$","description":"ID of the webhook event whose delivery failed and is retried.","example":"whe-544ul-uqgad-jkgltj5p6fvd04cj"},"deliveryAttempt":{"type":"number","description":"Attempt number of this delivery attempt."},"originalEvent":{"allOf":[{"$ref":"#/components/schemas/WebhookEvent"},{"description":"The original Dfns event."}]}},"required":["id","webhookId","retryOf","deliveryAttempt","originalEvent"]}},"required":["kind","data"]}]}}}},"responses":{"200":{"description":"Respond with a 200 to indicate that the event was successfully received. If your endpoint returns anything else than a 200 status code, we will consider the delivery has failed and retry later. See details [here](https://docs.dfns.co/api-reference/webhook-events#webhook-event-deliveries-%26-retries)."}},"operationId":"webhookWebhookEventRetryTriggered"}}},"x-networks":[{"id":"Algorand","name":"Algorand","testnets":[{"network":"AlgorandTestnet","faucet":"https://bank.testnet.algorand.network/"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["ASA"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Aptos","name":"Aptos","testnets":[{"network":"AptosTestnet","faucet":"https://www.aptosfaucet.com/"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["AIP-21"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"ArbitrumOne","name":"Arbitrum One","testnets":[{"network":"ArbitrumSepolia","faucet":"https://cloud.google.com/application/web3/faucet"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Arc","name":"Arc","testnets":[{"network":"ArcTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Areum","name":"Areum","testnets":[],"tier":1,"specialty":true,"feeSponsor":false,"walletConnect":true,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"AvalancheC","name":"Avalanche C-Chain","testnets":[{"network":"AvalancheCFuji","faucet":"https://faucets.chain.link/fuji"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Base","name":"Base","testnets":[{"network":"BaseSepolia","faucet":"https://docs.base.org/base-chain/tools/network-faucets"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Berachain","name":"Berachain","testnets":[{"network":"BerachainBepolia","faucet":"https://bepolia.faucet.berachain.com/"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Bsc","name":"Binance Smart Chain","testnets":[{"network":"BscTestnet","faucet":"https://www.bnbchain.org/en/testnet-faucet"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Bitcoin","name":"Bitcoin","testnets":[{"network":"BitcoinSignet","faucet":"https://signetfaucet.com/"},{"network":"BitcoinTestnet4","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"},{"scheme":"Schnorr","curve":"secp256k1"}],"footnote":null},{"id":"BitcoinCash","name":"Bitcoin Cash","testnets":[],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Bob","name":"BOB","testnets":[{"network":"BobSepolia","faucet":"https://faucets.chain.link/bob-testnet"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Canton","name":"Canton","testnets":[{"network":"CantonTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["CIP-56"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Cardano","name":"Cardano","testnets":[{"network":"CardanoPreprod","faucet":"https://docs.cardano.org/cardano-testnets/tools/faucet"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["Asset"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Celo","name":"Celo","testnets":[{"network":"CeloSepolia","faucet":"https://faucet.celo.org/celo-sepolia"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":"[^2]"},{"id":"Codex","name":"Codex","testnets":[{"network":"CodexSepolia","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Concordium","name":"Concordium","testnets":[{"network":"ConcordiumTestnet","faucet":"https://github.com/Concordium/concordium-dapp-examples/tree/main/testnet-faucet"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["CIS-2","CIS-7"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"CosmosHub4","name":"Cosmos Hub 4","testnets":[{"network":"CosmosIcsTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Dogecoin","name":"Dogecoin","testnets":[{"network":"DogecoinTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Ethereum","name":"Ethereum","testnets":[{"network":"EthereumHoodi","faucet":null},{"network":"EthereumSepolia","faucet":"https://cloud.google.com/application/web3/faucet/ethereum/sepolia"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721","ERC-7984"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"EthereumClassic","name":"Ethereum Classic","testnets":[{"network":"EthereumClassicMordor","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"FlareC","name":"Flare C-Chain","testnets":[{"network":"FlareCCoston2","faucet":"https://faucet.flare.network/coston2"}],"tier":1,"specialty":true,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"FlowEvm","name":"Flow EVM","testnets":[{"network":"FlowEvmTestnet","faucet":"https://faucet.flow.com/fund-account"}],"tier":1,"specialty":true,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Hedera","name":"Hedera","testnets":[{"network":"HederaTestnet","faucet":"https://portal.hedera.com/faucet"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["HTS","HIP-17","ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"HyperEvm","name":"HyperEVM","testnets":[{"network":"HyperEvmTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"InternetComputer","name":"ICP (aka Dfinity)","testnets":[],"tier":1,"specialty":true,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Ink","name":"Ink","testnets":[{"network":"InkSepolia","faucet":"https://inkonchain.com/faucet"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Ion","name":"ION","testnets":[{"network":"IonTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["TEP-74"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Iota","name":"Iota","testnets":[{"network":"IotaTestnet","faucet":"https://docs.iota.org/developer/getting-started/get-coins"}],"tier":1,"specialty":true,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Kusama","name":"Kusama","testnets":[{"network":"Westend","faucet":"https://faucet.polkadot.io/westend"}],"tier":2,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":"@deprecated Assets have been moved to Asset Hub. Refer to [multichain wallets](https://docs.dfns.co/guides/multichain-wallets) to recover your funds."},{"id":"KusamaAssetHub","name":"Kusama Asset Hub","testnets":[{"network":"WestendAssetHub","faucet":null}],"tier":2,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Litecoin","name":"Litecoin","testnets":[{"network":"LitecoinTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"},{"scheme":"Schnorr","curve":"secp256k1"}],"footnote":null},{"id":"Monad","name":"Monad","testnets":[{"network":"MonadTestnet","faucet":"https://faucet.monad.xyz"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Movement","name":"Movement","testnets":[{"network":"MovementTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["AIP-21"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Near","name":"NEAR","testnets":[{"network":"NearTestnet","faucet":"https://near-faucet.io/"}],"tier":2,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Optimism","name":"Optimism","testnets":[{"network":"OptimismSepolia","faucet":null}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Origyn","name":"ORIGYN","testnets":[],"tier":1,"specialty":true,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Plasma","name":"Plasma","testnets":[{"network":"PlasmaTestnet","faucet":"https://www.plasma.to/docs/plasma-chain/tools/faucets"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Plume","name":"Plume","testnets":[{"network":"PlumeSepolia","faucet":"https://faucet.plume.org/"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Polkadot","name":"Polkadot","testnets":[{"network":"Paseo","faucet":null}],"tier":2,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":"@deprecated Assets have been moved to Asset Hub. Refer to [multichain wallets](https://docs.dfns.co/guides/multichain-wallets) to recover your funds."},{"id":"PolkadotAssetHub","name":"Polkadot Asset Hub","testnets":[{"network":"PaseoAssetHub","faucet":null}],"tier":2,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Polygon","name":"Polygon","testnets":[{"network":"PolygonAmoy","faucet":"https://faucet.polygon.technology/"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Polymesh","name":"Polymesh","testnets":[{"network":"PolymeshTestnet","faucet":null}],"tier":1,"specialty":true,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Rayls","name":"Rayls","testnets":[{"network":"RaylsTestnet","faucet":"https://devnet-dapp.rayls.com/"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":null,"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Robinhood","name":"Robinhood Chain","testnets":[{"network":"RobinhoodSepolia","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"SeiPacific1","name":"Sei Pacific","testnets":[{"network":"SeiAtlantic2","faucet":"https://docs.sei.io/learn/faucet"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Solana","name":"Solana","testnets":[{"network":"SolanaDevnet","faucet":"https://faucet.solana.com/"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["SPL","SPL2022"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Sonic","name":"Sonic","testnets":[{"network":"SonicTestnet","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Starknet","name":"Starknet","testnets":[{"network":"StarknetSepolia","faucet":"https://starknet-faucet.vercel.app"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["SNIP-2","SNIP-3"],"keyFormats":[{"scheme":"ECDSA","curve":"stark"}],"footnote":null},{"id":"Stellar","name":"Stellar","testnets":[{"network":"StellarTestnet","faucet":"https://lab.stellar.org/account/fund"}],"tier":1,"specialty":false,"feeSponsor":true,"walletConnect":true,"standards":["SEP-41"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Sui","name":"Sui","testnets":[{"network":"SuiTestnet","faucet":"https://faucet.sui.io/"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["Coin"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Tempo","name":"Tempo","testnets":[{"network":"TempoModerato","faucet":null}],"tier":1,"specialty":true,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Tezos","name":"Tezos","testnets":[{"network":"TezosShadownet","faucet":"https://faucet.shadownet.teztnets.com/"}],"tier":2,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":null,"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"},{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Ton","name":"TON","testnets":[{"network":"TonTestnet","faucet":"https://faucet.chainstack.com/ton-testnet-faucet"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["TEP-74"],"keyFormats":[{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null},{"id":"Tron","name":"TRON","testnets":[{"network":"TronNile","faucet":"https://nileex.io/join/getJoinPage"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["TRC-10","TRC-20","TRC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Tsc","name":"Trusted Smart Chain","testnets":[{"network":"TscTestnet1","faucet":null}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"XLayer","name":"X Layer Network","testnets":[{"network":"XLayerSepolia","faucet":"https://web3.okx.com/xlayer/faucet/xlayerfaucet/"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"Xdc","name":"XDC Network","testnets":[{"network":"XdcApothem","faucet":"https://faucet.apothem.network/"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":true,"standards":["ERC-20","ERC-721"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"}],"footnote":null},{"id":"XrpLedger","name":"XrpLedger (aka Ripple)","testnets":[{"network":"XrpLedgerTestnet","faucet":"https://xrpl.org/resources/dev-tools/xrp-faucets"}],"tier":1,"specialty":false,"feeSponsor":false,"walletConnect":false,"standards":["IOU","XLS-33"],"keyFormats":[{"scheme":"ECDSA","curve":"secp256k1"},{"scheme":"EdDSA","curve":"ed25519"}],"footnote":null}],"externalDocs":{"description":"DFNS API reference","url":"https://docs.dfns.co/api-reference"}}