{
  "openapi": "3.0.0",
  "info": {
    "title": "Hifi API",
    "version": "3.0.0",
    "description": "API documentation for HIFI"
  },
  "servers": [
    {
      "url": "https://production.hifi.com",
      "description": "Production server"
    },
    {
      "url": "https://sandbox.hifi.com",
      "description": "Sandbox server"
    }
  ],
  "tags": [
    {
      "name": "Common",
      "description": "Common endpoints"
    },
    {
      "name": "User",
      "description": "User endpoints"
    },
    {
      "name": "Counter Party",
      "description": "Counter party endpoints"
    },
    {
      "name": "Crypto Transfer",
      "description": "Crypto transfer and batch transfer endpoints"
    },
    {
      "name": "Wallet",
      "description": "Wallet and wallet offer endpoints"
    },
    {
      "name": "External Account",
      "description": "External bank account endpoints, scoped to a counter party"
    },
    {
      "name": "External Wallet",
      "description": "External wallet endpoints, scoped to a counter party"
    },
    {
      "name": "External Card",
      "description": "External card endpoints, scoped to a counter party"
    },
    {
      "name": "Token Swap",
      "description": "Token swap endpoints"
    },
    {
      "name": "Bridge",
      "description": "Bridge endpoints"
    },
    {
      "name": "Virtual Account",
      "description": "Virtual account endpoints"
    },
    {
      "name": "Compliance",
      "description": "Compliance and compliance link endpoints"
    },
    {
      "name": "RFI",
      "description": "Request for information (RFI) endpoints"
    },
    {
      "name": "Webhook Endpoint",
      "description": "Webhook endpoint endpoints"
    },
    {
      "name": "File",
      "description": "File upload endpoints"
    },
    {
      "name": "Onramp",
      "description": "Onramp (fiat to crypto) endpoints"
    },
    {
      "name": "Offramp",
      "description": "Offramp (crypto to fiat) endpoints"
    },
    {
      "name": "Orchestration Address",
      "description": "Orchestration (liquidation) address endpoints"
    },
    {
      "name": "KYC Link",
      "description": "Hosted and custom KYC/KYB link endpoints"
    },
    {
      "name": "Transfer Approval",
      "description": "Transfer approval endpoints"
    },
    {
      "name": "Corridor",
      "description": "Supported fiat/crypto transfer corridor endpoints"
    },
    {
      "name": "Migration",
      "description": "v2-to-v3 ID mapping endpoints"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "parameters": {
      "BridgeStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "NOT_INITIATED",
            "OPEN_QUOTE",
            "CREATED",
            "SOURCE_INITIATED",
            "SOURCE_PENDING",
            "SOURCE_PROCESSED",
            "SOURCE_FAILED",
            "DESTINATION_INITIATED",
            "DESTINATION_PENDING",
            "COMPLETED",
            "DESTINATION_FAILED",
            "QUOTE_FAILED",
            "UNKNOWN",
            "PENDING_APPROVAL",
            "APPROVED",
            "REJECTED",
            "EXPIRED"
          ]
        },
        "description": "Filter bridge transfers by status."
      },
      "BridgeSourceUserIdQueryParameter": {
        "name": "sourceUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter bridge transfers by the source user's public ID (prefixed with `usr_`).",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "BridgeDestinationUserIdQueryParameter": {
        "name": "destinationUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter bridge transfers by the destination user's public ID (prefixed with `usr_`).",
        "example": "usr_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "LimitParameter": {
        "name": "limit",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "description": "default to 10, maximum to 100",
        "required": false
      },
      "StartingAfterParameter": {
        "name": "startingAfter",
        "in": "query",
        "schema": {
          "type": "string"
        },
        "description": "Return records after this cursor.",
        "required": false
      },
      "EndingBeforeParameter": {
        "name": "endingBefore",
        "in": "query",
        "schema": {
          "type": "string"
        },
        "description": "Return records before this cursor.",
        "required": false
      },
      "ComplianceLinkIdPathParameter": {
        "name": "complianceLinkId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the compliance link (prefixed with `cl_`)",
        "example": "cl_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "CorridorIdPathParameter": {
        "name": "corridorId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the corridor (prefixed with `crd_`)",
        "example": "crd_9aB0xY4mNpXwZ7bV1aLdt"
      },
      "CorridorStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACTIVE",
            "INACTIVE"
          ]
        },
        "description": "Filter corridors by status."
      },
      "CorridorFiatCurrencyQueryParameter": {
        "name": "fiatCurrency",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter corridors by fiat currency, e.g. `USD`.",
        "example": "USD"
      },
      "CorridorFiatCountryQueryParameter": {
        "name": "fiatCountry",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter corridors by fiat country (ISO 3166-1 alpha-3).",
        "example": "USA"
      },
      "CorridorTransferTypeQueryParameter": {
        "name": "transferType",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACH",
            "WIRE",
            "SWIFT",
            "RTP",
            "PIX",
            "SPEI",
            "CHATS",
            "FPS",
            "CIPS",
            "SEPA",
            "INSTAPAY",
            "PESONET",
            "NEQUI",
            "BANK"
          ]
        },
        "description": "Filter corridors by transfer type."
      },
      "CorridorDirectionQueryParameter": {
        "name": "direction",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ONRAMP",
            "OFFRAMP"
          ]
        },
        "description": "Filter corridors by direction."
      },
      "CorridorExpandQueryParameter": {
        "name": "expand",
        "in": "query",
        "required": false,
        "schema": {
          "type": "boolean",
          "default": false
        },
        "description": "If `true`, each item in `data` is a full corridor object. If `false` (default), each item is just the corridor's public ID."
      },
      "CounterPartyTypeQueryParameter": {
        "name": "type",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "INDIVIDUAL",
            "BUSINESS"
          ]
        },
        "description": "Filter counter parties by type."
      },
      "CryptoTransferStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "NOT_INITIATED",
            "CREATED",
            "PENDING_APPROVAL",
            "APPROVED",
            "REJECTED",
            "EXPIRED",
            "INITIATED",
            "PENDING",
            "COMPLETED",
            "FAILED",
            "QUOTE_FAILED",
            "OPEN_QUOTE",
            "UNKNOWN",
            "CANCELLED"
          ]
        },
        "description": "Filter crypto transfers by status."
      },
      "CryptoTransferSourceUserIdQueryParameter": {
        "name": "sourceUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter crypto transfers by the source user public ID (prefixed with `usr_`).",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "CryptoTransferDestinationUserIdQueryParameter": {
        "name": "destinationUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter crypto transfers by the destination user public ID (prefixed with `usr_`).",
        "example": "usr_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "BatchCryptoTransferStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "NOT_INITIATED",
            "CREATED",
            "PENDING_APPROVAL",
            "APPROVED",
            "REJECTED",
            "EXPIRED",
            "INITIATED",
            "PENDING",
            "COMPLETED",
            "FAILED",
            "QUOTE_FAILED",
            "OPEN_QUOTE",
            "UNKNOWN",
            "CANCELLED"
          ]
        },
        "description": "Filter batch crypto transfers by status."
      },
      "BatchCryptoTransferSourceUserIdQueryParameter": {
        "name": "sourceUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter batch crypto transfers by the source user public ID (prefixed with `usr_`).",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "ExternalAccountStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACTIVE",
            "INACTIVE"
          ]
        },
        "description": "Filter external accounts by status."
      },
      "ExternalAccountTransferTypeQueryParameter": {
        "name": "transferType",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACH",
            "WIRE",
            "SWIFT",
            "RTP",
            "PIX",
            "SPEI",
            "CHATS",
            "FPS",
            "CIPS",
            "SEPA",
            "INSTAPAY",
            "PESONET",
            "NEQUI",
            "BANK"
          ]
        },
        "description": "Filter external accounts by transfer type."
      },
      "ExternalAccountCurrencyQueryParameter": {
        "name": "currency",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "USD",
            "EUR",
            "BRL",
            "NGN",
            "KES",
            "TZS",
            "UGX",
            "BWP",
            "XAF",
            "MWK",
            "RWF",
            "ZMW",
            "XOF",
            "ZAR",
            "MXN",
            "PHP",
            "AED",
            "HKD",
            "CNY",
            "COP",
            "ARS",
            "SGD",
            "GBP"
          ]
        },
        "description": "Filter external accounts by currency."
      },
      "ExternalCardStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACTIVE",
            "INACTIVE"
          ]
        },
        "description": "Filter external cards by status."
      },
      "CardSessionIdPathParameter": {
        "name": "cardSessionId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the external card session (prefixed with `ecs_`)",
        "example": "ecs_2mNpXwZ7bV1aLcs3Kf9dQ"
      },
      "CounterPartyIdPathParameter": {
        "name": "counterPartyId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the counter party (prefixed with `cpty_`)",
        "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "CounterPartyIdQueryParameter": {
        "name": "counterPartyId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the counter party to filter by (prefixed with `cpty_`)",
        "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "ExternalAccountIdPathParameter": {
        "name": "externalAccountId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the external account (prefixed with `extacct_`)",
        "example": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
      },
      "ExternalCardIdPathParameter": {
        "name": "externalCardId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the external card (prefixed with `extcrd_`)",
        "example": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ"
      },
      "VirtualAccountIdPathParameter": {
        "name": "virtualAccountId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the virtual account (prefixed with `va_`)",
        "example": "va_5Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "SettlementRuleIdPathParameter": {
        "name": "settlementRuleId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the settlement rule (prefixed with `sr_`)",
        "example": "sr_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "WalletIdPathParameter": {
        "name": "walletId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the wallet (prefixed with `wlt_`)",
        "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
      },
      "ExternalWalletIdPathParameter": {
        "name": "externalWalletId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the external wallet (prefixed with `extw_`)",
        "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
      },
      "OnrampIdPathParameter": {
        "name": "onrampId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the onramp transaction (prefixed with `onramp_`)",
        "example": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "OfframpIdPathParameter": {
        "name": "offrampId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the offramp transaction (prefixed with `offramp_`)",
        "example": "offramp_9dQ2mNpXwZ7bV1aLcs3Kf"
      },
      "CryptoTransferIdPathParameter": {
        "name": "cryptoTransferId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the crypto transfer (prefixed with `ctx_`)",
        "example": "ctx_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "BatchCryptoTransferIdPathParameter": {
        "name": "batchCryptoTransferId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the batch crypto transfer (prefixed with `bctx_`)",
        "example": "bctx_2mNpXwZ7bV1aLcs3Kf9dQ"
      },
      "SwapIdPathParameter": {
        "name": "swapId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the swap (prefixed with `swap_`)",
        "example": "swap_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "BridgeIdPathParameter": {
        "name": "bridgeId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the bridge transfer (prefixed with `brdg_`)",
        "example": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf"
      },
      "DocumentIdPathParameter": {
        "name": "documentId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the compliance document (prefixed with `doc_`)",
        "example": "doc_5Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "AssociatedPartyIdPathParameter": {
        "name": "associatedPartyId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the associated party (prefixed with `ap_`)",
        "example": "ap_1aLcs3Kf9dQ2mNpXwZ7bV"
      },
      "AssociatedPartyIdQueryParameter": {
        "name": "associatedPartyId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the associated party to filter by (prefixed with `ap_`)",
        "example": "ap_1aLcs3Kf9dQ2mNpXwZ7bV"
      },
      "WebhookEndpointIdPathParameter": {
        "name": "webhookEndpointId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the webhook endpoint (prefixed with `we_`)",
        "example": "we_4mNpXwZ7bV1aLcs3Kf9dQ"
      },
      "WebhookEventIdPathParameter": {
        "name": "webhookEventId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "ID of the webhook event (prefixed with `evt_`)",
        "example": "evt_9aB0xY4mNpXwZ7bV1aLdt"
      },
      "WebhookDeliveryStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "PENDING",
            "ENQUEUED",
            "PROCESSING",
            "DELIVERED",
            "RETRY",
            "FAILED"
          ]
        },
        "description": "Filter delivery history by status."
      },
      "FileIdPathParameter": {
        "name": "fileId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the file (prefixed with `file_`)",
        "example": "file_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "DepositIdPathParameter": {
        "name": "depositId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the wallet deposit (prefixed with `dep_`)",
        "example": "dep_9dQ2mNpXwZ7bV1aLcs3Kf"
      },
      "OfferIdPathParameter": {
        "name": "offerId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the Canton offer (prefixed with `offer_`)",
        "example": "offer_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "KycLinkIdPathParameter": {
        "name": "kycLinkId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "description": "ID of the KYC link. Unlike other v3 resources, this is a raw UUID with no\nprefix (not a `resolvePublicIds`-style public ID).\n",
        "example": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
      },
      "KycLinkUboIdPathParameter": {
        "name": "uboId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "description": "ID of the UBO (ultimate beneficial owner).",
        "example": "1a2b3c4d-5e6f-7089-a1b2-c3d4e5f60789"
      },
      "KycLinkDocumentIdPathParameter": {
        "name": "documentId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "description": "ID of the compliance document.",
        "example": "2b3c4d5e-6f70-89a1-b2c3-d4e5f6078901"
      },
      "KycLinkRailQueryParameter": {
        "name": "rail",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Restrict the KYC status lookup to a single rail. Defaults to all rails the link was generated with."
      },
      "OfframpSourceUserIdQueryParameter": {
        "name": "sourceUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter offramps by source user public ID (prefixed with `usr_`).",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "OfframpDestinationUserIdQueryParameter": {
        "name": "destinationUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter offramps by destination user public ID (prefixed with `usr_`).",
        "example": "usr_7dLpR2mNpXwZ7bV1aQz3x"
      },
      "OfframpStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "NOT_INITIATED",
            "CREATED",
            "PENDING_APPROVAL",
            "OPEN_QUOTE",
            "CRYPTO_INITIATED",
            "AWAITING_FUNDS",
            "CRYPTO_PENDING",
            "CRYPTO_PROCESSED",
            "FIAT_INITIATED",
            "FIAT_PENDING",
            "COMPLETED",
            "FIAT_FAILED",
            "FIAT_RETURNED",
            "CRYPTO_RETURNED",
            "CRYPTO_FAILED",
            "QUOTE_FAILED",
            "IN_REVIEW",
            "REJECTED",
            "EXPIRED",
            "CANCELLED"
          ]
        },
        "description": "Filter offramps by transaction status."
      },
      "OfframpRateSourceCurrencyQueryParameter": {
        "name": "sourceCurrency",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "USDC",
            "USDT",
            "USDG",
            "PYUSD",
            "PYUSD0",
            "USDCX"
          ]
        },
        "description": "Source stablecoin to convert from.",
        "example": "USDC"
      },
      "OfframpRateDestinationCurrencyQueryParameter": {
        "name": "destinationCurrency",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "USD",
            "PHP",
            "AED",
            "EUR",
            "BRL",
            "HKD",
            "CNY",
            "MXN",
            "COP",
            "ARS",
            "NGN",
            "KES",
            "BWP",
            "ZAR",
            "TZS",
            "UGX",
            "XAF",
            "MWK",
            "RWF",
            "ZMW",
            "XOF",
            "SGD",
            "GBP",
            "INR",
            "AUD",
            "CAD",
            "JPY",
            "VND"
          ]
        },
        "description": "Destination fiat currency to convert to.",
        "example": "USD"
      },
      "OnrampSourceUserIdQueryParameter": {
        "name": "sourceUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter by the public ID of the funding (source) user (prefixed with `usr_`).",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "OnrampDestinationUserIdQueryParameter": {
        "name": "destinationUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter by the public ID of the receiving (destination) user (prefixed with `usr_`).",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "OnrampStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "$ref": "#/components/schemas/OnrampStatus"
        },
        "description": "Filter by onramp status."
      },
      "OnrampRateSourceCurrencyQueryParameter": {
        "name": "sourceCurrency",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "USD"
          ]
        },
        "description": "Source fiat currency.",
        "example": "USD"
      },
      "OnrampRateDestinationCurrencyQueryParameter": {
        "name": "destinationCurrency",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "USDC",
            "USDT",
            "PYUSD0"
          ]
        },
        "description": "Destination crypto currency.",
        "example": "USDC"
      },
      "OnrampRateTransferTypeQueryParameter": {
        "name": "transferType",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACH",
            "WIRE",
            "RTP"
          ]
        },
        "description": "Fiat rail for the rate lookup.",
        "example": "ACH"
      },
      "OrchestrationAddressIdPathParameter": {
        "name": "orchestrationAddressId",
        "in": "path",
        "schema": {
          "type": "string",
          "pattern": "^orchaddr_.+$"
        },
        "required": true,
        "description": "Public ID of the orchestration address."
      },
      "OrchestrationDepositIdPathParameter": {
        "name": "orchestrationDepositId",
        "in": "path",
        "schema": {
          "type": "string",
          "pattern": "^orchdep_.+$"
        },
        "required": true,
        "description": "Globally unique public ID of the orchestration deposit."
      },
      "OrchestrationBatchIdPathParameter": {
        "name": "orchestrationBatchId",
        "in": "path",
        "schema": {
          "type": "string",
          "pattern": "^orchbat_.+$"
        },
        "required": true,
        "description": "Globally unique public ID of the orchestration batch."
      },
      "OrchestrationUserIdQueryParameter": {
        "name": "userId",
        "in": "query",
        "schema": {
          "type": "string",
          "pattern": "^usr_.+$"
        },
        "required": false,
        "description": "Optional public user ID filter. When omitted, records are scoped to the authenticated profile."
      },
      "OrchestrationAddressIdQueryParameter": {
        "name": "orchestrationAddressId",
        "in": "query",
        "schema": {
          "type": "string",
          "pattern": "^orchaddr_.+$"
        },
        "required": true,
        "description": "Public ID of the orchestration address that owns the child collection."
      },
      "OrchestrationProfileIdQueryParameter": {
        "name": "profileId",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "required": false,
        "description": "Optional profile (client/organization) scope. When omitted the request is\nscoped to the caller's default profile. Used by `requestId` idempotency:\naddresses are unique per `(profileId, requestId)`.\n"
      },
      "OrchestrationDepositStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "PENDING",
            "BATCHED",
            "IGNORED",
            "REFUNDED"
          ]
        },
        "required": false,
        "description": "Filter deposits by status."
      },
      "OrchestrationBatchStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "PENDING",
            "PROCESSING",
            "COMPLETED",
            "FAILED"
          ]
        },
        "required": false,
        "description": "Filter batches by status."
      },
      "OrchestrationBatchIdQueryParameter": {
        "name": "orchestrationBatchId",
        "in": "query",
        "schema": {
          "type": "string",
          "pattern": "^orchbat_.+$"
        },
        "required": false,
        "description": "Optional public batch ID used to filter a deposit collection."
      },
      "RfiIdPathParameter": {
        "name": "rfiId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the request for information (prefixed with `rfi_`)",
        "example": "rfi_5Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "RfiStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "issued",
            "submitted",
            "resolved",
            "expired"
          ]
        },
        "description": "Filter requests by status."
      },
      "RfiKindQueryParameter": {
        "name": "kind",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "onboarding",
            "transaction"
          ]
        },
        "description": "Filter requests by what they are attached to."
      },
      "RfiUserIdQueryParameter": {
        "name": "userId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the user whose requests are listed (prefixed with `usr_`)",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "RfiTransferIdQueryParameter": {
        "name": "transferId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the onramp or offramp the request is held against (prefixed with `onramp_` or `offramp_`)",
        "example": "offramp_XIMmMIoSrrgLSBNTQPmqA"
      },
      "RfiLimitParameter": {
        "name": "limit",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        },
        "description": "Number of requests to return."
      },
      "RfiOffsetParameter": {
        "name": "offset",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 0
        },
        "description": "Number of requests to skip."
      },
      "SwapStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "DRAFT",
            "CREATED",
            "PENDING",
            "OPEN_QUOTE",
            "QUOTE_FAILED",
            "COMPLETED",
            "FAILED"
          ]
        },
        "description": "Filter swaps by status."
      },
      "SwapSourceUserIdQueryParameter": {
        "name": "sourceUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter swaps by source user public ID (prefixed with `usr_`).",
        "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
      },
      "SwapDestinationUserIdQueryParameter": {
        "name": "destinationUserId",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter swaps by destination user public ID (prefixed with `usr_`).",
        "example": "usr_7bV1aLcs3Kf9dQ2mNpXwZ"
      },
      "TransferApprovalIdPathParameter": {
        "name": "transferApprovalId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the transfer approval (prefixed with `ta_`)",
        "example": "ta_9aB0xY4mNpXwZ7bV1aLdt"
      },
      "TransferApprovalStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "PENDING",
            "APPROVED",
            "REJECTED",
            "EXPIRED"
          ]
        },
        "description": "Filter transfer approvals by status."
      },
      "UserTypeParameter": {
        "name": "type",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "INDIVIDUAL",
            "BUSINESS"
          ]
        },
        "description": "Return only users of this type.",
        "required": false
      },
      "UserIdPathParameter": {
        "name": "userId",
        "in": "path",
        "schema": {
          "type": "string",
          "pattern": "^user_[A-Za-z0-9]+$"
        },
        "description": "ID of the user.",
        "required": true
      },
      "UserIdQueryParameter": {
        "name": "userId",
        "in": "query",
        "schema": {
          "type": "string",
          "pattern": "^user_[A-Za-z0-9]+$"
        },
        "description": "Public ID of the user to filter by.",
        "required": false
      },
      "SignedAgreementIdPathParameter": {
        "name": "signedAgreementId",
        "in": "path",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "description": "ID of the signed agreement.",
        "required": true
      },
      "VirtualAccountStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACTIVE",
            "INACTIVE"
          ]
        },
        "description": "Filter virtual accounts by status."
      },
      "VaRouteIdPathParameter": {
        "name": "vaRouteId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the virtual account route (prefixed with `var_`)",
        "example": "var_9aB0xY4mNpXwZ7bV1aLdt"
      },
      "VaRouteStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACTIVE",
            "INACTIVE"
          ]
        },
        "description": "Filter virtual account routes by status."
      },
      "VaRouteFiatCurrencyQueryParameter": {
        "name": "fiatCurrency",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter virtual account routes by fiat currency, e.g. `USD`.",
        "example": "USD"
      },
      "VaRouteCountryQueryParameter": {
        "name": "country",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Filter virtual account routes by destination country (ISO 3166-1 alpha-3).",
        "example": "USA"
      },
      "VaRouteTransferTypeQueryParameter": {
        "name": "transferType",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ACH",
            "WIRE",
            "SWIFT",
            "RTP",
            "PIX",
            "SPEI",
            "CHATS",
            "FPS",
            "CIPS",
            "SEPA",
            "INSTAPAY",
            "PESONET",
            "NEQUI",
            "BANK"
          ]
        },
        "description": "Filter virtual account routes by transfer type."
      },
      "VaRouteExpandQueryParameter": {
        "name": "expand",
        "in": "query",
        "required": false,
        "schema": {
          "type": "boolean",
          "default": false
        },
        "description": "If `true`, each item in `data` is a full virtual account route object. If `false` (default), each item is just the route's public ID."
      },
      "WalletBalanceCurrencyQueryParameter": {
        "name": "currency",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "USDC",
            "USDT",
            "USDG",
            "SOL",
            "RLUSD",
            "USDHIFI",
            "PYUSD",
            "PYUSD0",
            "USDCX",
            "GAS"
          ]
        },
        "description": "Currency to return the balance for. Use `GAS` for the chain's native gas token."
      },
      "WalletIdQueryParameter": {
        "name": "walletId",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Public ID of the wallet to filter by (prefixed with `wlt_`)",
        "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
      },
      "WalletDepositCurrencyQueryParameter": {
        "name": "currency",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "USDC",
            "USDT",
            "USDG",
            "PYUSD",
            "PYUSD0",
            "USDCX"
          ]
        },
        "description": "Filter deposits by currency."
      },
      "WalletDepositStatusQueryParameter": {
        "name": "status",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "CONFIRMED",
            "COMPLETED"
          ]
        },
        "description": "Filter deposits by status."
      },
      "WalletDepositMinAmountQueryParameter": {
        "name": "minAmount",
        "in": "query",
        "required": false,
        "schema": {
          "type": "number",
          "minimum": 0.01,
          "default": 0.01
        },
        "description": "Only return deposits with an amount greater than or equal to this value."
      },
      "WalletDepositCreatedAfterQueryParameter": {
        "name": "createdAfter",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer"
        },
        "description": "Only return deposits created at or after this Unix timestamp (milliseconds)."
      },
      "WalletDepositCreatedBeforeQueryParameter": {
        "name": "createdBefore",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer"
        },
        "description": "Only return deposits created before this Unix timestamp (milliseconds)."
      },
      "WalletOfferCreatedAfterQueryParameter": {
        "name": "createdAfter",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "description": "Only return offers created at or after this ISO 8601 datetime."
      },
      "WalletOfferCreatedBeforeQueryParameter": {
        "name": "createdBefore",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "description": "Only return offers created before this ISO 8601 datetime."
      }
    },
    "requestBodies": {
      "CreateBridgeBody": {
        "required": true,
        "description": "Bridge transfer details. The source and destination chains are derived from the\nreferenced wallets and must be different. Provide exactly one of\n`destination.walletId` or `destination.externalWalletId`.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BridgeCreate"
            },
            "examples": {
              "OwnedWalletExample": {
                "summary": "Bridge to an owned wallet",
                "value": {
                  "requestId": "b3d1f2a4-5c6e-4a7b-8c9d-0e1f2a3b4c5d",
                  "amount": 100,
                  "source": {
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "currency": "USDC"
                  },
                  "destination": {
                    "walletId": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ",
                    "currency": "USDC"
                  }
                }
              },
              "ExternalWalletExample": {
                "summary": "Bridge to an external wallet",
                "value": {
                  "requestId": "c4e2a3b5-6d7f-4b8c-9d0e-1f2a3b4c5d6e",
                  "amount": 250,
                  "source": {
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "currency": "USDC"
                  },
                  "destination": {
                    "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
                    "currency": "USDC"
                  }
                }
              },
              "RequireApprovalExample": {
                "summary": "Bridge held for transfer approval",
                "value": {
                  "requestId": "d5f3b4c6-7e80-4c9d-8e1f-2a3b4c5d6e7f",
                  "amount": 50,
                  "source": {
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "currency": "USDT"
                  },
                  "destination": {
                    "walletId": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ",
                    "currency": "USDT"
                  },
                  "requireApproval": true
                }
              }
            }
          }
        }
      },
      "ComplianceUpdateProfileBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceProfile"
            }
          }
        }
      },
      "ComplianceUpdateQuestionnaireBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceQuestionnaire"
            }
          }
        }
      },
      "ComplianceAddDocumentBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceDocumentAdd"
            }
          }
        }
      },
      "ComplianceUpdateDocumentBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceDocumentUpdate"
            }
          }
        }
      },
      "ComplianceAddAssociatedPartyBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceAssociatedPartyAdd"
            }
          }
        }
      },
      "ComplianceUpdateAssociatedPartyBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceAssociatedPartyUpdate"
            }
          }
        }
      },
      "GenerateComplianceLinkBody": {
        "required": true,
        "description": "Compliance link generation parameters. Exactly one of `userId` or `userType`\nmust be provided.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceLinkCreate"
            },
            "examples": {
              "ExistingUserExample": {
                "summary": "Generate a link for an existing user",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "redirectUrl": "https://app.example.com/onboarding/complete"
                }
              },
              "NewIndividualExample": {
                "summary": "Generate a link and create a new individual user",
                "value": {
                  "userType": "INDIVIDUAL",
                  "recipientEmail": "jane.doe@example.com",
                  "redirectUrl": "https://app.example.com/onboarding/complete"
                }
              },
              "NewBusinessExample": {
                "summary": "Generate a link and create a new business user",
                "value": {
                  "userType": "BUSINESS",
                  "templateId": "a1b2c3d4-e5f6-4789-a012-3456789abcde"
                }
              }
            }
          }
        }
      },
      "CreateCounterPartyBody": {
        "required": true,
        "description": "Counter party details. The `type` field selects whether the counter party\nis an individual or a business, which determines the required fields.\n",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "title": "Individual",
                  "$ref": "#/components/schemas/CounterPartyCreateIndividual"
                },
                {
                  "title": "Business",
                  "$ref": "#/components/schemas/CounterPartyCreateBusiness"
                }
              ],
              "discriminator": {
                "propertyName": "type"
              }
            },
            "examples": {
              "IndividualExample": {
                "summary": "Individual counter party",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "type": "INDIVIDUAL",
                  "firstName": "Jane",
                  "lastName": "Doe",
                  "phoneNumber": "+14155552671",
                  "email": "jane.doe@example.com",
                  "dateOfBirth": "1990-01-15",
                  "taxId": "123-45-6789",
                  "nationality": "USA",
                  "address": {
                    "addressLine1": "123 Main Street",
                    "city": "New York",
                    "stateProvinceRegion": "NY",
                    "postalCode": "10001",
                    "country": "USA"
                  }
                }
              },
              "BusinessExample": {
                "summary": "Business counter party",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "type": "BUSINESS",
                  "businessName": "Acme Corp",
                  "category": "software",
                  "phoneNumber": "+14155552671",
                  "incorporationDate": "2015-06-01",
                  "taxId": "12-3456789",
                  "email": "ops@acme.example.com",
                  "address": {
                    "addressLine1": "500 Market Street",
                    "city": "San Francisco",
                    "stateProvinceRegion": "CA",
                    "postalCode": "94105",
                    "country": "USA"
                  }
                }
              }
            }
          }
        }
      },
      "UpdateCounterPartyBody": {
        "required": true,
        "description": "Fields to update on the counter party. Provide the full object for the\ncounter party type; the `type` field selects which fields apply.\n",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "title": "Individual",
                  "$ref": "#/components/schemas/CounterPartyCreateIndividual"
                },
                {
                  "title": "Business",
                  "$ref": "#/components/schemas/CounterPartyCreateBusiness"
                }
              ],
              "discriminator": {
                "propertyName": "type"
              }
            },
            "examples": {
              "UpdateIndividualExample": {
                "summary": "Update an individual counter party",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "type": "INDIVIDUAL",
                  "firstName": "Jane",
                  "lastName": "Smith",
                  "phoneNumber": "+14155559999",
                  "email": "jane.smith@example.com",
                  "dateOfBirth": "1990-01-15",
                  "taxId": "123-45-6789",
                  "nationality": "USA",
                  "address": {
                    "addressLine1": "456 Elm Street",
                    "city": "New York",
                    "stateProvinceRegion": "NY",
                    "postalCode": "10002",
                    "country": "USA"
                  }
                }
              }
            }
          }
        }
      },
      "CreateCryptoTransferBody": {
        "required": true,
        "description": "Crypto transfer details. Provide exactly one of `destination.walletId` or\n`destination.externalWalletId`. The chain is derived from the source wallet.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CryptoTransferCreate"
            },
            "examples": {
              "InternalWalletExample": {
                "summary": "Transfer to another HIFI wallet",
                "value": {
                  "requestId": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
                  "currency": "USDC",
                  "amount": 100.5,
                  "source": {
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  },
                  "destination": {
                    "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf"
                  },
                  "requireApproval": false
                }
              },
              "ExternalWalletExample": {
                "summary": "Transfer to an external wallet",
                "value": {
                  "requestId": "c2f7a1d3-2b3c-4d5e-8f90-1a2b3c4d5e6f",
                  "currency": "USDT",
                  "amount": 50,
                  "source": {
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  },
                  "destination": {
                    "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
                  }
                }
              }
            }
          }
        }
      },
      "CreateBatchCryptoTransferBody": {
        "required": true,
        "description": "Batch crypto transfer details. Between 1 and 50 destinations, each with exactly\none of `walletId` or `externalWalletId` and its own amount. The chain is derived\nfrom the source wallet.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BatchCryptoTransferCreate"
            },
            "examples": {
              "BatchExample": {
                "summary": "Batch transfer to mixed destinations",
                "value": {
                  "requestId": "d3a8b2e4-3c4d-4e5f-9012-2b3c4d5e6f70",
                  "currency": "USDC",
                  "source": {
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  },
                  "destinations": [
                    {
                      "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf",
                      "amount": 25
                    },
                    {
                      "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
                      "amount": 75.5
                    }
                  ],
                  "requireApproval": false
                }
              }
            }
          }
        }
      },
      "CreateExternalAccountBody": {
        "required": true,
        "description": "External account details. Required fields vary by `transferType`, `currency`,\nand `bankAddress.country`. See the\n[account information reference](https://docs.hifi.com/v3/docs/references/account-information)\nfor the supported combinations and which fields each one requires.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalAccountCreate"
            },
            "examples": {
              "ACHExample": {
                "summary": "ACH account (US)",
                "value": {
                  "transferType": "ACH",
                  "currency": "USD",
                  "accountNumber": "123456789",
                  "routingNumber": "021000021",
                  "accountType": "CHECKING",
                  "bankName": "Chase Bank",
                  "bankAddress": {
                    "addressLine1": "123 Main Street",
                    "city": "New York",
                    "stateProvinceRegion": "NY",
                    "postalCode": "10001",
                    "country": "USA"
                  }
                }
              },
              "WireExample": {
                "summary": "Domestic wire account (US)",
                "value": {
                  "transferType": "WIRE",
                  "currency": "USD",
                  "accountNumber": "123456789",
                  "routingNumber": "021000021",
                  "accountType": "CHECKING",
                  "bankName": "Bank of America",
                  "bankAddress": {
                    "addressLine1": "123 Main Street",
                    "city": "New York",
                    "stateProvinceRegion": "NY",
                    "postalCode": "10001",
                    "country": "USA"
                  }
                }
              },
              "SEPAExample": {
                "summary": "SEPA account (Germany)",
                "value": {
                  "transferType": "SEPA",
                  "currency": "EUR",
                  "iban": "DE91100000000123456789",
                  "swiftCode": "DEUTDEFF",
                  "bankName": "Deutsche Bank",
                  "bankAddress": {
                    "addressLine1": "Taunusanlage 12",
                    "city": "Frankfurt",
                    "stateProvinceRegion": "HE",
                    "postalCode": "60325",
                    "country": "DEU"
                  }
                }
              },
              "SWIFTExample": {
                "summary": "SWIFT account (Brazil, USD)",
                "value": {
                  "transferType": "SWIFT",
                  "currency": "USD",
                  "swiftCode": "BRASBRRJXXX",
                  "accountNumber": "123456789",
                  "bankName": "Banco do Brasil",
                  "bankAddress": {
                    "addressLine1": "Rua Example 123",
                    "city": "Sao Paulo",
                    "stateProvinceRegion": "SP",
                    "postalCode": "01310100",
                    "country": "BRA"
                  }
                }
              },
              "PIXCPFExample": {
                "summary": "PIX account (Brazil, CPF key)",
                "value": {
                  "transferType": "PIX",
                  "currency": "BRL",
                  "cpf": "12345678901",
                  "bankAddress": {
                    "addressLine1": "Rua Example 123",
                    "city": "Sao Paulo",
                    "stateProvinceRegion": "SP",
                    "postalCode": "01310100",
                    "country": "BRA"
                  }
                }
              },
              "PIXEVPExample": {
                "summary": "PIX account (Brazil, EVP random key)",
                "value": {
                  "transferType": "PIX",
                  "currency": "BRL",
                  "pixKey": "123e4567-e89b-12d3-a456-426614174000",
                  "bankAddress": {
                    "addressLine1": "Rua Example 123",
                    "city": "Sao Paulo",
                    "stateProvinceRegion": "SP",
                    "postalCode": "01310100",
                    "country": "BRA"
                  }
                }
              },
              "SPEIExample": {
                "summary": "SPEI account (Mexico)",
                "value": {
                  "transferType": "SPEI",
                  "currency": "MXN",
                  "clabe": "032180000118359719",
                  "bankName": "BBVA Mexico",
                  "bankAddress": {
                    "addressLine1": "Av. Paseo 123",
                    "city": "Mexico City",
                    "stateProvinceRegion": "CMX",
                    "postalCode": "01000",
                    "country": "MEX"
                  }
                }
              },
              "NigeriaBankExample": {
                "summary": "Bank account (Nigeria)",
                "value": {
                  "transferType": "BANK",
                  "currency": "NGN",
                  "accountNumber": "0123456789",
                  "bankName": "Access Bank",
                  "bankAddress": {
                    "addressLine1": "1 Bank Road",
                    "city": "Lagos",
                    "stateProvinceRegion": "LA",
                    "postalCode": "100001",
                    "country": "NGA"
                  }
                }
              },
              "UAEBankExample": {
                "summary": "Local bank account (United Arab Emirates, AED)",
                "value": {
                  "transferType": "BANK",
                  "currency": "AED",
                  "iban": "AE070331234567890123456",
                  "swiftCode": "EBILAEAD",
                  "bankName": "Emirates NBD",
                  "bankAddress": {
                    "addressLine1": "Sheikh Zayed Road",
                    "city": "Dubai",
                    "stateProvinceRegion": "DU",
                    "postalCode": "00000",
                    "country": "ARE"
                  }
                }
              },
              "AustraliaBankExample": {
                "summary": "Local bank account (Australia, AUD)",
                "value": {
                  "transferType": "BANK",
                  "currency": "AUD",
                  "accountNumber": "123456789",
                  "bsbCode": "062000",
                  "bankName": "Commonwealth Bank of Australia",
                  "bankAddress": {
                    "addressLine1": "48 Martin Place",
                    "city": "Sydney",
                    "stateProvinceRegion": "NSW",
                    "postalCode": "2000",
                    "country": "AUS"
                  }
                }
              },
              "CanadaBankExample": {
                "summary": "Local bank account (Canada, CAD)",
                "value": {
                  "transferType": "BANK",
                  "currency": "CAD",
                  "accountNumber": "123456789",
                  "swiftCode": "ROYCCAT2",
                  "bankCode": "003",
                  "transitNumber": "00023",
                  "bankName": "Royal Bank of Canada",
                  "bankAddress": {
                    "addressLine1": "200 Bay Street",
                    "city": "Toronto",
                    "stateProvinceRegion": "ON",
                    "postalCode": "M5J2J5",
                    "country": "CAN"
                  }
                }
              },
              "JapanBankExample": {
                "summary": "Local bank account (Japan, JPY)",
                "value": {
                  "transferType": "BANK",
                  "currency": "JPY",
                  "accountNumber": "1234567",
                  "bankCode": "0005",
                  "accountType": "CHECKING",
                  "zenginBranchCode": "001",
                  "bankName": "MUFG Bank",
                  "bankAddress": {
                    "addressLine1": "2-7-1 Marunouchi",
                    "city": "Tokyo",
                    "stateProvinceRegion": "Chiyoda",
                    "postalCode": "100-8388",
                    "country": "JPN"
                  }
                }
              },
              "UKBankExample": {
                "summary": "Local bank account (United Kingdom, GBP)",
                "value": {
                  "transferType": "BANK",
                  "currency": "GBP",
                  "accountNumber": "31926819",
                  "sortCode": "600161",
                  "bankName": "NatWest",
                  "bankAddress": {
                    "addressLine1": "250 Bishopsgate",
                    "city": "London",
                    "stateProvinceRegion": "London",
                    "postalCode": "EC2M 4AA",
                    "country": "GBR"
                  }
                }
              },
              "VietnamBankExample": {
                "summary": "Local bank account (Vietnam, VND)",
                "value": {
                  "transferType": "BANK",
                  "currency": "VND",
                  "accountNumber": "123456789",
                  "swiftCode": "BFTVVNVX",
                  "bankName": "Vietcombank",
                  "bankAddress": {
                    "addressLine1": "198 Tran Quang Khai",
                    "city": "Hanoi",
                    "stateProvinceRegion": "Hoan Kiem",
                    "postalCode": "100000",
                    "country": "VNM"
                  }
                }
              }
            }
          }
        }
      },
      "UpdateExternalAccountBody": {
        "required": true,
        "description": "Fields to update on the external account.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalAccountUpdate"
            },
            "example": {
              "nickname": "Primary settlement account"
            }
          }
        }
      },
      "CreateExternalCardBody": {
        "required": true,
        "description": "Card details to tokenize and associate with the counter party.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardCreate"
            },
            "example": {
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "firstName": "John",
              "lastName": "Doe",
              "cardNumber": "4111111111111111",
              "expiryMonth": "09",
              "expiryYear": "28",
              "cvv": "123"
            }
          }
        }
      },
      "UpdateExternalCardBody": {
        "required": true,
        "description": "Fields to update on the external card.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardUpdate"
            },
            "example": {
              "nickname": "Jane's virtual card"
            }
          }
        }
      },
      "AddExternalCardSessionBody": {
        "required": true,
        "description": "Parameters for the hosted external card collection session.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardSessionAdd"
            },
            "example": {
              "requestId": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "redirectUrl": "https://example.com/card-onboarding/complete",
              "recipientEmail": "jane.doe@example.com",
              "expiresIn": 3600
            }
          }
        }
      },
      "AddExternalWalletBody": {
        "required": true,
        "description": "External wallet details. The `address` must be valid for the specified `chain`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletAddExternalBody"
            },
            "examples": {
              "EVMWallet": {
                "summary": "EVM external wallet (Polygon)",
                "value": {
                  "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "address": "0x9876543210fedcba9876543210fedcba98765432",
                  "chain": "POLYGON",
                  "nickname": "Treasury cold wallet",
                  "referenceId": "my-ref-001"
                }
              },
              "SolanaWallet": {
                "summary": "Solana external wallet",
                "value": {
                  "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "address": "7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK",
                  "chain": "SOLANA",
                  "nickname": "Ops wallet",
                  "referenceId": "my-ref-002"
                }
              }
            }
          }
        }
      },
      "UpdateExternalWalletBody": {
        "required": true,
        "description": "Nickname to set on the external wallet. Pass `null` to clear it.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletUpdateExternalBody"
            },
            "example": {
              "nickname": "Treasury cold wallet (renamed)"
            }
          }
        }
      },
      "UploadFileBody": {
        "required": true,
        "description": "The file to upload, sent as `multipart/form-data` with a single field named `file`.\nMaximum size is 20 MB. Accepted MIME types are `application/pdf`, `image/jpeg`,\n`image/png`, `image/heic`, `image/tiff`.\n",
        "content": {
          "multipart/form-data": {
            "schema": {
              "$ref": "#/components/schemas/FileUploadRequest"
            },
            "encoding": {
              "file": {
                "contentType": "application/pdf, image/jpeg, image/png, image/heic, image/tiff"
              }
            }
          }
        }
      },
      "GenerateKycLinkBody": {
        "required": true,
        "description": "Parameters for generating a hosted KYC link.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkGenerate"
            },
            "example": {
              "rails": [
                "USD"
              ],
              "userType": "individual",
              "redirectUrl": "https://example.com/kyc/complete",
              "requestId": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
            }
          }
        }
      },
      "GenerateInitialKybLinkBody": {
        "required": false,
        "description": "Parameters for generating the initial org-onboarding KYB link.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkGenerateInitialKyb"
            },
            "example": {
              "recipientEmail": "jane.doe@example.com"
            }
          }
        }
      },
      "UpdateKycLinkKycInfoBody": {
        "required": true,
        "description": "KYC/KYB fields to set on the user. Not schema-validated at the route level;\nthe field set accepted depends on whether the user is an individual or a\nbusiness. See `GET .../kyc/requirements` for the required fields.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycObject"
            }
          }
        }
      },
      "AddKycLinkUboBody": {
        "required": true,
        "description": "UBO fields to add.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkUboObject"
            }
          }
        }
      },
      "UpdateKycLinkUboBody": {
        "required": true,
        "description": "UBO fields to update. Only the fields you provide are changed.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkUboObject"
            }
          }
        }
      },
      "AddKycLinkDocumentBody": {
        "required": true,
        "description": "Compliance document fields to add.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkDocumentObject"
            }
          }
        }
      },
      "UpdateKycLinkDocumentBody": {
        "required": true,
        "description": "Compliance document fields to update. Only the fields you provide are changed.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkDocumentObject"
            }
          }
        }
      },
      "IdMappingBatchBody": {
        "required": true,
        "description": "v2 IDs to resolve to their v3 public IDs.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/IdMappingBatch"
            },
            "example": {
              "ids": [
                {
                  "v2Id": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c",
                  "resourceType": "USER"
                }
              ]
            }
          }
        }
      },
      "CreateOfframpBody": {
        "required": true,
        "description": "Offramp parameters. Exactly one of `source.walletId` / `source.externalWalletId`,\nexactly one of `destination.externalAccountId` / `destination.externalCardId`, and\nexactly one of `source.amount` / `destination.amount` must be provided.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OfframpCreate"
            },
            "examples": {
              "WalletToExternalAccount": {
                "summary": "Custodial wallet to external account, source amount",
                "value": {
                  "requestId": "8f3a2b1c-4d5e-6f70-8192-a3b4c5d6e7f8",
                  "source": {
                    "currency": "USDC",
                    "amount": 100,
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  },
                  "destination": {
                    "currency": "USD",
                    "externalAccountId": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
                  },
                  "achMessage": "Invoice 1024",
                  "purposeOfPayment": "Supplier payment",
                  "description": "July settlement"
                }
              },
              "ExternalWalletDestinationAmount": {
                "summary": "External wallet to external account, destination amount",
                "value": {
                  "requestId": "1b2c3d4e-5f60-7182-93a4-b5c6d7e8f901",
                  "source": {
                    "currency": "USDT",
                    "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
                  },
                  "destination": {
                    "currency": "EUR",
                    "amount": 250,
                    "externalAccountId": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
                  },
                  "sepaMessage": "Invoice 1024"
                }
              }
            }
          }
        }
      },
      "CreateOnrampBody": {
        "required": true,
        "description": "Onramp details. Provide exactly one of `source.userId` / `source.externalAccountId`,\nexactly one of `source.transferType` / `source.externalAccountId`, exactly one of\n`destination.walletId` / `destination.externalWalletId`, and exactly one of\n`source.amount` / `destination.amount`.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampCreateBody"
            },
            "examples": {
              "FundFromUserToWallet": {
                "summary": "Fund from a user via ACH to a HIFI wallet",
                "value": {
                  "requestId": "b3d1f2a4-5c6e-7890-abcd-ef1234567890",
                  "source": {
                    "amount": 100,
                    "currency": "USD",
                    "transferType": "ACH",
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
                  },
                  "destination": {
                    "currency": "USDC",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  },
                  "sameDayAch": false,
                  "description": "Monthly top-up"
                }
              },
              "FundFromExternalAccountToExternalWallet": {
                "summary": "Fund from a saved external account to an external wallet",
                "value": {
                  "requestId": "c4e2a3b5-6d7f-8901-bcde-f23456789012",
                  "source": {
                    "amount": 250,
                    "currency": "USD",
                    "externalAccountId": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
                  },
                  "destination": {
                    "currency": "USDT",
                    "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
                  }
                }
              }
            }
          }
        }
      },
      "SimulateOnrampDepositBody": {
        "required": true,
        "description": "Simulate an inbound fiat deposit for an onramp. Sandbox only.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampSimulateDepositBody"
            },
            "examples": {
              "ACHDeposit": {
                "summary": "Simulate an ACH deposit",
                "value": {
                  "amount": 100,
                  "transferType": "ACH",
                  "reference": "REF-12345",
                  "source": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789",
                    "name": "John Doe",
                    "bankName": "Chase Bank"
                  }
                }
              }
            }
          }
        }
      },
      "CreateOrchestrationAddressBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CreateOrchestrationAddress"
            }
          }
        }
      },
      "UpdateOrchestrationAddressBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UpdateOrchestrationAddress"
            }
          }
        }
      },
      "DeactivateOrchestrationAddressBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/DeactivateOrchestrationAddress"
            }
          }
        }
      },
      "SubmitRfiBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/RfiSubmissionBody"
            },
            "example": {
              "items": [
                {
                  "requestItemId": "3f7c1e90-2a4b-4d61-9c0e-5b8f2d6a1e34",
                  "fileId": "file_7bV1aLcs3Kf9dQ2mNpXwZ"
                },
                {
                  "requestItemId": "3f7c1e90-2a4b-4d61-9c0e-5b8f2d6a1e34",
                  "fileId": "file_9aB0xY4mNpXwZ7bV1aLdt"
                },
                {
                  "requestItemId": "6b2d4a81-7c05-4e39-8f1a-2d9c3e7b5041",
                  "answerText": "Salary from the user's employer, with payslips attached."
                }
              ]
            }
          }
        }
      },
      "CreateSettlementRuleBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleCreate"
            }
          }
        }
      },
      "UpdateSettlementRuleBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleUpdate"
            }
          }
        }
      },
      "ApplySettlementRuleBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleApply"
            }
          }
        }
      },
      "CreateSwapBody": {
        "required": true,
        "description": "Swap details. Source and destination currencies must differ, exactly one of\n`source.amount` / `destination.amount` must be provided, and exactly one of\n`destination.walletId` / `destination.externalWalletId` must be provided.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SwapCreate"
            },
            "examples": {
              "UserWalletExample": {
                "summary": "Swap into a user wallet (source amount)",
                "value": {
                  "requestId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
                  "limitPrice": "0.9990",
                  "cancelAfterSeconds": 3600,
                  "source": {
                    "walletId": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "currency": "USDC",
                    "amount": 100
                  },
                  "destination": {
                    "walletId": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ",
                    "currency": "USDT"
                  }
                }
              },
              "ExternalWalletExample": {
                "summary": "Swap into an external wallet (destination amount)",
                "value": {
                  "requestId": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
                  "source": {
                    "walletId": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "currency": "USDC"
                  },
                  "destination": {
                    "externalWalletId": "extw_9dQ2mNpXwZ7bV1aLcs3Kf",
                    "currency": "PYUSD",
                    "amount": 250
                  }
                }
              }
            }
          }
        }
      },
      "TransferApprovalApproveBody": {
        "required": false,
        "description": "Optional comment to attach to the approval.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TransferApprovalActionBody"
            },
            "example": {
              "comment": "Confirmed with finance."
            }
          }
        }
      },
      "TransferApprovalRejectBody": {
        "required": false,
        "description": "Optional comment to attach to the rejection.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TransferApprovalActionBody"
            },
            "example": {
              "comment": "Amount exceeds approved limit."
            }
          }
        }
      },
      "CreateToSLinkBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ToSLink"
            }
          }
        }
      },
      "UserCreateBody": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UserCreate"
            }
          }
        }
      },
      "CreateVirtualAccountBody": {
        "required": true,
        "description": "Virtual account details. The `source` combination of `currency`, `country`,\nand `transferType` must be a supported pair. Exactly one of\n`destination.walletId` or `destination.externalWalletId` must be provided.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountCreate"
            },
            "examples": {
              "HifiWalletDestination": {
                "summary": "Deliver to a HIFI custodial wallet",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "source": {
                    "currency": "USD",
                    "country": "USA",
                    "transferType": "ACH"
                  },
                  "destination": {
                    "currency": "USDC",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  }
                }
              },
              "ExternalWalletDestination": {
                "summary": "Deliver to an external wallet",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "source": {
                    "currency": "USD",
                    "country": "USA",
                    "transferType": "WIRE"
                  },
                  "destination": {
                    "currency": "USDT",
                    "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
                  }
                }
              }
            }
          }
        }
      },
      "SimulateVirtualAccountDepositBody": {
        "required": true,
        "description": "Sandbox-only. Simulates an inbound fiat deposit into the virtual account so\nthe resulting onramp flow can be observed end to end.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountSimulateDeposit"
            },
            "examples": {
              "ACHDeposit": {
                "summary": "Simulate an ACH deposit",
                "value": {
                  "amount": 100,
                  "transferType": "ACH",
                  "reference": "INV-2026-0001",
                  "source": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789",
                    "name": "Jane Doe",
                    "bankName": "Example Bank"
                  }
                }
              }
            }
          }
        }
      },
      "MigrateVirtualAccountsBody": {
        "required": true,
        "description": "v2 virtual account IDs to migrate to v3.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountMigration"
            },
            "example": {
              "v2Ids": [
                "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c",
                "c9f0f895-fb98-4b91-a0d3-3c1e2a7b6d54"
              ]
            }
          }
        }
      },
      "CreateWalletsBody": {
        "required": true,
        "description": "The user to provision wallets for and the chains to provision them on. At least one chain is required.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletCreateBody"
            },
            "examples": {
              "SingleChain": {
                "summary": "Provision a single wallet",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "chains": [
                    "POLYGON"
                  ]
                }
              },
              "MultipleChains": {
                "summary": "Provision wallets on multiple chains",
                "value": {
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "chains": [
                    "POLYGON",
                    "SOLANA",
                    "ETHEREUM"
                  ]
                }
              }
            }
          }
        }
      },
      "CreateWebhookEndpointBody": {
        "required": true,
        "description": "Webhook endpoint details.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEndpointCreate"
            },
            "example": {
              "name": "Production events",
              "url": "https://api.example.com/webhooks/hifi",
              "description": "Receives all production event notifications",
              "subscriptions": [
                "USER.CREATED",
                "COMPLIANCE.STATUS.APPROVED",
                "OFFRAMP.STATUS.COMPLETED"
              ]
            }
          }
        }
      },
      "UpdateWebhookEndpointBody": {
        "required": true,
        "description": "Fields to update on the webhook endpoint. All fields are optional.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEndpointUpdate"
            },
            "example": {
              "name": "Production events (paused)",
              "status": "PAUSED",
              "subscriptions": [
                "USER.CREATED",
                "OFFRAMP.STATUS.COMPLETED"
              ]
            }
          }
        }
      }
    },
    "responses": {
      "CreateBridgeResponse": {
        "description": "Bridge transfer created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BridgeObject"
            },
            "example": {
              "id": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf",
              "requestId": "b3d1f2a4-5c6e-4a7b-8c9d-0e1f2a3b4c5d",
              "status": "OPEN_QUOTE",
              "failedReason": null,
              "error": null,
              "errorDetails": null,
              "amount": "100",
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "currency": "USDC",
                "chain": "POLYGON"
              },
              "destination": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ",
                "externalWalletId": null,
                "currency": "USDC",
                "chain": "BASE"
              },
              "receipt": {
                "transactionHash": null,
                "operations": {}
              },
              "fee": null,
              "quote": {
                "sendGross": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "sendNet": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "railFee": {
                  "amount": "0",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "receiveNet": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "rate": "1",
                "expiresAt": "2026-07-02T10:30:00.000Z"
              },
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetBridgeResponse": {
        "description": "Bridge transfer retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BridgeObject"
            },
            "example": {
              "id": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf",
              "requestId": "b3d1f2a4-5c6e-4a7b-8c9d-0e1f2a3b4c5d",
              "status": "COMPLETED",
              "failedReason": null,
              "error": null,
              "errorDetails": null,
              "amount": "100",
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "currency": "USDC",
                "chain": "POLYGON"
              },
              "destination": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ",
                "externalWalletId": null,
                "currency": "USDC",
                "chain": "BASE"
              },
              "receipt": {
                "transactionHash": "0x9f2c1a5b7d3e4f6089a0b1c2d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f60",
                "operations": {
                  "approve": {
                    "transactionHash": "0x71a2b3c4d5e6f70819202122232425262728292a2b2c2d2e2f3031323334353",
                    "userOpHash": "0x4b6c7d8e9f0a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f6071829",
                    "chain": "POLYGON"
                  },
                  "burn": {
                    "transactionHash": "0x2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1",
                    "userOpHash": null,
                    "chain": "POLYGON"
                  },
                  "mint": {
                    "transactionHash": "0x9f2c1a5b7d3e4f6089a0b1c2d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f60",
                    "userOpHash": null,
                    "chain": "BASE"
                  }
                }
              },
              "fee": {
                "feeId": "9c1e2f3a-4b5c-6d7e-8f90-1a2b3c4d5e6f",
                "feeType": "FIXED",
                "feeAmount": "0.50",
                "feePercent": null,
                "status": "CHARGED",
                "transactionHash": "0x71a2b3c4d5e6f70819202122232425262728292a2b2c2d2e2f3031323334353",
                "failedReason": null
              },
              "quote": {
                "sendGross": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "sendNet": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "railFee": {
                  "amount": "0",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "receiveNet": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "rate": "1",
                "expiresAt": null
              },
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:35:00.000Z"
            }
          }
        }
      },
      "AcceptBridgeResponse": {
        "description": "Bridge quote accepted; execution has begun.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BridgeObject"
            },
            "example": {
              "id": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf",
              "requestId": "b3d1f2a4-5c6e-4a7b-8c9d-0e1f2a3b4c5d",
              "status": "SOURCE_INITIATED",
              "failedReason": null,
              "error": null,
              "errorDetails": null,
              "amount": "100",
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "currency": "USDC",
                "chain": "POLYGON"
              },
              "destination": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ",
                "externalWalletId": null,
                "currency": "USDC",
                "chain": "BASE"
              },
              "receipt": {
                "transactionHash": null,
                "operations": {
                  "approve": {
                    "transactionHash": "0x71a2b3c4d5e6f70819202122232425262728292a2b2c2d2e2f3031323334353",
                    "userOpHash": null,
                    "chain": "POLYGON"
                  },
                  "burn": {
                    "transactionHash": null,
                    "userOpHash": null,
                    "chain": "POLYGON"
                  },
                  "mint": {
                    "transactionHash": null,
                    "userOpHash": null,
                    "chain": "BASE"
                  }
                }
              },
              "fee": null,
              "quote": {
                "sendGross": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "sendNet": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "railFee": {
                  "amount": "0",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "receiveNet": {
                  "amount": "100.000000",
                  "currency": "USDC"
                },
                "rate": "1",
                "expiresAt": null
              },
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:32:00.000Z"
            }
          }
        }
      },
      "ListBridgesResponse": {
        "description": "A cursor-paginated list of bridge transfers.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BridgeListObject"
            },
            "example": {
              "data": [
                {
                  "id": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf",
                  "requestId": "b3d1f2a4-5c6e-4a7b-8c9d-0e1f2a3b4c5d",
                  "status": "COMPLETED",
                  "failedReason": null,
                  "error": null,
                  "errorDetails": null,
                  "amount": "100",
                  "source": {
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "currency": "USDC",
                    "chain": "POLYGON"
                  },
                  "destination": {
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "walletId": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ",
                    "externalWalletId": null,
                    "currency": "USDC",
                    "chain": "BASE"
                  },
                  "receipt": {
                    "transactionHash": "0x9f2c1a5b7d3e4f6089a0b1c2d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f60",
                    "operations": {
                      "approve": {
                        "transactionHash": "0x71a2b3c4d5e6f70819202122232425262728292a2b2c2d2e2f3031323334353",
                        "userOpHash": null,
                        "chain": "POLYGON"
                      },
                      "burn": {
                        "transactionHash": "0x2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1",
                        "userOpHash": null,
                        "chain": "POLYGON"
                      },
                      "mint": {
                        "transactionHash": "0x9f2c1a5b7d3e4f6089a0b1c2d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f60",
                        "userOpHash": null,
                        "chain": "BASE"
                      }
                    }
                  },
                  "fee": null,
                  "quote": {
                    "sendGross": {
                      "amount": "100.000000",
                      "currency": "USDC"
                    },
                    "sendNet": {
                      "amount": "100.000000",
                      "currency": "USDC"
                    },
                    "railFee": {
                      "amount": "0",
                      "currency": "USDC"
                    },
                    "receiveGross": {
                      "amount": "100.000000",
                      "currency": "USDC"
                    },
                    "receiveNet": {
                      "amount": "100.000000",
                      "currency": "USDC"
                    },
                    "rate": "1",
                    "expiresAt": null
                  },
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:35:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf",
                "endCursor": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf"
              }
            }
          }
        }
      },
      "UnauthorizedResponse": {
        "description": "Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Unauthorized"
            }
          }
        }
      },
      "NotFoundResponse": {
        "description": "Not Found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/NotFound"
            }
          }
        }
      },
      "InternalServerErrorResponse": {
        "description": "Internal Server Error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/InternalServerError"
            }
          }
        }
      },
      "BadRequestResponse": {
        "description": "Bad Request — the request was malformed or failed validation.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            },
            "example": {
              "type": "VALIDATION_ERROR",
              "message": "One or more fields are invalid or missing.",
              "fields": [
                {
                  "code": "invalid_value",
                  "message": "Must be a valid email address",
                  "field": "email"
                }
              ]
            }
          }
        }
      },
      "ConflictResponse": {
        "description": "Conflict — the request collides with the current state of the resource (e.g. idempotency-key reuse with a different payload).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            },
            "example": {
              "type": "RESOURCE_CONFLICT",
              "message": "Resource already exists or conflicts with current state"
            }
          }
        }
      },
      "ResourceNotEligibleResponse": {
        "description": "Unprocessable Entity — the resource exists but is not eligible for the requested operation in its current state.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            },
            "example": {
              "type": "ACTION_NOT_ALLOWED",
              "message": "This action is not allowed"
            }
          }
        }
      },
      "PingResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Pong"
            }
          }
        }
      },
      "ComplianceProfileResponse": {
        "description": "Compliance profile.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceProfile"
            }
          }
        }
      },
      "ComplianceQuestionnaireResponse": {
        "description": "Compliance questionnaire.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceQuestionnaire"
            }
          }
        }
      },
      "ComplianceStatusResponse": {
        "description": "Compliance status.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceStatus"
            }
          }
        }
      },
      "ComplianceSubmitResponse": {
        "description": "Compliance submitted for review.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceSubmitResult"
            }
          }
        }
      },
      "ComplianceDocumentResponse": {
        "description": "A compliance document.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceDocument"
            }
          }
        }
      },
      "ComplianceListDocumentsResponse": {
        "description": "A list of compliance documents.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceDocumentList"
            }
          }
        }
      },
      "ComplianceAssociatedPartyResponse": {
        "description": "An associated party.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceAssociatedParty"
            }
          }
        }
      },
      "ComplianceListAssociatedPartiesResponse": {
        "description": "A list of associated parties.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceAssociatedPartyList"
            }
          }
        }
      },
      "ComplianceDeleteDocumentResponse": {
        "description": "Compliance document deleted.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceDeleteResult"
            }
          }
        }
      },
      "ComplianceDeleteAssociatedPartyResponse": {
        "description": "Associated party deleted.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceDeleteResult"
            }
          }
        }
      },
      "GenerateComplianceLinkResponse": {
        "description": "Compliance link generated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceLinkObject"
            },
            "example": {
              "id": "cl_3Kf9dQ2mNpXwZ7bV1aLcs",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "userType": "INDIVIDUAL",
              "url": "https://dashboard.example.com/sandbox/compliance-link?complianceLinkId=cl_3Kf9dQ2mNpXwZ7bV1aLcs&sessionToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
              "sessionToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
              "template": null
            }
          }
        }
      },
      "GetComplianceLinkResponse": {
        "description": "Compliance link retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ComplianceLinkObject"
            },
            "example": {
              "id": "cl_3Kf9dQ2mNpXwZ7bV1aLcs",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "userType": "INDIVIDUAL",
              "url": null,
              "sessionToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
              "template": {
                "entityName": "Acme Financial",
                "logo": "https://cdn.example.com/logo.png",
                "termsOfServiceLink": "https://policy.hifi.com/terms-conditions",
                "privacyPolicyLink": "https://policy.hifi.com/privacy-policy",
                "customText": null,
                "customTextLink": null
              }
            }
          }
        }
      },
      "GetCorridorResponse": {
        "description": "Corridor retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CorridorObject"
            },
            "example": {
              "id": "crd_9aB0xY4mNpXwZ7bV1aLdt",
              "fiatCurrency": "USD",
              "fiatCountry": "USA",
              "transferType": "ACH",
              "cryptoCurrency": "USDC",
              "chain": "POLYGON",
              "direction": "ONRAMP",
              "status": "ACTIVE"
            }
          }
        }
      },
      "ListCorridorsResponse": {
        "description": "A cursor-paginated list of corridors.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CorridorListObject"
            },
            "example": {
              "data": [
                {
                  "id": "crd_9aB0xY4mNpXwZ7bV1aLdt",
                  "fiatCurrency": "USD",
                  "fiatCountry": "USA",
                  "transferType": "ACH",
                  "cryptoCurrency": "USDC",
                  "chain": "POLYGON",
                  "direction": "ONRAMP",
                  "status": "ACTIVE"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "crd_9aB0xY4mNpXwZ7bV1aLdt",
                "endCursor": "crd_9aB0xY4mNpXwZ7bV1aLdt"
              }
            }
          }
        }
      },
      "CreateCounterPartyResponse": {
        "description": "Counter party created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CounterPartyObject"
            },
            "example": {
              "id": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "type": "INDIVIDUAL",
              "firstName": "Jane",
              "lastName": "Doe",
              "phoneNumber": "+14155552671",
              "email": "jane.doe@example.com",
              "taxId": "123-45-6789",
              "dateOfBirth": "1990-01-15",
              "nationality": "USA",
              "address": {
                "addressLine1": "123 Main Street",
                "city": "New York",
                "stateProvinceRegion": "NY",
                "postalCode": "10001",
                "country": "USA"
              },
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "UpdateCounterPartyResponse": {
        "description": "Counter party updated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CounterPartyObject"
            },
            "example": {
              "id": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "type": "INDIVIDUAL",
              "firstName": "Jane",
              "lastName": "Smith",
              "phoneNumber": "+14155559999",
              "email": "jane.smith@example.com",
              "taxId": "123-45-6789",
              "dateOfBirth": "1990-01-15",
              "nationality": "USA",
              "address": {
                "addressLine1": "456 Elm Street",
                "city": "New York",
                "stateProvinceRegion": "NY",
                "postalCode": "10002",
                "country": "USA"
              },
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T12:00:00.000Z"
            }
          }
        }
      },
      "GetCounterPartyResponse": {
        "description": "Counter party retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CounterPartyObject"
            },
            "example": {
              "id": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "type": "BUSINESS",
              "businessName": "Acme Corp",
              "category": "software",
              "phoneNumber": "+14155552671",
              "email": "ops@acme.example.com",
              "taxId": "12-3456789",
              "incorporationDate": "2015-06-01",
              "address": {
                "addressLine1": "500 Market Street",
                "city": "San Francisco",
                "stateProvinceRegion": "CA",
                "postalCode": "94105",
                "country": "USA"
              },
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "ListCounterPartiesResponse": {
        "description": "A cursor-paginated list of counter parties.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CounterPartyListObject"
            },
            "example": {
              "data": [
                {
                  "id": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "type": "INDIVIDUAL",
                  "firstName": "Jane",
                  "lastName": "Doe",
                  "phoneNumber": "+14155552671",
                  "email": "jane.doe@example.com",
                  "taxId": "123-45-6789",
                  "dateOfBirth": "1990-01-15",
                  "nationality": "USA",
                  "address": {
                    "addressLine1": "123 Main Street",
                    "city": "New York",
                    "stateProvinceRegion": "NY",
                    "postalCode": "10001",
                    "country": "USA"
                  },
                  "status": "ACTIVE",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
                "endCursor": "cpty_7dLpR2mNpXwZ7bV1aQz3x"
              }
            }
          }
        }
      },
      "DeleteCounterPartyResponse": {
        "description": "Counter party deactivated successfully. The counter party is now inactive.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CounterPartyObject"
            },
            "example": {
              "id": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "type": "INDIVIDUAL",
              "firstName": "Jane",
              "lastName": "Doe",
              "phoneNumber": "+14155552671",
              "email": "jane.doe@example.com",
              "taxId": "123-45-6789",
              "dateOfBirth": "1990-01-15",
              "nationality": "USA",
              "address": {
                "addressLine1": "123 Main Street",
                "city": "New York",
                "stateProvinceRegion": "NY",
                "postalCode": "10001",
                "country": "USA"
              },
              "status": "INACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T12:00:00.000Z"
            }
          }
        }
      },
      "CreateCryptoTransferResponse": {
        "description": "Crypto transfer created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CryptoTransferObject"
            },
            "example": {
              "id": "ctx_3Kf9dQ2mNpXwZ7bV1aLcs",
              "requestId": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
              "status": "CREATED",
              "currency": "USDC",
              "amount": "100.5",
              "failedReason": null,
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              },
              "destination": {
                "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf",
                "externalWalletId": null
              },
              "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
              "receipt": {
                "transactionHash": null,
                "userOpHash": null
              },
              "chain": "POLYGON",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetCryptoTransferResponse": {
        "description": "Crypto transfer retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CryptoTransferObject"
            },
            "example": {
              "id": "ctx_3Kf9dQ2mNpXwZ7bV1aLcs",
              "requestId": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
              "status": "COMPLETED",
              "currency": "USDC",
              "amount": "100.5",
              "failedReason": null,
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              },
              "destination": {
                "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf",
                "externalWalletId": null
              },
              "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
              "receipt": {
                "transactionHash": "0x9c8f7e6d5c4b3a2918f0e1d2c3b4a5968778695a4b3c2d1e0f9a8b7c6d5e4f30",
                "userOpHash": "0x1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9"
              },
              "chain": "POLYGON",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:31:20.000Z"
            }
          }
        }
      },
      "ListCryptoTransfersResponse": {
        "description": "A cursor-paginated list of crypto transfers.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CryptoTransferListObject"
            },
            "example": {
              "data": [
                {
                  "id": "ctx_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "requestId": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
                  "status": "COMPLETED",
                  "currency": "USDC",
                  "amount": "100.5",
                  "failedReason": null,
                  "source": {
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  },
                  "destination": {
                    "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                    "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf",
                    "externalWalletId": null
                  },
                  "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
                  "receipt": {
                    "transactionHash": "0x9c8f7e6d5c4b3a2918f0e1d2c3b4a5968778695a4b3c2d1e0f9a8b7c6d5e4f30",
                    "userOpHash": "0x1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9"
                  },
                  "chain": "POLYGON",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:31:20.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "ctx_3Kf9dQ2mNpXwZ7bV1aLcs",
                "endCursor": "ctx_3Kf9dQ2mNpXwZ7bV1aLcs"
              }
            }
          }
        }
      },
      "CreateBatchCryptoTransferResponse": {
        "description": "Batch crypto transfer created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BatchCryptoTransferObject"
            },
            "example": {
              "id": "bctx_2mNpXwZ7bV1aLcs3Kf9dQ",
              "requestId": "d3a8b2e4-3c4d-4e5f-9012-2b3c4d5e6f70",
              "currency": "USDC",
              "status": "CREATED",
              "failedReason": null,
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              },
              "destinations": [
                {
                  "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf",
                  "externalWalletId": null,
                  "amount": 25
                },
                {
                  "userId": "usr_5Kf9dQ2mNpXwZ7bV1aLcs",
                  "walletId": null,
                  "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
                  "amount": 75.5
                }
              ],
              "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
              "receipt": {
                "transactionHash": null,
                "userOpHash": null
              },
              "chain": "POLYGON",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetBatchCryptoTransferResponse": {
        "description": "Batch crypto transfer retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BatchCryptoTransferObject"
            },
            "example": {
              "id": "bctx_2mNpXwZ7bV1aLcs3Kf9dQ",
              "requestId": "d3a8b2e4-3c4d-4e5f-9012-2b3c4d5e6f70",
              "currency": "USDC",
              "status": "COMPLETED",
              "failedReason": null,
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              },
              "destinations": [
                {
                  "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf",
                  "externalWalletId": null,
                  "amount": 25
                },
                {
                  "userId": "usr_5Kf9dQ2mNpXwZ7bV1aLcs",
                  "walletId": null,
                  "externalWalletId": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
                  "amount": 75.5
                }
              ],
              "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
              "receipt": {
                "transactionHash": "0x9c8f7e6d5c4b3a2918f0e1d2c3b4a5968778695a4b3c2d1e0f9a8b7c6d5e4f30",
                "userOpHash": "0x1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9"
              },
              "chain": "POLYGON",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:32:05.000Z"
            }
          }
        }
      },
      "ListBatchCryptoTransfersResponse": {
        "description": "A cursor-paginated list of batch crypto transfers.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BatchCryptoTransferListObject"
            },
            "example": {
              "data": [
                {
                  "id": "bctx_2mNpXwZ7bV1aLcs3Kf9dQ",
                  "requestId": "d3a8b2e4-3c4d-4e5f-9012-2b3c4d5e6f70",
                  "currency": "USDC",
                  "status": "COMPLETED",
                  "failedReason": null,
                  "source": {
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
                  },
                  "destinations": [
                    {
                      "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                      "walletId": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf",
                      "externalWalletId": null,
                      "amount": 25
                    }
                  ],
                  "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
                  "receipt": {
                    "transactionHash": "0x9c8f7e6d5c4b3a2918f0e1d2c3b4a5968778695a4b3c2d1e0f9a8b7c6d5e4f30",
                    "userOpHash": "0x1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9"
                  },
                  "chain": "POLYGON",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:32:05.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "bctx_2mNpXwZ7bV1aLcs3Kf9dQ",
                "endCursor": "bctx_2mNpXwZ7bV1aLcs3Kf9dQ"
              }
            }
          }
        }
      },
      "CreateExternalAccountResponse": {
        "description": "External account created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalAccountObject"
            },
            "example": {
              "id": "extacct_9aB0xY4mNpXwZ7bV1aLdt",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "accountNumber": "****6789",
              "routingNumber": "021000021",
              "accountType": "CHECKING",
              "bankName": "Chase Bank",
              "bankAddress": {
                "addressLine1": "123 Main Street",
                "city": "New York",
                "stateProvinceRegion": "NY",
                "postalCode": "10001",
                "country": "USA"
              },
              "currency": "USD",
              "transferType": "ACH",
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetExternalAccountResponse": {
        "description": "External account retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalAccountObject"
            },
            "example": {
              "id": "extacct_9aB0xY4mNpXwZ7bV1aLdt",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "accountNumber": "****6789",
              "routingNumber": "021000021",
              "accountType": "CHECKING",
              "bankName": "Chase Bank",
              "bankAddress": {
                "addressLine1": "123 Main Street",
                "city": "New York",
                "stateProvinceRegion": "NY",
                "postalCode": "10001",
                "country": "USA"
              },
              "currency": "USD",
              "transferType": "ACH",
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "ListExternalAccountsResponse": {
        "description": "A cursor-paginated list of external accounts.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalAccountListObject"
            },
            "example": {
              "data": [
                {
                  "id": "extacct_9aB0xY4mNpXwZ7bV1aLdt",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "counterPartyId": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
                  "accountNumber": "****6789",
                  "routingNumber": "021000021",
                  "accountType": "CHECKING",
                  "bankName": "Chase Bank",
                  "bankAddress": {
                    "addressLine1": "123 Main Street",
                    "city": "New York",
                    "stateProvinceRegion": "NY",
                    "postalCode": "10001",
                    "country": "USA"
                  },
                  "currency": "USD",
                  "transferType": "ACH",
                  "status": "ACTIVE",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "extacct_9aB0xY4mNpXwZ7bV1aLdt",
                "endCursor": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
              }
            }
          }
        }
      },
      "UpdateExternalAccountResponse": {
        "description": "External account updated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalAccountObject"
            },
            "example": {
              "id": "extacct_9aB0xY4mNpXwZ7bV1aLdt",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "accountNumber": "****6789",
              "routingNumber": "021000021",
              "accountType": "CHECKING",
              "bankName": "Chase Bank",
              "bankAddress": {
                "addressLine1": "123 Main Street",
                "city": "New York",
                "stateProvinceRegion": "NY",
                "postalCode": "10001",
                "country": "USA"
              },
              "currency": "USD",
              "transferType": "ACH",
              "nickname": "Primary settlement account",
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T12:00:00.000Z"
            }
          }
        }
      },
      "DeleteExternalAccountResponse": {
        "description": "External account deactivated successfully. The account is now inactive and can no longer be used for transfers.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalAccountObject"
            },
            "example": {
              "id": "extacct_9aB0xY4mNpXwZ7bV1aLdt",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7dLpR2mNpXwZ7bV1aQz3x",
              "accountNumber": "****6789",
              "routingNumber": "021000021",
              "accountType": "CHECKING",
              "bankName": "Chase Bank",
              "bankAddress": {
                "addressLine1": "123 Main Street",
                "city": "New York",
                "stateProvinceRegion": "NY",
                "postalCode": "10001",
                "country": "USA"
              },
              "currency": "USD",
              "transferType": "ACH",
              "status": "INACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T12:00:00.000Z"
            }
          }
        }
      },
      "CreateExternalCardResponse": {
        "description": "External card created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardObject"
            },
            "example": {
              "id": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "firstName": "John",
              "lastName": "Doe",
              "cardNumber": "************1111",
              "expiryMonth": "09",
              "expiryYear": "28",
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetExternalCardResponse": {
        "description": "External card retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardObject"
            },
            "example": {
              "id": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "firstName": "John",
              "lastName": "Doe",
              "cardNumber": "************1111",
              "expiryMonth": "09",
              "expiryYear": "28",
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "UpdateExternalCardResponse": {
        "description": "External card updated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardObject"
            },
            "example": {
              "id": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "firstName": "John",
              "lastName": "Doe",
              "cardNumber": "************1111",
              "expiryMonth": "09",
              "expiryYear": "28",
              "nickname": "Jane's virtual card",
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T12:00:00.000Z"
            }
          }
        }
      },
      "ListExternalCardsResponse": {
        "description": "A cursor-paginated list of external cards.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardListObject"
            },
            "example": {
              "data": [
                {
                  "id": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "firstName": "John",
                  "lastName": "Doe",
                  "cardNumber": "************1111",
                  "expiryMonth": "09",
                  "expiryYear": "28",
                  "status": "ACTIVE",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ",
                "endCursor": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ"
              }
            }
          }
        }
      },
      "DeleteExternalCardResponse": {
        "description": "External card deactivated successfully. The card is now inactive and can no longer be used.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardObject"
            },
            "example": {
              "id": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "firstName": "John",
              "lastName": "Doe",
              "cardNumber": "************1111",
              "expiryMonth": "09",
              "expiryYear": "28",
              "status": "INACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T12:00:00.000Z"
            }
          }
        }
      },
      "GenerateExternalCardSessionResponse": {
        "description": "Hosted external card session created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardSessionObject"
            },
            "example": {
              "id": "ecs_2mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": null,
              "url": "https://dashboard.hifi.com/sandbox/external-card-sessions/ecs_2mNpXwZ7bV1aLcs3Kf9dQ?userId=usr_3Kf9dQ2mNpXwZ7bV1aLcs#sessionToken=...",
              "recipientEmail": "jane.doe@example.com",
              "redirectUrl": "https://example.com/card-onboarding/complete",
              "status": "PENDING",
              "expiredAt": "2026-07-01T11:30:00.000Z",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetExternalCardSessionResponse": {
        "description": "External card session retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ExternalCardSessionObject"
            },
            "example": {
              "id": "ecs_2mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": null,
              "url": null,
              "recipientEmail": "jane.doe@example.com",
              "redirectUrl": "https://example.com/card-onboarding/complete",
              "status": "PENDING",
              "expiredAt": "2026-07-01T11:30:00.000Z",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "AddExternalWalletResponse": {
        "description": "External wallet added successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletExternalObject"
            },
            "example": {
              "id": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "chain": "POLYGON",
              "name": "Treasury cold wallet",
              "address": "0x9876543210fedcba9876543210fedcba98765432",
              "referenceId": "my-ref-001",
              "active": true,
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetExternalWalletResponse": {
        "description": "External wallet retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletExternalObject"
            },
            "example": {
              "id": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "chain": "POLYGON",
              "name": "Treasury cold wallet",
              "address": "0x9876543210fedcba9876543210fedcba98765432",
              "referenceId": "my-ref-001",
              "active": true,
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "UpdateExternalWalletResponse": {
        "description": "External wallet updated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletExternalObject"
            },
            "example": {
              "id": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
              "chain": "POLYGON",
              "name": "Treasury cold wallet (renamed)",
              "address": "0x9876543210fedcba9876543210fedcba98765432",
              "referenceId": "my-ref-001",
              "active": true,
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T11:00:00.000Z"
            }
          }
        }
      },
      "ListExternalWalletsResponse": {
        "description": "A cursor-paginated list of external wallets.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletExternalListObject"
            },
            "example": {
              "data": [
                {
                  "id": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "counterPartyId": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "chain": "POLYGON",
                  "name": "Treasury cold wallet",
                  "address": "0x9876543210fedcba9876543210fedcba98765432",
                  "referenceId": "my-ref-001",
                  "active": true,
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "extw_4mNpXwZ7bV1aLcs3Kf9dQ",
                "endCursor": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
              }
            }
          }
        }
      },
      "DeactivateExternalWalletResponse": {
        "description": "External wallet deactivated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletExternalDeactivateObject"
            },
            "example": {
              "message": "External wallet deactivated successfully"
            }
          }
        }
      },
      "UploadFileResponse": {
        "description": "File uploaded successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/FileObject"
            },
            "example": {
              "id": "file_9aB0xY4mNpXwZ7bV1aLdt",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "fileName": "passport.pdf",
              "size": 245760,
              "mimeType": "application/pdf"
            }
          }
        }
      },
      "GenerateKycLinkResponse": {
        "description": "KYC link created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkCreateResult"
            },
            "example": {
              "id": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c",
              "kycLinkUrl": "https://dashboardx.hifi.com/sandbox/kyc-link?kycLinkId=8f14e45f-ceea-467e-adde-0f8d0f5f4b1c&sessionToken=..."
            }
          }
        }
      },
      "GetKycLinkResponse": {
        "description": "KYC link status retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkStatus"
            }
          }
        }
      },
      "GetKycLinkKycInfoResponse": {
        "description": "The user's KYC/KYB data.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycObject"
            }
          }
        }
      },
      "UpdateKycLinkKycInfoResponse": {
        "description": "The user's KYC/KYB data, updated.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycObject"
            }
          }
        }
      },
      "GetKycLinkKycRequirementsResponse": {
        "description": "Required fields, documents, and UBOs for this KYC link's rails.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycRequirements"
            }
          }
        }
      },
      "GetKycLinkKycStatusResponse": {
        "description": "KYC verification status, keyed by rail.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycStatusByRail"
            }
          }
        }
      },
      "SubmitKycLinkResponse": {
        "description": "KYC link submitted for verification.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycSubmitResult"
            }
          }
        }
      },
      "AddKycLinkUboResponse": {
        "description": "UBO added successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkUboObject"
            }
          }
        }
      },
      "UpdateKycLinkUboResponse": {
        "description": "UBO updated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkUboObject"
            }
          }
        }
      },
      "GetKycLinkUboResponse": {
        "description": "UBO retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkUboObject"
            }
          }
        }
      },
      "ListKycLinkUbosResponse": {
        "description": "All UBOs attached to this KYC link's user.",
        "content": {
          "application/json": {
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/KycLinkUboObject"
              }
            }
          }
        }
      },
      "AddKycLinkDocumentResponse": {
        "description": "Document added successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkDocumentObject"
            }
          }
        }
      },
      "UpdateKycLinkDocumentResponse": {
        "description": "Document updated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkDocumentObject"
            }
          }
        }
      },
      "GetKycLinkDocumentResponse": {
        "description": "Document retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/KycLinkDocumentObject"
            }
          }
        }
      },
      "ListKycLinkDocumentsResponse": {
        "description": "All compliance documents attached to this KYC link's user.",
        "content": {
          "application/json": {
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/KycLinkDocumentObject"
              }
            }
          }
        }
      },
      "KycLinkErrorResponse": {
        "description": "The KYC link is invalid or has expired.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "code": 4005,
              "error": "KYC_LINK_EXPIRED",
              "errorDetails": "KYC link has expired"
            }
          }
        }
      },
      "IdMappingResponse": {
        "description": "v2-to-v3 ID mapping results, in the same order as the request.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/IdMappingResult"
            },
            "example": {
              "ids": [
                {
                  "resourceType": "USER",
                  "v2Id": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c",
                  "v3Id": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "mapped": true
                }
              ]
            }
          }
        }
      },
      "CreateOfframpResponse": {
        "description": "Offramp created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OfframpObject"
            }
          }
        }
      },
      "GetOfframpResponse": {
        "description": "Offramp retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OfframpObject"
            }
          }
        }
      },
      "AcceptOfframpQuoteResponse": {
        "description": "Offramp quote accepted.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OfframpObject"
            }
          }
        }
      },
      "CancelOfframpResponse": {
        "description": "Offramp cancelled.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OfframpObject"
            }
          }
        }
      },
      "ListOfframpsResponse": {
        "description": "A cursor-paginated list of offramps.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OfframpListObject"
            }
          }
        }
      },
      "GetOfframpRateResponse": {
        "description": "Offramp rate retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OfframpRateObject"
            }
          }
        }
      },
      "CreateOnrampResponse": {
        "description": "Onramp created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampObject"
            },
            "example": {
              "id": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ",
              "requestId": "b3d1f2a4-5c6e-7890-abcd-ef1234567890",
              "status": "AWAITING_FUNDS",
              "failedReason": null,
              "error": null,
              "errorDetails": null,
              "source": {
                "amount": 100,
                "currency": "USD",
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "externalAccountId": null,
                "virtualAccountId": null,
                "depositInstructions": {
                  "bankName": "Cross River Bank",
                  "bankAddress": "2115 Linwood Ave, Fort Lee, NJ 07024",
                  "beneficiary": {
                    "name": "HIFI Bridge Inc",
                    "address": "123 Main Street, New York, NY, 10001, USA"
                  },
                  "ach": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "wire": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "rtp": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "reference": "HIFI-9A2B",
                  "depositBy": "2026-07-02T10:30:00.000Z",
                  "instruction": "Please deposit USD to the bank account provided. For USDT onramp, a minimum of $10 is required, or the funds will be returned."
                },
                "depositTracking": null
              },
              "destination": {
                "chain": "POLYGON",
                "amount": 100,
                "currency": "USDC",
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "externalWalletId": null,
                "walletAddress": "0x1234567890abcdef1234567890abcdef12345678"
              },
              "receipt": {
                "transactionHash": null
              },
              "settlement": null,
              "quote": {
                "sendGross": {
                  "amount": "100.00",
                  "currency": "USD"
                },
                "sendNet": {
                  "amount": "100.00",
                  "currency": "USD"
                },
                "railFee": {
                  "amount": "0.00",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100.00",
                  "currency": "USDC"
                },
                "receiveNet": {
                  "amount": "100.00",
                  "currency": "USDC"
                },
                "rate": "1.00",
                "conversionFee": {
                  "amount": "0",
                  "currency": "USDC",
                  "description": "No conversion fee applicable",
                  "timing": "N/A"
                },
                "expiresAt": "N/A"
              },
              "microDeposits": {
                "count": 0,
                "data": []
              },
              "sameDayAch": false,
              "description": "Monthly top-up",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetOnrampResponse": {
        "description": "Onramp retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampObject"
            },
            "example": {
              "id": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ",
              "requestId": "b3d1f2a4-5c6e-7890-abcd-ef1234567890",
              "status": "AWAITING_FUNDS",
              "failedReason": null,
              "error": null,
              "errorDetails": null,
              "source": {
                "amount": 100,
                "currency": "USD",
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "externalAccountId": null,
                "virtualAccountId": null,
                "depositInstructions": {
                  "bankName": "Cross River Bank",
                  "bankAddress": "2115 Linwood Ave, Fort Lee, NJ 07024",
                  "beneficiary": {
                    "name": "HIFI Bridge Inc",
                    "address": "123 Main Street, New York, NY, 10001, USA"
                  },
                  "ach": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "wire": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "rtp": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "reference": "HIFI-9A2B",
                  "depositBy": "2026-07-02T10:30:00.000Z",
                  "instruction": "Please deposit USD to the bank account provided. For USDT onramp, a minimum of $10 is required, or the funds will be returned."
                },
                "depositTracking": null
              },
              "destination": {
                "chain": "POLYGON",
                "amount": 100,
                "currency": "USDC",
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "externalWalletId": null,
                "walletAddress": "0x1234567890abcdef1234567890abcdef12345678"
              },
              "receipt": {
                "transactionHash": null
              },
              "settlement": null,
              "quote": {
                "sendGross": {
                  "amount": "100.00",
                  "currency": "USD"
                },
                "sendNet": {
                  "amount": "100.00",
                  "currency": "USD"
                },
                "railFee": {
                  "amount": "0.00",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100.00",
                  "currency": "USDC"
                },
                "receiveNet": {
                  "amount": "100.00",
                  "currency": "USDC"
                },
                "rate": "1.00",
                "conversionFee": {
                  "amount": "0",
                  "currency": "USDC",
                  "description": "No conversion fee applicable",
                  "timing": "N/A"
                },
                "expiresAt": "N/A"
              },
              "microDeposits": {
                "count": 0,
                "data": []
              },
              "sameDayAch": false,
              "description": "Monthly top-up",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "AcceptOnrampQuoteResponse": {
        "description": "Onramp quote accepted successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampObject"
            },
            "example": {
              "id": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ",
              "requestId": "b3d1f2a4-5c6e-7890-abcd-ef1234567890",
              "status": "AWAITING_FUNDS",
              "failedReason": null,
              "error": null,
              "errorDetails": null,
              "source": {
                "amount": 100,
                "currency": "USD",
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "externalAccountId": null,
                "virtualAccountId": null,
                "depositInstructions": {
                  "bankName": "Cross River Bank",
                  "bankAddress": "2115 Linwood Ave, Fort Lee, NJ 07024",
                  "beneficiary": {
                    "name": "HIFI Bridge Inc",
                    "address": "123 Main Street, New York, NY, 10001, USA"
                  },
                  "ach": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "wire": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "rtp": {
                    "routingNumber": "021000021",
                    "accountNumber": "123456789"
                  },
                  "reference": "HIFI-9A2B",
                  "depositBy": "2026-07-02T10:30:00.000Z",
                  "instruction": "Please deposit USD to the bank account provided. For USDT onramp, a minimum of $10 is required, or the funds will be returned."
                },
                "depositTracking": null
              },
              "destination": {
                "chain": "POLYGON",
                "amount": 100,
                "currency": "USDC",
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "externalWalletId": null,
                "walletAddress": "0x1234567890abcdef1234567890abcdef12345678"
              },
              "receipt": {
                "transactionHash": null
              },
              "settlement": null,
              "quote": {
                "sendGross": {
                  "amount": "100.00",
                  "currency": "USD"
                },
                "sendNet": {
                  "amount": "100.00",
                  "currency": "USD"
                },
                "railFee": {
                  "amount": "0.00",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100.00",
                  "currency": "USDC"
                },
                "receiveNet": {
                  "amount": "100.00",
                  "currency": "USDC"
                },
                "rate": "1.00",
                "conversionFee": {
                  "amount": "0",
                  "currency": "USDC",
                  "description": "No conversion fee applicable",
                  "timing": "N/A"
                },
                "expiresAt": "N/A"
              },
              "microDeposits": {
                "count": 0,
                "data": []
              },
              "sameDayAch": false,
              "description": "Monthly top-up",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "CancelOnrampResponse": {
        "description": "Onramp cancelled successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampObject"
            },
            "example": {
              "<<": {
                "id": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ",
                "requestId": "b3d1f2a4-5c6e-7890-abcd-ef1234567890",
                "status": "AWAITING_FUNDS",
                "failedReason": null,
                "error": null,
                "errorDetails": null,
                "source": {
                  "amount": 100,
                  "currency": "USD",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "externalAccountId": null,
                  "virtualAccountId": null,
                  "depositInstructions": {
                    "bankName": "Cross River Bank",
                    "bankAddress": "2115 Linwood Ave, Fort Lee, NJ 07024",
                    "beneficiary": {
                      "name": "HIFI Bridge Inc",
                      "address": "123 Main Street, New York, NY, 10001, USA"
                    },
                    "ach": {
                      "routingNumber": "021000021",
                      "accountNumber": "123456789"
                    },
                    "wire": {
                      "routingNumber": "021000021",
                      "accountNumber": "123456789"
                    },
                    "rtp": {
                      "routingNumber": "021000021",
                      "accountNumber": "123456789"
                    },
                    "reference": "HIFI-9A2B",
                    "depositBy": "2026-07-02T10:30:00.000Z",
                    "instruction": "Please deposit USD to the bank account provided. For USDT onramp, a minimum of $10 is required, or the funds will be returned."
                  },
                  "depositTracking": null
                },
                "destination": {
                  "chain": "POLYGON",
                  "amount": 100,
                  "currency": "USDC",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                  "externalWalletId": null,
                  "walletAddress": "0x1234567890abcdef1234567890abcdef12345678"
                },
                "receipt": {
                  "transactionHash": null
                },
                "settlement": null,
                "quote": {
                  "sendGross": {
                    "amount": "100.00",
                    "currency": "USD"
                  },
                  "sendNet": {
                    "amount": "100.00",
                    "currency": "USD"
                  },
                  "railFee": {
                    "amount": "0.00",
                    "currency": "USDC"
                  },
                  "receiveGross": {
                    "amount": "100.00",
                    "currency": "USDC"
                  },
                  "receiveNet": {
                    "amount": "100.00",
                    "currency": "USDC"
                  },
                  "rate": "1.00",
                  "conversionFee": {
                    "amount": "0",
                    "currency": "USDC",
                    "description": "No conversion fee applicable",
                    "timing": "N/A"
                  },
                  "expiresAt": "N/A"
                },
                "microDeposits": {
                  "count": 0,
                  "data": []
                },
                "sameDayAch": false,
                "description": "Monthly top-up",
                "createdAt": "2026-07-01T10:30:00.000Z",
                "updatedAt": "2026-07-01T10:30:00.000Z"
              },
              "status": "CANCELLED"
            }
          }
        }
      },
      "ListOnrampsResponse": {
        "description": "A cursor-paginated list of onramps.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampListObject"
            },
            "example": {
              "data": [
                {
                  "id": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "requestId": "b3d1f2a4-5c6e-7890-abcd-ef1234567890",
                  "status": "AWAITING_FUNDS",
                  "failedReason": null,
                  "error": null,
                  "errorDetails": null,
                  "source": {
                    "amount": 100,
                    "currency": "USD",
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "externalAccountId": null,
                    "virtualAccountId": null,
                    "depositInstructions": {
                      "bankName": "Cross River Bank",
                      "bankAddress": "2115 Linwood Ave, Fort Lee, NJ 07024",
                      "beneficiary": {
                        "name": "HIFI Bridge Inc",
                        "address": "123 Main Street, New York, NY, 10001, USA"
                      },
                      "ach": {
                        "routingNumber": "021000021",
                        "accountNumber": "123456789"
                      },
                      "wire": {
                        "routingNumber": "021000021",
                        "accountNumber": "123456789"
                      },
                      "rtp": {
                        "routingNumber": "021000021",
                        "accountNumber": "123456789"
                      },
                      "reference": "HIFI-9A2B",
                      "depositBy": "2026-07-02T10:30:00.000Z",
                      "instruction": "Please deposit USD to the bank account provided. For USDT onramp, a minimum of $10 is required, or the funds will be returned."
                    },
                    "depositTracking": null
                  },
                  "destination": {
                    "chain": "POLYGON",
                    "amount": 100,
                    "currency": "USDC",
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "externalWalletId": null,
                    "walletAddress": "0x1234567890abcdef1234567890abcdef12345678"
                  },
                  "receipt": {
                    "transactionHash": null
                  },
                  "settlement": null,
                  "quote": {
                    "sendGross": {
                      "amount": "100.00",
                      "currency": "USD"
                    },
                    "sendNet": {
                      "amount": "100.00",
                      "currency": "USD"
                    },
                    "railFee": {
                      "amount": "0.00",
                      "currency": "USDC"
                    },
                    "receiveGross": {
                      "amount": "100.00",
                      "currency": "USDC"
                    },
                    "receiveNet": {
                      "amount": "100.00",
                      "currency": "USDC"
                    },
                    "rate": "1.00",
                    "conversionFee": {
                      "amount": "0",
                      "currency": "USDC",
                      "description": "No conversion fee applicable",
                      "timing": "N/A"
                    },
                    "expiresAt": "N/A"
                  },
                  "microDeposits": {
                    "count": 0,
                    "data": []
                  },
                  "sameDayAch": false,
                  "description": "Monthly top-up",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ",
                "endCursor": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ"
              }
            }
          }
        }
      },
      "GetOnrampRatesResponse": {
        "description": "Conversion rate retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampRateObject"
            },
            "example": {
              "sourceCurrency": "USD",
              "destinationCurrency": "USDC",
              "rate": 1
            }
          }
        }
      },
      "SimulateOnrampDepositResponse": {
        "description": "Simulated deposit submitted successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OnrampSimulateDepositResponseObject"
            },
            "example": {
              "message": "Simulated deposit submitted successfully."
            }
          }
        }
      },
      "OrchestrationAddressResponse": {
        "description": "A single orchestration address record.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OrchestrationAddressObject"
            }
          }
        }
      },
      "OrchestrationAddressAllRecordsResponse": {
        "description": "A paginated list of orchestration addresses for the user.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OrchestrationAddressAllRecordsObject"
            }
          }
        }
      },
      "OrchestrationDepositResponse": {
        "description": "A single deposit record.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OrchestrationDepositObject"
            }
          }
        }
      },
      "OrchestrationDepositAllRecordsResponse": {
        "description": "A paginated list of deposits for the named orchestration address.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OrchestrationDepositAllRecordsObject"
            }
          }
        }
      },
      "OrchestrationBatchResponse": {
        "description": "A single batch record (with its included deposit IDs and the linked offramp).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OrchestrationBatchObject"
            }
          }
        }
      },
      "OrchestrationBatchAllRecordsResponse": {
        "description": "A paginated list of batches for the named orchestration address.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OrchestrationBatchAllRecordsObject"
            }
          }
        }
      },
      "OrchestrationManualTriggerResponse": {
        "description": "Result of `POST /orchestrate`. Either a freshly-created batch\n(`triggered: true`, with `batch` populated) or an idempotent no-op\n(`triggered: false`, with `reason` indicating why).\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OrchestrationManualTriggerObject"
            }
          }
        }
      },
      "ListRfisResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/RfiListObject"
            },
            "example": {
              "data": [
                {
                  "id": "rfi_5Kf9dQ2mNpXwZ7bV1aLcs",
                  "kind": "onboarding",
                  "status": "issued",
                  "subjectType": "individual",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "transferId": null,
                  "flowType": null,
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "currentRound": 1,
                  "round": {
                    "id": "rfir_2mNpXwZ7bV1aLcs3Kf9dQ",
                    "round": 1,
                    "issuedAt": "2026-07-01T10:30:00.000Z",
                    "expiresAt": "2026-07-31T10:30:00.000Z",
                    "submittedAt": null,
                    "items": [
                      {
                        "id": "3f7c1e90-2a4b-4d61-9c0e-5b8f2d6a1e34",
                        "kind": "document",
                        "label": "Proof of address issued in the last 3 months",
                        "docType": "proof_of_address",
                        "detail": "A utility bill or bank statement dated within the last three months.",
                        "required": true
                      },
                      {
                        "id": "6b2d4a81-7c05-4e39-8f1a-2d9c3e7b5041",
                        "kind": "question",
                        "label": "What is the source of the funds being deposited?",
                        "docType": null,
                        "detail": null,
                        "required": true
                      }
                    ],
                    "link": "https://dashboard.hifi.com/production/rfi-link/rfir_2mNpXwZ7bV1aLcs3Kf9dQ#sessionToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
                  }
                }
              ],
              "pagination": {
                "limit": 20,
                "offset": 0,
                "total": 1
              }
            }
          }
        }
      },
      "SubmitRfiResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/RfiSubmissionResult"
            },
            "example": {
              "rfiId": "rfi_5Kf9dQ2mNpXwZ7bV1aLcs",
              "roundId": "rfir_2mNpXwZ7bV1aLcs3Kf9dQ",
              "round": 1,
              "status": "submitted",
              "submittedAt": "2026-07-03T09:12:44.000Z",
              "responseCount": 3
            }
          }
        }
      },
      "CreateSettlementRuleResponse": {
        "description": "Settlement rule created.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleObject"
            }
          }
        }
      },
      "GetSettlementRuleResponse": {
        "description": "Settlement rule retrieved.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleObject"
            }
          }
        }
      },
      "UpdateSettlementRuleResponse": {
        "description": "Settlement rule updated.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleObject"
            }
          }
        }
      },
      "ListSettlementRulesResponse": {
        "description": "A list of settlement rules.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleListObject"
            }
          }
        }
      },
      "DeleteSettlementRuleResponse": {
        "description": "Settlement rule deleted.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SettlementRuleObject"
            }
          }
        }
      },
      "CreateSwapResponse": {
        "description": "Swap created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SwapObject"
            },
            "example": {
              "id": "swap_7bV1aLcs3Kf9dQ2mNpXwZ",
              "requestId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
              "status": "OPEN_QUOTE",
              "error": null,
              "errorDetails": null,
              "amount": "100",
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs",
                "currency": "USDC",
                "chain": "POLYGON"
              },
              "destination": {
                "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                "walletId": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ",
                "externalWalletId": null,
                "currency": "USDT",
                "chain": "POLYGON"
              },
              "receipt": {
                "transactionHash": null
              },
              "quote": {
                "sendGross": {
                  "amount": "100",
                  "currency": "USDC"
                },
                "sendNet": {
                  "amount": "100",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100",
                  "currency": "USDT"
                },
                "receiveNet": {
                  "amount": "100",
                  "currency": "USDT"
                },
                "rate": "1.0",
                "expiresAt": "2026-07-01T10:35:00.000Z"
              },
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetSwapResponse": {
        "description": "Swap retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SwapObject"
            },
            "example": {
              "id": "swap_7bV1aLcs3Kf9dQ2mNpXwZ",
              "requestId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
              "status": "COMPLETED",
              "error": null,
              "errorDetails": null,
              "amount": "100",
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs",
                "currency": "USDC",
                "chain": "POLYGON"
              },
              "destination": {
                "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                "walletId": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ",
                "externalWalletId": null,
                "currency": "USDT",
                "chain": "POLYGON"
              },
              "receipt": {
                "transactionHash": "0x3f8a1c9b2d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a"
              },
              "quote": {
                "sendGross": {
                  "amount": "100",
                  "currency": "USDC"
                },
                "sendNet": {
                  "amount": "100",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100",
                  "currency": "USDT"
                },
                "receiveNet": {
                  "amount": "100",
                  "currency": "USDT"
                },
                "rate": "1.0",
                "expiresAt": "2026-07-01T10:35:00.000Z"
              },
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:32:00.000Z"
            }
          }
        }
      },
      "AcceptSwapResponse": {
        "description": "Swap quote accepted. The swap transitions to `CREATED` and is queued for execution,\nor to `QUOTE_FAILED` if the source wallet has insufficient balance.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SwapObject"
            },
            "example": {
              "id": "swap_7bV1aLcs3Kf9dQ2mNpXwZ",
              "requestId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
              "status": "CREATED",
              "error": null,
              "errorDetails": null,
              "amount": "100",
              "source": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs",
                "currency": "USDC",
                "chain": "POLYGON"
              },
              "destination": {
                "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                "walletId": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ",
                "externalWalletId": null,
                "currency": "USDT",
                "chain": "POLYGON"
              },
              "receipt": {
                "transactionHash": null
              },
              "quote": {
                "sendGross": {
                  "amount": "100",
                  "currency": "USDC"
                },
                "sendNet": {
                  "amount": "100",
                  "currency": "USDC"
                },
                "receiveGross": {
                  "amount": "100",
                  "currency": "USDT"
                },
                "receiveNet": {
                  "amount": "100",
                  "currency": "USDT"
                },
                "rate": "1.0",
                "expiresAt": "2026-07-01T10:35:00.000Z"
              },
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:33:00.000Z"
            }
          }
        }
      },
      "CancelSwapResponse": {
        "description": "Swap cancellation requested successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SwapObject"
            }
          }
        }
      },
      "ListSwapsResponse": {
        "description": "A cursor-paginated list of swaps.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SwapListObject"
            },
            "example": {
              "data": [
                {
                  "id": "swap_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "requestId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
                  "status": "COMPLETED",
                  "error": null,
                  "errorDetails": null,
                  "amount": "100",
                  "source": {
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "walletId": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "currency": "USDC",
                    "chain": "POLYGON"
                  },
                  "destination": {
                    "userId": "usr_7bV1aLcs3Kf9dQ2mNpXwZ",
                    "walletId": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ",
                    "externalWalletId": null,
                    "currency": "USDT",
                    "chain": "POLYGON"
                  },
                  "receipt": {
                    "transactionHash": "0x3f8a1c9b2d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a"
                  },
                  "quote": {
                    "sendGross": {
                      "amount": "100",
                      "currency": "USDC"
                    },
                    "sendNet": {
                      "amount": "100",
                      "currency": "USDC"
                    },
                    "receiveGross": {
                      "amount": "100",
                      "currency": "USDT"
                    },
                    "receiveNet": {
                      "amount": "100",
                      "currency": "USDT"
                    },
                    "rate": "1.0",
                    "expiresAt": "2026-07-01T10:35:00.000Z"
                  },
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:32:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "swap_7bV1aLcs3Kf9dQ2mNpXwZ",
                "endCursor": "swap_7bV1aLcs3Kf9dQ2mNpXwZ"
              }
            }
          }
        }
      },
      "ApproveTransferApprovalResponse": {
        "description": "Transfer approved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TransferApprovalObject"
            },
            "example": {
              "id": "ta_9aB0xY4mNpXwZ7bV1aLdt",
              "status": "APPROVED",
              "transferId": "e1a2b3c4-5678-90ab-cdef-1234567890ab",
              "transferType": "OFFRAMP",
              "fromDashboard": false,
              "initiatorProfileId": "9f1e2d3c-4b5a-6978-8071-6253849abcde",
              "votes": [
                {
                  "approverId": "1a2b3c4d-5e6f-7089-a1b2-c3d4e5f60789",
                  "vote": "APPROVE",
                  "comment": "Confirmed with finance.",
                  "createdAt": "2026-07-01T10:35:00.000Z"
                }
              ],
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:35:00.000Z"
            }
          }
        }
      },
      "RejectTransferApprovalResponse": {
        "description": "Transfer rejected successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TransferApprovalObject"
            },
            "example": {
              "id": "ta_9aB0xY4mNpXwZ7bV1aLdt",
              "status": "REJECTED",
              "transferId": "e1a2b3c4-5678-90ab-cdef-1234567890ab",
              "transferType": "OFFRAMP",
              "fromDashboard": false,
              "initiatorProfileId": "9f1e2d3c-4b5a-6978-8071-6253849abcde",
              "votes": [
                {
                  "approverId": "1a2b3c4d-5e6f-7089-a1b2-c3d4e5f60789",
                  "vote": "REJECT",
                  "comment": "Amount exceeds approved limit.",
                  "createdAt": "2026-07-01T10:35:00.000Z"
                }
              ],
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:35:00.000Z"
            }
          }
        }
      },
      "GetTransferApprovalResponse": {
        "description": "Transfer approval retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TransferApprovalObject"
            },
            "example": {
              "id": "ta_9aB0xY4mNpXwZ7bV1aLdt",
              "status": "PENDING",
              "transferId": "e1a2b3c4-5678-90ab-cdef-1234567890ab",
              "transferType": "OFFRAMP",
              "fromDashboard": false,
              "initiatorProfileId": "9f1e2d3c-4b5a-6978-8071-6253849abcde",
              "votes": [],
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "ListTransferApprovalsResponse": {
        "description": "A cursor-paginated list of transfer approvals.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TransferApprovalListObject"
            },
            "example": {
              "data": [
                {
                  "id": "ta_9aB0xY4mNpXwZ7bV1aLdt",
                  "status": "PENDING",
                  "transferId": "e1a2b3c4-5678-90ab-cdef-1234567890ab",
                  "transferType": "OFFRAMP",
                  "fromDashboard": false,
                  "initiatorProfileId": "9f1e2d3c-4b5a-6978-8071-6253849abcde",
                  "votes": [],
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "ta_9aB0xY4mNpXwZ7bV1aLdt",
                "endCursor": "ta_9aB0xY4mNpXwZ7bV1aLdt"
              }
            }
          }
        }
      },
      "ToSLinkObjectResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CreateToSLinkObject"
            },
            "examples": {
              "ToSLinkObjectExample": {
                "$ref": "#/components/examples/ToSLinkObjectExample"
              }
            }
          }
        }
      },
      "ToSLinkRecordStatusResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ToSLinkRecordStatusObject"
            },
            "examples": {
              "TosLinkStatusObjectExample": {
                "$ref": "#/components/examples/TosLinkStatusObjectExample"
              }
            }
          }
        }
      },
      "UserObjectResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UserObject"
            },
            "examples": {
              "IndividualUserObjectExample": {
                "$ref": "#/components/examples/IndividualUserObjectExample"
              },
              "BusinessUserObjectExample": {
                "$ref": "#/components/examples/BusinessUserObjectExample"
              }
            }
          }
        }
      },
      "UserListResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UserList"
            },
            "examples": {
              "UserListExample": {
                "$ref": "#/components/examples/UserListExample"
              }
            }
          }
        }
      },
      "CreateVirtualAccountResponse": {
        "description": "Virtual account created successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountObject"
            },
            "example": {
              "id": "va_5Kf9dQ2mNpXwZ7bV1aLcs",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "source": {
                "transferTypes": [
                  "ACH",
                  "WIRE",
                  "RTP"
                ],
                "currency": "USD"
              },
              "destination": {
                "chain": "POLYGON",
                "currency": "USDC",
                "walletAddress": "0x1234567890abcdef1234567890abcdef12345678",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "externalWalletId": null
              },
              "status": "ACTIVE",
              "microDeposits": {
                "count": 0,
                "data": []
              },
              "depositInstructions": {
                "bankName": "Example Bank",
                "bankAddress": "123 Main Street, New York, NY 10001",
                "beneficiary": {
                  "name": "ACME Corp",
                  "address": "123 Main Street, New York, NY 10001, USA"
                },
                "ach": {
                  "routingNumber": "021000021",
                  "accountNumber": "123456789012"
                },
                "wire": {
                  "routingNumber": "021000021",
                  "accountNumber": "123456789012"
                },
                "rtp": {
                  "routingNumber": "021000021",
                  "accountNumber": "123456789012"
                },
                "reference": null,
                "depositBy": null,
                "instruction": "Please deposit USD to the bank account provided."
              },
              "settlementRuleId": null,
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "GetVirtualAccountResponse": {
        "description": "Virtual account retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountObject"
            },
            "example": {
              "id": "va_5Kf9dQ2mNpXwZ7bV1aLcs",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "source": {
                "transferTypes": [
                  "ACH",
                  "WIRE",
                  "RTP"
                ],
                "currency": "USD"
              },
              "destination": {
                "chain": "POLYGON",
                "currency": "USDC",
                "walletAddress": "0x1234567890abcdef1234567890abcdef12345678",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "externalWalletId": null
              },
              "status": "ACTIVE",
              "microDeposits": {
                "count": 1,
                "data": [
                  {
                    "createdAt": "2026-07-01T10:35:00.000Z",
                    "currency": "USD",
                    "amount": 100,
                    "sourceBankInfo": {
                      "bankName": "Example Bank",
                      "senderName": "Jane Doe",
                      "routingNumber": "021000021",
                      "accountNumber": "123456789",
                      "accountType": "CHECKING",
                      "fedBatchId": null,
                      "imad": null,
                      "omad": null,
                      "traceNumber": null,
                      "bankAddress": null,
                      "description": null,
                      "references": null,
                      "paymentRail": "ach"
                    }
                  }
                ]
              },
              "depositInstructions": {
                "bankName": "Example Bank",
                "bankAddress": "123 Main Street, New York, NY 10001",
                "beneficiary": {
                  "name": "ACME Corp",
                  "address": "123 Main Street, New York, NY 10001, USA"
                },
                "ach": {
                  "routingNumber": "021000021",
                  "accountNumber": "123456789012"
                },
                "wire": {
                  "routingNumber": "021000021",
                  "accountNumber": "123456789012"
                },
                "rtp": {
                  "routingNumber": "021000021",
                  "accountNumber": "123456789012"
                },
                "reference": null,
                "depositBy": null,
                "instruction": "Please deposit USD to the bank account provided."
              },
              "settlementRuleId": null,
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "ListVirtualAccountsResponse": {
        "description": "A cursor-paginated list of virtual accounts.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountListObject"
            },
            "example": {
              "data": [
                {
                  "id": "va_5Kf9dQ2mNpXwZ7bV1aLcs",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "source": {
                    "transferTypes": [
                      "ACH",
                      "WIRE",
                      "RTP"
                    ],
                    "currency": "USD"
                  },
                  "destination": {
                    "chain": "POLYGON",
                    "currency": "USDC",
                    "walletAddress": "0x1234567890abcdef1234567890abcdef12345678",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "externalWalletId": null
                  },
                  "status": "ACTIVE",
                  "microDeposits": {
                    "count": 0,
                    "data": []
                  },
                  "depositInstructions": null,
                  "settlementRuleId": null,
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "va_5Kf9dQ2mNpXwZ7bV1aLcs",
                "endCursor": "va_5Kf9dQ2mNpXwZ7bV1aLcs"
              }
            }
          }
        }
      },
      "DeleteVirtualAccountResponse": {
        "description": "Virtual account deactivated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountMessageObject"
            },
            "example": {
              "message": "Virtual account deactivated successfully."
            }
          }
        }
      },
      "SimulateVirtualAccountDepositResponse": {
        "description": "Sandbox deposit simulated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountMessageObject"
            },
            "example": {
              "message": "Deposit simulated successfully."
            }
          }
        }
      },
      "MigrateVirtualAccountsResponse": {
        "description": "Migration results, one per unique requested ID, in request order.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountMigrationResultList"
            },
            "example": {
              "data": [
                {
                  "v2Id": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c",
                  "v3Id": "va_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "migrated": true,
                  "message": "migrated"
                },
                {
                  "v2Id": "c9f0f895-fb98-4b91-a0d3-3c1e2a7b6d54",
                  "v3Id": null,
                  "migrated": false,
                  "message": "Resource not found"
                }
              ]
            }
          }
        }
      },
      "GetVirtualAccountRouteResponse": {
        "description": "Virtual account route retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountRouteObject"
            },
            "example": {
              "id": "var_9aB0xY4mNpXwZ7bV1aLdt",
              "country": "USA",
              "fiatCurrency": "USD",
              "transferType": "ACH",
              "cryptoCurrency": "USDC",
              "chain": "POLYGON",
              "status": "ACTIVE"
            }
          }
        }
      },
      "ListVirtualAccountRoutesResponse": {
        "description": "A cursor-paginated list of virtual account routes.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/VirtualAccountRouteListObject"
            },
            "example": {
              "data": [
                {
                  "id": "var_9aB0xY4mNpXwZ7bV1aLdt",
                  "country": "USA",
                  "fiatCurrency": "USD",
                  "transferType": "ACH",
                  "cryptoCurrency": "USDC",
                  "chain": "POLYGON",
                  "status": "ACTIVE"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "var_9aB0xY4mNpXwZ7bV1aLdt",
                "endCursor": "var_9aB0xY4mNpXwZ7bV1aLdt"
              }
            }
          }
        }
      },
      "CreateWalletsResponse": {
        "description": "Wallets provisioned successfully. Returns the newly created wallets.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletListObject"
            },
            "example": {
              "data": [
                {
                  "id": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "chain": "POLYGON",
                  "address": "0x1234567890abcdef1234567890abcdef12345678",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                },
                {
                  "id": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "chain": "SOLANA",
                  "address": "7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "endCursor": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ"
              }
            }
          }
        }
      },
      "GetWalletResponse": {
        "description": "Wallet retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletObject"
            },
            "example": {
              "id": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "chain": "POLYGON",
              "address": "0x1234567890abcdef1234567890abcdef12345678",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "ListWalletsResponse": {
        "description": "A cursor-paginated list of wallets.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletListObject"
            },
            "example": {
              "data": [
                {
                  "id": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "chain": "POLYGON",
                  "address": "0x1234567890abcdef1234567890abcdef12345678",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "endCursor": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              }
            }
          }
        }
      },
      "GetWalletBalanceResponse": {
        "description": "Wallet balance retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletBalanceObject"
            },
            "example": {
              "balance": "1000000",
              "displayBalance": "1.00",
              "tokenInfo": {
                "tokenAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
                "standard": "ERC20",
                "name": "USD Coin",
                "symbol": "USDC",
                "decimals": 6
              }
            }
          }
        }
      },
      "ListWalletDepositsResponse": {
        "description": "A cursor-paginated list of wallet deposits.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletDepositListObject"
            },
            "example": {
              "data": [
                {
                  "id": "dep_9dQ2mNpXwZ7bV1aLcs3Kf",
                  "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "createdAt": 1751365800000,
                  "updatedAt": 1751365800000,
                  "wallet": {
                    "id": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "address": "0x1234567890abcdef1234567890abcdef12345678",
                    "chain": "POLYGON"
                  },
                  "transaction": {
                    "transactionHash": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890",
                    "chain": "POLYGON",
                    "currency": "USDC",
                    "status": "COMPLETED",
                    "sourceAddress": "0x9876543210fedcba9876543210fedcba98765432",
                    "destinationAddress": "0x1234567890abcdef1234567890abcdef12345678",
                    "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
                    "amount": "100.50",
                    "unitAmount": "100500000"
                  }
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "dep_9dQ2mNpXwZ7bV1aLcs3Kf",
                "endCursor": "dep_9dQ2mNpXwZ7bV1aLcs3Kf"
              }
            }
          }
        }
      },
      "GetWalletDepositResponse": {
        "description": "Wallet deposit retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletDepositObject"
            },
            "example": {
              "id": "dep_9dQ2mNpXwZ7bV1aLcs3Kf",
              "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
              "createdAt": 1751365800000,
              "updatedAt": 1751365800000,
              "wallet": {
                "id": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "address": "0x1234567890abcdef1234567890abcdef12345678",
                "chain": "POLYGON"
              },
              "transaction": {
                "transactionHash": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890",
                "chain": "POLYGON",
                "currency": "USDC",
                "status": "COMPLETED",
                "sourceAddress": "0x9876543210fedcba9876543210fedcba98765432",
                "destinationAddress": "0x1234567890abcdef1234567890abcdef12345678",
                "contractAddress": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
                "amount": "100.50",
                "unitAmount": "100500000"
              }
            }
          }
        }
      },
      "ListWalletOffersResponse": {
        "description": "A cursor-paginated list of Canton offers.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletOfferListObject"
            },
            "example": {
              "data": [
                {
                  "id": "offer_3Kf9dQ2mNpXwZ7bV1aLcs",
                  "status": "RECEIVED",
                  "amount": "100.00",
                  "currency": "USDCX",
                  "source": {
                    "party": "sender::1220abc..."
                  },
                  "destination": {
                    "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                    "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                    "party": "recipient::1220def..."
                  },
                  "creationTransactionHash": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890",
                  "executionTransactionHash": null,
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z",
                  "expiresAt": "2026-07-02T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "offer_3Kf9dQ2mNpXwZ7bV1aLcs",
                "endCursor": "offer_3Kf9dQ2mNpXwZ7bV1aLcs"
              }
            }
          }
        }
      },
      "GetWalletOfferResponse": {
        "description": "Canton offer retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletOfferObject"
            },
            "example": {
              "id": "offer_3Kf9dQ2mNpXwZ7bV1aLcs",
              "status": "RECEIVED",
              "amount": "100.00",
              "currency": "USDCX",
              "source": {
                "party": "sender::1220abc..."
              },
              "destination": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "party": "recipient::1220def..."
              },
              "creationTransactionHash": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890",
              "executionTransactionHash": null,
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z",
              "expiresAt": "2026-07-02T10:30:00.000Z"
            }
          }
        }
      },
      "AcceptWalletOfferResponse": {
        "description": "Canton offer accepted successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletOfferObject"
            },
            "example": {
              "id": "offer_3Kf9dQ2mNpXwZ7bV1aLcs",
              "status": "ACCEPTED",
              "amount": "100.00",
              "currency": "USDCX",
              "source": {
                "party": "sender::1220abc..."
              },
              "destination": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "party": "recipient::1220def..."
              },
              "creationTransactionHash": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890",
              "executionTransactionHash": "0xdef456abc1237890def456abc1237890def456abc1237890def456abc1237890",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T11:00:00.000Z",
              "expiresAt": "2026-07-02T10:30:00.000Z"
            }
          }
        }
      },
      "RejectWalletOfferResponse": {
        "description": "Canton offer rejected successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WalletOfferObject"
            },
            "example": {
              "id": "offer_3Kf9dQ2mNpXwZ7bV1aLcs",
              "status": "REJECTED",
              "amount": "100.00",
              "currency": "USDCX",
              "source": {
                "party": "sender::1220abc..."
              },
              "destination": {
                "userId": "usr_3Kf9dQ2mNpXwZ7bV1aLcs",
                "walletId": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV",
                "party": "recipient::1220def..."
              },
              "creationTransactionHash": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890",
              "executionTransactionHash": null,
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T11:00:00.000Z",
              "expiresAt": "2026-07-02T10:30:00.000Z"
            }
          }
        }
      },
      "CreateWebhookEndpointResponse": {
        "description": "Webhook endpoint created successfully. The `signingSecret` is returned only here.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEndpointCreateObject"
            },
            "example": {
              "id": "we_4mNpXwZ7bV1aLcs3Kf9dQ",
              "name": "Production events",
              "url": "https://api.example.com/webhooks/hifi",
              "description": "Receives all production event notifications",
              "subscriptions": [
                "USER.CREATED",
                "COMPLIANCE.STATUS.APPROVED",
                "OFFRAMP.STATUS.COMPLETED"
              ],
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z",
              "signingSecret": "whsec_9aB0xY4mNpXwZ7bV1aLdt3Kf9dQ2mNpXwZ7bV1aLcs"
            }
          }
        }
      },
      "GetWebhookEndpointResponse": {
        "description": "Webhook endpoint retrieved successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEndpointObject"
            },
            "example": {
              "id": "we_4mNpXwZ7bV1aLcs3Kf9dQ",
              "name": "Production events",
              "url": "https://api.example.com/webhooks/hifi",
              "description": "Receives all production event notifications",
              "subscriptions": [
                "USER.CREATED",
                "COMPLIANCE.STATUS.APPROVED",
                "OFFRAMP.STATUS.COMPLETED"
              ],
              "status": "ACTIVE",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T10:30:00.000Z"
            }
          }
        }
      },
      "UpdateWebhookEndpointResponse": {
        "description": "Webhook endpoint updated successfully.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEndpointObject"
            },
            "example": {
              "id": "we_4mNpXwZ7bV1aLcs3Kf9dQ",
              "name": "Production events (paused)",
              "url": "https://api.example.com/webhooks/hifi",
              "description": "Receives all production event notifications",
              "subscriptions": [
                "USER.CREATED",
                "OFFRAMP.STATUS.COMPLETED"
              ],
              "status": "PAUSED",
              "createdAt": "2026-07-01T10:30:00.000Z",
              "updatedAt": "2026-07-01T12:00:00.000Z"
            }
          }
        }
      },
      "ListWebhookEndpointsResponse": {
        "description": "A cursor-paginated list of webhook endpoints.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEndpointListObject"
            },
            "example": {
              "data": [
                {
                  "id": "we_4mNpXwZ7bV1aLcs3Kf9dQ",
                  "name": "Production events",
                  "url": "https://api.example.com/webhooks/hifi",
                  "description": "Receives all production event notifications",
                  "subscriptions": [
                    "USER.CREATED",
                    "OFFRAMP.STATUS.COMPLETED"
                  ],
                  "status": "ACTIVE",
                  "createdAt": "2026-07-01T10:30:00.000Z",
                  "updatedAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "we_4mNpXwZ7bV1aLcs3Kf9dQ",
                "endCursor": "we_4mNpXwZ7bV1aLcs3Kf9dQ"
              }
            }
          }
        }
      },
      "DeleteWebhookEndpointResponse": {
        "description": "Webhook endpoint disabled successfully. It no longer receives event deliveries.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEndpointDeleteObject"
            },
            "example": {
              "id": "we_4mNpXwZ7bV1aLcs3Kf9dQ",
              "deleted": true
            }
          }
        }
      },
      "ListWebhookEventTypesResponse": {
        "description": "All event types that can be subscribed to.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEventTypeCatalogObject"
            },
            "example": {
              "eventTypes": [
                "USER.CREATED",
                "USER.STATUS.ACTIVE",
                "OFFRAMP.CREATED",
                "OFFRAMP.STATUS.COMPLETED"
              ]
            }
          }
        }
      },
      "GetWebhookEndpointHistoryResponse": {
        "description": "A cursor-paginated list of delivery attempts for the endpoint.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookDeliveryHistoryListObject"
            },
            "example": {
              "data": [
                {
                  "id": "evt_9aB0xY4mNpXwZ7bV1aLdt",
                  "eventType": "OFFRAMP.STATUS.COMPLETED",
                  "eventCreatedAt": 1751362200000,
                  "data": {},
                  "webhookEndpointId": "we_4mNpXwZ7bV1aLcs3Kf9dQ",
                  "status": "DELIVERED",
                  "attempts": 1,
                  "responseBody": "OK",
                  "responseStatus": 200,
                  "lastAttemptAt": "2026-07-01T10:30:05.000Z",
                  "nextAttemptAt": null,
                  "createdAt": "2026-07-01T10:30:00.000Z"
                }
              ],
              "pagination": {
                "hasMore": false,
                "startCursor": "evt_9aB0xY4mNpXwZ7bV1aLdt",
                "endCursor": "evt_9aB0xY4mNpXwZ7bV1aLdt"
              }
            }
          }
        }
      },
      "ResendWebhookEventResponse": {
        "description": "Webhook event re-queued for delivery.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/WebhookEventResendResult"
            },
            "example": {
              "id": "evt_9aB0xY4mNpXwZ7bV1aLdt",
              "resent": true
            }
          }
        }
      }
    },
    "schemas": {
      "BridgeCreate": {
        "type": "object",
        "description": "Fields required to create a cross-chain bridge transfer.",
        "required": [
          "requestId",
          "amount",
          "source",
          "destination"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key (UUID). Reusing a value returns the existing bridge.",
            "example": "b3d1f2a4-5c6e-4a7b-8c9d-0e1f2a3b4c5d"
          },
          "amount": {
            "type": "number",
            "minimum": 0.000001,
            "maximum": 999999999,
            "description": "Amount of the source currency to bridge. When the source or destination currency\nis `USDT`, the minimum amount is `10`.\n",
            "example": 100
          },
          "source": {
            "$ref": "#/components/schemas/BridgeCreateSource"
          },
          "destination": {
            "$ref": "#/components/schemas/BridgeCreateDestination"
          },
          "requireApproval": {
            "type": "boolean",
            "description": "When true, the bridge is held for transfer approval before execution.",
            "example": false
          },
          "transferSpeed": {
            "type": "string",
            "enum": [
              "FAST",
              "STANDARD"
            ],
            "description": "Settlement speed for USDC bridges. `FAST` settles in seconds and charges a fee\ndeducted from the transferred amount; `STANDARD` waits for source-chain finality.\nNot every source chain offers `FAST`; when omitted, `STANDARD` is used. The quote's\n`railFee` is the fee for the transfer and `receiveNet` the amount the destination\nreceives. The quoted fee is also the maximum charged, so the destination is never\npaid less than `receiveNet`.\n",
            "default": "STANDARD",
            "example": "FAST"
          }
        }
      },
      "BridgeCreateSource": {
        "type": "object",
        "description": "Source of the bridge transfer.",
        "required": [
          "walletId",
          "currency"
        ],
        "properties": {
          "walletId": {
            "type": "string",
            "description": "Public ID of the source wallet (prefixed with `wlt_`). Its chain is used as the source chain.",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDCX",
              "PYUSD"
            ],
            "description": "Source stablecoin.",
            "example": "USDC"
          }
        }
      },
      "BridgeCreateDestination": {
        "type": "object",
        "description": "Destination of the bridge transfer. Provide exactly one of `walletId` or\n`externalWalletId`. The destination chain is derived from the referenced wallet\nand must differ from the source chain.\n",
        "required": [
          "currency"
        ],
        "properties": {
          "walletId": {
            "type": "string",
            "description": "Public ID of the destination owned wallet (prefixed with `wlt_`).",
            "example": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "externalWalletId": {
            "type": "string",
            "description": "Public ID of the destination external wallet (prefixed with `extw_`).",
            "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDCX",
              "PYUSD"
            ],
            "description": "Destination stablecoin.",
            "example": "USDC"
          }
        }
      },
      "BridgeQuoteAmount": {
        "type": "object",
        "description": "An amount paired with its currency.",
        "properties": {
          "amount": {
            "type": "string",
            "example": "100.000000"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDCX",
              "PYUSD"
            ],
            "example": "USDC"
          }
        }
      },
      "BridgeQuote": {
        "type": "object",
        "description": "Quote information for the bridge transfer.",
        "properties": {
          "sendGross": {
            "$ref": "#/components/schemas/BridgeQuoteAmount"
          },
          "sendNet": {
            "$ref": "#/components/schemas/BridgeQuoteAmount"
          },
          "railFee": {
            "$ref": "#/components/schemas/BridgeQuoteAmount"
          },
          "receiveGross": {
            "$ref": "#/components/schemas/BridgeQuoteAmount"
          },
          "receiveNet": {
            "$ref": "#/components/schemas/BridgeQuoteAmount"
          },
          "rate": {
            "type": "string",
            "description": "Exchange rate applied to the transfer.",
            "example": "1"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the quote expires. Populated while the bridge has an open quote.",
            "example": "2026-07-02T10:30:00.000Z"
          }
        }
      },
      "BridgeReceiptOperation": {
        "type": "object",
        "description": "An on-chain operation performed as part of the bridge.",
        "properties": {
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "example": "0x9f2c1a5b7d3e4f6089a0b1c2d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f60"
          },
          "userOpHash": {
            "type": "string",
            "nullable": true,
            "description": "User operation hash for account-abstraction transactions, when applicable.",
            "example": "0x71a2b3c4d5e6f70819202122232425262728292a2b2c2d2e2f3031323334353"
          },
          "chain": {
            "type": "string",
            "enum": [
              "ETHEREUM",
              "POLYGON",
              "SOLANA",
              "BASE",
              "ARBITRUM",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "nullable": true,
            "example": "POLYGON"
          }
        }
      },
      "BridgeReceipt": {
        "type": "object",
        "description": "On-chain receipt for the bridge. `transactionHash` is the final settlement hash.\n`operations` contains provider-specific step hashes (for example `approve`, `send`,\n`mint`, `burn`, `deposit`) and is empty until execution begins.\n",
        "properties": {
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "description": "Final settlement transaction hash on the destination chain.",
            "example": "0x9f2c1a5b7d3e4f6089a0b1c2d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f60"
          },
          "operations": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/BridgeReceiptOperation"
            }
          }
        }
      },
      "BridgeFee": {
        "type": "object",
        "nullable": true,
        "description": "Developer fee charged for the bridge transfer, or null when no fee applies.",
        "properties": {
          "feeId": {
            "type": "string",
            "description": "Identifier of the fee record.",
            "example": "9c1e2f3a-4b5c-6d7e-8f90-1a2b3c4d5e6f"
          },
          "feeType": {
            "type": "string",
            "example": "FIXED"
          },
          "feeAmount": {
            "type": "string",
            "example": "0.50"
          },
          "feePercent": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "status": {
            "type": "string",
            "description": "Charge status of the fee.",
            "example": "CHARGED"
          },
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "example": "0x71a2b3c4d5e6f70819202122232425262728292a2b2c2d2e2f3031323334353"
          },
          "failedReason": {
            "type": "string",
            "nullable": true,
            "example": null
          }
        }
      },
      "BridgeSource": {
        "type": "object",
        "description": "Resolved source of the bridge transfer.",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of the source user (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of the source wallet (prefixed with `wlt_`).",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDCX",
              "PYUSD"
            ],
            "example": "USDC"
          },
          "chain": {
            "type": "string",
            "enum": [
              "ETHEREUM",
              "POLYGON",
              "SOLANA",
              "BASE",
              "ARBITRUM",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          }
        }
      },
      "BridgeDestination": {
        "type": "object",
        "description": "Resolved destination of the bridge transfer. One of `walletId` or `externalWalletId` is present.",
        "properties": {
          "userId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination user (prefixed with `usr_`).",
            "example": "usr_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "walletId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination owned wallet (prefixed with `wlt_`).",
            "example": "wlt_4mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "externalWalletId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination external wallet (prefixed with `extw_`).",
            "example": null
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDCX",
              "PYUSD"
            ],
            "example": "USDC"
          },
          "chain": {
            "type": "string",
            "enum": [
              "ETHEREUM",
              "POLYGON",
              "SOLANA",
              "BASE",
              "ARBITRUM",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "BASE"
          }
        }
      },
      "BridgeObject": {
        "type": "object",
        "description": "A cross-chain bridge transfer.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the bridge transfer (prefixed with `brdg_`).",
            "example": "brdg_9dQ2mNpXwZ7bV1aLcs3Kf"
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key.",
            "example": "b3d1f2a4-5c6e-4a7b-8c9d-0e1f2a3b4c5d"
          },
          "status": {
            "type": "string",
            "enum": [
              "NOT_INITIATED",
              "OPEN_QUOTE",
              "CREATED",
              "SOURCE_INITIATED",
              "SOURCE_PENDING",
              "SOURCE_PROCESSED",
              "SOURCE_FAILED",
              "DESTINATION_INITIATED",
              "DESTINATION_PENDING",
              "COMPLETED",
              "DESTINATION_FAILED",
              "QUOTE_FAILED",
              "UNKNOWN",
              "PENDING_APPROVAL",
              "APPROVED",
              "REJECTED",
              "EXPIRED"
            ],
            "example": "OPEN_QUOTE"
          },
          "failedReason": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "error": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "errorDetails": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "amount": {
            "type": "string",
            "example": "100"
          },
          "source": {
            "$ref": "#/components/schemas/BridgeSource"
          },
          "destination": {
            "$ref": "#/components/schemas/BridgeDestination"
          },
          "receipt": {
            "$ref": "#/components/schemas/BridgeReceipt"
          },
          "fee": {
            "$ref": "#/components/schemas/BridgeFee"
          },
          "quote": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BridgeQuote"
              }
            ],
            "nullable": true,
            "description": "`null` while the bridge is waiting for approval (`PENDING_APPROVAL`), and if the\napproval is rejected or expires. A bridge that requires approval is quoted when it\nis approved.\n"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "BridgeListObject": {
        "type": "object",
        "description": "Cursor-paginated list of bridge transfers.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BridgeObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "Unauthorized": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Unauthorized enum",
            "example": "UNAUTHORIZED"
          },
          "message": {
            "type": "string",
            "description": "Unauthorized message",
            "example": "Authentication required"
          }
        }
      },
      "NotFound": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "example": "RESOURCE_NOT_FOUND",
            "description": "The error type, e.g., RESOURCE_NOT_FOUND"
          },
          "message": {
            "type": "string",
            "description": "A descriptive error message"
          },
          "fields": {
            "type": "array",
            "description": "List of specific field errors",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "description": "Error code related to the field issue"
                },
                "message": {
                  "type": "string",
                  "description": "Error message for the specific issue"
                },
                "field": {
                  "type": "string",
                  "description": "The name of the field that has an issue"
                }
              }
            }
          }
        }
      },
      "InternalServerError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "example": "INTERNAL_SERVER_ERROR",
            "description": "Internal server error enum"
          },
          "message": {
            "type": "string",
            "example": "An internal server error occurred",
            "description": "Internal server error message"
          }
        }
      },
      "Pong": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "example": "pong"
          }
        }
      },
      "Pagination": {
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean"
          },
          "startCursor": {
            "type": "string",
            "nullable": true
          },
          "endCursor": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "hasMore",
          "startCursor",
          "endCursor"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Legacy error shape used only by endpoints still backed by v2 error\nhandling (e.g. the kyc-links resource). Most v3 endpoints return\n`ApiError` instead.\n",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Error code"
          },
          "error": {
            "type": "string",
            "description": "Error type"
          },
          "errorDetails": {
            "type": "string",
            "description": "Detailed error message"
          }
        }
      },
      "ApiError": {
        "type": "object",
        "description": "Standard v3 error shape, returned by validation failures and business-logic errors alike.",
        "properties": {
          "type": {
            "type": "string",
            "description": "Machine-readable error type, e.g. VALIDATION_ERROR, ACTION_NOT_ALLOWED, RESOURCE_CONFLICT.",
            "example": "VALIDATION_ERROR"
          },
          "message": {
            "type": "string",
            "description": "Human-readable error message.",
            "example": "One or more fields are invalid or missing."
          },
          "fields": {
            "type": "array",
            "description": "Present on field-level validation errors. One entry per problem field.",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "description": "Error code related to the field issue."
                },
                "message": {
                  "type": "string",
                  "description": "Error message for the specific issue."
                },
                "field": {
                  "type": "string",
                  "description": "The name of the field that has an issue."
                }
              }
            }
          }
        }
      },
      "ComplianceProfileIndividual": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "middleName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "lastName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "nationality": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "phoneNumber": {
            "type": "string",
            "format": "e164",
            "pattern": "^\\+[1-9]\\d{6,14}$"
          },
          "physicalAddress": {
            "type": "object",
            "properties": {
              "addressLine1": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "addressLine2": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "city": {
                "type": "string",
                "minLength": 0,
                "maxLength": 255,
                "allOf": [
                  {
                    "pattern": "^[\\x20-\\x7E\\n]*$"
                  },
                  {
                    "pattern": "^[^0-9]*$"
                  }
                ]
              },
              "stateProvinceRegion": {
                "type": "string",
                "minLength": 0,
                "maxLength": 10,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "postalCode": {
                "type": "string",
                "minLength": 0,
                "maxLength": 20,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "country": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3
              }
            },
            "additionalProperties": false
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "gender": {
            "type": "string"
          },
          "taxId": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$",
            "description": "Tax identification number. If the user does not have a tax identification number for valid reasons, please pass nine nines \"999999999\"."
          },
          "taxIdType": {
            "type": "string"
          },
          "taxIdCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          }
        },
        "additionalProperties": false
      },
      "ComplianceProfileBusiness": {
        "type": "object",
        "properties": {
          "businessName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "businessDescription": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "alternativeNames": {
            "type": "array",
            "description": "The business's \"doing business as\" (DBA) name, if any.",
            "maxItems": 1,
            "items": {
              "type": "string",
              "minLength": 0,
              "maxLength": 255,
              "pattern": "^[\\x20-\\x7E\\n]*$"
            }
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "phoneNumber": {
            "type": "string",
            "format": "e164",
            "pattern": "^\\+[1-9]\\d{6,14}$"
          },
          "businessType": {
            "type": "string"
          },
          "businessIndustry": {
            "type": "string"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "registrationNumber": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "taxId": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$",
            "description": "Tax identification number. If the user does not have a tax identification number for valid reasons, please pass nine nines \"999999999\"."
          },
          "taxIdType": {
            "type": "string"
          },
          "taxIdCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "leiNumber": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "formationDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "incorporationDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "physicalAddress": {
            "type": "object",
            "properties": {
              "addressLine1": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "addressLine2": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "city": {
                "type": "string",
                "minLength": 0,
                "maxLength": 255,
                "allOf": [
                  {
                    "pattern": "^[\\x20-\\x7E\\n]*$"
                  },
                  {
                    "pattern": "^[^0-9]*$"
                  }
                ]
              },
              "stateProvinceRegion": {
                "type": "string",
                "minLength": 0,
                "maxLength": 10,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "postalCode": {
                "type": "string",
                "minLength": 0,
                "maxLength": 20,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "country": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3
              }
            },
            "additionalProperties": false
          },
          "registeredAddress": {
            "type": "object",
            "properties": {
              "addressLine1": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "addressLine2": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "city": {
                "type": "string",
                "minLength": 0,
                "maxLength": 255,
                "allOf": [
                  {
                    "pattern": "^[\\x20-\\x7E\\n]*$"
                  },
                  {
                    "pattern": "^[^0-9]*$"
                  }
                ]
              },
              "stateProvinceRegion": {
                "type": "string",
                "minLength": 0,
                "maxLength": 10,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "postalCode": {
                "type": "string",
                "minLength": 0,
                "maxLength": 20,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "country": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3
              }
            },
            "additionalProperties": false
          },
          "postalAddress": {
            "type": "object",
            "properties": {
              "addressLine1": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "addressLine2": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "city": {
                "type": "string",
                "minLength": 0,
                "maxLength": 255,
                "allOf": [
                  {
                    "pattern": "^[\\x20-\\x7E\\n]*$"
                  },
                  {
                    "pattern": "^[^0-9]*$"
                  }
                ]
              },
              "stateProvinceRegion": {
                "type": "string",
                "minLength": 0,
                "maxLength": 10,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "postalCode": {
                "type": "string",
                "minLength": 0,
                "maxLength": 20,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "country": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "ComplianceProfile": {
        "oneOf": [
          {
            "title": "Individual",
            "$ref": "#/components/schemas/ComplianceProfileIndividual"
          },
          {
            "title": "Business",
            "$ref": "#/components/schemas/ComplianceProfileBusiness"
          }
        ]
      },
      "ComplianceQuestionnaireIndividual": {
        "type": "object",
        "properties": {
          "employmentStatus": {
            "type": "string"
          },
          "expectedMonthlyTransactionVolume": {
            "type": "string"
          },
          "expectedMonthlyTransactionCount": {
            "type": "string"
          },
          "primaryPurpose": {
            "type": "string"
          },
          "primaryPurposeDetails": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "highRiskActivities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sourceOfFunds": {
            "type": "string"
          },
          "sourceOfFundsDetails": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "actsOnBehalfOfThirdParty": {
            "type": "boolean"
          },
          "actsOnBehalfOfThirdPartyDetails": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          }
        },
        "additionalProperties": false
      },
      "ComplianceQuestionnaireBusiness": {
        "type": "object",
        "properties": {
          "annualRevenue": {
            "type": "string"
          },
          "expectedMonthlyTransactionVolume": {
            "type": "string"
          },
          "expectedMonthlyTransactionCount": {
            "type": "string"
          },
          "primaryPurpose": {
            "type": "string"
          },
          "primaryPurposeDetails": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "highRiskActivities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sourceOfFunds": {
            "type": "string"
          },
          "sourceOfFundsDetails": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "providesFinancialServices": {
            "type": "boolean"
          },
          "transmitsThirdPartyFunds": {
            "type": "boolean"
          },
          "transmitsThirdPartyFundsDetails": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          }
        },
        "additionalProperties": false
      },
      "ComplianceQuestionnaire": {
        "oneOf": [
          {
            "title": "Individual",
            "$ref": "#/components/schemas/ComplianceQuestionnaireIndividual"
          },
          {
            "title": "Business",
            "$ref": "#/components/schemas/ComplianceQuestionnaireBusiness"
          }
        ]
      },
      "ComplianceDocumentAdd": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "DRIVERS",
              "ID_CARD",
              "PASSPORT",
              "INCOME_SOURCE",
              "INVESTOR_DOC",
              "PAYMENT_SOURCE",
              "RESIDENCE_PERMIT",
              "OTHER",
              "PROOF_OF_ADDRESS",
              "AUTH_LETTER",
              "UTILITY_BILL",
              "BANK_STATEMENT",
              "RENTAL_AGREEMENT",
              "TAX_DOCUMENT",
              "VOTER_REGISTRATION_CARD",
              "BANK_REFERENCE_LETTER",
              "LEASE_OR_TENANCY_AGREEMENT"
            ]
          },
          "subType": {
            "type": "string",
            "enum": [
              "FRONT_SIDE",
              "BACK_SIDE",
              "SINGLE_SIDE"
            ]
          },
          "issuedCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "issuedDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "number": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "fileId": {
            "type": "string",
            "pattern": "^file.*"
          },
          "description": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "userId": {
            "type": "string",
            "pattern": "^usr.*"
          },
          "associatedPartyId": {
            "type": "string",
            "pattern": "^ap.*"
          }
        },
        "required": [
          "type",
          "subType",
          "issuedCountry",
          "fileId"
        ],
        "additionalProperties": false
      },
      "ComplianceDocumentUpdate": {
        "type": "object",
        "properties": {
          "issuedCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "issuedDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "number": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "fileId": {
            "type": "string",
            "pattern": "^file.*"
          },
          "description": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          }
        },
        "additionalProperties": false
      },
      "ComplianceDocument": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "DRIVERS",
              "ID_CARD",
              "PASSPORT",
              "INCOME_SOURCE",
              "INVESTOR_DOC",
              "PAYMENT_SOURCE",
              "RESIDENCE_PERMIT",
              "OTHER",
              "PROOF_OF_ADDRESS",
              "AUTH_LETTER",
              "UTILITY_BILL",
              "BANK_STATEMENT",
              "RENTAL_AGREEMENT",
              "TAX_DOCUMENT",
              "VOTER_REGISTRATION_CARD",
              "BANK_REFERENCE_LETTER",
              "LEASE_OR_TENANCY_AGREEMENT"
            ]
          },
          "subType": {
            "type": "string",
            "enum": [
              "FRONT_SIDE",
              "BACK_SIDE",
              "SINGLE_SIDE"
            ]
          },
          "issuedCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "issuedDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "expiryDate": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "number": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "fileId": {
            "type": "string",
            "pattern": "^file.*"
          },
          "description": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "userId": {
            "type": "string",
            "pattern": "^usr.*"
          },
          "associatedPartyId": {
            "type": "string",
            "pattern": "^ap.*"
          }
        },
        "required": [
          "type",
          "subType",
          "issuedCountry",
          "fileId"
        ],
        "additionalProperties": false
      },
      "ComplianceDocumentList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ComplianceDocument"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "ComplianceAssociatedPartyAdd": {
        "type": "object",
        "properties": {
          "roles": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "businessTitle": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "firstName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "middleName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "lastName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "nationality": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "phoneNumber": {
            "type": "string",
            "format": "e164",
            "pattern": "^\\+[1-9]\\d{6,14}$"
          },
          "physicalAddress": {
            "type": "object",
            "properties": {
              "addressLine1": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "addressLine2": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "city": {
                "type": "string",
                "minLength": 0,
                "maxLength": 255,
                "allOf": [
                  {
                    "pattern": "^[\\x20-\\x7E\\n]*$"
                  },
                  {
                    "pattern": "^[^0-9]*$"
                  }
                ]
              },
              "stateProvinceRegion": {
                "type": "string",
                "minLength": 0,
                "maxLength": 10,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "postalCode": {
                "type": "string",
                "minLength": 0,
                "maxLength": 20,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "country": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3
              }
            },
            "required": [
              "addressLine1",
              "city",
              "stateProvinceRegion",
              "postalCode",
              "country"
            ],
            "additionalProperties": false
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "gender": {
            "type": "string"
          },
          "taxId": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$",
            "description": "Tax identification number. If the user does not have a tax identification number for valid reasons, please pass nine nines \"999999999\"."
          },
          "taxIdType": {
            "type": "string"
          },
          "taxIdCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "relationshipEstablishedAt": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "shareProportion": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "userId": {
            "type": "string",
            "pattern": "^usr.*"
          }
        },
        "required": [
          "roles"
        ],
        "additionalProperties": false
      },
      "ComplianceAssociatedPartyUpdate": {
        "type": "object",
        "properties": {
          "roles": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "businessTitle": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "firstName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "middleName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "lastName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "nationality": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "phoneNumber": {
            "type": "string",
            "format": "e164",
            "pattern": "^\\+[1-9]\\d{6,14}$"
          },
          "physicalAddress": {
            "type": "object",
            "properties": {
              "addressLine1": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "addressLine2": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "city": {
                "type": "string",
                "minLength": 0,
                "maxLength": 255,
                "allOf": [
                  {
                    "pattern": "^[\\x20-\\x7E\\n]*$"
                  },
                  {
                    "pattern": "^[^0-9]*$"
                  }
                ]
              },
              "stateProvinceRegion": {
                "type": "string",
                "minLength": 0,
                "maxLength": 10,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "postalCode": {
                "type": "string",
                "minLength": 0,
                "maxLength": 20,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "country": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3
              }
            },
            "additionalProperties": false
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "gender": {
            "type": "string"
          },
          "taxId": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$",
            "description": "Tax identification number. If the user does not have a tax identification number for valid reasons, please pass nine nines \"999999999\"."
          },
          "taxIdType": {
            "type": "string"
          },
          "taxIdCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "relationshipEstablishedAt": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "shareProportion": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          }
        },
        "additionalProperties": false
      },
      "ComplianceAssociatedParty": {
        "type": "object",
        "properties": {
          "roles": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "businessTitle": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "firstName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "middleName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "lastName": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "nationality": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "phoneNumber": {
            "type": "string",
            "format": "e164",
            "pattern": "^\\+[1-9]\\d{6,14}$"
          },
          "physicalAddress": {
            "type": "object",
            "properties": {
              "addressLine1": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "addressLine2": {
                "type": "string",
                "minLength": 0,
                "maxLength": 100,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "city": {
                "type": "string",
                "minLength": 0,
                "maxLength": 255,
                "allOf": [
                  {
                    "pattern": "^[\\x20-\\x7E\\n]*$"
                  },
                  {
                    "pattern": "^[^0-9]*$"
                  }
                ]
              },
              "stateProvinceRegion": {
                "type": "string",
                "minLength": 0,
                "maxLength": 10,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "postalCode": {
                "type": "string",
                "minLength": 0,
                "maxLength": 20,
                "pattern": "^[\\x20-\\x7E\\n]*$"
              },
              "country": {
                "type": "string",
                "minLength": 3,
                "maxLength": 3
              }
            },
            "required": [
              "addressLine1",
              "city",
              "stateProvinceRegion",
              "postalCode",
              "country"
            ],
            "additionalProperties": false
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "gender": {
            "type": "string"
          },
          "taxId": {
            "type": "string",
            "minLength": 0,
            "maxLength": 255,
            "description": "Tax identification number. If the user does not have a tax identification number for valid reasons, please pass nine nines \"999999999\".",
            "pattern": "^[\\x20-\\x7E\\n]*$"
          },
          "taxIdType": {
            "type": "string"
          },
          "taxIdCountry": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3
          },
          "relationshipEstablishedAt": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
          },
          "shareProportion": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "userId": {
            "type": "string",
            "pattern": "^usr.*"
          }
        },
        "required": [
          "roles"
        ],
        "additionalProperties": false
      },
      "ComplianceAssociatedPartyList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ComplianceAssociatedParty"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "ComplianceStatus": {
        "type": "object",
        "properties": {
          "complianceStatus": {
            "type": "string"
          },
          "onboardingStatus": {
            "type": "string"
          },
          "message": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "ComplianceSubmitResult": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        }
      },
      "ComplianceDeleteResult": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        }
      },
      "ComplianceLinkCreate": {
        "type": "object",
        "description": "Compliance link generation parameters. Exactly one of `userId` or `userType`\nmust be provided. When `userType` is supplied without `userId`, a new user of\nthat type is created and associated with the link.\n",
        "required": [
          "requestId"
        ],
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of an existing user (prefixed with `usr_`). Provide this OR\n`userType`, not both.\n",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "userType": {
            "type": "string",
            "description": "Type of user to create the compliance link for. Provide this OR `userId`,\nnot both.\n",
            "enum": [
              "INDIVIDUAL",
              "BUSINESS"
            ],
            "example": "INDIVIDUAL"
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Idempotency identifier for the link generation request.",
            "example": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
          },
          "redirectUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL the user is redirected to after completing the compliance flow.",
            "example": "https://app.example.com/onboarding/complete"
          },
          "recipientEmail": {
            "type": "string",
            "format": "email",
            "description": "If provided, the compliance link is emailed to this address.",
            "example": "jane.doe@example.com"
          },
          "templateId": {
            "type": "string",
            "format": "uuid",
            "description": "Optional terms-of-service template ID to brand the compliance flow.",
            "example": "a1b2c3d4-e5f6-4789-a012-3456789abcde"
          }
        }
      },
      "ComplianceLinkTemplate": {
        "type": "object",
        "nullable": true,
        "description": "Branding and legal template applied to the compliance flow. Populated when\nretrieving a compliance link; `null` when generating one.\n",
        "properties": {
          "entityName": {
            "type": "string",
            "nullable": true,
            "description": "Organization name displayed in the compliance flow.",
            "example": "Acme Financial"
          },
          "logo": {
            "type": "string",
            "nullable": true,
            "description": "URL of the logo displayed in the compliance flow.",
            "example": "https://cdn.example.com/logo.png"
          },
          "termsOfServiceLink": {
            "type": "string",
            "description": "Terms of service URL.",
            "example": "https://policy.hifi.com/terms-conditions"
          },
          "privacyPolicyLink": {
            "type": "string",
            "description": "Privacy policy URL.",
            "example": "https://policy.hifi.com/privacy-policy"
          },
          "customText": {
            "type": "string",
            "nullable": true,
            "description": "Custom text displayed in the compliance flow.",
            "example": "By continuing you agree to our partner terms."
          },
          "customTextLink": {
            "type": "string",
            "nullable": true,
            "description": "URL associated with the custom text.",
            "example": "https://app.example.com/partner-terms"
          }
        }
      },
      "ComplianceLinkObject": {
        "type": "object",
        "description": "A compliance link.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the compliance link (prefixed with `cl_`).",
            "example": "cl_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this link belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "userType": {
            "type": "string",
            "enum": [
              "INDIVIDUAL",
              "BUSINESS"
            ],
            "example": "INDIVIDUAL"
          },
          "url": {
            "type": "string",
            "nullable": true,
            "description": "Hosted compliance link URL. Returned when generating a link; `null` when\nretrieving an existing link.\n",
            "example": "https://dashboard.example.com/sandbox/compliance-link?complianceLinkId=cl_3Kf9dQ2mNpXwZ7bV1aLcs&sessionToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
          },
          "sessionToken": {
            "type": "string",
            "description": "Session token authorizing the hosted compliance flow.",
            "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
          },
          "template": {
            "$ref": "#/components/schemas/ComplianceLinkTemplate"
          }
        }
      },
      "CorridorObject": {
        "type": "object",
        "description": "A supported fiat/crypto transfer corridor.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the corridor (prefixed with `crd_`).",
            "example": "crd_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "fiatCurrency": {
            "type": "string",
            "example": "USD"
          },
          "fiatCountry": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code.",
            "example": "USA"
          },
          "transferType": {
            "type": "string",
            "example": "ACH"
          },
          "cryptoCurrency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD"
            ],
            "example": "USDC"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "SOLANA",
              "ETHEREUM",
              "BASE",
              "BSC",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "direction": {
            "type": "string",
            "enum": [
              "ONRAMP",
              "OFFRAMP"
            ],
            "description": "Whether the corridor moves fiat to crypto (`ONRAMP`) or crypto to fiat (`OFFRAMP`).",
            "example": "ONRAMP"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "ACTIVE"
          }
        }
      },
      "CorridorListObject": {
        "type": "object",
        "description": "Cursor-paginated list of corridors. Each item in `data` is a full corridor object if `expand=true` was passed, otherwise just the corridor's public ID.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string",
                  "description": "Public ID of the corridor (when `expand` is omitted or `false`)."
                },
                {
                  "$ref": "#/components/schemas/CorridorObject"
                }
              ]
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "CounterPartyAddress": {
        "type": "object",
        "description": "Address of the counter party.",
        "required": [
          "addressLine1",
          "city",
          "stateProvinceRegion",
          "postalCode",
          "country"
        ],
        "properties": {
          "addressLine1": {
            "type": "string",
            "description": "Primary address line.",
            "example": "123 Main Street"
          },
          "addressLine2": {
            "type": "string",
            "description": "Secondary address line (apartment, suite, etc.).",
            "example": "Suite 100"
          },
          "city": {
            "type": "string",
            "description": "City name.",
            "example": "New York"
          },
          "stateProvinceRegion": {
            "type": "string",
            "maxLength": 10,
            "description": "State, province, or region.",
            "example": "NY"
          },
          "postalCode": {
            "type": "string",
            "description": "Postal or ZIP code.",
            "example": "10001"
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code.",
            "example": "USA"
          }
        }
      },
      "CounterPartyCreateIndividual": {
        "type": "object",
        "description": "An individual counter party. Only `userId`, `type`, `firstName`, and\n`lastName` are always required; the other fields become required depending\non what is later attached (external wallet needs the name only; external\naccount needs phoneNumber, email, dateOfBirth, taxId, taxIdType,\nnationality, address).\n",
        "required": [
          "userId",
          "type",
          "firstName",
          "lastName"
        ],
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of the user this counter party belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "type": {
            "type": "string",
            "enum": [
              "INDIVIDUAL"
            ],
            "example": "INDIVIDUAL"
          },
          "firstName": {
            "type": "string",
            "example": "Jane"
          },
          "lastName": {
            "type": "string",
            "example": "Doe"
          },
          "phoneNumber": {
            "type": "string",
            "description": "Phone number.",
            "example": "+14155552671"
          },
          "email": {
            "type": "string",
            "format": "email",
            "example": "jane.doe@example.com"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "description": "Date of birth in YYYY-MM-DD format.",
            "example": "1990-01-15"
          },
          "taxId": {
            "type": "string",
            "description": "Tax identification number. If the user does not have a tax identification number for valid reasons, please pass nine nines \"999999999\".",
            "example": "123-45-6789"
          },
          "taxIdType": {
            "type": "string",
            "description": "Type of tax identifier (e.g. SSN, ITIN).",
            "example": "SSN"
          },
          "taxIdCountry": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country that issued the tax ID.",
            "example": "USA"
          },
          "nationality": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code.",
            "example": "USA"
          },
          "address": {
            "$ref": "#/components/schemas/CounterPartyAddress"
          }
        }
      },
      "CounterPartyCreateBusiness": {
        "type": "object",
        "description": "A business counter party. Only `userId`, `type`, and `businessName` are\nalways required; the other fields become required depending on what is\nlater attached (external account needs phoneNumber, email,\nincorporationDate, taxId, taxIdType, incorporationCountry, address).\n",
        "required": [
          "userId",
          "type",
          "businessName"
        ],
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of the user this counter party belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "type": {
            "type": "string",
            "enum": [
              "BUSINESS"
            ],
            "example": "BUSINESS"
          },
          "businessName": {
            "type": "string",
            "example": "Acme Corp"
          },
          "phoneNumber": {
            "type": "string",
            "description": "Phone number.",
            "example": "+14155552671"
          },
          "incorporationDate": {
            "type": "string",
            "format": "date",
            "description": "Date of incorporation in YYYY-MM-DD format.",
            "example": "2015-06-01"
          },
          "taxId": {
            "type": "string",
            "description": "Tax identification number. If the user does not have a tax identification number for valid reasons, please pass nine nines \"999999999\".",
            "example": "12-3456789"
          },
          "taxIdType": {
            "type": "string",
            "description": "Type of tax identifier (e.g. EIN, VAT).",
            "example": "EIN"
          },
          "taxIdCountry": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country that issued the tax ID.",
            "example": "USA"
          },
          "registrationNumber": {
            "type": "string",
            "description": "Business registration number.",
            "example": "C1234567"
          },
          "incorporationCountry": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country of incorporation.",
            "example": "USA"
          },
          "email": {
            "type": "string",
            "format": "email",
            "example": "ops@acme.example.com"
          },
          "address": {
            "$ref": "#/components/schemas/CounterPartyAddress"
          }
        }
      },
      "CounterPartyObject": {
        "type": "object",
        "description": "A counter party.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the counter party (prefixed with `cpty_`).",
            "example": "cpty_7dLpR2mNpXwZ7bV1aQz3x"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this counter party belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "type": {
            "type": "string",
            "enum": [
              "INDIVIDUAL",
              "BUSINESS"
            ],
            "example": "INDIVIDUAL"
          },
          "category": {
            "type": "string",
            "description": "Business category. Present for business counter parties.",
            "example": "software"
          },
          "firstName": {
            "type": "string",
            "description": "Present for individual counter parties.",
            "example": "Jane"
          },
          "lastName": {
            "type": "string",
            "description": "Present for individual counter parties.",
            "example": "Doe"
          },
          "businessName": {
            "type": "string",
            "description": "Present for business counter parties.",
            "example": "Acme Corp"
          },
          "phoneNumber": {
            "type": "string",
            "example": "+14155552671"
          },
          "email": {
            "type": "string",
            "format": "email",
            "example": "jane.doe@example.com"
          },
          "taxId": {
            "type": "string",
            "description": "Tax identification number.",
            "example": "123-45-6789"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "Date of birth. Present for individual counter parties.",
            "example": "1990-01-15"
          },
          "incorporationDate": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "Date of incorporation. Present for business counter parties.",
            "example": "2015-06-01"
          },
          "nationality": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code. Present for individual counter parties.",
            "example": "USA"
          },
          "address": {
            "$ref": "#/components/schemas/CounterPartyAddress"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "ACTIVE"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "CounterPartyListObject": {
        "type": "object",
        "description": "Cursor-paginated list of counter parties.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CounterPartyObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "CryptoTransferCreate": {
        "type": "object",
        "description": "Create a single crypto transfer. The `chain` is derived from the source wallet —\nit is not supplied in the request. Exactly one of `destination.walletId` or\n`destination.externalWalletId` must be provided.\n",
        "required": [
          "requestId",
          "currency",
          "amount",
          "source",
          "destination"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key. Reusing a requestId returns the existing transfer or a conflict.",
            "example": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
          },
          "currency": {
            "type": "string",
            "description": "Stablecoin to transfer.",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "amount": {
            "type": "number",
            "minimum": 0.000001,
            "maximum": 999999999,
            "description": "Amount to transfer, greater than zero.",
            "example": 100.5
          },
          "source": {
            "type": "object",
            "required": [
              "walletId"
            ],
            "properties": {
              "walletId": {
                "type": "string",
                "description": "Public ID of the source wallet (prefixed with `wlt_`).",
                "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              }
            }
          },
          "destination": {
            "type": "object",
            "description": "Provide exactly one of `walletId` or `externalWalletId`.",
            "properties": {
              "walletId": {
                "type": "string",
                "description": "Public ID of a destination HIFI wallet (prefixed with `wlt_`).",
                "example": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf"
              },
              "externalWalletId": {
                "type": "string",
                "description": "Public ID of a destination external wallet (prefixed with `extw_`).",
                "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
              }
            }
          },
          "requireApproval": {
            "type": "boolean",
            "description": "When true, the transfer is created in a pending-approval state and must be approved before execution.",
            "example": false
          }
        }
      },
      "CryptoTransferReceipt": {
        "type": "object",
        "description": "On-chain settlement references. Fields are null until the transfer is submitted on-chain.",
        "properties": {
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "description": "On-chain transaction hash.",
            "example": "0x9c8f7e6d5c4b3a2918f0e1d2c3b4a5968778695a4b3c2d1e0f9a8b7c6d5e4f30"
          },
          "userOpHash": {
            "type": "string",
            "nullable": true,
            "description": "User operation hash (for smart-contract wallet transfers).",
            "example": "0x1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9"
          }
        }
      },
      "CryptoTransferObject": {
        "type": "object",
        "description": "A single crypto transfer.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the crypto transfer (prefixed with `ctx_`).",
            "example": "ctx_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key.",
            "example": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
          },
          "status": {
            "type": "string",
            "enum": [
              "NOT_INITIATED",
              "CREATED",
              "PENDING_APPROVAL",
              "APPROVED",
              "REJECTED",
              "EXPIRED",
              "INITIATED",
              "PENDING",
              "COMPLETED",
              "FAILED",
              "QUOTE_FAILED",
              "OPEN_QUOTE",
              "UNKNOWN",
              "CANCELLED"
            ],
            "example": "CREATED"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "amount": {
            "type": "string",
            "description": "Transfer amount as a string.",
            "example": "100.5"
          },
          "failedReason": {
            "type": "string",
            "nullable": true,
            "description": "Reason the transfer failed, when applicable.",
            "example": null
          },
          "source": {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string",
                "description": "Public ID of the source user (prefixed with `usr_`).",
                "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
              },
              "walletId": {
                "type": "string",
                "description": "Public ID of the source wallet (prefixed with `wlt_`).",
                "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              }
            }
          },
          "destination": {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the destination user (prefixed with `usr_`). Null for external-wallet destinations without an associated user.",
                "example": "usr_7bV1aLcs3Kf9dQ2mNpXwZ"
              },
              "walletId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the destination HIFI wallet (prefixed with `wlt_`). Null when the destination is an external wallet.",
                "example": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf"
              },
              "externalWalletId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the destination external wallet (prefixed with `extw_`). Null when the destination is a HIFI wallet.",
                "example": null
              }
            }
          },
          "contractAddress": {
            "type": "string",
            "nullable": true,
            "description": "Token contract address for the transferred currency.",
            "example": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"
          },
          "receipt": {
            "$ref": "#/components/schemas/CryptoTransferReceipt"
          },
          "chain": {
            "type": "string",
            "description": "Blockchain the transfer settles on, derived from the source wallet.",
            "enum": [
              "ETHEREUM",
              "POLYGON",
              "SOLANA",
              "BASE",
              "ARBITRUM",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "BSC",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "CryptoTransferListObject": {
        "type": "object",
        "description": "Cursor-paginated list of crypto transfers.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoTransferObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "BatchCryptoTransferCreate": {
        "type": "object",
        "description": "Create a batch crypto transfer that sends the same currency from one source wallet\nto up to 50 destinations, each with its own amount. The `chain` is derived from the\nsource wallet. Each destination must supply exactly one of `walletId` or\n`externalWalletId`.\n",
        "required": [
          "requestId",
          "currency",
          "source",
          "destinations"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key. Reusing a requestId returns the existing transfer or a conflict.",
            "example": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "source": {
            "type": "object",
            "required": [
              "walletId"
            ],
            "properties": {
              "walletId": {
                "type": "string",
                "description": "Public ID of the source wallet (prefixed with `wlt_`).",
                "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              }
            }
          },
          "destinations": {
            "type": "array",
            "minItems": 1,
            "maxItems": 50,
            "description": "Between 1 and 50 destinations. Each item provides exactly one of `walletId` or `externalWalletId` plus an amount.",
            "items": {
              "type": "object",
              "required": [
                "amount"
              ],
              "properties": {
                "walletId": {
                  "type": "string",
                  "description": "Public ID of a destination HIFI wallet (prefixed with `wlt_`).",
                  "example": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf"
                },
                "externalWalletId": {
                  "type": "string",
                  "description": "Public ID of a destination external wallet (prefixed with `extw_`).",
                  "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
                },
                "amount": {
                  "type": "number",
                  "description": "Amount to send to this destination, greater than zero.",
                  "example": 25
                }
              }
            }
          },
          "requireApproval": {
            "type": "boolean",
            "description": "When true, the batch transfer is created in a pending-approval state and must be approved before execution.",
            "example": false
          }
        }
      },
      "BatchCryptoTransferDestination": {
        "type": "object",
        "description": "A resolved destination within a batch crypto transfer.",
        "properties": {
          "userId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination user (prefixed with `usr_`).",
            "example": "usr_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "walletId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination HIFI wallet (prefixed with `wlt_`). Present for HIFI-wallet destinations.",
            "example": "wlt_9dQ2mNpXwZ7bV1aLcs3Kf"
          },
          "externalWalletId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination external wallet (prefixed with `extw_`). Present for external-wallet destinations.",
            "example": null
          },
          "amount": {
            "type": "number",
            "description": "Amount sent to this destination.",
            "example": 25
          }
        }
      },
      "BatchCryptoTransferReceipt": {
        "type": "object",
        "description": "On-chain settlement references. Fields are null until the batch is submitted on-chain.",
        "properties": {
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "description": "On-chain transaction hash.",
            "example": "0x9c8f7e6d5c4b3a2918f0e1d2c3b4a5968778695a4b3c2d1e0f9a8b7c6d5e4f30"
          },
          "userOpHash": {
            "type": "string",
            "nullable": true,
            "description": "User operation hash (for smart-contract wallet transfers).",
            "example": "0x1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9"
          }
        }
      },
      "BatchCryptoTransferObject": {
        "type": "object",
        "description": "A batch crypto transfer.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the batch crypto transfer (prefixed with `bctx_`).",
            "example": "bctx_2mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key.",
            "example": "b1e6f0c2-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "status": {
            "type": "string",
            "enum": [
              "NOT_INITIATED",
              "CREATED",
              "PENDING_APPROVAL",
              "APPROVED",
              "REJECTED",
              "EXPIRED",
              "INITIATED",
              "PENDING",
              "COMPLETED",
              "FAILED",
              "QUOTE_FAILED",
              "OPEN_QUOTE",
              "UNKNOWN",
              "CANCELLED"
            ],
            "example": "CREATED"
          },
          "failedReason": {
            "type": "string",
            "nullable": true,
            "description": "Reason the batch transfer failed, when applicable.",
            "example": null
          },
          "source": {
            "type": "object",
            "properties": {
              "userId": {
                "type": "string",
                "description": "Public ID of the source user (prefixed with `usr_`).",
                "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
              },
              "walletId": {
                "type": "string",
                "description": "Public ID of the source wallet (prefixed with `wlt_`).",
                "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              }
            }
          },
          "destinations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchCryptoTransferDestination"
            }
          },
          "contractAddress": {
            "type": "string",
            "nullable": true,
            "description": "Token contract address for the transferred currency.",
            "example": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"
          },
          "receipt": {
            "$ref": "#/components/schemas/BatchCryptoTransferReceipt"
          },
          "chain": {
            "type": "string",
            "description": "Blockchain the batch transfer settles on, derived from the source wallet.",
            "enum": [
              "ETHEREUM",
              "POLYGON",
              "SOLANA",
              "BASE",
              "ARBITRUM",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "BSC",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "BatchCryptoTransferListObject": {
        "type": "object",
        "description": "Cursor-paginated list of batch crypto transfers.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchCryptoTransferObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "ExternalAccountBankAddress": {
        "type": "object",
        "description": "Address of the beneficiary bank.",
        "required": [
          "addressLine1",
          "city",
          "stateProvinceRegion",
          "postalCode",
          "country"
        ],
        "properties": {
          "addressLine1": {
            "type": "string",
            "description": "Primary address line.",
            "example": "123 Main Street"
          },
          "addressLine2": {
            "type": "string",
            "description": "Secondary address line (apartment, suite, etc.).",
            "example": "Suite 100"
          },
          "city": {
            "type": "string",
            "description": "City name.",
            "example": "New York"
          },
          "stateProvinceRegion": {
            "type": "string",
            "maxLength": 10,
            "description": "State, province, or region.",
            "example": "NY"
          },
          "postalCode": {
            "type": "string",
            "description": "Postal or ZIP code.",
            "example": "10001"
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code.",
            "example": "USA"
          }
        }
      },
      "ExternalAccountCreateBankAddress": {
        "type": "object",
        "description": "Address of the beneficiary bank. `country` is required for every rail;\nthe other fields are required only for some rails — see the\n[account information reference](https://docs.hifi.com/v3/docs/references/account-information).\n",
        "required": [
          "country"
        ],
        "properties": {
          "addressLine1": {
            "type": "string",
            "description": "Primary address line.",
            "example": "123 Main Street"
          },
          "addressLine2": {
            "type": "string",
            "description": "Secondary address line (apartment, suite, etc.).",
            "example": "Suite 100"
          },
          "city": {
            "type": "string",
            "description": "City name.",
            "example": "New York"
          },
          "stateProvinceRegion": {
            "type": "string",
            "maxLength": 10,
            "description": "State, province, or region.",
            "example": "NY"
          },
          "postalCode": {
            "type": "string",
            "description": "Postal or ZIP code.",
            "example": "10001"
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code.",
            "example": "USA"
          }
        }
      },
      "ExternalAccountCreateBase": {
        "type": "object",
        "description": "Fields common to every external account creation rail.",
        "required": [
          "counterPartyId"
        ],
        "properties": {
          "counterPartyId": {
            "type": "string",
            "description": "Public ID of the counter party this account belongs to (prefixed with `cpty_`).",
            "example": "cpty_7dLpR2mNpXwZ7bV1aQz3x"
          },
          "nickname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Optional nickname for the external account."
          }
        }
      },
      "ExternalAccountCreate": {
        "type": "object",
        "description": "External account details. Required fields vary by `transferType`, `currency`,\nand `bankAddress.country`. See the\n[account information reference](https://docs.hifi.com/v3/docs/references/account-information)\nfor the supported combinations and which fields each one requires.\n",
        "allOf": [
          {
            "$ref": "#/components/schemas/ExternalAccountCreateBase"
          },
          {
            "type": "object",
            "required": [
              "transferType",
              "currency",
              "bankAddress"
            ],
            "properties": {
              "transferType": {
                "type": "string",
                "enum": [
                  "ACH",
                  "WIRE",
                  "SWIFT",
                  "RTP",
                  "PIX",
                  "SPEI",
                  "CHATS",
                  "FPS",
                  "CIPS",
                  "SEPA",
                  "INSTAPAY",
                  "PESONET",
                  "NEQUI",
                  "BANK"
                ],
                "example": "ACH"
              },
              "currency": {
                "type": "string",
                "enum": [
                  "USD",
                  "EUR",
                  "BRL",
                  "NGN",
                  "KES",
                  "TZS",
                  "UGX",
                  "BWP",
                  "XAF",
                  "MWK",
                  "RWF",
                  "ZMW",
                  "XOF",
                  "ZAR",
                  "MXN",
                  "PHP",
                  "AED",
                  "HKD",
                  "CNY",
                  "COP",
                  "ARS",
                  "SGD",
                  "GBP",
                  "AUD",
                  "CAD",
                  "JPY",
                  "VND"
                ],
                "example": "USD"
              },
              "bankAddress": {
                "$ref": "#/components/schemas/ExternalAccountCreateBankAddress"
              },
              "bankName": {
                "type": "string",
                "description": "Bank name. Required for most rails; not accepted for PIX.",
                "example": "Chase Bank"
              },
              "accountNumber": {
                "type": "string",
                "description": "Bank account number.",
                "example": "123456789"
              },
              "routingNumber": {
                "type": "string",
                "description": "ABA routing number (exactly 9 digits, ACH/WIRE/RTP only).",
                "example": "021000021"
              },
              "accountType": {
                "type": "string",
                "enum": [
                  "CHECKING",
                  "SAVINGS"
                ],
                "example": "CHECKING"
              },
              "iban": {
                "type": "string",
                "description": "International Bank Account Number.",
                "example": "DE91100000000123456789"
              },
              "swiftCode": {
                "type": "string",
                "description": "SWIFT/BIC code (8 or 11 characters).",
                "example": "DEUTDEFF"
              },
              "bankCode": {
                "type": "string",
                "description": "Bank code (Hong Kong CHATS only, HKD or USD).\nUSD CHATS (currency `USD` with transferType `CHATS`) is only available to business counterparties.\n",
                "example": "004"
              },
              "fpsId": {
                "type": "string",
                "description": "Faster Payment System identifier (Hong Kong FPS only).",
                "example": "123456789"
              },
              "clabe": {
                "type": "string",
                "description": "CLABE number (Mexico SPEI only, exactly 18 digits).",
                "example": "032180000118359719"
              },
              "pixKey": {
                "type": "string",
                "description": "PIX key, EVP (random key) format (Brazil PIX only).",
                "example": "123e4567-e89b-12d3-a456-426614174000"
              },
              "email": {
                "type": "string",
                "description": "PIX key, email format (Brazil PIX only).",
                "example": "jane.doe@example.com"
              },
              "phoneNumber": {
                "type": "string",
                "description": "PIX key (Brazil, E.164) or mobile money number (Colombia, E.164).",
                "example": "+573001234567"
              },
              "cpf": {
                "type": "string",
                "description": "PIX key, CPF (individual taxpayer ID, 11 digits, Brazil PIX only).",
                "example": "12345678901"
              },
              "cnpj": {
                "type": "string",
                "description": "PIX key, CNPJ (business taxpayer ID, 14 digits, Brazil PIX only).",
                "example": "12345678901234"
              }
            }
          }
        ]
      },
      "ExternalAccountUpdate": {
        "type": "object",
        "description": "Fields to update on the external account.",
        "required": [
          "nickname"
        ],
        "properties": {
          "nickname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "nullable": true,
            "description": "New nickname for the external account. Pass `null` to clear it.",
            "example": "Primary settlement account"
          }
        }
      },
      "ExternalAccountObject": {
        "type": "object",
        "description": "An external account.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the external account (prefixed with `extacct_`).",
            "example": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this account belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "counterPartyId": {
            "type": "string",
            "description": "Public ID of the counter party this account belongs to (prefixed with `cpty_`).",
            "example": "cpty_7dLpR2mNpXwZ7bV1aQz3x"
          },
          "accountNumber": {
            "type": "string",
            "description": "Masked bank account number.",
            "example": "****6789"
          },
          "routingNumber": {
            "type": "string",
            "description": "ABA routing number.",
            "example": "021000021"
          },
          "accountType": {
            "type": "string",
            "enum": [
              "CHECKING",
              "SAVINGS"
            ],
            "example": "CHECKING"
          },
          "iban": {
            "type": "string",
            "description": "Masked IBAN.",
            "example": "****6789"
          },
          "swiftCode": {
            "type": "string",
            "description": "SWIFT/BIC code.",
            "example": "DEUTDEFF"
          },
          "sortCode": {
            "type": "string",
            "description": "Sort code.",
            "example": "123456"
          },
          "pixKey": {
            "type": "string",
            "description": "Masked PIX key (EVP format).",
            "example": "****4000"
          },
          "phoneNumber": {
            "type": "string",
            "description": "Masked phone number.",
            "example": "+57*****4567"
          },
          "email": {
            "type": "string",
            "description": "Masked email (PIX key, Brazil only).",
            "example": "j***e@e*****e.com"
          },
          "cpf": {
            "type": "string",
            "description": "Masked CPF (PIX key, Brazil only).",
            "example": "****8901"
          },
          "cnpj": {
            "type": "string",
            "description": "Masked CNPJ (PIX key, Brazil only).",
            "example": "****1234"
          },
          "bankName": {
            "type": "string",
            "example": "Chase Bank"
          },
          "bankAddress": {
            "$ref": "#/components/schemas/ExternalAccountBankAddress"
          },
          "nickname": {
            "type": "string",
            "nullable": true,
            "description": "Client-supplied nickname for the external account.",
            "example": "Primary settlement account"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USD",
              "EUR",
              "BRL",
              "NGN",
              "KES",
              "TZS",
              "UGX",
              "BWP",
              "XAF",
              "MWK",
              "RWF",
              "ZMW",
              "XOF",
              "ZAR",
              "MXN",
              "PHP",
              "AED",
              "HKD",
              "CNY",
              "COP",
              "ARS",
              "SGD",
              "GBP",
              "AUD",
              "CAD",
              "JPY",
              "VND"
            ],
            "example": "USD"
          },
          "transferType": {
            "type": "string",
            "enum": [
              "ACH",
              "WIRE",
              "SWIFT",
              "RTP",
              "PIX",
              "SPEI",
              "CHATS",
              "FPS",
              "CIPS",
              "SEPA",
              "INSTAPAY",
              "PESONET",
              "NEQUI",
              "BANK"
            ],
            "example": "ACH"
          },
          "fpsId": {
            "type": "string",
            "description": "Masked Faster Payment System identifier.",
            "example": "****6789"
          },
          "clabe": {
            "type": "string",
            "description": "Masked CLABE number.",
            "example": "****9719"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "ACTIVE"
          },
          "invalidCode": {
            "type": "string",
            "nullable": true,
            "description": "Set when the receiving bank reports the account as invalid; the account's `status` is then `INACTIVE` and it cannot be used for new transfers. Null otherwise.\n\nFormat is `<RAIL>_<EVENT>_<NETWORK_CODE>`, shared across payment rails. More rails and codes may be added.\n\n| Code | Description |\n| --- | --- |\n| `ACH_NOC_C01` | Incorrect DFI Account Number |\n| `ACH_NOC_C02` | Incorrect Routing Number |\n| `ACH_NOC_C03` | Incorrect Routing Number and Incorrect DFI Number |\n| `ACH_NOC_C04` | Incorrect Individual Name/Receiving Company Name |\n| `ACH_NOC_C05` | Incorrect Transaction Code |\n| `ACH_NOC_C06` | Incorrect DFI Account Number and Incorrect Transaction Code |\n| `ACH_NOC_C07` | Incorrect Routing Number, Incorrect DFI Account Number, and Incorrect Transaction Code |\n| `ACH_NOC_C08` | Incorrect Receiving DFI Identification (IAT only) |\n| `ACH_NOC_C09` | Incorrect Identification Number |\n| `ACH_NOC_C13` | Addenda Format Error |\n| `ACH_NOC_C14` | Incorrect SEC Code for Outbound International Payment |\n| `ACH_RETURN_<Rxx>` | ACH prenote returned with return code `Rxx` (e.g. `ACH_RETURN_R03`: No account or unable to locate account) |\n",
            "example": "ACH_NOC_C01"
          },
          "invalidMessage": {
            "type": "string",
            "nullable": true,
            "description": "Human-readable description of `invalidCode`. Null when `invalidCode` is null.",
            "example": "Incorrect DFI Account Number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "ExternalAccountListObject": {
        "type": "object",
        "description": "Cursor-paginated list of external accounts.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalAccountObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "ExternalCardCreate": {
        "type": "object",
        "description": "Card details to tokenize. The card number is tokenized with the card\nprovider and never stored in plaintext; only the last four digits are\nretained.\n",
        "required": [
          "counterPartyId",
          "firstName",
          "lastName",
          "cardNumber",
          "expiryMonth",
          "expiryYear",
          "cvv"
        ],
        "properties": {
          "counterPartyId": {
            "type": "string",
            "description": "Public ID of the counter party this card belongs to (prefixed with `cpty_`).",
            "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "firstName": {
            "type": "string",
            "description": "Cardholder first name.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "Cardholder last name.",
            "example": "Doe"
          },
          "cardNumber": {
            "type": "string",
            "description": "Full card number (PAN).",
            "example": "4111111111111111"
          },
          "expiryMonth": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "Card expiry month (2 digits).",
            "example": "09"
          },
          "expiryYear": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2,
            "description": "Card expiry year (2 digits).",
            "example": "28"
          },
          "cvv": {
            "type": "string",
            "description": "Card verification value.",
            "example": "123"
          },
          "nickname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Client-supplied nickname for the external card.",
            "example": "Jane's virtual card"
          }
        }
      },
      "ExternalCardUpdate": {
        "type": "object",
        "description": "Fields to update on the external card.",
        "required": [
          "nickname"
        ],
        "properties": {
          "nickname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "nullable": true,
            "description": "New nickname for the external card. Pass `null` to clear it.",
            "example": "Jane's virtual card"
          }
        }
      },
      "ExternalCardObject": {
        "type": "object",
        "description": "An external card.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the external card (prefixed with `extcrd_`).",
            "example": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this card belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "counterPartyId": {
            "type": "string",
            "description": "Public ID of the counter party this card belongs to (prefixed with `cpty_`).",
            "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "firstName": {
            "type": "string",
            "description": "Cardholder first name.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "Cardholder last name.",
            "example": "Doe"
          },
          "cardNumber": {
            "type": "string",
            "description": "Masked card number, exposing only the last four digits.",
            "example": "************1111"
          },
          "expiryMonth": {
            "type": "string",
            "description": "Card expiry month (2 digits).",
            "example": "09"
          },
          "expiryYear": {
            "type": "string",
            "description": "Card expiry year (2 digits).",
            "example": "28"
          },
          "nickname": {
            "type": "string",
            "nullable": true,
            "description": "Client-supplied nickname for the external card.",
            "example": "Jane's virtual card"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "ACTIVE"
          },
          "invalidCode": {
            "type": "string",
            "nullable": true,
            "description": "Code explaining why the external card was marked invalid; the card's `status` is then `INACTIVE`. Null otherwise.",
            "example": null
          },
          "invalidMessage": {
            "type": "string",
            "nullable": true,
            "description": "Human-readable detail for `invalidCode`. Null when `invalidCode` is null.",
            "example": null
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "ExternalCardListObject": {
        "type": "object",
        "description": "Cursor-paginated list of external cards.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalCardObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "ExternalCardSessionAdd": {
        "type": "object",
        "description": "Parameters for a hosted external card collection session.",
        "required": [
          "requestId",
          "userId"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key for the session.",
            "example": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this session belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "counterPartyId": {
            "type": "string",
            "description": "Public ID of an existing counter party (prefixed with `cpty_`) to attach\nthe card to. Omit to have the session collect a new counter party.\n",
            "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "redirectUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL to redirect to once the hosted session completes.",
            "example": "https://example.com/card-onboarding/complete"
          },
          "recipientEmail": {
            "type": "string",
            "format": "email",
            "description": "If provided, HIFI emails the hosted session link to this address.",
            "example": "jane.doe@example.com"
          },
          "templateId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a ToS/compliance template to present during the session."
          },
          "expiresIn": {
            "type": "integer",
            "minimum": 300,
            "maximum": 604800,
            "default": 3600,
            "description": "Seconds until the session expires.",
            "example": 3600
          }
        }
      },
      "ExternalCardSessionObject": {
        "type": "object",
        "description": "A hosted external card collection session.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the card session (prefixed with `ecs_`).",
            "example": "ecs_2mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this session belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "counterPartyId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the associated counter party, if one was supplied or has since been created.",
            "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "url": {
            "type": "string",
            "nullable": true,
            "description": "Hosted session URL, including a fragment-embedded session token. Only present on creation.",
            "example": "https://dashboard.hifi.com/sandbox/external-card-sessions/ecs_2mNpXwZ7bV1aLcs3Kf9dQ?userId=usr_3Kf9dQ2mNpXwZ7bV1aLcs#sessionToken=..."
          },
          "recipientEmail": {
            "type": "string",
            "nullable": true,
            "example": "jane.doe@example.com"
          },
          "redirectUrl": {
            "type": "string",
            "nullable": true,
            "example": "https://example.com/card-onboarding/complete"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "PROCESSING",
              "COMPLETED",
              "EXPIRED"
            ],
            "example": "PENDING"
          },
          "expiredAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-07-01T11:30:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "WalletExternalObject": {
        "type": "object",
        "description": "An external (client-owned) wallet registered against a counter party.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the external wallet (prefixed with `extw_`).",
            "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this external wallet belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "counterPartyId": {
            "type": "string",
            "description": "Public ID of the counter party this external wallet belongs to (prefixed with `cpty_`).",
            "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "SOLANA",
              "ETHEREUM",
              "BASE",
              "BSC",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "name": {
            "type": "string",
            "description": "Human-readable name for the external wallet.",
            "example": "Treasury cold wallet"
          },
          "address": {
            "type": "string",
            "description": "On-chain address of the external wallet.",
            "example": "0x9876543210fedcba9876543210fedcba98765432"
          },
          "referenceId": {
            "type": "string",
            "description": "Client-supplied idempotency/reference identifier.",
            "example": "my-ref-001"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the external wallet is active.",
            "example": true
          },
          "screeningStatus": {
            "type": "string",
            "nullable": true,
            "description": "Address screening status; null when no screening status is available.",
            "enum": [
              "CLEARED",
              "FLAGGED",
              "UNDER_REVIEW",
              "NOT_SCREENED",
              null
            ],
            "example": "CLEARED"
          },
          "invalidCode": {
            "type": "string",
            "nullable": true,
            "description": "Code explaining why the external wallet was marked invalid; the wallet's `active` is then `false`. Null otherwise.",
            "example": null
          },
          "invalidMessage": {
            "type": "string",
            "nullable": true,
            "description": "Human-readable detail for `invalidCode`. Null when `invalidCode` is null.",
            "example": null
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "WalletExternalListObject": {
        "type": "object",
        "description": "Cursor-paginated list of external wallets.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WalletExternalObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "WalletExternalDeactivateObject": {
        "type": "object",
        "description": "Confirmation that an external wallet was deactivated.",
        "properties": {
          "message": {
            "type": "string",
            "example": "External wallet deactivated successfully"
          }
        }
      },
      "WalletAddExternalBody": {
        "type": "object",
        "description": "External wallet details. The `address` must be a valid address for the\nspecified `chain`.\n",
        "required": [
          "counterPartyId",
          "address",
          "chain",
          "referenceId"
        ],
        "properties": {
          "counterPartyId": {
            "type": "string",
            "pattern": "^cpty_[A-Za-z0-9]+$",
            "description": "Public ID of the counter party to register the external wallet against.",
            "example": "cpty_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "address": {
            "type": "string",
            "description": "On-chain address of the external wallet.",
            "example": "0x9876543210fedcba9876543210fedcba98765432"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "SOLANA",
              "ETHEREUM",
              "BASE",
              "BSC",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "nickname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Human-readable nickname for the external wallet.",
            "example": "Treasury cold wallet"
          },
          "referenceId": {
            "type": "string",
            "description": "Client-supplied idempotency/reference identifier.",
            "example": "my-ref-001"
          }
        }
      },
      "WalletUpdateExternalBody": {
        "type": "object",
        "description": "Fields to update on the external wallet.",
        "required": [
          "nickname"
        ],
        "properties": {
          "nickname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "nullable": true,
            "description": "Human-readable nickname for the external wallet. Pass `null` to clear it.",
            "example": "Treasury cold wallet (renamed)"
          }
        }
      },
      "WalletCreateBody": {
        "type": "object",
        "description": "The user to provision wallets for and the chains to provision them on. At least one chain is required.",
        "required": [
          "userId",
          "chains"
        ],
        "properties": {
          "userId": {
            "type": "string",
            "pattern": "^user_[A-Za-z0-9]+$",
            "description": "Public ID of the user to provision wallets for.",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "chains": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "enum": [
                "POLYGON",
                "SOLANA",
                "ETHEREUM",
                "BASE",
                "BSC",
                "FLOW_EVM",
                "CANTON",
                "TRON",
                "ARC"
              ]
            },
            "example": [
              "POLYGON",
              "SOLANA"
            ]
          }
        }
      },
      "FileObject": {
        "type": "object",
        "description": "A file that has been uploaded to HIFI.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public file identifier.",
            "example": "file_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the file was uploaded, in ISO 8601 format.",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "fileName": {
            "type": "string",
            "description": "Original name of the uploaded file.",
            "example": "passport.pdf"
          },
          "size": {
            "type": "integer",
            "description": "Size of the file in bytes.",
            "example": 245760
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type of the uploaded file.",
            "enum": [
              "application/pdf",
              "image/jpeg",
              "image/png",
              "image/heic",
              "image/tiff"
            ],
            "example": "application/pdf"
          }
        }
      },
      "FileUploadRequest": {
        "type": "object",
        "required": [
          "file"
        ],
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "description": "The file to upload. Maximum size is 20 MB. Accepted MIME types are\n`application/pdf`, `image/jpeg`, `image/png`, `image/heic`, `image/tiff`.\n"
          }
        }
      },
      "KycLinkGenerate": {
        "type": "object",
        "description": "Parameters for generating a KYC link. Exactly one of `userId` or `userType` is required.",
        "required": [
          "rails",
          "requestId"
        ],
        "properties": {
          "rails": {
            "type": "array",
            "description": "The rail(s) to collect KYC requirements for.",
            "items": {
              "type": "string",
              "enum": [
                "ON_CHAIN",
                "SOUTH_AMERICA_STANDARD",
                "USD_EURO",
                "AFRICA_GENERAL",
                "AFRICA_NIGERIA",
                "MULTI_CURRENCY_ACCOUNT",
                "USD",
                "GLOBAL_NETWORK",
                "USD_FIAT"
              ]
            },
            "example": [
              "USD"
            ]
          },
          "userId": {
            "type": "string",
            "format": "uuid",
            "description": "Internal user ID to attach this KYC link to. Omit if `userType` is provided."
          },
          "userType": {
            "type": "string",
            "enum": [
              "business",
              "individual"
            ],
            "description": "Creates a new user of this type. Omit if `userId` is provided."
          },
          "redirectUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL to redirect to once the hosted KYC flow completes."
          },
          "recipientEmail": {
            "type": "string",
            "format": "email",
            "description": "If provided, HIFI emails the hosted link to this address. Production only."
          },
          "templateId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a ToS/compliance template to present during the flow."
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key for the link."
          }
        }
      },
      "KycLinkGenerateInitialKyb": {
        "type": "object",
        "description": "Parameters for generating the initial org-onboarding KYB link.",
        "properties": {
          "recipientEmail": {
            "type": "string",
            "format": "email",
            "description": "If provided, HIFI emails the hosted link to this address."
          }
        }
      },
      "KycLinkCreateResult": {
        "type": "object",
        "description": "A newly created KYC link.",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the KYC link. Use this as `kycLinkId` on all sub-resource endpoints.",
            "example": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
          },
          "kycLinkUrl": {
            "type": "string",
            "format": "uri",
            "description": "Hosted KYC link URL, including an embedded session token.",
            "example": "https://dashboardx.hifi.com/sandbox/kyc-link?kycLinkId=8f14e45f-ceea-467e-adde-0f8d0f5f4b1c&sessionToken=..."
          }
        }
      },
      "KycLinkStatus": {
        "type": "object",
        "description": "Status and identifying details of a KYC link.",
        "additionalProperties": true
      },
      "KycObject": {
        "type": "object",
        "description": "The user's KYC/KYB data. Field set depends on whether the user is an individual or a business.",
        "additionalProperties": true
      },
      "KycRequirements": {
        "type": "object",
        "description": "The KYC fields, documents, and UBOs required to submit, given the link's rails.",
        "additionalProperties": true
      },
      "KycStatusByRail": {
        "type": "object",
        "description": "KYC verification status, keyed by rail.",
        "additionalProperties": true,
        "example": {
          "USD": {
            "status": "APPROVED"
          }
        }
      },
      "KycSubmitResult": {
        "type": "object",
        "description": "Result of submitting the KYC link for verification.",
        "additionalProperties": true
      },
      "KycLinkUboObject": {
        "type": "object",
        "description": "An ultimate beneficial owner (UBO) attached to a business user's KYC.",
        "additionalProperties": true
      },
      "KycLinkDocumentObject": {
        "type": "object",
        "description": "A compliance document attached to the user or a UBO.",
        "additionalProperties": true
      },
      "IdMappingEntry": {
        "type": "object",
        "description": "A single v2-to-v3 ID mapping request.",
        "required": [
          "v2Id",
          "resourceType"
        ],
        "properties": {
          "v2Id": {
            "type": "string",
            "format": "uuid",
            "description": "The resource's internal v2 UUID.",
            "example": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
          },
          "resourceType": {
            "type": "string",
            "enum": [
              "USER",
              "WALLET_DEPOSIT",
              "EXTERNAL_WALLET",
              "OFFER",
              "VIRTUAL_ACCOUNT",
              "EXTERNAL_ACCOUNT",
              "ONRAMP",
              "OFFRAMP",
              "CRYPTO_TRANSFER",
              "BATCH_CRYPTO_TRANSFER",
              "SWAP",
              "BRIDGE",
              "SETTLEMENT_RULE",
              "ORCHESTRATION_ADDRESS",
              "ORCHESTRATION_DEPOSIT",
              "ORCHESTRATION_BATCH"
            ],
            "example": "USER"
          }
        }
      },
      "IdMappingBatch": {
        "type": "object",
        "description": "Up to 1000 v2 IDs to resolve to their v3 public IDs.",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1000,
            "items": {
              "$ref": "#/components/schemas/IdMappingEntry"
            }
          }
        }
      },
      "IdMappingResultEntry": {
        "type": "object",
        "description": "The resolved v3 public ID for a single requested v2 ID, if it could be mapped.",
        "properties": {
          "resourceType": {
            "type": "string",
            "example": "USER"
          },
          "v2Id": {
            "type": "string",
            "format": "uuid",
            "example": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
          },
          "v3Id": {
            "type": "string",
            "nullable": true,
            "description": "The corresponding v3 public ID, or `null` if it could not be mapped.",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "mapped": {
            "type": "boolean",
            "example": true
          }
        }
      },
      "IdMappingResult": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IdMappingResultEntry"
            }
          }
        }
      },
      "OfframpCreateSource": {
        "type": "object",
        "description": "Source of the stablecoins. Provide exactly one of `walletId` or `externalWalletId`.\nProvide `amount` here only if it is omitted from `destination`.\n",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "description": "Source stablecoin.",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "amount": {
            "type": "number",
            "description": "Amount of stablecoin to send. Must be positive. Provide either this or\n`destination.amount`, not both. For USDT the minimum is 10.\n",
            "example": 100
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of a custodial HIFI wallet (prefixed with `wlt_`).",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "externalWalletId": {
            "type": "string",
            "description": "Public ID of an external wallet (prefixed with `extw_`).",
            "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
          }
        }
      },
      "OfframpCreateDestination": {
        "type": "object",
        "description": "Fiat payout destination. Provide exactly one of `externalAccountId` or `externalCardId`.\nProvide `amount` here only if it is omitted from `source`.\n",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "description": "Destination fiat currency.",
            "enum": [
              "USD",
              "PHP",
              "AED",
              "EUR",
              "BRL",
              "HKD",
              "CNY",
              "MXN",
              "COP",
              "ARS",
              "NGN",
              "KES",
              "BWP",
              "ZAR",
              "TZS",
              "UGX",
              "XAF",
              "MWK",
              "RWF",
              "ZMW",
              "XOF",
              "SGD",
              "GBP",
              "INR",
              "AUD",
              "CAD",
              "JPY",
              "VND"
            ],
            "example": "USD"
          },
          "amount": {
            "type": "number",
            "description": "Amount of fiat to receive. Must be positive. Provide either this or\n`source.amount`, not both. For INR the minimum payout is 1000 — a request whose\npayout falls below it is rejected, whichever side of the amount was fixed.\n",
            "example": 100
          },
          "externalAccountId": {
            "type": "string",
            "description": "Public ID of the beneficiary external account (prefixed with `extacct_`).",
            "example": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "externalCardId": {
            "type": "string",
            "description": "Public ID of the beneficiary external card (prefixed with `extcrd_`).",
            "example": "extcrd_2mNpXwZ7bV1aLcs3Kf9dQ"
          }
        }
      },
      "OfframpCreate": {
        "type": "object",
        "description": "Parameters for creating an offramp transaction.",
        "required": [
          "requestId",
          "source",
          "destination"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key. Must be a UUID and unique per offramp.",
            "example": "8f3a2b1c-4d5e-6f70-8192-a3b4c5d6e7f8"
          },
          "source": {
            "$ref": "#/components/schemas/OfframpCreateSource"
          },
          "destination": {
            "$ref": "#/components/schemas/OfframpCreateDestination"
          },
          "sameDayAch": {
            "type": "boolean",
            "description": "Request same-day ACH settlement (applicable to ACH payouts only).",
            "example": false
          },
          "achMessage": {
            "type": "string",
            "description": "Reference message included with ACH payouts.",
            "example": "Invoice 1024"
          },
          "sepaMessage": {
            "type": "string",
            "description": "Reference message included with SEPA payouts.",
            "example": "Invoice 1024"
          },
          "wireMessage": {
            "type": "string",
            "description": "Reference message included with wire payouts.",
            "example": "Invoice 1024"
          },
          "swiftMessage": {
            "type": "string",
            "description": "Reference message included with SWIFT payouts.",
            "example": "Invoice 1024"
          },
          "purposeOfPayment": {
            "type": "string",
            "description": "Purpose of the payment. For Hong Kong USD CHATS (destination currency `USD`\nwith transferType `CHATS`), this is required, the source user must be a\nbusiness, and the value is restricted to one of: invoice_payments,\npayment_for_services, payment_for_software, payment_for_imported_goods,\ntravel_services, transfer_to_own_account, payroll, payment_of_property_rental,\nrepresentative_office_expenses, transportation_fees, offline_goods_trade,\neducation_expenses, advance_payment_for_goods, merchant_settlement,\nrepatriation_fund_settlement.\n",
            "example": "Supplier payment"
          },
          "description": {
            "type": "string",
            "description": "Free-text description of the offramp.",
            "example": "July settlement"
          }
        }
      },
      "OfframpSourceObject": {
        "type": "object",
        "description": "Resolved source of the offramp.",
        "properties": {
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "ETHEREUM",
              "SOLANA",
              "BASE",
              "FLOW_EVM",
              "BSC",
              "TRON",
              "CANTON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "amount": {
            "type": "number",
            "example": 100
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the source user (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of the source custodial wallet (prefixed with `wlt_`).",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "externalWalletId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the source external wallet (prefixed with `extw_`).",
            "example": null
          },
          "walletAddress": {
            "type": "string",
            "example": "0x1234567890abcdef1234567890abcdef12345678"
          }
        }
      },
      "OfframpDestinationObject": {
        "type": "object",
        "description": "Resolved fiat payout destination.",
        "properties": {
          "amount": {
            "type": "number",
            "example": 99.5
          },
          "currency": {
            "type": "string",
            "enum": [
              "USD",
              "PHP",
              "AED",
              "EUR",
              "BRL",
              "HKD",
              "CNY",
              "MXN",
              "COP",
              "ARS",
              "NGN",
              "KES",
              "BWP",
              "ZAR",
              "TZS",
              "UGX",
              "XAF",
              "MWK",
              "RWF",
              "ZMW",
              "XOF",
              "SGD",
              "GBP",
              "INR",
              "AUD",
              "CAD",
              "JPY",
              "VND"
            ],
            "example": "USD"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the destination user (prefixed with `usr_`).",
            "example": "usr_7dLpR2mNpXwZ7bV1aQz3x"
          },
          "externalAccountId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination external account (prefixed with `extacct_`).",
            "example": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "externalCardId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the destination external card (prefixed with `extcrd_`).",
            "example": null
          }
        }
      },
      "OfframpReceiptObject": {
        "type": "object",
        "description": "On-chain and payout tracking references.",
        "properties": {
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "description": "Hash of the on-chain stablecoin transfer.",
            "example": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890"
          },
          "paymentTracking": {
            "nullable": true,
            "description": "Fiat payout tracking details, when available.",
            "example": null
          }
        }
      },
      "OfframpDeveloperFeeObject": {
        "type": "object",
        "nullable": true,
        "description": "Developer fee charged on the offramp, if any.",
        "properties": {
          "id": {
            "type": "string",
            "example": "fee_9dQ2mNpXwZ7bV1aLcs3Kf"
          },
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "example": "0xdef4567890abc123def4567890abc123def4567890abc123def4567890abc123"
          },
          "fees": {
            "type": "string",
            "example": "0.5"
          }
        }
      },
      "OfframpObject": {
        "type": "object",
        "description": "An offramp transaction.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the offramp (prefixed with `offramp_`).",
            "example": "offramp_9dQ2mNpXwZ7bV1aLcs3Kf"
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key.",
            "example": "8f3a2b1c-4d5e-6f70-8192-a3b4c5d6e7f8"
          },
          "status": {
            "type": "string",
            "enum": [
              "NOT_INITIATED",
              "CREATED",
              "PENDING_APPROVAL",
              "OPEN_QUOTE",
              "CRYPTO_INITIATED",
              "AWAITING_FUNDS",
              "CRYPTO_PENDING",
              "CRYPTO_PROCESSED",
              "FIAT_INITIATED",
              "FIAT_PENDING",
              "COMPLETED",
              "FIAT_FAILED",
              "FIAT_RETURNED",
              "CRYPTO_RETURNED",
              "CRYPTO_FAILED",
              "QUOTE_FAILED",
              "IN_REVIEW",
              "REJECTED",
              "EXPIRED",
              "CANCELLED"
            ],
            "example": "OPEN_QUOTE"
          },
          "failedReason": {
            "type": "string",
            "nullable": true,
            "description": "Machine-readable failure reason. Null unless the offramp failed.",
            "example": null
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "User-facing error summary. Null unless the offramp failed.",
            "example": null
          },
          "errorDetails": {
            "type": "string",
            "nullable": true,
            "description": "User-facing error details. Null unless the offramp failed.",
            "example": null
          },
          "source": {
            "$ref": "#/components/schemas/OfframpSourceObject"
          },
          "destination": {
            "$ref": "#/components/schemas/OfframpDestinationObject"
          },
          "receipt": {
            "$ref": "#/components/schemas/OfframpReceiptObject"
          },
          "quote": {
            "type": "object",
            "nullable": true,
            "description": "Conversion quote for this offramp.",
            "example": {
              "sourceCurrency": "USDC",
              "destinationCurrency": "USD",
              "rate": "0.9985"
            }
          },
          "depositInfo": {
            "type": "array",
            "description": "Deposit instructions, when applicable.",
            "items": {
              "type": "object"
            },
            "example": []
          },
          "sameDayAch": {
            "type": "boolean",
            "example": false
          },
          "achMessage": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "sepaMessage": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "wireMessage": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "swiftMessage": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "purposeOfPayment": {
            "type": "string",
            "nullable": true,
            "example": "Supplier payment"
          },
          "returnAddress": {
            "type": "string",
            "nullable": true,
            "description": "Address to which source stablecoins are returned if the offramp fails.",
            "example": "0x1234567890abcdef1234567890abcdef12345678"
          },
          "developerFee": {
            "$ref": "#/components/schemas/OfframpDeveloperFeeObject"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "example": "July settlement"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "OfframpRateObject": {
        "type": "object",
        "description": "A conversion rate from a source stablecoin to a destination fiat currency.",
        "properties": {
          "sourceCurrency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "destinationCurrency": {
            "type": "string",
            "enum": [
              "USD",
              "PHP",
              "AED",
              "EUR",
              "BRL",
              "HKD",
              "CNY",
              "MXN",
              "COP",
              "ARS",
              "NGN",
              "KES",
              "BWP",
              "ZAR",
              "TZS",
              "UGX",
              "XAF",
              "MWK",
              "RWF",
              "ZMW",
              "XOF",
              "SGD",
              "GBP",
              "INR",
              "AUD",
              "CAD",
              "JPY",
              "VND"
            ],
            "example": "USD"
          },
          "rate": {
            "type": "string",
            "description": "Conversion rate expressed as destination units per source unit.",
            "example": "0.9985"
          }
        }
      },
      "OfframpListObject": {
        "type": "object",
        "description": "Cursor-paginated list of offramp transactions.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfframpObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "OnrampCreateSource": {
        "type": "object",
        "description": "Source of the fiat funds.",
        "required": [
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "number",
            "description": "Source amount in the source currency. Provide either `source.amount` or\n`destination.amount`, never both. When `destination.currency` is `USDT`,\nthe source amount must be at least 10.\n",
            "example": 100
          },
          "currency": {
            "type": "string",
            "description": "Source fiat currency.",
            "enum": [
              "USD"
            ],
            "example": "USD"
          },
          "transferType": {
            "type": "string",
            "description": "Fiat rail used to fund the onramp. Provide when funding from a user's own\naccount; mutually exclusive with `externalAccountId`.\n",
            "enum": [
              "ACH",
              "WIRE",
              "RTP"
            ],
            "example": "ACH"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user funding the onramp (prefixed with `usr_`). Mutually\nexclusive with `externalAccountId`.\n",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "externalAccountId": {
            "type": "string",
            "description": "Public ID of a saved external account to fund from (prefixed with\n`extacct_`). Mutually exclusive with `userId` and `transferType`.\n",
            "example": "extacct_9aB0xY4mNpXwZ7bV1aLdt"
          }
        }
      },
      "OnrampCreateDestination": {
        "type": "object",
        "description": "Destination for the delivered crypto.",
        "required": [
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "number",
            "description": "Destination amount in the destination currency. Provide either\n`source.amount` or `destination.amount`, never both.\n",
            "example": 100
          },
          "currency": {
            "type": "string",
            "description": "Destination crypto currency.",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0"
            ],
            "example": "USDC"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of a HIFI-hosted wallet to receive the crypto (prefixed with\n`wlt_`). Mutually exclusive with `externalWalletId`.\n",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "externalWalletId": {
            "type": "string",
            "description": "Public ID of a saved external wallet to receive the crypto (prefixed with\n`extw_`). Mutually exclusive with `walletId`.\n",
            "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
          }
        }
      },
      "OnrampCreateBody": {
        "type": "object",
        "description": "Create an onramp. Provide exactly one of `source.userId` / `source.externalAccountId`,\nexactly one of `source.transferType` / `source.externalAccountId`, exactly one of\n`destination.walletId` / `destination.externalWalletId`, and exactly one of\n`source.amount` / `destination.amount`.\n",
        "required": [
          "requestId",
          "source",
          "destination"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key. A second create with the same value returns a conflict.",
            "example": "b3d1f2a4-5c6e-7890-abcd-ef1234567890"
          },
          "source": {
            "$ref": "#/components/schemas/OnrampCreateSource"
          },
          "destination": {
            "$ref": "#/components/schemas/OnrampCreateDestination"
          },
          "sameDayAch": {
            "type": "boolean",
            "description": "Whether to use same-day ACH settlement.",
            "example": false
          },
          "purposeOfPayment": {
            "type": "string",
            "description": "Purpose of the payment.",
            "example": "Investment"
          },
          "description": {
            "type": "string",
            "description": "Free-form description for the onramp.",
            "example": "Monthly top-up"
          }
        }
      },
      "OnrampSimulateDepositSource": {
        "type": "object",
        "description": "Simulated originating bank account for the sandbox deposit.",
        "required": [
          "routingNumber",
          "accountNumber",
          "name",
          "bankName"
        ],
        "properties": {
          "routingNumber": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10,
            "example": "021000021"
          },
          "accountNumber": {
            "type": "string",
            "minLength": 1,
            "maxLength": 17,
            "example": "123456789"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 35,
            "description": "Name of the account holder.",
            "example": "John Doe"
          },
          "bankName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 35,
            "example": "Chase Bank"
          }
        }
      },
      "OnrampSimulateDepositBody": {
        "type": "object",
        "description": "Simulate an inbound fiat deposit against an onramp in the sandbox environment.",
        "required": [
          "amount",
          "transferType",
          "source"
        ],
        "properties": {
          "amount": {
            "type": "number",
            "minimum": 0.01,
            "maximum": 100000000,
            "example": 100
          },
          "transferType": {
            "type": "string",
            "enum": [
              "ACH",
              "WIRE"
            ],
            "example": "ACH"
          },
          "reference": {
            "type": "string",
            "maxLength": 35,
            "description": "Optional reference code for the simulated deposit.",
            "example": "REF-12345"
          },
          "source": {
            "$ref": "#/components/schemas/OnrampSimulateDepositSource"
          }
        }
      },
      "OnrampDepositInstructions": {
        "type": "object",
        "nullable": true,
        "description": "Bank details for funding the onramp. Present only while the onramp is\nawaiting funds and no virtual or source account is attached.\n",
        "properties": {
          "bankName": {
            "type": "string",
            "example": "Cross River Bank"
          },
          "bankAddress": {
            "type": "string",
            "example": "2115 Linwood Ave, Fort Lee, NJ 07024"
          },
          "beneficiary": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "example": "HIFI Bridge Inc"
              },
              "address": {
                "type": "string",
                "example": "123 Main Street, New York, NY, 10001, USA"
              }
            }
          },
          "ach": {
            "type": "object",
            "properties": {
              "routingNumber": {
                "type": "string",
                "example": "021000021"
              },
              "accountNumber": {
                "type": "string",
                "example": "123456789"
              }
            }
          },
          "wire": {
            "type": "object",
            "properties": {
              "routingNumber": {
                "type": "string",
                "example": "021000021"
              },
              "accountNumber": {
                "type": "string",
                "example": "123456789"
              }
            }
          },
          "rtp": {
            "type": "object",
            "properties": {
              "routingNumber": {
                "type": "string",
                "example": "021000021"
              },
              "accountNumber": {
                "type": "string",
                "example": "123456789"
              }
            }
          },
          "reference": {
            "type": "string",
            "nullable": true,
            "example": "HIFI-9A2B"
          },
          "depositBy": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-07-02T10:30:00.000Z"
          },
          "instruction": {
            "type": "string",
            "example": "Please deposit USD to the bank account provided. For USDT onramp, a minimum of $10 is required, or the funds will be returned."
          }
        }
      },
      "OnrampDepositTracking": {
        "type": "object",
        "nullable": true,
        "description": "Details of the inbound fiat payment once received.",
        "properties": {
          "bankName": {
            "type": "string",
            "example": "Chase Bank"
          },
          "senderName": {
            "type": "string",
            "example": "John Doe"
          },
          "routingNumber": {
            "type": "string",
            "example": "021000021"
          },
          "accountNumber": {
            "type": "string",
            "example": "123456789"
          },
          "accountType": {
            "type": "string",
            "example": "CHECKING"
          },
          "fedBatchId": {
            "type": "string",
            "example": "20260701001"
          },
          "imad": {
            "type": "string",
            "example": "20260701MMQFMPH5000001"
          },
          "omad": {
            "type": "string",
            "example": "20260701QMGFT025000123"
          },
          "traceNumber": {
            "type": "string",
            "example": "021000020123456"
          },
          "bankAddress": {
            "type": "string",
            "example": "270 Park Avenue, New York, NY, USA"
          },
          "description": {
            "type": "string",
            "example": "Onramp deposit"
          },
          "references": {
            "type": "object",
            "nullable": true,
            "properties": {
              "senderReference": {
                "type": "string",
                "example": "REF-12345"
              },
              "beneficiaryReference": {
                "type": "string",
                "example": "HIFI-9A2B"
              },
              "remittance": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "paymentRail": {
            "type": "string",
            "example": "ach"
          }
        }
      },
      "OnrampQuote": {
        "type": "object",
        "description": "Conversion quote for the onramp.",
        "properties": {
          "sendGross": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "string",
                "example": "100.00"
              },
              "currency": {
                "type": "string",
                "example": "USD"
              }
            }
          },
          "sendNet": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "string",
                "example": "100.00"
              },
              "currency": {
                "type": "string",
                "example": "USD"
              }
            }
          },
          "railFee": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "string",
                "example": "0.00"
              },
              "currency": {
                "type": "string",
                "example": "USDC"
              }
            }
          },
          "receiveGross": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "string",
                "example": "100.00"
              },
              "currency": {
                "type": "string",
                "example": "USDC"
              }
            }
          },
          "receiveNet": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "string",
                "example": "100.00"
              },
              "currency": {
                "type": "string",
                "example": "USDC"
              }
            }
          },
          "rate": {
            "type": "string",
            "example": "1.00"
          },
          "conversionFee": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "string",
                "example": "0"
              },
              "currency": {
                "type": "string",
                "example": "USDC"
              },
              "description": {
                "type": "string",
                "example": "No conversion fee applicable"
              },
              "timing": {
                "type": "string",
                "example": "N/A"
              }
            }
          },
          "expiresAt": {
            "type": "string",
            "description": "ISO timestamp when the quote expires, or `N/A` for static quotes.",
            "example": "N/A"
          }
        }
      },
      "OnrampMicroDeposits": {
        "type": "object",
        "description": "Micro-deposits received against the onramp while awaiting funds.",
        "properties": {
          "count": {
            "type": "integer",
            "example": 0
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "example": "2026-07-01T10:30:00.000Z"
                },
                "currency": {
                  "type": "string",
                  "example": "USD"
                },
                "amount": {
                  "type": "number",
                  "example": 0.01
                },
                "sourceBankInfo": {
                  "$ref": "#/components/schemas/OnrampDepositTracking"
                }
              }
            }
          }
        }
      },
      "OnrampObject": {
        "type": "object",
        "description": "An onramp transaction.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the onramp (prefixed with `onramp_`).",
            "example": "onramp_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key from the create request.",
            "example": "b3d1f2a4-5c6e-7890-abcd-ef1234567890"
          },
          "status": {
            "$ref": "#/components/schemas/OnrampStatus"
          },
          "failedReason": {
            "type": "string",
            "nullable": true,
            "description": "Machine-readable reason when the onramp failed.",
            "example": null
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "User-facing error summary when the onramp failed.",
            "example": null
          },
          "errorDetails": {
            "type": "string",
            "nullable": true,
            "description": "User-facing error detail when the onramp failed.",
            "example": null
          },
          "source": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "number",
                "nullable": true,
                "example": 100
              },
              "currency": {
                "type": "string",
                "enum": [
                  "USD"
                ],
                "example": "USD"
              },
              "userId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the funding user (prefixed with `usr_`).",
                "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
              },
              "externalAccountId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the funding external account (prefixed with `extacct_`).",
                "example": null
              },
              "virtualAccountId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the funding virtual account (prefixed with `va_`).",
                "example": null
              },
              "depositInstructions": {
                "$ref": "#/components/schemas/OnrampDepositInstructions"
              },
              "depositTracking": {
                "$ref": "#/components/schemas/OnrampDepositTracking"
              }
            }
          },
          "destination": {
            "type": "object",
            "properties": {
              "chain": {
                "type": "string",
                "enum": [
                  "ETHEREUM",
                  "POLYGON",
                  "SOLANA",
                  "BASE",
                  "OPTIMISM",
                  "ARBITRUM",
                  "FLOW_EVM",
                  "CANTON",
                  "TRON",
                  "BSC",
                  "XRPL",
                  "ARC"
                ],
                "example": "POLYGON"
              },
              "amount": {
                "type": "number",
                "nullable": true,
                "example": 100
              },
              "currency": {
                "type": "string",
                "enum": [
                  "USDC",
                  "USDT",
                  "PYUSD0"
                ],
                "example": "USDC"
              },
              "userId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the receiving user (prefixed with `usr_`).",
                "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
              },
              "walletId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the receiving HIFI wallet (prefixed with `wlt_`).",
                "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
              },
              "externalWalletId": {
                "type": "string",
                "nullable": true,
                "description": "Public ID of the receiving external wallet (prefixed with `extw_`).",
                "example": null
              },
              "walletAddress": {
                "type": "string",
                "nullable": true,
                "example": "0x1234567890abcdef1234567890abcdef12345678"
              }
            }
          },
          "receipt": {
            "type": "object",
            "properties": {
              "transactionHash": {
                "type": "string",
                "nullable": true,
                "description": "On-chain transaction hash of the delivered crypto.",
                "example": null
              }
            }
          },
          "settlement": {
            "nullable": true,
            "description": "Settlement breakdown once funds settle."
          },
          "quote": {
            "$ref": "#/components/schemas/OnrampQuote"
          },
          "microDeposits": {
            "$ref": "#/components/schemas/OnrampMicroDeposits"
          },
          "sameDayAch": {
            "type": "boolean",
            "example": false
          },
          "description": {
            "type": "string",
            "nullable": true,
            "example": "Monthly top-up"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "OnrampStatus": {
        "type": "string",
        "description": "Lifecycle status of the onramp transaction.",
        "enum": [
          "NOT_INITIATED",
          "CREATED",
          "OPEN_QUOTE",
          "IN_REVIEW",
          "FIAT_INITIATED",
          "AWAITING_FUNDS",
          "FIAT_PENDING",
          "FIAT_PROCESSED",
          "CRYPTO_INITIATED",
          "CRYPTO_PENDING",
          "COMPLETED",
          "FIAT_FAILED",
          "FIAT_RETURNED",
          "CRYPTO_FAILED",
          "QUOTE_FAILED",
          "EXPIRED",
          "UNKNOWN",
          "CANCELLED"
        ],
        "example": "AWAITING_FUNDS"
      },
      "OnrampRateObject": {
        "type": "object",
        "description": "Conversion rate between a source fiat currency and a destination crypto currency.",
        "properties": {
          "sourceCurrency": {
            "type": "string",
            "enum": [
              "USD"
            ],
            "example": "USD"
          },
          "destinationCurrency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0"
            ],
            "example": "USDC"
          },
          "rate": {
            "type": "number",
            "description": "Conversion rate from source to destination currency.",
            "example": 1
          }
        }
      },
      "OnrampSimulateDepositResponseObject": {
        "type": "object",
        "description": "Result of a simulated sandbox deposit.",
        "properties": {
          "message": {
            "type": "string",
            "example": "Simulated deposit submitted successfully."
          }
        }
      },
      "OnrampListObject": {
        "type": "object",
        "description": "Cursor-paginated list of onramps.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OnrampObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "OrchestrationAddressModeEnum": {
        "type": "string",
        "enum": [
          "PER_DEPOSIT",
          "SCHEDULED",
          "THRESHOLD"
        ],
        "description": "Determines when deposits are converted into an offramp.\n  * `PER_DEPOSIT` — each deposit is batched into its own offramp immediately, UNLESS the cumulative `PENDING` amount is below the destination rail's offramp minimum, in which case the deposit is held `PENDING` and all pending deposits are batched together once their cumulative amount reaches the minimum.\n  * `SCHEDULED` — deposits accumulate until the next schedule boundary (`HOURLY`/`DAILY`/`WEEKLY`), then the entire pending pool is batched together (only if it meets the offramp minimum; otherwise it rolls into the next tick).\n  * `THRESHOLD` — deposits accumulate until their summed amount reaches `thresholdAmount`, then the entire pending pool is batched.\n"
      },
      "OrchestrationAddressStatusEnum": {
        "type": "string",
        "enum": [
          "PENDING_WALLET",
          "ACTIVE",
          "DEACTIVATED"
        ],
        "description": "Lifecycle status of the orchestration address.\n  * `PENDING_WALLET` — created but the escrow wallet is still being provisioned. The on-chain `address` is null. Typically transient (a few seconds).\n  * `ACTIVE` — wallet provisioned, ready to receive deposits.\n  * `DEACTIVATED` — soft-deleted. The on-chain wallet still exists and can receive funds, but incoming deposits are recorded with `status=IGNORED` and never offramped.\n"
      },
      "OrchestrationScheduleIntervalEnum": {
        "type": "string",
        "enum": [
          "HOURLY",
          "DAILY",
          "WEEKLY"
        ],
        "description": "How often a `SCHEDULED` orchestration address rolls up pending deposits into a batch."
      },
      "OrchestrationDepositStatusEnum": {
        "type": "string",
        "enum": [
          "PENDING",
          "BATCHED",
          "IGNORED",
          "REFUNDED"
        ],
        "description": "Per-deposit status.\n  * `PENDING` — recorded, waiting to be rolled into a batch.\n  * `BATCHED` — included in a batch (`batchId` is set).\n  * `IGNORED` — recorded but never batched. See `ignoredReason` for why.\n  * `REFUNDED` — was `PENDING` when the address was deactivated; the funds were refunded in-kind to the `walletAddress` supplied at deactivation.\n"
      },
      "OrchestrationDepositIgnoredReasonEnum": {
        "type": "string",
        "enum": [
          "ADDRESS_DEACTIVATED",
          "UNSUPPORTED_TOKEN"
        ],
        "description": "Why a deposit was ignored. Funds remain in the escrow wallet — a Slack\nalert fires for manual ops follow-up.\n  * `ADDRESS_DEACTIVATED` — the deposit arrived after the address was deactivated.\n  * `UNSUPPORTED_TOKEN` — the deposited token does not match the address's configured `source.currency` (e.g. USDT sent to a USDC-only address).\n"
      },
      "OrchestrationBatchStatusEnum": {
        "type": "string",
        "enum": [
          "PENDING",
          "PROCESSING",
          "COMPLETED",
          "FAILED"
        ],
        "description": "Batch lifecycle.\n  * `PENDING` — created; the worker has not yet picked it up.\n  * `PROCESSING` — the linked offramp has been created and is in flight.\n  * `COMPLETED` — the linked offramp reached `COMPLETED`.\n  * `FAILED` — terminal failure. See `failureReason`.\n"
      },
      "OrchestrationBatchFailureReasonEnum": {
        "type": "string",
        "enum": [
          "ADDRESS_NOT_ACTIVE",
          "NOT_INITIATED",
          "QUOTE_FAILED",
          "CRYPTO_FAILED",
          "FIAT_FAILED",
          "EXPIRED",
          "REJECTED",
          "CANCELLED"
        ],
        "description": "Populated when `status=FAILED`.\n  * `ADDRESS_NOT_ACTIVE` — the address was deactivated before the worker created\n    the offramp. The only input condition that terminally fails a batch.\n  * All other values are terminal statuses surfaced from the linked offramp\n    transaction (e.g. lost product access → `NOT_INITIATED`, a rejected AML\n    review → a terminal status).\n\nInternal inconsistencies (missing address, payout account lost its rail, a\nprocessor-validation bug) do **not** appear here — the worker pauses the batch\n(leaves it `PENDING`) and alerts ops instead of marking it `FAILED`.\n"
      },
      "OrchestrationManualTriggerReasonEnum": {
        "type": "string",
        "enum": [
          "no_pending_deposits",
          "address_no_longer_active",
          "below_offramp_minimum"
        ],
        "description": "Reason the manual trigger was a no-op (returned when `triggered=false`).\n  * `no_pending_deposits` — the address has no `PENDING` deposits to batch.\n  * `address_no_longer_active` — the address was deactivated between the read and the row-lock acquisition.\n  * `below_offramp_minimum` — the summed `PENDING` deposits are below the destination rail's offramp minimum, so they are held to accumulate rather than batched.\n"
      },
      "OrchestrationAddressSource": {
        "type": "object",
        "additionalProperties": false,
        "description": "The on-chain source the orchestration address accepts deposits in. A stablecoin\ncontract must exist for the `(currency, chain)` pair — USDC is supported on\nBase/Polygon/Ethereum/Solana, while USDT is supported on Polygon/Ethereum/Solana/TRON (not Base).\nUnsupported pairs (e.g. USDC on TRON, USDT on Base) are rejected at create time with `400`.\n",
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "usdc",
              "usdt"
            ],
            "description": "Stablecoin the address accepts. v1 supports USDC and USDT, subject to chain support (see above)."
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "ETHEREUM",
              "SOLANA",
              "BASE",
              "FLOW_EVM",
              "BSC",
              "TRON",
              "ARC"
            ],
            "description": "Blockchain network the address lives on, as an abbreviated chain name.\nThe same abbreviated form is used in both requests and responses (e.g.\n`BASE`).\n"
          }
        },
        "required": [
          "currency",
          "chain"
        ]
      },
      "OrchestrationAddressDestination": {
        "type": "object",
        "additionalProperties": false,
        "description": "The destination payout configuration. V3 ships USD only through an existing external account.",
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "usd"
            ],
            "description": "Destination fiat currency. v1 ships USD only."
          },
          "externalAccountId": {
            "type": "string",
            "description": "Public ID of the external account that receives the converted fiat.\nIt must belong to the same user, be active, use USD, and support an\norchestration-address payout rail.\n"
          }
        },
        "required": [
          "currency",
          "externalAccountId"
        ]
      },
      "OrchestrationAddressSchedule": {
        "type": "object",
        "additionalProperties": false,
        "description": "Schedule config for a `SCHEDULED` orchestration address.",
        "properties": {
          "interval": {
            "$ref": "#/components/schemas/OrchestrationScheduleIntervalEnum"
          },
          "nextRunAt": {
            "type": "string",
            "format": "date-time",
            "description": "Optional ISO 8601 timestamp for the first scheduled batch. Defaults to\n`now + interval` if omitted. Subsequent ticks advance by exactly one\ninterval; missed windows (worker downtime) collapse into a single\ncatch-up batch rather than firing N back-to-back.\n"
          }
        },
        "required": [
          "interval"
        ]
      },
      "CreateOrchestrationAddress": {
        "type": "object",
        "additionalProperties": false,
        "title": "Create Orchestration Address",
        "description": "Provisions a new persistent on-chain address that automatically offramps any\nstablecoin it receives.\n\n**Mode rules (cross-field):**\n  * `mode=PER_DEPOSIT` — must NOT include `schedule` or `thresholdAmount`.\n  * `mode=SCHEDULED` — MUST include `schedule.interval`; must NOT include `thresholdAmount`. `schedule.nextRunAt` is optional.\n  * `mode=THRESHOLD` — MUST include `thresholdAmount`; must NOT include `schedule`.\n\n**Source rules:** `source.currency` must be supported on `source.chain` (e.g. USDT on TRON, USDC on Base/Polygon/Ethereum/Solana). Unsupported pairs like USDC on TRON are rejected with `400`.\n\n**Offramp minimums:** each destination rail has a minimum offramp amount (e.g. ≥ 5 for SWIFT, ≥ 1 for wire/ACH/RTP; USDT carries a ≥ 10 floor). `mode=THRESHOLD` requires `thresholdAmount` to meet that minimum, and a batch is only ever created once the pending deposits reach it — deposits below the minimum are held `PENDING` to accumulate.\n\n**Idempotency:** `requestId` is the client-supplied idempotency key. Repeating the same `requestId` with the same payload returns the existing record (200). Repeating with a *different* payload returns `409 RESOURCE_CONFLICT` indicating which field differs (e.g. `requestId already used with a different source.currency`).\n\n**Wallet provisioning:** the response is returned synchronously after the escrow wallet is provisioned, so `status=ACTIVE` and `address` is non-null in the typical case. If the provider call is in flight, `status=PENDING_WALLET` and `address=null` — retry the same call (same `requestId`) to drive provisioning forward.\n",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of the user that owns the orchestration address."
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-supplied idempotency key (UUID v4 recommended). Unique per `(profileId, requestId)`."
          },
          "source": {
            "$ref": "#/components/schemas/OrchestrationAddressSource"
          },
          "destination": {
            "$ref": "#/components/schemas/OrchestrationAddressDestination"
          },
          "offrampMessage": {
            "type": "string",
            "nullable": true,
            "description": "Optional payment message, preserved exactly. Wire allows at most four lines of\n35 characters; ACH allows 10 characters; SWIFT allows 12. Only printable ASCII\nand newlines are accepted; backslashes and other control characters are rejected.\nNonempty messages are unsupported for RTP and other rails. Missing, null, or\nempty means no message on create; on update omission preserves the setting and\nnull or empty clears it. A destination change revalidates the saved or supplied\nmessage. Returns null when unset. Queued batches read current settings when\ninitializing an offramp; initialized offramps retain their saved message on retry.\n",
            "example": "Invoice 42"
          },
          "mode": {
            "$ref": "#/components/schemas/OrchestrationAddressModeEnum"
          },
          "schedule": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OrchestrationAddressSchedule"
              }
            ],
            "description": "Required when `mode=SCHEDULED`. Forbidden otherwise.\n",
            "nullable": true
          },
          "thresholdAmount": {
            "type": "string",
            "description": "Required when `mode=THRESHOLD`. Forbidden otherwise. Decimal amount in\nthe address's source `currency` (e.g. `\"100.00\"`). Must be at least the\ndestination rail's offramp minimum (e.g. ≥ 5 for SWIFT, ≥ 1 for\nwire/ACH/RTP; USDT ≥ 10), else `400`. Aggregate pending deposits are\nsummed in integer token units (BigInt) and compared to this value, so\nfloating-point drift never blocks the threshold.\n",
            "example": "100.00",
            "nullable": true
          }
        },
        "required": [
          "userId",
          "requestId",
          "source",
          "destination",
          "mode"
        ]
      },
      "DeactivateOrchestrationAddress": {
        "type": "object",
        "additionalProperties": false,
        "title": "Deactivate Orchestration Address",
        "description": "Body for deactivating an orchestration address. Any deposits still `PENDING`\n(not yet rolled into a batch) are refunded in-kind to `walletAddress`.\n",
        "required": [
          "walletAddress"
        ],
        "properties": {
          "walletAddress": {
            "type": "string",
            "description": "Destination address for the in-kind refund of the address's `PENDING`\ndeposits. Must be a valid address for the orchestration address's `chain`\n(else `400 FIELD_VALIDATION_ERROR`). Required even when there are no\npending deposits to refund.\n"
          }
        }
      },
      "UpdateOrchestrationAddress": {
        "type": "object",
        "additionalProperties": false,
        "title": "Update Orchestration Address",
        "description": "Partial update. Any combination of `mode`, `schedule`, `thresholdAmount`, `offrampMessage`,\nand `destination.externalAccountId` may be set. Same mode cross-rules as create\napply to the *resulting* configuration (e.g. switching to `THRESHOLD`\nrequires `thresholdAmount`).\n\n**Side effects:**\n  * Switching mode clears schedule-only fields when they no longer apply.\n  * Changing `schedule.interval` without an explicit `nextRunAt` resets the next tick to `now + newInterval`.\n  * Changing `destination.externalAccountId` re-validates the new account (must belong to the user, be active, use USD, and support orchestration).\n  * Queued batches use the current settings when the worker reads the OA to begin offramp initialization. Later edits do not alter that attempt or already-initialized offramps and their saved messages.\n\nA `DEACTIVATED` address cannot be updated — returns `400 RESOURCE_CONFLICT`.\nConcurrent changes to the validated message, destination, mode, or status return\n`409 RESOURCE_CONFLICT`; reload the current settings and retry the update.\n",
        "properties": {
          "offrampMessage": {
            "type": "string",
            "nullable": true,
            "description": "Optional payment message, preserved exactly. Wire allows at most four lines of\n35 characters; ACH allows 10 characters; SWIFT allows 12. Only printable ASCII\nand newlines are accepted; backslashes and other control characters are rejected.\nNonempty messages are unsupported for RTP and other rails. Missing, null, or\nempty means no message on create; on update omission preserves the setting and\nnull or empty clears it. A destination change revalidates the saved or supplied\nmessage. Returns null when unset. Queued batches read current settings when\ninitializing an offramp; initialized offramps retain their saved message on retry.\n",
            "example": "Invoice 42"
          },
          "mode": {
            "$ref": "#/components/schemas/OrchestrationAddressModeEnum"
          },
          "schedule": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OrchestrationAddressSchedule"
              }
            ],
            "nullable": true
          },
          "thresholdAmount": {
            "type": "string",
            "description": "New aggregate threshold. Required if the resulting mode is `THRESHOLD`,\nand must be at least the destination rail's offramp minimum (else `400`).\n",
            "nullable": true
          },
          "destination": {
            "type": "object",
            "additionalProperties": false,
            "description": "Partial destination update — only `externalAccountId` may be changed.",
            "properties": {
              "externalAccountId": {
                "type": "string",
                "description": "New external-account public ID. Same validation as on create."
              }
            },
            "required": [
              "externalAccountId"
            ]
          }
        }
      },
      "OrchestrationAddressObject": {
        "type": "object",
        "description": "An orchestration address record.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public orchestration-address ID prefixed with `orchaddr_`."
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user that owns this orchestration address."
          },
          "address": {
            "type": "string",
            "nullable": true,
            "description": "The on-chain wallet address that accepts deposits. `null` while\n`status=PENDING_WALLET` (provisioning in flight); populated once the\nwallet exists.\n",
            "example": "0xAbC0123456789AbCdEf0123456789AbCdEf01234"
          },
          "source": {
            "type": "object",
            "description": "Source token + chain the address accepts.",
            "properties": {
              "currency": {
                "type": "string",
                "enum": [
                  "usdc",
                  "usdt"
                ]
              },
              "chain": {
                "type": "string",
                "description": "Abbreviated chain name (e.g. `BASE`, `ETHEREUM`, `SOLANA`) — the same\nform accepted on create and used across the v2 API.\n",
                "example": "BASE"
              }
            }
          },
          "destination": {
            "type": "object",
            "description": "Destination payout configuration.",
            "properties": {
              "currency": {
                "type": "string",
                "enum": [
                  "usd"
                ]
              },
              "externalAccountId": {
                "type": "string",
                "description": "Public external-account ID prefixed with `extacct_`."
              }
            }
          },
          "offrampMessage": {
            "type": "string",
            "nullable": true,
            "description": "Optional payment message, preserved exactly. Wire allows at most four lines of\n35 characters; ACH allows 10 characters; SWIFT allows 12. Only printable ASCII\nand newlines are accepted; backslashes and other control characters are rejected.\nNonempty messages are unsupported for RTP and other rails. Missing, null, or\nempty means no message on create; on update omission preserves the setting and\nnull or empty clears it. A destination change revalidates the saved or supplied\nmessage. Returns null when unset. Queued batches read current settings when\ninitializing an offramp; initialized offramps retain their saved message on retry.\n",
            "example": "Invoice 42"
          },
          "mode": {
            "$ref": "#/components/schemas/OrchestrationAddressModeEnum"
          },
          "schedule": {
            "description": "Populated only when `mode=SCHEDULED`; `null` otherwise.\n",
            "nullable": true,
            "type": "object",
            "properties": {
              "interval": {
                "$ref": "#/components/schemas/OrchestrationScheduleIntervalEnum"
              },
              "nextRunAt": {
                "type": "string",
                "format": "date-time",
                "description": "ISO 8601 timestamp of the next scheduled batch."
              }
            }
          },
          "thresholdAmount": {
            "type": "string",
            "nullable": true,
            "description": "Populated only when `mode=THRESHOLD`; `null` otherwise. Decimal amount\nin the source `currency`.\n",
            "example": "100.00"
          },
          "status": {
            "$ref": "#/components/schemas/OrchestrationAddressStatusEnum"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "deactivatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "ISO 8601 timestamp when the address was deactivated. `null` if still active."
          },
          "balance": {
            "type": "object",
            "nullable": true,
            "description": "The escrow wallet's live on-chain balance of the source token. Present\nONLY on the single-address GET (`GET /orchestration-addresses/{orchestrationAddressId}`); the\nlist endpoint omits it to avoid a provider call per row. `null` if the\nwallet isn't provisioned yet or the balance lookup failed — the GET still\nreturns `200`.\n",
            "properties": {
              "currency": {
                "type": "string",
                "enum": [
                  "usdc",
                  "usdt"
                ]
              },
              "amount": {
                "type": "string",
                "description": "Decimal balance in the source `currency` (e.g. `\"100.500000\"`)."
              }
            },
            "example": {
              "currency": "usdc",
              "amount": "100.500000"
            }
          }
        },
        "required": [
          "id"
        ]
      },
      "OrchestrationAddressAllRecordsObject": {
        "type": "object",
        "description": "Paginated list of orchestration addresses.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrchestrationAddressObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "data",
          "pagination"
        ]
      },
      "OrchestrationDepositObject": {
        "type": "object",
        "description": "A single on-chain deposit detected for an orchestration address.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public orchestration-deposit ID prefixed with `orchdep_`."
          },
          "orchestrationAddressId": {
            "type": "string",
            "description": "Public orchestration-address ID prefixed with `orchaddr_`."
          },
          "batchId": {
            "type": "string",
            "nullable": true,
            "description": "Public `orchbat_` ID of the batch that included this deposit. `null` while `status=PENDING` or `status=IGNORED`."
          },
          "amount": {
            "type": "string",
            "description": "Decimal amount of the source token deposited (e.g. `\"100.500000\"`).\nPrecision matches the token's on-chain decimals.\n"
          },
          "currency": {
            "type": "string",
            "enum": [
              "usdc",
              "usdt"
            ]
          },
          "chain": {
            "type": "string",
            "description": "Abbreviated chain name (e.g. `BASE`)."
          },
          "sourceAddress": {
            "type": "string",
            "description": "On-chain address that sent the deposit. Informational only."
          },
          "transactionHash": {
            "type": "string",
            "description": "On-chain transaction hash."
          },
          "status": {
            "$ref": "#/components/schemas/OrchestrationDepositStatusEnum"
          },
          "ignoredReason": {
            "$ref": "#/components/schemas/OrchestrationDepositIgnoredReasonEnum",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id"
        ]
      },
      "OrchestrationDepositAllRecordsObject": {
        "type": "object",
        "description": "Paginated list of deposits for an orchestration address.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrchestrationDepositObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "data",
          "pagination"
        ]
      },
      "OrchestrationBatchObject": {
        "type": "object",
        "description": "A batch of one or more deposits rolled up into a single offramp transaction.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public orchestration-batch ID prefixed with `orchbat_`."
          },
          "orchestrationAddressId": {
            "type": "string",
            "description": "Public orchestration-address ID prefixed with `orchaddr_`."
          },
          "totalAmount": {
            "type": "string",
            "description": "Sum of the included deposits' amounts, in the source `currency`.",
            "example": "150.000000"
          },
          "currency": {
            "type": "string",
            "enum": [
              "usdc",
              "usdt"
            ]
          },
          "status": {
            "$ref": "#/components/schemas/OrchestrationBatchStatusEnum"
          },
          "failureReason": {
            "$ref": "#/components/schemas/OrchestrationBatchFailureReasonEnum",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "depositIds": {
            "type": "array",
            "description": "IDs of all deposits included in this batch.",
            "items": {
              "type": "string",
              "description": "Public orchestration-deposit ID prefixed with `orchdep_`."
            }
          },
          "offrampTransactionId": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "ID of the offramp transaction produced from this batch. `null` while\n`status=PENDING` (the worker has not yet created the offramp). Call\n`GET /v2/offramps/{transferId}` for full offramp details.\n"
          }
        },
        "required": [
          "id"
        ]
      },
      "OrchestrationBatchAllRecordsObject": {
        "type": "object",
        "description": "Paginated list of batches for an orchestration address.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrchestrationBatchObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "data",
          "pagination"
        ]
      },
      "OrchestrationManualTriggerTriggered": {
        "type": "object",
        "description": "Response shape when the manual trigger produced a new batch.",
        "properties": {
          "triggered": {
            "type": "boolean",
            "enum": [
              true
            ]
          },
          "batch": {
            "$ref": "#/components/schemas/OrchestrationBatchObject"
          }
        },
        "required": [
          "triggered",
          "batch"
        ]
      },
      "OrchestrationManualTriggerNoOp": {
        "type": "object",
        "description": "Response shape when the manual trigger was an idempotent no-op (no PENDING\ndeposits, or the address was deactivated under the row lock).\n",
        "properties": {
          "triggered": {
            "type": "boolean",
            "enum": [
              false
            ]
          },
          "reason": {
            "$ref": "#/components/schemas/OrchestrationManualTriggerReasonEnum"
          },
          "batch": {
            "type": "object",
            "nullable": true,
            "description": "Always `null` in the no-op variant.",
            "example": null
          }
        },
        "required": [
          "triggered",
          "reason",
          "batch"
        ]
      },
      "OrchestrationManualTriggerObject": {
        "description": "Result of a manual `POST /orchestrate` call. Either a freshly-created batch\n(`triggered: true`) or an idempotent no-op (`triggered: false`).\n",
        "oneOf": [
          {
            "$ref": "#/components/schemas/OrchestrationManualTriggerTriggered"
          },
          {
            "$ref": "#/components/schemas/OrchestrationManualTriggerNoOp"
          }
        ]
      },
      "RfiKind": {
        "type": "string",
        "description": "What the request is attached to. `onboarding` asks about the user's own verification; `transaction` asks about a single transfer, which stays held until the request is resolved.",
        "enum": [
          "onboarding",
          "transaction"
        ],
        "example": "onboarding"
      },
      "RfiStatus": {
        "type": "string",
        "description": "Where the request is in its lifecycle. `issued` is waiting on a reply, `submitted` has been answered and is under review, `resolved` has been decided, and `expired` passed its deadline unanswered.",
        "enum": [
          "issued",
          "submitted",
          "resolved",
          "expired"
        ],
        "example": "issued"
      },
      "RfiRequestItemObject": {
        "type": "object",
        "description": "A single thing being asked for. One item may be answered by several entries in a submission, which is how three bank statements answer one request.",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the request item. Quote it as `requestItemId` when submitting a reply.",
            "example": "3f7c1e90-2a4b-4d61-9c0e-5b8f2d6a1e34"
          },
          "kind": {
            "type": "string",
            "description": "`document` expects a file, or written text explaining why the file cannot be provided. `question` expects written text only.",
            "enum": [
              "document",
              "question"
            ],
            "example": "document"
          },
          "label": {
            "type": "string",
            "description": "What is being asked for, in the reviewer's own words.",
            "example": "Proof of address issued in the last 3 months"
          },
          "docType": {
            "type": "string",
            "nullable": true,
            "description": "Hint for the kind of document expected. Null when the request does not correspond to a standard document type. Not a closed set, so treat an unrecognised value as an untyped document request. Values currently in use are `proof_of_address`, `source_of_funds`, `bank_statement`, `government_id`, `selfie`, `incorporation_docs`, `ownership_structure`, `invoice` and `contract`.",
            "example": "proof_of_address"
          },
          "detail": {
            "type": "string",
            "nullable": true,
            "description": "Additional guidance for this item.",
            "example": "A utility bill or bank statement dated within the last three months."
          },
          "required": {
            "type": "boolean",
            "description": "Whether this item must be answered for the submission to be accepted.",
            "example": true
          }
        }
      },
      "RfiRoundObject": {
        "type": "object",
        "description": "The current attempt at the request. Each time compliance asks again a new round is opened with its own items and deadline, and earlier rounds are retained but not returned here.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the round (prefixed with `rfir_`).",
            "example": "rfir_2mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "round": {
            "type": "integer",
            "description": "Attempt number, starting at 1.",
            "example": 1
          },
          "issuedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When this round was issued and emailed to your compliance contact.",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Deadline for replying. A submission after this time is rejected.",
            "example": "2026-07-31T10:30:00.000Z"
          },
          "submittedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When this round was answered. Null while it is still awaiting a reply.",
            "example": null
          },
          "items": {
            "type": "array",
            "description": "What this round asks for, in the order it should be presented.",
            "items": {
              "$ref": "#/components/schemas/RfiRequestItemObject"
            }
          },
          "link": {
            "type": "string",
            "nullable": true,
            "description": "Hosted page where you can answer the request without calling this API. The same link is emailed to your compliance contact when the request is issued. Null once the link can no longer be used, which is after a submission, after compliance asks again, or once the request is closed.",
            "example": "https://dashboard.hifi.com/production/rfi-link/rfir_2mNpXwZ7bV1aLcs3Kf9dQ#sessionToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
          }
        }
      },
      "RfiObject": {
        "type": "object",
        "description": "A request for information raised by compliance against a user or one of their transfers.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the request (prefixed with `rfi_`).",
            "example": "rfi_5Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "kind": {
            "$ref": "#/components/schemas/RfiKind"
          },
          "status": {
            "$ref": "#/components/schemas/RfiStatus"
          },
          "subjectType": {
            "type": "string",
            "description": "Whether the user the request concerns is an individual or a business.",
            "enum": [
              "individual",
              "business"
            ],
            "example": "individual"
          },
          "userId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the user the request concerns (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "transferId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of the held transfer, on a `transaction` request. Null on an `onboarding` request.",
            "example": "offramp_9dQ2mNpXwZ7bV1aLcs3Kf"
          },
          "flowType": {
            "type": "string",
            "nullable": true,
            "description": "Which transfer `transferId` refers to. Null on an `onboarding` request.",
            "enum": [
              "onramp",
              "offramp"
            ],
            "example": null
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the request was raised.",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "currentRound": {
            "type": "integer",
            "nullable": true,
            "description": "Attempt number of the round in `round`.",
            "example": 1
          },
          "round": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RfiRoundObject"
              }
            ],
            "nullable": true,
            "description": "The current round. Null if the request has no round open."
          }
        }
      },
      "RfiPagination": {
        "type": "object",
        "description": "Offset-based pagination, rather than the cursor pagination used by most v3 list endpoints.",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Page size used for this response.",
            "example": 20
          },
          "offset": {
            "type": "integer",
            "description": "Number of records skipped.",
            "example": 0
          },
          "total": {
            "type": "integer",
            "description": "Total number of records matching the filters.",
            "example": 3
          }
        },
        "required": [
          "limit",
          "offset",
          "total"
        ]
      },
      "RfiListObject": {
        "type": "object",
        "description": "Paginated list of requests for information, newest first.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RfiObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/RfiPagination"
          }
        }
      },
      "RfiSubmissionItem": {
        "type": "object",
        "description": "One reply to one request item. Exactly one of `fileId` and `answerText` must be provided.",
        "required": [
          "requestItemId"
        ],
        "properties": {
          "requestItemId": {
            "type": "string",
            "format": "uuid",
            "description": "The `id` of the request item being answered.",
            "example": "3f7c1e90-2a4b-4d61-9c0e-5b8f2d6a1e34"
          },
          "fileId": {
            "type": "string",
            "nullable": true,
            "description": "Public ID of a file previously uploaded through the files API (prefixed with `file_`). Only valid against a `document` request item, and only for a file uploaded under the same client.",
            "example": "file_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "answerText": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000,
            "nullable": true,
            "description": "Written reply. Required for a `question` request item, and accepted for a `document` request item as an explanation in place of the file.",
            "example": "The property is leased by the user's employer; the attached letter confirms the address."
          }
        }
      },
      "RfiSubmissionBody": {
        "type": "object",
        "description": "The replies making up one submission.",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 200,
            "description": "One entry per reply.",
            "items": {
              "$ref": "#/components/schemas/RfiSubmissionItem"
            }
          }
        }
      },
      "RfiSubmissionResult": {
        "type": "object",
        "description": "Confirmation that a submission was recorded.",
        "properties": {
          "rfiId": {
            "type": "string",
            "description": "Public ID of the request that was answered (prefixed with `rfi_`).",
            "example": "rfi_5Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "roundId": {
            "type": "string",
            "description": "Public ID of the round that was answered (prefixed with `rfir_`).",
            "example": "rfir_2mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "round": {
            "type": "integer",
            "description": "Attempt number that was answered.",
            "example": 1
          },
          "status": {
            "type": "string",
            "description": "Status of the request after the submission.",
            "enum": [
              "submitted"
            ],
            "example": "submitted"
          },
          "submittedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the submission was recorded.",
            "example": "2026-07-03T09:12:44.000Z"
          },
          "responseCount": {
            "type": "integer",
            "description": "Number of replies recorded, which may exceed the number of request items answered.",
            "example": 5
          }
        }
      },
      "SettlementRuleCreate": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "rules": {
            "minItems": 1,
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "PERCENTAGE",
                    "FIXED"
                  ]
                },
                "tiers": {
                  "minItems": 1,
                  "maxItems": 10,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "upTo": {
                        "type": "number",
                        "nullable": true
                      },
                      "value": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "upTo",
                      "value"
                    ],
                    "additionalProperties": false
                  }
                },
                "value": {
                  "type": "number"
                },
                "calculationModel": {
                  "type": "string",
                  "enum": [
                    "TIERED",
                    "FIXED"
                  ]
                },
                "walletId": {
                  "type": "string",
                  "pattern": "^wlt.*"
                },
                "externalWalletId": {
                  "type": "string",
                  "pattern": "^extw.*"
                },
                "trigger": {
                  "type": "object",
                  "properties": {
                    "paymentRail": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "ACH",
                          "WIRE",
                          "RTP"
                        ]
                      },
                      "minItems": 1
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "calculationModel"
              ],
              "additionalProperties": false
            }
          },
          "chain": {
            "type": "string",
            "enum": [
              "BASE",
              "POLYGON",
              "ETHEREUM",
              "SOLANA",
              "TRON",
              "ARC"
            ]
          },
          "includeHIFIFee": {
            "type": "boolean"
          }
        },
        "required": [
          "requestId",
          "rules",
          "chain",
          "includeHIFIFee"
        ],
        "additionalProperties": false
      },
      "SettlementRuleUpdate": {
        "type": "object",
        "properties": {
          "rules": {
            "minItems": 1,
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "PERCENTAGE",
                    "FIXED"
                  ]
                },
                "tiers": {
                  "minItems": 1,
                  "maxItems": 10,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "upTo": {
                        "type": "number",
                        "nullable": true
                      },
                      "value": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "upTo",
                      "value"
                    ],
                    "additionalProperties": false
                  }
                },
                "value": {
                  "type": "number"
                },
                "calculationModel": {
                  "type": "string",
                  "enum": [
                    "TIERED",
                    "FIXED"
                  ]
                },
                "walletId": {
                  "type": "string",
                  "pattern": "^wlt.*"
                },
                "externalWalletId": {
                  "type": "string",
                  "pattern": "^extw.*"
                },
                "trigger": {
                  "type": "object",
                  "properties": {
                    "paymentRail": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "ACH",
                          "WIRE",
                          "RTP"
                        ]
                      },
                      "minItems": 1
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "calculationModel"
              ],
              "additionalProperties": false
            }
          },
          "chain": {
            "type": "string",
            "enum": [
              "BASE",
              "POLYGON",
              "ETHEREUM",
              "SOLANA",
              "TRON",
              "ARC"
            ]
          },
          "includeHIFIFee": {
            "type": "boolean"
          }
        },
        "required": [
          "rules",
          "chain",
          "includeHIFIFee"
        ],
        "additionalProperties": false
      },
      "SettlementRuleObject": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the settlement rule (prefixed with `sr_`)."
          },
          "rules": {
            "minItems": 1,
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "PERCENTAGE",
                    "FIXED"
                  ]
                },
                "tiers": {
                  "minItems": 1,
                  "maxItems": 10,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "upTo": {
                        "type": "number",
                        "nullable": true
                      },
                      "value": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "upTo",
                      "value"
                    ],
                    "additionalProperties": false
                  }
                },
                "value": {
                  "type": "number"
                },
                "calculationModel": {
                  "type": "string",
                  "enum": [
                    "TIERED",
                    "FIXED"
                  ]
                },
                "walletId": {
                  "type": "string",
                  "pattern": "^wlt.*"
                },
                "externalWalletId": {
                  "type": "string",
                  "pattern": "^extw.*"
                },
                "trigger": {
                  "type": "object",
                  "properties": {
                    "paymentRail": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "ACH",
                          "WIRE",
                          "RTP"
                        ]
                      },
                      "minItems": 1
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "calculationModel"
              ],
              "additionalProperties": false
            }
          },
          "chain": {
            "type": "string",
            "enum": [
              "BASE",
              "POLYGON",
              "ETHEREUM",
              "SOLANA",
              "TRON",
              "ARC"
            ]
          },
          "includeHIFIFee": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "SettlementRuleListObject": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SettlementRuleObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "SettlementRuleApply": {
        "type": "object",
        "properties": {
          "settlementRuleId": {
            "type": "string",
            "description": "Public ID of the settlement rule to apply (prefixed with `sr_`)."
          }
        },
        "required": [
          "settlementRuleId"
        ],
        "additionalProperties": false
      },
      "SwapCreateSource": {
        "type": "object",
        "description": "Source of the swap.",
        "required": [
          "walletId",
          "currency"
        ],
        "properties": {
          "walletId": {
            "type": "string",
            "description": "Public ID of the source wallet (prefixed with `wlt_`).",
            "example": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "currency": {
            "type": "string",
            "description": "Source stablecoin. Sandbox `USDT` swaps support only direct `USDC`/`USDT` pairs on configured chains.",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDG",
              "PYUSD"
            ],
            "example": "USDC"
          },
          "amount": {
            "type": "number",
            "description": "Source amount to swap. Provide exactly one of `source.amount` or\n`destination.amount`. Swaps involving `USDT` require at least 10\n(the same minimum as the v2 API); other pairs require at least 1.\n",
            "minimum": 1,
            "maximum": 999999999,
            "example": 100
          }
        }
      },
      "SwapCreateDestination": {
        "type": "object",
        "description": "Destination of the swap. Provide exactly one of `walletId` or `externalWalletId`.",
        "required": [
          "currency"
        ],
        "properties": {
          "walletId": {
            "type": "string",
            "description": "Public ID of the destination wallet (prefixed with `wlt_`).",
            "example": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "externalWalletId": {
            "type": "string",
            "description": "Public ID of the destination external wallet (prefixed with `extw_`).",
            "example": "extw_9dQ2mNpXwZ7bV1aLcs3Kf"
          },
          "currency": {
            "type": "string",
            "description": "Destination stablecoin. Must differ from the source currency. Sandbox `USDT` swaps support only direct `USDC`/`USDT` pairs on configured chains.",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDG",
              "PYUSD"
            ],
            "example": "USDT"
          },
          "amount": {
            "type": "number",
            "description": "Destination amount to receive. Provide exactly one of `source.amount` or\n`destination.amount`. Swaps involving `USDT` require at least 10\n(the same minimum as the v2 API); other pairs require at least 1.\n",
            "minimum": 1,
            "maximum": 999999999,
            "example": 100
          }
        }
      },
      "SwapCreate": {
        "type": "object",
        "description": "Swap creation payload. Source and destination currencies must differ, exactly one\nof `source.amount` / `destination.amount` must be set, and exactly one of\n`destination.walletId` / `destination.externalWalletId` must be set.\n",
        "required": [
          "requestId",
          "source",
          "destination"
        ],
        "properties": {
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-generated idempotency key. A UUID unique to this swap request.",
            "example": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
          },
          "limitPrice": {
            "type": "string",
            "pattern": "^(?=.*[1-9])\\d+(?:\\.\\d{1,4})?$",
            "description": "Optional destination units per source unit for a direct USDC/USDT swap. Sandbox validates and returns this value but does not delay simulated execution for it.",
            "example": "0.9990"
          },
          "cancelAfterSeconds": {
            "type": "integer",
            "minimum": 60,
            "maximum": 86400,
            "description": "Optional cancellation deadline in seconds for a direct USDC/USDT swap.",
            "example": 3600
          },
          "source": {
            "$ref": "#/components/schemas/SwapCreateSource"
          },
          "destination": {
            "$ref": "#/components/schemas/SwapCreateDestination"
          }
        }
      },
      "SwapAmount": {
        "type": "object",
        "description": "An amount and its currency.",
        "properties": {
          "amount": {
            "type": "string",
            "example": "100"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDG",
              "PYUSD"
            ],
            "example": "USDC"
          }
        }
      },
      "SwapQuote": {
        "type": "object",
        "nullable": true,
        "description": "Commercial quote for the swap. Null until a quote has been generated.",
        "properties": {
          "sendGross": {
            "$ref": "#/components/schemas/SwapAmount"
          },
          "sendNet": {
            "$ref": "#/components/schemas/SwapAmount"
          },
          "receiveGross": {
            "$ref": "#/components/schemas/SwapAmount"
          },
          "receiveNet": {
            "$ref": "#/components/schemas/SwapAmount"
          },
          "rate": {
            "type": "string",
            "description": "Conversion rate from source to destination currency.",
            "example": "1.0"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-07-01T10:35:00.000Z"
          },
          "limitPrice": {
            "type": "string",
            "pattern": "^(?=.*[1-9])\\d+(?:\\.\\d{1,4})?$",
            "description": "Client limit price in destination units per source unit, when supplied.",
            "example": "0.9990"
          }
        }
      },
      "SwapSourceObject": {
        "type": "object",
        "description": "Resolved source of the swap.",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of the source user (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of the source wallet (prefixed with `wlt_`).",
            "example": "wlt_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDG",
              "PYUSD"
            ],
            "example": "USDC"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "ETHEREUM",
              "SOLANA",
              "BASE",
              "FLOW_EVM",
              "BSC",
              "TRON",
              "CANTON",
              "ARC"
            ],
            "example": "POLYGON"
          }
        }
      },
      "SwapDestinationObject": {
        "type": "object",
        "description": "Resolved destination of the swap.",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of the destination user (prefixed with `usr_`).",
            "example": "usr_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of the destination wallet (prefixed with `wlt_`). Null when the destination is an external wallet.",
            "nullable": true,
            "example": "wlt_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "externalWalletId": {
            "type": "string",
            "description": "Public ID of the destination external wallet (prefixed with `extw_`). Null when the destination is a user wallet.",
            "nullable": true,
            "example": null
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD0",
              "USDG",
              "PYUSD"
            ],
            "example": "USDT"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "ETHEREUM",
              "SOLANA",
              "BASE",
              "FLOW_EVM",
              "BSC",
              "TRON",
              "CANTON",
              "ARC"
            ],
            "example": "POLYGON"
          }
        }
      },
      "SwapReceipt": {
        "type": "object",
        "description": "On-chain receipt for the swap.",
        "properties": {
          "transactionHash": {
            "type": "string",
            "nullable": true,
            "description": "On-chain transaction hash of the completed swap. Null until settled.",
            "example": null
          }
        }
      },
      "SwapObject": {
        "type": "object",
        "description": "A token swap.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the swap (prefixed with `swap_`).",
            "example": "swap_7bV1aLcs3Kf9dQ2mNpXwZ"
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Client-generated idempotency key supplied at creation.",
            "example": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
          },
          "status": {
            "type": "string",
            "enum": [
              "DRAFT",
              "CREATED",
              "PENDING",
              "OPEN_QUOTE",
              "QUOTE_FAILED",
              "COMPLETED",
              "FAILED",
              "CANCELLED"
            ],
            "example": "OPEN_QUOTE"
          },
          "error": {
            "type": "string",
            "nullable": true,
            "description": "User-facing error summary. Null unless the swap failed or was cancelled.",
            "example": null
          },
          "errorDetails": {
            "type": "string",
            "nullable": true,
            "description": "User-facing error details. Null unless the swap failed or was cancelled.",
            "example": null
          },
          "cancellable": {
            "type": "boolean",
            "description": "Whether a cancellation request can still win before execution starts.",
            "example": true
          },
          "autoCancelAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Requested automatic cancellation deadline.",
            "example": "2026-07-01T11:30:00.000Z"
          },
          "cancelRequestedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Time manual cancellation was requested.",
            "example": null
          },
          "amount": {
            "type": "string",
            "nullable": true,
            "description": "Source amount of the swap.",
            "example": "100"
          },
          "source": {
            "$ref": "#/components/schemas/SwapSourceObject"
          },
          "destination": {
            "$ref": "#/components/schemas/SwapDestinationObject"
          },
          "receipt": {
            "$ref": "#/components/schemas/SwapReceipt"
          },
          "quote": {
            "$ref": "#/components/schemas/SwapQuote"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "SwapListObject": {
        "type": "object",
        "description": "Cursor-paginated list of swaps.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SwapObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "TransferApprovalVoteObject": {
        "type": "object",
        "description": "A single approve/reject vote cast on a transfer approval.",
        "properties": {
          "approverId": {
            "type": "string",
            "description": "Internal ID of the approving profile member."
          },
          "vote": {
            "type": "string",
            "enum": [
              "APPROVE",
              "REJECT"
            ],
            "example": "APPROVE"
          },
          "comment": {
            "type": "string",
            "nullable": true,
            "example": "Confirmed with finance."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:35:00.000Z"
          }
        }
      },
      "TransferApprovalObject": {
        "type": "object",
        "description": "A pending or resolved transfer approval.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the transfer approval (prefixed with `ta_`).",
            "example": "ta_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "APPROVED",
              "REJECTED",
              "EXPIRED"
            ],
            "example": "PENDING"
          },
          "transferId": {
            "type": "string",
            "description": "Internal identifier of the transfer awaiting approval. Note: this is not currently the transfer's public ID (e.g. its `ofrmp_`/`brdg_`/`ctr_` ID) and cannot be used to look it up via the API.",
            "example": "e1a2b3c4-5678-90ab-cdef-1234567890ab"
          },
          "transferType": {
            "type": "string",
            "enum": [
              "CRYPTO_TRANSFER",
              "OFFRAMP",
              "BRIDGE",
              "ONRAMP",
              "BATCH_CRYPTO_TRANSFER"
            ],
            "description": "The resource type `transferId` belongs to.",
            "example": "OFFRAMP"
          },
          "fromDashboard": {
            "type": "boolean",
            "description": "Whether the underlying transfer was initiated from the HIFI dashboard rather than the API.",
            "example": false
          },
          "initiatorProfileId": {
            "type": "string",
            "description": "Internal ID of the profile that initiated the transfer."
          },
          "votes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransferApprovalVoteObject"
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:35:00.000Z"
          }
        }
      },
      "TransferApprovalListObject": {
        "type": "object",
        "description": "Cursor-paginated list of transfer approvals.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransferApprovalObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "TransferApprovalActionBody": {
        "type": "object",
        "description": "Optional comment to attach to the approval decision.",
        "properties": {
          "comment": {
            "type": "string",
            "example": "Confirmed with finance."
          }
        }
      },
      "ToSLink": {
        "type": "object",
        "properties": {
          "idempotencyKey": {
            "type": "string",
            "description": "Unique identifier for the resource.",
            "format": "uuid"
          },
          "templateId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the custom Terms of Service template generated in the Hifi developer dashboard."
          },
          "redirectUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL to redirect to after the Terms of Service link is accepted."
          }
        },
        "required": [
          "idempotencyKey"
        ]
      },
      "CreateToSLinkObject": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "signed": {
            "type": "boolean"
          },
          "sessionToken": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "expiredAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "url",
          "id",
          "signed",
          "sessionToken",
          "createdAt",
          "expiredAt"
        ]
      },
      "ToSLinkRecordStatusObject": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Signed agreement ID."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the Terms of Service link was created."
          },
          "expiredAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the Terms of Service link expires."
          },
          "signed": {
            "type": "boolean",
            "description": "Whether the Terms of Service has been signed."
          },
          "sessionToken": {
            "type": "string",
            "format": "uuid",
            "description": "Session token for the Terms of Service signing session."
          }
        }
      },
      "UserCreate": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Optional idempotency key for user creation."
          },
          "type": {
            "type": "string",
            "enum": [
              "INDIVIDUAL",
              "BUSINESS"
            ]
          },
          "signedAgreementId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the signed agreement from POST /v3/tos-link."
          }
        },
        "required": [
          "type",
          "signedAgreementId"
        ]
      },
      "UserObject": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^user_[A-Za-z0-9]+$",
            "description": "User ID."
          },
          "type": {
            "type": "string",
            "enum": [
              "INDIVIDUAL",
              "BUSINESS"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the user was created."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the user was last updated."
          }
        },
        "required": [
          "id",
          "type",
          "createdAt",
          "updatedAt"
        ]
      },
      "UserList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "data",
          "pagination"
        ]
      },
      "VirtualAccountSource": {
        "type": "object",
        "description": "Fiat source the virtual account receives deposits in. The combination of\n`currency`, `country`, and `transferType` must be a supported pair.\n",
        "required": [
          "currency",
          "country",
          "transferType"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "USD"
            ],
            "description": "ISO 4217 fiat currency the virtual account accepts.",
            "example": "USD"
          },
          "country": {
            "type": "string",
            "enum": [
              "USA"
            ],
            "description": "ISO 3166-1 alpha-3 country code of the source rail.",
            "example": "USA"
          },
          "transferType": {
            "type": "string",
            "enum": [
              "ACH",
              "WIRE",
              "RTP"
            ],
            "description": "Fiat transfer rail used to fund the virtual account.",
            "example": "ACH"
          }
        }
      },
      "VirtualAccountDestination": {
        "type": "object",
        "description": "Stablecoin destination that incoming fiat deposits are converted to and\ndelivered to. Exactly one of `walletId` or `externalWalletId` must be set.\n",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD",
              "USDG",
              "PYUSD0",
              "USDCX"
            ],
            "description": "Destination stablecoin.",
            "example": "USDC"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of a HIFI custodial wallet (prefixed with `wlt_`). Mutually exclusive with `externalWalletId`.",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "externalWalletId": {
            "type": "string",
            "description": "Public ID of an external wallet (prefixed with `extw_`). Mutually exclusive with `walletId`.",
            "example": "extw_4mNpXwZ7bV1aLcs3Kf9dQ"
          }
        }
      },
      "VirtualAccountCreate": {
        "type": "object",
        "description": "Virtual account creation request.",
        "required": [
          "userId",
          "source",
          "destination"
        ],
        "properties": {
          "userId": {
            "type": "string",
            "pattern": "^user_[A-Za-z0-9]+$",
            "description": "Public ID of the user this virtual account belongs to.",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "source": {
            "$ref": "#/components/schemas/VirtualAccountSource"
          },
          "destination": {
            "$ref": "#/components/schemas/VirtualAccountDestination"
          }
        }
      },
      "VirtualAccountSimulateDepositSource": {
        "type": "object",
        "description": "Simulated sending bank account details.",
        "required": [
          "routingNumber",
          "accountNumber",
          "name",
          "bankName"
        ],
        "properties": {
          "routingNumber": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10,
            "description": "Routing number of the simulated sending bank.",
            "example": "021000021"
          },
          "accountNumber": {
            "type": "string",
            "minLength": 1,
            "maxLength": 17,
            "description": "Account number of the simulated sender.",
            "example": "123456789"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 35,
            "description": "Name of the simulated sender.",
            "example": "Jane Doe"
          },
          "bankName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 35,
            "description": "Name of the simulated sending bank.",
            "example": "Example Bank"
          }
        }
      },
      "VirtualAccountSimulateDeposit": {
        "type": "object",
        "description": "Sandbox-only simulated deposit request.",
        "required": [
          "amount",
          "transferType",
          "source"
        ],
        "properties": {
          "amount": {
            "type": "number",
            "minimum": 0.01,
            "maximum": 100000000,
            "description": "Deposit amount in the source fiat currency.",
            "example": 100
          },
          "transferType": {
            "type": "string",
            "enum": [
              "ACH",
              "WIRE"
            ],
            "description": "Fiat transfer rail to simulate.",
            "example": "ACH"
          },
          "reference": {
            "type": "string",
            "maxLength": 35,
            "description": "Optional payment reference.",
            "example": "INV-2026-0001"
          },
          "source": {
            "$ref": "#/components/schemas/VirtualAccountSimulateDepositSource"
          }
        }
      },
      "VirtualAccountMigration": {
        "type": "object",
        "description": "Up to 100 v2 virtual account IDs to migrate to v3.",
        "required": [
          "v2Ids"
        ],
        "properties": {
          "v2Ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "type": "string",
              "format": "uuid",
              "example": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
            }
          }
        }
      },
      "VirtualAccountSourceObject": {
        "type": "object",
        "description": "Fiat source configuration of the virtual account.",
        "properties": {
          "transferTypes": {
            "type": "array",
            "description": "Fiat transfer rails accepted by this virtual account.",
            "items": {
              "type": "string",
              "enum": [
                "ACH",
                "WIRE",
                "RTP"
              ]
            },
            "example": [
              "ACH",
              "WIRE",
              "RTP"
            ]
          },
          "currency": {
            "type": "string",
            "enum": [
              "USD"
            ],
            "example": "USD"
          }
        }
      },
      "VirtualAccountDestinationObject": {
        "type": "object",
        "description": "Stablecoin destination of the virtual account.",
        "properties": {
          "chain": {
            "type": "string",
            "description": "Blockchain the destination stablecoin is delivered on.",
            "enum": [
              "ETHEREUM",
              "POLYGON",
              "SOLANA",
              "BASE",
              "FLOW_EVM",
              "ARBITRUM",
              "BSC",
              "TRON",
              "CANTON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "PYUSD",
              "USDG",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "walletAddress": {
            "type": "string",
            "description": "On-chain address funds are delivered to.",
            "example": "0x1234567890abcdef1234567890abcdef12345678"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of the HIFI custodial wallet, if the destination is a HIFI wallet (prefixed with `wlt_`).",
            "nullable": true,
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "externalWalletId": {
            "type": "string",
            "description": "Public ID of the external wallet, if the destination is an external wallet (prefixed with `extw_`).",
            "nullable": true,
            "example": null
          }
        }
      },
      "VirtualAccountDepositInstructions": {
        "type": "object",
        "nullable": true,
        "description": "Bank details for funding the virtual account. Null until the account is\nactive.\n",
        "properties": {
          "bankName": {
            "type": "string",
            "example": "Example Bank"
          },
          "bankAddress": {
            "type": "string",
            "example": "123 Main Street, New York, NY 10001"
          },
          "beneficiary": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "example": "ACME Corp"
              },
              "address": {
                "type": "string",
                "example": "123 Main Street, New York, NY 10001, USA"
              }
            }
          },
          "ach": {
            "type": "object",
            "properties": {
              "routingNumber": {
                "type": "string",
                "example": "021000021"
              },
              "accountNumber": {
                "type": "string",
                "example": "123456789012"
              }
            }
          },
          "wire": {
            "type": "object",
            "properties": {
              "routingNumber": {
                "type": "string",
                "example": "021000021"
              },
              "accountNumber": {
                "type": "string",
                "example": "123456789012"
              }
            }
          },
          "rtp": {
            "type": "object",
            "properties": {
              "routingNumber": {
                "type": "string",
                "example": "021000021"
              },
              "accountNumber": {
                "type": "string",
                "example": "123456789012"
              }
            }
          },
          "reference": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "depositBy": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": null
          },
          "instruction": {
            "type": "string",
            "example": "Please deposit USD to the bank account provided."
          }
        }
      },
      "VirtualAccountMicroDepositSourceBankInfo": {
        "type": "object",
        "description": "Details of the bank that sent a deposit.",
        "properties": {
          "bankName": {
            "type": "string",
            "example": "Example Bank"
          },
          "senderName": {
            "type": "string",
            "example": "Jane Doe"
          },
          "routingNumber": {
            "type": "string",
            "example": "021000021"
          },
          "accountNumber": {
            "type": "string",
            "example": "123456789"
          },
          "accountType": {
            "type": "string",
            "example": "CHECKING"
          },
          "fedBatchId": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "imad": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "omad": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "traceNumber": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "bankAddress": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "description": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "references": {
            "type": "object",
            "nullable": true,
            "example": null
          },
          "paymentRail": {
            "type": "string",
            "example": "ach"
          }
        }
      },
      "VirtualAccountMicroDepositItem": {
        "type": "object",
        "properties": {
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:35:00.000Z"
          },
          "currency": {
            "type": "string",
            "example": "USD"
          },
          "amount": {
            "type": "number",
            "example": 100
          },
          "sourceBankInfo": {
            "$ref": "#/components/schemas/VirtualAccountMicroDepositSourceBankInfo"
          }
        }
      },
      "VirtualAccountMicroDeposits": {
        "type": "object",
        "nullable": true,
        "description": "Deposits received into the virtual account.",
        "properties": {
          "count": {
            "type": "integer",
            "example": 0
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VirtualAccountMicroDepositItem"
            },
            "example": []
          }
        }
      },
      "VirtualAccountObject": {
        "type": "object",
        "description": "A virtual account.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the virtual account (prefixed with `va_`).",
            "example": "va_5Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this virtual account belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "source": {
            "$ref": "#/components/schemas/VirtualAccountSourceObject"
          },
          "destination": {
            "$ref": "#/components/schemas/VirtualAccountDestinationObject"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "ACTIVE"
          },
          "microDeposits": {
            "$ref": "#/components/schemas/VirtualAccountMicroDeposits"
          },
          "depositInstructions": {
            "$ref": "#/components/schemas/VirtualAccountDepositInstructions"
          },
          "settlementRuleId": {
            "type": "string",
            "description": "Public ID of the applied settlement rule (prefixed with `sr_`), if any.",
            "nullable": true,
            "example": null
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "VirtualAccountListObject": {
        "type": "object",
        "description": "Cursor-paginated list of virtual accounts.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VirtualAccountObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "VirtualAccountMessageObject": {
        "type": "object",
        "description": "A simple message acknowledgement.",
        "properties": {
          "message": {
            "type": "string",
            "example": "Success"
          }
        }
      },
      "VirtualAccountMigrationResult": {
        "type": "object",
        "description": "The migration result for a single requested v2 virtual account ID.",
        "properties": {
          "v2Id": {
            "type": "string",
            "format": "uuid",
            "description": "The virtual account's v2 ID, as sent in the request.",
            "example": "8f14e45f-ceea-467e-adde-0f8d0f5f4b1c"
          },
          "v3Id": {
            "type": "string",
            "nullable": true,
            "description": "The virtual account's v3 public ID, or `null` if it could not be migrated.",
            "example": "va_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "migrated": {
            "type": "boolean",
            "description": "Whether the virtual account is now on v3.",
            "example": true
          },
          "message": {
            "type": "string",
            "description": "Human-readable outcome, e.g. `migrated` or `Resource not found`.",
            "example": "migrated"
          }
        }
      },
      "VirtualAccountMigrationResultList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VirtualAccountMigrationResult"
            }
          }
        }
      },
      "VirtualAccountRouteObject": {
        "type": "object",
        "description": "A supported virtual account route.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the route (prefixed with `var_`).",
            "example": "var_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 destination country.",
            "example": "USA"
          },
          "fiatCurrency": {
            "type": "string",
            "example": "USD"
          },
          "transferType": {
            "type": "string",
            "example": "ACH"
          },
          "cryptoCurrency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD"
            ],
            "example": "USDC"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "SOLANA",
              "ETHEREUM",
              "BASE",
              "BSC",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "ACTIVE"
          }
        }
      },
      "VirtualAccountRouteListObject": {
        "type": "object",
        "description": "Cursor-paginated list of virtual account routes. Each item in `data` is a full route object if `expand=true` was passed, otherwise just the route's public ID.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string",
                  "description": "Public ID of the virtual account route (when `expand` is omitted or `false`)."
                },
                {
                  "$ref": "#/components/schemas/VirtualAccountRouteObject"
                }
              ]
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "WalletObject": {
        "type": "object",
        "description": "A HIFI-provisioned custodial wallet on a single chain.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the wallet (prefixed with `wlt_`).",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user this wallet belongs to (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "chain": {
            "type": "string",
            "description": "Blockchain the wallet is provisioned on.",
            "enum": [
              "POLYGON",
              "SOLANA",
              "ETHEREUM",
              "BASE",
              "BSC",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "address": {
            "type": "string",
            "description": "On-chain wallet address.",
            "example": "0x1234567890abcdef1234567890abcdef12345678"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "WalletListObject": {
        "type": "object",
        "description": "Cursor-paginated list of wallets.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WalletObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "WalletBalanceTokenInfo": {
        "type": "object",
        "description": "Metadata for the token the balance is denominated in. Null when no token balance exists.",
        "nullable": true,
        "properties": {
          "tokenAddress": {
            "type": "string",
            "description": "On-chain contract address of the token.",
            "example": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"
          },
          "standard": {
            "type": "string",
            "description": "Token standard.",
            "example": "ERC20"
          },
          "name": {
            "type": "string",
            "example": "USD Coin"
          },
          "symbol": {
            "type": "string",
            "example": "USDC"
          },
          "decimals": {
            "type": "integer",
            "example": 6
          }
        }
      },
      "WalletBalanceObject": {
        "type": "object",
        "description": "Balance of a wallet for a given currency.",
        "properties": {
          "balance": {
            "type": "string",
            "description": "Balance in the token's smallest unit.",
            "example": "1000000"
          },
          "displayBalance": {
            "type": "string",
            "description": "Human-readable balance in whole token units.",
            "example": "1.00"
          },
          "tokenInfo": {
            "$ref": "#/components/schemas/WalletBalanceTokenInfo"
          }
        }
      },
      "WalletDepositWallet": {
        "type": "object",
        "description": "The HIFI-provisioned wallet the deposit was received into.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the wallet (prefixed with `wlt_`).",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "address": {
            "type": "string",
            "description": "On-chain address of the wallet.",
            "example": "0x1234567890abcdef1234567890abcdef12345678"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "SOLANA",
              "ETHEREUM",
              "BASE",
              "BSC",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          }
        }
      },
      "WalletDepositTransaction": {
        "type": "object",
        "description": "On-chain transaction details of the deposit.",
        "properties": {
          "transactionHash": {
            "type": "string",
            "example": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890"
          },
          "chain": {
            "type": "string",
            "enum": [
              "POLYGON",
              "SOLANA",
              "ETHEREUM",
              "BASE",
              "BSC",
              "FLOW_EVM",
              "CANTON",
              "TRON",
              "ARC"
            ],
            "example": "POLYGON"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USDC",
              "USDT",
              "USDG",
              "PYUSD",
              "PYUSD0",
              "USDCX"
            ],
            "example": "USDC"
          },
          "status": {
            "type": "string",
            "enum": [
              "CONFIRMED",
              "COMPLETED"
            ],
            "example": "COMPLETED"
          },
          "sourceAddress": {
            "type": "string",
            "description": "Address the funds were sent from.",
            "example": "0x9876543210fedcba9876543210fedcba98765432"
          },
          "destinationAddress": {
            "type": "string",
            "description": "Address the funds were received at (the wallet address).",
            "example": "0x1234567890abcdef1234567890abcdef12345678"
          },
          "contractAddress": {
            "type": "string",
            "description": "Token contract address.",
            "example": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359"
          },
          "amount": {
            "type": "string",
            "description": "Deposit amount in whole token units.",
            "example": "100.50"
          },
          "unitAmount": {
            "type": "string",
            "description": "Deposit amount in the token's smallest unit.",
            "example": "100500000"
          }
        }
      },
      "WalletDepositObject": {
        "type": "object",
        "description": "An inbound deposit received by a HIFI-provisioned wallet.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the deposit (prefixed with `dep_`).",
            "example": "dep_9dQ2mNpXwZ7bV1aLcs3Kf"
          },
          "userId": {
            "type": "string",
            "description": "Public ID of the user (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "createdAt": {
            "type": "integer",
            "description": "Unix timestamp (milliseconds) of when the deposit was created.",
            "example": 1751365800000
          },
          "updatedAt": {
            "type": "integer",
            "description": "Unix timestamp (milliseconds) of when the deposit was last updated.",
            "example": 1751365800000
          },
          "wallet": {
            "$ref": "#/components/schemas/WalletDepositWallet"
          },
          "transaction": {
            "$ref": "#/components/schemas/WalletDepositTransaction"
          }
        }
      },
      "WalletDepositListObject": {
        "type": "object",
        "description": "Cursor-paginated list of wallet deposits.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WalletDepositObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "WalletOfferSource": {
        "type": "object",
        "description": "Source party of the Canton offer.",
        "properties": {
          "party": {
            "type": "string",
            "description": "Canton party identifier of the sender.",
            "example": "sender::1220abc..."
          }
        }
      },
      "WalletOfferDestination": {
        "type": "object",
        "description": "Destination of the Canton offer.",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Public ID of the recipient user (prefixed with `usr_`).",
            "example": "usr_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "walletId": {
            "type": "string",
            "description": "Public ID of the recipient wallet (prefixed with `wlt_`).",
            "example": "wlt_1aLcs3Kf9dQ2mNpXwZ7bV"
          },
          "party": {
            "type": "string",
            "description": "Canton party identifier of the recipient.",
            "example": "recipient::1220def..."
          }
        }
      },
      "WalletOfferObject": {
        "type": "object",
        "description": "A Canton transfer offer directed at a HIFI-provisioned Canton wallet.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the offer (prefixed with `offer_`).",
            "example": "offer_3Kf9dQ2mNpXwZ7bV1aLcs"
          },
          "status": {
            "type": "string",
            "description": "Current status of the offer.",
            "example": "RECEIVED"
          },
          "amount": {
            "type": "string",
            "description": "Offer amount.",
            "example": "100.00"
          },
          "currency": {
            "type": "string",
            "example": "USDCX"
          },
          "source": {
            "$ref": "#/components/schemas/WalletOfferSource"
          },
          "destination": {
            "$ref": "#/components/schemas/WalletOfferDestination"
          },
          "creationTransactionHash": {
            "type": "string",
            "example": "0xabc123def4567890abc123def4567890abc123def4567890abc123def4567890"
          },
          "executionTransactionHash": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-07-02T10:30:00.000Z"
          }
        }
      },
      "WalletOfferListObject": {
        "type": "object",
        "description": "Cursor-paginated list of Canton offers.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WalletOfferObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "WebhookEndpointEventType": {
        "type": "string",
        "description": "A webhook event type an endpoint can subscribe to, such as `ONRAMP.STATUS.COMPLETED`. Call\n[List webhook event types](https://docs.hifi.com/v3/api-reference/webhook-endpoint/list-webhook-event-types)\nfor every value accepted.\n",
        "example": "ONRAMP.STATUS.COMPLETED"
      },
      "WebhookEndpointCreate": {
        "type": "object",
        "description": "Fields for creating a webhook endpoint.",
        "required": [
          "name",
          "url"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Human-readable name for the endpoint.",
            "example": "Production events"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "HTTPS URL that event notifications are delivered to.",
            "example": "https://api.example.com/webhooks/hifi"
          },
          "description": {
            "type": "string",
            "description": "Optional description of the endpoint.",
            "example": "Receives all production event notifications"
          },
          "subscriptions": {
            "type": "array",
            "description": "Event types this endpoint subscribes to.",
            "items": {
              "$ref": "#/components/schemas/WebhookEndpointEventType"
            },
            "example": [
              "USER.CREATED",
              "OFFRAMP.STATUS.COMPLETED"
            ]
          }
        }
      },
      "WebhookEndpointUpdate": {
        "type": "object",
        "description": "Fields for updating a webhook endpoint. All fields are optional. When\n`subscriptions` is provided it fully replaces the existing set.\n",
        "properties": {
          "name": {
            "type": "string",
            "example": "Production events"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "example": "https://api.example.com/webhooks/hifi"
          },
          "description": {
            "type": "string",
            "example": "Receives all production event notifications"
          },
          "status": {
            "type": "string",
            "description": "Update the endpoint status.",
            "enum": [
              "ACTIVE",
              "PAUSED"
            ],
            "example": "PAUSED"
          },
          "subscriptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEndpointEventType"
            },
            "example": [
              "USER.CREATED",
              "OFFRAMP.STATUS.COMPLETED"
            ]
          }
        }
      },
      "WebhookEndpointObject": {
        "type": "object",
        "description": "A webhook endpoint.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the webhook endpoint (prefixed with `we_`).",
            "example": "we_4mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "name": {
            "type": "string",
            "example": "Production events"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "example": "https://api.example.com/webhooks/hifi"
          },
          "description": {
            "type": "string",
            "example": "Receives all production event notifications"
          },
          "subscriptions": {
            "type": "array",
            "description": "Event types this endpoint is subscribed to.",
            "items": {
              "$ref": "#/components/schemas/WebhookEndpointEventType"
            },
            "example": [
              "USER.CREATED",
              "OFFRAMP.STATUS.COMPLETED"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "PAUSED",
              "DISABLED"
            ],
            "example": "ACTIVE"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "WebhookEndpointCreateObject": {
        "type": "object",
        "description": "A newly created webhook endpoint. Includes the `signingSecret`, which is\nreturned only in this response and cannot be retrieved again.\n",
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookEndpointObject"
          },
          {
            "type": "object",
            "properties": {
              "signingSecret": {
                "type": "string",
                "description": "Secret used to verify the signature of incoming deliveries. Returned only on creation.",
                "example": "whsec_9aB0xY4mNpXwZ7bV1aLdt3Kf9dQ2mNpXwZ7bV1aLcs"
              }
            }
          }
        ]
      },
      "WebhookEndpointDeleteObject": {
        "type": "object",
        "description": "Result of disabling a webhook endpoint.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Public ID of the disabled webhook endpoint (prefixed with `we_`).",
            "example": "we_4mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "deleted": {
            "type": "boolean",
            "example": true
          }
        }
      },
      "WebhookEndpointListObject": {
        "type": "object",
        "description": "Cursor-paginated list of webhook endpoints.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEndpointObject"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "WebhookEventTypeCatalogObject": {
        "type": "object",
        "description": "All event types that can be subscribed to.",
        "properties": {
          "eventTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "USER.CREATED",
              "USER.STATUS.ACTIVE",
              "OFFRAMP.CREATED",
              "OFFRAMP.STATUS.COMPLETED"
            ]
          }
        }
      },
      "WebhookDeliveryHistoryEntry": {
        "type": "object",
        "description": "A single delivery attempt of a webhook event to an endpoint.",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the webhook event.",
            "example": "evt_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "eventType": {
            "type": "string",
            "example": "OFFRAMP.STATUS.COMPLETED"
          },
          "eventCreatedAt": {
            "type": "integer",
            "description": "Unix timestamp (milliseconds) the event was created.",
            "example": 1751362200000
          },
          "data": {
            "type": "object",
            "description": "The event payload delivered to the endpoint."
          },
          "webhookEndpointId": {
            "type": "string",
            "description": "Public ID of the webhook endpoint this delivery was sent to (prefixed with `we_`).",
            "example": "we_4mNpXwZ7bV1aLcs3Kf9dQ"
          },
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "ENQUEUED",
              "PROCESSING",
              "DELIVERED",
              "RETRY",
              "FAILED"
            ],
            "example": "DELIVERED"
          },
          "attempts": {
            "type": "integer",
            "example": 1
          },
          "responseBody": {
            "type": "string",
            "nullable": true
          },
          "responseStatus": {
            "type": "integer",
            "nullable": true,
            "example": 200
          },
          "lastAttemptAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-07-01T10:30:05.000Z"
          },
          "nextAttemptAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2026-07-01T10:30:00.000Z"
          }
        }
      },
      "WebhookDeliveryHistoryListObject": {
        "type": "object",
        "description": "Cursor-paginated webhook delivery history for an endpoint.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookDeliveryHistoryEntry"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "WebhookEventResendResult": {
        "type": "object",
        "description": "Result of re-queuing a webhook event for delivery.",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the webhook event that was re-queued.",
            "example": "evt_9aB0xY4mNpXwZ7bV1aLdt"
          },
          "resent": {
            "type": "boolean",
            "example": true
          }
        }
      }
    },
    "examples": {
      "ToSLinkObjectExample": {
        "summary": "ToS Link Object",
        "value": {
          "url": "https://app.hifi.com/tos?sessionToken=03402692-0fdf-4bbd-8axd-5658d87c6c2d&redirectUrl=https%3A%2F%2Fwww.google.com&templateId=12345426-65x9-4b4b-9e8f-2867a724e2d9&sandbox=true",
          "id": "34d07807-e590-4d4a-b125-6267862a68f2",
          "signed": true,
          "sessionToken": "12345672-0fdf-4cbc-9a0d-5658d87c6a3c",
          "createdAt": "2026-07-09T17:58:19.651Z",
          "expiredAt": "2026-07-14T17:58:19.053Z"
        }
      },
      "TosLinkStatusObjectExample": {
        "summary": "ToS Link Status Object",
        "value": {
          "id": "e6e0de1d-7d0b-4935-ba1a-71906064067e",
          "createdAt": "2026-04-17T18:27:51.169Z",
          "expiredAt": "2026-04-22T18:27:51.091Z",
          "signed": true,
          "sessionToken": "e3a92e74-19e0-4137-ab75-ae537832f342"
        }
      },
      "IndividualUserObjectExample": {
        "summary": "Individual User Object",
        "value": {
          "id": "user_2f7a9bc3d4e5",
          "type": "INDIVIDUAL",
          "createdAt": "2026-07-09T16:12:20.541Z",
          "updatedAt": "2026-07-09T16:12:20.541Z"
        }
      },
      "BusinessUserObjectExample": {
        "summary": "Business User Object",
        "value": {
          "id": "user_9a8b7c6d5e4f",
          "type": "BUSINESS",
          "createdAt": "2026-07-09T16:03:41.107Z",
          "updatedAt": "2026-07-09T16:03:41.107Z"
        }
      },
      "UserListExample": {
        "summary": "User List",
        "value": {
          "data": [
            {
              "id": "user_2f7a9bc3d4e5",
              "type": "INDIVIDUAL",
              "createdAt": "2026-07-09T16:12:20.541Z",
              "updatedAt": "2026-07-09T16:12:20.541Z"
            },
            {
              "id": "user_9a8b7c6d5e4f",
              "type": "BUSINESS",
              "createdAt": "2026-07-09T16:03:41.107Z",
              "updatedAt": "2026-07-09T16:03:41.107Z"
            }
          ],
          "pagination": {
            "hasMore": false,
            "startCursor": "user_2f7a9bc3d4e5",
            "endCursor": "user_9a8b7c6d5e4f"
          }
        }
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/v3/bridges": {
      "post": {
        "summary": "Create a bridge transfer",
        "operationId": "v3CreateBridge",
        "x-mint": {
          "href": "/v3/api-reference/bridge/create-a-bridge-transfer"
        },
        "description": "Create a cross-chain bridge transfer that moves a stablecoin from a source\nwallet on one chain to a destination wallet (owned or external) on a different\nchain. The source and destination chains are derived from the wallets referenced\nand must be different.\n\nProvide exactly one destination: either `destination.walletId` (an owned wallet)\nor `destination.externalWalletId` (an external wallet). The `requestId` makes the\nrequest idempotent — reusing a `requestId` returns the existing bridge.\n",
        "tags": [
          "Bridge"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateBridgeBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateBridgeResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List bridge transfers",
        "operationId": "v3ListBridges",
        "x-mint": {
          "href": "/v3/api-reference/bridge/list-bridge-transfers"
        },
        "description": "List all bridge transfers for the authenticated client. Supports cursor-based pagination and filtering by status, source user, and destination user.",
        "tags": [
          "Bridge"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/BridgeStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/BridgeSourceUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/BridgeDestinationUserIdQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListBridgesResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/bridges/{bridgeId}": {
      "get": {
        "summary": "Retrieve a bridge transfer",
        "operationId": "v3GetBridge",
        "x-mint": {
          "href": "/v3/api-reference/bridge/retrieve-a-bridge-transfer"
        },
        "description": "Retrieve details of a specific bridge transfer, including its quote and receipt.",
        "tags": [
          "Bridge"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/BridgeIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetBridgeResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/bridges/{bridgeId}/quote/accept": {
      "post": {
        "summary": "Accept a bridge quote",
        "operationId": "v3AcceptBridgeQuote",
        "x-mint": {
          "href": "/v3/api-reference/bridge/accept-a-bridge-quote"
        },
        "description": "Accept the open quote on a bridge transfer to begin execution. The bridge must be\nin the `OPEN_QUOTE` state; a quote that is still being generated (`AWAITING_QUOTE`)\nor that has expired or is otherwise not acceptable is rejected.\n",
        "tags": [
          "Bridge"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/BridgeIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/AcceptBridgeResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/ping": {
      "get": {
        "summary": "Ping",
        "operationId": "v3Ping",
        "x-mint": {
          "href": "/v3/api-reference/common/ping"
        },
        "tags": [
          "Common"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/PingResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/users/{userId}/compliance/profile": {
      "patch": {
        "summary": "Update the compliance profile",
        "operationId": "v3UpdateComplianceProfile",
        "x-mint": {
          "href": "/v3/api-reference/compliance/update-the-compliance-profile"
        },
        "description": "Update the compliance (KYC/KYB) profile for a user. The accepted fields depend on\nwhether the user is an individual or a business. All fields are optional on update —\nonly the fields you provide are changed. Sensitive fields (tax ID, phone number) are\nstored encrypted and returned in full only on the profile endpoints.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ComplianceUpdateProfileBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceProfileResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "Retrieve the compliance profile",
        "operationId": "v3GetComplianceProfile",
        "x-mint": {
          "href": "/v3/api-reference/compliance/retrieve-the-compliance-profile"
        },
        "description": "Retrieve the compliance (KYC/KYB) profile for a user.",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceProfileResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/users/{userId}/compliance/questionnaire": {
      "patch": {
        "summary": "Update the compliance questionnaire",
        "operationId": "v3UpdateComplianceQuestionnaire",
        "x-mint": {
          "href": "/v3/api-reference/compliance/update-the-compliance-questionnaire"
        },
        "description": "Update the compliance questionnaire for a user. The accepted fields depend on whether\nthe user is an individual or a business. All fields are optional on update — only the\nfields you provide are changed.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ComplianceUpdateQuestionnaireBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceQuestionnaireResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "Retrieve the compliance questionnaire",
        "operationId": "v3GetComplianceQuestionnaire",
        "x-mint": {
          "href": "/v3/api-reference/compliance/retrieve-the-compliance-questionnaire"
        },
        "description": "Retrieve the compliance questionnaire for a user.",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceQuestionnaireResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/compliance/associated-parties": {
      "post": {
        "summary": "Add an associated party",
        "operationId": "v3CreateAssociatedParty",
        "x-mint": {
          "href": "/v3/api-reference/compliance/add-an-associated-party"
        },
        "description": "Add an associated party (UBO, director, shareholder, etc.) to a business user's\ncompliance profile. `userId` identifies the business user; only it and `roles`\nare required, and the remaining identity fields may be supplied here or later\nvia update.\n",
        "tags": [
          "Compliance"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ComplianceAddAssociatedPartyBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceAssociatedPartyResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List associated parties",
        "operationId": "v3ListAssociatedParties",
        "x-mint": {
          "href": "/v3/api-reference/compliance/list-associated-parties"
        },
        "description": "List all associated parties for a business user's compliance profile. Cursor-paginated.",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^user_[A-Za-z0-9]+$"
            },
            "description": "Public ID of the user whose associated parties are listed."
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceListAssociatedPartiesResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/compliance/associated-parties/{associatedPartyId}": {
      "patch": {
        "summary": "Update an associated party",
        "operationId": "v3UpdateAssociatedParty",
        "x-mint": {
          "href": "/v3/api-reference/compliance/update-an-associated-party"
        },
        "description": "Update an existing associated party. All fields are optional — only the fields you provide are changed.",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AssociatedPartyIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ComplianceUpdateAssociatedPartyBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceAssociatedPartyResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "Retrieve an associated party",
        "operationId": "v3GetAssociatedParty",
        "x-mint": {
          "href": "/v3/api-reference/compliance/retrieve-an-associated-party"
        },
        "description": "Retrieve details of a specific associated party.",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AssociatedPartyIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceAssociatedPartyResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Delete an associated party",
        "operationId": "v3DeleteAssociatedParty",
        "x-mint": {
          "href": "/v3/api-reference/compliance/delete-an-associated-party"
        },
        "description": "Delete an associated party. Not allowed if the associated party has already\nbeen used in a compliance submission.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AssociatedPartyIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceDeleteAssociatedPartyResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/compliance/documents": {
      "post": {
        "summary": "Add a compliance document",
        "operationId": "v3CreateComplianceDocument",
        "x-mint": {
          "href": "/v3/api-reference/compliance/add-a-compliance-document"
        },
        "description": "Attach a compliance document to a user or to an associated party — exactly one of\n`userId` or `associatedPartyId` must be provided. The `type` and `subType` values\naccepted depend on whether the document belongs to an individual or a business\n(associated parties are always individuals). The document file must first be\nuploaded via the files API; reference it here by its file public ID.\n",
        "tags": [
          "Compliance"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ComplianceAddDocumentBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceDocumentResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List compliance documents",
        "operationId": "v3ListComplianceDocuments",
        "x-mint": {
          "href": "/v3/api-reference/compliance/list-compliance-documents"
        },
        "description": "List all compliance documents for a user or an associated party — exactly one of\n`userId` or `associatedPartyId` must be provided. Cursor-paginated.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/AssociatedPartyIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceListDocumentsResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/compliance/documents/{documentId}": {
      "patch": {
        "summary": "Update a compliance document",
        "operationId": "v3UpdateComplianceDocument",
        "x-mint": {
          "href": "/v3/api-reference/compliance/update-a-compliance-document"
        },
        "description": "Update an existing compliance document. The `type` and `subType` fields cannot be\nchanged; all other fields are optional.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/DocumentIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ComplianceUpdateDocumentBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceDocumentResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "Retrieve a compliance document",
        "operationId": "v3GetComplianceDocument",
        "x-mint": {
          "href": "/v3/api-reference/compliance/retrieve-a-compliance-document"
        },
        "description": "Retrieve details of a specific compliance document.",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/DocumentIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceDocumentResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Delete a compliance document",
        "operationId": "v3DeleteComplianceDocument",
        "x-mint": {
          "href": "/v3/api-reference/compliance/delete-a-compliance-document"
        },
        "description": "Delete a compliance document. Not allowed if the document has already been\nused in a compliance submission.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/DocumentIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceDeleteDocumentResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/users/{userId}/compliance/submit": {
      "post": {
        "summary": "Submit compliance for review",
        "operationId": "v3SubmitCompliance",
        "x-mint": {
          "href": "/v3/api-reference/compliance/submit-compliance-for-review"
        },
        "description": "Submit the user's compliance profile, questionnaire, documents (and associated parties\nfor business users) for verification. The full submission must satisfy all requirements;\nif any requirement is unmet, a validation error is returned describing the missing or\ninvalid fields.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceSubmitResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/users/{userId}/compliance/status": {
      "get": {
        "summary": "Retrieve compliance status",
        "operationId": "v3GetComplianceStatus",
        "x-mint": {
          "href": "/v3/api-reference/compliance/retrieve-compliance-status"
        },
        "description": "Retrieve the current compliance verification status for a user, including the overall\ncompliance status, onboarding status, and any outstanding request-for-information (RFI)\nactions the user must complete.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ComplianceStatusResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/compliance-links": {
      "post": {
        "summary": "Generate a compliance link",
        "operationId": "v3CreateComplianceLink",
        "x-mint": {
          "href": "/v3/api-reference/compliance/generate-a-compliance-link"
        },
        "description": "Generate a hosted compliance (KYC/KYB) link for a user. Exactly one of\n`userId` or `userType` must be provided. When `userType` is supplied without\n`userId`, a new user of that type is created and associated with the link.\n\nThe response includes the hosted `url` and a `sessionToken` authorizing the\nflow. If `recipientEmail` is provided, the link is also emailed to that address.\n",
        "tags": [
          "Compliance"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenerateComplianceLinkBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/GenerateComplianceLinkResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/compliance-links/{complianceLinkId}": {
      "get": {
        "summary": "Retrieve a compliance link",
        "operationId": "v3GetComplianceLink",
        "x-mint": {
          "href": "/v3/api-reference/compliance/retrieve-a-compliance-link"
        },
        "description": "Retrieve a compliance link by its public ID. Returns the associated user,\nsession token, and the branding template applied to the compliance flow.\n",
        "tags": [
          "Compliance"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ComplianceLinkIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetComplianceLinkResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/corridors/{corridorId}": {
      "get": {
        "summary": "Retrieve a corridor",
        "operationId": "v3GetCorridor",
        "x-mint": {
          "href": "/v3/api-reference/corridor/retrieve-a-corridor"
        },
        "description": "Retrieve details of a specific fiat/crypto transfer corridor.",
        "tags": [
          "Corridor"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CorridorIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetCorridorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/corridors": {
      "get": {
        "summary": "List corridors",
        "operationId": "v3ListCorridors",
        "x-mint": {
          "href": "/v3/api-reference/corridor/list-corridors"
        },
        "description": "List all supported fiat/crypto transfer corridors. Supports cursor-based pagination and filtering by status, fiat currency, fiat country, transfer type, and direction.",
        "tags": [
          "Corridor"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/CorridorStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CorridorFiatCurrencyQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CorridorFiatCountryQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CorridorTransferTypeQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CorridorDirectionQueryParameter"
          },
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CorridorExpandQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListCorridorsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/counter-parties": {
      "post": {
        "summary": "Create a counter party",
        "operationId": "v3CreateCounterParty",
        "x-mint": {
          "href": "/v3/api-reference/counter-party/create-a-counter-party"
        },
        "description": "Create a new counter party for a user (identified by `userId` in the\nrequest body). A counter party represents an external individual or\nbusiness that funds can be sent to. The `type` field determines whether\nthe counter party is an individual or a business, which determines the\nrequired fields.\n",
        "tags": [
          "Counter Party"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateCounterPartyBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateCounterPartyResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List counter parties",
        "operationId": "v3ListCounterParties",
        "x-mint": {
          "href": "/v3/api-reference/counter-party/list-counter-parties"
        },
        "description": "List counter parties. Supports cursor-based pagination and filtering by user and type.",
        "tags": [
          "Counter Party"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/CounterPartyTypeQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListCounterPartiesResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/counter-parties/{counterPartyId}": {
      "get": {
        "summary": "Retrieve a counter party",
        "operationId": "v3GetCounterParty",
        "x-mint": {
          "href": "/v3/api-reference/counter-party/retrieve-a-counter-party"
        },
        "description": "Retrieve details of a specific counter party.",
        "tags": [
          "Counter Party"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CounterPartyIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetCounterPartyResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "patch": {
        "summary": "Update a counter party",
        "operationId": "v3UpdateCounterParty",
        "x-mint": {
          "href": "/v3/api-reference/counter-party/update-a-counter-party"
        },
        "description": "Update fields on an existing counter party.",
        "tags": [
          "Counter Party"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CounterPartyIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateCounterPartyBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateCounterPartyResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Delete a counter party",
        "operationId": "v3DeleteCounterParty",
        "x-mint": {
          "href": "/v3/api-reference/counter-party/delete-a-counter-party"
        },
        "description": "Deactivate a counter party. The counter party is marked as inactive and can no longer be used for transfers.",
        "tags": [
          "Counter Party"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CounterPartyIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/DeleteCounterPartyResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/crypto-transfers": {
      "post": {
        "summary": "Create a crypto transfer",
        "operationId": "v3CreateCryptoTransfer",
        "x-mint": {
          "href": "/v3/api-reference/crypto-transfer/create-a-crypto-transfer"
        },
        "description": "Create a single crypto transfer that moves a stablecoin from a source wallet to a\ndestination wallet or external wallet. The chain is derived from the source wallet.\nProvide exactly one of `destination.walletId` or `destination.externalWalletId`.\n\n`requestId` is an idempotency key: reusing one for an in-flight transfer returns a\nconflict, and the transfer is processed asynchronously after creation.\n",
        "tags": [
          "Crypto Transfer"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateCryptoTransferBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateCryptoTransferResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List crypto transfers",
        "operationId": "v3ListCryptoTransfers",
        "x-mint": {
          "href": "/v3/api-reference/crypto-transfer/list-crypto-transfers"
        },
        "description": "List all crypto transfers. Supports cursor-based pagination and filtering by status, source user, and destination user.",
        "tags": [
          "Crypto Transfer"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/CryptoTransferStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CryptoTransferSourceUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CryptoTransferDestinationUserIdQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListCryptoTransfersResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/crypto-transfers/{cryptoTransferId}": {
      "get": {
        "summary": "Retrieve a crypto transfer",
        "operationId": "v3GetCryptoTransfer",
        "x-mint": {
          "href": "/v3/api-reference/crypto-transfer/retrieve-a-crypto-transfer"
        },
        "description": "Retrieve details of a specific crypto transfer.",
        "tags": [
          "Crypto Transfer"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CryptoTransferIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetCryptoTransferResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/batch-transfers": {
      "post": {
        "summary": "Create a batch crypto transfer",
        "operationId": "v3CreateBatchCryptoTransfer",
        "x-mint": {
          "href": "/v3/api-reference/crypto-transfer/create-a-batch-crypto-transfer"
        },
        "description": "Create a batch crypto transfer that moves the same stablecoin from one source wallet\nto up to 50 destinations, each with its own amount. The chain is derived from the\nsource wallet. Each destination must provide exactly one of `walletId` or\n`externalWalletId`.\n\n`requestId` is an idempotency key: reusing one for an in-flight batch returns a\nconflict, while reusing one for a settled batch returns the existing transfer. The\nbatch is processed asynchronously after creation.\n",
        "tags": [
          "Crypto Transfer"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateBatchCryptoTransferBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateBatchCryptoTransferResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List batch crypto transfers",
        "operationId": "v3ListBatchCryptoTransfers",
        "x-mint": {
          "href": "/v3/api-reference/crypto-transfer/list-batch-crypto-transfers"
        },
        "description": "List all batch crypto transfers. Supports cursor-based pagination and filtering by status and source user.",
        "tags": [
          "Crypto Transfer"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/BatchCryptoTransferStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/BatchCryptoTransferSourceUserIdQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListBatchCryptoTransfersResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/batch-transfers/{batchCryptoTransferId}": {
      "get": {
        "summary": "Retrieve a batch crypto transfer",
        "operationId": "v3GetBatchCryptoTransfer",
        "x-mint": {
          "href": "/v3/api-reference/crypto-transfer/retrieve-a-batch-crypto-transfer"
        },
        "description": "Retrieve details of a specific batch crypto transfer.",
        "tags": [
          "Crypto Transfer"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/BatchCryptoTransferIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetBatchCryptoTransferResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-accounts": {
      "post": {
        "summary": "Create an external account",
        "operationId": "v3CreateExternalAccount",
        "x-mint": {
          "href": "/v3/api-reference/external-account/create-an-external-account"
        },
        "description": "Create a new external bank account for a counter party (identified by\n`counterPartyId` in the request body). External accounts represent\nbeneficiary bank accounts where funds can be sent during offramp transfers.\n\nRequired fields vary by `transferType`, `currency`, and `bankAddress.country`.\nSee the [account information reference](https://docs.hifi.com/v3/docs/references/account-information)\nfor supported combinations; unsupported combinations return a validation error.\nThe counter party must be active.\n",
        "tags": [
          "External Account"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateExternalAccountBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateExternalAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List external accounts",
        "operationId": "v3ListExternalAccounts",
        "x-mint": {
          "href": "/v3/api-reference/external-account/list-external-accounts"
        },
        "description": "List external accounts. Supports cursor-based pagination and filtering by user, counter party, status, transfer type, and currency.",
        "tags": [
          "External Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CounterPartyIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/ExternalAccountStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/ExternalAccountTransferTypeQueryParameter"
          },
          {
            "$ref": "#/components/parameters/ExternalAccountCurrencyQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListExternalAccountsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-accounts/{externalAccountId}": {
      "get": {
        "summary": "Retrieve an external account",
        "operationId": "v3GetExternalAccount",
        "x-mint": {
          "href": "/v3/api-reference/external-account/retrieve-an-external-account"
        },
        "description": "Retrieve details of a specific external account.",
        "tags": [
          "External Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalAccountIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetExternalAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "patch": {
        "summary": "Update an external account",
        "operationId": "v3UpdateExternalAccount",
        "x-mint": {
          "href": "/v3/api-reference/external-account/update-an-external-account"
        },
        "description": "Update the nickname on an existing external account.",
        "tags": [
          "External Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalAccountIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateExternalAccountBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateExternalAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Delete an external account",
        "operationId": "v3DeleteExternalAccount",
        "x-mint": {
          "href": "/v3/api-reference/external-account/delete-an-external-account"
        },
        "description": "Deactivate an external account. The account is marked as inactive and can no longer be used for transfers.",
        "tags": [
          "External Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalAccountIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/DeleteExternalAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-cards": {
      "post": {
        "summary": "Create an external card",
        "operationId": "v3CreateExternalCard",
        "x-mint": {
          "href": "/v3/api-reference/external-card/create-an-external-card"
        },
        "description": "Create a new external card for a counter party (identified by\n`counterPartyId` in the request body). The card number is tokenized\nwith the card provider and never stored in plaintext; only the last four\ndigits are retained and the card number is always returned masked. The\ncounter party must be active.\n",
        "tags": [
          "External Card"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateExternalCardBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateExternalCardResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List external cards",
        "operationId": "v3ListExternalCards",
        "x-mint": {
          "href": "/v3/api-reference/external-card/list-external-cards"
        },
        "description": "List external cards. Supports cursor-based pagination and filtering by user, counter party, and status.",
        "tags": [
          "External Card"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CounterPartyIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/ExternalCardStatusQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListExternalCardsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-cards/{externalCardId}": {
      "get": {
        "summary": "Retrieve an external card",
        "operationId": "v3GetExternalCard",
        "x-mint": {
          "href": "/v3/api-reference/external-card/retrieve-an-external-card"
        },
        "description": "Retrieve details of a specific external card.",
        "tags": [
          "External Card"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalCardIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetExternalCardResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "patch": {
        "summary": "Update an external card",
        "operationId": "v3UpdateExternalCard",
        "x-mint": {
          "href": "/v3/api-reference/external-card/update-an-external-card"
        },
        "description": "Update the nickname on an existing external card.",
        "tags": [
          "External Card"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalCardIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateExternalCardBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateExternalCardResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Delete an external card",
        "operationId": "v3DeleteExternalCard",
        "x-mint": {
          "href": "/v3/api-reference/external-card/delete-an-external-card"
        },
        "description": "Deactivate an external card. The card is marked as inactive and can no longer be used.",
        "tags": [
          "External Card"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalCardIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/DeleteExternalCardResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-card-sessions": {
      "post": {
        "summary": "Create an external card session",
        "operationId": "v3CreateExternalCardSession",
        "x-mint": {
          "href": "/v3/api-reference/external-card/create-an-external-card-session"
        },
        "description": "Create a hosted session for collecting a counter party's card details\nwithout the card number passing through your backend. Returns a `url`\n(containing an embedded, single-use session token) to redirect your end\nuser to, or provide `recipientEmail` to have HIFI email it directly.\n",
        "tags": [
          "External Card"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AddExternalCardSessionBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/GenerateExternalCardSessionResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-card-sessions/{cardSessionId}": {
      "get": {
        "summary": "Retrieve an external card session",
        "operationId": "v3GetExternalCardSession",
        "x-mint": {
          "href": "/v3/api-reference/external-card/retrieve-an-external-card-session"
        },
        "description": "Retrieve the status of an external card session. Restricted to HIFI's\nhosted session UI; not callable with a client API key.\n",
        "tags": [
          "External Card"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CardSessionIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetExternalCardSessionResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "403": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-wallets": {
      "post": {
        "summary": "Add an external wallet",
        "operationId": "v3AddExternalWallet",
        "x-mint": {
          "href": "/v3/api-reference/external-wallet/add-an-external-wallet"
        },
        "description": "Register an external (client-owned) wallet against a counter party. The\n`address` must be valid for the specified `chain`. Re-submitting with the\nsame `referenceId` and matching details returns the existing wallet;\nconflicting details return a conflict error.\n",
        "tags": [
          "External Wallet"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AddExternalWalletBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/AddExternalWalletResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List external wallets",
        "operationId": "v3ListExternalWallets",
        "x-mint": {
          "href": "/v3/api-reference/external-wallet/list-external-wallets"
        },
        "description": "List external wallets. Supports cursor-based pagination and filtering by user or counter party.",
        "tags": [
          "External Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/CounterPartyIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListExternalWalletsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/external-wallets/{externalWalletId}": {
      "get": {
        "summary": "Retrieve an external wallet",
        "operationId": "v3GetExternalWallet",
        "x-mint": {
          "href": "/v3/api-reference/external-wallet/retrieve-an-external-wallet"
        },
        "description": "Retrieve details of a specific external wallet.",
        "tags": [
          "External Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalWalletIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetExternalWalletResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "patch": {
        "summary": "Update an external wallet",
        "operationId": "v3UpdateExternalWallet",
        "x-mint": {
          "href": "/v3/api-reference/external-wallet/update-an-external-wallet"
        },
        "description": "Update the nickname on an existing external wallet.",
        "tags": [
          "External Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalWalletIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateExternalWalletBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateExternalWalletResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Deactivate an external wallet",
        "operationId": "v3DeactivateExternalWallet",
        "x-mint": {
          "href": "/v3/api-reference/external-wallet/deactivate-an-external-wallet"
        },
        "description": "Deactivate an external wallet. Once deactivated it can no longer be used.",
        "tags": [
          "External Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ExternalWalletIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/DeactivateExternalWalletResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/files": {
      "post": {
        "summary": "Upload a file",
        "operationId": "v3UploadFile",
        "x-mint": {
          "href": "/v3/api-reference/file/upload-a-file"
        },
        "description": "Upload a file for use in KYC and other verification flows. The file is sent as\n`multipart/form-data` with a single field named `file`.\n\nConstraints:\n  - Maximum file size is 20 MB.\n  - Only the following MIME types are accepted: `application/pdf`, `image/jpeg`,\n    `image/png`, `image/heic`, `image/tiff`.\n  - Exactly one file may be uploaded per request, in a field named `file`.\n\nThe response returns a public file identifier (`file_...`) that can be referenced\nin subsequent requests.\n",
        "tags": [
          "File"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UploadFileBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UploadFileResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/org-onboarding": {
      "post": {
        "summary": "Generate the initial org-onboarding KYB link",
        "operationId": "v3GenerateOrgOnboardingKycLink",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/generate-the-initial-org-onboarding-kyb-link"
        },
        "description": "Generate the hosted KYB link used to onboard a new client organization\nitself (rather than one of its users). Rails are fixed to `USD`.\n",
        "tags": [
          "KYC Link"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenerateInitialKybLinkBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/GenerateKycLinkResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links": {
      "post": {
        "summary": "Generate a KYC link",
        "operationId": "v3GenerateKycLink",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/generate-a-kyc-link"
        },
        "description": "Generate a hosted KYC/KYB link for a user. Provide `userId` to attach the\nlink to an existing user, or `userType` to have the hosted flow create a\nnew one. Returns a `kycLinkUrl` to redirect your end user to, or provide\n`recipientEmail` to have HIFI email it directly (production only).\n",
        "tags": [
          "KYC Link"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GenerateKycLinkBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/GenerateKycLinkResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}": {
      "get": {
        "summary": "Retrieve a KYC link",
        "operationId": "v3GetKycLink",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/retrieve-a-kyc-link"
        },
        "description": "Retrieve the status and identifying details of a KYC link.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetKycLinkResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/kyc": {
      "get": {
        "summary": "Retrieve KYC/KYB data for a link",
        "operationId": "v3GetKycLinkData",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/retrieve-kyc-kyb-data-for-a-link"
        },
        "description": "Retrieve the current KYC/KYB data collected for the user attached to this KYC link.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetKycLinkKycInfoResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "post": {
        "summary": "Update KYC/KYB data for a link",
        "operationId": "v3UpdateKycLinkData",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/update-kyc-kyb-data-for-a-link"
        },
        "description": "Set KYC/KYB fields on the user attached to this KYC link. Only the fields you provide are changed.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateKycLinkKycInfoBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateKycLinkKycInfoResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/kyc/requirements": {
      "get": {
        "summary": "Retrieve KYC requirements for a link",
        "operationId": "v3GetKycLinkRequirements",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/retrieve-kyc-requirements-for-a-link"
        },
        "description": "Retrieve the fields, documents, and UBOs required to submit this KYC link's rails for verification.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetKycLinkKycRequirementsResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/kyc/status": {
      "get": {
        "summary": "Retrieve KYC status for a link",
        "operationId": "v3GetKycLinkStatus",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/retrieve-kyc-status-for-a-link"
        },
        "description": "Retrieve the KYC verification status for each of this link's rails (or a single rail, via `rail`).",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/KycLinkRailQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetKycLinkKycStatusResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/submissions": {
      "post": {
        "summary": "Submit a KYC link for review",
        "operationId": "v3SubmitKycLink",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/submit-a-kyc-link-for-review"
        },
        "description": "Submit the KYC link's collected profile, questionnaire, documents, and\nUBOs for verification. All requirements returned by\n`GET .../kyc/requirements` must be satisfied.\n",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/SubmitKycLinkResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/kyc/ubos": {
      "post": {
        "summary": "Add a UBO to a link",
        "operationId": "v3AddKycLinkUbo",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/add-a-ubo-to-a-link"
        },
        "description": "Add an ultimate beneficial owner (UBO) to the business user attached to this KYC link.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AddKycLinkUboBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/AddKycLinkUboResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List UBOs for a link",
        "operationId": "v3ListKycLinkUbos",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/list-ubos-for-a-link"
        },
        "description": "List all UBOs attached to the business user for this KYC link.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListKycLinkUbosResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/kyc/ubos/{uboId}": {
      "post": {
        "summary": "Update a UBO for a link",
        "operationId": "v3UpdateKycLinkUbo",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/update-a-ubo-for-a-link"
        },
        "description": "Update an existing UBO. Only the fields you provide are changed.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/KycLinkUboIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateKycLinkUboBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateKycLinkUboResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "Retrieve a UBO for a link",
        "operationId": "v3GetKycLinkUbo",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/retrieve-a-ubo-for-a-link"
        },
        "description": "Retrieve details of a specific UBO.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/KycLinkUboIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetKycLinkUboResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/kyc/documents": {
      "post": {
        "summary": "Add a document to a link",
        "operationId": "v3AddKycLinkDocument",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/add-a-document-to-a-link"
        },
        "description": "Attach a compliance document to the user for this KYC link.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AddKycLinkDocumentBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/AddKycLinkDocumentResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List documents for a link",
        "operationId": "v3ListKycLinkDocuments",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/list-documents-for-a-link"
        },
        "description": "List all compliance documents attached to the user for this KYC link.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListKycLinkDocumentsResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/kyc/documents/{documentId}": {
      "post": {
        "summary": "Update a document for a link",
        "operationId": "v3UpdateKycLinkDocument",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/update-a-document-for-a-link"
        },
        "description": "Update an existing compliance document. Only the fields you provide are changed.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/KycLinkDocumentIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateKycLinkDocumentBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateKycLinkDocumentResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "Retrieve a document for a link",
        "operationId": "v3GetKycLinkDocument",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/retrieve-a-document-for-a-link"
        },
        "description": "Retrieve details of a specific compliance document.",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/KycLinkDocumentIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetKycLinkDocumentResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/kyc-links/{kycLinkId}/files": {
      "post": {
        "summary": "Upload a file for a link",
        "operationId": "v3UploadKycLinkFile",
        "x-mint": {
          "href": "/v3/api-reference/kyc-link/upload-a-file-for-a-link"
        },
        "description": "Upload a file (e.g. an identity document image) scoped to this KYC link,\nfor later reference when adding a compliance document. Same constraints\nas `POST /v3/files`.\n",
        "tags": [
          "KYC Link"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/KycLinkIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UploadFileBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UploadFileResponse"
          },
          "400": {
            "$ref": "#/components/responses/KycLinkErrorResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/id-mappings": {
      "post": {
        "summary": "Map v2 IDs to v3 IDs",
        "operationId": "v3MapIds",
        "x-mint": {
          "href": "/v3/api-reference/migration/map-v2-ids-to-v3-ids"
        },
        "description": "Resolve up to 1000 v2 resource UUIDs to their corresponding v3 public IDs.\nEntries that cannot be resolved (unknown ID, or a `resourceType` without a\nmigration mapping) are returned with `v3Id: null` and `mapped: false`\nrather than causing the whole request to fail.\n\nThis is a `GET` request with a JSON request body; ensure your HTTP client\nand any intermediate proxies are configured to send a body with `GET`.\n",
        "tags": [
          "Migration"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/IdMappingBatchBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/IdMappingResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/offramps": {
      "post": {
        "summary": "Create an offramp",
        "operationId": "v3CreateOfframp",
        "x-mint": {
          "href": "/v3/api-reference/offramp/create-an-offramp"
        },
        "description": "Create an offramp transaction that converts stablecoins into fiat and pays out to a\nbeneficiary bank account or card.\n\nThe `source` must reference exactly one of `walletId` (a custodial HIFI wallet) or\n`externalWalletId`. The `destination` must reference exactly one of `externalAccountId`\nor `externalCardId`. Exactly one of `source.amount` or `destination.amount` must be\nprovided; the other side is computed from the conversion rate.\n\nProvide a unique `requestId` per offramp to guarantee idempotency; reusing a `requestId`\nreturns a conflict.\n",
        "tags": [
          "Offramp"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateOfframpBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateOfframpResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List offramps",
        "operationId": "v3ListOfframps",
        "x-mint": {
          "href": "/v3/api-reference/offramp/list-offramps"
        },
        "description": "List all offramp transactions for the authenticated client. Supports cursor-based pagination and filtering by source user, destination user, and status.",
        "tags": [
          "Offramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/OfframpSourceUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OfframpDestinationUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OfframpStatusQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListOfframpsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/offramps/rates": {
      "get": {
        "summary": "Retrieve an offramp rate",
        "operationId": "v3GetOfframpRate",
        "x-mint": {
          "href": "/v3/api-reference/offramp/retrieve-an-offramp-rate"
        },
        "description": "Retrieve the current conversion rate from a source stablecoin to a destination fiat currency.",
        "tags": [
          "Offramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OfframpRateSourceCurrencyQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OfframpRateDestinationCurrencyQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetOfframpRateResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/offramps/{offrampId}": {
      "get": {
        "summary": "Retrieve an offramp",
        "operationId": "v3GetOfframp",
        "x-mint": {
          "href": "/v3/api-reference/offramp/retrieve-an-offramp"
        },
        "description": "Retrieve details of a specific offramp transaction.",
        "tags": [
          "Offramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OfframpIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetOfframpResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/offramps/{offrampId}/quote/accept": {
      "post": {
        "summary": "Accept an offramp quote",
        "operationId": "v3AcceptOfframpQuote",
        "x-mint": {
          "href": "/v3/api-reference/offramp/accept-an-offramp-quote"
        },
        "description": "Accept the open quote for an offramp transaction to proceed with the transfer.",
        "tags": [
          "Offramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OfframpIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/AcceptOfframpQuoteResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/offramps/{offrampId}/cancel": {
      "post": {
        "summary": "Cancel an offramp",
        "operationId": "v3CancelOfframp",
        "x-mint": {
          "href": "/v3/api-reference/offramp/cancel-an-offramp"
        },
        "description": "Cancel an offramp that is in review. Only offramps with status `IN_REVIEW` can be cancelled.",
        "tags": [
          "Offramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OfframpIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/CancelOfframpResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/onramps": {
      "post": {
        "summary": "Create an onramp",
        "operationId": "v3CreateOnramp",
        "x-mint": {
          "href": "/v3/api-reference/onramp/create-an-onramp"
        },
        "description": "Create an onramp transaction converting fiat to stablecoins. The source funds\neither from a user's own account (`source.userId` + `source.transferType`) or\nfrom a saved external account (`source.externalAccountId`). The destination\ndelivers crypto to either a HIFI-hosted wallet (`destination.walletId`) or a\nsaved external wallet (`destination.externalWalletId`). Exactly one amount\n(`source.amount` or `destination.amount`) must be provided.\n",
        "tags": [
          "Onramp"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateOnrampBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateOnrampResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List onramps",
        "operationId": "v3ListOnramps",
        "x-mint": {
          "href": "/v3/api-reference/onramp/list-onramps"
        },
        "description": "List all onramps for the authenticated client. Supports cursor-based pagination and filtering by source user, destination user, and status.",
        "tags": [
          "Onramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/OnrampSourceUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OnrampDestinationUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OnrampStatusQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListOnrampsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/onramps/rates": {
      "get": {
        "summary": "Get an onramp rate",
        "operationId": "v3GetOnrampRate",
        "x-mint": {
          "href": "/v3/api-reference/onramp/get-an-onramp-rate"
        },
        "description": "Retrieve the conversion rate between a source fiat currency and a destination crypto currency.",
        "tags": [
          "Onramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OnrampRateSourceCurrencyQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OnrampRateDestinationCurrencyQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OnrampRateTransferTypeQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetOnrampRatesResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/onramps/{onrampId}": {
      "get": {
        "summary": "Retrieve an onramp",
        "operationId": "v3GetOnramp",
        "x-mint": {
          "href": "/v3/api-reference/onramp/retrieve-an-onramp"
        },
        "description": "Retrieve details of a specific onramp transaction.",
        "tags": [
          "Onramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OnrampIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetOnrampResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/onramps/{onrampId}/quote/accept": {
      "post": {
        "summary": "Accept an onramp quote",
        "operationId": "v3AcceptOnrampQuote",
        "x-mint": {
          "href": "/v3/api-reference/onramp/accept-an-onramp-quote"
        },
        "description": "Accept the current quote for an onramp and proceed with the transfer.",
        "tags": [
          "Onramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OnrampIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/AcceptOnrampQuoteResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/onramps/{onrampId}/cancel": {
      "post": {
        "summary": "Cancel an onramp",
        "operationId": "v3CancelOnramp",
        "x-mint": {
          "href": "/v3/api-reference/onramp/cancel-an-onramp"
        },
        "description": "Cancel an onramp that is in review. Only onramps with status `IN_REVIEW` can be cancelled.",
        "tags": [
          "Onramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OnrampIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/CancelOnrampResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/onramps/{onrampId}/simulate-deposits": {
      "post": {
        "summary": "Simulate an onramp deposit",
        "operationId": "v3SimulateOnrampDeposit",
        "x-mint": {
          "href": "/v3/api-reference/onramp/simulate-an-onramp-deposit"
        },
        "description": "Simulate an inbound fiat deposit against an onramp. Available in the sandbox\nenvironment only; unsupported for onramps not routed through a rail that\nsupports simulation.\n",
        "tags": [
          "Onramp"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OnrampIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SimulateOnrampDepositBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/SimulateOnrampDepositResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/orchestration-addresses": {
      "post": {
        "summary": "Create an orchestration address",
        "operationId": "v3CreateOrchestrationAddress",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/create-an-orchestration-address"
        },
        "tags": [
          "Orchestration Address"
        ],
        "description": "Create a persistent address that automatically offramps supported stablecoin deposits.",
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateOrchestrationAddressBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationAddressResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List orchestration addresses",
        "operationId": "v3ListOrchestrationAddresses",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/list-orchestration-addresses"
        },
        "tags": [
          "Orchestration Address"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OrchestrationUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationAddressAllRecordsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/orchestration-addresses/{orchestrationAddressId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/OrchestrationAddressIdPathParameter"
        }
      ],
      "get": {
        "summary": "Retrieve an orchestration address",
        "operationId": "v3GetOrchestrationAddress",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/list-orchestration-addresses"
        },
        "tags": [
          "Orchestration Address"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationAddressResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "patch": {
        "summary": "Update an orchestration address",
        "operationId": "v3UpdateOrchestrationAddress",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/update-an-orchestration-address"
        },
        "tags": [
          "Orchestration Address"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateOrchestrationAddressBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationAddressResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Deactivate an orchestration address",
        "operationId": "v3DeactivateOrchestrationAddress",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/deactivate-an-orchestration-address"
        },
        "tags": [
          "Orchestration Address"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/DeactivateOrchestrationAddressBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationAddressResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/orchestration-addresses/deposits": {
      "get": {
        "summary": "List orchestration deposits",
        "operationId": "v3ListOrchestrationDeposits",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/list-orchestration-deposits"
        },
        "tags": [
          "Orchestration Address"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OrchestrationAddressIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/OrchestrationDepositStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/OrchestrationBatchIdQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationDepositAllRecordsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/orchestration-addresses/deposits/{orchestrationDepositId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/OrchestrationDepositIdPathParameter"
        }
      ],
      "get": {
        "summary": "Retrieve an orchestration deposit",
        "operationId": "v3GetOrchestrationDeposit",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/list-orchestration-deposits"
        },
        "tags": [
          "Orchestration Address"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationDepositResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/orchestration-addresses/batches": {
      "get": {
        "summary": "List orchestration batches",
        "operationId": "v3ListOrchestrationBatches",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/list-orchestration-batches"
        },
        "tags": [
          "Orchestration Address"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OrchestrationAddressIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/OrchestrationBatchStatusQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationBatchAllRecordsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/orchestration-addresses/batches/{orchestrationBatchId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/OrchestrationBatchIdPathParameter"
        }
      ],
      "get": {
        "summary": "Retrieve an orchestration batch",
        "operationId": "v3GetOrchestrationBatch",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/list-orchestration-batches"
        },
        "tags": [
          "Orchestration Address"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationBatchResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/orchestration-addresses/{orchestrationAddressId}/orchestrate": {
      "parameters": [
        {
          "$ref": "#/components/parameters/OrchestrationAddressIdPathParameter"
        }
      ],
      "post": {
        "summary": "Trigger orchestration",
        "operationId": "v3TriggerOrchestration",
        "x-mint": {
          "href": "/v3/api-reference/orchestration-address/trigger-orchestration"
        },
        "tags": [
          "Orchestration Address"
        ],
        "description": "Manually trigger settlement for the address selected by the URL.",
        "responses": {
          "200": {
            "$ref": "#/components/responses/OrchestrationManualTriggerResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/rfis": {
      "get": {
        "summary": "List RFIs",
        "operationId": "v3ListRfis",
        "x-mint": {
          "href": "/v3/api-reference/rfi/list-rfis",
          "title": "List RFIs"
        },
        "description": "List the requests for information (RFIs) compliance has raised against your users. An RFI is raised either during onboarding, against the user's verification, or against a single transfer, which stays held until the request is resolved.\n\nIf you would rather collect the reply programmatically, submit it through the [Submit a response to an RFI](https://docs.hifi.com/v3/api-reference/rfi/submit-a-response-to-an-rfi) endpoint instead.\n\nPass `transferId` to find the request holding a specific onramp or offramp.\n",
        "tags": [
          "RFI"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/RfiStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/RfiKindQueryParameter"
          },
          {
            "$ref": "#/components/parameters/RfiUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/RfiTransferIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/RfiLimitParameter"
          },
          {
            "$ref": "#/components/parameters/RfiOffsetParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListRfisResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/rfis/{rfiId}/submissions": {
      "post": {
        "summary": "Submit a response to an RFI",
        "operationId": "v3SubmitRfiResponse",
        "x-mint": {
          "href": "/v3/api-reference/rfi/submit-a-response-to-an-rfi",
          "title": "Submit a response to an RFI"
        },
        "description": "Answer the current round of a request for information. Each entry in `items` replies to one request item by its `requestItemId` with exactly one of `fileId` or `answerText`, and any file must be uploaded through the files endpoint first. Every item marked `required` must be answered, and a round accepts only one submission.",
        "tags": [
          "RFI"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/RfiIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubmitRfiBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/SubmitRfiResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/settlement-rules": {
      "post": {
        "summary": "Create a settlement rule",
        "operationId": "v3CreateSettlementRule",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/create-a-settlement-rule"
        },
        "description": "Create a reusable settlement rule that splits incoming virtual-account\ndeposits across destination wallets by percentage or fixed amount.\n",
        "tags": [
          "Virtual Account"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateSettlementRuleBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateSettlementRuleResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List settlement rules",
        "operationId": "v3ListSettlementRules",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/list-settlement-rules"
        },
        "description": "List all settlement rules for the authenticated profile.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListSettlementRulesResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/settlement-rules/{settlementRuleId}": {
      "get": {
        "summary": "Retrieve a settlement rule",
        "operationId": "v3GetSettlementRule",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/retrieve-a-settlement-rule"
        },
        "description": "Retrieve a specific settlement rule.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SettlementRuleIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetSettlementRuleResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "patch": {
        "summary": "Update a settlement rule",
        "operationId": "v3UpdateSettlementRule",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/update-a-settlement-rule"
        },
        "description": "Update the rules, chain, or fee handling of a settlement rule.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SettlementRuleIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateSettlementRuleBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateSettlementRuleResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Delete a settlement rule",
        "operationId": "v3DeleteSettlementRule",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/delete-a-settlement-rule"
        },
        "description": "Delete a settlement rule. It can no longer be applied to virtual accounts.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SettlementRuleIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/DeleteSettlementRuleResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/{virtualAccountId}/settlement-rules": {
      "put": {
        "summary": "Apply a settlement rule to a virtual account",
        "operationId": "v3ApplyVirtualAccountSettlementRule",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/apply-a-settlement-rule-to-a-virtual-account"
        },
        "description": "Attach a settlement rule to a virtual account so its deposits are split accordingly.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/VirtualAccountIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ApplySettlementRuleBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetVirtualAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Remove the settlement rule from a virtual account",
        "operationId": "v3RemoveVirtualAccountSettlementRule",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/remove-the-settlement-rule-from-a-virtual-account"
        },
        "description": "Detach the settlement rule currently applied to a virtual account.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/VirtualAccountIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetVirtualAccountResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/swaps": {
      "post": {
        "summary": "Create a swap",
        "operationId": "v3CreateSwap",
        "x-mint": {
          "href": "/v3/api-reference/token-swap/create-a-swap"
        },
        "description": "Create a token swap. A swap exchanges one stablecoin for another between a source\nwallet and a destination wallet (owned by a user or an external wallet).\n\nThe source and destination `currency` must be different. Provide exactly one of\n`source.amount` or `destination.amount` — the other side is derived from the quote.\nProvide exactly one of `destination.walletId` or `destination.externalWalletId`.\n\nDepending on the pricing model, the swap may be created directly or returned in an\n`OPEN_QUOTE` state that must be accepted before execution.\n",
        "tags": [
          "Token Swap"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateSwapBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateSwapResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List swaps",
        "operationId": "v3ListSwaps",
        "x-mint": {
          "href": "/v3/api-reference/token-swap/list-swaps"
        },
        "description": "List all swaps. Supports cursor-based pagination and filtering by status, source user, and destination user.",
        "tags": [
          "Token Swap"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/SwapStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/SwapSourceUserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/SwapDestinationUserIdQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListSwapsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/swaps/{swapId}": {
      "get": {
        "summary": "Retrieve a swap",
        "operationId": "v3GetSwap",
        "x-mint": {
          "href": "/v3/api-reference/token-swap/retrieve-a-swap"
        },
        "description": "Retrieve details of a specific swap.",
        "tags": [
          "Token Swap"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SwapIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetSwapResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/swaps/{swapId}/quote/accept": {
      "post": {
        "summary": "Accept a swap quote",
        "operationId": "v3AcceptSwapQuote",
        "x-mint": {
          "href": "/v3/api-reference/token-swap/accept-a-swap-quote"
        },
        "description": "Accept the open quote for a swap and begin execution. The swap must be in\n`OPEN_QUOTE` status. If the source wallet has insufficient balance, the swap\ntransitions to `QUOTE_FAILED`; otherwise it transitions to `CREATED` and is queued\nfor execution.\n",
        "tags": [
          "Token Swap"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SwapIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/AcceptSwapResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/swaps/{swapId}/cancel": {
      "post": {
        "summary": "Cancel a swap",
        "operationId": "v3CancelSwap",
        "x-mint": {
          "href": "/v3/api-reference/token-swap/cancel-a-swap"
        },
        "description": "Request cancellation of an eligible direct USDC/USDT swap before execution reaches its point of no return.",
        "tags": [
          "Token Swap"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SwapIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/CancelSwapResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/transfer-approvals/{transferApprovalId}/approve": {
      "post": {
        "summary": "Approve a transfer",
        "operationId": "v3ApproveTransfer",
        "x-mint": {
          "href": "/v3/api-reference/transfer-approval/approve-a-transfer"
        },
        "description": "Approve a pending transfer approval. Requires an admin organization role.\nReturns a conflict error if the approval has already been resolved.\n",
        "tags": [
          "Transfer Approval"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/TransferApprovalIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransferApprovalApproveBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ApproveTransferApprovalResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/transfer-approvals/{transferApprovalId}/reject": {
      "post": {
        "summary": "Reject a transfer",
        "operationId": "v3RejectTransfer",
        "x-mint": {
          "href": "/v3/api-reference/transfer-approval/reject-a-transfer"
        },
        "description": "Reject a pending transfer approval. Requires an admin organization role.\nReturns a conflict error if the approval has already been resolved.\n",
        "tags": [
          "Transfer Approval"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/TransferApprovalIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransferApprovalRejectBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/RejectTransferApprovalResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "422": {
            "$ref": "#/components/responses/ResourceNotEligibleResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/transfer-approvals": {
      "get": {
        "summary": "List transfer approvals",
        "operationId": "v3ListTransferApprovals",
        "x-mint": {
          "href": "/v3/api-reference/transfer-approval/list-transfer-approvals"
        },
        "description": "List transfer approvals for the authenticated profile. Supports cursor-based pagination and filtering by status.",
        "tags": [
          "Transfer Approval"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/TransferApprovalStatusQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListTransferApprovalsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/transfer-approvals/{transferApprovalId}": {
      "get": {
        "summary": "Retrieve a transfer approval",
        "operationId": "v3GetTransferApproval",
        "x-mint": {
          "href": "/v3/api-reference/transfer-approval/retrieve-a-transfer-approval"
        },
        "description": "Retrieve details of a specific transfer approval.",
        "tags": [
          "Transfer Approval"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/TransferApprovalIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetTransferApprovalResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/tos-link": {
      "post": {
        "summary": "Generate a terms of service link",
        "operationId": "v3GenerateTosLink",
        "x-mint": {
          "href": "/v3/api-reference/user/generate-a-terms-of-service-link"
        },
        "description": "Generate a hosted Terms of Service link that can be used before creating a user.",
        "tags": [
          "User"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateToSLinkBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ToSLinkObjectResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/tos-link/{signedAgreementId}": {
      "get": {
        "summary": "Retrieve a terms of service link",
        "operationId": "v3GetTosLink",
        "x-mint": {
          "href": "/v3/api-reference/user/retrieve-a-terms-of-service-link"
        },
        "description": "Retrieve the status of a Terms of Service link.",
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SignedAgreementIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ToSLinkRecordStatusResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/tos-link/{signedAgreementId}/accept": {
      "post": {
        "summary": "Accept a whitelisted terms of service link",
        "operationId": "v3AcceptWhitelistedTosLink",
        "x-mint": {
          "href": "/v3/api-reference/user/accept-a-whitelisted-terms-of-service-link"
        },
        "description": "Accept a Terms of Service link on behalf of a whitelisted signer.",
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SignedAgreementIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ToSLinkRecordStatusResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/users": {
      "post": {
        "summary": "Create a user",
        "operationId": "v3CreateUser",
        "x-mint": {
          "href": "/v3/api-reference/user/create-a-user"
        },
        "description": "Create a new Hifi user.",
        "tags": [
          "User"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UserCreateBody"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/UserObjectResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List users",
        "operationId": "v3ListUsers",
        "x-mint": {
          "href": "/v3/api-reference/user/list-users"
        },
        "description": "List users for the authenticated profile.",
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserTypeParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/UserListResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/users/{userId}": {
      "get": {
        "summary": "Retrieve a user",
        "operationId": "v3GetUser",
        "x-mint": {
          "href": "/v3/api-reference/user/retrieve-a-user"
        },
        "description": "Retrieve an existing Hifi user.",
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/UserIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/UserObjectResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts": {
      "post": {
        "summary": "Create a virtual account",
        "operationId": "v3CreateVirtualAccount",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/create-a-virtual-account"
        },
        "description": "Create a virtual account for a user. A virtual account provides bank\ndetails that, when funded via fiat, automatically onramp the deposit into\na stablecoin delivered to the configured wallet.\n\nThe `source` combination of `currency`, `country`, and `transferType` must\nbe a supported pair. Provide exactly one of `destination.walletId` or\n`destination.externalWalletId`.\n",
        "tags": [
          "Virtual Account"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateVirtualAccountBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateVirtualAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List virtual accounts",
        "operationId": "v3ListVirtualAccounts",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/list-virtual-accounts"
        },
        "description": "List all virtual accounts for a user. Supports cursor-based pagination and filtering by status.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/VirtualAccountStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListVirtualAccountsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/{virtualAccountId}": {
      "get": {
        "summary": "Retrieve a virtual account",
        "operationId": "v3GetVirtualAccount",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/retrieve-a-virtual-account"
        },
        "description": "Retrieve details of a specific virtual account, including deposit instructions and received deposits.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/VirtualAccountIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetVirtualAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Deactivate a virtual account",
        "operationId": "v3DeactivateVirtualAccount",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/deactivate-a-virtual-account"
        },
        "description": "Deactivate a virtual account. The account is marked inactive and can no longer receive deposits.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/VirtualAccountIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/DeleteVirtualAccountResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/{virtualAccountId}/simulate-deposits": {
      "post": {
        "summary": "Simulate a virtual account deposit",
        "operationId": "v3SimulateVirtualAccountDeposit",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/simulate-a-virtual-account-deposit"
        },
        "description": "Sandbox only. Simulates an inbound fiat deposit into the virtual account\nso the resulting onramp flow can be tested end to end.\n",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/VirtualAccountIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SimulateVirtualAccountDepositBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/SimulateVirtualAccountDepositResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/v3-migration": {
      "post": {
        "summary": "Migrate virtual accounts to v3",
        "operationId": "v3MigrateVirtualAccounts",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/migrate-virtual-accounts-to-v3"
        },
        "description": "Migrate v2 virtual accounts to v3 and return their v3 public IDs.\nVirtual accounts that cannot be found are returned with `v3Id: null` and\n`migrated: false` rather than causing the whole request to fail.\nMigrating an account that is already on v3 is safe and returns the same\n`v3Id`.\n",
        "tags": [
          "Virtual Account"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/MigrateVirtualAccountsBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/MigrateVirtualAccountsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/routes": {
      "get": {
        "summary": "List virtual account routes",
        "operationId": "v3ListVirtualAccountRoutes",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/list-virtual-account-routes"
        },
        "description": "List all supported virtual account routes. Supports cursor-based pagination and filtering by status, fiat currency, country, and transfer type.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/VaRouteStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/VaRouteFiatCurrencyQueryParameter"
          },
          {
            "$ref": "#/components/parameters/VaRouteCountryQueryParameter"
          },
          {
            "$ref": "#/components/parameters/VaRouteTransferTypeQueryParameter"
          },
          {
            "$ref": "#/components/parameters/UserIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/VaRouteExpandQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListVirtualAccountRoutesResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/virtual-accounts/routes/{vaRouteId}": {
      "get": {
        "summary": "Retrieve a virtual account route",
        "operationId": "v3GetVirtualAccountRoute",
        "x-mint": {
          "href": "/v3/api-reference/virtual-account/retrieve-a-virtual-account-route"
        },
        "description": "Retrieve details of a specific virtual account route.",
        "tags": [
          "Virtual Account"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/VaRouteIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetVirtualAccountRouteResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets": {
      "post": {
        "summary": "Create wallets",
        "operationId": "v3CreateWallets",
        "x-mint": {
          "href": "/v3/api-reference/wallet/create-wallets"
        },
        "description": "Provision HIFI custodial wallets for a user across one or more chains.\nA user may hold at most one wallet per chain; requesting a chain the user\nalready has a wallet on returns a conflict error.\n",
        "tags": [
          "Wallet"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateWalletsBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateWalletsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List wallets",
        "operationId": "v3ListWallets",
        "x-mint": {
          "href": "/v3/api-reference/wallet/list-wallets"
        },
        "description": "List all HIFI-provisioned wallets for a user.",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^user_[A-Za-z0-9]+$"
            },
            "description": "Public ID of the user to list wallets for."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListWalletsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/{walletId}": {
      "get": {
        "summary": "Retrieve a wallet",
        "operationId": "v3GetWallet",
        "x-mint": {
          "href": "/v3/api-reference/wallet/retrieve-a-wallet"
        },
        "description": "Retrieve details of a specific HIFI-provisioned wallet.",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WalletIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetWalletResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/{walletId}/balance": {
      "get": {
        "summary": "Retrieve a wallet balance",
        "operationId": "v3GetWalletBalance",
        "x-mint": {
          "href": "/v3/api-reference/wallet/retrieve-a-wallet-balance"
        },
        "description": "Retrieve the balance of a wallet for a specific currency. Use `GAS` to\nretrieve the chain's native gas token balance. Returns a not-eligible\nerror if the currency is not supported on the wallet's chain.\n",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WalletIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/WalletBalanceCurrencyQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetWalletBalanceResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/deposits": {
      "get": {
        "summary": "List wallet deposits",
        "operationId": "v3ListWalletDeposits",
        "x-mint": {
          "href": "/v3/api-reference/wallet/list-wallet-deposits"
        },
        "description": "List inbound deposits received by a specific HIFI-provisioned wallet.\n`walletId` and `currency` are required. Supports cursor-based pagination\nand filtering by status, minimum amount, and creation time.\n",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WalletIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/WalletDepositCurrencyQueryParameter"
          },
          {
            "$ref": "#/components/parameters/WalletDepositStatusQueryParameter"
          },
          {
            "$ref": "#/components/parameters/WalletDepositMinAmountQueryParameter"
          },
          {
            "$ref": "#/components/parameters/WalletDepositCreatedAfterQueryParameter"
          },
          {
            "$ref": "#/components/parameters/WalletDepositCreatedBeforeQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListWalletDepositsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/deposits/{depositId}": {
      "get": {
        "summary": "Retrieve a wallet deposit",
        "operationId": "v3GetWalletDeposit",
        "x-mint": {
          "href": "/v3/api-reference/wallet/retrieve-a-wallet-deposit"
        },
        "description": "Retrieve details of a specific wallet deposit.",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/DepositIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetWalletDepositResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/offers": {
      "get": {
        "summary": "List offers",
        "operationId": "v3ListWalletOffers",
        "x-mint": {
          "href": "/v3/api-reference/wallet/list-offers"
        },
        "description": "List Canton transfer offers directed at a HIFI-provisioned Canton wallet.\n`walletId` is required. Supports pagination by limit and filtering by\ncreation time.\n",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WalletIdQueryParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/WalletOfferCreatedAfterQueryParameter"
          },
          {
            "$ref": "#/components/parameters/WalletOfferCreatedBeforeQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListWalletOffersResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/offers/{offerId}": {
      "get": {
        "summary": "Retrieve an offer",
        "operationId": "v3GetWalletOffer",
        "x-mint": {
          "href": "/v3/api-reference/wallet/retrieve-an-offer"
        },
        "description": "Retrieve details of a specific Canton offer.",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OfferIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetWalletOfferResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/offers/{offerId}/accept": {
      "post": {
        "summary": "Accept an offer",
        "operationId": "v3AcceptWalletOffer",
        "x-mint": {
          "href": "/v3/api-reference/wallet/accept-an-offer"
        },
        "description": "Accept a Canton transfer offer. The offer must be in `RECEIVED` status and\nnot expired.\n",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OfferIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/AcceptWalletOfferResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/wallets/offers/{offerId}/reject": {
      "post": {
        "summary": "Reject an offer",
        "operationId": "v3RejectWalletOffer",
        "x-mint": {
          "href": "/v3/api-reference/wallet/reject-an-offer"
        },
        "description": "Reject a Canton transfer offer. The offer must be in `RECEIVED` status and\nnot expired.\n",
        "tags": [
          "Wallet"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/OfferIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/RejectWalletOfferResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/webhook-endpoints/event-types": {
      "get": {
        "summary": "List webhook event types",
        "operationId": "v3ListWebhookEventTypes",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/list-webhook-event-types"
        },
        "description": "List all event types that a webhook endpoint can subscribe to.",
        "tags": [
          "Webhook Endpoint"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListWebhookEventTypesResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/webhook-endpoints": {
      "post": {
        "summary": "Create a webhook endpoint",
        "operationId": "v3CreateWebhookEndpoint",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/create-a-webhook-endpoint"
        },
        "description": "Register a new webhook endpoint. HIFI delivers event notifications to the\nendpoint's `url` for every event type listed in `subscriptions`.\n\nA signing secret is generated on creation and returned **once** in the\n`signingSecret` field of this response only. Use it to verify the\nsignature of incoming webhook deliveries. It is not returned by any other\nendpoint, so store it securely.\n\nA profile may have at most 16 active webhook endpoints.\n",
        "tags": [
          "Webhook Endpoint"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreateWebhookEndpointBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CreateWebhookEndpointResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "409": {
            "$ref": "#/components/responses/ConflictResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "get": {
        "summary": "List webhook endpoints",
        "operationId": "v3ListWebhookEndpoints",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/list-webhook-endpoints"
        },
        "description": "List all webhook endpoints for the authenticated profile. Cursor-paginated.",
        "tags": [
          "Webhook Endpoint"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ListWebhookEndpointsResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/webhook-endpoints/{webhookEndpointId}": {
      "get": {
        "summary": "Retrieve a webhook endpoint",
        "operationId": "v3GetWebhookEndpoint",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/retrieve-a-webhook-endpoint"
        },
        "description": "Retrieve details of a specific webhook endpoint. The signing secret is not returned.",
        "tags": [
          "Webhook Endpoint"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookEndpointIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetWebhookEndpointResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "patch": {
        "summary": "Update a webhook endpoint",
        "operationId": "v3UpdateWebhookEndpoint",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/update-a-webhook-endpoint"
        },
        "description": "Update a webhook endpoint. Any provided fields replace the existing values.\nWhen `subscriptions` is provided it fully replaces the current set of\nsubscribed event types. The signing secret is never returned or rotated by\nthis endpoint.\n",
        "tags": [
          "Webhook Endpoint"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookEndpointIdPathParameter"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateWebhookEndpointBody"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/UpdateWebhookEndpointResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      },
      "delete": {
        "summary": "Delete a webhook endpoint",
        "operationId": "v3DeleteWebhookEndpoint",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/delete-a-webhook-endpoint"
        },
        "description": "Disable a webhook endpoint. The endpoint is marked as disabled and no longer receives event deliveries.",
        "tags": [
          "Webhook Endpoint"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookEndpointIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/DeleteWebhookEndpointResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/webhook-endpoints/{webhookEndpointId}/history": {
      "get": {
        "summary": "Retrieve webhook delivery history",
        "operationId": "v3GetWebhookDeliveryHistory",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/retrieve-webhook-delivery-history"
        },
        "description": "List delivery attempts for a webhook endpoint. Supports cursor-based pagination and filtering by status.",
        "tags": [
          "Webhook Endpoint"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookEndpointIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/LimitParameter"
          },
          {
            "$ref": "#/components/parameters/StartingAfterParameter"
          },
          {
            "$ref": "#/components/parameters/EndingBeforeParameter"
          },
          {
            "$ref": "#/components/parameters/WebhookDeliveryStatusQueryParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/GetWebhookEndpointHistoryResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequestResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    },
    "/v3/webhook-endpoints/{webhookEndpointId}/events/{webhookEventId}/resend": {
      "post": {
        "summary": "Resend a webhook event",
        "operationId": "v3ResendWebhookEvent",
        "x-mint": {
          "href": "/v3/api-reference/webhook-endpoint/resend-a-webhook-event"
        },
        "description": "Re-queue a previously delivered webhook event for redelivery to its endpoint.",
        "tags": [
          "Webhook Endpoint"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookEndpointIdPathParameter"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdPathParameter"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ResendWebhookEventResponse"
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedResponse"
          },
          "404": {
            "$ref": "#/components/responses/NotFoundResponse"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerErrorResponse"
          }
        }
      }
    }
  }
}