{
  "openapi": "3.0.4",
  "info": {
    "title": "Hoppacard API",
    "description": "Comprehensive API for Hoppacard Platform supporting user management, payments, cards, transfers, KYC, and tier management. This API provides secure endpoints for financial services integration.\n\n## Changelog\n\n### 2026-08-24\n- **Crypto Exchange API Group**: Renamed the Scalar group from Crypto Virtual Accounts to Crypto Exchange without changing the existing `/api/v2/crypto-virtual-accounts` route prefix.\n- **Transfer Workflow Endpoints**: Added public exchange quote/accept, transfer list/status, and quote/funds decision operations so integrations can complete both Interlace-to-EqualsMoney and EqualsMoney-to-Interlace flows.\n\n### 2026-08-19\n- **EqualsMoney RFI Document Upload**: `POST /api/v2/users/{userId}/kyc/equalsmoney/documents` now accepts up to 10 PDF, JPEG, or PNG files through repeated `Files` multipart fields. Multiple inputs are combined in request order and sent to EqualsMoney as one PDF. The legacy singular `File` field remains supported.\n\n### 2026-08-10\n- **New Endpoint**: Added `POST /api/v2/crypto-virtual-accounts/equalsmoney-deposits` and its status endpoint for asynchronous crypto-to-fiat deposits through BoomFi followed by an EqualsMoney budget credit.\n- **Interlace-to-EqualsMoney Update**: The initiate/confirm flow uses the user's BoomFi organisation, accepts a short-lived account-to-account quote after deposit, and credits the target EqualsMoney budget after BoomFi settlement completes.\n- **BPay Card Load Documentation**: Documented `POST /api/v2/card-loads/crypto`, its status endpoint, idempotency requirement, supported settlement currencies, and BoomFi chain IDs.\n- **EqualsMoney-to-Interlace Update**: `POST /api/v2/crypto-virtual-accounts/equals-to-interlace` now uses BoomFi fiat funding instructions, webhook-driven re-quoting, ±0.5% automatic execution, and a final crypto payout to Interlace.\n\n### 2026-08-05\n- **Breaking KYC Validation Change**: KYC token, URL, verification, and reusable-SumSub requests now accept `Ssn`; it is required as exactly 9 digits when the effective nationality is `USA`/`US`. The value is stored in SumSub as `tin` and forwarded to Interlace as `ssn`.\n\n### 2026-07-22\n- **New API Group**: Added API-key-authenticated Merchant of Record operations under `/api/v2/mor/public` for KYB onboarding, company cardholders, simple users, batch card ordering, card assignment and funding, card balances and secure widgets, and merchant wallets.\n\n### 2026-07-20\n- **Card Creation Validation Update**: `POST /api/v2/cards` now documents `UserId`, `CardTypeId`, and `Phone` as required while `ExternalCardId` remains optional. Missing or invalid required arguments return `400 Bad Request` instead of falling through to a `404 Not Found` lookup response.\n\n### 2026-07-15\n- **Breaking Validation Change**: `POST /api/v2/cards/topup` now accepts USD amounts from `5.00` through `250000.00`. Out-of-range requests return `INVALID_AMOUNT`, and the response configuration reports the same minimum and maximum.\n- **Fee Calculation Update**: Percentage-based card top-up fees and costs are now rounded up to the nearest USD cent before the net card load is calculated.\n- **Card Status Update**: Cancelled cards now consistently return `CANCELLED`. `GET /api/v2/cards/{cardId}` returns sanitized local details for a cancelled card when the provider no longer exposes it, instead of failing with a server error.\n- **Webhook Update**: The `card.deleted` outbound webhook now includes `newStatus: \"CANCELLED\"`.\n\n### 2026-07-14\n- **Response Schema Update**: `Country` in public payee address objects is now nullable because some provider responses do not supply it.\n- **Error Response Update**: Card-detail requests for a missing user/card or a user outside the authenticated company now return the documented `404` or `401` response instead of a generic server error.\n\n### 2026-07-13\n- **Request Update**: `POST /api/v2/banking/payouts/initiate` and `POST /api/v2/banking/payouts` now accept optional `FromCurrency`. Supply it when an EqualsMoney budget holds multiple currencies; when omitted, `Currency` remains the funding-currency fallback.\n- **Transaction Response Update**: `GET /api/v2/transactions/{id}` now refreshes the provider status before responding and includes `UserId`, `RelatedCardTransactionId`, `FeeAmount`, `FeeCurrency`, and parsed `Metadata` where available.\n\n### 2026-07-10\n- **KYC Status Update**: EqualsMoney identity-verification results now surface `pending_documents` when resubmission or further action is required and `rejected` for failed/declined results. A completed identity check remains `pending` until the remaining account-onboarding checks finish.\n\n### 2026-07-09\n- **Breaking Validation Change**: EqualsMoney business-onboarding `Market` values are limited to `UK` and `EU`; `US` and `UP` are no longer accepted.\n- **Behavior Update**: `POST /api/v2/business/onboarding/application` now preserves an explicitly supplied `Market` and country/address values. If `Market` is omitted, it is inferred from `CountryOfIncorporation` rather than forcing UK/GB values.\n\n### 2026-07-07\n- **Card List Response Update**: Card listings now include non-cancelled EqualsMoney cards retained locally when the provider list omits them, and use persisted card balances and creation/update timestamps instead of generated timestamps.\n- **Card Transaction Response Update**: Interlace transaction timestamps now support ISO-8601, Unix seconds, and Unix milliseconds. Missing or invalid provider timestamps are returned as `null` instead of the current server time.\n\n### 2026-07-06\n- **Validation and Error Update**: `GET /api/v2/transactions/{id}/equals-money/payment-confirmation` now requires a positive numeric EqualsMoney payment ID and returns explicit `400` or `404` responses when the provider rejects the request or cannot find the confirmation.\n\n### 2026-07-05\n- **Quotation Response Update**: `POST /api/v2/banking/quotations` responses now include `IsAvailable`, `UnavailableReason`, and `RetryAfterSeconds`. Transient EqualsMoney quote failures return `IsAvailable: false`, `UnavailableReason: \"QUOTE_TEMPORARILY_UNAVAILABLE\"`, and a retry delay instead of an internal server error.\n\n### 2026-07-01\n- **Breaking Authentication Change**: API-key requests to `POST /api/v2/banking/budgets/{budgetId}/transfer` must now include the target `userId` query parameter.\n- **Validation Update**: EqualsMoney budget transfers now verify that `accountId`, the source budget, and the destination budget all belong to the target user's account. Cross-account transfers return `CROSS_ACCOUNT_TRANSFER_NOT_ALLOWED`.\n\n### 2026-06-29\n- **New Endpoints**: Added `POST /api/v2/crypto-virtual-accounts/equals-to-wallet/initiate` and `POST /api/v2/crypto-virtual-accounts/equals-to-wallet/confirm` for OTP-protected transfers from an EqualsMoney budget to an external USDC or USDT wallet.\n\n### 2026-06-24\n- **Public API Behavior Update**: Interlace cards can be frozen when a configured decline fee cannot be collected. `POST /api/v2/cards/{cardId}/enable` rejects attempts to re-enable a system-blocked card until the outstanding fee is resolved. Decline-fee collection takes effect on 2026-07-01.\n\n### 2026-06-23\n- **New Endpoint**: Added `POST /api/v2/crypto-virtual-accounts/equals-to-interlace` for transferring funds from an EqualsMoney budget to the user's Interlace USDC deposit address.\n- **Breaking Change**: `POST /api/v2/crypto-virtual-accounts/payin-address` now requires `crypto_currency` and `chain_id`. Supported currencies are USDC and USDT; supported chain IDs are Ethereum (`1`), Tron (`-200`), Polygon (`137`), and Arbitrum (`42161`).\n\n### 2026-06-22\n- **Error Response Update**: EqualsMoney business-onboarding failures now preserve the provider HTTP status and use the standard error shape with `Code`, field-level `ValidationErrors`, and provider `Details` where available.\n- **Webhook-Driven Transaction Update**: Interlace business-transfer webhook updates now refresh the matching transaction's status, net destination amount/currency, fee amount/currency, and provider metadata returned by the public transaction APIs.\n\n### 2026-06-19\n- **Rate Limit Update**: `POST /api/v2/transfers/crypto-to-quantum-transfer` and `POST /api/v2/transfers/quantum-usd-to-crypto-exchange` now use a dedicated fixed-window limit. The default is one request per 15 seconds per endpoint; API-key requests without a user claim are partitioned by client IP. Exceeding the limit returns `429 Too Many Requests` with `Retry-After`.\n\n### 2026-06-18\n- **Breaking Response Change**: `POST /api/v2/banking/payouts` now returns the local payout `Id` as an integer instead of a string. Use the new `ExternalId` for the provider payout identifier. The response also includes `Status`, `Message`, source and destination amounts/currencies, `Fees`, and `CreatedAt`.\n- **Response Update**: For EqualsMoney requests to `POST /api/v2/banking/transfers`, `TransferId` now contains the provider's external payout ID when available, with the local numeric ID used only as a fallback.\n- **Webhook Update**: `card.3ds.otp` now supports Google Pay and Apple Pay wallet-binding OTP events. The outbound webhook continues to include `userId`, `cardId`, `externalCardId`, `otp`, and `expiresAt`, with `expiresAt` also populated from the provider's `expireTime` field when needed.\n\n### 2026-06-15\n- **New API Group**: Added API-key-authenticated crypto virtual-account operations under `/api/v2/crypto-virtual-accounts`, including account creation, pay-in addresses, ramp quotes, Interlace-to-EqualsMoney initiation and OTP confirmation, and OTC request status retrieval.\n\n### 2026-06-11\n- **Behavior Update**: API-key requests to `GET /api/v2/tiers` and `GET /api/v2/tiers/card-tier/{cardTierId}` now return eligible tiers across all account types for the authenticated company.\n\n### 2026-06-08\n- **Response Update**: Card-tier responses now include `BinRangeOverrideId` and `EffectiveBinRangeId` so integrations can identify the configured and resolved BIN ranges.\n\n### 2026-06-05\n- **Breaking Authentication Change**: Public API-key requests to `/api/v2/business/onboarding` operations must supply the target `userId` query parameter.\n\n### 2026-06-03\n- **Request Update**: `POST /api/v2/users/{userId}/kyc/equalsmoney/documents` now accepts optional `AssociatedPersonId` in the multipart form for requests relating to a specific associated person.\n- **Response Update**: EqualsMoney additional-document request items now include `ExpectedResponseType` and `InformationRequestId`; these fields can also appear in `RemainingAdditionalDocumentsRequested` after an upload.\n- **Webhook Update**: `card.updated` now derives `previousStatus` and `newStatus` from the provider's explicit transition record and adds optional `reasonCode` and `operationTime`. `card.created` now emits the canonical persisted status so delayed creation events do not report a stale state.\n\n### 2026-05-27\n- **New Feature**: Added card Auto Lock support. `POST /api/v2/dashboard/cards/order` and card creation requests now accept `AutoLockEnabled`; new ordered cards can be created with Auto Lock enabled.\n- **New Endpoint**: Added `PUT /api/v2/cards/{cardId}/auto-lock?userId={userId}` to enable or disable Auto Lock for an existing card. Request body: `{ \"enabled\": true | false }`.\n- **Response Update**: Card list, card details, card enable/unfreeze, and dashboard card responses now include `AutoLockEnabled` and/or `AutoLockActiveUntil` where applicable.\n- **Behavior Update**: When Auto Lock is enabled, unfreezing a card sets a 10-minute active window. After that window, the background worker freezes the card again through the configured card provider.\n\n### 2026-01-26\n- **Breaking Change**: `POST /api/v2/users/{userId}/kyc/sumsub-access-token` now requires 5 additional fields: `Occupation`, `AnnualSalary`, `AccountPurpose`, `ExpectedMonthlyVolume`, `DocumentIssueDate`. These fields are saved to `user_kyc_submissions`.\n- **Breaking Change**: `POST /api/v2/users/{userId}/sumsub/kyc-url` now requires 5 additional fields: `Occupation`, `AnnualSalary`, `AccountPurpose`, `ExpectedMonthlyVolume`, `DocumentIssueDate`. These fields are saved to `user_kyc_submissions`.\n- **Breaking Change**: `POST /api/v2/users/{userId}/kyc/verify` now requires 5 additional fields: `Occupation`, `AnnualSalary`, `AccountPurpose`, `ExpectedMonthlyVolume`, `DocumentIssueDate`.\n- **Breaking Change**: `POST /api/v2/users/{userId}/kyc/sumsub-token` now requires 5 additional fields: `Occupation`, `AnnualSalary`, `AccountPurpose`, `ExpectedMonthlyVolume`, `DocumentIssueDate`.\n\n### 2026-01-19\n- **New Feature**: Added `GET /api/v2/kyc/sumsub-access-token` endpoint to retrieve a fresh access token for the SumSub mobile SDK.\n- **New Feature**: Added `GET /api/v2/kyc/detailed-status` endpoint to check approval status across multiple providers (HoppaCard, Bank, Card Issuer).\n- **New Feature**: Implemented `cardholder.created` and `cardholder.approved` webhooks.\n\n### 2025-12-11\n- **Breaking Change**: In the `AssetBalance` model (used in `/v2/users/{id}/assets` endpoint), the properties `WalletId` and `WalletType` have been renamed to `BalanceId` and `BalanceType` respectively. Please update your integrations accordingly.\n",
    "contact": {
      "name": "HoppaCard",
      "email": "info@hoppa.global"
    },
    "license": {
      "name": "Proprietary License"
    },
    "version": "v2.0"
  },
  "servers": [
    {
      "url": "https://staging.hoppa.global/",
      "description": "CryptoCard Platform API Server"
    }
  ],
  "paths": {
    "/Users/Authenticate": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Retired legacy authentication endpoint",
        "operationId": "AuthenticateUser",
        "responses": {
          "410": {
            "description": "Gone",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/Users/RefreshToken": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Retired legacy refresh endpoint",
        "operationId": "RefreshToken",
        "responses": {
          "410": {
            "description": "Gone",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/Users/Me": {
      "get": {
        "tags": [
          "Authentication"
        ],
        "summary": "Get current user information",
        "description": "Retrieves information about the currently authenticated user",
        "operationId": "GetCurrentUserInfo",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/referrals/program": {
      "get": {
        "tags": [
          "AdminReferrals"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralProgramResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralProgramResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralProgramResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AdminReferrals"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferralProgramRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferralProgramRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferralProgramRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralProgramResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralProgramResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralProgramResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/referrals/overview": {
      "get": {
        "tags": [
          "AdminReferrals"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralAdminOverviewResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralAdminOverviewResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralAdminOverviewResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/referrals/invite-benefits": {
      "get": {
        "tags": [
          "AdminReferrals"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralInviteBenefitResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralInviteBenefitResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralInviteBenefitResponse"
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "AdminReferrals"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferralInviteBenefitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferralInviteBenefitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferralInviteBenefitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralInviteBenefitResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralInviteBenefitResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralInviteBenefitResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/module-status": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/company-statuses": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherCompanyModuleStatusResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherCompanyModuleStatusResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherCompanyModuleStatusResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/companies/{companyId}/activation": {
      "put": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherActivationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherActivationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherActivationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/settings": {
      "put": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/settings/global": {
      "put": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/groups": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherGroupResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherGroupResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherGroupResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherGroupRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherGroupRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/groups/{id}/status/{status}": {
      "put": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/batch": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherBatchRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherBatchRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherBatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/assignments": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/vouchers/assignments/from-group": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherFromGroupRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherFromGroupRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherFromGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/{id}/reveal": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/vouchers/{id}/status/{status}": {
      "put": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/approvals": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRedemptionResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRedemptionResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRedemptionResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/approvals/{id}": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecideVoucherRedemptionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DecideVoucherRedemptionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DecideVoucherRedemptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/redeem-for-user": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/redemptions/{id}": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/liability": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/dashboard": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherDashboardResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherDashboardResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherDashboardResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/liability/preview": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/redemptions/{id}/retry": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/rules": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRuleResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRuleResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRuleResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRuleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRuleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRuleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRuleResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/rules/{id}/enabled/{enabled}": {
      "put": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "enabled",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/vouchers/api-keys": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherApiKeySummaryResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherApiKeySummaryResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherApiKeySummaryResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherApiKeyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherApiKeyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherApiKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CreateVoucherApiKeyResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateVoucherApiKeyResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateVoucherApiKeyResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/api-keys/{id}": {
      "delete": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/vouchers/imports/template": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/vouchers/imports/preview": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContentType": {
                    "type": "string"
                  },
                  "ContentDisposition": {
                    "type": "string"
                  },
                  "Headers": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "Length": {
                    "pattern": "^-?(?:0|[1-9]\\d*)$",
                    "format": "int64"
                  },
                  "Name": {
                    "type": "string"
                  },
                  "FileName": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherImportPreviewResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherImportPreviewResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherImportPreviewResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/imports/{id}/confirm": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmVoucherImportRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmVoucherImportRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmVoucherImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/assignments/mass": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MassAssignVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MassAssignVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MassAssignVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/jobs": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/jobs/{id}": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/jobs/{id}/items": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobItemResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobItemResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobItemResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/jobs/{id}/retry": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/jobs/{id}/codes/export": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/vouchers/redemptions/{id}/reversal": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReverseVoucherRedemptionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReverseVoucherRedemptionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReverseVoucherRedemptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherReversalResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherReversalResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherReversalResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/reversals/bulk": {
      "post": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkReverseVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkReverseVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkReverseVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReversalResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReversalResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReversalResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/reports/redemptions": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReportRow"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReportRow"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReportRow"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/reports/daily-statistics": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherDailyStatisticResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherDailyStatisticResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherDailyStatisticResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/reports/liability-snapshots": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilitySnapshotResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilitySnapshotResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilitySnapshotResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/vouchers/reports/{report}/export": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "report",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/vouchers/audit": {
      "get": {
        "tags": [
          "AdminVouchers"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherAuditResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherAuditResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherAuditResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/authorization/capabilities": {
      "get": {
        "tags": [
          "Authorization"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/authorization/bins": {
      "get": {
        "tags": [
          "Authorization"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/authorization/cards": {
      "get": {
        "tags": [
          "Authorization"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/authorization/configuration": {
      "get": {
        "tags": [
          "Authorization"
        ],
        "parameters": [
          {
            "name": "environment",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Authorization"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationEndpointUpsertRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationEndpointUpsertRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationEndpointUpsertRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/authorization/rules": {
      "get": {
        "tags": [
          "Authorization"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Authorization"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationRuleUpsertRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationRuleUpsertRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationRuleUpsertRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/authorization/rules/{ruleId}": {
      "put": {
        "tags": [
          "Authorization"
        ],
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationRuleUpsertRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationRuleUpsertRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AuthorizationRuleUpsertRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Authorization"
        ],
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/authorization/decisions": {
      "get": {
        "tags": [
          "Authorization"
        ],
        "parameters": [
          {
            "name": "take",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/banking/accounts": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "Get all accounts across all banking providers",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedAccountsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/accounts/fund-test": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Fund an Equals Money account with a sandbox test credit.",
        "description": "Staging only. This endpoint uses the Equals Money sandbox budget-credit simulator and will not work in production.\nUse AccountId from GET /api/v2/banking/accounts. Amount defaults to 100.00 when omitted.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FundAccountRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FundAccountRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FundAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FundAccountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/equalsmoney-onboarding": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Create an EqualsMoney personal onboarding application",
        "description": "Personal onboarding only. Creates an EqualsMoney payments/cards application for the authenticated API user. Contact and account details are populated from the user profile; the client provides only the personal KYC fields and documents.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Optional personal proof of address document as a base64 encoded JPG, PNG, or PDF.\nA data URL is also accepted.",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "RequestedFeatures": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "CARDS",
                        "PAYMENTS"
                      ],
                      "type": "string"
                    },
                    "description": "Allowed values: PAYMENTS, CARDS. PAYMENTS is required."
                  },
                  "MainPurpose": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "SALARY_OR_INCOME",
                        "PERSONAL_TRANSFERS_OR_LIVING_EXPENSES",
                        "FAMILY_SUPPORT",
                        "MORTGAGE_OR_RENT_OR_UTILITY_BILLS",
                        "SAVINGS",
                        "INVESTMENT_PURPOSES",
                        "INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES",
                        "RECEIVING_OR_SENDING_LOAN_PAYMENTS",
                        "PURCHASE_OF_GOODS_OR_SERVICES",
                        "TRAVEL",
                        "EDUCATION",
                        "MEDICAL_EXPENSES",
                        "CHARITABLE_DONATIONS"
                      ],
                      "type": "string"
                    },
                    "description": "Possible values: SALARY_OR_INCOME, PERSONAL_TRANSFERS_OR_LIVING_EXPENSES, FAMILY_SUPPORT, MORTGAGE_OR_RENT_OR_UTILITY_BILLS, SAVINGS, INVESTMENT_PURPOSES, INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES, RECEIVING_OR_SENDING_LOAN_PAYMENTS, PURCHASE_OF_GOODS_OR_SERVICES, TRAVEL, EDUCATION, MEDICAL_EXPENSES, CHARITABLE_DONATIONS."
                  },
                  "SourceOfFunds": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "RECEIVING_FUNDS_FROM_OWN_ACCOUNTS",
                        "RECEIVING_SALARY_PENSION_OR_DIVIDENDS",
                        "RECEIVING_GIFTS_OR_INHERITANCES",
                        "PROCEEDS_FROM_INVESTMENTS",
                        "PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING",
                        "PROCEEDS_FROM_SALE_OF_A_PROPERTY_OR_PHYSICAL_ASSET",
                        "OTHER"
                      ],
                      "type": "string"
                    },
                    "description": "Possible values: RECEIVING_FUNDS_FROM_OWN_ACCOUNTS, RECEIVING_SALARY_PENSION_OR_DIVIDENDS, RECEIVING_GIFTS_OR_INHERITANCES, PROCEEDS_FROM_INVESTMENTS, PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING, PROCEEDS_FROM_SALE_OF_A_PROPERTY_OR_PHYSICAL_ASSET, OTHER."
                  },
                  "DestinationOfFunds": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "AD",
                        "AE",
                        "AF",
                        "AG",
                        "AI",
                        "AL",
                        "AM",
                        "AO",
                        "AQ",
                        "AR",
                        "AS",
                        "AT",
                        "AU",
                        "AW",
                        "AX",
                        "AZ",
                        "BA",
                        "BB",
                        "BD",
                        "BE",
                        "BF",
                        "BG",
                        "BH",
                        "BI",
                        "BJ",
                        "BL",
                        "BM",
                        "BN",
                        "BO",
                        "BQ",
                        "BR",
                        "BS",
                        "BT",
                        "BV",
                        "BW",
                        "BY",
                        "BZ",
                        "CA",
                        "CC",
                        "CD",
                        "CF",
                        "CG",
                        "CH",
                        "CI",
                        "CK",
                        "CL",
                        "CM",
                        "CN",
                        "CO",
                        "CR",
                        "CU",
                        "CV",
                        "CW",
                        "CX",
                        "CY",
                        "CZ",
                        "DE",
                        "DJ",
                        "DK",
                        "DM",
                        "DO",
                        "DZ",
                        "EC",
                        "EE",
                        "EG",
                        "EH",
                        "ER",
                        "ES",
                        "ET",
                        "FI",
                        "FJ",
                        "FK",
                        "FM",
                        "FO",
                        "FR",
                        "GA",
                        "GB",
                        "GD",
                        "GE",
                        "GF",
                        "GG",
                        "GH",
                        "GI",
                        "GL",
                        "GM",
                        "GN",
                        "GP",
                        "GQ",
                        "GR",
                        "GS",
                        "GT",
                        "GU",
                        "GW",
                        "GY",
                        "HK",
                        "HM",
                        "HN",
                        "HR",
                        "HT",
                        "HU",
                        "ID",
                        "IE",
                        "IL",
                        "IM",
                        "IN",
                        "IO",
                        "IQ",
                        "IR",
                        "IS",
                        "IT",
                        "JE",
                        "JM",
                        "JO",
                        "JP",
                        "KE",
                        "KG",
                        "KH",
                        "KI",
                        "KM",
                        "KN",
                        "KP",
                        "KR",
                        "KW",
                        "KY",
                        "KZ",
                        "LA",
                        "LB",
                        "LC",
                        "LI",
                        "LK",
                        "LR",
                        "LS",
                        "LT",
                        "LU",
                        "LV",
                        "LY",
                        "MA",
                        "MC",
                        "MD",
                        "ME",
                        "MF",
                        "MG",
                        "MH",
                        "MK",
                        "ML",
                        "MM",
                        "MN",
                        "MO",
                        "MP",
                        "MQ",
                        "MR",
                        "MS",
                        "MT",
                        "MU",
                        "MV",
                        "MW",
                        "MX",
                        "MY",
                        "MZ",
                        "NA",
                        "NC",
                        "NE",
                        "NF",
                        "NG",
                        "NI",
                        "NL",
                        "NO",
                        "NP",
                        "NR",
                        "NU",
                        "NZ",
                        "OM",
                        "PA",
                        "PE",
                        "PF",
                        "PG",
                        "PH",
                        "PK",
                        "PL",
                        "PM",
                        "PN",
                        "PR",
                        "PS",
                        "PT",
                        "PW",
                        "PY",
                        "QA",
                        "RE",
                        "RO",
                        "RS",
                        "RU",
                        "RW",
                        "SA",
                        "SB",
                        "SC",
                        "SD",
                        "SE",
                        "SG",
                        "SH",
                        "SI",
                        "SJ",
                        "SK",
                        "SL",
                        "SM",
                        "SN",
                        "SO",
                        "SR",
                        "SS",
                        "ST",
                        "SV",
                        "SX",
                        "SY",
                        "SZ",
                        "TC",
                        "TD",
                        "TF",
                        "TG",
                        "TH",
                        "TJ",
                        "TK",
                        "TL",
                        "TM",
                        "TN",
                        "TO",
                        "TR",
                        "TT",
                        "TV",
                        "TW",
                        "TZ",
                        "UA",
                        "UG",
                        "UM",
                        "US",
                        "UY",
                        "UZ",
                        "VA",
                        "VC",
                        "VE",
                        "VG",
                        "VI",
                        "VN",
                        "VU",
                        "WF",
                        "WS",
                        "XK",
                        "YE",
                        "YT",
                        "ZA",
                        "ZM",
                        "ZW"
                      ],
                      "type": "string"
                    },
                    "description": "Possible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
                  },
                  "CurrenciesRequired": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "AED",
                        "AFN",
                        "ALL",
                        "AMD",
                        "ANG",
                        "AOA",
                        "ARS",
                        "AUD",
                        "AWG",
                        "AZN",
                        "BAM",
                        "BBD",
                        "BDT",
                        "BGN",
                        "BHD",
                        "BIF",
                        "BMD",
                        "BND",
                        "BOB",
                        "BOV",
                        "BRL",
                        "BSD",
                        "BTN",
                        "BWP",
                        "BYN",
                        "BZD",
                        "CAD",
                        "CDF",
                        "CHF",
                        "CLP",
                        "CNY",
                        "COP",
                        "CRC",
                        "CUC",
                        "CUP",
                        "CVE",
                        "CZK",
                        "DJF",
                        "DKK",
                        "DOP",
                        "DZD",
                        "EGP",
                        "ERN",
                        "ETB",
                        "EUR",
                        "FJD",
                        "FKP",
                        "GBP",
                        "GEL",
                        "GGP",
                        "GHS",
                        "GIP",
                        "GMD",
                        "GNF",
                        "GTQ",
                        "GYD",
                        "HKD",
                        "HNL",
                        "HRK",
                        "HTG",
                        "HUF",
                        "IDR",
                        "ILS",
                        "INR",
                        "IQD",
                        "IRR",
                        "ISK",
                        "JMD",
                        "JOD",
                        "JPY",
                        "KES",
                        "KGS",
                        "KHR",
                        "KMF",
                        "KPW",
                        "KRW",
                        "KWD",
                        "KYD",
                        "KZT",
                        "LAK",
                        "LBP",
                        "LKR",
                        "LRD",
                        "LSL",
                        "LTL",
                        "LVL",
                        "LYD",
                        "MAD",
                        "MDL",
                        "MGA",
                        "MKD",
                        "MMK",
                        "MNT",
                        "MOP",
                        "MUR",
                        "MVR",
                        "MWK",
                        "MXN",
                        "MYR",
                        "MZN",
                        "NAD",
                        "NGN",
                        "NIO",
                        "NOK",
                        "NPR",
                        "NZD",
                        "OMR",
                        "PAB",
                        "PEN",
                        "PGK",
                        "PHP",
                        "PKR",
                        "PLN",
                        "PYG",
                        "QAR",
                        "RON",
                        "RSD",
                        "RUB",
                        "RWF",
                        "SAR",
                        "SBD",
                        "SCR",
                        "SEK",
                        "SGD",
                        "SHN",
                        "SLL",
                        "SOS",
                        "SRD",
                        "SSP",
                        "STN",
                        "SYP",
                        "SZL",
                        "THB",
                        "TJS",
                        "TMT",
                        "TND",
                        "TOP",
                        "TRY",
                        "TTD",
                        "TWD",
                        "TZS",
                        "UAH",
                        "UGX",
                        "USD",
                        "UYU",
                        "UZS",
                        "VND",
                        "VUV",
                        "WST",
                        "XAF",
                        "XAG",
                        "XAU",
                        "XCD",
                        "XOF",
                        "XPD",
                        "XPF",
                        "XPT",
                        "YER",
                        "ZAR",
                        "ZMK",
                        "ZMW",
                        "ZWD"
                      ],
                      "type": "string"
                    },
                    "description": "Possible values: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BOV, BRL, BSD, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SEK, SGD, SHN, SLL, SOS, SRD, SSP, STN, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VND, VUV, WST, XAF, XAG, XAU, XCD, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW, ZWD."
                  },
                  "AnnualVolume": {
                    "enum": [
                      "0-10000",
                      "10001-50000",
                      "50001-100000",
                      "100001-250000",
                      "250001-1000000",
                      "1000001-5000000",
                      "5000000+"
                    ],
                    "type": "string",
                    "description": "Possible values: 0-10000, 10001-50000, 50001-100000, 100001-250000, 250001-1000000, 1000001-5000000, 5000000+."
                  },
                  "NumberOfPayments": {
                    "enum": [
                      "FEWER-THAN-5",
                      "5-10",
                      "10-20",
                      "MORE-THAN-20"
                    ],
                    "type": "string",
                    "description": "Possible values: FEWER-THAN-5, 5-10, 10-20, MORE-THAN-20."
                  },
                  "CardPurposes": {
                    "type": "array",
                    "items": {
                      "enum": [
                        "SALARY_OR_INCOME",
                        "PERSONAL_TRANSFERS_OR_LIVING_EXPENSES",
                        "FAMILY_SUPPORT",
                        "MORTGAGE_OR_RENT_OR_UTILITY_BILLS",
                        "SAVINGS",
                        "INVESTMENT_PURPOSES",
                        "INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES",
                        "RECEIVING_OR_SENDING_LOAN_PAYMENTS",
                        "PURCHASE_OF_GOODS_OR_SERVICES",
                        "TRAVEL",
                        "EDUCATION",
                        "MEDICAL_EXPENSES",
                        "CHARITABLE_DONATIONS"
                      ],
                      "type": "string"
                    },
                    "description": "Possible values: SALARY_OR_INCOME, PERSONAL_TRANSFERS_OR_LIVING_EXPENSES, FAMILY_SUPPORT, MORTGAGE_OR_RENT_OR_UTILITY_BILLS, SAVINGS, INVESTMENT_PURPOSES, INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES, RECEIVING_OR_SENDING_LOAN_PAYMENTS, PURCHASE_OF_GOODS_OR_SERVICES, TRAVEL, EDUCATION, MEDICAL_EXPENSES, CHARITABLE_DONATIONS."
                  },
                  "CardAnnualSpend": {
                    "enum": [
                      "0-10000",
                      "10001-50000",
                      "50001-100000",
                      "100001-250000",
                      "250001-1000000",
                      "1000001-5000000",
                      "5000000+"
                    ],
                    "type": "string",
                    "description": "Possible values: 0-10000, 10001-50000, 50001-100000, 100001-250000, 250001-1000000, 1000001-5000000, 5000000+."
                  },
                  "NumberOfCardsRequired": {
                    "enum": [
                      "0-10",
                      "11-50",
                      "51-100",
                      "101+"
                    ],
                    "type": "string",
                    "description": "Possible values: 0-10, 11-50, 51-100, 101+."
                  },
                  "AtmWithdrawalsRequired": {
                    "type": "boolean"
                  },
                  "ProofOfAddress": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              },
              "encoding": {
                "ProofOfAddress": {
                  "contentType": "image/png, image/jpeg, application/pdf"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyOnboardingDashboardResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/users/{userId}/equals-banking-info": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "Get Equals banking information for a specific user in the authenticated company.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EqualsRecipientPrefillResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/balance": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "Get aggregated balance across all banking providers",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Optional currency filter",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedBalanceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/transactions": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "Get transactions across all banking providers",
        "parameters": [
          {
            "name": "Currency",
            "in": "query",
            "description": "3-letter ISO currency code, for example USD or EUR.",
            "schema": {
              "maxLength": 3,
              "minLength": 3,
              "pattern": "^[A-Za-z]{3}$",
              "type": "string"
            }
          },
          {
            "name": "TradeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "From",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "To",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "Page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Provider",
            "in": "query",
            "description": "Banking provider filter. Allowed value: EqualsMoney.",
            "schema": {
              "enum": [
                "EqualsMoney"
              ],
              "type": "string",
              "description": "Indicates which banking provider owns a resource"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedTransactionsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/users/{userId}/budgets": {
      "get": {
        "tags": [
          "Banking"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserBudgetListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Banking"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetCreateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetCreateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserBudgetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/users/{userId}/budgets/{budgetId}": {
      "get": {
        "tags": [
          "Banking"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserBudgetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Banking"
        ],
        "summary": "Updates user-editable budget details. Budget status is managed by Equals Money and is read-only.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetUpdateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetUpdateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserBudgetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/users/{userId}/budgets/{budgetId}/transfer": {
      "post": {
        "tags": [
          "Banking"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetTransferRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetTransferRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserBudgetTransferRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserBudgetTransferResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payees": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "List payees across all banking providers",
        "parameters": [
          {
            "name": "Limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Currency",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "SearchName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedPayeesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Payee Step 1: validate a new payee and send the OTP required by Equals Money.",
        "description": "This endpoint does not create the payee immediately. Equals Money requires recipient OTP approval before creation.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Payee creation request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePayeeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePayeeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePayeeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayeeInitiateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payees/confirm": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Payee Step 2: create and confirm the payee after OTP verification.",
        "description": "Use the VerificationToken returned from POST /api/v2/banking/payees after it has been verified through POST /api/v2/banking/otp/verify.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayeeConfirmRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PayeeConfirmRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PayeeConfirmRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayeeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payees/required-fields": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "Get required fields for payee creation",
        "parameters": [
          {
            "name": "PaymentType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Currency",
            "in": "query",
            "schema": {
              "maxLength": 3,
              "minLength": 3,
              "type": "string"
            }
          },
          {
            "name": "Country",
            "in": "query",
            "schema": {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayeeRequiredFieldsResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payees/{payeeId}": {
      "delete": {
        "tags": [
          "Banking"
        ],
        "summary": "Delete a payee from ALL banking providers where user has accounts",
        "parameters": [
          {
            "name": "payeeId",
            "in": "path",
            "description": "Payee ID to delete",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedPayeeDeleteResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/quotations": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Payout Step 1: create a quote for an existing payee.",
        "description": "Use this before external payouts. The returned Id is used as QuotationId in POST /api/v2/banking/payouts/check, and QuoteRequestId must be preserved for later payout steps when returned.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardQuotationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardQuotationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardQuotationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payouts/check": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Payout Step 2: check the quoted payout before OTP approval.",
        "description": "Send the quote Id from POST /api/v2/banking/quotations as QuotationId. The returned CheckId is used in POST /api/v2/banking/payouts/initiate.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckPayoutRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckPayoutRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CheckPayoutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckPayoutResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payouts/initiate": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Payout Step 3: send the OTP for a checked payout.",
        "description": "Send the CheckId from POST /api/v2/banking/payouts/check. The VerificationToken returned here must be verified through POST /api/v2/banking/otp/verify before calling POST /api/v2/banking/payouts.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InitiatePayoutRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InitiatePayoutRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InitiatePayoutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutInitiateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payouts": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Payout Step 4: create the payout after OTP verification.",
        "description": "Use the VerificationToken returned from POST /api/v2/banking/payouts/initiate after it has been verified by POST /api/v2/banking/otp/verify. If the quote was refreshed while the OTP screen was open, pass the latest CheckId and QuoteRequestId.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePayoutRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePayoutRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePayoutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatePayoutResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "List payout transactions for the authenticated user or API-key selected user.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "currency",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clientTransactionId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/payouts/{payoutId}": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "Get a payout transaction by ID for the authenticated user or API-key selected user.",
        "parameters": [
          {
            "name": "payoutId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/otp/verify": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Verify an OTP code for a pending banking operation such as payout creation.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OtpVerifyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OtpVerifyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OtpVerifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OtpVerifyResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/otp/resend": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Resend the OTP code for a pending banking operation.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OtpResendRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OtpResendRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OtpResendRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OtpResendResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/transfers/internal": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Execute an internal transfer between balances for a specific user within the authenticated company.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserInternalTransferRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserInternalTransferRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserInternalTransferRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedTransferResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/quotes": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Get a quote for a transfer",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Quote request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedQuoteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedQuoteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedQuoteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedQuoteResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/orders/quote": {
      "post": {
        "tags": [
          "Banking"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyQuoteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyQuoteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyQuoteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyQuoteResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/orders/trade": {
      "post": {
        "tags": [
          "Banking"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyTradeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyTradeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyTradeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyTradeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/budgets/{budgetId}/transfer": {
      "post": {
        "tags": [
          "Banking"
        ],
        "parameters": [
          {
            "name": "budgetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyBudgetTransferRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyBudgetTransferRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EqualsMoneyBudgetTransferRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyTransferResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/trades/quote": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Get FX trade quote",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Trade quote request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedTradeQuoteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedTradeQuoteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedTradeQuoteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedTradeQuoteResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/trades/execute": {
      "post": {
        "tags": [
          "Banking"
        ],
        "summary": "Execute FX trade",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Trade execution request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedTradeExecuteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedTradeExecuteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedTradeExecuteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedTradeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/banking/providers": {
      "get": {
        "tags": [
          "Banking"
        ],
        "summary": "Get list of banking providers the current user has accounts with",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/business/onboarding/options": {
      "get": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Get canonical EqualsMoney KYB onboarding option values for client select fields.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/KybOnboardingOptionsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KybOnboardingOptionsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/KybOnboardingOptionsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/business/onboarding/application": {
      "post": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Create a business application for KYB",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Required for API key authentication; optional for JWT self-service and must match the token user when supplied.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Request cancellation token.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBusinessApplicationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBusinessApplicationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBusinessApplicationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Get the current application status",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Required for API key authentication; optional for JWT self-service and must match the token user when supplied.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/business/onboarding/application/submit": {
      "post": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Submit the application for review",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Required for API key authentication; optional for JWT self-service and must match the token user when supplied.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyApplicationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/business/onboarding/application/documents": {
      "post": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Upload an EqualsMoney business onboarding document",
        "description": "Uploads one document for the authenticated user's active EqualsMoney business onboarding application.\n\nStandard business documents normally cover formation, ownership/control, registration, finances/funds, identity, address, and liveness where applicable. EqualsMoney may request further Enhanced Due Diligence (EDD) documents as onboarding progresses.\n\nUse `Purpose` to classify the file. Use `OTHER` for industry-specific EDD documents where no more specific proof category fits.\n\n## Standard EDD documents that may be requested\n\n| Requirement area | Examples |\n| --- | --- |\n| Customer base | Overview of customer count, type, industries, and jurisdictions. |\n| Third-party funds | Names of third-party payers and the purpose of those payments. |\n| Beneficiaries | Key beneficiaries/payees and geographic locations. |\n| Source of funds | Latest audited financial statements, or 3 months corporate bank statements with 3 customer invoices, or eligible unaudited financial statements. |\n\n## Industry-specific additional document requirements\n\n| Industry | Additional documents/evidence commonly required |\n| --- | --- |\n| Regulated financial services | FinCrime/AML policy, fraud policy, enterprise-wide risk assessment for MSBs, client risk assessment methodology, external AML audit, AML questionnaire for crypto/gaming/MSB/CFD, top clients list, regulatory licences. |\n| Investment funds | Funds questionnaire, PPM/OM or other offering documents, investor report where applicable, investment agreement, AML policy/procedures, AML comfort letter. |\n| Consultancy | Customer and beneficiary/supplier lists, serviced-industries confirmation, client sourcing explanation, customer-base breakdown, 3 months corporate bank statements, AML/CFT supervision status. |\n| Luxury yachts - management | Service confirmation, yacht owner details, yacht purchase/source-of-funds evidence or owner agreements, owner/client due diligence evidence, sanctions controls, cash payment thresholds. |\n| Luxury yachts - chartering/buying/selling | Yacht owner details, yacht purchase/source-of-funds evidence or owner agreements, due diligence policies for clients and yacht owners, sanctions controls, website yacht-list confirmation, cash payment thresholds. |\n| SEO/SCO/digital marketing/affiliate marketing | 3 customer invoices, 3 months corporate bank statements, customer-base overview, customer sourcing explanation, SEO tracking platform screenshots for SEO companies. |\n| Real estate | AML/CFT registration status, property ownership details, client/investor funds arrangements, third-party payer or beneficiary details, source of funds/source of wealth evidence, loan agreements, sale/reservation agreements, prospectus for real-estate investment funds. |\n| Maritime shipping | Vessel list, vessel ownership evidence, owner/yacht manager details, vessel activity monitoring documents, shipping manifest. |\n| Jewellery - lab-grown diamonds/watches | High-value dealer confirmation, AML policy/procedures if registered, revenue channel split, jurisdiction risk ratings, customer threshold breakdown, supplier list, additional products list. |\n| Jewellery - natural diamonds/gemstones | High-value dealer confirmation, AML policy/procedures, supplier due diligence, Kimberly Process confirmation, licences/memberships, Ethical Diamond Policy, Modern Slavery Policy, bank statements, supplier/client shipping invoices. |\n| Jewellery - gold/silver | High-value dealer confirmation, AML policy/procedures, supplier list, licences/memberships, Modern Slavery Policy, bank statements, supplier/client shipping invoices. |\n| Adult content and dating services | Modern Slavery Policy, website URLs, age verification evidence, user profile verification process, content monitoring/audit process, consent checks, payer/beneficiary lists, bank statements. |\n| Military and defence | Licence/permit to sell military goods, military/defence goods list, ECJU export licence where applicable, manufacturing/source details, banned goods confirmation, buyer due diligence. |\n| Weapons and firearms | Licences/permits, manufacturing details, 3 invoices and contractual agreements, buyer due diligence, under-18 controls, customer type confirmation. |\n| Cannabidiol products (CBD) | Supplier invoices, bank statements, Home Office/DEFRA licences where applicable, THC evidence, no medicinal claims evidence, GMP/EMA or Home Office evidence for medical CBD. |\n| Vaping/e-cigarettes/e-liquid sellers | Supplier list, 3 supplier invoices, wholesale shipping documents, bank statements with 3 client invoices, operating model, cash due diligence, THC/nicotine/liquid-volume confirmations. |\n| Mining | Jurisdiction licences/permits, Modern Slavery Policy, ABC policy, ESG policy, government/third-party agreements, onsite mining audit, project details, bank statements, supplier invoices. |\n| Dropshipping | Supplier/beneficiary list with websites, product and sale-jurisdiction details, 3 supplier invoices, supplier agreements, bank statements, wholesale customer-base breakdown, payment methods, dual-use goods policy. |\n| Art | High-value dealer and HMRC Art Market Participant status, AML policy/procedures where applicable, cash due diligence, crypto due diligence, sales/storage explanation, bank statements, artwork source. |\n| Trust/nominee/fiduciary ownership | Beneficial owner identity documents, trust deeds, nominee agreements or fiduciary service agreements, official documents for trustees/settlors/beneficiaries, legal rationale for structure. |\n| Aviation - spares/parts/repairs | Sourcing details, military aircraft confirmation, 3 supplier invoices, bank statements, licences/certifications, dual-use goods policy, plane ownership/source-of-funds evidence, due diligence policies, sanctions controls. |\n| Aviation - hire/chartering/selling planes | Plane owner details, plane purchase/source-of-funds evidence or owner agreements, airspace monitoring confirmation, client due diligence policies, sanctions controls, website plane-list confirmation. |\n| Portable electronics | Supplier/beneficiary list, 3 supplier invoices, wholesale shipping documents, bank statements with 3 client invoices, operating model, cash due diligence. |",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Required for API key authentication; optional for JWT self-service and must match the token user when supplied.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Request cancellation token.",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "File": {
                    "$ref": "#/components/schemas/IFormFile"
                  },
                  "Purpose": {
                    "enum": [
                      "PROOF_OF_FORMATION",
                      "PROOF_OF_OWNERSHIP_STRUCTURE",
                      "PROOF_OF_OWNERSHIP",
                      "PROOF_OF_CONTROL_PERSONS",
                      "PROOF_OF_REGISTRATION",
                      "PROOF_OF_FINANCES",
                      "PROOF_OF_FUNDS",
                      "PROOF_OF_IDENTITY",
                      "PROOF_OF_ADDRESS",
                      "PROOF_OF_LIVENESS",
                      "OTHER"
                    ],
                    "type": "string",
                    "description": "Use OTHER for industry-specific or EDD documents that do not fit one of the standard proof categories.\n\nPossible values: PROOF_OF_FORMATION, PROOF_OF_OWNERSHIP_STRUCTURE, PROOF_OF_OWNERSHIP, PROOF_OF_CONTROL_PERSONS, PROOF_OF_REGISTRATION, PROOF_OF_FINANCES, PROOF_OF_FUNDS, PROOF_OF_IDENTITY, PROOF_OF_ADDRESS, PROOF_OF_LIVENESS, OTHER."
                  }
                }
              },
              "encoding": {
                "File": {
                  "contentType": "image/png, image/jpeg, application/pdf"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyDocumentResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyDocumentResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyDocumentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/business/onboarding/associated-people": {
      "post": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Create associated people for a business application (Directors, UBOs, Applicants)",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Required for API key authentication; optional for JWT self-service and must match the token user when supplied.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Request cancellation token.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAssociatedPeopleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAssociatedPeopleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAssociatedPeopleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Get associated people for the current user",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Required for API key authentication; optional for JWT self-service and must match the token user when supplied.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonModel"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonModel"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonModel"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/business/onboarding/associated-people/{associatedPersonId}/documents": {
      "post": {
        "tags": [
          "BusinessOnboarding"
        ],
        "summary": "Upload an EqualsMoney associated person onboarding document",
        "description": "Uploads one identity, address, or supporting document for an EqualsMoney associated person.",
        "parameters": [
          {
            "name": "associatedPersonId",
            "in": "path",
            "description": "ID of the associated person",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Required for API key authentication; optional for JWT self-service and must match the token user when supplied.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Request cancellation token.",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "File": {
                    "$ref": "#/components/schemas/IFormFile"
                  },
                  "Purpose": {
                    "enum": [
                      "PROOF_OF_IDENTITY",
                      "PROOF_OF_ADDRESS",
                      "OTHER"
                    ],
                    "type": "string",
                    "description": "Use PROOF_OF_IDENTITY for identity documents, PROOF_OF_ADDRESS for address documents, or OTHER for requested supporting documents.\n\nPossible values: PROOF_OF_IDENTITY, PROOF_OF_ADDRESS, OTHER."
                  }
                }
              },
              "encoding": {
                "File": {
                  "contentType": "image/png, image/jpeg, application/pdf"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyDocumentResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyDocumentResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyDocumentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/card-loads/crypto": {
      "post": {
        "tags": [
          "Card Loads"
        ],
        "summary": "Load a BPay card from crypto through BoomFi",
        "description": "Creates an asynchronous crypto-to-fiat card load. Hoppa returns a BoomFi funding instruction, monitors the BoomFi trade and settlement, then loads the settled amount from the configured BPay source account onto the target card. Send a stable Idempotency-Key when retrying the same load.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "description": "Stable caller-generated key used to return the original operation when the same request is retried.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Creates an asynchronous crypto-to-fiat card load. Hoppa returns a BoomFi funding instruction, monitors the BoomFi trade and settlement, then loads the settled amount from the configured BPay source account onto the target card. Send a stable Idempotency-Key when retrying the same load.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBoomFiBPayCardLoadRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBoomFiBPayCardLoadRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBoomFiBPayCardLoadRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiBPayCardLoadResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/card-loads/{id}": {
      "get": {
        "tags": [
          "Card Loads"
        ],
        "summary": "Get a BoomFi-to-BPay card load",
        "description": "Returns the current funding, BoomFi trade, fiat settlement, and BPay load status. Poll until Status is completed or failed.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiBPayCardLoadResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/quantum-topup/estimate": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Estimate Quantum top-up conversion using CryptoConnect quotes for USD to USDT/USDC and USDT/USDC to USD",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "description": "USD amount to estimate for the forward and reverse quote requests",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuantumTopUpEstimateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/limits": {
      "put": {
        "tags": [
          "Cards"
        ],
        "summary": "Update card spending limits (daily/weekly/monthly) for a specific user and card",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardUpdateLimitsRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CardUpdateLimitsRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CardUpdateLimitsRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardUpdateLimitsResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards": {
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "Create a new card",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardCreateV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CardCreateV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CardCreateV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get list of cards for a user",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardListResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/physical-card-fees": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get Interlace physical card production and mailing fees for a user and destination country",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "country",
            "in": "query",
            "description": "Destination country ISO-2 code, for example MY",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cardTypeId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardPhysicalCardFeesResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/bulk-ship/quote": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Quote Interlace physical card shipment fees for the authenticated user's card.",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "Quote Interlace physical card shipment fees for the authenticated user's card.",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/bulk-ship": {
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "Execute Interlace physical card shipment for the authenticated user's card.",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkShipResponseV2"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/cardHolders": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get list of card holders for a user",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CardHolderResponseV2"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get detailed card information including sensitive data",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardDetailsResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Cards"
        ],
        "summary": "Permanently delete an Interlace card.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardDeleteResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/activate": {
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "Activate a physical card",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardActivateResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/freeze": {
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "Freeze a card to temporarily disable it",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardFreezeResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/enable": {
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "Enable (unfreeze) a card to re-enable it",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardEnableResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/auto-lock": {
      "put": {
        "tags": [
          "Cards"
        ],
        "summary": "Enable or disable Auto Lock for a card",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardAutoLockRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CardAutoLockRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CardAutoLockRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardAutoLockResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/transactions": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get card transactions for a specific user and card",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Number of transactions to return (default: 25)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (starting from 0, default: 0)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardTransactionsResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/pin": {
      "put": {
        "tags": [
          "Cards"
        ],
        "summary": "Update card PIN",
        "description": "**PIN Code Rules**\n\n1. **Length**\n   The PIN must be exactly 6 digits.\n\n2. **No repeated digits**\n   It must not contain any sequence of three identical digits.\n   Not allowed: `111`, `222`, `999`\n\n3. **No sequential digits**\n   No three consecutive increasing or decreasing digits.\n   Examples not allowed: `123`, `234`, `789`, `890`, `098`, `321`",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "**PIN Code Rules**\n\n1. **Length**\n   The PIN must be exactly 6 digits.\n\n2. **No repeated digits**\n   It must not contain any sequence of three identical digits.\n   Not allowed: `111`, `222`, `999`\n\n3. **No sequential digits**\n   No three consecutive increasing or decreasing digits.\n   Examples not allowed: `123`, `234`, `789`, `890`, `098`, `321`",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardUpdatePinRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CardUpdatePinRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CardUpdatePinRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardUpdatePinResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/cards/topup": {
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "TopUp - Direct card top-up with card ID",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TopUpRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TopUpRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TopUpRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TopUpResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/cards/unload-card": {
      "post": {
        "tags": [
          "Cards"
        ],
        "summary": "UnloadFromCard - Unload funds from a card to quantum wallet",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardUnloadRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CardUnloadRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CardUnloadRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardUnloadResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/cards/{cardId}/widget": {
      "get": {
        "tags": [
          "Cards"
        ],
        "summary": "Get secure widget URL for displaying card details in an iframe",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID (mandatory)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "verificationToken",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "description": "Card ID (mandatory)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardWidgetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/trading-overview": {
      "get": {
        "tags": [
          "Crypto Exchange"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiTradingOverview"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/bank-address-book": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Register a BoomFi fiat external account",
        "description": "Registers a fiat external account in the user's BoomFi organisation as a payout destination.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Registers a fiat external account in the user's BoomFi organisation as a payout destination.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BoomFiCreateBankAddressBookRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BoomFiCreateBankAddressBookRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BoomFiCreateBankAddressBookRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiBankAddressBookAccount"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicOpenCryptoVirtualAccountRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicOpenCryptoVirtualAccountRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicOpenCryptoVirtualAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenCryptoVirtualAccountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/payin-address": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicCreateCryptoDepositAddressRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicCreateCryptoDepositAddressRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicCreateCryptoDepositAddressRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateCryptoDepositAddressResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/equals-to-interlace": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Transfer EqualsMoney fiat to Interlace crypto through BoomFi",
        "description": "Creates an EqualsMoney payment to the user's BoomFi fiat account, waits for the BoomFi deposit webhook, compares the funded quote with the stored request quote, and exchanges/pays the selected Interlace address. Rate moves beyond ±0.5% require user approval.",
        "requestBody": {
          "description": "Creates an EqualsMoney payment to the user's BoomFi fiat account, waits for the BoomFi deposit webhook, compares the funded quote with the stored request quote, and exchanges/pays the selected Interlace address. Rate moves beyond ±0.5% require user approval.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToInterlaceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToInterlaceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToInterlaceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicEqualsToInterlaceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/equals-to-wallet/initiate": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToWalletInitiateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToWalletInitiateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToWalletInitiateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicEqualsToWalletInitiateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/equals-to-wallet/confirm": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToWalletConfirmRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToWalletConfirmRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicEqualsToWalletConfirmRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicEqualsToWalletConfirmResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/ramp-quote": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiRampQuoteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiRampQuoteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiRampQuoteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiRampQuoteData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/exchange/quote": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Request an exact BoomFi balance-to-balance quote",
        "description": "Returns an expiring quote for fiat-to-crypto or crypto-to-fiat conversion between the selected BoomFi account IDs. Read account IDs from trading-overview and never calculate a rate locally.",
        "requestBody": {
          "description": "Returns an expiring quote for fiat-to-crypto or crypto-to-fiat conversion between the selected BoomFi account IDs. Read account IDs from trading-overview and never calculate a rate locally.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiExchangeQuoteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiExchangeQuoteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiExchangeQuoteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiRampQuoteData"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/exchange/accept": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Accept an exact BoomFi exchange quote",
        "description": "Accepts an unexpired quote returned by exchange/quote. Do not retry an expired quote; request a new one.",
        "requestBody": {
          "description": "Accepts an unexpired quote returned by exchange/quote. Do not retry an expired quote; request a new one.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiAcceptExchangeQuoteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiAcceptExchangeQuoteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiAcceptExchangeQuoteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/interlace-to-equals/initiate": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Initiate an Interlace-to-EqualsMoney transfer through BoomFi",
        "description": "Validates the Interlace withdrawal route, prepares the BoomFi deposit instruction, resolves the target EqualsMoney budget, and sends an OTP. This step does not withdraw funds.",
        "requestBody": {
          "description": "Validates the Interlace withdrawal route, prepares the BoomFi deposit instruction, resolves the target EqualsMoney budget, and sends an OTP. This step does not withdraw funds.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiInterlaceToEqualsInitiateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiInterlaceToEqualsInitiateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiInterlaceToEqualsInitiateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiInterlaceToEqualsInitiateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/interlace-to-equals/confirm": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Confirm an Interlace-to-EqualsMoney transfer through BoomFi",
        "description": "Verifies the OTP, submits the Interlace crypto withdrawal to the prepared BoomFi address, and queues the BoomFi conversion. After fiat settlement, Hoppa credits the resolved EqualsMoney budget.",
        "requestBody": {
          "description": "Verifies the OTP, submits the Interlace crypto withdrawal to the prepared BoomFi address, and queues the BoomFi conversion. After fiat settlement, Hoppa credits the resolved EqualsMoney budget.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiInterlaceToEqualsConfirmRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiInterlaceToEqualsConfirmRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiInterlaceToEqualsConfirmRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiInterlaceToEqualsConfirmResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/transfers": {
      "get": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "List BoomFi transfer workflows",
        "description": "Returns the latest persisted Interlace-to-EqualsMoney and EqualsMoney-to-Interlace workflows for the selected user. Poll this endpoint when signed webhook delivery is delayed.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BoomFiOtcTradeRequestResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/transfers/{id}": {
      "get": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Get a BoomFi transfer workflow",
        "description": "Returns funding, quote, approval, exchange, settlement, payout, return-fee, and completion state for one transfer.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiOtcTradeRequestResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/transfers/{transferId}/decision": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Respond to a changed BoomFi quote",
        "description": "Use approve or decline while the transfer awaits quote approval. After decline, use keep to leave funds at BoomFi or return to send them back to the recorded source; provider/network return costs are reported when BoomFi supplies them.",
        "parameters": [
          {
            "name": "transferId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Use approve or decline while the transfer awaits quote approval. After decline, use keep to leave funds at BoomFi or return to send them back to the recorded source; provider/network return costs are reported when BoomFi supplies them.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiTransferDecisionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiTransferDecisionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicBoomFiTransferDecisionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiOtcTradeRequestResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/discount-codes": {
      "get": {
        "tags": [
          "DiscountCodes"
        ],
        "summary": "Gets all discount codes for the authenticated user's company",
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeListResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeListResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeListResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "DiscountCodes"
        ],
        "summary": "Creates a new discount code",
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDiscountCodeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDiscountCodeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDiscountCodeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/discount-codes/{id}": {
      "get": {
        "tags": [
          "DiscountCodes"
        ],
        "summary": "Gets a specific discount code by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "DiscountCodes"
        ],
        "summary": "Updates an existing discount code",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDiscountCodeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDiscountCodeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDiscountCodeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscountCodeResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "DiscountCodes"
        ],
        "summary": "Deletes a discount code",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/admin/discount-codes/cards/{cardId}/discount": {
      "put": {
        "tags": [
          "DiscountCodes"
        ],
        "summary": "Updates a card's discount code (for admin use)",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCardDiscountRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCardDiscountRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCardDiscountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/dashboard/dual-balance": {
      "get": {
        "tags": [
          "DualBalance"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceDashboardResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceDashboardResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceDashboardResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/dashboard/dual-balance/card-funding/preview": {
      "post": {
        "tags": [
          "DualBalance"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DualBalanceFundingPreviewRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DualBalanceFundingPreviewRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DualBalanceFundingPreviewRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingPreviewResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingPreviewResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingPreviewResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/dashboard/dual-balance/card-funding": {
      "post": {
        "tags": [
          "DualBalance"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DualBalanceFundingSubmitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DualBalanceFundingSubmitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DualBalanceFundingSubmitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingAcceptedResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingAcceptedResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingAcceptedResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/dashboard/dual-balance/card-funding/{requestId}": {
      "get": {
        "tags": [
          "DualBalance"
        ],
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DualBalanceFundingStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/equalsmoney-deposits": {
      "post": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Deposit crypto into an EqualsMoney budget through BoomFi",
        "description": "Creates an asynchronous crypto-to-fiat deposit. Hoppa returns a BoomFi funding instruction, monitors conversion and settlement into the configured platform EqualsMoney account, then transfers the settled fiat to the target user's EqualsMoney budget. Send a stable Idempotency-Key when retrying the same deposit.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "description": "Stable caller-generated key used to return the original operation when the same request is retried.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Creates an asynchronous crypto-to-fiat deposit. Hoppa returns a BoomFi funding instruction, monitors conversion and settlement into the configured platform EqualsMoney account, then transfers the settled fiat to the target user's EqualsMoney budget. Send a stable Idempotency-Key when retrying the same deposit.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBoomFiEqualsMoneyDepositRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBoomFiEqualsMoneyDepositRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBoomFiEqualsMoneyDepositRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiEqualsMoneyDepositResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/crypto-virtual-accounts/equalsmoney-deposits/{id}": {
      "get": {
        "tags": [
          "Crypto Exchange"
        ],
        "summary": "Get a BoomFi-to-EqualsMoney deposit",
        "description": "Returns the current funding, BoomFi trade, settlement, and EqualsMoney budget-credit status. Poll until Status is completed or failed.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BoomFiEqualsMoneyDepositResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/programs/{companyId}": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get loyalty programs for a specific company (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "description": "The company ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/auto-assign/stats/{loyaltyProgramId}": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get point assignment statistics for a loyalty program (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "loyaltyProgramId",
            "in": "path",
            "description": "The loyalty program ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/auto-assign/card-transaction": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Process card transaction for automatic point assignment (legacy endpoint compatibility).",
        "requestBody": {
          "description": "Card transaction processing request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/auto-assign/payment-request": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Process payment request for automatic point assignment (legacy endpoint compatibility).",
        "requestBody": {
          "description": "Payment request processing request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/auto-assign/bulk": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Bulk process transactions for automatic point assignment (legacy endpoint compatibility).",
        "requestBody": {
          "description": "Bulk processing request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/auto-assign/reverse": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Reverse point assignment (legacy endpoint compatibility).",
        "requestBody": {
          "description": "Reverse point assignment request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/transaction-import/configs/{companyId}": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get transaction import configurations for a company (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "description": "The company ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/transaction-import/jobs/{companyId}": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get transaction import jobs for a company (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "description": "The company ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/transaction-import/transactions/{jobId}": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get imported transactions for a specific job (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The import job ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/transaction-import/configs": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create transaction import configuration (legacy endpoint compatibility).",
        "requestBody": {
          "description": "Configuration creation request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/transaction-import/upload/{configId}": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Upload file for transaction import (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "configId",
            "in": "path",
            "description": "The configuration ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The file to upload",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "File": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/merchants": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchants with filtering (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "description": "Search term",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "description": "Category filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isActive",
            "in": "query",
            "description": "Active status filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Page size",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create merchant (legacy endpoint compatibility).",
        "requestBody": {
          "description": "Merchant creation request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/merchants/stats": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchant statistics (legacy endpoint compatibility).",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/merchants/{merchantId}/ids": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchant IDs for a specific merchant (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The merchant ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Add merchant ID (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The merchant ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Merchant ID creation request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/loyalty-programs/merchants/{merchantId}": {
      "put": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Update merchant (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The merchant ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Merchant update request",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Delete merchant (legacy endpoint compatibility).",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The merchant ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": { }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/programs": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get loyalty program configuration for the authenticated company",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyProgramResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create or update loyalty program for the authenticated company",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyProgramRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyProgramRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyProgramRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyProgramResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Update loyalty program for the authenticated company",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLoyaltyProgramRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLoyaltyProgramRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLoyaltyProgramRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyProgramResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/rules": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get all loyalty rules for the authenticated company's loyalty program",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRulesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create a new loyalty rule for the authenticated company's loyalty program",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyRuleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRuleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/rules/{ruleId}": {
      "put": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Update an existing loyalty rule",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "description": "The unique identifier of the rule to update",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLoyaltyRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLoyaltyRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLoyaltyRuleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRuleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Delete a loyalty rule with referential integrity checks",
        "parameters": [
          {
            "name": "ruleId",
            "in": "path",
            "description": "The unique identifier of the rule to delete",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": { }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/balances": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get point balances for all users (admin view)",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of balances to return",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of balances to skip",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserPointBalanceResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/transactions": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get point transactions for all users (admin view)",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of transactions to return",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of transactions to skip",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "transactionType",
            "in": "query",
            "description": "Optional filter by transaction type",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Optional start date filter",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Optional end date filter",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PointTransactionResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/user-balance": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get point balance for the authenticated user",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPointBalanceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/user-transactions": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get point transaction history for the authenticated user",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of transactions to return",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of transactions to skip",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "transactionType",
            "in": "query",
            "description": "Optional filter by transaction type",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Optional start date filter",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Optional end date filter",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PointTransactionResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/test-calculation": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Test point calculation for a transaction",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PointCalculationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PointCalculationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PointCalculationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PointCalculationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/transaction-import/configs": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get all transaction import configurations for the authenticated company",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TransactionImportConfigResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create a new transaction import configuration",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTransactionImportConfigRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTransactionImportConfigRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTransactionImportConfigRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionImportConfigResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/transaction-import/upload/{configId}": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Upload and process a transaction import file",
        "parameters": [
          {
            "name": "configId",
            "in": "path",
            "description": "The unique identifier of the import configuration",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "File": {
                    "$ref": "#/components/schemas/IFormFile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJobResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Payload Too Large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/transaction-import/jobs": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get import job history with status and statistics",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of jobs to return",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of jobs to skip",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ImportJobResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/transaction-import/jobs/details/{jobId}": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get detailed information about a specific import job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The unique identifier of the import job",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJobResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchants": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchants with search, filtering, and pagination",
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "description": "Optional search term for merchant name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "description": "Optional filter by merchant category",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isActive",
            "in": "query",
            "description": "Optional filter by active status",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "isPartner",
            "in": "query",
            "description": "Optional filter by partner status",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of merchants to return",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of merchants to skip",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create a new merchant for the authenticated company",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchants/{merchantId}": {
      "put": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Update an existing merchant",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Delete a merchant with cascade validation",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": { }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchants/stats": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchant statistics including transaction counts and revenue metrics",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "The analysis period (e.g., \"30d\", \"90d\", \"1y\")",
            "schema": {
              "type": "string",
              "default": "30d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantStatsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchants/{merchantId}/ids": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchant IDs for a specific merchant",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MerchantIdResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create a new merchant ID for a specific merchant",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantIdRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantIdRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantIdRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantIdResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchants/{merchantId}/ids/{midId}": {
      "put": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Update an existing merchant ID",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "midId",
            "in": "path",
            "description": "The unique identifier of the merchant ID record",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantIdRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantIdRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantIdRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantIdResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Delete a merchant ID",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "midId",
            "in": "path",
            "description": "The unique identifier of the merchant ID record",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": { }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchants/{merchantId}/loyalty-rules": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchant loyalty rules for a specific merchant",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MerchantLoyaltyRuleResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Create a new merchant loyalty rule",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantLoyaltyRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantLoyaltyRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMerchantLoyaltyRuleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantLoyaltyRuleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchants/{merchantId}/loyalty-rules/{ruleId}": {
      "put": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Update an existing merchant loyalty rule",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "ruleId",
            "in": "path",
            "description": "The unique identifier of the merchant loyalty rule",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantLoyaltyRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantLoyaltyRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMerchantLoyaltyRuleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MerchantLoyaltyRuleResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Delete a merchant loyalty rule",
        "parameters": [
          {
            "name": "merchantId",
            "in": "path",
            "description": "The unique identifier of the merchant",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "ruleId",
            "in": "path",
            "description": "The unique identifier of the merchant loyalty rule",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": { }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/auto-assign/card-transaction": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Process automatic point assignment for a card transaction",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessCardTransactionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessCardTransactionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessCardTransactionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PointTransactionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/auto-assign/payment-request": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Process automatic point assignment for a payment request",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessPaymentRequestRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessPaymentRequestRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessPaymentRequestRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PointTransactionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/auto-assign/bulk": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Process multiple transactions in bulk for automatic point assignment",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkProcessTransactionsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkProcessTransactionsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkProcessTransactionsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkProcessingResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/auto-assign/stats/{loyaltyProgramId}": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get point assignment statistics for a loyalty program",
        "parameters": [
          {
            "name": "loyaltyProgramId",
            "in": "path",
            "description": "The unique identifier of the loyalty program",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Optional start date for the analysis period",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Optional end date for the analysis period",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PointAssignmentStatsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/auto-assign/reverse": {
      "post": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Reverse a point assignment with audit trail support",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReversePointAssignmentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReversePointAssignmentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReversePointAssignmentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content",
            "content": {
              "application/json": { }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/stats": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get comprehensive loyalty program statistics",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyStatsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/geographic-analytics": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get geographic analytics with regional performance data",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "Analysis period (e.g., \"30d\", \"90d\", \"1y\")",
            "schema": {
              "type": "string",
              "default": "30d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeographicAnalyticsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/location-insights": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get location insights with city and country performance rankings",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "Analysis period (e.g., \"30d\", \"90d\", \"1y\")",
            "schema": {
              "type": "string",
              "default": "30d"
            }
          },
          {
            "name": "metric",
            "in": "query",
            "description": "Metric to analyze (e.g., \"transactions\", \"users\", \"points\")",
            "schema": {
              "type": "string",
              "default": "transactions"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LocationInsightsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/geographic-analytics/export": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Export geographic analytics data to CSV format",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "Analysis period",
            "schema": {
              "type": "string",
              "default": "30d"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileContentResult"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/merchant-categories": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get merchant categories for analytics filtering",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/user/dashboard": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get comprehensive user dashboard data with auto-enrollment",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDashboardResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/user/transactions": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get user point transactions with advanced filtering",
        "parameters": [
          {
            "name": "transactionType",
            "in": "query",
            "description": "Optional filter by transaction type",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Optional start date filter (ISO 8601 format)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Optional end date filter (ISO 8601 format)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "source",
            "in": "query",
            "description": "Optional filter by transaction source",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minPoints",
            "in": "query",
            "description": "Optional minimum points filter",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "maxPoints",
            "in": "query",
            "description": "Optional maximum points filter",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of transactions to return (1-1000, default: 50)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of transactions to skip (default: 0)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PointTransactionResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/loyalty/user/redemption-options": {
      "get": {
        "tags": [
          "Loyalty Program"
        ],
        "summary": "Get available redemption options for the authenticated user",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RedemptionOptionResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/kyb": {
      "post": {
        "tags": [
          "MOR"
        ],
        "summary": "Submit or resubmit KYB for the API key's MoR merchant.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MorKybSubmissionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MorKybSubmissionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MorKybSubmissionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/onboarding-status": {
      "get": {
        "tags": [
          "MOR"
        ],
        "summary": "Get the merchant onboarding status; optionally refresh it from Interlace.",
        "parameters": [
          {
            "name": "refresh",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/cardholder": {
      "post": {
        "tags": [
          "MOR"
        ],
        "summary": "Create or return the merchant's company-level CORPORATE_MANAGED cardholder.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/MorEnsureCardholderRequest"
                  }
                ],
                "nullable": true
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/MorEnsureCardholderRequest"
                  }
                ],
                "nullable": true
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/MorEnsureCardholderRequest"
                  }
                ],
                "nullable": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/users": {
      "post": {
        "tags": [
          "MOR"
        ],
        "summary": "Add a user_simple to the API key's MoR company.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MorCreateSimpleUserRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MorCreateSimpleUserRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MorCreateSimpleUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/cards/batch": {
      "post": {
        "tags": [
          "MOR"
        ],
        "summary": "Order 1-20 prepaid cards in a batch.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MorOrderCardsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MorOrderCardsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MorOrderCardsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/cards/{cardId}/assign": {
      "post": {
        "tags": [
          "MOR"
        ],
        "summary": "Assign a merchant-owned card to a user_simple in the same company.",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MorAssignCardRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MorAssignCardRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MorAssignCardRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/cards/{cardId}/load": {
      "post": {
        "tags": [
          "MOR"
        ],
        "summary": "Load a merchant-owned card from the merchant's Interlace account.",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MorPublicCardFundingRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MorPublicCardFundingRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MorPublicCardFundingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/cards/{cardId}/unload": {
      "post": {
        "tags": [
          "MOR"
        ],
        "summary": "Unload a merchant-owned card to the merchant's Interlace account.",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MorPublicCardFundingRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MorPublicCardFundingRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MorPublicCardFundingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/cards": {
      "get": {
        "tags": [
          "MOR"
        ],
        "summary": "Get all merchant cards with their current available and pending balances.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/users/{userId}/cards": {
      "get": {
        "tags": [
          "MOR"
        ],
        "summary": "Get one user_simple's assigned cards and aggregate card balances.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/cards/{cardId}/secure-widget": {
      "get": {
        "tags": [
          "MOR"
        ],
        "summary": "Get a secure hosted card-information widget.",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/mor/public/wallets": {
      "get": {
        "tags": [
          "MOR"
        ],
        "summary": "Get merchant wallets, deposit addresses, and fiat/crypto balances.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/onboarding/config": {
      "get": {
        "tags": [
          "Onboarding"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/onboarding/status": {
      "get": {
        "tags": [
          "Onboarding"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/onboarding/tier": {
      "post": {
        "tags": [
          "Onboarding"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SelectOnboardingTierRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SelectOnboardingTierRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SelectOnboardingTierRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/onboarding/gates/{gateNumber}/checkout": {
      "post": {
        "tags": [
          "Onboarding"
        ],
        "parameters": [
          {
            "name": "gateNumber",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/GateCheckoutRequest"
                  }
                ],
                "nullable": true
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/GateCheckoutRequest"
                  }
                ],
                "nullable": true
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/GateCheckoutRequest"
                  }
                ],
                "nullable": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/onboarding/kyc1/session": {
      "post": {
        "tags": [
          "Onboarding"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/KycTokenRequestV2"
                  }
                ],
                "nullable": true
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/KycTokenRequestV2"
                  }
                ],
                "nullable": true
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/KycTokenRequestV2"
                  }
                ],
                "nullable": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/onboarding/kyc2/session": {
      "post": {
        "tags": [
          "Onboarding"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/payments/create": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Create a payment with automatic currency exchange and transfer",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/mandates": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Create a payment mandate",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentMandateCreateV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentMandateCreateV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentMandateCreateV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentMandateResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "List payment mandates with filtering and pagination",
        "parameters": [
          {
            "name": "pageNumber",
            "in": "query",
            "description": "Page number (default: 1)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Page size (default: 10, max: 100)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Filter by user ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by mandate status",
            "schema": {
              "$ref": "#/components/schemas/MandateStatusV2"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Filter by currency",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Filter by creation date from",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "Filter by creation date to",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentMandateListResponseV2"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/mandates/{mandateId}": {
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "Get payment mandate by ID",
        "parameters": [
          {
            "name": "mandateId",
            "in": "path",
            "description": "Payment mandate ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentMandateResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/mandates/{mandateId}/revoke": {
      "put": {
        "tags": [
          "Payments"
        ],
        "summary": "Revoke a payment mandate",
        "parameters": [
          {
            "name": "mandateId",
            "in": "path",
            "description": "Payment mandate ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentMandateRevokeV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentMandateRevokeV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentMandateRevokeV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentMandateResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/requests": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Create a payment request",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentRequestCreateV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentRequestCreateV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentRequestCreateV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentRequestResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "List payment requests with filtering and pagination",
        "parameters": [
          {
            "name": "pageNumber",
            "in": "query",
            "description": "Page number (default: 1)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Page size (default: 10, max: 100)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Filter by user ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by payment status",
            "schema": {
              "$ref": "#/components/schemas/PaymentStatusV2"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Filter by currency",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Filter by creation date from",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "Filter by creation date to",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentRequestListResponseV2"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/requests/{requestId}": {
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "Get payment request by ID",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentRequestResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/requests/{requestId}/cancel": {
      "put": {
        "tags": [
          "Payments"
        ],
        "summary": "Cancel a payment request",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentRequestCancelV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentRequestCancelV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentRequestCancelV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentRequestResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/payouts": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Create a payout",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequestCreateV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequestCreateV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequestCreateV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/withdrawals/fee": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Get withdrawal fee estimate",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawalFeeRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawalFeeRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawalFeeRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WithdrawalFeeResponseV2"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/withdrawals": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Create a withdrawal",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawalCreateV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawalCreateV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WithdrawalCreateV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/payments/assets/co-brand": {
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "Get co-brand assets",
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "description": "Optional company ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserAssetsResponseV2"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/referrals/summary": {
      "get": {
        "tags": [
          "PublicUserReferrals"
        ],
        "summary": "Returns invite, level progress, referral counts, commission totals, and payout mode.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralSummaryResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralSummaryResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralSummaryResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/referrals/commissions": {
      "get": {
        "tags": [
          "PublicUserReferrals"
        ],
        "summary": "Returns the user's referral commission history.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralCommissionResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralCommissionResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralCommissionResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/referrals/attribution": {
      "post": {
        "tags": [
          "PublicUserReferrals"
        ],
        "summary": "Creates the immutable rewarded relationship after registration succeeds.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReferralAttributionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReferralAttributionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReferralAttributionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "No Content"
          }
        }
      }
    },
    "/api/v2/users/{userId}/referrals/vouchers": {
      "get": {
        "tags": [
          "PublicUserReferrals"
        ],
        "summary": "Lists assigned vouchers that can be rendered in a WL-hosted user experience.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AssignedVoucherResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AssignedVoucherResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AssignedVoucherResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/referrals/vouchers/{assignmentId}/redeem": {
      "post": {
        "tags": [
          "PublicUserReferrals"
        ],
        "summary": "Redeems an assigned voucher without exposing or typing its voucher code.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "assignmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/referrals/vouchers/redeem-all": {
      "post": {
        "tags": [
          "PublicUserReferrals"
        ],
        "summary": "Initiates all eligible assigned vouchers through the existing voucher processor.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemAllAssignedVouchersResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemAllAssignedVouchersResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/RedeemAllAssignedVouchersResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/settings": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVoucherSettingsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherModuleStatusResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/groups": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherGroupResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherGroupResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherGroupResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherGroupRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherGroupRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/groups/{id}/status/{status}": {
      "put": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherGroupResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/batch": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherBatchRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherBatchRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherBatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/assignments": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/vouchers/assignments/from-group": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherFromGroupRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherFromGroupRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVoucherFromGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/{id}/status/{status}": {
      "put": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/{id}/reveal": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/vouchers/redemptions": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/validate": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RedeemVoucherForUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherValidationResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherValidationResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherValidationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/redemptions/{id}/verification/resend": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/vouchers/redemptions/{id}/verify": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyVoucherRedemptionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyVoucherRedemptionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyVoucherRedemptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/redemptions/{id}": {
      "delete": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/approvals": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRedemptionResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRedemptionResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRedemptionResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/approvals/{id}": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecideVoucherRedemptionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DecideVoucherRedemptionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DecideVoucherRedemptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/liability": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/liability/preview": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilityResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/redemptions/{id}/retry": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRedemptionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/rules": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRuleResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRuleResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherRuleResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRuleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRuleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVoucherRuleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRuleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRuleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherRuleResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/rules/{id}/enabled/{enabled}": {
      "put": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "enabled",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/vouchers/imports/preview": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContentType": {
                    "type": "string"
                  },
                  "ContentDisposition": {
                    "type": "string"
                  },
                  "Headers": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "Length": {
                    "pattern": "^-?(?:0|[1-9]\\d*)$",
                    "format": "int64"
                  },
                  "Name": {
                    "type": "string"
                  },
                  "FileName": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherImportPreviewResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherImportPreviewResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherImportPreviewResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/imports/template": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/vouchers/imports/{id}/confirm": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmVoucherImportRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmVoucherImportRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmVoucherImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/assignments/mass": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MassAssignVoucherRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MassAssignVoucherRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MassAssignVoucherRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/jobs": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/jobs/{id}": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/jobs/{id}/items": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobItemResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobItemResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherJobItemResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/jobs/{id}/retry": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherJobResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/jobs/{id}/codes/export": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/vouchers/redemptions/{id}/reversal": {
      "post": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReverseVoucherRedemptionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReverseVoucherRedemptionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReverseVoucherRedemptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherReversalResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherReversalResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherReversalResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/reports/redemptions": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReportRow"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReportRow"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherReportRow"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/reports/daily-statistics": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherDailyStatisticResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherDailyStatisticResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherDailyStatisticResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/reports/liability-snapshots": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilitySnapshotResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilitySnapshotResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherLiabilitySnapshotResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/vouchers/reports/{report}/export": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "report",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/vouchers/audit": {
      "get": {
        "tags": [
          "PublicVouchers"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherAuditResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherAuditResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VoucherAuditResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/admin/support/messages/report-transaction": {
      "post": {
        "tags": [
          "Support"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReportTransactionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReportTransactionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReportTransactionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/swaptokens/swap": {
      "post": {
        "tags": [
          "Swap"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SwapRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SwapRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SwapRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SwapResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SwapResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/swaptokens/history": {
      "get": {
        "tags": [
          "Swap"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/tiers": {
      "get": {
        "tags": [
          "Tiers"
        ],
        "summary": "Get company tiers for the authenticated company",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTiersResponseV2"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/tiers/card-tier/{cardTierId}": {
      "get": {
        "tags": [
          "Tiers"
        ],
        "summary": "Get all card type tiers for a specific tier ID for the authenticated company",
        "parameters": [
          {
            "name": "cardTierId",
            "in": "path",
            "description": "The tier ID to get card type tiers for",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCardTypeTierResponseV2"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transaction-reports/monthly": {
      "get": {
        "tags": [
          "Transaction Reports"
        ],
        "summary": "Downloads a Hoppacard-branded EqualsMoney transaction report for a calendar month.\nThis convenience report is watermarked and is not an official bank statement.",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "month",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "413": {
            "description": "Payload Too Large",
            "content": {
              "application/pdf": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/pdf": { }
            }
          }
        }
      }
    },
    "/api/v2/transactions": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get paginated transactions with advanced filtering",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-based)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Number of items per page",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 20
            }
          },
          {
            "name": "types",
            "in": "query",
            "description": "Transaction types to filter by",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "statuses",
            "in": "query",
            "description": "Transaction statuses to filter by",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Start date for filtering",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "End date for filtering",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search term for description or merchant",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tradeId",
            "in": "query",
            "description": "External trade/order identifier",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minAmount",
            "in": "query",
            "description": "Minimum transaction amount",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          {
            "name": "maxAmount",
            "in": "query",
            "description": "Maximum transaction amount",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          {
            "name": "sources",
            "in": "query",
            "description": "Transaction sources to filter by",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "cardIds",
            "in": "query",
            "description": "Card IDs to filter by",
            "schema": {
              "type": "array",
              "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)$",
                "format": "int32"
              }
            }
          },
          {
            "name": "walletIds",
            "in": "query",
            "description": "Wallet IDs to filter by",
            "schema": {
              "type": "array",
              "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)$",
                "format": "int32"
              }
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "Sort field (date, amount, type)",
            "schema": {
              "type": "string",
              "default": "date"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "Sort order (asc, desc)",
            "schema": {
              "type": "string",
              "default": "desc"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedTransactionResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedTransactionResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedTransactionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/api/v2/transactions/sync": {
      "post": {
        "tags": [
          "Transactions"
        ],
        "summary": "Sync current user's transactions with Interlace (Quantum Account). Adds any missing transactions by external_id.",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": { }
              },
              "application/json": {
                "schema": { }
              },
              "text/json": {
                "schema": { }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/api/v2/transactions/{id}": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get transaction by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Transaction ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDetailResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDetailResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionDetailResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/api/v2/transactions/{id}/equals-money/payment-confirmation": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transactions/stats": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Get transaction statistics",
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "description": "Start date for statistics",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "End date for statistics",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionStatisticsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionStatisticsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionStatisticsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/api/v2/transactions/export": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Export transactions in CSV or PDF format",
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "description": "Export format (csv or pdf)",
            "schema": {
              "type": "string",
              "default": "csv"
            }
          },
          {
            "name": "types",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "statuses",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minAmount",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          {
            "name": "maxAmount",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          {
            "name": "sources",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "cardIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)$",
                "format": "int32"
              }
            }
          },
          {
            "name": "walletIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)$",
                "format": "int32"
              }
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/api/v2/transactions/top-up": {
      "post": {
        "tags": [
          "Transactions"
        ],
        "summary": "Processes a wallet top-up operation using external payment methods.",
        "requestBody": {
          "description": "Token to cancel the operation",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletTopUpRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletTopUpRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WalletTopUpRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TopUpResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TopUpResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TopUpResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/{transferId}": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Get transfer by ID",
        "parameters": [
          {
            "name": "transferId",
            "in": "path",
            "description": "Transfer ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/user-to-master": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Create a transfer from user to master account",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserToMasterTransferPayloadV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserToMasterTransferPayloadV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserToMasterTransferPayloadV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/master-to-user": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Create a transfer from master account to user",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterToUserTransferPayloadV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MasterToUserTransferPayloadV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MasterToUserTransferPayloadV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "List transfers with filtering and pagination",
        "parameters": [
          {
            "name": "pageNumber",
            "in": "query",
            "description": "Page number (default: 1)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Page size (default: 10, max: 100)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Filter by user ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by transfer status",
            "schema": {
              "$ref": "#/components/schemas/TransferStatusV2"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Filter by currency",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Filter by creation date from",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "Filter by creation date to",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferListResponseV2"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/wallet-topup": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Request a wallet top-up via Transak",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID. Required for API key authentication.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletTopUpRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WalletTopUpRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WalletTopUpRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TopUpResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/crypto-to-quantum-transfer": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Create a crypto-to-quantum transfer for internal account transfers (destination is always USD)",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CryptoToQuantumTransferBodyRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CryptoToQuantumTransferBodyRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CryptoToQuantumTransferBodyRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoToQuantumTransferResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/quantum-usd-to-crypto-exchange": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Exchange Quantum USD to Crypto (USDC/USDT)",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuantumToCryptoExchangeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuantumToCryptoExchangeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuantumToCryptoExchangeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuantumToCryptoExchangeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/withdrawals/fee-and-quota": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Get withdrawal fee and quota information",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "chain",
            "in": "query",
            "description": "Interlace blockchain network identifier compatible with the requested asset",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "address",
            "in": "query",
            "description": "Destination address",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Currency (USDT, USDC)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "description": "Withdrawal amount",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeeAndQuotaResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/withdrawals/available-balance": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Get available withdrawal balance for a user",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AvailableWithdrawalBalanceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/withdrawals/crypto": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Create an external crypto withdrawal (to blockchain address)",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalCryptoWithdrawalRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalCryptoWithdrawalRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalCryptoWithdrawalRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalCryptoWithdrawalResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/withdrawals/crypto/confirm": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Confirm a crypto withdrawal with an emailed OTP code",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmCryptoWithdrawalOtpRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmCryptoWithdrawalOtpRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmCryptoWithdrawalOtpRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalCryptoWithdrawalResponse"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalCryptoWithdrawalResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoWithdrawalOtpErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoWithdrawalOtpErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/withdrawals/crypto/resend": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Resend the OTP for a pending API crypto withdrawal.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResendCryptoWithdrawalOtpRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ResendCryptoWithdrawalOtpRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ResendCryptoWithdrawalOtpRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoWithdrawalOtpResendResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/withdrawals/validate": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Validate withdrawal request",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Currency (USDT or USDC)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "description": "Amount to withdraw",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WithdrawalValidationResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/crypto-transactions": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Get user crypto transactions (CryptoConnect transfers)",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "Optional transfer ID filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "transactionHash",
            "in": "query",
            "description": "Optional transaction hash filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "referenceId",
            "in": "query",
            "description": "Optional reference ID filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startTime",
            "in": "query",
            "description": "Optional start time filter (milliseconds)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endTime",
            "in": "query",
            "description": "Optional end time filter (milliseconds)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Number of results per page (default: 10)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (default: 1)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoTransfersListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/crypto-refunds": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Create a crypto refund",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCryptoRefundRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCryptoRefundRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCryptoRefundRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateCryptoRefundResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Get crypto refunds for a user",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "Optional refund ID filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "transferId",
            "in": "query",
            "description": "Optional transfer ID filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "transactionHash",
            "in": "query",
            "description": "Optional transaction hash filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "referenceId",
            "in": "query",
            "description": "Optional reference ID filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startTime",
            "in": "query",
            "description": "Optional start time filter (milliseconds)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endTime",
            "in": "query",
            "description": "Optional end time filter (milliseconds)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Number of results per page (default: 10)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (default: 1)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoRefundsListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/crypto-refunds/gas-fee": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Get refund gas fee for a specific currency and chain",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetRefundGasFeeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GetRefundGasFeeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GetRefundGasFeeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetRefundGasFeeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/transfers/test-fees": {
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Test endpoint for fee charging flow",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "User ID",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "completeFee",
            "in": "query",
            "description": "Complete fee amount",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          {
            "name": "whitelabelFee",
            "in": "query",
            "description": "Whitelabel fee amount",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": { }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Create a new user",
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCreateV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCreateV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserCreateV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "List users with filtering and pagination",
        "parameters": [
          {
            "name": "pageNumber",
            "in": "query",
            "description": "Page number (default: 1)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Page size (default: 10, max: 100)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "query",
            "in": "query",
            "description": "Search query for email, name, or external user ID",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by user status",
            "schema": {
              "$ref": "#/components/schemas/AccountStatusV2"
            }
          },
          {
            "name": "kycStatus",
            "in": "query",
            "description": "Filter by KYC status",
            "schema": {
              "$ref": "#/components/schemas/KycStatusV2"
            }
          },
          {
            "name": "externalUserId",
            "in": "query",
            "description": "Filter by external user ID",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Filter by creation date from",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "Filter by creation date to",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserListResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Get user by ID",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDetailResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Users"
        ],
        "summary": "Update user information",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserUpdateV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserUpdateV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserUpdateV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/occupation-codes": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Get complete list of occupation codes",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OccupationCode"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/kyc/verify": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Verify and update user KYC information with comprehensive verification data",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserKycVerificationRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserKycVerificationRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserKycVerificationRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserKycVerificationResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/crypto-addresses": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Get user crypto wallet addresses. Passing `userId = 0` returns master account addresses for the authenticated company.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserCryptoAddressListResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/assets": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Get user assets (balances). Passing `userId = 0` returns master account balances for the authenticated company.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "interlaceAccountId",
            "in": "query",
            "description": "Optional Interlace account ID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserAssetsResponseV2"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/kyc/sumsub-token": {
      "put": {
        "tags": [
          "Users"
        ],
        "summary": "Update user SumSub KYC token",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserKycSumSubTokenRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserKycSumSubTokenRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserKycSumSubTokenRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserKycSumSubTokenUpdateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/kyc/sumsub-access-token": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Get a SumSub access token for the user (for mobile SDK)",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SumSubAccessTokenRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SumSubAccessTokenRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SumSubAccessTokenRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SumSubAccessTokenApiResponseV2"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/kyc/detailed-status": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Get detailed KYC status breakdown for the user",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID to check KYC status for",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailedKycStatusResponseV2"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/kyc/equalsmoney/documents": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Respond to an EqualsMoney document request",
        "description": "Uploads one or more documents for one item returned in `AdditionalDocumentsRequested`.\n\nSend the `Files` multipart field once for each PDF, JPEG, or PNG file. Files are combined into one PDF in the order supplied, then uploaded to EqualsMoney as the single document response for that request item.\n\n**Multipart example**\n\n```text\nType=PROOF_OF_FUNDS\nAssociatedPersonId=optional-person-id\nFiles=@statement.pdf\nFiles=@invoice.jpg\nFiles=@receipt.png\n```\n\n**Limits:** 10 files; 10 MB per input file; 50 MB total input; 100 combined pages; 50 megapixels per image; 10,000,000 bytes for the generated PDF. The legacy singular `File` field remains accepted for existing integrations but is deprecated.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID whose EqualsMoney application requested the document",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Multipart form containing the request type and either the recommended `Files` array or deprecated singular `File`.",
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "Type"
                ],
                "type": "object",
                "properties": {
                  "File": {
                    "type": "string",
                    "description": "Deprecated single-document field retained for compatibility. New integrations should use `Files`, including when uploading only one file.",
                    "format": "binary",
                    "deprecated": true
                  },
                  "Files": {
                    "maxItems": 10,
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "description": "One PDF, JPEG, or PNG input document.",
                      "format": "binary"
                    },
                    "description": "Documents to combine. Repeat the `Files` multipart field for every file; array order is preserved in the generated PDF."
                  },
                  "Type": {
                    "type": "string",
                    "description": "The exact request item type returned in `AdditionalDocumentsRequested`, for example `PROOF_OF_FUNDS`.",
                    "example": "PROOF_OF_FUNDS"
                  },
                  "AssociatedPersonId": {
                    "type": "string",
                    "description": "Associated person identifier from the request item. Omit for company-level or primary-user requests.",
                    "example": "person-123"
                  }
                }
              },
              "encoding": {
                "Files": {
                  "contentType": "application/pdf, image/jpeg, image/png"
                },
                "File": {
                  "contentType": "application/pdf, image/jpeg, image/png"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EqualsMoneyAdditionalDocumentUploadResponseV2"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/check-referral": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Check if a referral code is valid for a company",
        "parameters": [
          {
            "name": "referralCode",
            "in": "query",
            "description": "The referral code to validate",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralCheckResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/wallets": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "List crypto wallets for a user. Passing `userId = 0` returns master account wallets for the authenticated company.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID (use 0 for master account)",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "Optional wallet ID filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nickname",
            "in": "query",
            "description": "Optional wallet nickname filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Optional currency filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "master",
            "in": "query",
            "description": "Optional master wallet filter",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "referenceId",
            "in": "query",
            "description": "Optional reference ID filter",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Number of results per page (default: 10, max: 100)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (default: 1)",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CryptoConnectWalletsV3Response"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/create-interlace-account/{userId}": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Create an Interlace account for the authenticated user",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateInterlaceAccountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": { }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/sumsub/kyc-url": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Generate SumSub KYC verification URL for user",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID to generate KYC URL for",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SumSubAccessTokenRequestV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SumSubAccessTokenRequestV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SumSubAccessTokenRequestV2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns the SumSub access token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SumSubKycUrlResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request or KYC already completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "User not authenticated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "User does not belong to the company",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "User not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/users/{userId}/tier": {
      "post": {
        "tags": [
          "Users"
        ],
        "summary": "Set user tier and queue the first subscription fee for scheduled fee charging",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "User ID",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Cancellation token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetUserTierRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetUserTierRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetUserTierRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TierBuyResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2/whitelabel/transactions": {
      "get": {
        "tags": [
          "WhitelabelTransactions"
        ],
        "summary": "Get company transactions (user_id = 0 and company_id matches the user's company).",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32",
              "default": 20
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/whitelabel/transactions/sync": {
      "post": {
        "tags": [
          "WhitelabelTransactions"
        ],
        "summary": "Sync transactions from Interlace for the whitelabel company's account.\nCreates transactions with user_id=0 and company_id set to the requesting user's company.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v2/whitelabel/transactions/export": {
      "get": {
        "tags": [
          "WhitelabelTransactions"
        ],
        "summary": "Export all transactions matching the filters (no pagination) for CSV export.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/webhooks/outbound/user.registered": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "user.registered",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a user is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-user-registered",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "user.registered"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "user.registered"
                  },
                  "domain": {
                    "enum": [
                      "user"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "user"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "email": {
                        "type": "string",
                        "description": "`data.email` parameter.",
                        "example": "user@example.com"
                      }
                    },
                    "description": "Event-specific payload for `user.registered`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "user.registered",
                "domain": "user",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "email": "user@example.com"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/user.kyc.updated": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "user.kyc.updated",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a user's KYC status changes during verification submission or provider processing.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-user-kyc-updated",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "user.kyc.updated"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "user.kyc.updated"
                  },
                  "domain": {
                    "enum": [
                      "user"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "user"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "pending"
                      }
                    },
                    "description": "Event-specific payload for `user.kyc.updated`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "user.kyc.updated",
                "domain": "user",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "status": "pending"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/kyc.verified": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "kyc.verified",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Interlace or SumSub KYC review is processed.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-kyc-verified",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "kyc.verified"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "kyc.verified"
                  },
                  "domain": {
                    "enum": [
                      "kyc"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "kyc"
                  },
                  "provider": {
                    "enum": [
                      "sumsub"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "sumsub"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "kycLevel": {
                        "type": "string",
                        "description": "`data.kycLevel` parameter.",
                        "example": "hoppacard-stagging"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "approved"
                      }
                    },
                    "description": "Event-specific payload for `kyc.verified`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "kyc.verified",
                "domain": "kyc",
                "provider": "sumsub",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "kycLevel": "hoppacard-stagging",
                  "status": "approved"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/kyc.interlace_submission_failed": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "kyc.interlace_submission_failed",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when SumSub approval could not be submitted to Interlace.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-kyc-interlace_submission_failed",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "kyc.interlace_submission_failed"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "kyc.interlace_submission_failed"
                  },
                  "domain": {
                    "enum": [
                      "kyc"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "kyc"
                  },
                  "provider": {
                    "enum": [
                      "interlace"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "interlace"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "error": {
                        "type": "string",
                        "description": "`data.error` parameter.",
                        "example": "Interlace submission failed"
                      },
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_123"
                      },
                      "applicantId": {
                        "type": "string",
                        "description": "`data.applicantId` parameter.",
                        "example": "applicant_123"
                      }
                    },
                    "description": "Event-specific payload for `kyc.interlace_submission_failed`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "kyc.interlace_submission_failed",
                "domain": "kyc",
                "provider": "interlace",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "error": "Interlace submission failed",
                  "accountId": "acc_123",
                  "applicantId": "applicant_123"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/legal_entity.status": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "legal_entity.status",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a business legal entity status changes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-legal_entity-status",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "legal_entity.status"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "legal_entity.status"
                  },
                  "domain": {
                    "enum": [
                      "kyc"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "kyc"
                  },
                  "provider": {
                    "enum": [
                      "bank"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "bank"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "entityId": {
                        "type": "string",
                        "description": "`data.entityId` parameter.",
                        "example": "le_123"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "approved"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "BUSINESS"
                      }
                    },
                    "description": "Event-specific payload for `legal_entity.status`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "legal_entity.status",
                "domain": "kyc",
                "provider": "bank",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "entityId": "le_123",
                  "status": "approved",
                  "type": "BUSINESS"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/bank_account.status": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "bank_account.status",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a business bank account status changes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-bank_account-status",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "bank_account.status"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "bank_account.status"
                  },
                  "domain": {
                    "enum": [
                      "account"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "account"
                  },
                  "provider": {
                    "enum": [
                      "bank"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "bank"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "bankAccountId": {
                        "type": "string",
                        "description": "`data.bankAccountId` parameter.",
                        "example": "ba_123"
                      },
                      "iban": {
                        "type": "string",
                        "description": "`data.iban` parameter.",
                        "example": "GB00HOPP00000000000000"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "GBP"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "active"
                      }
                    },
                    "description": "Event-specific payload for `bank_account.status`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "bank_account.status",
                "domain": "account",
                "provider": "bank",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "bankAccountId": "ba_123",
                  "iban": "GB00HOPP00000000000000",
                  "currency": "GBP",
                  "status": "active"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/account.deposit.address": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "account.deposit.address",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when deposit addresses are created for a user's account.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-account-deposit-address",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "account.deposit.address"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "account.deposit.address"
                  },
                  "domain": {
                    "enum": [
                      "account"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "account"
                  },
                  "provider": {
                    "enum": [
                      "bank"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "bank"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "created"
                      }
                    },
                    "description": "Event-specific payload for `account.deposit.address`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "account.deposit.address",
                "domain": "account",
                "provider": "bank",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "status": "created"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/account.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "account.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money account is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-account-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "account.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "account.created"
                  },
                  "domain": {
                    "enum": [
                      "account"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "account"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "AccountCreated"
                      },
                      "correlationId": {
                        "type": "string",
                        "description": "`data.correlationId` parameter.",
                        "example": "corr_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "PENDING"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "INDIVIDUAL"
                      }
                    },
                    "description": "Event-specific payload for `account.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "account.created",
                "domain": "account",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "AccountCreated",
                  "correlationId": "corr_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "PENDING",
                  "type": "INDIVIDUAL"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/account.activated": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "account.activated",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money account is activated.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-account-activated",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "account.activated"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "account.activated"
                  },
                  "domain": {
                    "enum": [
                      "account"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "account"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "AccountActivated"
                      },
                      "id": {
                        "type": "string",
                        "description": "`data.id` parameter.",
                        "example": "acc_eq_123"
                      },
                      "correlationId": {
                        "type": "string",
                        "description": "`data.correlationId` parameter.",
                        "example": "corr_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "ACTIVE"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "INDIVIDUAL"
                      },
                      "primaryOwnerPersonaId": {
                        "type": "string",
                        "description": "`data.primaryOwnerPersonaId` parameter.",
                        "example": "persona_123"
                      },
                      "details": {
                        "type": "object",
                        "properties": {
                          "accountId": {
                            "type": "string",
                            "description": "`data.accountId` parameter.",
                            "example": "acc_eq_123"
                          },
                          "name": {
                            "type": "string",
                            "description": "`data.name` parameter.",
                            "example": "Example Trading Account"
                          }
                        },
                        "description": "`data.details` parameter."
                      },
                      "settlementDetails": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "currency": {
                              "type": "string",
                              "description": "`data.currency` parameter.",
                              "example": "GBP"
                            },
                            "sortCode": {
                              "type": "string",
                              "description": "`data.sortCode` parameter.",
                              "example": "040075"
                            },
                            "accountNumber": {
                              "type": "string",
                              "description": "`data.accountNumber` parameter.",
                              "example": "12345678"
                            },
                            "ibans": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "iban": {
                                    "type": "string",
                                    "description": "`data.iban` parameter.",
                                    "example": "GB29NWBK60161331926819"
                                  },
                                  "bic": {
                                    "type": "string",
                                    "description": "`data.bic` parameter.",
                                    "example": "NWBKGB2L"
                                  }
                                },
                                "description": "`data.ibans` parameter."
                              },
                              "description": "`data.ibans` parameter.",
                              "example": [
                                {
                                  "iban": "GB29NWBK60161331926819",
                                  "bic": "NWBKGB2L"
                                }
                              ]
                            },
                            "accountName": {
                              "type": "string",
                              "description": "`data.accountName` parameter.",
                              "example": "Example Trading Account"
                            },
                            "bankName": {
                              "type": "string",
                              "description": "`data.bankName` parameter.",
                              "example": "Equals Money"
                            },
                            "bankAddress": {
                              "type": "string",
                              "description": "`data.bankAddress` parameter.",
                              "example": "London, United Kingdom"
                            },
                            "balanceReference": {
                              "type": "string",
                              "description": "`data.balanceReference` parameter.",
                              "example": "BAL-123"
                            }
                          },
                          "description": "`data.settlementDetails` parameter."
                        },
                        "description": "`data.settlementDetails` parameter.",
                        "example": [
                          {
                            "currency": "GBP",
                            "sortCode": "040075",
                            "accountNumber": "12345678",
                            "ibans": [
                              {
                                "iban": "GB29NWBK60161331926819",
                                "bic": "NWBKGB2L"
                              }
                            ],
                            "accountName": "Example Trading Account",
                            "bankName": "Equals Money",
                            "bankAddress": "London, United Kingdom",
                            "balanceReference": "BAL-123"
                          }
                        ]
                      }
                    },
                    "description": "Event-specific payload for `account.activated`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "account.activated",
                "domain": "account",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "AccountActivated",
                  "id": "acc_eq_123",
                  "correlationId": "corr_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "ACTIVE",
                  "type": "INDIVIDUAL",
                  "primaryOwnerPersonaId": "persona_123",
                  "details": {
                    "accountId": "acc_eq_123",
                    "name": "Example Trading Account"
                  },
                  "settlementDetails": [
                    {
                      "currency": "GBP",
                      "sortCode": "040075",
                      "accountNumber": "12345678",
                      "ibans": [
                        {
                          "iban": "GB29NWBK60161331926819",
                          "bic": "NWBKGB2L"
                        }
                      ],
                      "accountName": "Example Trading Account",
                      "bankName": "Equals Money",
                      "bankAddress": "London, United Kingdom",
                      "balanceReference": "BAL-123"
                    }
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/account.status_updated": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "account.status_updated",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money account status changes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-account-status_updated",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "account.status_updated"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "account.status_updated"
                  },
                  "domain": {
                    "enum": [
                      "account"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "account"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "AccountStatusUpdated"
                      },
                      "correlationId": {
                        "type": "string",
                        "description": "`data.correlationId` parameter.",
                        "example": "corr_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "SUSPENDED"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "INDIVIDUAL"
                      }
                    },
                    "description": "Event-specific payload for `account.status_updated`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "account.status_updated",
                "domain": "account",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "AccountStatusUpdated",
                  "correlationId": "corr_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "SUSPENDED",
                  "type": "INDIVIDUAL"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.completed": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.completed",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a payment completes successfully.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-completed",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.completed"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.completed"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "paymentId": {
                        "type": "integer",
                        "description": "`data.paymentId` parameter.",
                        "format": "int32",
                        "example": 987
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 25.5
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      }
                    },
                    "description": "Event-specific payload for `payment.completed`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.completed",
                "domain": "payment",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "paymentId": 987,
                  "amount": 25.50,
                  "currency": "EUR"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.mandate.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.mandate.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a payment mandate is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-mandate-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.mandate.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.mandate.created"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "paymentMandateId": {
                        "type": "integer",
                        "description": "`data.paymentMandateId` parameter.",
                        "format": "int32",
                        "example": 456
                      },
                      "maxAmount": {
                        "type": "number",
                        "description": "`data.maxAmount` parameter.",
                        "format": "double",
                        "example": 250
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "frequency": {
                        "type": "string",
                        "description": "`data.frequency` parameter.",
                        "example": "monthly"
                      }
                    },
                    "description": "Event-specific payload for `payment.mandate.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.mandate.created",
                "domain": "payment",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "paymentMandateId": 456,
                  "maxAmount": 250.00,
                  "currency": "EUR",
                  "frequency": "monthly"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.mandate.cancelled": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.mandate.cancelled",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a payment mandate is cancelled.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-mandate-cancelled",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.mandate.cancelled"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.mandate.cancelled"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "paymentMandateId": {
                        "type": "integer",
                        "description": "`data.paymentMandateId` parameter.",
                        "format": "int32",
                        "example": 456
                      }
                    },
                    "description": "Event-specific payload for `payment.mandate.cancelled`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.mandate.cancelled",
                "domain": "payment",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "paymentMandateId": 456
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.request.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.request.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a payment request is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-request-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.request.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.request.created"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "paymentRequestId": {
                        "type": "integer",
                        "description": "`data.paymentRequestId` parameter.",
                        "format": "int32",
                        "example": 789
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 19.99
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      }
                    },
                    "description": "Event-specific payload for `payment.request.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.request.created",
                "domain": "payment",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "paymentRequestId": 789,
                  "amount": 19.99,
                  "currency": "EUR"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.request.cancelled": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.request.cancelled",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a payment request is cancelled.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-request-cancelled",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.request.cancelled"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.request.cancelled"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "paymentRequestId": {
                        "type": "integer",
                        "description": "`data.paymentRequestId` parameter.",
                        "format": "int32",
                        "example": 789
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 19.99
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      }
                    },
                    "description": "Event-specific payload for `payment.request.cancelled`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.request.cancelled",
                "domain": "payment",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "paymentRequestId": 789,
                  "amount": 19.99,
                  "currency": "EUR"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.request.confirmed.direct": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.request.confirmed.direct",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a payment request is confirmed by direct payment.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-request-confirmed-direct",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.request.confirmed.direct"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.request.confirmed.direct"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "paymentRequestId": {
                        "type": "integer",
                        "description": "`data.paymentRequestId` parameter.",
                        "format": "int32",
                        "example": 789
                      },
                      "paymentMandateId": {
                        "type": "integer",
                        "description": "`data.paymentMandateId` parameter.",
                        "format": "int32",
                        "example": 456
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 19.99
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "transferId": {
                        "type": "string",
                        "description": "`data.transferId` parameter.",
                        "example": "tr_123"
                      }
                    },
                    "description": "Event-specific payload for `payment.request.confirmed.direct`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.request.confirmed.direct",
                "domain": "payment",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "paymentRequestId": 789,
                  "paymentMandateId": 456,
                  "amount": 19.99,
                  "currency": "EUR",
                  "transferId": "tr_123"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.request.confirmed.with.exchange": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.request.confirmed.with.exchange",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent after a payment request is confirmed using crypto exchange.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-request-confirmed-with-exchange",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.request.confirmed.with.exchange"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.request.confirmed.with.exchange"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "paymentRequestId": {
                        "type": "integer",
                        "description": "`data.paymentRequestId` parameter.",
                        "format": "int32",
                        "example": 789
                      },
                      "paymentMandateId": {
                        "type": "integer",
                        "description": "`data.paymentMandateId` parameter.",
                        "format": "int32",
                        "example": 456
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 19.99
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "transferId": {
                        "type": "string",
                        "description": "`data.transferId` parameter.",
                        "example": "tr_123"
                      }
                    },
                    "description": "Event-specific payload for `payment.request.confirmed.with.exchange`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.request.confirmed.with.exchange",
                "domain": "payment",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "paymentRequestId": 789,
                  "paymentMandateId": 456,
                  "amount": 19.99,
                  "currency": "EUR",
                  "transferId": "tr_123"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/order.completed": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "order.completed",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment order completes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-order-completed",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "order.completed"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "order.completed"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "orderId": {
                        "type": "string",
                        "description": "`data.orderId` parameter.",
                        "example": "order_123"
                      },
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "account_123"
                      }
                    },
                    "description": "Event-specific payload for `order.completed`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "order.completed",
                "domain": "payment",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "orderId": "order_123",
                  "accountId": "account_123"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/order.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "order.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money FX order is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-order-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "order.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "order.created"
                  },
                  "domain": {
                    "enum": [
                      "order"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "order"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "OrderCreated"
                      },
                      "orderId": {
                        "type": "string",
                        "description": "`data.orderId` parameter.",
                        "example": "order_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "CREATED"
                      },
                      "buyCurrency": {
                        "type": "string",
                        "description": "`data.buyCurrency` parameter.",
                        "example": "EUR"
                      },
                      "sellCurrency": {
                        "type": "string",
                        "description": "`data.sellCurrency` parameter.",
                        "example": "GBP"
                      },
                      "buyAmount": {
                        "type": "number",
                        "description": "`data.buyAmount` parameter.",
                        "format": "double",
                        "example": 1000
                      },
                      "sellAmount": {
                        "type": "number",
                        "description": "`data.sellAmount` parameter.",
                        "format": "double",
                        "example": 850
                      },
                      "rate": {
                        "type": "number",
                        "description": "`data.rate` parameter.",
                        "format": "double",
                        "example": 0.85
                      },
                      "payments": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "settlementDate": {
                              "type": "string",
                              "description": "`data.settlementDate` parameter.",
                              "example": "2026-04-29T00:00:00Z"
                            },
                            "rate": {
                              "type": "number",
                              "description": "`data.rate` parameter.",
                              "format": "double",
                              "example": 0.85
                            },
                            "inverseRate": {
                              "type": "number",
                              "description": "`data.inverseRate` parameter.",
                              "format": "double",
                              "example": 1.1765
                            },
                            "internalReference": {
                              "type": "string",
                              "description": "`data.internalReference` parameter.",
                              "example": "INT-123"
                            },
                            "externalReference": {
                              "type": "string",
                              "description": "`data.externalReference` parameter.",
                              "example": "EXT-123"
                            },
                            "from": {
                              "type": "object",
                              "properties": {
                                "amount": {
                                  "type": "number",
                                  "description": "`data.amount` parameter.",
                                  "format": "double",
                                  "example": 850
                                },
                                "currency": {
                                  "type": "string",
                                  "description": "`data.currency` parameter.",
                                  "example": "GBP"
                                }
                              },
                              "description": "`data.from` parameter."
                            },
                            "to": {
                              "type": "object",
                              "properties": {
                                "amount": {
                                  "type": "number",
                                  "description": "`data.amount` parameter.",
                                  "format": "double",
                                  "example": 1000
                                },
                                "currency": {
                                  "type": "string",
                                  "description": "`data.currency` parameter.",
                                  "example": "EUR"
                                }
                              },
                              "description": "`data.to` parameter."
                            },
                            "recipient": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "description": "`data.id` parameter.",
                                  "example": "recipient_123"
                                },
                                "name": {
                                  "type": "string",
                                  "description": "`data.name` parameter.",
                                  "example": "Example Supplier Ltd"
                                }
                              },
                              "description": "`data.recipient` parameter."
                            }
                          },
                          "description": "`data.payments` parameter."
                        },
                        "description": "`data.payments` parameter.",
                        "example": [
                          {
                            "settlementDate": "2026-04-29T00:00:00Z",
                            "rate": 0.85,
                            "inverseRate": 1.1765,
                            "internalReference": "INT-123",
                            "externalReference": "EXT-123",
                            "from": {
                              "amount": 850.00,
                              "currency": "GBP"
                            },
                            "to": {
                              "amount": 1000.00,
                              "currency": "EUR"
                            },
                            "recipient": {
                              "id": "recipient_123",
                              "name": "Example Supplier Ltd"
                            }
                          }
                        ]
                      }
                    },
                    "description": "Event-specific payload for `order.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "order.created",
                "domain": "order",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "OrderCreated",
                  "orderId": "order_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "CREATED",
                  "buyCurrency": "EUR",
                  "sellCurrency": "GBP",
                  "buyAmount": 1000.00,
                  "sellAmount": 850.00,
                  "rate": 0.85,
                  "payments": [
                    {
                      "settlementDate": "2026-04-29T00:00:00Z",
                      "rate": 0.85,
                      "inverseRate": 1.1765,
                      "internalReference": "INT-123",
                      "externalReference": "EXT-123",
                      "from": {
                        "amount": 850.00,
                        "currency": "GBP"
                      },
                      "to": {
                        "amount": 1000.00,
                        "currency": "EUR"
                      },
                      "recipient": {
                        "id": "recipient_123",
                        "name": "Example Supplier Ltd"
                      }
                    }
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/order.cancelled": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "order.cancelled",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money FX order is cancelled.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-order-cancelled",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "order.cancelled"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "order.cancelled"
                  },
                  "domain": {
                    "enum": [
                      "order"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "order"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "OrderCancelled"
                      },
                      "orderId": {
                        "type": "string",
                        "description": "`data.orderId` parameter.",
                        "example": "order_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "CANCELLED"
                      }
                    },
                    "description": "Event-specific payload for `order.cancelled`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "order.cancelled",
                "domain": "order",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "OrderCancelled",
                  "orderId": "order_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "CANCELLED"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payout.payment": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payout.payment",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a business payout payment update is processed.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payout-payment",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payout.payment"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payout.payment"
                  },
                  "domain": {
                    "enum": [
                      "payout"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payout"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "integer",
                        "description": "`data.transactionId` parameter.",
                        "format": "int32",
                        "example": 1001
                      },
                      "externalTransactionId": {
                        "type": "string",
                        "description": "`data.externalTransactionId` parameter.",
                        "example": "ext_tx_123"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "accountId": {
                        "type": "integer",
                        "description": "`data.accountId` parameter.",
                        "format": "int32",
                        "example": 321
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 100
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "transferId": {
                        "type": "string",
                        "description": "`data.transferId` parameter.",
                        "example": "transfer_123"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "PAYOUT.PAYMENT"
                      }
                    },
                    "description": "Event-specific payload for `payout.payment`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payout.payment",
                "domain": "payout",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": 1001,
                  "externalTransactionId": "ext_tx_123",
                  "userId": 12345,
                  "accountId": 321,
                  "amount": 100.00,
                  "currency": "EUR",
                  "status": "completed",
                  "transferId": "transfer_123",
                  "type": "PAYOUT.PAYMENT"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/business_account.transaction": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "business_account.transaction",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a business account transaction is processed.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-business_account-transaction",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "business_account.transaction"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "business_account.transaction"
                  },
                  "domain": {
                    "enum": [
                      "business_account"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "business_account"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "integer",
                        "description": "`data.transactionId` parameter.",
                        "format": "int32",
                        "example": 1001
                      },
                      "externalTransactionId": {
                        "type": "string",
                        "description": "`data.externalTransactionId` parameter.",
                        "example": "ext_tx_123"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "accountId": {
                        "type": "integer",
                        "description": "`data.accountId` parameter.",
                        "format": "int32",
                        "example": 321
                      },
                      "transactionType": {
                        "type": "string",
                        "description": "`data.transactionType` parameter.",
                        "example": "payout_payment"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 100
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "fee": {
                        "type": "number",
                        "description": "`data.fee` parameter.",
                        "format": "double",
                        "example": 1.25
                      }
                    },
                    "description": "Event-specific payload for `business_account.transaction`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "business_account.transaction",
                "domain": "business_account",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": 1001,
                  "externalTransactionId": "ext_tx_123",
                  "userId": 12345,
                  "accountId": 321,
                  "transactionType": "payout_payment",
                  "amount": 100.00,
                  "currency": "EUR",
                  "status": "completed",
                  "fee": 1.25
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/wallet.topped_up": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "wallet.topped_up",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a wallet, budget, or card funding transaction credits value.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-wallet-topped_up",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "wallet.topped_up"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "wallet.topped_up"
                  },
                  "domain": {
                    "enum": [
                      "wallet"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "wallet"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "string",
                        "description": "`data.transactionId` parameter.",
                        "example": "1001"
                      },
                      "walletId": {
                        "type": "string",
                        "description": "`data.walletId` parameter.",
                        "example": "wallet_123"
                      },
                      "userId": {
                        "type": "string",
                        "description": "`data.userId` parameter.",
                        "example": "12345"
                      },
                      "amount": {
                        "type": "string",
                        "description": "`data.amount` parameter.",
                        "example": "100.00"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "provider": {
                        "type": "string",
                        "description": "`data.provider` parameter.",
                        "example": "hoppacard"
                      }
                    },
                    "description": "Event-specific payload for `wallet.topped_up`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "wallet.topped_up",
                "domain": "wallet",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": "1001",
                  "walletId": "wallet_123",
                  "userId": "12345",
                  "amount": "100.00",
                  "currency": "EUR",
                  "status": "completed",
                  "provider": "hoppacard"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/wallet.withdrawal": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "wallet.withdrawal",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a wallet withdrawal or debit transaction is processed.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-wallet-withdrawal",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "wallet.withdrawal"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "wallet.withdrawal"
                  },
                  "domain": {
                    "enum": [
                      "wallet"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "wallet"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "string",
                        "description": "`data.transactionId` parameter.",
                        "example": "1002"
                      },
                      "walletId": {
                        "type": "string",
                        "description": "`data.walletId` parameter.",
                        "example": "wallet_123"
                      },
                      "userId": {
                        "type": "string",
                        "description": "`data.userId` parameter.",
                        "example": "12345"
                      },
                      "amount": {
                        "type": "string",
                        "description": "`data.amount` parameter.",
                        "example": "50.00"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "provider": {
                        "type": "string",
                        "description": "`data.provider` parameter.",
                        "example": "hoppacard"
                      }
                    },
                    "description": "Event-specific payload for `wallet.withdrawal`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "wallet.withdrawal",
                "domain": "wallet",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": "1002",
                  "walletId": "wallet_123",
                  "userId": "12345",
                  "amount": "50.00",
                  "currency": "EUR",
                  "status": "completed",
                  "provider": "hoppacard"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/wallet.refund": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "wallet.refund",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a crypto refund is processed.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-wallet-refund",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "wallet.refund"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "wallet.refund"
                  },
                  "domain": {
                    "enum": [
                      "wallet"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "wallet"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "string",
                        "description": "`data.transactionId` parameter.",
                        "example": "1001"
                      },
                      "userId": {
                        "type": "string",
                        "description": "`data.userId` parameter.",
                        "example": "12345"
                      },
                      "amount": {
                        "type": "string",
                        "description": "`data.amount` parameter.",
                        "example": "10.00"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "USDT"
                      },
                      "chain": {
                        "type": "string",
                        "description": "`data.chain` parameter.",
                        "example": "TRON"
                      },
                      "address": {
                        "type": "string",
                        "description": "`data.address` parameter.",
                        "example": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "transferId": {
                        "type": "string",
                        "description": "`data.transferId` parameter.",
                        "example": "transfer_123"
                      },
                      "transactionHash": {
                        "type": "string",
                        "description": "`data.transactionHash` parameter.",
                        "example": "0x1234567890abcdef"
                      },
                      "provider": {
                        "type": "string",
                        "description": "`data.provider` parameter.",
                        "example": "hoppacard"
                      }
                    },
                    "description": "Event-specific payload for `wallet.refund`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "wallet.refund",
                "domain": "wallet",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": "1001",
                  "userId": "12345",
                  "amount": "10.00",
                  "currency": "USDT",
                  "chain": "TRON",
                  "address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
                  "status": "completed",
                  "transferId": "transfer_123",
                  "transactionHash": "0x1234567890abcdef",
                  "provider": "hoppacard"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/budget.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "budget.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a budget is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-budget-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "budget.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "budget.created"
                  },
                  "domain": {
                    "enum": [
                      "budget"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "budget"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "budgetId": {
                        "type": "string",
                        "description": "`data.budgetId` parameter.",
                        "example": "budget_123"
                      },
                      "name": {
                        "type": "string",
                        "description": "`data.name` parameter.",
                        "example": "Main EUR Budget"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "amount": {
                        "type": "string",
                        "description": "`data.amount` parameter.",
                        "example": "1000.00"
                      },
                      "spent": {
                        "type": "string",
                        "description": "`data.spent` parameter.",
                        "example": "125.00"
                      },
                      "remaining": {
                        "type": "string",
                        "description": "`data.remaining` parameter.",
                        "example": "875.00"
                      },
                      "period": {
                        "type": "string",
                        "description": "`data.period` parameter.",
                        "example": "monthly"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "active"
                      }
                    },
                    "description": "Event-specific payload for `budget.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "budget.created",
                "domain": "budget",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "budgetId": "budget_123",
                  "name": "Main EUR Budget",
                  "currency": "EUR",
                  "amount": "1000.00",
                  "spent": "125.00",
                  "remaining": "875.00",
                  "period": "monthly",
                  "status": "active"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/budget.updated": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "budget.updated",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a budget is updated.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-budget-updated",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "budget.updated"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "budget.updated"
                  },
                  "domain": {
                    "enum": [
                      "budget"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "budget"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "budgetId": {
                        "type": "string",
                        "description": "`data.budgetId` parameter.",
                        "example": "budget_123"
                      },
                      "name": {
                        "type": "string",
                        "description": "`data.name` parameter.",
                        "example": "Main EUR Budget"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "amount": {
                        "type": "string",
                        "description": "`data.amount` parameter.",
                        "example": "1000.00"
                      },
                      "spent": {
                        "type": "string",
                        "description": "`data.spent` parameter.",
                        "example": "125.00"
                      },
                      "remaining": {
                        "type": "string",
                        "description": "`data.remaining` parameter.",
                        "example": "875.00"
                      },
                      "period": {
                        "type": "string",
                        "description": "`data.period` parameter.",
                        "example": "monthly"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "active"
                      }
                    },
                    "description": "Event-specific payload for `budget.updated`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "budget.updated",
                "domain": "budget",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "budgetId": "budget_123",
                  "name": "Main EUR Budget",
                  "currency": "EUR",
                  "amount": "1000.00",
                  "spent": "125.00",
                  "remaining": "875.00",
                  "period": "monthly",
                  "status": "active"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/budget.deleted": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "budget.deleted",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a budget is deleted.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-budget-deleted",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "budget.deleted"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "budget.deleted"
                  },
                  "domain": {
                    "enum": [
                      "budget"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "budget"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "budgetId": {
                        "type": "string",
                        "description": "`data.budgetId` parameter.",
                        "example": "budget_123"
                      },
                      "name": {
                        "type": "string",
                        "description": "`data.name` parameter.",
                        "example": "Main EUR Budget"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "amount": {
                        "type": "string",
                        "description": "`data.amount` parameter.",
                        "example": "1000.00"
                      },
                      "spent": {
                        "type": "string",
                        "description": "`data.spent` parameter.",
                        "example": "125.00"
                      },
                      "remaining": {
                        "type": "string",
                        "description": "`data.remaining` parameter.",
                        "example": "875.00"
                      },
                      "period": {
                        "type": "string",
                        "description": "`data.period` parameter.",
                        "example": "monthly"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "deleted"
                      }
                    },
                    "description": "Event-specific payload for `budget.deleted`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "budget.deleted",
                "domain": "budget",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "budgetId": "budget_123",
                  "name": "Main EUR Budget",
                  "currency": "EUR",
                  "amount": "1000.00",
                  "spent": "125.00",
                  "remaining": "875.00",
                  "period": "monthly",
                  "status": "deleted"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/budget.transaction.closed": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "budget.transaction.closed",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a budget transaction is closed.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-budget-transaction-closed",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "budget.transaction.closed"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "budget.transaction.closed"
                  },
                  "domain": {
                    "enum": [
                      "budget"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "budget"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "string",
                        "description": "`data.transactionId` parameter.",
                        "example": "1001"
                      },
                      "userId": {
                        "type": "string",
                        "description": "`data.userId` parameter.",
                        "example": "12345"
                      },
                      "budgetId": {
                        "type": "string",
                        "description": "`data.budgetId` parameter.",
                        "example": "budget_123"
                      },
                      "amount": {
                        "type": "string",
                        "description": "`data.amount` parameter.",
                        "example": "15.00"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "closed"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "DEBIT"
                      }
                    },
                    "description": "Event-specific payload for `budget.transaction.closed`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "budget.transaction.closed",
                "domain": "budget",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": "1001",
                  "userId": "12345",
                  "budgetId": "budget_123",
                  "amount": "15.00",
                  "currency": "EUR",
                  "status": "closed",
                  "type": "DEBIT"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/budget.credited": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "budget.credited",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money budget receives funds.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-budget-credited",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "budget.credited"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "budget.credited"
                  },
                  "domain": {
                    "enum": [
                      "budget"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "budget"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "integer",
                        "description": "`data.transactionId` parameter.",
                        "format": "int32",
                        "example": 1001
                      },
                      "externalTransactionId": {
                        "type": "string",
                        "description": "`data.externalTransactionId` parameter.",
                        "example": "ext_tx_123"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "budgetId": {
                        "type": "string",
                        "description": "`data.budgetId` parameter.",
                        "example": "budget_123"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 75
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "source": {
                        "type": "string",
                        "description": "`data.source` parameter.",
                        "example": "BANK_TRANSFER"
                      },
                      "reference": {
                        "type": "string",
                        "description": "`data.reference` parameter.",
                        "example": "Invoice 123"
                      },
                      "remitterName": {
                        "type": "string",
                        "description": "`data.remitterName` parameter.",
                        "example": "Example Ltd"
                      }
                    },
                    "description": "Event-specific payload for `budget.credited`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "budget.credited",
                "domain": "budget",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": 1001,
                  "externalTransactionId": "ext_tx_123",
                  "userId": 12345,
                  "budgetId": "budget_123",
                  "amount": 75.00,
                  "currency": "EUR",
                  "source": "BANK_TRANSFER",
                  "reference": "Invoice 123",
                  "remitterName": "Example Ltd"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/budget.debited": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "budget.debited",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money budget is debited.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-budget-debited",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "budget.debited"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "budget.debited"
                  },
                  "domain": {
                    "enum": [
                      "budget"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "budget"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "integer",
                        "description": "`data.transactionId` parameter.",
                        "format": "int32",
                        "example": 1002
                      },
                      "externalTransactionId": {
                        "type": "string",
                        "description": "`data.externalTransactionId` parameter.",
                        "example": "ext_tx_456"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "budgetId": {
                        "type": "string",
                        "description": "`data.budgetId` parameter.",
                        "example": "budget_123"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 25
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "source": {
                        "type": "string",
                        "description": "`data.source` parameter.",
                        "example": "CARD_PAYMENT"
                      }
                    },
                    "description": "Event-specific payload for `budget.debited`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "budget.debited",
                "domain": "budget",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": 1002,
                  "externalTransactionId": "ext_tx_456",
                  "userId": 12345,
                  "budgetId": "budget_123",
                  "amount": 25.00,
                  "currency": "EUR",
                  "source": "CARD_PAYMENT"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/budget.credit_pending": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "budget.credit_pending",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money budget credit is pending settlement.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-budget-credit_pending",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "budget.credit_pending"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "budget.credit_pending"
                  },
                  "domain": {
                    "enum": [
                      "budget"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "budget"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "BoxCreditPending"
                      },
                      "budgetId": {
                        "type": "string",
                        "description": "`data.budgetId` parameter.",
                        "example": "budget_123"
                      },
                      "budgetName": {
                        "type": "string",
                        "description": "`data.budgetName` parameter.",
                        "example": "Operations Budget"
                      },
                      "settlementPriceAmount": {
                        "type": "number",
                        "description": "`data.settlementPriceAmount` parameter.",
                        "format": "double",
                        "example": 1200
                      },
                      "settlementPriceCurrency": {
                        "type": "string",
                        "description": "`data.settlementPriceCurrency` parameter.",
                        "example": "GBP"
                      },
                      "valueDateTime": {
                        "type": "string",
                        "description": "`data.valueDateTime` parameter.",
                        "example": "2026-04-29T00:00:00Z"
                      }
                    },
                    "description": "Event-specific payload for `budget.credit_pending`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "budget.credit_pending",
                "domain": "budget",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "BoxCreditPending",
                  "budgetId": "budget_123",
                  "budgetName": "Operations Budget",
                  "settlementPriceAmount": 1200.00,
                  "settlementPriceCurrency": "GBP",
                  "valueDateTime": "2026-04-29T00:00:00Z"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a card is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.created"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "cardNumber": {
                        "type": "string",
                        "description": "`data.cardNumber` parameter.",
                        "example": "****-****-****-4242"
                      },
                      "lastFour": {
                        "type": "string",
                        "description": "`data.lastFour` parameter.",
                        "example": "4242"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "active"
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      }
                    },
                    "description": "Event-specific payload for `card.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.created",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardId": 555,
                  "cardNumber": "****-****-****-4242",
                  "lastFour": "4242",
                  "status": "active",
                  "currency": "EUR"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.activated": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.activated",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a card is activated. Virtual cards may emit this immediately after creation.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-activated",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.activated"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.activated"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      }
                    },
                    "description": "Event-specific payload for `card.activated`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.activated",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardId": 555
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.updated": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.updated",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a card status changes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-updated",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.updated"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.updated"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "previousStatus": {
                        "type": "string",
                        "description": "`data.previousStatus` parameter.",
                        "example": "PENDING"
                      },
                      "newStatus": {
                        "type": "string",
                        "description": "`data.newStatus` parameter.",
                        "example": "ACTIVE"
                      },
                      "lastFour": {
                        "type": "string",
                        "description": "`data.lastFour` parameter.",
                        "example": "4242"
                      }
                    },
                    "description": "Event-specific payload for `card.updated`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.updated",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardId": 555,
                  "previousStatus": "PENDING",
                  "newStatus": "ACTIVE",
                  "lastFour": "4242"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.deleted": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.deleted",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a card is deleted or cancelled.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-deleted",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.deleted"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.deleted"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "previousStatus": {
                        "type": "string",
                        "description": "`data.previousStatus` parameter.",
                        "example": "ACTIVE"
                      },
                      "newStatus": {
                        "type": "string",
                        "description": "`data.newStatus` parameter.",
                        "example": "CANCELLED"
                      }
                    },
                    "description": "Event-specific payload for `card.deleted`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.deleted",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardId": 555,
                  "previousStatus": "ACTIVE",
                  "newStatus": "CANCELLED"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.shipped": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.shipped",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a physical card is shipped.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-shipped",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.shipped"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.shipped"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "trackingNumber": {
                        "type": "string",
                        "description": "`data.trackingNumber` parameter.",
                        "example": "TRACK123"
                      },
                      "shippingCarrier": {
                        "type": "string",
                        "description": "`data.shippingCarrier` parameter.",
                        "example": "DHL"
                      },
                      "shippedAt": {
                        "type": "string",
                        "description": "`data.shippedAt` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      }
                    },
                    "description": "Event-specific payload for `card.shipped`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.shipped",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardId": 555,
                  "trackingNumber": "TRACK123",
                  "shippingCarrier": "DHL",
                  "shippedAt": "2026-04-28T10:15:30Z"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.transaction": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.transaction",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent for card purchases, refunds, reversals, fee transactions, freezes, and unfreezes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-transaction",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.transaction"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.transaction"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "integer",
                        "description": "`data.transactionId` parameter.",
                        "format": "int32",
                        "example": 1001
                      },
                      "externalTransactionId": {
                        "type": "string",
                        "description": "`data.externalTransactionId` parameter.",
                        "example": "card_tx_123"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "accountId": {
                        "type": "integer",
                        "description": "`data.accountId` parameter.",
                        "format": "int32",
                        "example": 321
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "externalCardId": {
                        "type": "string",
                        "description": "`data.externalCardId` parameter.",
                        "example": "card_ext_123"
                      },
                      "transactionType": {
                        "type": "string",
                        "description": "`data.transactionType` parameter.",
                        "example": "card_payment"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 42.5
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "description": {
                        "type": "string",
                        "description": "`data.description` parameter.",
                        "example": "CARD PAYMENT: Example Merchant"
                      },
                      "transactionDate": {
                        "type": "string",
                        "description": "`data.transactionDate` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "merchantName": {
                        "type": "string",
                        "description": "`data.merchantName` parameter.",
                        "example": "Example Merchant"
                      },
                      "merchantMid": {
                        "type": "string",
                        "description": "`data.merchantMid` parameter.",
                        "example": "merchant_mid_123"
                      },
                      "merchantCity": {
                        "type": "string",
                        "description": "`data.merchantCity` parameter.",
                        "example": "London"
                      },
                      "merchantCountry": {
                        "type": "string",
                        "description": "`data.merchantCountry` parameter.",
                        "example": "GB"
                      },
                      "merchantState": {
                        "type": "string",
                        "description": "`data.merchantState` parameter.",
                        "example": "ENG"
                      },
                      "merchantZipcode": {
                        "type": "string",
                        "description": "`data.merchantZipcode` parameter.",
                        "example": "EC1A1BB"
                      },
                      "mcc": {
                        "type": "string",
                        "description": "`data.mcc` parameter.",
                        "example": "5812"
                      },
                      "mccCategory": {
                        "type": "string",
                        "description": "`data.mccCategory` parameter.",
                        "example": "Restaurants"
                      },
                      "fee": {
                        "type": "number",
                        "description": "`data.fee` parameter.",
                        "format": "double",
                        "example": 0.35
                      },
                      "transactionCurrency": {
                        "type": "string",
                        "description": "`data.transactionCurrency` parameter.",
                        "example": "GBP"
                      },
                      "transactionAmount": {
                        "type": "string",
                        "description": "`data.transactionAmount` parameter.",
                        "example": "36.25"
                      },
                      "clientTransactionId": {
                        "type": "string",
                        "description": "`data.clientTransactionId` parameter.",
                        "example": "client_tx_123"
                      },
                      "cardTransactionId": {
                        "type": "string",
                        "description": "`data.cardTransactionId` parameter.",
                        "example": "card_trace_123"
                      },
                      "relatedCardTransactionId": {
                        "type": "string",
                        "description": "`data.relatedCardTransactionId` parameter.",
                        "example": "card_trace_parent_123"
                      },
                      "remark": {
                        "type": "string",
                        "description": "`data.remark` parameter.",
                        "example": "Approved"
                      },
                      "detail": {
                        "type": "string",
                        "description": "`data.detail` parameter.",
                        "example": "Card transaction processed"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "CONSUMPTION"
                      }
                    },
                    "description": "Event-specific payload for `card.transaction`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.transaction",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": 1001,
                  "externalTransactionId": "card_tx_123",
                  "userId": 12345,
                  "accountId": 321,
                  "cardId": 555,
                  "externalCardId": "card_ext_123",
                  "transactionType": "card_payment",
                  "amount": 42.50,
                  "currency": "EUR",
                  "status": "completed",
                  "description": "CARD PAYMENT: Example Merchant",
                  "transactionDate": "2026-04-28T10:15:30Z",
                  "merchantName": "Example Merchant",
                  "merchantMid": "merchant_mid_123",
                  "merchantCity": "London",
                  "merchantCountry": "GB",
                  "merchantState": "ENG",
                  "merchantZipcode": "EC1A1BB",
                  "mcc": "5812",
                  "mccCategory": "Restaurants",
                  "fee": 0.35,
                  "transactionCurrency": "GBP",
                  "transactionAmount": "36.25",
                  "clientTransactionId": "client_tx_123",
                  "cardTransactionId": "card_trace_123",
                  "relatedCardTransactionId": "card_trace_parent_123",
                  "remark": "Approved",
                  "detail": "Card transaction processed",
                  "type": "CONSUMPTION"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.topup": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.topup",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when value is loaded onto a card.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-topup",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.topup"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.topup"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "integer",
                        "description": "`data.transactionId` parameter.",
                        "format": "int32",
                        "example": 1001
                      },
                      "externalTransactionId": {
                        "type": "string",
                        "description": "`data.externalTransactionId` parameter.",
                        "example": "card_tx_123"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "accountId": {
                        "type": "integer",
                        "description": "`data.accountId` parameter.",
                        "format": "int32",
                        "example": 321
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "externalCardId": {
                        "type": "string",
                        "description": "`data.externalCardId` parameter.",
                        "example": "card_ext_123"
                      },
                      "transactionType": {
                        "type": "string",
                        "description": "`data.transactionType` parameter.",
                        "example": "card_topup"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 42.5
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "description": {
                        "type": "string",
                        "description": "`data.description` parameter.",
                        "example": "CARD PAYMENT: Example Merchant"
                      },
                      "transactionDate": {
                        "type": "string",
                        "description": "`data.transactionDate` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "merchantName": {
                        "type": "string",
                        "description": "`data.merchantName` parameter.",
                        "example": "Example Merchant"
                      },
                      "merchantMid": {
                        "type": "string",
                        "description": "`data.merchantMid` parameter.",
                        "example": "merchant_mid_123"
                      },
                      "merchantCity": {
                        "type": "string",
                        "description": "`data.merchantCity` parameter.",
                        "example": "London"
                      },
                      "merchantCountry": {
                        "type": "string",
                        "description": "`data.merchantCountry` parameter.",
                        "example": "GB"
                      },
                      "merchantState": {
                        "type": "string",
                        "description": "`data.merchantState` parameter.",
                        "example": "ENG"
                      },
                      "merchantZipcode": {
                        "type": "string",
                        "description": "`data.merchantZipcode` parameter.",
                        "example": "EC1A1BB"
                      },
                      "mcc": {
                        "type": "string",
                        "description": "`data.mcc` parameter.",
                        "example": "5812"
                      },
                      "mccCategory": {
                        "type": "string",
                        "description": "`data.mccCategory` parameter.",
                        "example": "Restaurants"
                      },
                      "fee": {
                        "type": "number",
                        "description": "`data.fee` parameter.",
                        "format": "double",
                        "example": 0.35
                      },
                      "transactionCurrency": {
                        "type": "string",
                        "description": "`data.transactionCurrency` parameter.",
                        "example": "GBP"
                      },
                      "transactionAmount": {
                        "type": "string",
                        "description": "`data.transactionAmount` parameter.",
                        "example": "36.25"
                      },
                      "clientTransactionId": {
                        "type": "string",
                        "description": "`data.clientTransactionId` parameter.",
                        "example": "client_tx_123"
                      },
                      "cardTransactionId": {
                        "type": "string",
                        "description": "`data.cardTransactionId` parameter.",
                        "example": "card_trace_123"
                      },
                      "relatedCardTransactionId": {
                        "type": "string",
                        "description": "`data.relatedCardTransactionId` parameter.",
                        "example": "card_trace_parent_123"
                      },
                      "remark": {
                        "type": "string",
                        "description": "`data.remark` parameter.",
                        "example": "Approved"
                      },
                      "detail": {
                        "type": "string",
                        "description": "`data.detail` parameter.",
                        "example": "Card transaction processed"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "CONSUMPTION"
                      }
                    },
                    "description": "Event-specific payload for `card.topup`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.topup",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": 1001,
                  "externalTransactionId": "card_tx_123",
                  "userId": 12345,
                  "accountId": 321,
                  "cardId": 555,
                  "externalCardId": "card_ext_123",
                  "transactionType": "card_topup",
                  "amount": 42.50,
                  "currency": "EUR",
                  "status": "completed",
                  "description": "CARD PAYMENT: Example Merchant",
                  "transactionDate": "2026-04-28T10:15:30Z",
                  "merchantName": "Example Merchant",
                  "merchantMid": "merchant_mid_123",
                  "merchantCity": "London",
                  "merchantCountry": "GB",
                  "merchantState": "ENG",
                  "merchantZipcode": "EC1A1BB",
                  "mcc": "5812",
                  "mccCategory": "Restaurants",
                  "fee": 0.35,
                  "transactionCurrency": "GBP",
                  "transactionAmount": "36.25",
                  "clientTransactionId": "client_tx_123",
                  "cardTransactionId": "card_trace_123",
                  "relatedCardTransactionId": "card_trace_parent_123",
                  "remark": "Approved",
                  "detail": "Card transaction processed",
                  "type": "CONSUMPTION"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.unload": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.unload",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when value is unloaded from a card.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-unload",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.unload"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.unload"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "transactionId": {
                        "type": "integer",
                        "description": "`data.transactionId` parameter.",
                        "format": "int32",
                        "example": 1001
                      },
                      "externalTransactionId": {
                        "type": "string",
                        "description": "`data.externalTransactionId` parameter.",
                        "example": "card_tx_123"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "accountId": {
                        "type": "integer",
                        "description": "`data.accountId` parameter.",
                        "format": "int32",
                        "example": 321
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "externalCardId": {
                        "type": "string",
                        "description": "`data.externalCardId` parameter.",
                        "example": "card_ext_123"
                      },
                      "transactionType": {
                        "type": "string",
                        "description": "`data.transactionType` parameter.",
                        "example": "card_unload"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 42.5
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "completed"
                      },
                      "description": {
                        "type": "string",
                        "description": "`data.description` parameter.",
                        "example": "CARD PAYMENT: Example Merchant"
                      },
                      "transactionDate": {
                        "type": "string",
                        "description": "`data.transactionDate` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "merchantName": {
                        "type": "string",
                        "description": "`data.merchantName` parameter.",
                        "example": "Example Merchant"
                      },
                      "merchantMid": {
                        "type": "string",
                        "description": "`data.merchantMid` parameter.",
                        "example": "merchant_mid_123"
                      },
                      "merchantCity": {
                        "type": "string",
                        "description": "`data.merchantCity` parameter.",
                        "example": "London"
                      },
                      "merchantCountry": {
                        "type": "string",
                        "description": "`data.merchantCountry` parameter.",
                        "example": "GB"
                      },
                      "merchantState": {
                        "type": "string",
                        "description": "`data.merchantState` parameter.",
                        "example": "ENG"
                      },
                      "merchantZipcode": {
                        "type": "string",
                        "description": "`data.merchantZipcode` parameter.",
                        "example": "EC1A1BB"
                      },
                      "mcc": {
                        "type": "string",
                        "description": "`data.mcc` parameter.",
                        "example": "5812"
                      },
                      "mccCategory": {
                        "type": "string",
                        "description": "`data.mccCategory` parameter.",
                        "example": "Restaurants"
                      },
                      "fee": {
                        "type": "number",
                        "description": "`data.fee` parameter.",
                        "format": "double",
                        "example": 0.35
                      },
                      "transactionCurrency": {
                        "type": "string",
                        "description": "`data.transactionCurrency` parameter.",
                        "example": "GBP"
                      },
                      "transactionAmount": {
                        "type": "string",
                        "description": "`data.transactionAmount` parameter.",
                        "example": "36.25"
                      },
                      "clientTransactionId": {
                        "type": "string",
                        "description": "`data.clientTransactionId` parameter.",
                        "example": "client_tx_123"
                      },
                      "cardTransactionId": {
                        "type": "string",
                        "description": "`data.cardTransactionId` parameter.",
                        "example": "card_trace_123"
                      },
                      "relatedCardTransactionId": {
                        "type": "string",
                        "description": "`data.relatedCardTransactionId` parameter.",
                        "example": "card_trace_parent_123"
                      },
                      "remark": {
                        "type": "string",
                        "description": "`data.remark` parameter.",
                        "example": "Approved"
                      },
                      "detail": {
                        "type": "string",
                        "description": "`data.detail` parameter.",
                        "example": "Card transaction processed"
                      },
                      "type": {
                        "type": "string",
                        "description": "`data.type` parameter.",
                        "example": "CONSUMPTION"
                      }
                    },
                    "description": "Event-specific payload for `card.unload`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.unload",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "transactionId": 1001,
                  "externalTransactionId": "card_tx_123",
                  "userId": 12345,
                  "accountId": 321,
                  "cardId": 555,
                  "externalCardId": "card_ext_123",
                  "transactionType": "card_unload",
                  "amount": 42.50,
                  "currency": "EUR",
                  "status": "completed",
                  "description": "CARD PAYMENT: Example Merchant",
                  "transactionDate": "2026-04-28T10:15:30Z",
                  "merchantName": "Example Merchant",
                  "merchantMid": "merchant_mid_123",
                  "merchantCity": "London",
                  "merchantCountry": "GB",
                  "merchantState": "ENG",
                  "merchantZipcode": "EC1A1BB",
                  "mcc": "5812",
                  "mccCategory": "Restaurants",
                  "fee": 0.35,
                  "transactionCurrency": "GBP",
                  "transactionAmount": "36.25",
                  "clientTransactionId": "client_tx_123",
                  "cardTransactionId": "card_trace_123",
                  "relatedCardTransactionId": "card_trace_parent_123",
                  "remark": "Approved",
                  "detail": "Card transaction processed",
                  "type": "CONSUMPTION"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.state_updated": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.state_updated",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money card state changes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-state_updated",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.state_updated"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.state_updated"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "externalCardId": {
                        "type": "string",
                        "description": "`data.externalCardId` parameter.",
                        "example": "card_ext_123"
                      },
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "previousState": {
                        "type": "string",
                        "description": "`data.previousState` parameter.",
                        "example": "ACTIVE"
                      },
                      "currentState": {
                        "type": "string",
                        "description": "`data.currentState` parameter.",
                        "example": "SUSPENDED"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "blocked"
                      }
                    },
                    "description": "Event-specific payload for `card.state_updated`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.state_updated",
                "domain": "card",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "cardId": 555,
                  "externalCardId": "card_ext_123",
                  "userId": 12345,
                  "previousState": "ACTIVE",
                  "currentState": "SUSPENDED",
                  "status": "blocked"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.3ds.otp": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.3ds.otp",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a card 3DS OTP is received from Interlace.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-3ds-otp",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.3ds.otp"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.3ds.otp"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "hoppacard"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "hoppacard"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "externalCardId": {
                        "type": "string",
                        "description": "`data.externalCardId` parameter.",
                        "example": "card_ext_123"
                      },
                      "otp": {
                        "type": "string",
                        "description": "`data.otp` parameter.",
                        "example": "123456"
                      },
                      "expiresAt": {
                        "type": "string",
                        "description": "`data.expiresAt` parameter.",
                        "example": "2026-04-28T10:20:30Z"
                      }
                    },
                    "description": "Event-specific payload for `card.3ds.otp`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.3ds.otp",
                "domain": "card",
                "provider": "hoppacard",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardId": 555,
                  "externalCardId": "card_ext_123",
                  "otp": "123456",
                  "expiresAt": "2026-04-28T10:20:30Z"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/card.3ds_auth_request": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "card.3ds_auth_request",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money card 3DS authentication request requires OTP handling.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-card-3ds_auth_request",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "card.3ds_auth_request"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "card.3ds_auth_request"
                  },
                  "domain": {
                    "enum": [
                      "card"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "card"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardId": {
                        "type": "integer",
                        "description": "`data.cardId` parameter.",
                        "format": "int32",
                        "example": 555
                      },
                      "externalCardId": {
                        "type": "string",
                        "description": "`data.externalCardId` parameter.",
                        "example": "card_ext_123"
                      },
                      "merchantName": {
                        "type": "string",
                        "description": "`data.merchantName` parameter.",
                        "example": "Example Merchant"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 42.5
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "EUR"
                      },
                      "transactionId": {
                        "type": "string",
                        "description": "`data.transactionId` parameter.",
                        "example": "txn_123"
                      },
                      "otp": {
                        "type": "string",
                        "description": "`data.otp` parameter.",
                        "example": "123456"
                      }
                    },
                    "description": "Event-specific payload for `card.3ds_auth_request`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "card.3ds_auth_request",
                "domain": "card",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardId": 555,
                  "externalCardId": "card_ext_123",
                  "merchantName": "Example Merchant",
                  "amount": 42.50,
                  "currency": "EUR",
                  "transactionId": "txn_123",
                  "otp": "123456"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/digitalwallet.token_transition": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "digitalwallet.token_transition",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money digital wallet token changes state.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-digitalwallet-token_transition",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "digitalwallet.token_transition"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "digitalwallet.token_transition"
                  },
                  "domain": {
                    "enum": [
                      "digitalwallet"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "digitalwallet"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "DigitalWalletTokenTransition"
                      },
                      "cardId": {
                        "type": "string",
                        "description": "`data.cardId` parameter.",
                        "example": "card_ext_123"
                      },
                      "tokenId": {
                        "type": "string",
                        "description": "`data.tokenId` parameter.",
                        "example": "token_123"
                      },
                      "walletType": {
                        "type": "string",
                        "description": "`data.walletType` parameter.",
                        "example": "APPLE_PAY"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "previousState": {
                        "type": "string",
                        "description": "`data.previousState` parameter.",
                        "example": "INACTIVE"
                      },
                      "currentState": {
                        "type": "string",
                        "description": "`data.currentState` parameter.",
                        "example": "ACTIVE"
                      }
                    },
                    "description": "Event-specific payload for `digitalwallet.token_transition`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "digitalwallet.token_transition",
                "domain": "digitalwallet",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "DigitalWalletTokenTransition",
                  "cardId": "card_ext_123",
                  "tokenId": "token_123",
                  "walletType": "APPLE_PAY",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "previousState": "INACTIVE",
                  "currentState": "ACTIVE"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/cardholder.status": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "cardholder.status",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent whenever a cardholder status update is processed.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-cardholder-status",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "cardholder.status"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "cardholder.status"
                  },
                  "domain": {
                    "enum": [
                      "cardholder"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "cardholder"
                  },
                  "provider": {
                    "enum": [
                      "bank"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "bank"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "Active"
                      }
                    },
                    "description": "Event-specific payload for `cardholder.status`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "cardholder.status",
                "domain": "cardholder",
                "provider": "bank",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "status": "Active"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/cardholder.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "cardholder.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a cardholder is created by the banking provider.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-cardholder-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "cardholder.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "cardholder.created"
                  },
                  "domain": {
                    "enum": [
                      "cardholder"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "cardholder"
                  },
                  "provider": {
                    "enum": [
                      "bank"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "bank"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "Active"
                      },
                      "cardholderId": {
                        "type": "string",
                        "description": "`data.cardholderId` parameter.",
                        "example": "cardholder_123"
                      }
                    },
                    "description": "Event-specific payload for `cardholder.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "cardholder.created",
                "domain": "cardholder",
                "provider": "bank",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "status": "Active",
                  "cardholderId": "cardholder_123"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/cardholder.approved": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "cardholder.approved",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a cardholder is approved by the banking provider.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-cardholder-approved",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "cardholder.approved"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "cardholder.approved"
                  },
                  "domain": {
                    "enum": [
                      "cardholder"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "cardholder"
                  },
                  "provider": {
                    "enum": [
                      "bank"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "bank"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "Active"
                      }
                    },
                    "description": "Event-specific payload for `cardholder.approved`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "cardholder.approved",
                "domain": "cardholder",
                "provider": "bank",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "status": "Active"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/cardholder.deleted": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "cardholder.deleted",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when a cardholder is deleted by the banking provider.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-cardholder-deleted",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "cardholder.deleted"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "cardholder.deleted"
                  },
                  "domain": {
                    "enum": [
                      "cardholder"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "cardholder"
                  },
                  "provider": {
                    "enum": [
                      "bank"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "bank"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "userId": {
                        "type": "integer",
                        "description": "`data.userId` parameter.",
                        "format": "int32",
                        "example": 12345
                      },
                      "cardholderId": {
                        "type": "string",
                        "description": "`data.cardholderId` parameter.",
                        "example": "cardholder_123"
                      }
                    },
                    "description": "Event-specific payload for `cardholder.deleted`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "cardholder.deleted",
                "domain": "cardholder",
                "provider": "bank",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "userId": 12345,
                  "cardholderId": "cardholder_123"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/person.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "person.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money associated person is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-person-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "person.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "person.created"
                  },
                  "domain": {
                    "enum": [
                      "person"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "person"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PersonCreated"
                      },
                      "personId": {
                        "type": "string",
                        "description": "`data.personId` parameter.",
                        "example": "person_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "firstName": {
                        "type": "string",
                        "description": "`data.firstName` parameter.",
                        "example": "Jane"
                      },
                      "lastName": {
                        "type": "string",
                        "description": "`data.lastName` parameter.",
                        "example": "Doe"
                      },
                      "email": {
                        "type": "string",
                        "description": "`data.email` parameter.",
                        "example": "jane.doe@example.com"
                      }
                    },
                    "description": "Event-specific payload for `person.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "person.created",
                "domain": "person",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PersonCreated",
                  "personId": "person_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "firstName": "Jane",
                  "lastName": "Doe",
                  "email": "jane.doe@example.com"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/kyc.update": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "kyc.update",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when Equals Money updates a user's KYC review status.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-kyc-update",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "kyc.update"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "kyc.update"
                  },
                  "domain": {
                    "enum": [
                      "kyc"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "kyc"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "KycUpdate"
                      },
                      "correlationId": {
                        "type": "string",
                        "description": "`data.correlationId` parameter.",
                        "example": "corr_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "PENDING_DOCUMENTS"
                      },
                      "personId": {
                        "type": "string",
                        "description": "`data.personId` parameter.",
                        "example": "person_123"
                      },
                      "requiredAction": {
                        "type": "string",
                        "description": "`data.requiredAction` parameter.",
                        "example": "upload_bank_statement"
                      },
                      "actionUrl": {
                        "type": "string",
                        "description": "`data.actionUrl` parameter.",
                        "example": "https://app.equalsmoney.com/kyc/upload"
                      }
                    },
                    "description": "Event-specific payload for `kyc.update`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "kyc.update",
                "domain": "kyc",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "KycUpdate",
                  "correlationId": "corr_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "PENDING_DOCUMENTS",
                  "personId": "person_123",
                  "requiredAction": "upload_bank_statement",
                  "actionUrl": "https://app.equalsmoney.com/kyc/upload"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/kyc.information_request": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "kyc.information_request",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when Equals Money requests additional KYC documents.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-kyc-information_request",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "kyc.information_request"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "kyc.information_request"
                  },
                  "domain": {
                    "enum": [
                      "kyc"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "kyc"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "KycInformationRequest"
                      },
                      "correlationId": {
                        "type": "string",
                        "description": "`data.correlationId` parameter.",
                        "example": "corr_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "requiredDocuments": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "`data.requiredDocuments` parameter.",
                          "example": "proof_of_address"
                        },
                        "description": "`data.requiredDocuments` parameter.",
                        "example": [
                          "proof_of_address",
                          "source_of_funds"
                        ]
                      }
                    },
                    "description": "Event-specific payload for `kyc.information_request`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "kyc.information_request",
                "domain": "kyc",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "KycInformationRequest",
                  "correlationId": "corr_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "requiredDocuments": [
                    "proof_of_address",
                    "source_of_funds"
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/recipient.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "recipient.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money recipient is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-recipient-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "recipient.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "recipient.created"
                  },
                  "domain": {
                    "enum": [
                      "recipient"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "recipient"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "RecipientCreated"
                      },
                      "recipientId": {
                        "type": "string",
                        "description": "`data.recipientId` parameter.",
                        "example": "recipient_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "name": {
                        "type": "string",
                        "description": "`data.name` parameter.",
                        "example": "Example Supplier Ltd"
                      }
                    },
                    "description": "Event-specific payload for `recipient.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "recipient.created",
                "domain": "recipient",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "RecipientCreated",
                  "recipientId": "recipient_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "name": "Example Supplier Ltd"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/recipient.deleted": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "recipient.deleted",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money recipient is deleted.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-recipient-deleted",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "recipient.deleted"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "recipient.deleted"
                  },
                  "domain": {
                    "enum": [
                      "recipient"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "recipient"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "RecipientDeleted"
                      },
                      "recipientId": {
                        "type": "string",
                        "description": "`data.recipientId` parameter.",
                        "example": "recipient_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      }
                    },
                    "description": "Event-specific payload for `recipient.deleted`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "recipient.deleted",
                "domain": "recipient",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "RecipientDeleted",
                  "recipientId": "recipient_123",
                  "eventTime": "2026-04-28T10:15:30Z"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.created"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentCreated"
                      },
                      "paymentId": {
                        "type": "string",
                        "description": "`data.paymentId` parameter.",
                        "example": "payment_123"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "PROCESSING"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 250
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "GBP"
                      },
                      "recipientId": {
                        "type": "string",
                        "description": "`data.recipientId` parameter.",
                        "example": "recipient_123"
                      },
                      "reference": {
                        "type": "string",
                        "description": "`data.reference` parameter.",
                        "example": "Invoice 123"
                      }
                    },
                    "description": "Event-specific payload for `payment.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.created",
                "domain": "payment",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentCreated",
                  "paymentId": "payment_123",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "PROCESSING",
                  "amount": 250.00,
                  "currency": "GBP",
                  "recipientId": "recipient_123",
                  "reference": "Invoice 123"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/payment.returned": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "payment.returned",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment is returned.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-payment-returned",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "payment.returned"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "payment.returned"
                  },
                  "domain": {
                    "enum": [
                      "payment"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "payment"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentReturned"
                      },
                      "paymentId": {
                        "type": "string",
                        "description": "`data.paymentId` parameter.",
                        "example": "payment_123"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "RETURNED"
                      },
                      "returnReason": {
                        "type": "string",
                        "description": "`data.returnReason` parameter.",
                        "example": "Beneficiary account closed"
                      }
                    },
                    "description": "Event-specific payload for `payment.returned`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "payment.returned",
                "domain": "payment",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentReturned",
                  "paymentId": "payment_123",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "RETURNED",
                  "returnReason": "Beneficiary account closed"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/fee.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "fee.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money fee is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-fee-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "fee.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "fee.created"
                  },
                  "domain": {
                    "enum": [
                      "fee"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "fee"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "FeeCreated"
                      },
                      "feeId": {
                        "type": "string",
                        "description": "`data.feeId` parameter.",
                        "example": "fee_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "feeType": {
                        "type": "string",
                        "description": "`data.feeType` parameter.",
                        "example": "payment_fee"
                      },
                      "amount": {
                        "type": "number",
                        "description": "`data.amount` parameter.",
                        "format": "double",
                        "example": 2.5
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "GBP"
                      }
                    },
                    "description": "Event-specific payload for `fee.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "fee.created",
                "domain": "fee",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "FeeCreated",
                  "feeId": "fee_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "feeType": "payment_fee",
                  "amount": 2.50,
                  "currency": "GBP"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatch.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatch.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatch-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatch.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatch.created"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatch"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatch"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchCreated"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "CREATED"
                      },
                      "totalAmount": {
                        "type": "number",
                        "description": "`data.totalAmount` parameter.",
                        "format": "double",
                        "example": 1500
                      },
                      "currency": {
                        "type": "string",
                        "description": "`data.currency` parameter.",
                        "example": "GBP"
                      },
                      "paymentCount": {
                        "type": "integer",
                        "description": "`data.paymentCount` parameter.",
                        "format": "int32",
                        "example": 3
                      }
                    },
                    "description": "Event-specific payload for `paymentbatch.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatch.created",
                "domain": "paymentbatch",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchCreated",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "CREATED",
                  "totalAmount": 1500.00,
                  "currency": "GBP",
                  "paymentCount": 3
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatch.cancelled": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatch.cancelled",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch is cancelled.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatch-cancelled",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatch.cancelled"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatch.cancelled"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatch"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatch"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchCancelled"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "CANCELLED"
                      }
                    },
                    "description": "Event-specific payload for `paymentbatch.cancelled`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatch.cancelled",
                "domain": "paymentbatch",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchCancelled",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "CANCELLED"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatch.validation_error": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatch.validation_error",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch fails validation.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatch-validation_error",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatch.validation_error"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatch.validation_error"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatch"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatch"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchValidationError"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "errors": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "`data.errors` parameter.",
                          "example": "Recipient account number is invalid"
                        },
                        "description": "`data.errors` parameter.",
                        "example": [
                          "Recipient account number is invalid",
                          "Payment amount exceeds limit"
                        ]
                      }
                    },
                    "description": "Event-specific payload for `paymentbatch.validation_error`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatch.validation_error",
                "domain": "paymentbatch",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchValidationError",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "errors": [
                    "Recipient account number is invalid",
                    "Payment amount exceeds limit"
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatch.processing": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatch.processing",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch enters processing.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatch-processing",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatch.processing"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatch.processing"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatch"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatch"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchProcessing"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "PROCESSING"
                      }
                    },
                    "description": "Event-specific payload for `paymentbatch.processing`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatch.processing",
                "domain": "paymentbatch",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchProcessing",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "PROCESSING"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatch.completed": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatch.completed",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch completes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatch-completed",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatch.completed"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatch.completed"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatch"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatch"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchCompleted"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "COMPLETED"
                      },
                      "successCount": {
                        "type": "integer",
                        "description": "`data.successCount` parameter.",
                        "format": "int32",
                        "example": 2
                      },
                      "failureCount": {
                        "type": "integer",
                        "description": "`data.failureCount` parameter.",
                        "format": "int32",
                        "example": 1
                      }
                    },
                    "description": "Event-specific payload for `paymentbatch.completed`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatch.completed",
                "domain": "paymentbatch",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchCompleted",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "COMPLETED",
                  "successCount": 2,
                  "failureCount": 1
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatchorder.created": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatchorder.created",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch FX order is created.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatchorder-created",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatchorder.created"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatchorder.created"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatchorder"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatchorder"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchOrderCreated"
                      },
                      "orderId": {
                        "type": "string",
                        "description": "`data.orderId` parameter.",
                        "example": "order_123"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "CREATED"
                      }
                    },
                    "description": "Event-specific payload for `paymentbatchorder.created`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatchorder.created",
                "domain": "paymentbatchorder",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchOrderCreated",
                  "orderId": "order_123",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "CREATED"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatchorder.completed": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatchorder.completed",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch FX order completes.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatchorder-completed",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatchorder.completed"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatchorder.completed"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatchorder"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatchorder"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchOrderCompleted"
                      },
                      "orderId": {
                        "type": "string",
                        "description": "`data.orderId` parameter.",
                        "example": "order_123"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "COMPLETED"
                      }
                    },
                    "description": "Event-specific payload for `paymentbatchorder.completed`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatchorder.completed",
                "domain": "paymentbatchorder",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchOrderCompleted",
                  "orderId": "order_123",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "COMPLETED"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    },
    "/webhooks/outbound/paymentbatchorder.cancelled": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "paymentbatchorder.cancelled",
        "description": "This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL.\n\nSent when an Equals Money payment batch FX order is cancelled.\n\nConfigure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`.\nThe signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key.\nReturn any 2xx status code to acknowledge the webhook.",
        "operationId": "outbound-webhook-paymentbatchorder-cancelled",
        "parameters": [
          {
            "name": "X-Hoppacard-Signature",
            "in": "header",
            "description": "Lowercase hex HMAC-SHA256 signature of the raw request body, generated with your webhook secret.",
            "required": true,
            "schema": {
              "type": "string",
              "example": "c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a"
            }
          }
        ],
        "requestBody": {
          "description": "Webhook request body sent to your configured URL.",
          "content": {
            "application/json": {
              "schema": {
                "required": [
                  "id",
                  "type",
                  "domain",
                  "provider",
                  "timestamp",
                  "data"
                ],
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Unique webhook event id.",
                    "example": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                  },
                  "type": {
                    "enum": [
                      "paymentbatchorder.cancelled"
                    ],
                    "type": "string",
                    "description": "Webhook event type.",
                    "example": "paymentbatchorder.cancelled"
                  },
                  "domain": {
                    "enum": [
                      "paymentbatchorder"
                    ],
                    "type": "string",
                    "description": "Business domain for the event.",
                    "example": "paymentbatchorder"
                  },
                  "provider": {
                    "enum": [
                      "equalsmoney"
                    ],
                    "type": "string",
                    "description": "Provider that originated the event.",
                    "example": "equalsmoney"
                  },
                  "timestamp": {
                    "type": "string",
                    "description": "UTC time when the webhook was created.",
                    "format": "date-time",
                    "example": "2026-04-28T10:15:30Z"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "accountId": {
                        "type": "string",
                        "description": "`data.accountId` parameter.",
                        "example": "acc_eq_123"
                      },
                      "messageId": {
                        "type": "string",
                        "description": "`data.messageId` parameter.",
                        "example": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6"
                      },
                      "webhookEventTypeName": {
                        "type": "string",
                        "description": "`data.webhookEventTypeName` parameter.",
                        "example": "PaymentBatchOrderCancelled"
                      },
                      "orderId": {
                        "type": "string",
                        "description": "`data.orderId` parameter.",
                        "example": "order_123"
                      },
                      "batchId": {
                        "type": "string",
                        "description": "`data.batchId` parameter.",
                        "example": "batch_123"
                      },
                      "eventTime": {
                        "type": "string",
                        "description": "`data.eventTime` parameter.",
                        "example": "2026-04-28T10:15:30Z"
                      },
                      "status": {
                        "type": "string",
                        "description": "`data.status` parameter.",
                        "example": "CANCELLED"
                      }
                    },
                    "description": "Event-specific payload for `paymentbatchorder.cancelled`."
                  }
                }
              },
              "example": {
                "id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                "type": "paymentbatchorder.cancelled",
                "domain": "paymentbatchorder",
                "provider": "equalsmoney",
                "timestamp": "2026-04-28T10:15:30Z",
                "data": {
                  "accountId": "acc_eq_123",
                  "messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
                  "webhookEventTypeName": "PaymentBatchOrderCancelled",
                  "orderId": "order_123",
                  "batchId": "batch_123",
                  "eventTime": "2026-04-28T10:15:30Z",
                  "status": "CANCELLED"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Return any 2xx response to acknowledge receipt."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AccountStatusV2": {
        "enum": [
          "PENDING",
          "ACTIVE",
          "SUSPENDED",
          "BLOCKED",
          "DELETED"
        ]
      },
      "Address": {
        "type": "object",
        "properties": {
          "Line1": {
            "type": "string",
            "nullable": true
          },
          "Line2": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "State": {
            "type": "string",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "nullable": true
          },
          "PostalCode": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "AddressRequest": {
        "required": [
          "AddressType",
          "StreetName",
          "Postcode",
          "City",
          "CountryCode"
        ],
        "type": "object",
        "properties": {
          "AddressType": {
            "enum": [
              "REGISTERED",
              "TRADING"
            ],
            "type": "string",
            "description": "Possible values: REGISTERED, TRADING."
          },
          "StreetName": {
            "type": "string"
          },
          "BuildingNumber": {
            "type": "string",
            "nullable": true
          },
          "BuildingName": {
            "type": "string",
            "nullable": true
          },
          "Postcode": {
            "type": "string"
          },
          "City": {
            "type": "string"
          },
          "Region": {
            "type": "string",
            "nullable": true
          },
          "CountryCode": {
            "enum": [
              "AD",
              "AE",
              "AF",
              "AG",
              "AI",
              "AL",
              "AM",
              "AO",
              "AQ",
              "AR",
              "AS",
              "AT",
              "AU",
              "AW",
              "AX",
              "AZ",
              "BA",
              "BB",
              "BD",
              "BE",
              "BF",
              "BG",
              "BH",
              "BI",
              "BJ",
              "BL",
              "BM",
              "BN",
              "BO",
              "BQ",
              "BR",
              "BS",
              "BT",
              "BV",
              "BW",
              "BY",
              "BZ",
              "CA",
              "CC",
              "CD",
              "CF",
              "CG",
              "CH",
              "CI",
              "CK",
              "CL",
              "CM",
              "CN",
              "CO",
              "CR",
              "CU",
              "CV",
              "CW",
              "CX",
              "CY",
              "CZ",
              "DE",
              "DJ",
              "DK",
              "DM",
              "DO",
              "DZ",
              "EC",
              "EE",
              "EG",
              "EH",
              "ER",
              "ES",
              "ET",
              "FI",
              "FJ",
              "FK",
              "FM",
              "FO",
              "FR",
              "GA",
              "GB",
              "GD",
              "GE",
              "GF",
              "GG",
              "GH",
              "GI",
              "GL",
              "GM",
              "GN",
              "GP",
              "GQ",
              "GR",
              "GS",
              "GT",
              "GU",
              "GW",
              "GY",
              "HK",
              "HM",
              "HN",
              "HR",
              "HT",
              "HU",
              "ID",
              "IE",
              "IL",
              "IM",
              "IN",
              "IO",
              "IQ",
              "IR",
              "IS",
              "IT",
              "JE",
              "JM",
              "JO",
              "JP",
              "KE",
              "KG",
              "KH",
              "KI",
              "KM",
              "KN",
              "KP",
              "KR",
              "KW",
              "KY",
              "KZ",
              "LA",
              "LB",
              "LC",
              "LI",
              "LK",
              "LR",
              "LS",
              "LT",
              "LU",
              "LV",
              "LY",
              "MA",
              "MC",
              "MD",
              "ME",
              "MF",
              "MG",
              "MH",
              "MK",
              "ML",
              "MM",
              "MN",
              "MO",
              "MP",
              "MQ",
              "MR",
              "MS",
              "MT",
              "MU",
              "MV",
              "MW",
              "MX",
              "MY",
              "MZ",
              "NA",
              "NC",
              "NE",
              "NF",
              "NG",
              "NI",
              "NL",
              "NO",
              "NP",
              "NR",
              "NU",
              "NZ",
              "OM",
              "PA",
              "PE",
              "PF",
              "PG",
              "PH",
              "PK",
              "PL",
              "PM",
              "PN",
              "PR",
              "PS",
              "PT",
              "PW",
              "PY",
              "QA",
              "RE",
              "RO",
              "RS",
              "RU",
              "RW",
              "SA",
              "SB",
              "SC",
              "SD",
              "SE",
              "SG",
              "SH",
              "SI",
              "SJ",
              "SK",
              "SL",
              "SM",
              "SN",
              "SO",
              "SR",
              "SS",
              "ST",
              "SV",
              "SX",
              "SY",
              "SZ",
              "TC",
              "TD",
              "TF",
              "TG",
              "TH",
              "TJ",
              "TK",
              "TL",
              "TM",
              "TN",
              "TO",
              "TR",
              "TT",
              "TV",
              "TW",
              "TZ",
              "UA",
              "UG",
              "UM",
              "US",
              "UY",
              "UZ",
              "VA",
              "VC",
              "VE",
              "VG",
              "VI",
              "VN",
              "VU",
              "WF",
              "WS",
              "XK",
              "YE",
              "YT",
              "ZA",
              "ZM",
              "ZW"
            ],
            "type": "string",
            "description": "Possible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
          }
        }
      },
      "AmountInfo": {
        "type": "object",
        "properties": {
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          }
        },
        "description": "Amount information"
      },
      "AppliedRuleResponse": {
        "type": "object",
        "properties": {
          "RuleId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "RuleName": {
            "type": "string"
          },
          "RuleType": {
            "type": "string"
          },
          "PointsPerUnit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Multiplier": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PointsEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Priority": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "AssetBalance": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Currency": {
            "type": "string"
          },
          "Balance": {
            "type": "string"
          },
          "AvailableBalance": {
            "type": "string",
            "nullable": true
          },
          "FrozenBalance": {
            "type": "string",
            "nullable": true
          },
          "PendingBalance": {
            "type": "string",
            "nullable": true
          },
          "Network": {
            "type": "string",
            "nullable": true
          },
          "AssetType": {
            "type": "string",
            "nullable": true
          },
          "BalanceType": {
            "type": "string",
            "nullable": true
          },
          "BalanceId": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "AssignedVoucherResponse": {
        "required": [
          "AssignmentId",
          "VoucherId",
          "Name",
          "Amount",
          "Currency",
          "Status",
          "Source",
          "ReferralCommissionId",
          "AssignedAt",
          "ValidUntil",
          "Redemption"
        ],
        "type": "object",
        "properties": {
          "AssignmentId": {
            "type": "string",
            "format": "uuid"
          },
          "VoucherId": {
            "type": "string",
            "format": "uuid"
          },
          "Name": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Source": {
            "type": "string"
          },
          "ReferralCommissionId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "AssignedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Redemption": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/VoucherRedemptionResponse"
              }
            ],
            "nullable": true
          }
        }
      },
      "AssignmentSourceStatsResponse": {
        "type": "object",
        "properties": {
          "Source": {
            "type": "string"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPoints": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Percentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "AssignVoucherFromGroupRequest": {
        "required": [
          "GroupId",
          "UserId"
        ],
        "type": "object",
        "properties": {
          "GroupId": {
            "type": "string",
            "format": "uuid"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "AssignVoucherRequest": {
        "required": [
          "VoucherId",
          "UserId"
        ],
        "type": "object",
        "properties": {
          "VoucherId": {
            "type": "string",
            "format": "uuid"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "AssociatedPersonLinkRequest": {
        "required": [
          "AssociatedPersonId",
          "AssociationType"
        ],
        "type": "object",
        "properties": {
          "AssociatedPersonId": {
            "type": "string"
          },
          "AssociationType": {
            "enum": [
              "APPLICANT",
              "DIRECTOR",
              "ULTIMATE_BENEFICIAL_OWNER"
            ],
            "type": "string",
            "description": "Possible values: APPLICANT, DIRECTOR, ULTIMATE_BENEFICIAL_OWNER."
          },
          "JobTitle": {
            "type": "string",
            "description": "Required when AssociationType is APPLICANT.",
            "nullable": true
          },
          "OwnershipPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Required when AssociationType is ULTIMATE_BENEFICIAL_OWNER. Allowed range: 0-100.",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "AuthenticateResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Username": {
            "type": "string"
          },
          "Email": {
            "type": "string"
          },
          "Firstname": {
            "type": "string"
          },
          "Lastname": {
            "type": "string"
          },
          "AccessToken": {
            "type": "string"
          },
          "RefreshToken": {
            "type": "string"
          }
        }
      },
      "AuthorizationEndpointUpsertRequest": {
        "type": "object",
        "properties": {
          "Environment": {
            "type": "string"
          },
          "Enabled": {
            "type": "boolean"
          },
          "DefaultResponseCode": {
            "type": "string"
          },
          "FailureResponseCode": {
            "type": "string"
          }
        }
      },
      "AuthorizationRuleConfiguration": {
        "type": "object",
        "properties": {
          "MerchantNames": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "MerchantMids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "MerchantMatchMode": {
            "type": "string"
          },
          "Values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "MaximumAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Currency": {
            "type": "string",
            "nullable": true
          },
          "TimeZone": {
            "type": "string",
            "nullable": true
          },
          "DaysOfWeek": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "StartTime": {
            "type": "string",
            "nullable": true
          },
          "EndTime": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "AuthorizationRuleUpsertRequest": {
        "type": "object",
        "properties": {
          "Name": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ScopeType": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "BinRangeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Required for COMPANY and USER rules. CARD rules derive the BIN from the\ncard product and reject a conflicting supplied value.",
            "format": "int32",
            "nullable": true
          },
          "RuleType": {
            "type": "string"
          },
          "ResponseCode": {
            "type": "string"
          },
          "Priority": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Active": {
            "type": "boolean"
          },
          "Configuration": {
            "$ref": "#/components/schemas/AuthorizationRuleConfiguration"
          },
          "EffectiveFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "EffectiveTo": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "AvailableWithdrawalBalanceResponse": {
        "type": "object",
        "properties": {
          "TotalAvailableUSDT": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TotalAvailableUSDC": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "WalletBreakdown": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WalletBalance"
            }
          },
          "ExchangeRateUSDToUSDT": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ExchangeRateUSDToUSDC": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        },
        "description": "Response model for available withdrawal balance"
      },
      "BankProvider": {
        "enum": [
          "EqualsMoney"
        ],
        "type": "string",
        "description": "Indicates which banking provider owns a resource"
      },
      "BoomFiBalanceData": {
        "type": "object",
        "properties": {
          "account_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "chain": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiChainData"
              }
            ],
            "nullable": true
          },
          "currency": {
            "type": "string"
          },
          "token_address": {
            "type": "string",
            "nullable": true
          },
          "amount": {
            "type": "string"
          },
          "amount_billing_currency": {
            "type": "string",
            "nullable": true
          },
          "pending_amount": {
            "type": "string"
          },
          "pending_amount_billing_currency": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiBalancesData": {
        "type": "object",
        "properties": {
          "balances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BoomFiBalanceData"
            }
          },
          "total_balance": {
            "type": "string"
          }
        }
      },
      "BoomFiBankAddressBookAccount": {
        "type": "object",
        "properties": {
          "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "currency": {
            "type": "string"
          },
          "bank_name": {
            "type": "string",
            "nullable": true
          },
          "account_number": {
            "type": "string",
            "nullable": true
          },
          "account_number_hint": {
            "type": "string",
            "nullable": true
          },
          "account_holder_name": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "enabled": {
            "type": "boolean"
          },
          "state": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiBPayCardLoadResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Status": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "CryptoAmount": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FiatCurrency": {
            "type": "string"
          },
          "EstimatedFiatAmount": {
            "type": "string",
            "nullable": true
          },
          "SettledFiatAmount": {
            "type": "string",
            "nullable": true
          },
          "DepositInstruction": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiFundingInstruction"
              }
            ],
            "nullable": true
          },
          "BoomFiOrderId": {
            "type": "string",
            "nullable": true
          },
          "BoomFiOrderStatus": {
            "type": "string",
            "nullable": true
          },
          "BoomFiSettlementStatus": {
            "type": "string",
            "nullable": true
          },
          "BPayTransferId": {
            "type": "string",
            "nullable": true
          },
          "FailureMessage": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "BoomFiChainData": {
        "type": "object",
        "properties": {
          "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "native_currency_symbol": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiCreateBankAddressBookRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "account_number": {
            "type": "string"
          },
          "bank_name": {
            "type": "string"
          },
          "account_holder_name": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          }
        }
      },
      "BoomFiCurrencyData": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "tokens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BoomFiCurrencyTokenData"
            }
          }
        }
      },
      "BoomFiCurrencyTokenData": {
        "type": "object",
        "properties": {
          "chain_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "address": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiEqualsMoneyDepositResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Status": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TargetBudgetId": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "CryptoAmount": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FiatCurrency": {
            "type": "string"
          },
          "EstimatedFiatAmount": {
            "type": "string",
            "nullable": true
          },
          "SettledFiatAmount": {
            "type": "string",
            "nullable": true
          },
          "DepositInstruction": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiFundingInstruction"
              }
            ],
            "nullable": true
          },
          "BoomFiOrderId": {
            "type": "string",
            "nullable": true
          },
          "BoomFiOrderStatus": {
            "type": "string",
            "nullable": true
          },
          "BoomFiSettlementStatus": {
            "type": "string",
            "nullable": true
          },
          "EqualsTransferId": {
            "type": "string",
            "nullable": true
          },
          "FailureMessage": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "BoomFiFundingInstruction": {
        "type": "object",
        "properties": {
          "account_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "sub_account_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "chain_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "chain_name": {
            "type": "string",
            "nullable": true
          },
          "currency": {
            "type": "string"
          },
          "address": {
            "type": "string"
          }
        }
      },
      "BoomFiInterlaceToEqualsConfirmResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "TransferId": {
            "type": "string",
            "nullable": true
          },
          "TransferStatus": {
            "type": "string",
            "nullable": true
          },
          "TargetBudgetId": {
            "type": "string",
            "nullable": true
          },
          "DepositWallet": { },
          "OtcRequest": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiOtcTradeRequestResponse"
              }
            ],
            "nullable": true
          }
        }
      },
      "BoomFiInterlaceToEqualsInitiateResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "VerificationToken": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "DepositAddress": {
            "type": "string"
          },
          "DepositWallet": { },
          "IndicativeQuote": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiRampQuoteData"
              }
            ],
            "nullable": true
          },
          "AutoExecutionTolerancePercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ExchangeRateNotice": {
            "type": "string"
          }
        }
      },
      "BoomFiOtcTradeRequestResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Status": {
            "type": "string"
          },
          "BoomFiVirtualAccountId": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "CryptoAmount": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FiatCurrency": {
            "type": "string"
          },
          "BoomFiOrderId": {
            "type": "string",
            "nullable": true
          },
          "BoomFiQuoteId": {
            "type": "string",
            "nullable": true
          },
          "BoomFiOrderStatus": {
            "type": "string",
            "nullable": true
          },
          "BoomFiSettlementStatus": {
            "type": "string",
            "nullable": true
          },
          "ToAmount": {
            "type": "string",
            "nullable": true
          },
          "EffectiveRate": {
            "type": "string",
            "nullable": true
          },
          "FailureMessage": {
            "type": "string",
            "nullable": true
          },
          "SlackChannelId": {
            "type": "string",
            "nullable": true
          },
          "SlackThreadTs": {
            "type": "string",
            "nullable": true
          },
          "SlackPermalink": {
            "type": "string",
            "nullable": true
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CompletionMessage": {
            "type": "string",
            "nullable": true
          },
          "TransferDirection": {
            "type": "string",
            "nullable": true
          },
          "InitialExchangeRate": {
            "type": "string",
            "nullable": true
          },
          "InitialFeeAmount": {
            "type": "string",
            "nullable": true
          },
          "InitialFeeCurrency": {
            "type": "string",
            "nullable": true
          },
          "CurrentFeeAmount": {
            "type": "string",
            "nullable": true
          },
          "CurrentFeeCurrency": {
            "type": "string",
            "nullable": true
          },
          "RateDeviationPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "AutoExecutionTolerancePercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "QuoteDecisionStatus": {
            "type": "string",
            "nullable": true
          },
          "QuoteExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "FundsDecision": {
            "type": "string",
            "nullable": true
          },
          "ReturnFeeAmount": {
            "type": "string",
            "nullable": true
          },
          "ReturnFeeCurrency": {
            "type": "string",
            "nullable": true
          },
          "SourceTransferId": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiRampQuoteData": {
        "type": "object",
        "properties": {
          "buy_currency": {
            "type": "string",
            "nullable": true
          },
          "buy_amount": {
            "type": "string",
            "nullable": true
          },
          "sell_currency": {
            "type": "string",
            "nullable": true
          },
          "sell_amount": {
            "type": "string",
            "nullable": true
          },
          "payment_method": {
            "type": "string",
            "nullable": true
          },
          "quote_time": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "expiry": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "rate": {
            "type": "string",
            "nullable": true
          },
          "fees": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiRampQuoteFees"
              }
            ],
            "nullable": true
          },
          "quote_amount": {
            "type": "string",
            "nullable": true
          },
          "settlement_ccy": {
            "type": "string",
            "nullable": true
          },
          "settlement_chain_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "settlement_token_address": {
            "type": "string",
            "nullable": true
          },
          "session": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiRampQuoteFees": {
        "type": "object",
        "properties": {
          "fee_ccy": {
            "type": "string",
            "nullable": true
          },
          "network_fee": {
            "type": "string",
            "nullable": true
          },
          "boomfi_fee": {
            "type": "string",
            "nullable": true
          },
          "total_fee": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiTradingOverview": {
        "type": "object",
        "properties": {
          "account": {
            "$ref": "#/components/schemas/BoomFiTradingVirtualAccountData"
          },
          "balances": {
            "$ref": "#/components/schemas/BoomFiBalancesData"
          },
          "currencies": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/BoomFiCurrencyData"
            }
          },
          "settlement_accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BoomFiBankAddressBookAccount"
            }
          },
          "fiat_funding_currencies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "BoomFiTradingSubAccount": {
        "type": "object",
        "properties": {
          "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "chain_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "address": {
            "type": "string"
          },
          "chain": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiChainData"
              }
            ],
            "nullable": true
          },
          "state": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "BoomFiTradingVirtualAccountData": {
        "type": "object",
        "properties": {
          "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "reference": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "account_type": {
            "type": "string",
            "nullable": true
          },
          "enabled": {
            "type": "boolean"
          },
          "state": {
            "type": "string",
            "nullable": true
          },
          "sub_accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BoomFiTradingSubAccount"
            }
          }
        }
      },
      "BoomFiVirtualAccountData": {
        "type": "object",
        "properties": {
          "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "type": "string",
            "nullable": true
          },
          "chain_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "currencies": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "enabled": {
            "type": "boolean",
            "nullable": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "BulkProcessingResponse": {
        "type": "object",
        "properties": {
          "TotalTransactions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SuccessfulTransactions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FailedTransactions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPointsAwarded": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "OverallSuccess": {
            "type": "boolean"
          },
          "ProcessingTimeMs": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "ProcessingTime": {
            "pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
            "type": "string"
          },
          "Errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "SuccessfulResults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BulkTransactionSuccessResult"
            }
          },
          "Results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BulkTransactionResult"
            }
          },
          "ProcessedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BulkProcessTransactionsRequest": {
        "required": [
          "Transactions"
        ],
        "type": "object",
        "properties": {
          "Transactions": {
            "maxItems": 1000,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BulkTransactionRequest"
            }
          },
          "Source": {
            "maxLength": 100,
            "type": "string"
          },
          "ContinueOnError": {
            "type": "boolean"
          }
        }
      },
      "BulkReverseVoucherRequest": {
        "required": [
          "Reason"
        ],
        "type": "object",
        "properties": {
          "RedemptionIds": {
            "maxItems": 1000,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Reason": {
            "maxLength": 500,
            "type": "string"
          },
          "DryRun": {
            "type": "boolean"
          },
          "Confirm": {
            "type": "boolean"
          }
        }
      },
      "BulkTransactionRequest": {
        "required": [
          "UserId",
          "TransactionId",
          "TransactionAmount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionId": {
            "maxLength": 255,
            "type": "string"
          },
          "TransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "maxLength": 3,
            "type": "string"
          },
          "MerchantName": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "MerchantCategory": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "MerchantId": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "UserTier": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "Source": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "TransactionTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Metadata": { }
        }
      },
      "BulkTransactionResult": {
        "type": "object",
        "properties": {
          "TransactionId": {
            "type": "string"
          },
          "Success": {
            "type": "boolean"
          },
          "PointsEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsAwarded": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "Transaction": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PointTransactionResponse"
              }
            ],
            "nullable": true
          }
        }
      },
      "BulkTransactionSuccessResult": {
        "type": "object",
        "properties": {
          "TransactionId": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "CalculationBreakdownResponse": {
        "type": "object",
        "properties": {
          "BasePoints": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "BonusPoints": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MultiplierBonus": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AppliedConditions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CardActivateResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          }
        }
      },
      "CardAutoLockRequestV2": {
        "type": "object",
        "properties": {
          "Enabled": {
            "type": "boolean"
          }
        }
      },
      "CardAutoLockResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "AutoLockEnabled": {
            "type": "boolean"
          },
          "AutoLockActiveUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "CardBalanceAfterUnload": {
        "type": "object",
        "properties": {
          "AvailableBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PendingBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TotalBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CardBalanceV2": {
        "type": "object",
        "properties": {
          "Available": {
            "type": "string"
          },
          "Pending": {
            "type": "string"
          },
          "Frozen": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          }
        }
      },
      "CardBulkShipResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalCardId": {
            "type": "string",
            "nullable": true
          },
          "ShipmentExecuted": {
            "type": "boolean"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardPhysicalShipmentFeeV2"
            }
          },
          "FeeZone": {
            "type": "string",
            "nullable": true
          },
          "FeeBinId": {
            "type": "string",
            "nullable": true
          },
          "CustomerPaysForProduction": {
            "type": "boolean"
          },
          "CustomerPaysForShippment": {
            "type": "boolean"
          },
          "CustomerProductionAmount": {
            "type": "string",
            "nullable": true
          },
          "CustomerShippingAmount": {
            "type": "string",
            "nullable": true
          },
          "RequiredAmount": {
            "type": "string",
            "nullable": true
          },
          "AvailableAmount": {
            "type": "string",
            "nullable": true
          },
          "Shortfall": {
            "type": "string",
            "nullable": true
          },
          "CardUnloadAttempted": {
            "type": "boolean"
          },
          "CardUnloadSucceeded": {
            "type": "boolean"
          },
          "CardUnloadAmount": {
            "type": "string",
            "nullable": true
          },
          "TaskId": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CardCreateV2": {
        "required": [
          "UserId",
          "CardTypeId",
          "Phone"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CardTypeId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalCardId": {
            "type": "string",
            "description": "Optional external identifier. The card provider assigns its own identifier when this value is omitted.",
            "nullable": true
          },
          "Nickname": {
            "type": "string",
            "nullable": true
          },
          "Currency": {
            "type": "string",
            "nullable": true
          },
          "CardName": {
            "type": "string",
            "nullable": true
          },
          "BudgetId": {
            "type": "string",
            "description": "Required when the selected card type uses EqualsMoney; optional for Interlace card types.",
            "nullable": true
          },
          "BillingAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/Address"
              }
            ],
            "nullable": true
          },
          "DeliveryAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/Address"
              }
            ],
            "nullable": true
          },
          "DeliveryAddressId": {
            "type": "string",
            "nullable": true
          },
          "Phone": {
            "type": "string",
            "nullable": true
          },
          "PhoneCode": {
            "type": "string",
            "description": "Optional when Phone is supplied in E.164 format. Otherwise provide the country calling code.",
            "nullable": true
          },
          "DesignId": {
            "type": "string",
            "nullable": true
          },
          "PhysicalCardDesignId": {
            "type": "string",
            "nullable": true
          },
          "DiscountCode": {
            "type": "string",
            "nullable": true
          },
          "AutoLockEnabled": {
            "type": "boolean"
          }
        }
      },
      "CardDeleteResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          }
        }
      },
      "CardDetailsResponseV2": {
        "type": "object",
        "properties": {
          "CardNo": {
            "type": "string",
            "description": "Full card number (PAN) - only available for card details endpoint"
          },
          "CVV": {
            "type": "string",
            "description": "Card CVV/CVC security code"
          },
          "ExpYear": {
            "type": "string",
            "description": "Card expiration year (4 digits)"
          },
          "ExpMonth": {
            "type": "string",
            "description": "Card expiration month (2 digits)"
          },
          "CreatedAt": {
            "type": "string",
            "description": "Created at timestamp (shadows inherited string property with DateTime)",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "description": "Updated at timestamp (shadows inherited string property with DateTime)",
            "format": "date-time"
          },
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalCardId": {
            "type": "string",
            "nullable": true
          },
          "BudgetId": {
            "type": "string",
            "description": "Provider budget identifier associated with the card.",
            "nullable": true
          },
          "DeliveryAddressId": {
            "type": "string",
            "nullable": true
          },
          "Nickname": {
            "type": "string",
            "nullable": true
          },
          "CardType": {
            "type": "string"
          },
          "CardNumber": {
            "type": "string"
          },
          "ExpiryDate": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "$ref": "#/components/schemas/CardStatusV2"
          },
          "Balance": {
            "$ref": "#/components/schemas/CardBalanceV2"
          },
          "Currency": {
            "type": "string"
          },
          "VelocityControl": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/VelocityControlV2"
              }
            ],
            "nullable": true
          },
          "CardTypeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CardTypeTierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AutoLockEnabled": {
            "type": "boolean"
          },
          "AutoLockActiveUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TransakOrder": {
            "type": "string",
            "nullable": true
          },
          "RequiredAmount": {
            "type": "string",
            "nullable": true
          },
          "AvailableAmount": {
            "type": "string",
            "nullable": true
          },
          "Shortfall": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InterLaceCheck"
            },
            "nullable": true
          }
        }
      },
      "CardEnableResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "AutoLockActiveUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "CardFreezeResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          }
        }
      },
      "CardHolderResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AccountId": {
            "type": "string"
          },
          "CardHolderId": {
            "type": "string"
          },
          "BinRangeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "CardHolderStatus": {
            "type": "string"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CardListResponseV2": {
        "type": "object",
        "properties": {
          "Cards": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardResponseV2"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageTotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "CardPhysicalCardFeesResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AccountId": {
            "type": "string",
            "nullable": true
          },
          "BinId": {
            "type": "string",
            "nullable": true
          },
          "ExternalBinId": {
            "type": "string",
            "nullable": true
          },
          "Zone": {
            "type": "string",
            "nullable": true
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardPhysicalShipmentFeeV2"
            }
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CardPhysicalShipmentFeeV2": {
        "type": "object",
        "properties": {
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "FeeType": {
            "type": "string"
          },
          "FeeTypeLabel": {
            "type": "string"
          }
        }
      },
      "CardResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalCardId": {
            "type": "string",
            "nullable": true
          },
          "BudgetId": {
            "type": "string",
            "description": "Provider budget identifier associated with the card.",
            "nullable": true
          },
          "DeliveryAddressId": {
            "type": "string",
            "nullable": true
          },
          "Nickname": {
            "type": "string",
            "nullable": true
          },
          "CardType": {
            "type": "string"
          },
          "CardNumber": {
            "type": "string"
          },
          "ExpiryDate": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "$ref": "#/components/schemas/CardStatusV2"
          },
          "Balance": {
            "$ref": "#/components/schemas/CardBalanceV2"
          },
          "Currency": {
            "type": "string"
          },
          "VelocityControl": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/VelocityControlV2"
              }
            ],
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string"
          },
          "CardTypeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CardTypeTierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AutoLockEnabled": {
            "type": "boolean"
          },
          "AutoLockActiveUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TransakOrder": {
            "type": "string",
            "nullable": true
          },
          "RequiredAmount": {
            "type": "string",
            "nullable": true
          },
          "AvailableAmount": {
            "type": "string",
            "nullable": true
          },
          "Shortfall": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InterLaceCheck"
            },
            "nullable": true
          }
        }
      },
      "CardsInformationRequest": {
        "type": "object",
        "properties": {
          "BusinessDisplayName": {
            "type": "string",
            "nullable": true
          },
          "Purposes": {
            "type": "array",
            "items": {
              "enum": [
                "ADVERTISING_AND_MARKETING",
                "BILLS_AND_UTILITIES",
                "CLIENT_ENTERTAINMENT",
                "CUSTOMER_INCENTIVES",
                "EMPLOYEE_INCENTIVES",
                "FUEL_AND_MILEAGE_DOMESTIC",
                "FUEL_AND_MILEAGE_OVERSEAS",
                "LOCATION_EXPENSES_FILM_TV",
                "OFFICE_EQUIPMENT",
                "ONLINE_SUBSCRIPTIONS",
                "PAYMENT_TERMINAL_TESTING",
                "PAYROLL",
                "PER_DIEMS",
                "PETTY_CASH",
                "PROCUREMENT_PURCHASING",
                "PROCUREMENT_SOURCING",
                "TRAVEL_EXPENSES_DOMESTIC",
                "TRAVEL_EXPENSES_OVERSEAS"
              ],
              "type": "string"
            },
            "description": "Possible values: ADVERTISING_AND_MARKETING, BILLS_AND_UTILITIES, CLIENT_ENTERTAINMENT, CUSTOMER_INCENTIVES, EMPLOYEE_INCENTIVES, FUEL_AND_MILEAGE_DOMESTIC, FUEL_AND_MILEAGE_OVERSEAS, LOCATION_EXPENSES_FILM_TV, OFFICE_EQUIPMENT, ONLINE_SUBSCRIPTIONS, PAYMENT_TERMINAL_TESTING, PAYROLL, PER_DIEMS, PETTY_CASH, PROCUREMENT_PURCHASING, PROCUREMENT_SOURCING, TRAVEL_EXPENSES_DOMESTIC, TRAVEL_EXPENSES_OVERSEAS."
          },
          "EstimatedAnnualSpend": {
            "enum": [
              "0-10000",
              "10001-50000",
              "50001-100000",
              "100001-250000",
              "250001-1000000",
              "1000001-5000000",
              "5000000+"
            ],
            "type": "string",
            "description": "Possible values: 0-10000, 10001-50000, 50001-100000, 100001-250000, 250001-1000000, 1000001-5000000, 5000000+."
          },
          "NumberOfCardsRequired": {
            "enum": [
              "0-10",
              "11-50",
              "51-100",
              "101+"
            ],
            "type": "string",
            "description": "Possible values: 0-10, 11-50, 51-100, 101+."
          },
          "CardsAreForEmployees": {
            "type": "boolean",
            "nullable": true
          },
          "AtmWithdrawalsRequired": {
            "type": "boolean"
          }
        }
      },
      "CardStatusV2": {
        "enum": [
          "PENDING",
          "UNACTIVATED",
          "ACTIVE",
          "SUSPENDED",
          "BLOCKED",
          "FROZEN",
          "EXPIRED",
          "CANCELLED",
          "PAYMENT_REQUIRED",
          "FAILED",
          "SHIPMENTPENDING",
          "SHIPPED"
        ]
      },
      "CardTransactionsResponseV2": {
        "type": "object",
        "properties": {
          "Transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardTransactionV2"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageTotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CurrentPage": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "HasMorePages": {
            "type": "boolean"
          }
        }
      },
      "CardTransactionV2": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string"
          },
          "AccountId": {
            "type": "string"
          },
          "CardId": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Fee": {
            "format": "double"
          },
          "Type": {
            "type": "string"
          },
          "ClientTransactionId": {
            "type": "string",
            "nullable": true
          },
          "Remark": {
            "type": "string",
            "nullable": true
          },
          "Detail": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "type": "string"
          },
          "TransactionTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TransactionCurrency": {
            "type": "string",
            "nullable": true
          },
          "TransactionAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MerchantName": {
            "type": "string",
            "nullable": true
          },
          "Mcc": {
            "type": "string",
            "nullable": true
          },
          "MccCategory": {
            "type": "string",
            "nullable": true
          },
          "MerchantCity": {
            "type": "string",
            "nullable": true
          },
          "MerchantCountry": {
            "type": "string",
            "nullable": true
          },
          "MerchantState": {
            "type": "string",
            "nullable": true
          },
          "MerchantZipcode": {
            "type": "string",
            "nullable": true
          },
          "MerchantMid": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CardTypeInfo": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "Type": {
            "type": "string"
          },
          "Price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "IsVirtual": {
            "type": "boolean"
          },
          "IsPhysical": {
            "type": "boolean"
          },
          "IsActive": {
            "type": "boolean"
          },
          "MonthlyFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "YearlyFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "BankProviderType": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "CustomerPaysForProduction": {
            "type": "boolean"
          },
          "CustomerPaysForShippment": {
            "type": "boolean"
          }
        }
      },
      "CardTypeTierV2": {
        "type": "object",
        "properties": {
          "CardTypeSecondaryId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CardTypeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "BinRangeOverrideId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "EffectiveBinRangeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "FreeCardsIncluded": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FreeCardsPeriod": {
            "type": "string"
          },
          "MonthlySubscriptionFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "YearlySubscriptionFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxCards": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CardType": {
            "$ref": "#/components/schemas/CardTypeV2"
          }
        },
        "description": "Card type tier information with associated card type"
      },
      "CardTypeV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "Code": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "Features": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "MonthlyFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "IssuanceFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "CurrencyCode": {
            "type": "string"
          },
          "Limits": { },
          "Benefits": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "AvailableDesigns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "IssuanceTime": {
            "type": "string",
            "nullable": true
          },
          "IsEnabled": {
            "type": "boolean"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "RequiresKycLevel": {
            "type": "string",
            "nullable": true
          },
          "MonthlySubscriptionFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "YearlySubscriptionFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "SubscriptionFeatures": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "BaseFeatures": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "LoadOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "ReplacementFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AtmWithdrawalFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "IsVirtual": {
            "type": "boolean"
          },
          "IsPhysical": {
            "type": "boolean"
          },
          "CardNetwork": {
            "type": "string",
            "nullable": true
          },
          "Provider": {
            "type": "string"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "description": "Card type information"
      },
      "CardUnloadRequest": {
        "type": "object",
        "properties": {
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Currency": {
            "type": "string"
          },
          "Value": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        },
        "description": "Request model for card unload"
      },
      "CardUnloadResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalCardId": {
            "type": "string",
            "nullable": true
          },
          "RequestedAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ActualAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Fee": {
            "format": "double"
          },
          "NetAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "TransactionId": {
            "type": "string",
            "nullable": true
          },
          "ExternalTransactionId": {
            "type": "string",
            "nullable": true
          },
          "RequestedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ProcessedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Destination": {
            "$ref": "#/components/schemas/UnloadDestination"
          },
          "BalanceAfter": {
            "$ref": "#/components/schemas/CardBalanceAfterUnload"
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "Audit": {
            "$ref": "#/components/schemas/UnloadAudit"
          }
        }
      },
      "CardUpdateLimitsRequestV2": {
        "type": "object",
        "properties": {
          "Daily": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Weekly": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Monthly": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          }
        }
      },
      "CardUpdateLimitsResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "Daily": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Weekly": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Monthly": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          }
        }
      },
      "CardUpdatePinRequestV2": {
        "required": [
          "Pin"
        ],
        "type": "object",
        "properties": {
          "Pin": {
            "maxLength": 6,
            "minLength": 6,
            "pattern": "^[0-9]{6}$",
            "type": "string",
            "description": "**PIN Code Rules**\n\n1. **Length**\n   The PIN must be exactly 6 digits.\n\n2. **No repeated digits**\n   It must not contain any sequence of three identical digits.\n   Not allowed: `111`, `222`, `999`\n\n3. **No sequential digits**\n   No three consecutive increasing or decreasing digits.\n   Examples not allowed: `123`, `234`, `789`, `890`, `098`, `321`",
            "example": "246805"
          }
        }
      },
      "CardUpdatePinResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          }
        }
      },
      "CardWidgetResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean",
            "description": "Indicates if the client access token generation was successful"
          },
          "WidgetUrl": {
            "type": "string",
            "description": "The iframe URL for the Interlace widget (deprecated - not used in Widget.js integration)"
          },
          "WidgetToken": {
            "type": "string",
            "description": "Client access token for Widget.js integration"
          },
          "ExpiresIn": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Token expiration time in seconds (5 minutes for client access tokens)",
            "format": "int32"
          },
          "ErrorCode": {
            "type": "string",
            "description": "Error code if the operation failed",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "description": "Human-readable error message if the operation failed",
            "nullable": true
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Card ID for reference",
            "format": "int32"
          },
          "Config": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/WidgetConfig"
              }
            ],
            "nullable": true
          }
        },
        "description": "Response model for card widget integration using Interlace Widget.js"
      },
      "CheckPayoutRequest": {
        "required": [
          "PayeeId",
          "QuotationId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "PayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Local payee ID from the payee list endpoint.\n\nLocal payee ID from GET /api/v2/banking/payees.",
            "format": "int32"
          },
          "QuotationId": {
            "type": "string",
            "description": "Quotation Id returned by POST /api/v2/banking/quotations.\n\nQuotation Id returned by POST /api/v2/banking/quotations."
          },
          "Amount": {
            "type": "string",
            "description": "Payout amount as a decimal string."
          },
          "Currency": {
            "type": "string",
            "description": "Payout currency, usually the payee currency."
          },
          "BalanceId": {
            "type": "string",
            "description": "Optional provider balance or budget ID to fund the payout from.\n\nOptional provider balance or Equals Money budget ID used as funding source.",
            "nullable": true
          },
          "Memo": {
            "type": "string",
            "description": "Optional memo/reference for the payout.",
            "nullable": true
          },
          "Reason": {
            "type": "string",
            "description": "Optional payout reason.",
            "nullable": true
          }
        }
      },
      "CheckPayoutResponse": {
        "type": "object",
        "properties": {
          "CheckId": {
            "type": "string",
            "description": "Provider check ID. Pass this as CheckId to POST /api/v2/banking/payouts/initiate."
          },
          "Pass": {
            "type": "boolean"
          },
          "DetailMessage": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CompanyTierV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "TierLevel": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AccountType": {
            "type": "string"
          },
          "MonthlyFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "YearlyFee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Features": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "Limits": { },
          "IsDefault": {
            "type": "boolean"
          },
          "IsActive": {
            "type": "boolean"
          },
          "StripeAccountOwnerOverride": {
            "type": "string",
            "nullable": true
          },
          "IncludesEqualsCards": {
            "type": "boolean"
          },
          "IncludesEqualsIban": {
            "type": "boolean"
          },
          "EuPriceTableId": {
            "type": "string",
            "nullable": true
          },
          "UkPriceTableId": {
            "type": "string",
            "nullable": true
          },
          "UsPriceTableId": {
            "type": "string",
            "nullable": true
          },
          "UpPriceTableId": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Company tier information"
      },
      "ConfirmCryptoWithdrawalOtpRequest": {
        "required": [
          "VerificationToken",
          "OtpCode"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "WithdrawalRequestId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Deprecated legacy field. New requests use VerificationToken.",
            "format": "int32",
            "nullable": true
          },
          "VerificationToken": {
            "type": "string"
          },
          "OtpCode": {
            "maxLength": 8,
            "minLength": 8,
            "type": "string"
          }
        }
      },
      "ConfirmVoucherImportRequest": {
        "type": "object",
        "properties": {
          "Mode": {
            "pattern": "^(ALL_OR_NOTHING|VALID_ROWS_ONLY)$",
            "type": "string"
          }
        }
      },
      "CreateAssociatedPeopleRequest": {
        "type": "object",
        "properties": {
          "People": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EqualsMoneyCreateAssociatedPersonRequest"
            }
          }
        }
      },
      "CreateBoomFiBPayCardLoadRequest": {
        "required": [
          "CryptoCurrency",
          "CryptoAmount",
          "FiatCurrency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CardId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Target BPay card belonging to UserId.",
            "format": "int32"
          },
          "CryptoCurrency": {
            "enum": [
              "USDC",
              "USDT"
            ],
            "type": "string",
            "description": "Crypto asset deposited into the user's BoomFi virtual account.\n\nPossible values: USDC, USDT."
          },
          "CryptoAmount": {
            "type": "string",
            "description": "Positive decimal amount encoded as a string; do not send a JSON floating-point number."
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "enum": [
              1,
              -200,
              137,
              42161
            ],
            "description": "BoomFi chain IDs: Ethereum 1, Tron -200, Polygon 137, Arbitrum 42161.\n\nPossible values: 1, -200, 137, 42161.",
            "format": "int32"
          },
          "FiatCurrency": {
            "pattern": "^(USD|EUR|usd|eur)$",
            "enum": [
              "USD",
              "EUR"
            ],
            "type": "string",
            "description": "Settlement currency must be enabled in the company provider configuration.\n\nPossible values: USD, EUR."
          },
          "BoomFiAccountId": {
            "type": "string",
            "description": "Optional BoomFi virtual parent account ID override. Normally omit it so Hoppa resolves the user's linked BoomFi account.",
            "nullable": true
          },
          "BoomFiAccountReference": {
            "type": "string",
            "description": "Optional BoomFi account_reference override. Normally omit it so Hoppa resolves the user's linked BoomFi account.",
            "nullable": true
          }
        }
      },
      "CreateBoomFiEqualsMoneyDepositRequest": {
        "required": [
          "CryptoCurrency",
          "CryptoAmount",
          "FiatCurrency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CryptoCurrency": {
            "enum": [
              "USDC",
              "USDT"
            ],
            "type": "string",
            "description": "Crypto asset deposited into the user's BoomFi virtual account.\n\nPossible values: USDC, USDT."
          },
          "CryptoAmount": {
            "type": "string",
            "description": "Positive decimal amount encoded as a string; do not send a JSON floating-point number."
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "enum": [
              1,
              -200,
              137,
              42161
            ],
            "description": "BoomFi chain IDs: Ethereum 1, Tron -200, Polygon 137, Arbitrum 42161.\n\nPossible values: 1, -200, 137, 42161.",
            "format": "int32"
          },
          "FiatCurrency": {
            "pattern": "^(USD|EUR|GBP|usd|eur|gbp)$",
            "enum": [
              "USD",
              "EUR",
              "GBP"
            ],
            "type": "string",
            "description": "Settlement currency must be enabled in the company provider configuration.\n\nPossible values: USD, EUR, GBP."
          },
          "TargetBudgetId": {
            "type": "string",
            "description": "Optional EqualsMoney budget to credit. When omitted, the service selects the user's budget that supports FiatCurrency.",
            "nullable": true
          },
          "BoomFiAccountId": {
            "type": "string",
            "description": "Optional BoomFi virtual parent account ID override. Normally omit it so Hoppa resolves the user's linked BoomFi account.",
            "nullable": true
          },
          "BoomFiAccountReference": {
            "type": "string",
            "description": "Optional BoomFi account_reference override. Normally omit it so Hoppa resolves the user's linked BoomFi account.",
            "nullable": true
          }
        }
      },
      "CreateBusinessApplicationRequest": {
        "required": [
          "BusinessType",
          "CountryOfIncorporation",
          "RegisteredName",
          "BusinessOverview",
          "IndustryMain",
          "IndustrySub",
          "EmployeeCount",
          "IncorporationDate"
        ],
        "type": "object",
        "properties": {
          "Market": {
            "enum": [
              "UK",
              "EU"
            ],
            "type": "string",
            "description": "Possible values: UK, EU.",
            "nullable": true
          },
          "BusinessType": {
            "enum": [
              "PRIVATE_COMPANY",
              "SOLE_TRADER",
              "PUBLIC_COMPANY_LISTED",
              "PUBLIC_COMPANY_UNLISTED",
              "PARTNERSHIP",
              "CHARITY",
              "NON_PROFIT",
              "SOCIAL_ENTERPRISE",
              "PENSION",
              "FUND",
              "TRUST",
              "SEGREGATED_PORTFOLIO_COMPANY",
              "OTHER"
            ],
            "type": "string",
            "description": "Possible values: PRIVATE_COMPANY, SOLE_TRADER, PUBLIC_COMPANY_LISTED, PUBLIC_COMPANY_UNLISTED, PARTNERSHIP, CHARITY, NON_PROFIT, SOCIAL_ENTERPRISE, PENSION, FUND, TRUST, SEGREGATED_PORTFOLIO_COMPANY, OTHER."
          },
          "CountryOfIncorporation": {
            "enum": [
              "AD",
              "AE",
              "AF",
              "AG",
              "AI",
              "AL",
              "AM",
              "AO",
              "AQ",
              "AR",
              "AS",
              "AT",
              "AU",
              "AW",
              "AX",
              "AZ",
              "BA",
              "BB",
              "BD",
              "BE",
              "BF",
              "BG",
              "BH",
              "BI",
              "BJ",
              "BL",
              "BM",
              "BN",
              "BO",
              "BQ",
              "BR",
              "BS",
              "BT",
              "BV",
              "BW",
              "BY",
              "BZ",
              "CA",
              "CC",
              "CD",
              "CF",
              "CG",
              "CH",
              "CI",
              "CK",
              "CL",
              "CM",
              "CN",
              "CO",
              "CR",
              "CU",
              "CV",
              "CW",
              "CX",
              "CY",
              "CZ",
              "DE",
              "DJ",
              "DK",
              "DM",
              "DO",
              "DZ",
              "EC",
              "EE",
              "EG",
              "EH",
              "ER",
              "ES",
              "ET",
              "FI",
              "FJ",
              "FK",
              "FM",
              "FO",
              "FR",
              "GA",
              "GB",
              "GD",
              "GE",
              "GF",
              "GG",
              "GH",
              "GI",
              "GL",
              "GM",
              "GN",
              "GP",
              "GQ",
              "GR",
              "GS",
              "GT",
              "GU",
              "GW",
              "GY",
              "HK",
              "HM",
              "HN",
              "HR",
              "HT",
              "HU",
              "ID",
              "IE",
              "IL",
              "IM",
              "IN",
              "IO",
              "IQ",
              "IR",
              "IS",
              "IT",
              "JE",
              "JM",
              "JO",
              "JP",
              "KE",
              "KG",
              "KH",
              "KI",
              "KM",
              "KN",
              "KP",
              "KR",
              "KW",
              "KY",
              "KZ",
              "LA",
              "LB",
              "LC",
              "LI",
              "LK",
              "LR",
              "LS",
              "LT",
              "LU",
              "LV",
              "LY",
              "MA",
              "MC",
              "MD",
              "ME",
              "MF",
              "MG",
              "MH",
              "MK",
              "ML",
              "MM",
              "MN",
              "MO",
              "MP",
              "MQ",
              "MR",
              "MS",
              "MT",
              "MU",
              "MV",
              "MW",
              "MX",
              "MY",
              "MZ",
              "NA",
              "NC",
              "NE",
              "NF",
              "NG",
              "NI",
              "NL",
              "NO",
              "NP",
              "NR",
              "NU",
              "NZ",
              "OM",
              "PA",
              "PE",
              "PF",
              "PG",
              "PH",
              "PK",
              "PL",
              "PM",
              "PN",
              "PR",
              "PS",
              "PT",
              "PW",
              "PY",
              "QA",
              "RE",
              "RO",
              "RS",
              "RU",
              "RW",
              "SA",
              "SB",
              "SC",
              "SD",
              "SE",
              "SG",
              "SH",
              "SI",
              "SJ",
              "SK",
              "SL",
              "SM",
              "SN",
              "SO",
              "SR",
              "SS",
              "ST",
              "SV",
              "SX",
              "SY",
              "SZ",
              "TC",
              "TD",
              "TF",
              "TG",
              "TH",
              "TJ",
              "TK",
              "TL",
              "TM",
              "TN",
              "TO",
              "TR",
              "TT",
              "TV",
              "TW",
              "TZ",
              "UA",
              "UG",
              "UM",
              "US",
              "UY",
              "UZ",
              "VA",
              "VC",
              "VE",
              "VG",
              "VI",
              "VN",
              "VU",
              "WF",
              "WS",
              "XK",
              "YE",
              "YT",
              "ZA",
              "ZM",
              "ZW"
            ],
            "type": "string",
            "description": "Possible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
          },
          "RegionOfIncorporation": {
            "type": "string",
            "description": "Required when CountryOfIncorporation is US, FR, or DE.",
            "nullable": true
          },
          "RegisteredName": {
            "type": "string"
          },
          "RegistrationNumber": {
            "type": "string",
            "nullable": true
          },
          "TradingNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "BusinessOverview": {
            "type": "string"
          },
          "IndustryMain": {
            "enum": [
              "ACCOMMODATION_FOOD",
              "ADMIN_SUPPORT",
              "ADULT_SERVICES",
              "AGRICULTURE_FORESTRY_FISHING",
              "ARTS_ENTERTAINMENT",
              "CFD_SPREADBETTING",
              "CHARITIES",
              "CONSTRUCTION",
              "CRYPTO_ASSETS",
              "EDUCATION",
              "ENERGY_FOSSIL_FUELS",
              "EXTRATERRITORIAL_ORGS",
              "FINANCIAL_AND_INSURANCE_ACTIVITIES",
              "GOVERNMENT",
              "HEALTH_SOCIAL_WORK",
              "HOUSEHOLD_ACTIVITIES",
              "INFORMATION_AND_COMMUNICATION",
              "MANUFACTURING",
              "MARINE_VESSELS",
              "MINING_AND_QUARRYING",
              "MOTOR_VEHICLES",
              "OTHER_SERVICES_ACTIVITIES",
              "PHARMACEUTICALS",
              "PROFESSIONAL_TECHNICAL",
              "PUBLIC_ADMINISTRATION_AND_DEFENCE",
              "PUBLIC_ADMIN_DEFENCE",
              "REAL_ESTATE_ACTIVITIES",
              "TRADE_COMMERCE",
              "TRANSPORTATION_AND_STORAGE",
              "UTILITIES_SUPPLY",
              "WATER_WASTE_MANAGEMENT"
            ],
            "type": "string",
            "description": "Possible values: ACCOMMODATION_FOOD, ADMIN_SUPPORT, ADULT_SERVICES, AGRICULTURE_FORESTRY_FISHING, ARTS_ENTERTAINMENT, CFD_SPREADBETTING, CHARITIES, CONSTRUCTION, CRYPTO_ASSETS, EDUCATION, ENERGY_FOSSIL_FUELS, EXTRATERRITORIAL_ORGS, FINANCIAL_AND_INSURANCE_ACTIVITIES, GOVERNMENT, HEALTH_SOCIAL_WORK, HOUSEHOLD_ACTIVITIES, INFORMATION_AND_COMMUNICATION, MANUFACTURING, MARINE_VESSELS, MINING_AND_QUARRYING, MOTOR_VEHICLES, OTHER_SERVICES_ACTIVITIES, PHARMACEUTICALS, PROFESSIONAL_TECHNICAL, PUBLIC_ADMINISTRATION_AND_DEFENCE, PUBLIC_ADMIN_DEFENCE, REAL_ESTATE_ACTIVITIES, TRADE_COMMERCE, TRANSPORTATION_AND_STORAGE, UTILITIES_SUPPLY, WATER_WASTE_MANAGEMENT."
          },
          "IndustrySub": {
            "enum": [
              "ACCOMMODATION",
              "ACTIVITIES_OF_HOUSEHOLDS_AS_EMPLOYERS",
              "ACTIVITIES_OF_POLITICAL_ORGANISATIONS",
              "ACTIVITIES_OF_RELIGIOUS_ORGANISATIONS",
              "ADULT_CONTENT_CREATION_AND_MANAGEMENT",
              "ADULT_ONLINE_MEDIA_PLATFORMS",
              "ADVERTISING_AND_MARKET_RESEARCH",
              "AGENTS_AND_BROKERS_OF_MOTOR_VEHICLES",
              "AIR_TRANSPORT",
              "ALCOHOLIC_BEVERAGES",
              "ANIMAL_PRODUCTION_BREEDING",
              "ARCHITECTURAL_AND_ENGINEERING_ACTIVITIES",
              "ARTS_AND_ANTIQUITIES",
              "ATM_OPERATORS",
              "AUCTION_HOUSES_ONLINE_MARKETPLACES",
              "AUXILIARY_FINANCIAL_SERVICES",
              "BANKS",
              "BROADCASTING",
              "BUILDING_AND_LANDSCAPE_SERVICES",
              "BUILDING_COMPLETION",
              "BUILDING_REPAIR_OF_MARINE_VESSELS_WATERCRAFT",
              "BUSINESS_SUPPORT_SERVICES",
              "CALL_CENTRES",
              "CAR_WASH_TAXI_VALET_SERVICES",
              "CASINOS",
              "CBD",
              "CENTRAL_GOVERNMENT_OFFICE",
              "CHARITY",
              "CHARITY_UNREGULATED",
              "CHEMICALS_AND_RUBBER_PRODUCTS",
              "CIVIL_ENGINEERING",
              "CLEANING_SERVICES",
              "COAL_MINING",
              "COMMODITY_BROKERS",
              "COMMUNITY_INTEREST_COMPANY",
              "COMPULSORY_SOCIAL_SECURITY",
              "COMPUTER_PROGRAMMING",
              "CONCIERGE",
              "CONSTRUCTION_OTHER_SERVICES",
              "CONVERTIBLE_VIRTUAL_CURRENCY_AND_TOKENS_ON_PLATFORMS_AND_DIGITAL_SKINS",
              "CREATION_AND_SUPPLY_OF_DEFENSE_SOFTWARE",
              "CREATIVE_AND_PERFORMING_ARTS",
              "CREDIT_REPAIR_AND_COUNSELLING_COMPANIES",
              "CREDIT_SERVICES",
              "CROP_AND_PLANT_PRODUCTION",
              "CRUDE_PETROLEUM_AND_GAS",
              "CRYPTO_ATMS",
              "CRYPTO_CURRENCY_EXCHANGE_LIQUIDITY_PROVISION_TO_INSTITUTIONS",
              "CRYPTO_CURRENCY_EXCHANGE_OTC_INVESTMENT",
              "CRYPTO_CURRENCY_EXCHANGE_REMITTANCE_MONEY_SERVICE",
              "CRYPTO_RELATED_BLOCKCHAIN_TECHNOLOGY_AND_SOFTWARE",
              "CULTURAL_AND_OTHER_ACTIVITIES",
              "CYBERLOCKERS",
              "DATA_PROCESSING_AND_WEB_PORTALS",
              "DEALERS_IN_DIAMONDS",
              "DEALERS_IN_JEWELLERY_PRECIOUS_METALS_AND_STONES",
              "DEFENCE_ACTIVITIES",
              "DEFENSE_CONSULTANCY_AND_TRAINING",
              "DELIVERY_OF_ADMINISTRATIVE_DOCUMENTS",
              "DEVELOPMENT_AND_BUILDING",
              "DRIVING_INSTRUCTOR",
              "DRUGS_AND_NARCOTICS",
              "EARLY_CHILDHOOD_AND_PRIMARY_EDUCATION",
              "ECOMMERCE",
              "EDUCATIONAL_COURSES_BY_UNREGULATED_CFD_INVESTMENT_COMPANIES",
              "EDUCATIONAL_SUPPORT_SERVICES",
              "ELECTRICITY_SUPPLY",
              "EMPLOYMENT_ACTIVITIES",
              "EVENT_ORGANISATION",
              "EVENT_TICKETING",
              "EXTRATERRITORIAL_ACTIVITIES",
              "FARMING",
              "FINANCIAL_SERVICES",
              "FINANCING_OF_MARINE_VESSELS_WATERCRAFT",
              "FIRE_SERVICE_ACTIVITIES",
              "FIREWORKS_PYROTECHNICS",
              "FISHING_AQUACULTURE",
              "FOOD_AND_BEVERAGE_SERVICE",
              "FOOD_AND_DRINK",
              "FOREIGN_AFFAIRS",
              "FOREIGN_EMBASSIES_MISSIONS_OR_CONSULATES",
              "FORESTRY",
              "FOSSIL_FUELS_EXTRACTION_AND_REFINEMENT",
              "FREIGHT_SERVICES",
              "FUND_MANAGEMENT",
              "FUNERAL_AND_RELATED_ACTIVITIES",
              "FURNITURE_HOUSEHOLD_GOODS_AND_MISCELLANEOUS",
              "GAMBLING_BETTING",
              "GAMING",
              "GAS_FUEL_STATION",
              "GAS_SUPPLY",
              "GENERAL_PUBLIC_ADMINISTRATION",
              "GENTLEMANS_CLUBS_AND_LAPDANCING_BARS",
              "HAIRDRESSING_MASSAGE_OTHER_BEAUTY_TREATMENT",
              "HIRE_OR_CHARTER_OF_MARINE_VESSELS_WATERCRAFT",
              "HOLDING_COMPANIES",
              "HOSPITAL_ACTIVITIES",
              "INSURANCE_SERVICES",
              "INTERIOR_DESIGN",
              "INVESTMENT_SERVICES",
              "IT_AND_COMPUTER_SERVICES",
              "JUSTICE_AND_JUDICIAL_ACTIVITIES",
              "LAND_TRANSPORT",
              "LEGAL_AND_ACCOUNTING_ACTIVITIES",
              "LOCAL_GOVERNMENT",
              "LOOT_BOXES",
              "LUXURY_SHOPPERS",
              "LUXURY_YACHTS",
              "MACHINERY_AND_ELECTRONICS",
              "MAIL_ONLINE_TELEPHONE_ORDER_SALES",
              "MANAGEMENT_AND_CONSULTANCY",
              "MANUFACTURE_AND_SUPPLY_MILITARY_AND_POLICE_GRADE_ANTI_RIOT_EQUIPMENT",
              "MANUFACTURE_AND_SUPPLY_MILITARY_AND_POLICE_UNIFORM_AND_ASSOCIATED_EQUIPMENT",
              "MANUFACTURE_AND_SUPPLY_MILITARY_VEHICLES_AND_HEAVY_EQUIPMENT",
              "MANUFACTURE_OF_BLADES_OFFENSIVE_WEAPONS",
              "MANUFACTURE_SUPPLY_OF_PHARMACEUTICAL_PRODUCTS",
              "MATERIAL_RECOVERY",
              "MEDICAL_AND_DENTAL_PRACTICE_ACTIVITIES",
              "MEMBERSHIP_ORGANISATIONS",
              "METAL_MANUFACTURING",
              "METAL_ORES_MINING",
              "MILITARY_RESEARCH",
              "MILITARY_WATERCRAFT",
              "MINERAL_EXTRACTION_GEMSTONES_AND_PRECIOUS_METALS",
              "MONEY_SERVICE_BUSINESSES",
              "MOTION_PICTURE_PRODUCTION",
              "NIGHTCLUBS_PUBS_BARS",
              "NON_CRYPTO_BLOCKCHAIN_TECHNOLOGY",
              "NON_DOMESTIC_LOCAL_GOVERNMENT_INCLUDING_COUNCILS_PARISH_COUNCILS",
              "NON_PRECIOUS_METALS",
              "NON_REGULATED_CFDS",
              "NUCLEAR_MATERIAL_POWER",
              "OFFICE_ADMINISTRATIVE_SERVICES",
              "ONLINE_DATING_SERVICES",
              "ONLINE_EDUCATION",
              "OPERATIONAL_EXPENSES",
              "OPERATIONAL_EXPENSES_OF_MARINE_VESSELS_WATERCRAFT",
              "OTHER_ADULT_SERVICES_INCLUDING_MEMBERSHIP_ORGANISATIONS",
              "OTHER_HUMAN_HEALTH_ACTIVITIES",
              "OTHER_PROFESSIONAL_ACTIVITIES",
              "P2P_PLATFORMS",
              "PAWN_SHOPS_CASH_FOR_GOLD_BUSINESSES",
              "PAYDAY_LOAN_COMPANIES",
              "PAYMENT_AGENTS",
              "PENSION_FUNDING",
              "PHARMACEUTICAL_TESTING_DIAGNOSTICS",
              "PHOTOGRAPHY",
              "PHYSICAL_WELL_BEING_ACTIVITIES",
              "POST_SECONDARY_AND_HIGHER_EDUCATION",
              "POSTAL_AND_COURIER_ACTIVITIES_LICENSED",
              "POSTAL_AND_COURIER_ACTIVITIES_UNLICENSED",
              "PREPAID_CARDS",
              "PUBLIC_ADMINISTRATION",
              "PUBLIC_ORDER_AND_SAFETY",
              "PUBLISHING_ACTIVITIES",
              "PURCHASE_AND_SUPPLY_OF_ANTIQUE_WEAPONRY",
              "QUARRYING",
              "QUASI_NON_GOVERNMENTAL_ORGANISATION",
              "REAL_ESTATE_AGENCY_ACTIVITIES",
              "REAL_ESTATE_MANAGEMENT",
              "REAL_ESTATE_TRANSACTIONS",
              "REGULATED_CFDS",
              "REGULATED_PEER_TO_PEER_CROWDFUNDING",
              "REMEDIATION_AND_WASTE_MANAGEMENT",
              "REMOVAL_SERVICES",
              "RENTAL_AND_LEASING_ACTIVITIES",
              "RENTAL_AND_LEASING_ACTIVITIES_CARS",
              "RENTAL_LEASING_ACTIVITIES_NOT_INCLUDING_AUTOMOBILES_TRUCKS_PROPERTIES",
              "RENTING_AND_OPERATING_REAL_ESTATE",
              "REPAIR_OF_MOTOR_VEHICLES",
              "REPAIR_SERVICES",
              "RESEARCH_AND_DEVELOPMENT",
              "RESIDENTIAL_CARE_ACTIVITIES",
              "RETAIL_STORES",
              "RETAIL_TRADE_NOT_INCLUDING_CLOTHING_OR_ELECTRONICS",
              "RETAIL_TRADE_OF_CLOTHING_AND_SECOND_HAND_TEXTILES",
              "RETAIL_TRADE_OF_PORTABLE_ELECTRONICS",
              "SALE_CONSULTANCY_AND_BROKERAGE",
              "SALE_OF_MOTOR_VEHICLES",
              "SALE_OF_USED_MOTOR_VEHICLES",
              "SALE_OR_PURCHASE_OF_MARINE_VESSEL_WATERCRAFT",
              "SCRAP_METAL",
              "SECONDARY_EDUCATION",
              "SECURITY_AND_INVESTIGATION_ACTIVITIES",
              "SEO_SCO_DIGITAL_MARKETING_AND_AFFILIATE_MARKETING",
              "SEWERAGE",
              "SOCIAL_MEDIA",
              "SOCIAL_WORK_ACTIVITIES",
              "SOFT_DRINKS",
              "SOFTWARE_DESIGN_AND_MAINTENANCE",
              "SOUND_AND_MUSIC_PUBLISHING",
              "SPECIALISED_CONSTRUCTION",
              "SPECIALISED_DESIGN_ACTIVITIES",
              "SPORTS_RECREATION",
              "STEAM_AND_AIR_CONDITIONING_SUPPLY",
              "SUBSCRIPTION_WEBSITES",
              "SUPPLY_OF_BLADES_OFFENSIVE_WEAPONS_FIREARMS_DEFENCE_EQUIPMENT_AS_WELL_AS_AMMUNITION",
              "SUPPORT_ACTIVITIES",
              "SUPPORT_ACTIVITIES_FOR_OTHER_MINING_AND_QUARRYING",
              "SUPPORT_ACTIVITIES_FOR_TRANSPORTATION",
              "TAILOR",
              "TECHNICAL_TESTING_AND_ANALYSIS",
              "TELECOMMUNICATIONS",
              "TEXTILES",
              "TOBACCO_VAPES",
              "TRADE_OF_LIVESTOCK",
              "TRANSLATION_AND_INTERPRETATION",
              "TRANSPORT_EQUIPMENT",
              "TRAVEL_AND_RESERVATION_SERVICES",
              "TRUST_AND_COMPANY_SERVICE_PROVIDERS",
              "UNDIFFERENTIATED_GOODS_PRODUCTION",
              "UNREGISTERED_CHARITIES",
              "UNREGULATED_FINANCIAL_FIRMS_INVESTMENT_MORTGAGE_CONSULTING",
              "VETERINARY_ACTIVITIES",
              "VIRTUAL_ASSETS_AND_DIGITAL_GOODS",
              "WAREHOUSING_PACKAGING_AND_STORAGE",
              "WASHING_CLEANING_OF_TEXTILE_AND_FUR_PRODUCTS",
              "WASTE_COLLECTION",
              "WASTE_TREATMENT_AND_DISPOSAL",
              "WATER_SUPPLY",
              "WATER_TRANSPORT",
              "WEALTH_MANAGEMENT",
              "WEBSITE_DESIGN_AND_CONSULTANCY",
              "WHOLESALE_TRADE_ALCOHOL_WINE_BEER_SPIRITS_ALCOHOLIC_BEVERAGES",
              "WHOLESALE_TRADE_CHEMICAL_PRODUCTS",
              "WHOLESALE_TRADE_CHOCOLATE_CONFECTIONARY",
              "WHOLESALE_TRADE_CONSTRUCTION_MATERIALS_WOOD_SUPPLIES",
              "WHOLESALE_TRADE_ELECTRONICS_PARTS_TELECOMMUNICATION_COMPUTER_SOFTWARE",
              "WHOLESALE_TRADE_FRUIT_VEGETABLES_GRAINS_ANIMAL_FEED_LIVESTOCK",
              "WHOLESALE_TRADE_MEAT_FISH_DAIRY_EGGS_OILS",
              "WHOLESALE_TRADE_NON_SPECIALISED_FOODS_BEVERAGES",
              "WHOLESALE_TRADE_PHARMACEUTICALS",
              "WHOLESALE_TRADE_SUGAR_SPICES",
              "WHOLESALE_TRADE_TEXTILES_FOOTWEAR_FURNITURE",
              "WHOLESALE_TRADE_TOBACCO",
              "WOOD"
            ],
            "type": "string",
            "description": "Allowed values depend on IndustryMain."
          },
          "EmployeeCount": {
            "enum": [
              "ONE_TO_TEN",
              "ELEVEN_TO_FIFTY",
              "FIFTY_ONE_TO_TWO_HUNDRED",
              "TWO_HUNDRED_AND_ONE_TO_FIVE_HUNDRED",
              "FIVE_HUNDRED_AND_ONE_TO_ONE_THOUSAND",
              "ONE_THOUSAND_AND_ONE_TO_FIVE_THOUSAND",
              "FIVE_THOUSAND_AND_ONE_TO_TEN_THOUSAND",
              "TEN_THOUSAND_PLUS"
            ],
            "type": "string",
            "description": "Possible values: ONE_TO_TEN, ELEVEN_TO_FIFTY, FIFTY_ONE_TO_TWO_HUNDRED, TWO_HUNDRED_AND_ONE_TO_FIVE_HUNDRED, FIVE_HUNDRED_AND_ONE_TO_ONE_THOUSAND, ONE_THOUSAND_AND_ONE_TO_FIVE_THOUSAND, FIVE_THOUSAND_AND_ONE_TO_TEN_THOUSAND, TEN_THOUSAND_PLUS."
          },
          "IncorporationDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD."
          },
          "PhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "TaxId": {
            "type": "string",
            "nullable": true
          },
          "Website": {
            "type": "string",
            "nullable": true
          },
          "BusinessPromotionDescription": {
            "type": "string",
            "nullable": true
          },
          "RequestedFeatures": {
            "type": "array",
            "items": {
              "enum": [
                "CARDS",
                "PAYMENTS"
              ],
              "type": "string"
            },
            "description": "Possible values: CARDS, PAYMENTS.",
            "nullable": true
          },
          "CardsInformation": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/CardsInformationRequest"
              }
            ],
            "nullable": true
          },
          "PaymentsInformation": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PaymentsInformationRequest"
              }
            ],
            "nullable": true
          },
          "Addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AddressRequest"
            },
            "nullable": true
          },
          "AssociatedPeople": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssociatedPersonLinkRequest"
            },
            "nullable": true
          }
        }
      },
      "CreateCryptoDepositAddressResponse": {
        "type": "object",
        "properties": {
          "DepositWallet": { },
          "OtcRequest": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiOtcTradeRequestResponse"
              }
            ],
            "nullable": true
          }
        }
      },
      "CreateCryptoRefundRequest": {
        "required": [
          "TransferId",
          "Address"
        ],
        "type": "object",
        "properties": {
          "TransferId": {
            "type": "string"
          },
          "Address": {
            "type": "string"
          }
        },
        "description": "Request model for creating a crypto refund"
      },
      "CreateCryptoRefundResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "RefundId": {
            "type": "string",
            "nullable": true
          },
          "TransferId": {
            "type": "string"
          },
          "AccountId": {
            "type": "string"
          },
          "Destination": {
            "$ref": "#/components/schemas/TransferEndpointInfo"
          },
          "Amount": {
            "$ref": "#/components/schemas/AmountInfo"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeInfo"
            }
          },
          "Status": {
            "type": "string"
          },
          "ReferenceId": {
            "type": "string",
            "nullable": true
          },
          "CreateTime": {
            "type": "string",
            "format": "date-time"
          },
          "CompleteTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Message": {
            "type": "string"
          }
        },
        "description": "Response model for creating a crypto refund"
      },
      "CreateDiscountCodeRequest": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "DiscountType": {
            "type": "string"
          },
          "BuyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MonthlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "YearlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "BuyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MonthlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "YearlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "CardDiscountDurationMonths": {
            "maximum": 1200,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierDiscountDurationMonths": {
            "maximum": 1200,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierMonthlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TierYearlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TierMonthlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "TierYearlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxUsesTotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaxUsesPerUser": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidTill": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ApplicableUserIds": {
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            },
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          }
        }
      },
      "CreateInterlaceAccountResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "InterlaceAccountId": {
            "type": "string",
            "nullable": true
          },
          "ExternalUserId": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "AccountAlreadyExists": {
            "type": "boolean"
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CreateLoyaltyProgramRequest": {
        "required": [
          "Name",
          "PointValueRate"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 255,
            "type": "string"
          },
          "Description": {
            "maxLength": 1000,
            "type": "string",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "PointValueRate": {
            "maximum": 999.9999,
            "minimum": 0.0001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PointValueCurrency": {
            "maxLength": 3,
            "type": "string"
          }
        }
      },
      "CreateLoyaltyRuleRequest": {
        "required": [
          "RuleName",
          "RuleType",
          "PointsPerUnit"
        ],
        "type": "object",
        "properties": {
          "RuleName": {
            "maxLength": 255,
            "type": "string"
          },
          "RuleType": {
            "maxLength": 50,
            "type": "string"
          },
          "PointsPerUnit": {
            "maximum": 999.9999,
            "minimum": 0.0001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MinTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MerchantCategory": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "UserTier": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "Priority": {
            "maximum": 100,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Multiplier": {
            "maximum": 10,
            "minimum": 0.1,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "CreateMerchantIdRequest": {
        "required": [
          "IdentifierType",
          "IdentifierValue"
        ],
        "type": "object",
        "properties": {
          "IdentifierType": {
            "maxLength": 50,
            "type": "string"
          },
          "IdentifierValue": {
            "maxLength": 255,
            "type": "string"
          },
          "Priority": {
            "maximum": 100,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          }
        }
      },
      "CreateMerchantLoyaltyRuleRequest": {
        "required": [
          "RuleName",
          "PointsPerUnit"
        ],
        "type": "object",
        "properties": {
          "RuleName": {
            "maxLength": 255,
            "type": "string"
          },
          "PointsPerUnit": {
            "maximum": 999.9999,
            "minimum": 0.0001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Multiplier": {
            "maximum": 10,
            "minimum": 0.1,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MinTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "CreateMerchantRequest": {
        "required": [
          "Name"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 255,
            "type": "string"
          },
          "Description": {
            "maxLength": 1000,
            "type": "string",
            "nullable": true
          },
          "Category": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "IsPartner": {
            "type": "boolean"
          },
          "ContactEmail": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "ContactPhone": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "Address": {
            "maxLength": 500,
            "type": "string",
            "nullable": true
          },
          "Website": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          }
        }
      },
      "CreatePayeeRequest": {
        "required": [
          "PaymentType",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "type": "string",
            "description": "Recipient display name. For INDIVIDUAL this is split into FirstName/LastName when those fields are omitted.\n\nRecipient display name. Matches required-fields fieldName \"name\".",
            "nullable": true
          },
          "PaymentType": {
            "enum": [
              "COMPANY",
              "INDIVIDUAL"
            ],
            "type": "string",
            "description": "Allowed values: COMPANY, INDIVIDUAL."
          },
          "Currency": {
            "type": "string"
          },
          "AccountNumber": {
            "type": "string",
            "nullable": true
          },
          "Iban": {
            "type": "string",
            "description": "IBAN alias for AccountNumber. If AccountNumber is omitted, Iban is used as the account identifier.\n\nAlias for AccountNumber. If AccountNumber is omitted, Iban is used as the account identifier.",
            "nullable": true
          },
          "Bic": {
            "type": "string",
            "description": "BIC/SWIFT alias used when required-fields returns bic.\n\nBIC/SWIFT alias. Matches required-fields fieldName \"bic\".",
            "nullable": true
          },
          "BankCode": {
            "type": "string",
            "description": "Bank code alias used when required-fields returns bankCode.\n\nBank code alias. Matches required-fields fieldName \"bankCode\".",
            "nullable": true
          },
          "BankName": {
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "RoutingCodeList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingCodeDto"
            },
            "nullable": true
          },
          "routingCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingCodeDto"
            },
            "description": "Dashboard/public API alias for RoutingCodeList.",
            "nullable": true
          },
          "BankAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayeeAddressDto"
              }
            ],
            "nullable": true
          },
          "PayeeAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayeeAddressDto"
              }
            ],
            "nullable": true
          },
          "Comments": {
            "type": "string",
            "nullable": true
          },
          "PaymentMethod": {
            "enum": [
              "SWIFT",
              "SEPA.INSTANT",
              "SEPA.CREDITTRANSFER",
              "CHAPS",
              "UKFPS",
              "ACH",
              "WIRETRANSFER",
              "OFF_PLATFORM"
            ],
            "type": "string",
            "description": "Supported values: SWIFT, SEPA.INSTANT, SEPA.CREDITTRANSFER, CHAPS, UKFPS, ACH, WIRETRANSFER, OFF_PLATFORM.\n\nAllowed values: SWIFT, SEPA.INSTANT, SEPA.CREDITTRANSFER, CHAPS, UKFPS, ACH, WIRETRANSFER, OFF_PLATFORM.",
            "nullable": true
          },
          "VerificationMethod": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CreatePaymentRequestV2": {
        "required": [
          "UserId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "MerchantReferenceId": {
            "type": "string",
            "nullable": true
          },
          "MandateId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "CreatePayoutRequest": {
        "required": [
          "CheckId",
          "PayeeId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "VerificationToken": {
            "type": "string",
            "description": "Token returned by POST /api/v2/banking/payouts/initiate after it has been verified through the OTP endpoint. Required for POST /api/v2/banking/payouts.\n\nToken returned by POST /api/v2/banking/payouts/initiate after it has been verified through the OTP endpoint. Required for final payout creation.",
            "nullable": true
          },
          "CheckId": {
            "type": "string",
            "description": "CheckId from POST /api/v2/banking/payouts/check. If the quote is refreshed on the OTP screen, send the latest quote/order ID here.\n\nCheckId returned by POST /api/v2/banking/payouts/check. When refreshing quotes during OTP, send the latest quote/order ID here."
          },
          "QuoteRequestId": {
            "type": "string",
            "description": "QuoteRequestId returned by POST /api/v2/banking/quotations.\n\nQuoteRequestId returned by POST /api/v2/banking/quotations.",
            "nullable": true
          },
          "PayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Local payee ID from the payee list endpoint.\n\nLocal payee ID from GET /api/v2/banking/payees.",
            "format": "int32"
          },
          "Amount": {
            "type": "string",
            "description": "Payout amount as a decimal string."
          },
          "Currency": {
            "type": "string",
            "description": "Payout currency, usually the payee currency."
          },
          "FromCurrency": {
            "maxLength": 3,
            "minLength": 3,
            "type": "string",
            "description": "Currency to fund the payout from. When omitted, the payout currency is used.\nThis must reflect the currency selected by the caller, because an Equals Money\nbudget can hold multiple currencies under the same budget ID.",
            "nullable": true
          },
          "BalanceId": {
            "type": "string",
            "description": "Optional provider balance or budget ID to fund the payout from.\n\nOptional provider balance or Equals Money budget ID used as funding source.",
            "nullable": true
          }
        }
      },
      "CreatePayoutResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalId": {
            "type": "string"
          },
          "ClientTransactionId": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "FromAmount": {
            "type": "string"
          },
          "FromCurrency": {
            "type": "string"
          },
          "ToAmount": {
            "type": "string"
          },
          "ToCurrency": {
            "type": "string"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PayoutFeeDto"
            },
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CreateReferralAttributionRequest": {
        "required": [
          "ReferralCode",
          "Source"
        ],
        "type": "object",
        "properties": {
          "ReferralCode": {
            "maxLength": 32,
            "type": "string"
          },
          "Source": {
            "maxLength": 24,
            "type": "string"
          }
        }
      },
      "CreateTransactionImportConfigRequest": {
        "required": [
          "ConfigName",
          "ImportMethod",
          "FieldMappings"
        ],
        "type": "object",
        "properties": {
          "ConfigName": {
            "maxLength": 255,
            "type": "string"
          },
          "ImportMethod": {
            "maxLength": 50,
            "type": "string"
          },
          "FieldMappings": { },
          "IsActive": {
            "type": "boolean"
          }
        }
      },
      "CreateVoucherApiKeyRequest": {
        "required": [
          "Name"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "type": "string"
          },
          "Scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "AllowedIps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "CreateVoucherApiKeyResponse": {
        "required": [
          "Id",
          "Name",
          "Key",
          "Scopes",
          "ExpiresAt"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Name": {
            "type": "string"
          },
          "Key": {
            "type": "string"
          },
          "Scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Replayed": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "CreateVoucherBatchRequest": {
        "required": [
          "Name"
        ],
        "type": "object",
        "properties": {
          "Count": {
            "maximum": 10000,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SharedCode": {
            "type": "boolean"
          },
          "Name": {
            "maxLength": 160,
            "type": "string"
          },
          "Description": {
            "maxLength": 2000,
            "type": "string",
            "nullable": true
          },
          "GroupPublicId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "TargetUserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "CustomCode": {
            "type": "string",
            "nullable": true
          },
          "Prefix": {
            "maxLength": 20,
            "type": "string",
            "nullable": true
          },
          "Type": {
            "type": "string",
            "nullable": true
          },
          "Value": {
            "maximum": 79228162514264337593543950335,
            "minimum": 0.0000000001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Currency": {
            "type": "string",
            "nullable": true
          },
          "PerUserLimit": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaximumTotalUses": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaximumAggregateValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "RequiresWhitelabelApproval": {
            "type": "boolean"
          },
          "RequiresEmail2Fa": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "InitialStatus": {
            "type": "string"
          },
          "ExternalReference": {
            "type": "string",
            "nullable": true
          },
          "AcceptUnboundedLiability": {
            "type": "boolean"
          }
        }
      },
      "CreateVoucherGroupRequest": {
        "required": [
          "Name"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 160,
            "type": "string"
          },
          "Description": {
            "maxLength": 2000,
            "type": "string",
            "nullable": true
          },
          "DefaultType": {
            "type": "string"
          },
          "DefaultValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "DefaultCurrency": {
            "type": "string",
            "nullable": true
          },
          "DefaultPerUserLimit": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DefaultTotalUseLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "DefaultAggregateCap": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "DefaultRequiresApproval": {
            "type": "boolean"
          },
          "DefaultRequiresEmail2Fa": {
            "type": "boolean"
          },
          "DefaultValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "DefaultValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CampaignReference": {
            "type": "string",
            "nullable": true
          },
          "CostCentre": {
            "type": "string",
            "nullable": true
          },
          "Tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CreateVoucherRequest": {
        "required": [
          "Name"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 160,
            "type": "string"
          },
          "Description": {
            "maxLength": 2000,
            "type": "string",
            "nullable": true
          },
          "GroupPublicId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "TargetUserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "CustomCode": {
            "type": "string",
            "nullable": true
          },
          "Prefix": {
            "maxLength": 20,
            "type": "string",
            "nullable": true
          },
          "Type": {
            "type": "string",
            "nullable": true
          },
          "Value": {
            "maximum": 79228162514264337593543950335,
            "minimum": 0.0000000001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Currency": {
            "type": "string",
            "nullable": true
          },
          "PerUserLimit": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaximumTotalUses": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaximumAggregateValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "RequiresWhitelabelApproval": {
            "type": "boolean"
          },
          "RequiresEmail2Fa": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "InitialStatus": {
            "type": "string"
          },
          "ExternalReference": {
            "type": "string",
            "nullable": true
          },
          "AcceptUnboundedLiability": {
            "type": "boolean"
          }
        }
      },
      "CreateVoucherRuleRequest": {
        "required": [
          "Name",
          "TriggerType",
          "CampaignMode"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "type": "string"
          },
          "TriggerType": {
            "type": "string"
          },
          "CampaignMode": {
            "type": "string"
          },
          "VoucherGroupId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "SharedVoucherId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "ThresholdAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "ThresholdCurrency": {
            "type": "string",
            "nullable": true
          },
          "MaximumAssignments": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaximumAssignedValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Criteria": { },
          "VoucherTemplate": { }
        }
      },
      "CrossCurveLP": {
        "type": "object",
        "properties": {
          "chainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "address": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "decimals": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "permit": {
            "type": "boolean"
          }
        }
      },
      "CrossCurveOperationFee": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "token": {
            "$ref": "#/components/schemas/CrossCurveToken"
          },
          "percent": {
            "type": "string"
          },
          "amount": {
            "type": "string"
          }
        }
      },
      "CrossCurvePoolConfig": {
        "type": "object",
        "properties": {
          "lp": {
            "$ref": "#/components/schemas/CrossCurveLP"
          },
          "decimals": {
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          "coins": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "address": {
            "type": "string"
          },
          "underlyingCoins": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "type": "string"
          }
        }
      },
      "CrossCurveRoute": {
        "type": "object",
        "properties": {
          "query": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/CrossCurveRouteRequest"
              }
            ],
            "nullable": true
          },
          "route": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrossCurveRouteStep"
            }
          },
          "amountIn": {
            "type": "string"
          },
          "amountInWithoutSlippage": {
            "type": "string"
          },
          "amountOut": {
            "type": "string"
          },
          "amountOutWithoutSlippage": {
            "type": "string"
          },
          "tokenInPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "tokenOutPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "priceImpact": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "totalFee": {
            "$ref": "#/components/schemas/CrossCurveTotalFee"
          },
          "signature": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CrossCurveRouteParams": {
        "type": "object",
        "properties": {
          "chainIdIn": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "chainIdOut": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "tokenIn": {
            "type": "string"
          },
          "tokenOut": {
            "type": "string"
          },
          "amountIn": {
            "type": "string"
          }
        }
      },
      "CrossCurveRouteRequest": {
        "type": "object",
        "properties": {
          "params": {
            "$ref": "#/components/schemas/CrossCurveRouteParams"
          },
          "slippage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "from": {
            "type": "string"
          },
          "recipient": {
            "type": "string"
          }
        }
      },
      "CrossCurveRouteStep": {
        "type": "object",
        "properties": {
          "pool": {
            "$ref": "#/components/schemas/CrossCurvePoolConfig"
          },
          "fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CrossCurveOperationFee"
            }
          },
          "priceImpact": {
            "type": "string",
            "nullable": true
          },
          "params": {
            "$ref": "#/components/schemas/CrossCurveStepParams"
          },
          "type": {
            "type": "string"
          },
          "chainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "CrossCurveStepParams": {
        "type": "object",
        "properties": {
          "tokenIn": {
            "$ref": "#/components/schemas/CrossCurveToken"
          },
          "chainIdIn": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "tokenOut": {
            "$ref": "#/components/schemas/CrossCurveToken"
          },
          "chainIdOut": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "amountIn": {
            "type": "string"
          },
          "amountInWithoutSlippage": {
            "type": "string"
          },
          "amountOut": {
            "type": "string"
          },
          "amountOutWithoutSlippage": {
            "type": "string"
          },
          "slippage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "CrossCurveToken": {
        "type": "object",
        "properties": {
          "chainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "address": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "decimals": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "chainName": {
            "type": "string",
            "nullable": true
          },
          "originalName": {
            "type": "string",
            "nullable": true
          },
          "originalSymbol": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "synthTags": {
            "type": "object"
          },
          "permit": {
            "type": "boolean"
          }
        }
      },
      "CrossCurveTotalFee": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "amount": {
            "type": "string"
          },
          "percent": {
            "type": "string"
          }
        }
      },
      "CrossCurveTxResponse": {
        "type": "object",
        "properties": {
          "to": {
            "type": "string"
          },
          "data": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "abi": {
            "type": "string",
            "nullable": true
          },
          "args": {
            "type": "array",
            "nullable": true
          }
        }
      },
      "CryptoAddress": {
        "type": "object",
        "properties": {
          "Address": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Chain": {
            "type": "string"
          },
          "Tag": {
            "type": "string"
          },
          "Network": {
            "type": "string"
          },
          "IsActive": {
            "type": "boolean"
          },
          "CreatedAt": {
            "type": "string"
          }
        }
      },
      "CryptoConnectWalletAddressV3": {
        "type": "object",
        "properties": {
          "currency": {
            "type": "string"
          },
          "chain": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "selected": {
            "type": "boolean"
          }
        }
      },
      "CryptoConnectWalletBalanceV3": {
        "type": "object",
        "properties": {
          "available": {
            "type": "string"
          },
          "frozen": {
            "type": "string",
            "nullable": true
          },
          "currency": {
            "type": "string"
          }
        }
      },
      "CryptoConnectWalletsV3Data": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string"
          },
          "list": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoConnectWalletV3"
            }
          }
        }
      },
      "CryptoConnectWalletsV3Response": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/CryptoConnectWalletsV3Data"
              }
            ],
            "nullable": true
          }
        }
      },
      "CryptoConnectWalletV3": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "accountId": {
            "type": "string"
          },
          "nickname": {
            "type": "string"
          },
          "master": {
            "type": "boolean"
          },
          "referenceId": {
            "type": "string"
          },
          "balances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoConnectWalletBalanceV3"
            }
          },
          "addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoConnectWalletAddressV3"
            }
          }
        }
      },
      "CryptoRefundItem": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string"
          },
          "TransferId": {
            "type": "string"
          },
          "AccountId": {
            "type": "string"
          },
          "Destination": {
            "$ref": "#/components/schemas/TransferEndpointInfo"
          },
          "Amount": {
            "$ref": "#/components/schemas/AmountInfo"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeInfo"
            }
          },
          "Status": {
            "type": "string"
          },
          "TransactionHash": {
            "type": "string",
            "nullable": true
          },
          "ReferenceId": {
            "type": "string",
            "nullable": true
          },
          "CreateTime": {
            "type": "string",
            "format": "date-time"
          },
          "CompleteTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "description": "Individual crypto refund item"
      },
      "CryptoRefundsListResponse": {
        "type": "object",
        "properties": {
          "Refunds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoRefundItem"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Limit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        },
        "description": "Response model for listing crypto refunds"
      },
      "CryptoToQuantumTransferBodyRequestV2": {
        "required": [
          "SourceCurrency",
          "Amount"
        ],
        "type": "object",
        "properties": {
          "SourceCurrency": {
            "type": "string"
          },
          "DestinationCurrency": {
            "type": "string",
            "description": "Destination currency is always USD for quantum transfers"
          },
          "Amount": {
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        },
        "description": "Body request model for crypto-to-quantum transfer."
      },
      "CryptoToQuantumTransferResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "TransferId": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Details": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TransferDetails"
              }
            ],
            "nullable": true
          }
        }
      },
      "CryptoTransferItem": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string"
          },
          "AccountId": {
            "type": "string"
          },
          "ReferenceId": {
            "type": "string",
            "nullable": true
          },
          "Source": {
            "$ref": "#/components/schemas/TransferEndpointInfo"
          },
          "Destination": {
            "$ref": "#/components/schemas/TransferEndpointInfo"
          },
          "Amount": {
            "$ref": "#/components/schemas/AmountInfo"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeInfo"
            }
          },
          "Status": {
            "type": "string"
          },
          "CreateTime": {
            "type": "string",
            "format": "date-time"
          },
          "CompleteTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "description": "Individual crypto transfer item"
      },
      "CryptoTransfersListResponse": {
        "type": "object",
        "properties": {
          "Transfers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoTransferItem"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Limit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        },
        "description": "Response model for listing crypto connect transfers"
      },
      "CryptoVirtualAccountChainRequest": {
        "required": [
          "Currencies"
        ],
        "type": "object",
        "properties": {
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Currencies": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CryptoVirtualAccountProviderResult": {
        "type": "object",
        "properties": {
          "Provider": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Reference": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "VerificationUrl": {
            "type": "string",
            "nullable": true
          },
          "Account": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BoomFiVirtualAccountData"
              }
            ],
            "nullable": true
          },
          "Wallets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoVirtualAccountWalletResult"
            }
          }
        }
      },
      "CryptoVirtualAccountWalletResult": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "WalletAddress": {
            "type": "string"
          },
          "CryptoAsset": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "ExternalWalletId": {
            "type": "string",
            "nullable": true
          },
          "WalletType": {
            "type": "string"
          }
        }
      },
      "CryptoWithdrawalOtpErrorResponse": {
        "type": "object",
        "properties": {
          "RemainingAttempts": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsExpired": {
            "type": "boolean"
          },
          "IsLocked": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "Code": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ValidationErrors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "nullable": true
          },
          "Details": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CryptoWithdrawalOtpResendResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "DailyAssignmentStatsResponse": {
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date-time"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsAssigned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ReversalCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsReversed": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "DailyVolume": {
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date-time"
          },
          "Volume": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        },
        "description": "Daily volume statistics"
      },
      "DashboardQuotationRequest": {
        "required": [
          "PayeeId",
          "FromCurrency",
          "Amount"
        ],
        "type": "object",
        "properties": {
          "PayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Local payee ID from the payee list endpoint.\n\nLocal payee ID from GET /api/v2/banking/payees.",
            "format": "int32"
          },
          "FromCurrency": {
            "type": "string",
            "description": "Source currency to fund the payout from, for example GBP, EUR, or USD.\n\nSource currency to fund the payout from, for example GBP, EUR, or USD."
          },
          "Amount": {
            "maximum": 79228162514264337593543950335,
            "minimum": 0.00000001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Payout amount.",
            "format": "double"
          },
          "FeeMethod": {
            "type": "string",
            "description": "Fee handling method. The dashboard flow sends INCLUDED.\n\nFee handling method. The accounts page uses INCLUDED."
          },
          "BalanceId": {
            "type": "string",
            "description": "Optional provider balance or budget ID to fund the payout from.\n\nOptional provider balance or Equals Money budget ID used as funding source.",
            "nullable": true
          }
        }
      },
      "DecideVoucherRedemptionRequest": {
        "required": [
          "Reason"
        ],
        "type": "object",
        "properties": {
          "Approve": {
            "type": "boolean"
          },
          "Reason": {
            "maxLength": 500,
            "type": "string"
          },
          "Notes": {
            "maxLength": 2000,
            "type": "string",
            "nullable": true
          }
        }
      },
      "DetailedKycStatusResponseV2": {
        "type": "object",
        "properties": {
          "HoppaCardKycApproved": {
            "type": "boolean"
          },
          "BankKycApproved": {
            "type": "boolean"
          },
          "CardIssuerKycApproved": {
            "type": "boolean"
          },
          "Interlace": {
            "$ref": "#/components/schemas/ProviderKycStatusV2"
          },
          "EqualsMoney": {
            "$ref": "#/components/schemas/EqualsMoneyKycStatusV2"
          }
        },
        "description": "Detailed KYC status response with breakdown by provider"
      },
      "DiscountCodeListResponse": {
        "type": "object",
        "properties": {
          "Codes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscountCodeResponse"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "DiscountCodeResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Code": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DiscountType": {
            "type": "string"
          },
          "BuyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MonthlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "YearlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "BuyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MonthlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "YearlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "CardDiscountDurationMonths": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierDiscountDurationMonths": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierMonthlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TierYearlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TierMonthlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "TierYearlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxUsesTotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaxUsesPerUser": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "CurrentUses": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidTill": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ApplicableUserIds": {
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            },
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "CreatedBy": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "DualBalanceAssetBalance": {
        "type": "object",
        "properties": {
          "BalanceId": {
            "type": "string"
          },
          "Type": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Balance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AvailableBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "UsdValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AvailableUsdValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "DualBalanceCardOption": {
        "type": "object",
        "properties": {
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Label": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          }
        }
      },
      "DualBalanceDashboardResponse": {
        "type": "object",
        "properties": {
          "Enabled": {
            "type": "boolean"
          },
          "WhitelabelName": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "TotalUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "AvailableUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "LastUpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "FundingEligible": {
            "type": "boolean"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "Balances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DualBalanceAssetBalance"
            }
          },
          "Cards": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DualBalanceCardOption"
            }
          }
        }
      },
      "DualBalanceFundingAcceptedResponse": {
        "type": "object",
        "properties": {
          "RequestId": {
            "type": "string",
            "format": "uuid"
          },
          "Status": {
            "type": "string"
          }
        }
      },
      "DualBalanceFundingPreviewRequest": {
        "required": [
          "BalanceId"
        ],
        "type": "object",
        "properties": {
          "BalanceId": {
            "maxLength": 200,
            "type": "string"
          },
          "Amount": {
            "maximum": 250000000,
            "minimum": 0.00000001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "CardId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "DualBalanceFundingPreviewResponse": {
        "type": "object",
        "properties": {
          "PreviewId": {
            "type": "string",
            "format": "uuid"
          },
          "SourceCurrency": {
            "type": "string"
          },
          "SourceAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "SourceDebitUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "CardTopUpFeeUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ExpectedNetCardCreditUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MinimumUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MaximumUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "DualBalanceFundingStatusResponse": {
        "type": "object",
        "properties": {
          "RequestId": {
            "type": "string",
            "format": "uuid"
          },
          "Status": {
            "type": "string"
          },
          "SourceCurrency": {
            "type": "string"
          },
          "SourceAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "SourceDebitUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "CardTopUpFeeUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "NetCardCreditUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "InterlaceOperationId": {
            "type": "string",
            "nullable": true
          },
          "CardLoadOperationId": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "DualBalanceFundingSubmitRequest": {
        "type": "object",
        "properties": {
          "PreviewId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "EntityTagHeaderValue": {
        "type": "object",
        "properties": {
          "Tag": {
            "$ref": "#/components/schemas/StringSegment"
          },
          "IsWeak": {
            "type": "boolean"
          }
        }
      },
      "EqualsMoneyAdditionalDocumentRequestV2": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "expectedResponseType": {
            "type": "string"
          },
          "applicationId": {
            "type": "string",
            "nullable": true
          },
          "informationRequestId": {
            "type": "string",
            "nullable": true
          },
          "additionalInformation": {
            "type": "string",
            "nullable": true
          },
          "associatedPersonId": {
            "type": "string",
            "nullable": true
          },
          "requestedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "EqualsMoneyAdditionalDocumentUploadResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "DocumentId": {
            "type": "string"
          },
          "Type": {
            "type": "string"
          },
          "FileName": {
            "type": "string"
          },
          "RemainingAdditionalDocumentsRequested": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EqualsMoneyAdditionalDocumentRequestV2"
            }
          }
        }
      },
      "EqualsMoneyApplicationAddress": {
        "required": [
          "addressType",
          "streetName",
          "postcode",
          "city",
          "countryCode"
        ],
        "type": "object",
        "properties": {
          "addressType": {
            "enum": [
              "REGISTERED",
              "TRADING",
              "RESIDENTIAL"
            ],
            "type": "string",
            "description": "Address type: \"RESIDENTIAL\" (personal), \"REGISTERED\" or \"TRADING\" (business)\n\nPersonal applications require RESIDENTIAL. Business applications require REGISTERED and may include TRADING.\n\nPossible values: REGISTERED, TRADING, RESIDENTIAL."
          },
          "streetName": {
            "type": "string"
          },
          "buildingNumber": {
            "type": "string",
            "nullable": true
          },
          "buildingName": {
            "type": "string",
            "nullable": true
          },
          "postcode": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "region": {
            "type": "string",
            "nullable": true
          },
          "countryCode": {
            "enum": [
              "AD",
              "AE",
              "AF",
              "AG",
              "AI",
              "AL",
              "AM",
              "AO",
              "AQ",
              "AR",
              "AS",
              "AT",
              "AU",
              "AW",
              "AX",
              "AZ",
              "BA",
              "BB",
              "BD",
              "BE",
              "BF",
              "BG",
              "BH",
              "BI",
              "BJ",
              "BL",
              "BM",
              "BN",
              "BO",
              "BQ",
              "BR",
              "BS",
              "BT",
              "BV",
              "BW",
              "BY",
              "BZ",
              "CA",
              "CC",
              "CD",
              "CF",
              "CG",
              "CH",
              "CI",
              "CK",
              "CL",
              "CM",
              "CN",
              "CO",
              "CR",
              "CU",
              "CV",
              "CW",
              "CX",
              "CY",
              "CZ",
              "DE",
              "DJ",
              "DK",
              "DM",
              "DO",
              "DZ",
              "EC",
              "EE",
              "EG",
              "EH",
              "ER",
              "ES",
              "ET",
              "FI",
              "FJ",
              "FK",
              "FM",
              "FO",
              "FR",
              "GA",
              "GB",
              "GD",
              "GE",
              "GF",
              "GG",
              "GH",
              "GI",
              "GL",
              "GM",
              "GN",
              "GP",
              "GQ",
              "GR",
              "GS",
              "GT",
              "GU",
              "GW",
              "GY",
              "HK",
              "HM",
              "HN",
              "HR",
              "HT",
              "HU",
              "ID",
              "IE",
              "IL",
              "IM",
              "IN",
              "IO",
              "IQ",
              "IR",
              "IS",
              "IT",
              "JE",
              "JM",
              "JO",
              "JP",
              "KE",
              "KG",
              "KH",
              "KI",
              "KM",
              "KN",
              "KP",
              "KR",
              "KW",
              "KY",
              "KZ",
              "LA",
              "LB",
              "LC",
              "LI",
              "LK",
              "LR",
              "LS",
              "LT",
              "LU",
              "LV",
              "LY",
              "MA",
              "MC",
              "MD",
              "ME",
              "MF",
              "MG",
              "MH",
              "MK",
              "ML",
              "MM",
              "MN",
              "MO",
              "MP",
              "MQ",
              "MR",
              "MS",
              "MT",
              "MU",
              "MV",
              "MW",
              "MX",
              "MY",
              "MZ",
              "NA",
              "NC",
              "NE",
              "NF",
              "NG",
              "NI",
              "NL",
              "NO",
              "NP",
              "NR",
              "NU",
              "NZ",
              "OM",
              "PA",
              "PE",
              "PF",
              "PG",
              "PH",
              "PK",
              "PL",
              "PM",
              "PN",
              "PR",
              "PS",
              "PT",
              "PW",
              "PY",
              "QA",
              "RE",
              "RO",
              "RS",
              "RU",
              "RW",
              "SA",
              "SB",
              "SC",
              "SD",
              "SE",
              "SG",
              "SH",
              "SI",
              "SJ",
              "SK",
              "SL",
              "SM",
              "SN",
              "SO",
              "SR",
              "SS",
              "ST",
              "SV",
              "SX",
              "SY",
              "SZ",
              "TC",
              "TD",
              "TF",
              "TG",
              "TH",
              "TJ",
              "TK",
              "TL",
              "TM",
              "TN",
              "TO",
              "TR",
              "TT",
              "TV",
              "TW",
              "TZ",
              "UA",
              "UG",
              "UM",
              "US",
              "UY",
              "UZ",
              "VA",
              "VC",
              "VE",
              "VG",
              "VI",
              "VN",
              "VU",
              "WF",
              "WS",
              "XK",
              "YE",
              "YT",
              "ZA",
              "ZM",
              "ZW"
            ],
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code\n\nPossible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
          }
        },
        "description": "Address for applications"
      },
      "EqualsMoneyApplicationCardsInformation": {
        "required": [
          "purposes",
          "estimatedAnnualSpend",
          "atmWithdrawalsRequired"
        ],
        "type": "object",
        "properties": {
          "businessDisplayName": {
            "maxLength": 15,
            "minLength": 0,
            "type": "string",
            "description": "Business display name on cards (max 15 chars, business only)",
            "nullable": true
          },
          "purposes": {
            "type": "array",
            "items": {
              "enum": [
                "SALARY_OR_INCOME",
                "PERSONAL_TRANSFERS_OR_LIVING_EXPENSES",
                "FAMILY_SUPPORT",
                "MORTGAGE_OR_RENT_OR_UTILITY_BILLS",
                "SAVINGS",
                "INVESTMENT_PURPOSES",
                "INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES",
                "RECEIVING_OR_SENDING_LOAN_PAYMENTS",
                "PURCHASE_OF_GOODS_OR_SERVICES",
                "TRAVEL",
                "EDUCATION",
                "MEDICAL_EXPENSES",
                "CHARITABLE_DONATIONS",
                "ADVERTISING_AND_MARKETING",
                "BILLS_AND_UTILITIES",
                "CLIENT_ENTERTAINMENT",
                "CUSTOMER_INCENTIVES",
                "EMPLOYEE_INCENTIVES",
                "FUEL_AND_MILEAGE_DOMESTIC",
                "FUEL_AND_MILEAGE_OVERSEAS",
                "LOCATION_EXPENSES_FILM_TV",
                "OFFICE_EQUIPMENT",
                "ONLINE_SUBSCRIPTIONS",
                "PAYMENT_TERMINAL_TESTING",
                "PAYROLL",
                "PER_DIEMS",
                "PETTY_CASH",
                "PROCUREMENT_PURCHASING",
                "PROCUREMENT_SOURCING",
                "TRAVEL_EXPENSES_DOMESTIC",
                "TRAVEL_EXPENSES_OVERSEAS"
              ],
              "type": "string"
            },
            "description": "Card purposes (e.g., \"EMPLOYEE_INCENTIVES\", \"TRAVEL_EXPENSES_DOMESTIC\")\n\nPersonal card purposes use the personal values. Business card purposes use the business card values.\n\nPossible values: SALARY_OR_INCOME, PERSONAL_TRANSFERS_OR_LIVING_EXPENSES, FAMILY_SUPPORT, MORTGAGE_OR_RENT_OR_UTILITY_BILLS, SAVINGS, INVESTMENT_PURPOSES, INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES, RECEIVING_OR_SENDING_LOAN_PAYMENTS, PURCHASE_OF_GOODS_OR_SERVICES, TRAVEL, EDUCATION, MEDICAL_EXPENSES, CHARITABLE_DONATIONS, ADVERTISING_AND_MARKETING, BILLS_AND_UTILITIES, CLIENT_ENTERTAINMENT, CUSTOMER_INCENTIVES, EMPLOYEE_INCENTIVES, FUEL_AND_MILEAGE_DOMESTIC, FUEL_AND_MILEAGE_OVERSEAS, LOCATION_EXPENSES_FILM_TV, OFFICE_EQUIPMENT, ONLINE_SUBSCRIPTIONS, PAYMENT_TERMINAL_TESTING, PAYROLL, PER_DIEMS, PETTY_CASH, PROCUREMENT_PURCHASING, PROCUREMENT_SOURCING, TRAVEL_EXPENSES_DOMESTIC, TRAVEL_EXPENSES_OVERSEAS."
          },
          "estimatedAnnualSpend": {
            "enum": [
              "0-10000",
              "10001-50000",
              "50001-100000",
              "100001-250000",
              "250001-1000000",
              "1000001-5000000",
              "5000000+"
            ],
            "type": "string",
            "description": "Estimated annual spend range (e.g., \"0-10000\", \"10001-50000\")\n\nPossible values: 0-10000, 10001-50000, 50001-100000, 100001-250000, 250001-1000000, 1000001-5000000, 5000000+."
          },
          "numberOfCardsRequired": {
            "enum": [
              "0-10",
              "11-50",
              "51-100",
              "101+"
            ],
            "type": "string",
            "description": "Number of cards required range (e.g., \"0-10\", \"11-50\")\n\nPossible values: 0-10, 11-50, 51-100, 101+.",
            "nullable": true
          },
          "cardsAreForEmployees": {
            "type": "boolean",
            "description": "Whether cards are for employees (business only)",
            "nullable": true
          },
          "atmWithdrawalsRequired": {
            "type": "boolean"
          }
        },
        "description": "Cards feature information"
      },
      "EqualsMoneyApplicationFeatureInformation": {
        "required": [
          "requestedFeatures"
        ],
        "type": "object",
        "properties": {
          "requestedFeatures": {
            "type": "array",
            "items": {
              "enum": [
                "CARDS",
                "PAYMENTS"
              ],
              "type": "string"
            },
            "description": "Requested features: \"PAYMENTS\", \"CARDS\", or both\n\nAllowed values: PAYMENTS, CARDS."
          },
          "cardsInformation": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EqualsMoneyApplicationCardsInformation"
              }
            ],
            "nullable": true
          },
          "paymentsInformation": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EqualsMoneyApplicationPaymentsInformation"
              }
            ],
            "nullable": true
          }
        },
        "description": "Feature information for applications"
      },
      "EqualsMoneyApplicationIndustry": {
        "required": [
          "main",
          "sub"
        ],
        "type": "object",
        "properties": {
          "main": {
            "type": "string",
            "description": "Main industry category (e.g., \"INFORMATION-AND-COMMUNICATION\")"
          },
          "sub": {
            "type": "string",
            "description": "Sub-industry category (e.g., \"IT-AND-COMPUTER-SERVICES\")"
          }
        },
        "description": "Industry classification for business applications"
      },
      "EqualsMoneyApplicationPaymentsInformation": {
        "required": [
          "purposes",
          "estimatedPaymentCount",
          "estimatedPaymentVolume",
          "inboundCurrencies",
          "outboundCurrencies",
          "receivingCountries",
          "sendingCountries"
        ],
        "type": "object",
        "properties": {
          "purposes": {
            "type": "array",
            "items": {
              "enum": [
                "SALARY_OR_INCOME",
                "PERSONAL_TRANSFERS_OR_LIVING_EXPENSES",
                "FAMILY_SUPPORT",
                "MORTGAGE_OR_RENT_OR_UTILITY_BILLS",
                "SAVINGS",
                "INVESTMENT_PURPOSES",
                "INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES",
                "RECEIVING_OR_SENDING_LOAN_PAYMENTS",
                "PURCHASE_OF_GOODS_OR_SERVICES",
                "TRAVEL",
                "EDUCATION",
                "MEDICAL_EXPENSES",
                "CHARITABLE_DONATIONS",
                "PAYING_SUPPLIERS",
                "PAYING_CONTRACTORS_OR_EMPLOYEES",
                "TRANSFERRING_MONEY_WITHIN_THE_COMPANY_OR_GROUP",
                "PAYING_A_MORTGAGE_BANK_LOAN_INSURANCE_OR_CREDIT",
                "PAYING_TAX_ON_PROFIT_OR_PROPERTY",
                "DISTRIBUTING_COMPANY_PROFITS_OR_PAYING_DIVIDENDS",
                "INVESTING_IN_FUNDS_STOCKS_BONDS_OR_SIMILAR",
                "SENDING_DONATIONS"
              ],
              "type": "string"
            },
            "description": "Payment purposes (e.g., \"PAYING_SUPPLIERS\", \"RECEIVING-PAYMENTS-FROM-CUSTOMERS\")\n\nPersonal applications use the personal payment purposes. Business applications use the business payment purposes.\n\nPossible values: SALARY_OR_INCOME, PERSONAL_TRANSFERS_OR_LIVING_EXPENSES, FAMILY_SUPPORT, MORTGAGE_OR_RENT_OR_UTILITY_BILLS, SAVINGS, INVESTMENT_PURPOSES, INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES, RECEIVING_OR_SENDING_LOAN_PAYMENTS, PURCHASE_OF_GOODS_OR_SERVICES, TRAVEL, EDUCATION, MEDICAL_EXPENSES, CHARITABLE_DONATIONS, PAYING_SUPPLIERS, PAYING_CONTRACTORS_OR_EMPLOYEES, TRANSFERRING_MONEY_WITHIN_THE_COMPANY_OR_GROUP, PAYING_A_MORTGAGE_BANK_LOAN_INSURANCE_OR_CREDIT, PAYING_TAX_ON_PROFIT_OR_PROPERTY, DISTRIBUTING_COMPANY_PROFITS_OR_PAYING_DIVIDENDS, INVESTING_IN_FUNDS_STOCKS_BONDS_OR_SIMILAR, SENDING_DONATIONS."
          },
          "accountFundingSource": {
            "type": "array",
            "items": {
              "enum": [
                "RECEIVING_FUNDS_FROM_OWN_ACCOUNTS",
                "RECEIVING_SALARY_PENSION_OR_DIVIDENDS",
                "RECEIVING_GIFTS_OR_INHERITANCES",
                "PROCEEDS_FROM_INVESTMENTS",
                "PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING",
                "PROCEEDS_FROM_SALE_OF_A_PROPERTY_OR_PHYSICAL_ASSET",
                "OTHER",
                "RECEIVING_PAYMENTS_FROM_CLIENTS",
                "RECEIVING_THIRD_PARTY_INVESTMENTS",
                "RECEIVING_DONATIONS",
                "RECEIVING_FUNDS_FROM_SUBSIDIARIES_AND_PARENT_COMPANIES"
              ],
              "type": "string"
            },
            "description": "Account funding sources\n\nPersonal applications use the personal funding sources. Business applications use the business funding sources.\n\nPossible values: RECEIVING_FUNDS_FROM_OWN_ACCOUNTS, RECEIVING_SALARY_PENSION_OR_DIVIDENDS, RECEIVING_GIFTS_OR_INHERITANCES, PROCEEDS_FROM_INVESTMENTS, PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING, PROCEEDS_FROM_SALE_OF_A_PROPERTY_OR_PHYSICAL_ASSET, OTHER, RECEIVING_PAYMENTS_FROM_CLIENTS, RECEIVING_THIRD_PARTY_INVESTMENTS, RECEIVING_DONATIONS, RECEIVING_FUNDS_FROM_SUBSIDIARIES_AND_PARENT_COMPANIES.",
            "nullable": true
          },
          "estimatedPaymentCount": {
            "enum": [
              "FEWER-THAN-5",
              "5-10",
              "10-20",
              "MORE-THAN-20",
              "FEWER-THAN-5-PAYMENTS",
              "5-20",
              "20-50",
              "50-100",
              "100-500",
              "500"
            ],
            "type": "string",
            "description": "Estimated payment count range (e.g., \"5-20\", \"20-50\")\n\nPersonal count values: FEWER-THAN-5, 5-10, 10-20, MORE-THAN-20. Business count values: FEWER-THAN-5-PAYMENTS, 5-20, 20-50, 50-100, 100-500, 500.\n\nPossible values: FEWER-THAN-5, 5-10, 10-20, MORE-THAN-20, FEWER-THAN-5-PAYMENTS, 5-20, 20-50, 50-100, 100-500, 500."
          },
          "estimatedPaymentVolume": {
            "enum": [
              "0-10000",
              "10001-50000",
              "50001-100000",
              "100001-250000",
              "250001-1000000",
              "1000001-5000000",
              "5000000+"
            ],
            "type": "string",
            "description": "Estimated payment volume range (e.g., \"0-10000\", \"10001-50000\")\n\nPossible values: 0-10000, 10001-50000, 50001-100000, 100001-250000, 250001-1000000, 1000001-5000000, 5000000+."
          },
          "inboundCurrencies": {
            "type": "array",
            "items": {
              "enum": [
                "AED",
                "AFN",
                "ALL",
                "AMD",
                "ANG",
                "AOA",
                "ARS",
                "AUD",
                "AWG",
                "AZN",
                "BAM",
                "BBD",
                "BDT",
                "BGN",
                "BHD",
                "BIF",
                "BMD",
                "BND",
                "BOB",
                "BOV",
                "BRL",
                "BSD",
                "BTN",
                "BWP",
                "BYN",
                "BZD",
                "CAD",
                "CDF",
                "CHF",
                "CLP",
                "CNY",
                "COP",
                "CRC",
                "CUC",
                "CUP",
                "CVE",
                "CZK",
                "DJF",
                "DKK",
                "DOP",
                "DZD",
                "EGP",
                "ERN",
                "ETB",
                "EUR",
                "FJD",
                "FKP",
                "GBP",
                "GEL",
                "GGP",
                "GHS",
                "GIP",
                "GMD",
                "GNF",
                "GTQ",
                "GYD",
                "HKD",
                "HNL",
                "HRK",
                "HTG",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "IQD",
                "IRR",
                "ISK",
                "JMD",
                "JOD",
                "JPY",
                "KES",
                "KGS",
                "KHR",
                "KMF",
                "KPW",
                "KRW",
                "KWD",
                "KYD",
                "KZT",
                "LAK",
                "LBP",
                "LKR",
                "LRD",
                "LSL",
                "LTL",
                "LVL",
                "LYD",
                "MAD",
                "MDL",
                "MGA",
                "MKD",
                "MMK",
                "MNT",
                "MOP",
                "MUR",
                "MVR",
                "MWK",
                "MXN",
                "MYR",
                "MZN",
                "NAD",
                "NGN",
                "NIO",
                "NOK",
                "NPR",
                "NZD",
                "OMR",
                "PAB",
                "PEN",
                "PGK",
                "PHP",
                "PKR",
                "PLN",
                "PYG",
                "QAR",
                "RON",
                "RSD",
                "RUB",
                "RWF",
                "SAR",
                "SBD",
                "SCR",
                "SEK",
                "SGD",
                "SHN",
                "SLL",
                "SOS",
                "SRD",
                "SSP",
                "STN",
                "SYP",
                "SZL",
                "THB",
                "TJS",
                "TMT",
                "TND",
                "TOP",
                "TRY",
                "TTD",
                "TWD",
                "TZS",
                "UAH",
                "UGX",
                "USD",
                "UYU",
                "UZS",
                "VND",
                "VUV",
                "WST",
                "XAF",
                "XAG",
                "XAU",
                "XCD",
                "XOF",
                "XPD",
                "XPF",
                "XPT",
                "YER",
                "ZAR",
                "ZMK",
                "ZMW",
                "ZWD"
              ],
              "type": "string"
            },
            "description": "Inbound currency codes (ISO 4217)\n\nPossible values: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BOV, BRL, BSD, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SEK, SGD, SHN, SLL, SOS, SRD, SSP, STN, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VND, VUV, WST, XAF, XAG, XAU, XCD, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW, ZWD."
          },
          "outboundCurrencies": {
            "type": "array",
            "items": {
              "enum": [
                "AED",
                "AFN",
                "ALL",
                "AMD",
                "ANG",
                "AOA",
                "ARS",
                "AUD",
                "AWG",
                "AZN",
                "BAM",
                "BBD",
                "BDT",
                "BGN",
                "BHD",
                "BIF",
                "BMD",
                "BND",
                "BOB",
                "BOV",
                "BRL",
                "BSD",
                "BTN",
                "BWP",
                "BYN",
                "BZD",
                "CAD",
                "CDF",
                "CHF",
                "CLP",
                "CNY",
                "COP",
                "CRC",
                "CUC",
                "CUP",
                "CVE",
                "CZK",
                "DJF",
                "DKK",
                "DOP",
                "DZD",
                "EGP",
                "ERN",
                "ETB",
                "EUR",
                "FJD",
                "FKP",
                "GBP",
                "GEL",
                "GGP",
                "GHS",
                "GIP",
                "GMD",
                "GNF",
                "GTQ",
                "GYD",
                "HKD",
                "HNL",
                "HRK",
                "HTG",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "IQD",
                "IRR",
                "ISK",
                "JMD",
                "JOD",
                "JPY",
                "KES",
                "KGS",
                "KHR",
                "KMF",
                "KPW",
                "KRW",
                "KWD",
                "KYD",
                "KZT",
                "LAK",
                "LBP",
                "LKR",
                "LRD",
                "LSL",
                "LTL",
                "LVL",
                "LYD",
                "MAD",
                "MDL",
                "MGA",
                "MKD",
                "MMK",
                "MNT",
                "MOP",
                "MUR",
                "MVR",
                "MWK",
                "MXN",
                "MYR",
                "MZN",
                "NAD",
                "NGN",
                "NIO",
                "NOK",
                "NPR",
                "NZD",
                "OMR",
                "PAB",
                "PEN",
                "PGK",
                "PHP",
                "PKR",
                "PLN",
                "PYG",
                "QAR",
                "RON",
                "RSD",
                "RUB",
                "RWF",
                "SAR",
                "SBD",
                "SCR",
                "SEK",
                "SGD",
                "SHN",
                "SLL",
                "SOS",
                "SRD",
                "SSP",
                "STN",
                "SYP",
                "SZL",
                "THB",
                "TJS",
                "TMT",
                "TND",
                "TOP",
                "TRY",
                "TTD",
                "TWD",
                "TZS",
                "UAH",
                "UGX",
                "USD",
                "UYU",
                "UZS",
                "VND",
                "VUV",
                "WST",
                "XAF",
                "XAG",
                "XAU",
                "XCD",
                "XOF",
                "XPD",
                "XPF",
                "XPT",
                "YER",
                "ZAR",
                "ZMK",
                "ZMW",
                "ZWD"
              ],
              "type": "string"
            },
            "description": "Outbound currency codes (ISO 4217)\n\nPossible values: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BOV, BRL, BSD, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SEK, SGD, SHN, SLL, SOS, SRD, SSP, STN, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VND, VUV, WST, XAF, XAG, XAU, XCD, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW, ZWD."
          },
          "receivingCountries": {
            "type": "array",
            "items": {
              "enum": [
                "AD",
                "AE",
                "AF",
                "AG",
                "AI",
                "AL",
                "AM",
                "AO",
                "AQ",
                "AR",
                "AS",
                "AT",
                "AU",
                "AW",
                "AX",
                "AZ",
                "BA",
                "BB",
                "BD",
                "BE",
                "BF",
                "BG",
                "BH",
                "BI",
                "BJ",
                "BL",
                "BM",
                "BN",
                "BO",
                "BQ",
                "BR",
                "BS",
                "BT",
                "BV",
                "BW",
                "BY",
                "BZ",
                "CA",
                "CC",
                "CD",
                "CF",
                "CG",
                "CH",
                "CI",
                "CK",
                "CL",
                "CM",
                "CN",
                "CO",
                "CR",
                "CU",
                "CV",
                "CW",
                "CX",
                "CY",
                "CZ",
                "DE",
                "DJ",
                "DK",
                "DM",
                "DO",
                "DZ",
                "EC",
                "EE",
                "EG",
                "EH",
                "ER",
                "ES",
                "ET",
                "FI",
                "FJ",
                "FK",
                "FM",
                "FO",
                "FR",
                "GA",
                "GB",
                "GD",
                "GE",
                "GF",
                "GG",
                "GH",
                "GI",
                "GL",
                "GM",
                "GN",
                "GP",
                "GQ",
                "GR",
                "GS",
                "GT",
                "GU",
                "GW",
                "GY",
                "HK",
                "HM",
                "HN",
                "HR",
                "HT",
                "HU",
                "ID",
                "IE",
                "IL",
                "IM",
                "IN",
                "IO",
                "IQ",
                "IR",
                "IS",
                "IT",
                "JE",
                "JM",
                "JO",
                "JP",
                "KE",
                "KG",
                "KH",
                "KI",
                "KM",
                "KN",
                "KP",
                "KR",
                "KW",
                "KY",
                "KZ",
                "LA",
                "LB",
                "LC",
                "LI",
                "LK",
                "LR",
                "LS",
                "LT",
                "LU",
                "LV",
                "LY",
                "MA",
                "MC",
                "MD",
                "ME",
                "MF",
                "MG",
                "MH",
                "MK",
                "ML",
                "MM",
                "MN",
                "MO",
                "MP",
                "MQ",
                "MR",
                "MS",
                "MT",
                "MU",
                "MV",
                "MW",
                "MX",
                "MY",
                "MZ",
                "NA",
                "NC",
                "NE",
                "NF",
                "NG",
                "NI",
                "NL",
                "NO",
                "NP",
                "NR",
                "NU",
                "NZ",
                "OM",
                "PA",
                "PE",
                "PF",
                "PG",
                "PH",
                "PK",
                "PL",
                "PM",
                "PN",
                "PR",
                "PS",
                "PT",
                "PW",
                "PY",
                "QA",
                "RE",
                "RO",
                "RS",
                "RU",
                "RW",
                "SA",
                "SB",
                "SC",
                "SD",
                "SE",
                "SG",
                "SH",
                "SI",
                "SJ",
                "SK",
                "SL",
                "SM",
                "SN",
                "SO",
                "SR",
                "SS",
                "ST",
                "SV",
                "SX",
                "SY",
                "SZ",
                "TC",
                "TD",
                "TF",
                "TG",
                "TH",
                "TJ",
                "TK",
                "TL",
                "TM",
                "TN",
                "TO",
                "TR",
                "TT",
                "TV",
                "TW",
                "TZ",
                "UA",
                "UG",
                "UM",
                "US",
                "UY",
                "UZ",
                "VA",
                "VC",
                "VE",
                "VG",
                "VI",
                "VN",
                "VU",
                "WF",
                "WS",
                "XK",
                "YE",
                "YT",
                "ZA",
                "ZM",
                "ZW"
              ],
              "type": "string"
            },
            "description": "Countries receiving payments from (ISO 3166-1 alpha-2)\n\nPossible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
          },
          "sendingCountries": {
            "type": "array",
            "items": {
              "enum": [
                "AD",
                "AE",
                "AF",
                "AG",
                "AI",
                "AL",
                "AM",
                "AO",
                "AQ",
                "AR",
                "AS",
                "AT",
                "AU",
                "AW",
                "AX",
                "AZ",
                "BA",
                "BB",
                "BD",
                "BE",
                "BF",
                "BG",
                "BH",
                "BI",
                "BJ",
                "BL",
                "BM",
                "BN",
                "BO",
                "BQ",
                "BR",
                "BS",
                "BT",
                "BV",
                "BW",
                "BY",
                "BZ",
                "CA",
                "CC",
                "CD",
                "CF",
                "CG",
                "CH",
                "CI",
                "CK",
                "CL",
                "CM",
                "CN",
                "CO",
                "CR",
                "CU",
                "CV",
                "CW",
                "CX",
                "CY",
                "CZ",
                "DE",
                "DJ",
                "DK",
                "DM",
                "DO",
                "DZ",
                "EC",
                "EE",
                "EG",
                "EH",
                "ER",
                "ES",
                "ET",
                "FI",
                "FJ",
                "FK",
                "FM",
                "FO",
                "FR",
                "GA",
                "GB",
                "GD",
                "GE",
                "GF",
                "GG",
                "GH",
                "GI",
                "GL",
                "GM",
                "GN",
                "GP",
                "GQ",
                "GR",
                "GS",
                "GT",
                "GU",
                "GW",
                "GY",
                "HK",
                "HM",
                "HN",
                "HR",
                "HT",
                "HU",
                "ID",
                "IE",
                "IL",
                "IM",
                "IN",
                "IO",
                "IQ",
                "IR",
                "IS",
                "IT",
                "JE",
                "JM",
                "JO",
                "JP",
                "KE",
                "KG",
                "KH",
                "KI",
                "KM",
                "KN",
                "KP",
                "KR",
                "KW",
                "KY",
                "KZ",
                "LA",
                "LB",
                "LC",
                "LI",
                "LK",
                "LR",
                "LS",
                "LT",
                "LU",
                "LV",
                "LY",
                "MA",
                "MC",
                "MD",
                "ME",
                "MF",
                "MG",
                "MH",
                "MK",
                "ML",
                "MM",
                "MN",
                "MO",
                "MP",
                "MQ",
                "MR",
                "MS",
                "MT",
                "MU",
                "MV",
                "MW",
                "MX",
                "MY",
                "MZ",
                "NA",
                "NC",
                "NE",
                "NF",
                "NG",
                "NI",
                "NL",
                "NO",
                "NP",
                "NR",
                "NU",
                "NZ",
                "OM",
                "PA",
                "PE",
                "PF",
                "PG",
                "PH",
                "PK",
                "PL",
                "PM",
                "PN",
                "PR",
                "PS",
                "PT",
                "PW",
                "PY",
                "QA",
                "RE",
                "RO",
                "RS",
                "RU",
                "RW",
                "SA",
                "SB",
                "SC",
                "SD",
                "SE",
                "SG",
                "SH",
                "SI",
                "SJ",
                "SK",
                "SL",
                "SM",
                "SN",
                "SO",
                "SR",
                "SS",
                "ST",
                "SV",
                "SX",
                "SY",
                "SZ",
                "TC",
                "TD",
                "TF",
                "TG",
                "TH",
                "TJ",
                "TK",
                "TL",
                "TM",
                "TN",
                "TO",
                "TR",
                "TT",
                "TV",
                "TW",
                "TZ",
                "UA",
                "UG",
                "UM",
                "US",
                "UY",
                "UZ",
                "VA",
                "VC",
                "VE",
                "VG",
                "VI",
                "VN",
                "VU",
                "WF",
                "WS",
                "XK",
                "YE",
                "YT",
                "ZA",
                "ZM",
                "ZW"
              ],
              "type": "string"
            },
            "description": "Countries sending payments to (ISO 3166-1 alpha-2)\n\nPossible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
          }
        },
        "description": "Payments feature information"
      },
      "EqualsMoneyApplicationResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "accountId": {
            "type": "string",
            "description": "Account ID assigned after approval",
            "nullable": true
          },
          "market": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "firstName": {
            "type": "string",
            "nullable": true
          },
          "lastName": {
            "type": "string",
            "nullable": true
          },
          "dob": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "nullable": true
          },
          "nationalities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "identityDocumentNumber": {
            "type": "string",
            "nullable": true
          },
          "taxId": {
            "type": "string",
            "nullable": true
          },
          "countryOfIncorporation": {
            "type": "string",
            "nullable": true
          },
          "regionOfIncorporation": {
            "type": "string",
            "nullable": true
          },
          "registeredName": {
            "type": "string",
            "nullable": true
          },
          "registrationNumber": {
            "type": "string",
            "nullable": true
          },
          "tradingNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "businessOverview": {
            "type": "string",
            "nullable": true
          },
          "industry": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EqualsMoneyApplicationIndustry"
              }
            ],
            "nullable": true
          },
          "employeeCount": {
            "type": "string",
            "nullable": true
          },
          "incorporationDate": {
            "type": "string",
            "nullable": true
          },
          "website": {
            "type": "string",
            "nullable": true
          },
          "businessPromotionDescription": {
            "type": "string",
            "nullable": true
          },
          "featureInformation": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EqualsMoneyApplicationFeatureInformation"
              }
            ],
            "nullable": true
          },
          "addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EqualsMoneyApplicationAddress"
            },
            "nullable": true
          },
          "associatedPeople": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonLink"
            },
            "nullable": true
          }
        },
        "description": "Response from creating/updating/getting an application"
      },
      "EqualsMoneyAssociatedPersonAddressRequest": {
        "required": [
          "addressLine1",
          "townCity",
          "postcode",
          "countryCode"
        ],
        "type": "object",
        "properties": {
          "addressLine1": {
            "type": "string"
          },
          "addressLine2": {
            "type": "string",
            "nullable": true
          },
          "streetName": {
            "type": "string",
            "nullable": true
          },
          "buildingNumber": {
            "type": "string",
            "nullable": true
          },
          "buildingName": {
            "type": "string",
            "nullable": true
          },
          "townCity": {
            "type": "string"
          },
          "postcode": {
            "type": "string"
          },
          "countryCode": {
            "type": "string"
          },
          "region": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "EqualsMoneyAssociatedPersonLink": {
        "required": [
          "associatedPersonId",
          "associationType"
        ],
        "type": "object",
        "properties": {
          "associatedPersonId": {
            "type": "string",
            "description": "ID of the associated person (from CreateAssociatedPeople response)"
          },
          "associationType": {
            "type": "string",
            "description": "Association type: \"APPLICANT\", \"DIRECTOR\", \"ULTIMATE_BENEFICIAL_OWNER\""
          },
          "jobTitle": {
            "type": "string",
            "description": "Job title (required for APPLICANT)",
            "nullable": true
          },
          "ownershipPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Ownership percentage 0-100 (required for ULTIMATE_BENEFICIAL_OWNER)",
            "format": "int32",
            "nullable": true
          }
        },
        "description": "Link an associated person to a business application"
      },
      "EqualsMoneyAssociatedPersonModel": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalId": {
            "type": "string"
          },
          "FirstName": {
            "type": "string"
          },
          "LastName": {
            "type": "string"
          },
          "Email": {
            "type": "string"
          },
          "AssociationType": {
            "type": "string"
          },
          "JobTitle": {
            "type": "string",
            "nullable": true
          },
          "OwnershipPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "IdentityDocumentUploaded": {
            "type": "boolean"
          },
          "AddressDocumentUploaded": {
            "type": "boolean"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "EqualsMoneyAssociatedPersonResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "nullable": true
          },
          "emailAddress": {
            "type": "string",
            "nullable": true
          },
          "nationalities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "taxId": {
            "type": "string",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "description": "Response from creating an associated person"
      },
      "EqualsMoneyBudgetTransferRequest": {
        "type": "object",
        "properties": {
          "destinationBudgetId": {
            "type": "string",
            "description": "Destination budget ID for the transfer"
          },
          "currency": {
            "type": "string",
            "description": "Currency code for the transfer (e.g., USD, GBP, EUR)"
          },
          "amount": {
            "type": "string",
            "description": "Amount to transfer"
          },
          "reference": {
            "type": "string",
            "description": "Reference for the transfer"
          }
        },
        "description": "Request model for creating a budget-to-budget transfer"
      },
      "EqualsMoneyCreateAssociatedPersonRequest": {
        "required": [
          "firstName",
          "lastName",
          "dateOfBirth",
          "emailAddress",
          "nationalities"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "description": "Date of birth in YYYY-MM-DD format"
          },
          "emailAddress": {
            "type": "string"
          },
          "nationalities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Array of ISO 3166-1 alpha-2 country codes"
          },
          "taxId": {
            "type": "string",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EqualsMoneyAssociatedPersonAddressRequest"
              }
            ],
            "nullable": true
          }
        },
        "description": "Request to create associated people for business applications (Directors, UBOs, Applicants)\nPOST /v2/applications/associated-people"
      },
      "EqualsMoneyDocumentResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "applicationId": {
            "type": "string",
            "nullable": true
          },
          "associatedPersonId": {
            "type": "string",
            "nullable": true
          },
          "purpose": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "description": "Response from uploading a document"
      },
      "EqualsMoneyKycStatusV2": {
        "type": "object",
        "properties": {
          "ApplicationId": {
            "type": "string",
            "nullable": true
          },
          "ApplicationStatus": {
            "type": "string",
            "nullable": true
          },
          "AccountId": {
            "type": "string",
            "nullable": true
          },
          "RequiredAction": {
            "type": "string",
            "nullable": true
          },
          "ActionUrl": {
            "type": "string",
            "nullable": true
          },
          "additionalDocumentsRequested": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EqualsMoneyAdditionalDocumentRequestV2"
            }
          },
          "Provider": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Approved": {
            "type": "boolean"
          },
          "ExternalId": {
            "type": "string",
            "nullable": true
          },
          "LastUpdated": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "EqualsMoneyOnboardingDashboardResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "CorrelationId": {
            "type": "string",
            "nullable": true
          },
          "AccountId": {
            "type": "string",
            "nullable": true
          }
        },
        "description": "Response from the EqualsMoney onboarding endpoint"
      },
      "EqualsMoneyQuoteAmount": {
        "type": "object",
        "properties": {
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Amount value",
            "format": "double"
          },
          "currency": {
            "type": "string",
            "description": "Currency code"
          }
        },
        "description": "Amount and currency information for quote"
      },
      "EqualsMoneyQuoteCharges": {
        "type": "object",
        "properties": {
          "fee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Fee amount",
            "format": "double"
          },
          "margin": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Margin amount",
            "format": "double"
          },
          "other": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Other charges",
            "format": "double"
          }
        },
        "description": "Charges breakdown for quote"
      },
      "EqualsMoneyQuoteCurrency": {
        "type": "object",
        "properties": {
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Amount for the currency",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteCurrencyInfo"
          }
        },
        "description": "Currency details for quote request"
      },
      "EqualsMoneyQuoteCurrencyInfo": {
        "type": "object",
        "properties": {
          "budgetId": {
            "type": "string",
            "description": "Equals Money budget ID for this currency leg. This can be required for source and target currency legs depending on quote type; it is not only for internal transfers.\n\nEquals Money budget ID for this currency leg. It can be required on source and target legs depending on quote type; it is not only for internal transfers.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "Currency code (e.g., USD, GBP, EUR)"
          }
        },
        "description": "Currency information for quote"
      },
      "EqualsMoneyQuoteDetails": {
        "type": "object",
        "properties": {
          "rate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Exchange rate",
            "format": "double"
          },
          "inverseRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Inverse exchange rate",
            "format": "double"
          },
          "fromGbpAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Amount in GBP",
            "format": "double"
          },
          "from": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteAmount"
          },
          "to": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteAmount"
          },
          "direction": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Direction of the quote (1 or -1)",
            "format": "int32"
          }
        },
        "description": "Quote details including exchange rates"
      },
      "EqualsMoneyQuotePrice": {
        "type": "object",
        "properties": {
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Price amount",
            "format": "double"
          },
          "currency": {
            "type": "string",
            "description": "Currency code for the price"
          }
        },
        "description": "Price information for quote"
      },
      "EqualsMoneyQuoteRequest": {
        "type": "object",
        "properties": {
          "sourceCurrency": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteCurrency"
          },
          "targetCurrency": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteCurrency"
          },
          "settlementDate": {
            "pattern": "^(\\d{8}|\\d{4}-\\d{2}-\\d{2})$",
            "type": "string",
            "description": "Settlement date in yyyyMMdd format, for example 20260505. The public API also accepts yyyy-MM-dd and converts it before calling Equals Money.\n\nPreferred format: yyyyMMdd, for example 20260505. The public API also accepts yyyy-MM-dd and converts it before calling Equals Money.",
            "example": "20260505"
          },
          "type": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteType"
          }
        },
        "description": "Request model for creating a currency quote"
      },
      "EqualsMoneyQuoteResponse": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "description": "Order ID for the quote"
          },
          "quoteRequestId": {
            "type": "string",
            "description": "Quote request ID"
          },
          "settlement": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteSettlement"
          },
          "quote": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteDetails"
          }
        },
        "description": "Response model for currency quote creation"
      },
      "EqualsMoneyQuoteSettlement": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Settlement date in YYYYMMDD format"
          },
          "price": {
            "$ref": "#/components/schemas/EqualsMoneyQuotePrice"
          },
          "charges": {
            "$ref": "#/components/schemas/EqualsMoneyQuoteCharges"
          }
        },
        "description": "Settlement details for quote"
      },
      "EqualsMoneyQuoteType": {
        "type": "object",
        "properties": {
          "from": {
            "enum": [
              "balance",
              "bank"
            ],
            "type": "string",
            "description": "Source type. Allowed values: balance, bank.\n\nAllowed values: balance, bank."
          },
          "to": {
            "enum": [
              "payment",
              "balance",
              "multiple",
              "unknown",
              "forward"
            ],
            "type": "string",
            "description": "Target type. Allowed values: payment, balance, multiple, unknown, forward.\n\nAllowed values: payment, balance, multiple, unknown, forward. Use balance for an internal currency exchange."
          },
          "recipientId": {
            "type": "string",
            "description": "Equals Money recipient ID for payment quotes. This is the provider recipient ID, usually stored as the payee ExternalId, not the local PayeeId.\n\nEquals Money recipient ID for payment quotes. This is the provider recipient ID, usually the payee ExternalId, not the local PayeeId.",
            "nullable": true
          }
        },
        "description": "Quote type information"
      },
      "EqualsMoneyTradeAmount": {
        "type": "object",
        "properties": {
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Amount value",
            "format": "double"
          },
          "currency": {
            "type": "string",
            "description": "Currency code"
          }
        },
        "description": "Amount and currency information for trade"
      },
      "EqualsMoneyTradeCharges": {
        "type": "object",
        "properties": {
          "fee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Fee amount",
            "format": "double"
          },
          "margin": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Margin amount",
            "format": "double"
          },
          "other": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Other charges",
            "format": "double"
          }
        },
        "description": "Charges breakdown for trade"
      },
      "EqualsMoneyTradeCurrency": {
        "type": "object",
        "properties": {
          "budgetId": {
            "type": "string",
            "description": "Equals Money budget ID for the payment currency leg.\n\nEquals Money budget ID for the payment currency leg."
          },
          "currencyCode": {
            "type": "string",
            "description": "Currency code (e.g., USD, GBP, EUR)"
          }
        },
        "description": "Currency information for trade payment"
      },
      "EqualsMoneyTradeDetails": {
        "type": "object",
        "properties": {
          "rate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Exchange rate used for the trade",
            "format": "double"
          },
          "inverseRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Inverse exchange rate",
            "format": "double"
          },
          "from": {
            "$ref": "#/components/schemas/EqualsMoneyTradeAmount"
          },
          "to": {
            "$ref": "#/components/schemas/EqualsMoneyTradeAmount"
          }
        },
        "description": "Trade execution details"
      },
      "EqualsMoneyTradePayment": {
        "type": "object",
        "properties": {
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Payment amount",
            "format": "double"
          },
          "currency": {
            "$ref": "#/components/schemas/EqualsMoneyTradeCurrency"
          },
          "recipientId": {
            "type": "string",
            "description": "Equals Money recipient ID for the payment. This is the provider recipient ID, usually stored as the payee ExternalId.\n\nEquals Money recipient ID, usually the payee ExternalId."
          },
          "internalReference": {
            "type": "string",
            "description": "Internal reference for the payment",
            "nullable": true
          },
          "externalReference": {
            "type": "string",
            "description": "External reference for the payment",
            "nullable": true
          }
        },
        "description": "Payment details for trade request"
      },
      "EqualsMoneyTradePrice": {
        "type": "object",
        "properties": {
          "amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Price amount",
            "format": "double"
          },
          "currency": {
            "type": "string",
            "description": "Currency code for the price"
          }
        },
        "description": "Price information for trade"
      },
      "EqualsMoneyTradeRequest": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "description": "Order ID returned by the quote response. This identifies the provider quote/order to execute.\n\nOrderId returned by POST /api/v2/banking/orders/quote."
          },
          "quoteRequestId": {
            "type": "string",
            "description": "Quote request ID returned by the quote response. This is different from OrderId and must be sent back with the trade request.\n\nQuoteRequestId returned by POST /api/v2/banking/orders/quote. This is separate from OrderId."
          },
          "moveMoneyRequestId": {
            "type": "string",
            "description": "Optional move-money request ID. Omit it unless the upstream quote/payment flow returned one.\n\nOptional. Omit unless the upstream quote/payment flow returned a moveMoneyRequestId.",
            "nullable": true
          },
          "payments": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EqualsMoneyTradePayment"
              }
            ],
            "nullable": true
          }
        },
        "description": "Request model for creating a trade order using a quote"
      },
      "EqualsMoneyTradeResponse": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "description": "Order ID for the trade"
          },
          "bank": {
            "type": "string",
            "description": "Bank identifier"
          },
          "settlement": {
            "$ref": "#/components/schemas/EqualsMoneyTradeSettlement"
          },
          "trade": {
            "$ref": "#/components/schemas/EqualsMoneyTradeDetails"
          }
        },
        "description": "Response model for trade order creation"
      },
      "EqualsMoneyTradeSettlement": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Settlement date in YYYYMMDD format"
          },
          "price": {
            "$ref": "#/components/schemas/EqualsMoneyTradePrice"
          },
          "charges": {
            "$ref": "#/components/schemas/EqualsMoneyTradeCharges"
          }
        },
        "description": "Settlement details for trade"
      },
      "EqualsMoneyTransferResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Indicates if the transfer was successful"
          },
          "debitBoxTransactionId": {
            "description": "Transaction ID for the debit operation"
          },
          "creditBoxTransactionId": {
            "description": "Transaction ID for the credit operation"
          }
        },
        "description": "Response model for budget-to-budget transfer"
      },
      "EqualsRecipientPrefillResponse": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FirstName": {
            "type": "string"
          },
          "LastName": {
            "type": "string"
          },
          "UserName": {
            "type": "string"
          },
          "MaskedEmail": {
            "type": "string",
            "nullable": true
          },
          "MaskedPhone": {
            "type": "string",
            "nullable": true
          },
          "PaymentType": {
            "type": "string"
          },
          "PaymentMethod": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Country": {
            "type": "string"
          },
          "AccountNumber": {
            "type": "string"
          },
          "BankName": {
            "type": "string",
            "nullable": true
          },
          "RoutingCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingCodeDto"
            }
          },
          "BankAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayeeAddressDto"
              }
            ],
            "nullable": true
          },
          "PayeeAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayeeAddressDto"
              }
            ],
            "nullable": true
          }
        },
        "description": "Prefilled payee details for an internal Equals recipient."
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "Message": {
            "type": "string"
          },
          "Code": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ValidationErrors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "nullable": true
          },
          "Details": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "ExchangeQuote": {
        "type": "object",
        "properties": {
          "FromCurrency": {
            "type": "string"
          },
          "ToCurrency": {
            "type": "string"
          },
          "FromAmount": {
            "type": "string"
          },
          "ToAmount": {
            "type": "string"
          },
          "ExchangeRate": {
            "type": "string"
          },
          "Fee": {
            "type": "string"
          }
        }
      },
      "ExternalCryptoWithdrawalRequest": {
        "required": [
          "UserId",
          "Currency",
          "Chain",
          "Amount",
          "DestinationAddress",
          "ConfirmExchangeRate"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Currency": {
            "type": "string"
          },
          "Chain": {
            "type": "string"
          },
          "Amount": {
            "type": "string"
          },
          "DestinationAddress": {
            "type": "string"
          },
          "ConfirmExchangeRate": {
            "type": "boolean"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        },
        "description": "Request model for external crypto withdrawal (to blockchain address)"
      },
      "ExternalCryptoWithdrawalResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "VerificationToken": {
            "type": "string",
            "nullable": true
          },
          "TransactionId": {
            "type": "string",
            "nullable": true
          },
          "InterlaceTransferId": {
            "type": "string",
            "nullable": true
          },
          "WithdrawalRequestId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Status": {
            "type": "string"
          },
          "ActualAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransferFee"
            }
          },
          "Message": {
            "type": "string"
          },
          "OtpRequired": {
            "type": "boolean"
          },
          "OtpExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "description": "Response model for external crypto withdrawal (to blockchain address)"
      },
      "FeeAndQuotaData": {
        "type": "object",
        "properties": {
          "CrossChainQuota": {
            "type": "string"
          },
          "CrossChainFeeRate": {
            "type": "string"
          },
          "CrossChainAmount": {
            "type": "string"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransferFee"
            }
          }
        },
        "description": "Fee and quota data from Interlace API"
      },
      "FeeAndQuotaResponse": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string"
          },
          "Message": {
            "type": "string"
          },
          "Data": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/FeeAndQuotaData"
              }
            ],
            "nullable": true
          }
        },
        "description": "Response model for withdrawal fee and quota information"
      },
      "FeeInfo": {
        "type": "object",
        "properties": {
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Type": {
            "type": "string"
          }
        },
        "description": "Fee information"
      },
      "FieldInfoDto": {
        "type": "object",
        "properties": {
          "FieldName": {
            "type": "string"
          },
          "ValidationRules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationRuleDto"
            },
            "nullable": true
          }
        }
      },
      "FileContentResult": {
        "type": "object",
        "properties": {
          "FileContents": {
            "type": "string",
            "format": "byte"
          },
          "ContentType": {
            "type": "string",
            "nullable": true
          },
          "FileDownloadName": {
            "type": "string",
            "nullable": true
          },
          "LastModified": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "EntityTag": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntityTagHeaderValue"
              }
            ],
            "nullable": true
          },
          "EnableRangeProcessing": {
            "type": "boolean"
          }
        }
      },
      "FileResult": {
        "type": "object",
        "properties": {
          "ContentType": {
            "type": "string",
            "nullable": true
          },
          "FileDownloadName": {
            "type": "string",
            "nullable": true
          },
          "LastModified": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "EntityTag": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntityTagHeaderValue"
              }
            ],
            "nullable": true
          },
          "EnableRangeProcessing": {
            "type": "boolean"
          }
        }
      },
      "FundAccountRequest": {
        "required": [
          "AccountId"
        ],
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "string",
            "description": "Equals account or budget ID to fund. Use AccountId from GET /api/v2/banking/accounts."
          },
          "BalanceId": {
            "type": "string",
            "description": "Optional provider balance ID returned with the account.",
            "nullable": true
          },
          "Currency": {
            "type": "string",
            "description": "Credit currency. Defaults to the selected account currency when omitted.",
            "nullable": true
          },
          "Amount": {
            "description": "Credit amount. Defaults to 100.00 when omitted."
          }
        }
      },
      "FundAccountResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "AccountId": {
            "type": "string"
          },
          "BudgetId": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Amount": {
            "type": "string"
          }
        }
      },
      "GateCheckoutRequest": {
        "type": "object",
        "properties": {
          "TermsAccepted": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "GeographicAnalyticsResponse": {
        "type": "object",
        "properties": {
          "RegionStats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RegionStatsResponse"
            }
          },
          "Period": {
            "type": "string"
          },
          "GeneratedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "GetCardTypeTierResponseV2": {
        "type": "object",
        "properties": {
          "CardTypeTiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardTypeTierV2"
            }
          }
        },
        "description": "Response containing card type tier with card type details"
      },
      "GetRefundGasFeeRequest": {
        "required": [
          "Currency",
          "Chain"
        ],
        "type": "object",
        "properties": {
          "Currency": {
            "type": "string"
          },
          "Chain": {
            "type": "string"
          }
        },
        "description": "Request model for getting refund gas fee"
      },
      "GetRefundGasFeeResponse": {
        "type": "object",
        "properties": {
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeeInfo"
            }
          },
          "Message": {
            "type": "string"
          }
        },
        "description": "Response model for refund gas fee"
      },
      "GetTiersResponseV2": {
        "type": "object",
        "properties": {
          "Tiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompanyTierV2"
            }
          }
        },
        "description": "Response containing company tiers"
      },
      "IFormFile": {
        "type": "string",
        "description": "Document file to upload for the EqualsMoney associated person.",
        "format": "binary"
      },
      "ImportJobResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Status": {
            "type": "string"
          },
          "FileName": {
            "type": "string"
          },
          "TotalRecords": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ProcessedRecords": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SuccessfulRecords": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FailedRecords": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "StartedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ErrorDetails": { }
        }
      },
      "InitiatePayoutRequest": {
        "required": [
          "CheckId",
          "PayeeId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "CheckId": {
            "type": "string",
            "description": "CheckId from POST /api/v2/banking/payouts/check. If the quote is refreshed on the OTP screen, send the latest quote/order ID here.\n\nCheckId returned by POST /api/v2/banking/payouts/check. When refreshing quotes during OTP, send the latest quote/order ID here."
          },
          "QuoteRequestId": {
            "type": "string",
            "description": "QuoteRequestId returned by POST /api/v2/banking/quotations.\n\nQuoteRequestId returned by POST /api/v2/banking/quotations.",
            "nullable": true
          },
          "PayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Local payee ID from the payee list endpoint.\n\nLocal payee ID from GET /api/v2/banking/payees.",
            "format": "int32"
          },
          "Amount": {
            "type": "string",
            "description": "Payout amount as a decimal string."
          },
          "Currency": {
            "type": "string",
            "description": "Payout currency, usually the payee currency."
          },
          "FromCurrency": {
            "maxLength": 3,
            "minLength": 3,
            "type": "string",
            "description": "Currency to fund the payout from. When omitted, the payout currency is used.\nThis must reflect the currency selected by the caller, because an Equals Money\nbudget can hold multiple currencies under the same budget ID.",
            "nullable": true
          },
          "BalanceId": {
            "type": "string",
            "description": "Optional provider balance or budget ID to fund the payout from.\n\nOptional provider balance or Equals Money budget ID used as funding source.",
            "nullable": true
          }
        }
      },
      "InterLaceCheck": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "KybIndustryOptionItem": {
        "type": "object",
        "properties": {
          "SubIndustries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "Key": {
            "type": "string"
          },
          "Value": {
            "type": "string"
          }
        }
      },
      "KybOnboardingOptionsResponse": {
        "type": "object",
        "properties": {
          "Markets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "BusinessTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "EmployeeCounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "AssociationTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "Industries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybIndustryOptionItem"
            }
          },
          "RequestedFeatures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "CardPurposes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "CardEstimatedAnnualSpendRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          },
          "CardCountRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KybOptionItem"
            }
          }
        }
      },
      "KybOptionItem": {
        "type": "object",
        "properties": {
          "Key": {
            "type": "string"
          },
          "Value": {
            "type": "string"
          }
        }
      },
      "KycLevelV2": {
        "enum": [
          "HOPPA_STAGING",
          "HOPPA_PRODUCTION",
          null
        ]
      },
      "KycSourceV2": {
        "enum": [
          "SUMSUB",
          "MANUAL",
          "API",
          "THIRD_PARTY",
          null
        ]
      },
      "KycStatusV2": {
        "enum": [
          "NOT_STARTED",
          "PENDING",
          "APPROVED",
          "REJECTED",
          "RETRY",
          "INITIATED",
          "SUBMITTED"
        ]
      },
      "KycTokenRequestV2": {
        "type": "object",
        "properties": {
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "nullable": true
          },
          "Nationality": {
            "type": "string",
            "nullable": true
          },
          "Ssn": {
            "pattern": "^\\d{9}$",
            "type": "string",
            "nullable": true
          },
          "Phone": {
            "type": "string",
            "nullable": true
          }
        },
        "description": "KYC token request for generating SumSub permalink"
      },
      "LocationInsightsResponse": {
        "type": "object",
        "properties": {
          "TopLocations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocationStatsResponse"
            }
          },
          "Period": {
            "type": "string"
          },
          "Metric": {
            "type": "string"
          },
          "GeneratedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "LocationStatsResponse": {
        "type": "object",
        "properties": {
          "Location": {
            "type": "string"
          },
          "Country": {
            "type": "string"
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "Value": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Rank": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PercentageOfTotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "LoyaltyProgramResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "PointValueRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PointValueCurrency": {
            "type": "string"
          },
          "Rules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoyaltyRuleResponse"
            }
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "LoyaltyRuleResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "RuleName": {
            "type": "string"
          },
          "RuleType": {
            "type": "string"
          },
          "PointsPerUnit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MinTransactionAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxTransactionAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MerchantCategory": {
            "type": "string",
            "nullable": true
          },
          "UserTier": {
            "type": "string",
            "nullable": true
          },
          "Priority": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Multiplier": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "LoyaltyRulesResponse": {
        "type": "object",
        "properties": {
          "Rules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoyaltyRuleResponse"
            }
          },
          "TotalCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "LoyaltyStatsResponse": {
        "type": "object",
        "properties": {
          "TotalUsers": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ActiveUsers": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPointsEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPointsRedeemed": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalTransactions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AveragePointsPerUser": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TierDistribution": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TierDistributionResponse"
            }
          },
          "MonthlyTrends": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonthlyTrendResponse"
            }
          }
        }
      },
      "MandateFrequencyV2": {
        "enum": [
          "ONE_TIME",
          "DAILY",
          "WEEKLY",
          "MONTHLY",
          "QUARTERLY",
          "YEARLY"
        ]
      },
      "MandateStatusV2": {
        "enum": [
          "PENDING",
          "ACTIVE",
          "SUSPENDED",
          "REVOKED",
          "EXPIRED"
        ]
      },
      "MassAssignVoucherRequest": {
        "required": [
          "VoucherId"
        ],
        "type": "object",
        "properties": {
          "VoucherId": {
            "type": "string",
            "format": "uuid"
          },
          "UserIds": {
            "maxItems": 10000,
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          "UserIdentifiers": {
            "maxItems": 10000,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "TierIds": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          "CardTypes": {
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "TransactionTypes": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "TransactionFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TransactionTo": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "MinimumCompletedTransactionVolume": {
            "maximum": 79228162514264337593543950335,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "TransactionCurrency": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "MasterToUserTransferPayloadV2": {
        "required": [
          "UserId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "MerchantCategoryStatsResponse": {
        "type": "object",
        "properties": {
          "Category": {
            "type": "string"
          },
          "MerchantCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Percentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "MerchantIdResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MerchantId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IdentifierType": {
            "type": "string"
          },
          "IdentifierValue": {
            "type": "string"
          },
          "Priority": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MerchantListResponse": {
        "type": "object",
        "properties": {
          "Merchants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MerchantResponse"
            }
          },
          "Pagination": {
            "$ref": "#/components/schemas/PaginationResponse"
          }
        }
      },
      "MerchantLoyaltyRuleResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "RuleName": {
            "type": "string"
          },
          "PointsPerUnit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Multiplier": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MinTransactionAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxTransactionAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MerchantResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "Category": {
            "type": "string",
            "nullable": true
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          },
          "IsPartner": {
            "type": "boolean"
          },
          "ContactEmail": {
            "type": "string",
            "nullable": true
          },
          "ContactPhone": {
            "type": "string",
            "nullable": true
          },
          "Address": {
            "type": "string",
            "nullable": true
          },
          "Website": {
            "type": "string",
            "nullable": true
          },
          "MerchantIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MerchantIdResponse"
            }
          },
          "LoyaltyRules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MerchantLoyaltyRuleResponse"
            }
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MerchantStats": {
        "type": "object",
        "properties": {
          "MerchantName": {
            "type": "string"
          },
          "TotalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        },
        "description": "Merchant statistics"
      },
      "MerchantStatsResponse": {
        "type": "object",
        "properties": {
          "TotalMerchants": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ActiveMerchants": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "InactiveMerchants": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PartnerMerchants": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalTransactions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalRevenue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AverageTransactionValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "CategoryStats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MerchantCategoryStatsResponse"
            }
          },
          "TopMerchants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TopMerchantResponse"
            }
          },
          "TopCategories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TopCategoryResponse"
            }
          },
          "Period": {
            "type": "string"
          },
          "StartDate": {
            "type": "string",
            "format": "date-time"
          },
          "EndDate": {
            "type": "string",
            "format": "date-time"
          },
          "GeneratedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MonthlyEarningResponse": {
        "type": "object",
        "properties": {
          "Month": {
            "type": "string"
          },
          "Year": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "MonthlyStatsResponse": {
        "type": "object",
        "properties": {
          "CurrentMonthEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PreviousMonthEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "GrowthPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "MonthlyTrendResponse": {
        "type": "object",
        "properties": {
          "Month": {
            "type": "string"
          },
          "PointsEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsRedeemed": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "MorAssignCardRequest": {
        "type": "object",
        "properties": {
          "AssignedUserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "MorCreateSimpleUserRequest": {
        "required": [
          "Email",
          "FirstName",
          "LastName",
          "Password"
        ],
        "type": "object",
        "properties": {
          "Email": {
            "type": "string"
          },
          "FirstName": {
            "type": "string"
          },
          "LastName": {
            "type": "string"
          },
          "Password": {
            "type": "string"
          }
        }
      },
      "MorEnsureCardholderRequest": {
        "type": "object",
        "properties": {
          "Dob": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "MorKybSubmissionRequest": {
        "required": [
          "CompanyName",
          "RegistrationNumber",
          "RegistrationCountry",
          "Industry",
          "Website"
        ],
        "type": "object",
        "properties": {
          "CompanyName": {
            "type": "string"
          },
          "RegistrationNumber": {
            "type": "string"
          },
          "RegistrationCountry": {
            "type": "string"
          },
          "Industry": {
            "type": "string"
          },
          "IncorporationDate": {
            "type": "string",
            "nullable": true
          },
          "Website": {
            "type": "string"
          },
          "BusinessDescription": {
            "type": "string",
            "nullable": true
          },
          "AddressLine1": {
            "type": "string",
            "nullable": true
          },
          "AddressLine2": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "State": {
            "type": "string",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "nullable": true
          },
          "PostalCode": {
            "type": "string",
            "nullable": true
          },
          "PhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "PhoneCountryCode": {
            "type": "string",
            "nullable": true
          },
          "UboInformation": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/MorKybUboInformationRequest"
              }
            ],
            "nullable": true
          },
          "Ubos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MorKybUboPersonRequest"
            },
            "nullable": true
          }
        }
      },
      "MorKybUboInformationRequest": {
        "required": [
          "UboFirstName",
          "UboLastName",
          "UboGender",
          "UboCountryCode",
          "UboIdType",
          "UboIdNumber",
          "UboDob"
        ],
        "type": "object",
        "properties": {
          "UboFirstName": {
            "type": "string"
          },
          "UboLastName": {
            "type": "string"
          },
          "UboGender": {
            "type": "string"
          },
          "UboCountryCode": {
            "type": "string"
          },
          "UboIdType": {
            "type": "string"
          },
          "UboIdNumber": {
            "type": "string"
          },
          "UboDob": {
            "type": "string"
          }
        }
      },
      "MorKybUboPersonRequest": {
        "required": [
          "FirstName",
          "LastName"
        ],
        "type": "object",
        "properties": {
          "FirstName": {
            "type": "string"
          },
          "LastName": {
            "type": "string"
          },
          "Dob": {
            "type": "string",
            "nullable": true
          },
          "Nationality": {
            "type": "string",
            "nullable": true
          },
          "OwnershipPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "IdNumber": {
            "type": "string",
            "nullable": true
          },
          "Gender": {
            "type": "string",
            "nullable": true
          },
          "CountryCode": {
            "type": "string",
            "nullable": true
          },
          "IdType": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "MorOrderCardsRequest": {
        "type": "object",
        "properties": {
          "CardTypeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "card_type_tiers.id, same value used by dashboard cards/order.",
            "format": "int32"
          },
          "Quantity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AutoLockEnabled": {
            "type": "boolean"
          },
          "LabelPrefix": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "MorPublicCardFundingRequest": {
        "type": "object",
        "properties": {
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "OccupationCode": {
        "type": "object",
        "properties": {
          "Value": {
            "type": "string",
            "description": "The SOC code value (e.g., \"11-1011\")"
          },
          "Title": {
            "type": "string",
            "description": "The occupation title/description"
          },
          "MajorGroup": {
            "type": "string",
            "description": "Optional major group category for organization",
            "nullable": true
          },
          "MinorGroup": {
            "type": "string",
            "description": "Optional minor group category for organization",
            "nullable": true
          }
        },
        "description": "Represents a Standard Occupational Classification (SOC) code entry"
      },
      "OpenCryptoVirtualAccountResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "Results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoVirtualAccountProviderResult"
            }
          }
        }
      },
      "OtpResendRequest": {
        "type": "object",
        "properties": {
          "VerificationToken": {
            "type": "string",
            "description": "Verification token received when OTP was initiated"
          }
        },
        "description": "Request to resend OTP code"
      },
      "OtpResendResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "description": "Response from OTP resend"
      },
      "OtpVerifyRequest": {
        "type": "object",
        "properties": {
          "VerificationToken": {
            "type": "string",
            "description": "Verification token received when OTP was initiated"
          },
          "OtpCode": {
            "type": "string",
            "description": "8-digit OTP code from email"
          }
        },
        "description": "Request to verify OTP code"
      },
      "OtpVerifyResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "VerificationToken": {
            "type": "string",
            "nullable": true
          },
          "RemainingAttempts": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsExpired": {
            "type": "boolean"
          },
          "IsLocked": {
            "type": "boolean"
          }
        },
        "description": "Response from OTP verification"
      },
      "PaginatedTransactionResponse": {
        "type": "object",
        "properties": {
          "Data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransactionSummary"
            }
          },
          "Pagination": {
            "$ref": "#/components/schemas/PaginationInfo"
          },
          "Stats": {
            "$ref": "#/components/schemas/TransactionSummaryStats"
          }
        },
        "description": "Response model for paginated transactions"
      },
      "PaginationInfo": {
        "type": "object",
        "properties": {
          "Page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPages": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "HasPrevious": {
            "type": "boolean"
          },
          "HasNext": {
            "type": "boolean"
          }
        },
        "description": "Pagination information"
      },
      "PaginationResponse": {
        "type": "object",
        "properties": {
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageNumber": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPages": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "PayeeAddressDto": {
        "type": "object",
        "properties": {
          "Country": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "State": {
            "type": "string",
            "nullable": true
          },
          "PostalCode": {
            "type": "string",
            "nullable": true
          },
          "AddressLine1": {
            "type": "string",
            "nullable": true
          },
          "AddressLine2": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PayeeConfirmRequest": {
        "required": [
          "VerificationToken"
        ],
        "type": "object",
        "properties": {
          "VerificationToken": {
            "type": "string"
          }
        }
      },
      "PayeeInitiateResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "VerificationToken": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string"
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "RecipientName": {
            "type": "string",
            "nullable": true
          },
          "AccountNumberLast4": {
            "type": "string",
            "nullable": true
          },
          "VerificationResult": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayeeVerificationResult"
              }
            ],
            "nullable": true
          }
        }
      },
      "PayeeRequiredFieldDto": {
        "type": "object",
        "properties": {
          "PaymentMethod": {
            "enum": [
              "SWIFT",
              "SEPA.INSTANT",
              "SEPA.CREDITTRANSFER",
              "CHAPS",
              "UKFPS",
              "ACH",
              "WIRETRANSFER",
              "OFF_PLATFORM"
            ],
            "type": "string",
            "description": "Available options: SWIFT, SEPA.INSTANT, SEPA.CREDITTRANSFER, CHAPS, UKFPS, ACH, WIRETRANSFER, OFF_PLATFORM."
          },
          "Fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FieldInfoDto"
            },
            "nullable": true
          }
        }
      },
      "PayeeRequiredFieldsResponse": {
        "type": "object",
        "properties": {
          "Data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PayeeRequiredFieldDto"
            }
          }
        }
      },
      "PayeeResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalId": {
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string"
          },
          "UserName": {
            "type": "string"
          },
          "PaymentType": {
            "type": "string"
          },
          "PaymentMethod": {
            "type": "string",
            "nullable": true
          },
          "Currency": {
            "type": "string"
          },
          "AccountNumber": {
            "type": "string"
          },
          "BankName": {
            "type": "string",
            "nullable": true
          },
          "RoutingCodeList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingCodeDto"
            },
            "nullable": true
          },
          "routingCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingCodeDto"
            },
            "description": "Dashboard/public API alias for RoutingCodeList.",
            "nullable": true
          },
          "BankAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayeeAddressDto"
              }
            ],
            "nullable": true
          },
          "PayeeAddress": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayeeAddressDto"
              }
            ],
            "nullable": true
          },
          "Comments": {
            "type": "string",
            "nullable": true
          },
          "Provider": {
            "type": "string",
            "nullable": true
          },
          "RequiresConfirmation": {
            "type": "boolean"
          },
          "Status": {
            "type": "string"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PayeeVerificationResult": {
        "type": "object",
        "properties": {
          "Status": {
            "type": "string",
            "nullable": true
          },
          "Title": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ReasonCode": {
            "type": "string",
            "nullable": true
          },
          "NameMatch": {
            "type": "boolean",
            "nullable": true
          },
          "CanProceed": {
            "type": "boolean"
          }
        }
      },
      "PaymentDetails": {
        "type": "object",
        "properties": {
          "PaymentMethod": {
            "type": "string"
          },
          "WalletAddress": {
            "type": "string",
            "nullable": true
          },
          "TransactionId": {
            "type": "string",
            "nullable": true
          },
          "AmountPaid": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "PaymentDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ProcessedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PaymentStatus": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "FailureReason": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PaymentMandateCreateV2": {
        "required": [
          "UserId",
          "MaxAmount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaxAmount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Frequency": {
            "$ref": "#/components/schemas/MandateFrequencyV2"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "StartDate": {
            "type": "string",
            "nullable": true
          },
          "EndDate": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "PaymentMandateListResponseV2": {
        "type": "object",
        "properties": {
          "Mandates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentMandateResponseV2"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageNumber": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPages": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "PaymentMandateResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaxAmount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Frequency": {
            "$ref": "#/components/schemas/MandateFrequencyV2"
          },
          "Status": {
            "$ref": "#/components/schemas/MandateStatusV2"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "StartDate": {
            "type": "string",
            "nullable": true
          },
          "EndDate": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string"
          }
        }
      },
      "PaymentMandateRevokeV2": {
        "type": "object",
        "properties": {
          "Reason": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PaymentRequestCancelV2": {
        "type": "object",
        "properties": {
          "Reason": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PaymentRequestCreateV2": {
        "required": [
          "UserId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "CallbackUrl": {
            "type": "string",
            "nullable": true
          },
          "SuccessUrl": {
            "type": "string",
            "nullable": true
          },
          "FailureUrl": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "PaymentRequestListResponseV2": {
        "type": "object",
        "properties": {
          "PaymentRequests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentRequestResponseV2"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageNumber": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPages": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "PaymentRequestResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "$ref": "#/components/schemas/PaymentStatusV2"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "CallbackUrl": {
            "type": "string",
            "nullable": true
          },
          "SuccessUrl": {
            "type": "string",
            "nullable": true
          },
          "FailureUrl": {
            "type": "string",
            "nullable": true
          },
          "PaymentUrl": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string"
          },
          "CompletedAt": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PaymentResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Status": {
            "type": "string"
          },
          "Message": {
            "type": "string"
          },
          "TransactionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "TransferId": {
            "type": "string",
            "nullable": true
          },
          "ExchangeQuote": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExchangeQuote"
              }
            ],
            "nullable": true
          },
          "ExchangeTradeId": {
            "type": "string",
            "nullable": true
          },
          "RequiredAmount": {
            "type": "string",
            "nullable": true
          },
          "AvailableAmount": {
            "type": "string",
            "nullable": true
          },
          "Shortfall": {
            "type": "string",
            "nullable": true
          },
          "TransakOrder": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TransakOrderInfo"
              }
            ],
            "nullable": true
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MandateId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          }
        }
      },
      "PaymentsInformationRequest": {
        "type": "object",
        "properties": {
          "Purposes": {
            "type": "array",
            "items": {
              "enum": [
                "PAYING_SUPPLIERS",
                "PAYING_CONTRACTORS_OR_EMPLOYEES",
                "TRANSFERRING_MONEY_WITHIN_THE_COMPANY_OR_GROUP",
                "PAYING_A_MORTGAGE_BANK_LOAN_INSURANCE_OR_CREDIT",
                "PAYING_TAX_ON_PROFIT_OR_PROPERTY",
                "DISTRIBUTING_COMPANY_PROFITS_OR_PAYING_DIVIDENDS",
                "INVESTING_IN_FUNDS_STOCKS_BONDS_OR_SIMILAR",
                "SENDING_DONATIONS",
                "INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES"
              ],
              "type": "string"
            },
            "description": "Possible values: PAYING_SUPPLIERS, PAYING_CONTRACTORS_OR_EMPLOYEES, TRANSFERRING_MONEY_WITHIN_THE_COMPANY_OR_GROUP, PAYING_A_MORTGAGE_BANK_LOAN_INSURANCE_OR_CREDIT, PAYING_TAX_ON_PROFIT_OR_PROPERTY, DISTRIBUTING_COMPANY_PROFITS_OR_PAYING_DIVIDENDS, INVESTING_IN_FUNDS_STOCKS_BONDS_OR_SIMILAR, SENDING_DONATIONS, INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES."
          },
          "AccountFundingSource": {
            "type": "array",
            "items": {
              "enum": [
                "RECEIVING_FUNDS_FROM_OWN_ACCOUNTS",
                "RECEIVING_PAYMENTS_FROM_CLIENTS",
                "RECEIVING_THIRD_PARTY_INVESTMENTS",
                "RECEIVING_DONATIONS",
                "PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING",
                "RECEIVING_FUNDS_FROM_SUBSIDIARIES_AND_PARENT_COMPANIES",
                "OTHER"
              ],
              "type": "string"
            },
            "description": "Possible values: RECEIVING_FUNDS_FROM_OWN_ACCOUNTS, RECEIVING_PAYMENTS_FROM_CLIENTS, RECEIVING_THIRD_PARTY_INVESTMENTS, RECEIVING_DONATIONS, PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING, RECEIVING_FUNDS_FROM_SUBSIDIARIES_AND_PARENT_COMPANIES, OTHER.",
            "nullable": true
          },
          "EstimatedPaymentCount": {
            "enum": [
              "FEWER-THAN-5-PAYMENTS",
              "5-20",
              "20-50",
              "50-100",
              "100-500",
              "500"
            ],
            "type": "string",
            "description": "Possible values: FEWER-THAN-5-PAYMENTS, 5-20, 20-50, 50-100, 100-500, 500."
          },
          "EstimatedPaymentVolume": {
            "enum": [
              "0-10000",
              "10001-50000",
              "50001-100000",
              "100001-250000",
              "250001-1000000",
              "1000001-5000000",
              "5000000+"
            ],
            "type": "string",
            "description": "Possible values: 0-10000, 10001-50000, 50001-100000, 100001-250000, 250001-1000000, 1000001-5000000, 5000000+."
          },
          "InboundCurrencies": {
            "type": "array",
            "items": {
              "enum": [
                "AED",
                "AFN",
                "ALL",
                "AMD",
                "ANG",
                "AOA",
                "ARS",
                "AUD",
                "AWG",
                "AZN",
                "BAM",
                "BBD",
                "BDT",
                "BGN",
                "BHD",
                "BIF",
                "BMD",
                "BND",
                "BOB",
                "BOV",
                "BRL",
                "BSD",
                "BTN",
                "BWP",
                "BYN",
                "BZD",
                "CAD",
                "CDF",
                "CHF",
                "CLP",
                "CNY",
                "COP",
                "CRC",
                "CUC",
                "CUP",
                "CVE",
                "CZK",
                "DJF",
                "DKK",
                "DOP",
                "DZD",
                "EGP",
                "ERN",
                "ETB",
                "EUR",
                "FJD",
                "FKP",
                "GBP",
                "GEL",
                "GGP",
                "GHS",
                "GIP",
                "GMD",
                "GNF",
                "GTQ",
                "GYD",
                "HKD",
                "HNL",
                "HRK",
                "HTG",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "IQD",
                "IRR",
                "ISK",
                "JMD",
                "JOD",
                "JPY",
                "KES",
                "KGS",
                "KHR",
                "KMF",
                "KPW",
                "KRW",
                "KWD",
                "KYD",
                "KZT",
                "LAK",
                "LBP",
                "LKR",
                "LRD",
                "LSL",
                "LTL",
                "LVL",
                "LYD",
                "MAD",
                "MDL",
                "MGA",
                "MKD",
                "MMK",
                "MNT",
                "MOP",
                "MUR",
                "MVR",
                "MWK",
                "MXN",
                "MYR",
                "MZN",
                "NAD",
                "NGN",
                "NIO",
                "NOK",
                "NPR",
                "NZD",
                "OMR",
                "PAB",
                "PEN",
                "PGK",
                "PHP",
                "PKR",
                "PLN",
                "PYG",
                "QAR",
                "RON",
                "RSD",
                "RUB",
                "RWF",
                "SAR",
                "SBD",
                "SCR",
                "SEK",
                "SGD",
                "SHN",
                "SLL",
                "SOS",
                "SRD",
                "SSP",
                "STN",
                "SYP",
                "SZL",
                "THB",
                "TJS",
                "TMT",
                "TND",
                "TOP",
                "TRY",
                "TTD",
                "TWD",
                "TZS",
                "UAH",
                "UGX",
                "USD",
                "UYU",
                "UZS",
                "VND",
                "VUV",
                "WST",
                "XAF",
                "XAG",
                "XAU",
                "XCD",
                "XOF",
                "XPD",
                "XPF",
                "XPT",
                "YER",
                "ZAR",
                "ZMK",
                "ZMW",
                "ZWD"
              ],
              "type": "string"
            },
            "description": "Possible values: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BOV, BRL, BSD, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SEK, SGD, SHN, SLL, SOS, SRD, SSP, STN, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VND, VUV, WST, XAF, XAG, XAU, XCD, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW, ZWD."
          },
          "OutboundCurrencies": {
            "type": "array",
            "items": {
              "enum": [
                "AED",
                "AFN",
                "ALL",
                "AMD",
                "ANG",
                "AOA",
                "ARS",
                "AUD",
                "AWG",
                "AZN",
                "BAM",
                "BBD",
                "BDT",
                "BGN",
                "BHD",
                "BIF",
                "BMD",
                "BND",
                "BOB",
                "BOV",
                "BRL",
                "BSD",
                "BTN",
                "BWP",
                "BYN",
                "BZD",
                "CAD",
                "CDF",
                "CHF",
                "CLP",
                "CNY",
                "COP",
                "CRC",
                "CUC",
                "CUP",
                "CVE",
                "CZK",
                "DJF",
                "DKK",
                "DOP",
                "DZD",
                "EGP",
                "ERN",
                "ETB",
                "EUR",
                "FJD",
                "FKP",
                "GBP",
                "GEL",
                "GGP",
                "GHS",
                "GIP",
                "GMD",
                "GNF",
                "GTQ",
                "GYD",
                "HKD",
                "HNL",
                "HRK",
                "HTG",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "IQD",
                "IRR",
                "ISK",
                "JMD",
                "JOD",
                "JPY",
                "KES",
                "KGS",
                "KHR",
                "KMF",
                "KPW",
                "KRW",
                "KWD",
                "KYD",
                "KZT",
                "LAK",
                "LBP",
                "LKR",
                "LRD",
                "LSL",
                "LTL",
                "LVL",
                "LYD",
                "MAD",
                "MDL",
                "MGA",
                "MKD",
                "MMK",
                "MNT",
                "MOP",
                "MUR",
                "MVR",
                "MWK",
                "MXN",
                "MYR",
                "MZN",
                "NAD",
                "NGN",
                "NIO",
                "NOK",
                "NPR",
                "NZD",
                "OMR",
                "PAB",
                "PEN",
                "PGK",
                "PHP",
                "PKR",
                "PLN",
                "PYG",
                "QAR",
                "RON",
                "RSD",
                "RUB",
                "RWF",
                "SAR",
                "SBD",
                "SCR",
                "SEK",
                "SGD",
                "SHN",
                "SLL",
                "SOS",
                "SRD",
                "SSP",
                "STN",
                "SYP",
                "SZL",
                "THB",
                "TJS",
                "TMT",
                "TND",
                "TOP",
                "TRY",
                "TTD",
                "TWD",
                "TZS",
                "UAH",
                "UGX",
                "USD",
                "UYU",
                "UZS",
                "VND",
                "VUV",
                "WST",
                "XAF",
                "XAG",
                "XAU",
                "XCD",
                "XOF",
                "XPD",
                "XPF",
                "XPT",
                "YER",
                "ZAR",
                "ZMK",
                "ZMW",
                "ZWD"
              ],
              "type": "string"
            },
            "description": "Possible values: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BOV, BRL, BSD, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SEK, SGD, SHN, SLL, SOS, SRD, SSP, STN, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VND, VUV, WST, XAF, XAG, XAU, XCD, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW, ZWD."
          },
          "ReceivingCountries": {
            "type": "array",
            "items": {
              "enum": [
                "AD",
                "AE",
                "AF",
                "AG",
                "AI",
                "AL",
                "AM",
                "AO",
                "AQ",
                "AR",
                "AS",
                "AT",
                "AU",
                "AW",
                "AX",
                "AZ",
                "BA",
                "BB",
                "BD",
                "BE",
                "BF",
                "BG",
                "BH",
                "BI",
                "BJ",
                "BL",
                "BM",
                "BN",
                "BO",
                "BQ",
                "BR",
                "BS",
                "BT",
                "BV",
                "BW",
                "BY",
                "BZ",
                "CA",
                "CC",
                "CD",
                "CF",
                "CG",
                "CH",
                "CI",
                "CK",
                "CL",
                "CM",
                "CN",
                "CO",
                "CR",
                "CU",
                "CV",
                "CW",
                "CX",
                "CY",
                "CZ",
                "DE",
                "DJ",
                "DK",
                "DM",
                "DO",
                "DZ",
                "EC",
                "EE",
                "EG",
                "EH",
                "ER",
                "ES",
                "ET",
                "FI",
                "FJ",
                "FK",
                "FM",
                "FO",
                "FR",
                "GA",
                "GB",
                "GD",
                "GE",
                "GF",
                "GG",
                "GH",
                "GI",
                "GL",
                "GM",
                "GN",
                "GP",
                "GQ",
                "GR",
                "GS",
                "GT",
                "GU",
                "GW",
                "GY",
                "HK",
                "HM",
                "HN",
                "HR",
                "HT",
                "HU",
                "ID",
                "IE",
                "IL",
                "IM",
                "IN",
                "IO",
                "IQ",
                "IR",
                "IS",
                "IT",
                "JE",
                "JM",
                "JO",
                "JP",
                "KE",
                "KG",
                "KH",
                "KI",
                "KM",
                "KN",
                "KP",
                "KR",
                "KW",
                "KY",
                "KZ",
                "LA",
                "LB",
                "LC",
                "LI",
                "LK",
                "LR",
                "LS",
                "LT",
                "LU",
                "LV",
                "LY",
                "MA",
                "MC",
                "MD",
                "ME",
                "MF",
                "MG",
                "MH",
                "MK",
                "ML",
                "MM",
                "MN",
                "MO",
                "MP",
                "MQ",
                "MR",
                "MS",
                "MT",
                "MU",
                "MV",
                "MW",
                "MX",
                "MY",
                "MZ",
                "NA",
                "NC",
                "NE",
                "NF",
                "NG",
                "NI",
                "NL",
                "NO",
                "NP",
                "NR",
                "NU",
                "NZ",
                "OM",
                "PA",
                "PE",
                "PF",
                "PG",
                "PH",
                "PK",
                "PL",
                "PM",
                "PN",
                "PR",
                "PS",
                "PT",
                "PW",
                "PY",
                "QA",
                "RE",
                "RO",
                "RS",
                "RU",
                "RW",
                "SA",
                "SB",
                "SC",
                "SD",
                "SE",
                "SG",
                "SH",
                "SI",
                "SJ",
                "SK",
                "SL",
                "SM",
                "SN",
                "SO",
                "SR",
                "SS",
                "ST",
                "SV",
                "SX",
                "SY",
                "SZ",
                "TC",
                "TD",
                "TF",
                "TG",
                "TH",
                "TJ",
                "TK",
                "TL",
                "TM",
                "TN",
                "TO",
                "TR",
                "TT",
                "TV",
                "TW",
                "TZ",
                "UA",
                "UG",
                "UM",
                "US",
                "UY",
                "UZ",
                "VA",
                "VC",
                "VE",
                "VG",
                "VI",
                "VN",
                "VU",
                "WF",
                "WS",
                "XK",
                "YE",
                "YT",
                "ZA",
                "ZM",
                "ZW"
              ],
              "type": "string"
            },
            "description": "Possible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
          },
          "SendingCountries": {
            "type": "array",
            "items": {
              "enum": [
                "AD",
                "AE",
                "AF",
                "AG",
                "AI",
                "AL",
                "AM",
                "AO",
                "AQ",
                "AR",
                "AS",
                "AT",
                "AU",
                "AW",
                "AX",
                "AZ",
                "BA",
                "BB",
                "BD",
                "BE",
                "BF",
                "BG",
                "BH",
                "BI",
                "BJ",
                "BL",
                "BM",
                "BN",
                "BO",
                "BQ",
                "BR",
                "BS",
                "BT",
                "BV",
                "BW",
                "BY",
                "BZ",
                "CA",
                "CC",
                "CD",
                "CF",
                "CG",
                "CH",
                "CI",
                "CK",
                "CL",
                "CM",
                "CN",
                "CO",
                "CR",
                "CU",
                "CV",
                "CW",
                "CX",
                "CY",
                "CZ",
                "DE",
                "DJ",
                "DK",
                "DM",
                "DO",
                "DZ",
                "EC",
                "EE",
                "EG",
                "EH",
                "ER",
                "ES",
                "ET",
                "FI",
                "FJ",
                "FK",
                "FM",
                "FO",
                "FR",
                "GA",
                "GB",
                "GD",
                "GE",
                "GF",
                "GG",
                "GH",
                "GI",
                "GL",
                "GM",
                "GN",
                "GP",
                "GQ",
                "GR",
                "GS",
                "GT",
                "GU",
                "GW",
                "GY",
                "HK",
                "HM",
                "HN",
                "HR",
                "HT",
                "HU",
                "ID",
                "IE",
                "IL",
                "IM",
                "IN",
                "IO",
                "IQ",
                "IR",
                "IS",
                "IT",
                "JE",
                "JM",
                "JO",
                "JP",
                "KE",
                "KG",
                "KH",
                "KI",
                "KM",
                "KN",
                "KP",
                "KR",
                "KW",
                "KY",
                "KZ",
                "LA",
                "LB",
                "LC",
                "LI",
                "LK",
                "LR",
                "LS",
                "LT",
                "LU",
                "LV",
                "LY",
                "MA",
                "MC",
                "MD",
                "ME",
                "MF",
                "MG",
                "MH",
                "MK",
                "ML",
                "MM",
                "MN",
                "MO",
                "MP",
                "MQ",
                "MR",
                "MS",
                "MT",
                "MU",
                "MV",
                "MW",
                "MX",
                "MY",
                "MZ",
                "NA",
                "NC",
                "NE",
                "NF",
                "NG",
                "NI",
                "NL",
                "NO",
                "NP",
                "NR",
                "NU",
                "NZ",
                "OM",
                "PA",
                "PE",
                "PF",
                "PG",
                "PH",
                "PK",
                "PL",
                "PM",
                "PN",
                "PR",
                "PS",
                "PT",
                "PW",
                "PY",
                "QA",
                "RE",
                "RO",
                "RS",
                "RU",
                "RW",
                "SA",
                "SB",
                "SC",
                "SD",
                "SE",
                "SG",
                "SH",
                "SI",
                "SJ",
                "SK",
                "SL",
                "SM",
                "SN",
                "SO",
                "SR",
                "SS",
                "ST",
                "SV",
                "SX",
                "SY",
                "SZ",
                "TC",
                "TD",
                "TF",
                "TG",
                "TH",
                "TJ",
                "TK",
                "TL",
                "TM",
                "TN",
                "TO",
                "TR",
                "TT",
                "TV",
                "TW",
                "TZ",
                "UA",
                "UG",
                "UM",
                "US",
                "UY",
                "UZ",
                "VA",
                "VC",
                "VE",
                "VG",
                "VI",
                "VN",
                "VU",
                "WF",
                "WS",
                "XK",
                "YE",
                "YT",
                "ZA",
                "ZM",
                "ZW"
              ],
              "type": "string"
            },
            "description": "Possible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW."
          }
        }
      },
      "PaymentStatusV2": {
        "enum": [
          "PENDING",
          "PROCESSING",
          "COMPLETED",
          "FAILED",
          "CANCELLED",
          "CONFIRMED"
        ]
      },
      "PayoutFeeDto": {
        "type": "object",
        "properties": {
          "Currency": {
            "type": "string"
          },
          "Amount": {
            "type": "string"
          },
          "FeeType": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "PayoutInitiateResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean",
            "description": "Indicates whether OTP initiation succeeded."
          },
          "VerificationToken": {
            "type": "string",
            "description": "Token for this payout approval. Verify it with the OTP endpoint, then pass it to POST /api/v2/banking/payouts.",
            "nullable": true
          },
          "Message": {
            "type": "string"
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "RecipientName": {
            "type": "string",
            "nullable": true
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PayoutListResponse": {
        "type": "object",
        "properties": {
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "List": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PayoutResponse"
            }
          }
        }
      },
      "PayoutRefundDto": {
        "type": "object",
        "properties": {
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          }
        }
      },
      "PayoutRequestCreateV2": {
        "required": [
          "UserId",
          "Amount",
          "Currency",
          "DestinationAddress"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "DestinationAddress": {
            "type": "string"
          },
          "DestinationTag": {
            "type": "string",
            "nullable": true
          },
          "Network": {
            "type": "string",
            "nullable": true
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "PayoutResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalId": {
            "type": "string"
          },
          "ClientTransactionId": {
            "type": "string"
          },
          "BusinessId": {
            "type": "string",
            "nullable": true
          },
          "BusinessTypeCode": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "BalanceId": {
            "type": "string",
            "nullable": true
          },
          "PayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FromAmount": {
            "type": "string"
          },
          "FromCurrency": {
            "type": "string"
          },
          "ToAmount": {
            "type": "string"
          },
          "ToCurrency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "Refund": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayoutRefundDto"
              }
            ],
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PayoutFeeDto"
            },
            "nullable": true
          }
        }
      },
      "PayoutResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "DestinationAddress": {
            "type": "string"
          },
          "DestinationTag": {
            "type": "string",
            "nullable": true
          },
          "Network": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "$ref": "#/components/schemas/PaymentStatusV2"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "TransactionId": {
            "type": "string",
            "nullable": true
          },
          "TransactionHash": {
            "type": "string",
            "nullable": true
          },
          "Fee": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string"
          },
          "CompletedAt": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PointAssignmentStatsResponse": {
        "type": "object",
        "properties": {
          "LoyaltyProgramId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Period": {
            "type": "string"
          },
          "StartDate": {
            "type": "string",
            "format": "date-time"
          },
          "EndDate": {
            "type": "string",
            "format": "date-time"
          },
          "TotalAssignments": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPointsAssigned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalReversals": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPointsReversed": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AveragePointsPerTransaction": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "SourceBreakdown": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssignmentSourceStatsResponse"
            }
          },
          "DailyStats": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DailyAssignmentStatsResponse"
            }
          },
          "GeneratedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PointCalculationRequest": {
        "required": [
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "Amount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "maxLength": 3,
            "type": "string"
          },
          "MerchantCategory": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "UserTier": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "TransactionTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "PointCalculationResponse": {
        "type": "object",
        "properties": {
          "TotalPoints": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "AppliedRules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AppliedRuleResponse"
            }
          },
          "Breakdown": {
            "$ref": "#/components/schemas/CalculationBreakdownResponse"
          }
        }
      },
      "PointTransactionResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionType": {
            "type": "string"
          },
          "Points": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Description": {
            "type": "string"
          },
          "Source": {
            "type": "string"
          },
          "SourceTransactionId": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ProcessedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Metadata": { }
        }
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "ProcessCardTransactionRequest": {
        "required": [
          "UserId",
          "TransactionId",
          "TransactionAmount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionId": {
            "maxLength": 255,
            "type": "string"
          },
          "TransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "maxLength": 3,
            "type": "string"
          },
          "MerchantName": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "MerchantCategory": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "MerchantId": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "UserTier": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "Source": {
            "maxLength": 100,
            "type": "string"
          },
          "TransactionTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Metadata": { }
        }
      },
      "ProcessPaymentRequestRequest": {
        "required": [
          "UserId",
          "PaymentRequestId",
          "TransactionAmount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PaymentRequestId": {
            "maxLength": 255,
            "type": "string"
          },
          "TransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "maxLength": 3,
            "type": "string"
          },
          "PaymentMethod": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "MerchantName": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "MerchantCategory": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "MerchantId": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "UserTier": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "Source": {
            "maxLength": 100,
            "type": "string"
          },
          "TransactionTimestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Metadata": { }
        }
      },
      "ProviderKycStatusV2": {
        "type": "object",
        "properties": {
          "Provider": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Approved": {
            "type": "boolean"
          },
          "ExternalId": {
            "type": "string",
            "nullable": true
          },
          "LastUpdated": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "ProviderPayeeResult": {
        "type": "object",
        "properties": {
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "Success": {
            "type": "boolean"
          },
          "ExternalPayeeId": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PublicBoomFiAcceptExchangeQuoteRequest": {
        "required": [
          "QuoteId"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "QuoteId": {
            "type": "string"
          }
        }
      },
      "PublicBoomFiExchangeQuoteRequest": {
        "required": [
          "SellCurrency",
          "BuyCurrency",
          "SellAmount"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SellCurrency": {
            "type": "string"
          },
          "BuyCurrency": {
            "type": "string"
          },
          "SellAmount": {
            "type": "string"
          },
          "DepositAccountId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "SettlementAccountId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64"
          },
          "SellChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "SellTokenAddress": {
            "type": "string",
            "nullable": true
          },
          "BuyChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "BuyTokenAddress": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "PublicBoomFiInterlaceToEqualsConfirmRequest": {
        "required": [
          "VerificationToken",
          "OtpCode"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "VerificationToken": {
            "type": "string"
          },
          "OtpCode": {
            "type": "string"
          }
        }
      },
      "PublicBoomFiInterlaceToEqualsInitiateRequest": {
        "required": [
          "Reference"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AccountRef": {
            "type": "string",
            "nullable": true
          },
          "BoomFiAccountId": {
            "type": "string",
            "nullable": true
          },
          "SettlementAccountId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64",
            "nullable": true
          },
          "Reference": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "enum": [
              1,
              -200,
              137,
              42161
            ],
            "description": "BoomFi chain IDs: Ethereum 1, Tron -200, Polygon 137, Arbitrum 42161.\n\nPossible values: 1, -200, 137, 42161.",
            "format": "int32"
          },
          "Currency": {
            "enum": [
              "USDC",
              "USDT"
            ],
            "type": "string",
            "description": "Crypto asset withdrawn from Interlace and deposited into BoomFi.\n\nPossible values: USDC, USDT.",
            "nullable": true
          },
          "CryptoAmount": {
            "type": "string",
            "nullable": true
          },
          "FiatCurrency": {
            "enum": [
              "USD",
              "EUR",
              "GBP"
            ],
            "type": "string",
            "description": "Fiat settlement currency credited to EqualsMoney.\n\nPossible values: USD, EUR, GBP.",
            "nullable": true
          },
          "TargetBudgetId": {
            "type": "string",
            "description": "Optional EqualsMoney budget to credit. When omitted, the service selects the user's budget that supports FiatCurrency.",
            "nullable": true
          }
        }
      },
      "PublicBoomFiRampQuoteRequest": {
        "required": [
          "CryptoCurrency",
          "FiatCurrency",
          "CryptoAmount"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AccountId": {
            "type": "string",
            "description": "BoomFi virtual parent account ID used as the source account for the dry-run quote.",
            "nullable": true
          },
          "AccountReference": {
            "type": "string",
            "nullable": true
          },
          "SettlementAccountId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64",
            "nullable": true
          },
          "CryptoCurrency": {
            "type": "string",
            "description": "Digital currency held in the user's BoomFi organisation."
          },
          "FiatCurrency": {
            "type": "string",
            "description": "Target fiat currency. Pricing is returned by BoomFi Quick Trade with dry_run=true and is net of all BoomFi and network fees."
          },
          "CryptoAmount": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "PublicBoomFiTransferDecisionRequest": {
        "required": [
          "Decision"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Decision": {
            "type": "string"
          }
        }
      },
      "PublicCreateCryptoDepositAddressRequest": {
        "required": [
          "crypto_currency",
          "chain_id"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "crypto_currency": {
            "enum": [
              "USDC",
              "USDT"
            ],
            "type": "string",
            "description": "Possible values: USDC, USDT.\n\nDigital currency returned by GET /api/v2/crypto-virtual-accounts/trading-overview for the selected ready chain sub-account."
          },
          "chain_id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "enum": [
              1,
              -200,
              137,
              42161
            ],
            "description": "BoomFi chain IDs: Ethereum 1, Tron -200, Polygon 137, Arbitrum 42161.\n\nPossible values: 1, -200, 137, 42161.",
            "format": "int32"
          }
        }
      },
      "PublicEqualsToInterlaceRequest": {
        "required": [
          "IdempotencyKey",
          "UserId",
          "FiatCurrency",
          "Amount",
          "BudgetId"
        ],
        "type": "object",
        "properties": {
          "IdempotencyKey": {
            "maxLength": 128,
            "minLength": 8,
            "type": "string"
          },
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FiatCurrency": {
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Za-z]{3}$",
            "type": "string",
            "description": "Fiat source currency. BoomFi must return matching bank funding instructions and fiat-to-crypto balances for the user's organisation."
          },
          "Amount": {
            "maximum": 79228162514264337593543950335,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "BudgetId": {
            "type": "string",
            "description": "EqualsMoney source budget debited to fund the user's BoomFi fiat account."
          }
        }
      },
      "PublicEqualsToInterlaceResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "Reference": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "BudgetId": {
            "type": "string"
          },
          "FiatCurrency": {
            "type": "string"
          },
          "FiatAmount": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "EstimatedCryptoAmount": {
            "type": "string"
          },
          "EstimatedFeeAmount": {
            "type": "string"
          },
          "Rate": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Chain": {
            "type": "string"
          },
          "DepositAddress": {
            "type": "string"
          },
          "BoomFiPayout": { }
        }
      },
      "PublicEqualsToWalletConfirmRequest": {
        "required": [
          "UserId",
          "VerificationToken",
          "OtpCode"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "VerificationToken": {
            "type": "string"
          },
          "OtpCode": {
            "type": "string"
          }
        }
      },
      "PublicEqualsToWalletConfirmResponse": {
        "type": "object",
        "properties": {
          "Status": {
            "type": "string"
          },
          "Notice": {
            "type": "string"
          },
          "Success": {
            "type": "boolean"
          },
          "VerificationToken": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Reference": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "BudgetId": {
            "type": "string"
          },
          "FiatCurrency": {
            "type": "string"
          },
          "FiatAmount": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "EstimatedCryptoAmount": {
            "type": "string"
          },
          "EstimatedFeeAmount": {
            "type": "string"
          },
          "Rate": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Chain": {
            "type": "string"
          },
          "DestinationAddress": {
            "type": "string"
          },
          "DestinationAddressMasked": {
            "type": "string"
          }
        }
      },
      "PublicEqualsToWalletInitiateRequest": {
        "required": [
          "UserId",
          "FiatCurrency",
          "Amount",
          "BudgetId",
          "CryptoCurrency",
          "Chain",
          "Address"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FiatCurrency": {
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Za-z]{3}$",
            "type": "string"
          },
          "Amount": {
            "maximum": 79228162514264337593543950335,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "BudgetId": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "Chain": {
            "type": "string"
          },
          "Address": {
            "type": "string"
          }
        }
      },
      "PublicEqualsToWalletInitiateResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "VerificationToken": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Reference": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "BudgetId": {
            "type": "string"
          },
          "FiatCurrency": {
            "type": "string"
          },
          "FiatAmount": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "EstimatedCryptoAmount": {
            "type": "string"
          },
          "EstimatedFeeAmount": {
            "type": "string"
          },
          "Rate": {
            "type": "string"
          },
          "ChainId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Chain": {
            "type": "string"
          },
          "DestinationAddress": {
            "type": "string"
          },
          "DestinationAddressMasked": {
            "type": "string"
          }
        }
      },
      "PublicOpenCryptoVirtualAccountRequest": {
        "required": [
          "Name",
          "Providers",
          "Chains"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "Providers": {
            "minItems": 1,
            "type": "array",
            "items": {
              "enum": [
                "boomfi"
              ],
              "type": "string"
            },
            "description": "Allowed value: boomfi.\n\nPossible values: boomfi."
          },
          "Chains": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoVirtualAccountChainRequest"
            }
          }
        }
      },
      "QuantumToCryptoExchangeDetails": {
        "type": "object",
        "properties": {
          "FinalCryptoBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Final crypto balance after exchange",
            "format": "double"
          },
          "FinalQuantumBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Final quantum balance after exchange",
            "format": "double"
          }
        }
      },
      "QuantumToCryptoExchangeRequest": {
        "type": "object",
        "properties": {
          "Currency": {
            "type": "string",
            "description": "Target currency (USDC or USDT)"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Amount in USD to exchange from Quantum account",
            "format": "double"
          }
        },
        "description": "Request to exchange Quantum USD to Crypto (USDC/USDT)"
      },
      "QuantumToCryptoExchangeResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "SourceAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Source amount in USD from Quantum account",
            "format": "double"
          },
          "TargetCurrency": {
            "type": "string",
            "description": "Target currency (USDC or USDT)"
          },
          "CryptoAmountReceived": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Crypto amount received",
            "format": "double"
          },
          "Rate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Exchange rate used",
            "format": "double"
          },
          "Fee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "description": "Fee charged in USD",
            "format": "double"
          },
          "TradeId": {
            "type": "string",
            "description": "Trade ID from Interlace",
            "nullable": true
          },
          "Status": {
            "type": "string",
            "description": "Status of the exchange"
          },
          "InitiatedAt": {
            "type": "string",
            "description": "Timestamp when exchange was initiated",
            "format": "date-time"
          },
          "Details": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuantumToCryptoExchangeDetails"
              }
            ],
            "nullable": true
          }
        },
        "description": "Response for Quantum to Crypto exchange execution"
      },
      "QuantumTopUpEstimateResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "usdAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "usdToUsdt": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuantumTopUpQuote"
              }
            ],
            "nullable": true
          },
          "usdToUsdc": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuantumTopUpQuote"
              }
            ],
            "nullable": true
          },
          "usdtToUsd": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuantumTopUpQuote"
              }
            ],
            "nullable": true
          },
          "usdcToUsd": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuantumTopUpQuote"
              }
            ],
            "nullable": true
          },
          "usdt": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuantumTopUpQuote"
              }
            ],
            "nullable": true
          },
          "usdc": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuantumTopUpQuote"
              }
            ],
            "nullable": true
          },
          "topupfee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "topupfeepercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "QuantumTopUpQuote": {
        "type": "object",
        "properties": {
          "baseCurrency": {
            "type": "string"
          },
          "quoteCurrency": {
            "type": "string"
          },
          "baseAmount": {
            "type": "string"
          },
          "rfqAmount": {
            "type": "string"
          },
          "rfqCurrency": {
            "type": "string"
          },
          "fee": {
            "type": "string"
          },
          "feeCurrency": {
            "type": "string",
            "nullable": true
          },
          "rate": {
            "type": "string"
          },
          "quoteId": {
            "type": "string"
          },
          "quoteTime": {
            "type": "string"
          },
          "ttlMs": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "QuotationResponse": {
        "type": "object",
        "properties": {
          "IsAvailable": {
            "type": "boolean"
          },
          "UnavailableReason": {
            "type": "string",
            "nullable": true
          },
          "RetryAfterSeconds": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Id": {
            "type": "string",
            "description": "Provider quote/order ID. Use this as QuotationId in POST /api/v2/banking/payouts/check.\n\nProvider quote/order ID. Use this as QuotationId in POST /api/v2/banking/payouts/check."
          },
          "QuoteRequestId": {
            "type": "string",
            "description": "Provider quote request ID. Pass this to payout initiate/create and to raw trade calls when required by the provider.\n\nProvider quote request ID. Pass this to payout initiate/create and raw trade calls when required.",
            "nullable": true
          },
          "Rate": {
            "type": "string"
          },
          "Fees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PayoutFeeDto"
            },
            "nullable": true
          },
          "ExpirationTime": {
            "type": "string"
          },
          "CreateTime": {
            "type": "string"
          }
        }
      },
      "RedeemAllAssignedVouchersResponse": {
        "required": [
          "Eligible",
          "Initiated",
          "AlreadyProcessing",
          "Skipped",
          "Failed",
          "Results"
        ],
        "type": "object",
        "properties": {
          "Eligible": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Initiated": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AlreadyProcessing": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Skipped": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Failed": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RedeemAssignedVoucherResult"
            }
          }
        }
      },
      "RedeemAssignedVoucherResult": {
        "required": [
          "AssignmentId",
          "Status",
          "Redemption",
          "ErrorCode",
          "ErrorMessage"
        ],
        "type": "object",
        "properties": {
          "AssignmentId": {
            "type": "string",
            "format": "uuid"
          },
          "Status": {
            "type": "string"
          },
          "Redemption": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/VoucherRedemptionResponse"
              }
            ],
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "RedeemVoucherForUserRequest": {
        "required": [
          "UserId",
          "Code"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Code": {
            "type": "string"
          }
        }
      },
      "RedemptionOptionResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "Description": {
            "type": "string"
          },
          "PointsRequired": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Category": {
            "type": "string"
          },
          "IsAvailable": {
            "type": "boolean"
          },
          "ImageUrl": {
            "type": "string",
            "nullable": true
          },
          "CashValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "IsLimitedTime": {
            "type": "boolean"
          },
          "QuantityAvailable": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "ReferralAdminOverviewResponse": {
        "required": [
          "Program",
          "TotalRelationships",
          "SuccessfulReferrals",
          "QualifyingTopupVolume",
          "PendingLiability",
          "PaidCommission",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "Program": {
            "$ref": "#/components/schemas/ReferralProgramResponse"
          },
          "TotalRelationships": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SuccessfulReferrals": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "QualifyingTopupVolume": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PendingLiability": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PaidCommission": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          }
        }
      },
      "ReferralCheckResponse": {
        "type": "object",
        "properties": {
          "Valid": {
            "type": "boolean"
          },
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Kind": {
            "type": "string"
          },
          "Provider": {
            "type": "string"
          },
          "InviterDisplayName": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "ReferralCommissionResponse": {
        "required": [
          "Id",
          "EventType",
          "CommissionType",
          "LevelCode",
          "BasisAmount",
          "BasisCurrency",
          "Amount",
          "Currency",
          "DeliveryMode",
          "Status",
          "VoucherId",
          "OccurredAt",
          "CreatedAt",
          "PaidAt"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "EventType": {
            "type": "string"
          },
          "CommissionType": {
            "type": "string"
          },
          "LevelCode": {
            "type": "string"
          },
          "BasisAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "BasisCurrency": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "DeliveryMode": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "VoucherId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "OccurredAt": {
            "type": "string",
            "format": "date-time"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "PaidAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "ReferralCommissionTotalsResponse": {
        "required": [
          "Pending",
          "Available",
          "Processing",
          "Paid",
          "Expired",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "Pending": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Available": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Processing": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Paid": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Expired": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          }
        }
      },
      "ReferralCountsResponse": {
        "required": [
          "Invited",
          "Successful",
          "InProgress"
        ],
        "type": "object",
        "properties": {
          "Invited": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Successful": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "InProgress": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "ReferralInviteBenefitResponse": {
        "required": [
          "OwnerUserId",
          "OwnerName",
          "OwnerEmail",
          "ReferralCode",
          "ReferredTierId",
          "ReferredTierName",
          "DiscountCodeId",
          "DiscountCode",
          "DiscountDescription",
          "InheritBenefits",
          "UpdatedAt"
        ],
        "type": "object",
        "properties": {
          "OwnerUserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "OwnerName": {
            "type": "string"
          },
          "OwnerEmail": {
            "type": "string"
          },
          "ReferralCode": {
            "type": "string"
          },
          "ReferredTierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "ReferredTierName": {
            "type": "string",
            "nullable": true
          },
          "DiscountCodeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "DiscountCode": {
            "type": "string",
            "nullable": true
          },
          "DiscountDescription": {
            "type": "string",
            "nullable": true
          },
          "InheritBenefits": {
            "type": "boolean"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ReferralInviteOfferResponse": {
        "required": [
          "ReferredTierId",
          "ReferredTierName",
          "DiscountCodeId",
          "DiscountCode",
          "DiscountDescription",
          "CardDiscountDurationMonths",
          "TierDiscountDurationMonths",
          "InheritBenefits"
        ],
        "type": "object",
        "properties": {
          "ReferredTierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "ReferredTierName": {
            "type": "string",
            "nullable": true
          },
          "DiscountCodeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "DiscountCode": {
            "type": "string",
            "nullable": true
          },
          "DiscountDescription": {
            "type": "string",
            "nullable": true
          },
          "CardDiscountDurationMonths": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierDiscountDurationMonths": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "InheritBenefits": {
            "type": "boolean"
          }
        }
      },
      "ReferralLevelResponse": {
        "required": [
          "Id",
          "Code",
          "Name",
          "Icon",
          "Color",
          "DisplayOrder",
          "MinimumMetricValue",
          "FirstCardCalculationType",
          "FirstCardRate",
          "TopupCalculationType",
          "TopupRate",
          "ManualOnly"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Code": {
            "type": "string"
          },
          "Name": {
            "type": "string"
          },
          "Icon": {
            "type": "string"
          },
          "Color": {
            "type": "string"
          },
          "DisplayOrder": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MinimumMetricValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "FirstCardCalculationType": {
            "type": "string"
          },
          "FirstCardRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TopupCalculationType": {
            "type": "string"
          },
          "TopupRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ManualOnly": {
            "type": "boolean"
          }
        }
      },
      "ReferralMetricProgressResponse": {
        "required": [
          "Basis",
          "CurrentValue",
          "NextThreshold",
          "Remaining",
          "LookbackMonths"
        ],
        "type": "object",
        "properties": {
          "Basis": {
            "type": "string"
          },
          "CurrentValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "NextThreshold": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Remaining": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "LookbackMonths": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "ReferralProgramResponse": {
        "required": [
          "Exists",
          "Id",
          "Provider",
          "Status",
          "LevelBasis",
          "LevelLookbackMonths",
          "CommissionEligibilityMonths",
          "DeliveryMode",
          "PayoutCurrency",
          "VoucherClaimDays",
          "Levels",
          "UpdatedAt"
        ],
        "type": "object",
        "properties": {
          "Exists": {
            "type": "boolean"
          },
          "Id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "Provider": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "LevelBasis": {
            "type": "string"
          },
          "LevelLookbackMonths": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CommissionEligibilityMonths": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DeliveryMode": {
            "type": "string"
          },
          "PayoutCurrency": {
            "type": "string"
          },
          "VoucherClaimDays": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Levels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferralLevelResponse"
            }
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "ReferralSummaryResponse": {
        "required": [
          "Enabled",
          "Provider",
          "ReferralCode",
          "ReferralPath",
          "InviteOffer",
          "CurrentLevel",
          "NextLevel",
          "Levels",
          "Progress",
          "Referrals",
          "Commissions",
          "DeliveryMode",
          "VoucherClaimDays"
        ],
        "type": "object",
        "properties": {
          "Enabled": {
            "type": "boolean"
          },
          "Provider": {
            "type": "string"
          },
          "ReferralCode": {
            "type": "string",
            "nullable": true
          },
          "ReferralPath": {
            "type": "string",
            "nullable": true
          },
          "InviteOffer": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReferralInviteOfferResponse"
              }
            ],
            "nullable": true
          },
          "CurrentLevel": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReferralLevelResponse"
              }
            ],
            "nullable": true
          },
          "NextLevel": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReferralLevelResponse"
              }
            ],
            "nullable": true
          },
          "Levels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferralLevelResponse"
            }
          },
          "Progress": {
            "$ref": "#/components/schemas/ReferralMetricProgressResponse"
          },
          "Referrals": {
            "$ref": "#/components/schemas/ReferralCountsResponse"
          },
          "Commissions": {
            "$ref": "#/components/schemas/ReferralCommissionTotalsResponse"
          },
          "DeliveryMode": {
            "type": "string"
          },
          "VoucherClaimDays": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "RegionStatsResponse": {
        "type": "object",
        "properties": {
          "Region": {
            "type": "string"
          },
          "Country": {
            "type": "string"
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "UserCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPoints": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AveragePointsPerUser": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "GrowthRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "ReportTransactionRequest": {
        "type": "object",
        "properties": {
          "TargetUserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Message": {
            "type": "string"
          }
        }
      },
      "ResendCryptoWithdrawalOtpRequest": {
        "required": [
          "VerificationToken"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "VerificationToken": {
            "type": "string"
          }
        }
      },
      "ReversePointAssignmentRequest": {
        "required": [
          "TransactionId",
          "Reason"
        ],
        "type": "object",
        "properties": {
          "TransactionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Reason": {
            "maxLength": 500,
            "type": "string"
          },
          "Source": {
            "maxLength": 100,
            "type": "string"
          },
          "Metadata": { }
        }
      },
      "ReverseVoucherRedemptionRequest": {
        "required": [
          "Reason"
        ],
        "type": "object",
        "properties": {
          "Reason": {
            "maxLength": 500,
            "type": "string"
          },
          "RestoreUse": {
            "type": "boolean"
          },
          "DryRun": {
            "type": "boolean"
          },
          "Confirm": {
            "type": "boolean"
          }
        }
      },
      "RoutingCodeDto": {
        "type": "object",
        "properties": {
          "RoutingCodeType": {
            "type": "string"
          },
          "RoutingCodeValue": {
            "type": "string"
          }
        }
      },
      "SelectOnboardingTierRequest": {
        "required": [
          "TierId"
        ],
        "type": "object",
        "properties": {
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "SetUserTierRequest": {
        "type": "object",
        "properties": {
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierCycle": {
            "type": "string"
          }
        }
      },
      "StringSegment": {
        "type": "object",
        "properties": {
          "Buffer": {
            "type": "string",
            "nullable": true
          },
          "Offset": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Length": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Value": {
            "type": "string",
            "nullable": true
          },
          "HasValue": {
            "type": "boolean"
          }
        }
      },
      "StripeTierPaymentDetails": {
        "type": "object",
        "properties": {
          "PublishableKey": {
            "type": "string"
          },
          "ClientSecret": {
            "type": "string"
          },
          "PaymentIntentId": {
            "type": "string"
          }
        }
      },
      "SumSubAccessTokenApiResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Token": {
            "type": "string"
          },
          "UserId": {
            "type": "string"
          },
          "Error": { }
        }
      },
      "SumSubAccessTokenRequestV2": {
        "required": [
          "Occupation",
          "AnnualSalary",
          "AccountPurpose",
          "ExpectedMonthlyVolume",
          "DocumentIssueDate"
        ],
        "type": "object",
        "properties": {
          "Occupation": {
            "type": "string"
          },
          "AnnualSalary": {
            "enum": [
              "0-10000",
              "10001-30000",
              "30001-50000",
              "50001-75000",
              "75001-100000",
              "100001-150000",
              "150001-250000",
              "250001+"
            ],
            "type": "string",
            "description": "Possible values: 0-10000, 10001-30000, 30001-50000, 50001-75000, 75001-100000, 100001-150000, 150001-250000, 250001+."
          },
          "AccountPurpose": {
            "type": "string"
          },
          "ExpectedMonthlyVolume": {
            "enum": [
              "0-1000",
              "1001-5000",
              "5001-15000",
              "15001-50000",
              "50001-100000",
              "100001+"
            ],
            "type": "string",
            "description": "Possible values: 0-1000, 1001-5000, 5001-15000, 15001-50000, 50001-100000, 100001+."
          },
          "DocumentIssueDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD."
          },
          "Nationality": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code. When USA, Ssn is required.",
            "nullable": true
          },
          "Ssn": {
            "pattern": "^\\d{9}$",
            "type": "string",
            "description": "Required for US nationals. Exactly 9 digits, without separators.",
            "nullable": true
          },
          "IpAddress": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "SumSubKycConfiguration": {
        "type": "object",
        "properties": {
          "LevelName": {
            "type": "string",
            "nullable": true
          },
          "TokenValidityHours": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Provider": {
            "type": "string",
            "nullable": true
          },
          "IsTestMode": {
            "type": "boolean"
          },
          "SdkVersion": {
            "type": "string",
            "nullable": true
          },
          "RequiredDocuments": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        }
      },
      "SumSubKycUrlResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "AccessToken": {
            "type": "string",
            "nullable": true
          },
          "ApplicantId": {
            "type": "string",
            "nullable": true
          },
          "ExternalUserId": {
            "type": "string",
            "nullable": true
          },
          "KycSubmissionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Status": {
            "type": "string",
            "nullable": true
          },
          "ExistingStatus": {
            "type": "string",
            "nullable": true
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "IsNewApplicant": {
            "type": "boolean"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "Configuration": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/SumSubKycConfiguration"
              }
            ],
            "nullable": true
          }
        }
      },
      "SwapRequest": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TokenIn": {
            "type": "string"
          },
          "TokenOut": {
            "type": "string"
          },
          "AmountIn": {
            "type": "string"
          },
          "Slippage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "format": "double"
          },
          "ChainIdIn": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ChainIdOut": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FromAddress": {
            "type": "string"
          },
          "ToAddress": {
            "type": "string"
          }
        }
      },
      "SwapResponse": {
        "type": "object",
        "properties": {
          "Transaction": {
            "$ref": "#/components/schemas/CrossCurveTxResponse"
          },
          "Route": {
            "$ref": "#/components/schemas/CrossCurveRoute"
          },
          "TransactionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "TierBenefits": {
        "type": "object",
        "properties": {
          "MaxCards": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DailySpendLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MonthlySpendLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "DailyWithdrawLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MonthlyWithdrawLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "VirtualCards": {
            "type": "boolean"
          },
          "PhysicalCards": {
            "type": "boolean"
          },
          "InternationalUsage": {
            "type": "boolean"
          },
          "PremiumSupport": {
            "type": "boolean"
          },
          "CashbackPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "SupportedCurrencies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "AvailableCardTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CardTypeInfo"
            }
          }
        }
      },
      "TierBuyResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierName": {
            "type": "string"
          },
          "TierLevel": {
            "type": "string"
          },
          "OrderId": {
            "type": "string",
            "nullable": true
          },
          "TotalCost": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "PurchasedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ActivatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpgradeDetails": {
            "$ref": "#/components/schemas/TierUpgradeDetails"
          },
          "PaymentDetails": {
            "$ref": "#/components/schemas/PaymentDetails"
          },
          "NewBenefits": {
            "$ref": "#/components/schemas/TierBenefits"
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "Audit": {
            "$ref": "#/components/schemas/TierPurchaseAudit"
          },
          "PurchaseId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "PurchaseExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "StripePayment": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/StripeTierPaymentDetails"
              }
            ],
            "nullable": true
          }
        }
      },
      "TierDistributionResponse": {
        "type": "object",
        "properties": {
          "TierLevel": {
            "type": "string"
          },
          "UserCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Percentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "TierPurchaseAudit": {
        "type": "object",
        "properties": {
          "RequestedBy": {
            "type": "string"
          },
          "RequestedAt": {
            "type": "string",
            "format": "date-time"
          },
          "RequestSource": {
            "type": "string",
            "nullable": true
          },
          "IPAddress": {
            "type": "string",
            "nullable": true
          },
          "UserAgent": {
            "type": "string",
            "nullable": true
          },
          "IsSecureConnection": {
            "type": "boolean"
          },
          "AuthenticationMethod": {
            "type": "string",
            "nullable": true
          },
          "AdditionalNotes": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "TierUpgradeDetails": {
        "type": "object",
        "properties": {
          "PreviousTierName": {
            "type": "string",
            "nullable": true
          },
          "PreviousTierLevel": {
            "type": "string",
            "nullable": true
          },
          "NewTierName": {
            "type": "string"
          },
          "NewTierLevel": {
            "type": "string"
          },
          "IsUpgrade": {
            "type": "boolean"
          },
          "IsDowngrade": {
            "type": "boolean"
          },
          "IsRenewal": {
            "type": "boolean"
          },
          "ChangedFeatures": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "AddedFeatures": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "RemovedFeatures": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TopCategoryResponse": {
        "type": "object",
        "properties": {
          "Category": {
            "type": "string"
          },
          "MerchantCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Revenue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "TopMerchantResponse": {
        "type": "object",
        "properties": {
          "MerchantId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "Category": {
            "type": "string",
            "nullable": true
          },
          "TransactionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Revenue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PointsAwarded": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "TopUpConfiguration": {
        "type": "object",
        "properties": {
          "FiatCurrency": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          },
          "Network": {
            "type": "string"
          },
          "MinAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "IsTestMode": {
            "type": "boolean"
          }
        }
      },
      "TopUpRequest": {
        "type": "object",
        "properties": {
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Token": {
            "type": "string"
          },
          "Value": {
            "maximum": 250000,
            "minimum": 5,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        },
        "description": "Request model for direct card top-up"
      },
      "TopUpResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "TransakUrl": {
            "type": "string",
            "nullable": true
          },
          "OrderId": {
            "type": "string",
            "nullable": true
          },
          "Token": {
            "type": "string"
          },
          "Value": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "WalletAddress": {
            "type": "string"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "Fee": {
            "format": "double"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "Configuration": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TopUpConfiguration"
              }
            ],
            "nullable": true
          }
        }
      },
      "TransactionDetailResponse": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "AccountId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalTransactionId": {
            "type": "string"
          },
          "TradeId": {
            "type": "string",
            "nullable": true
          },
          "RelatedCardTransactionId": {
            "type": "string",
            "nullable": true
          },
          "TransactionGroupId": {
            "type": "string",
            "nullable": true
          },
          "ParentTransactionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "RelationType": {
            "type": "string",
            "nullable": true
          },
          "IsPrimary": {
            "type": "boolean"
          },
          "Type": {
            "type": "string"
          },
          "Description": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "TransactionDate": {
            "type": "string",
            "format": "date-time"
          },
          "MerchantName": {
            "type": "string",
            "nullable": true
          },
          "MerchantCategory": {
            "type": "string",
            "nullable": true
          },
          "Category": {
            "type": "string",
            "nullable": true
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "WalletId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Source": {
            "type": "string"
          },
          "FeeAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "FeeCurrency": {
            "type": "string",
            "nullable": true
          },
          "Metadata": { }
        },
        "description": "Detailed transaction response"
      },
      "TransactionImportConfigResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ConfigName": {
            "type": "string"
          },
          "ImportMethod": {
            "type": "string"
          },
          "FieldMappings": { },
          "IsActive": {
            "type": "boolean"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TransactionStatisticsResponse": {
        "type": "object",
        "properties": {
          "TotalTransactions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AverageAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AmountByCurrency": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          "CountByType": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          "CountByStatus": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          "DailyVolume": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DailyVolume"
            }
          },
          "TopMerchants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MerchantStats"
            }
          }
        },
        "description": "Transaction statistics response"
      },
      "TransactionSummary": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalTransactionId": {
            "type": "string"
          },
          "TradeId": {
            "type": "string",
            "nullable": true
          },
          "RelatedCardTransactionId": {
            "type": "string",
            "nullable": true
          },
          "TransactionGroupId": {
            "type": "string",
            "nullable": true
          },
          "ParentTransactionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "RelationType": {
            "type": "string",
            "nullable": true
          },
          "IsPrimary": {
            "type": "boolean"
          },
          "Type": {
            "type": "string"
          },
          "Description": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "TransactionDate": {
            "type": "string",
            "format": "date-time"
          },
          "MerchantName": {
            "type": "string",
            "nullable": true
          },
          "MerchantCategory": {
            "type": "string",
            "nullable": true
          },
          "Category": {
            "type": "string",
            "nullable": true
          },
          "CardId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "WalletId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Source": {
            "type": "string"
          },
          "FeeAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "FeeCurrency": {
            "type": "string",
            "nullable": true
          },
          "Metadata": { }
        }
      },
      "TransactionSummaryStats": {
        "type": "object",
        "properties": {
          "TotalCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "AmountByCurrency": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          "CountByType": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          },
          "AmountByType": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            }
          },
          "CountByStatus": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            }
          }
        },
        "description": "Transaction summary statistics"
      },
      "TransakOrderInfo": {
        "type": "object",
        "properties": {
          "OrderId": {
            "type": "string"
          },
          "RedirectUrl": {
            "type": "string"
          },
          "WidgetUrl": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "CryptoAmount": {
            "type": "string"
          },
          "CryptoCurrency": {
            "type": "string"
          }
        }
      },
      "TransferDestinationTypeV2": {
        "enum": [
          "CRYPTO_ASSETS",
          "FIAT_ASSETS",
          "EXTERNAL_WALLET",
          "CARD_BALANCE",
          "QUANTUM_SUB_ACCOUNT",
          "COMPANY_MASTER_ACCOUNT"
        ]
      },
      "TransferDetails": {
        "type": "object",
        "properties": {
          "SourceCurrency": {
            "type": "string"
          },
          "DestinationCurrency": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Status": {
            "type": "string"
          },
          "InterlaceAccountId": {
            "type": "string",
            "nullable": true
          },
          "TransferPath": {
            "type": "string",
            "nullable": true
          },
          "RequiresExchange": {
            "type": "boolean"
          },
          "ExchangeRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "AvailableBalances": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            },
            "nullable": true
          },
          "RequiredAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "TotalAvailableValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          }
        }
      },
      "TransferEndpointInfo": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string"
          },
          "Id": {
            "type": "string",
            "nullable": true
          },
          "Chain": {
            "type": "string",
            "nullable": true
          },
          "Address": {
            "type": "string",
            "nullable": true
          }
        },
        "description": "Transfer endpoint information (source or destination)"
      },
      "TransferFee": {
        "type": "object",
        "properties": {
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Type": {
            "type": "string"
          }
        },
        "description": "Individual transfer fee information"
      },
      "TransferFeeType": {
        "enum": [
          "None",
          "Fixed",
          "Percentage",
          "Tiered",
          "Exchange",
          "Network",
          "Processing",
          null
        ]
      },
      "TransferListResponseV2": {
        "type": "object",
        "properties": {
          "Transfers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransferResponseV2"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageNumber": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPages": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "TransferResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Status": {
            "$ref": "#/components/schemas/TransferStatusV2"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "SourceType": {
            "$ref": "#/components/schemas/TransferSourceTypeV2"
          },
          "DestinationType": {
            "$ref": "#/components/schemas/TransferDestinationTypeV2"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          },
          "CompletedAt": {
            "type": "string",
            "nullable": true
          },
          "UpdatedAt": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          },
          "TransferType": {
            "type": "string",
            "description": "Transfer type identifier (e.g., \"user_to_master_transfer\", \"master_to_user_transfer\")",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "description": "Response message for the transfer operation",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "description": "Error code if the transfer failed",
            "nullable": true
          },
          "FeeAmount": {
            "type": "string",
            "description": "Total fee amount charged for this transfer (future implementation)",
            "nullable": true
          },
          "FeeCurrency": {
            "type": "string",
            "description": "Currency of the fee (future implementation)",
            "nullable": true
          },
          "FeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TransferFeeType"
              }
            ],
            "nullable": true
          },
          "NetAmount": {
            "type": "string",
            "description": "Net amount after fees (future implementation)",
            "nullable": true
          }
        }
      },
      "TransferSourceTypeV2": {
        "enum": [
          "CRYPTO_ASSETS",
          "FIAT_ASSETS",
          "EXTERNAL_WALLET",
          "CARD_BALANCE",
          "QUANTUM_SUB_ACCOUNT",
          "COMPANY_MASTER_ACCOUNT"
        ]
      },
      "TransferStatusV2": {
        "enum": [
          "PENDING",
          "PROCESSING",
          "COMPLETED",
          "FAILED",
          "CANCELLED"
        ]
      },
      "UnifiedAccount": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "string"
          },
          "ParentAccountId": {
            "type": "string",
            "nullable": true
          },
          "BudgetId": {
            "type": "string",
            "nullable": true
          },
          "DisplayName": {
            "type": "string"
          },
          "AccountType": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "SupportedCurrencies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UnifiedAccountsResponse": {
        "type": "object",
        "properties": {
          "Accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnifiedAccount"
            }
          },
          "TotalCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        },
        "description": "Unified response for accounts across all providers"
      },
      "UnifiedBalance": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Available": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Current": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UnifiedBalanceResponse": {
        "type": "object",
        "properties": {
          "Balances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnifiedBalance"
            }
          },
          "TotalAvailableUsd": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        },
        "description": "Unified balance response aggregating all providers"
      },
      "UnifiedPayee": {
        "type": "object",
        "properties": {
          "PayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Name": {
            "type": "string"
          },
          "BankName": {
            "type": "string",
            "nullable": true
          },
          "Currency": {
            "type": "string"
          },
          "AccountNumber": {
            "type": "string",
            "nullable": true
          },
          "Iban": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "type": "string"
          },
          "Providers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BankProvider"
            }
          },
          "ProviderRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnifiedPayeeProviderRecord"
            }
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UnifiedPayeeDeleteResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProviderPayeeResult"
            }
          }
        },
        "description": "Response when deleting a payee (may be deleted from multiple providers)"
      },
      "UnifiedPayeeProviderRecord": {
        "type": "object",
        "properties": {
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "ExternalPayeeId": {
            "type": "string"
          },
          "LocalPayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "UnifiedPayeesResponse": {
        "type": "object",
        "properties": {
          "Payees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnifiedPayee"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Limit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        },
        "description": "Unified payees response"
      },
      "UnifiedQuoteRequest": {
        "type": "object",
        "properties": {
          "SourceAccountId": {
            "type": "string"
          },
          "PayeeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "SourceCurrency": {
            "type": "string"
          },
          "TargetCurrency": {
            "type": "string"
          }
        },
        "description": "Unified quote request"
      },
      "UnifiedQuoteResponse": {
        "type": "object",
        "properties": {
          "QuoteId": {
            "type": "string"
          },
          "SourceAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "SourceCurrency": {
            "type": "string"
          },
          "TargetAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TargetCurrency": {
            "type": "string"
          },
          "ExchangeRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Fee": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Unified quote response"
      },
      "UnifiedTradeExecuteRequest": {
        "type": "object",
        "properties": {
          "QuoteId": {
            "type": "string"
          },
          "AccountId": {
            "type": "string"
          }
        },
        "description": "Unified trade execution request"
      },
      "UnifiedTradeQuoteRequest": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "string"
          },
          "BaseCurrency": {
            "type": "string"
          },
          "QuoteCurrency": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Side": {
            "enum": [
              "buy",
              "sell"
            ],
            "type": "string",
            "description": "Allowed values: buy, sell.\n\nAllowed values: buy, sell."
          }
        },
        "description": "Unified trade quote request"
      },
      "UnifiedTradeQuoteResponse": {
        "type": "object",
        "properties": {
          "QuoteId": {
            "type": "string"
          },
          "BaseCurrency": {
            "type": "string"
          },
          "QuoteCurrency": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "QuoteAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ExchangeRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Unified trade quote response"
      },
      "UnifiedTradeResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "TradeId": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ReceivedAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ExchangeRate": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "ExecutedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "description": "Unified trade execution response"
      },
      "UnifiedTransaction": {
        "type": "object",
        "properties": {
          "TransactionId": {
            "type": "string"
          },
          "TradeId": {
            "type": "string",
            "nullable": true
          },
          "AccountId": {
            "type": "string"
          },
          "Type": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "type": "string"
          },
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UnifiedTransactionsResponse": {
        "type": "object",
        "properties": {
          "Transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnifiedTransaction"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        },
        "description": "Unified transactions response"
      },
      "UnifiedTransferResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "TransferId": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Provider": {
            "$ref": "#/components/schemas/BankProvider"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "description": "Unified transfer response"
      },
      "UnloadAudit": {
        "type": "object",
        "properties": {
          "RequestedBy": {
            "type": "string"
          },
          "RequestedAt": {
            "type": "string",
            "format": "date-time"
          },
          "RequestSource": {
            "type": "string",
            "nullable": true
          },
          "IPAddress": {
            "type": "string",
            "nullable": true
          },
          "UserAgent": {
            "type": "string",
            "nullable": true
          },
          "IsSecureConnection": {
            "type": "boolean"
          },
          "AuthenticationMethod": {
            "type": "string",
            "nullable": true
          },
          "AdditionalNotes": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UnloadDestination": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string"
          },
          "AccountNumber": {
            "type": "string",
            "nullable": true
          },
          "WalletAddress": {
            "type": "string",
            "nullable": true
          },
          "BankName": {
            "type": "string",
            "nullable": true
          },
          "RoutingNumber": {
            "type": "string",
            "nullable": true
          },
          "SwiftCode": {
            "type": "string",
            "nullable": true
          },
          "AccountHolderName": {
            "type": "string",
            "nullable": true
          },
          "IsVerified": {
            "type": "boolean"
          }
        }
      },
      "UpdateCardDiscountRequest": {
        "type": "object",
        "properties": {
          "DiscountCode": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UpdateDiscountCodeRequest": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string",
            "nullable": true
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "DiscountType": {
            "type": "string",
            "nullable": true
          },
          "BuyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MonthlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "YearlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "BuyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MonthlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "YearlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "CardDiscountDurationMonths": {
            "maximum": 1200,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "TierDiscountDurationMonths": {
            "maximum": 1200,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "TierMonthlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "TierYearlyDiscountPercent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "TierMonthlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "TierYearlyDiscountFixed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxUsesTotal": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MaxUsesPerUser": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidTill": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ApplicableUserIds": {
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "format": "int32"
            },
            "nullable": true
          },
          "IsActive": {
            "type": "boolean",
            "nullable": true
          },
          "UpdateExistingCards": {
            "type": "boolean"
          }
        }
      },
      "UpdateLoyaltyProgramRequest": {
        "required": [
          "Name",
          "PointValueRate"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 255,
            "type": "string"
          },
          "Description": {
            "maxLength": 1000,
            "type": "string",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "PointValueRate": {
            "maximum": 999.9999,
            "minimum": 0.0001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PointValueCurrency": {
            "maxLength": 3,
            "type": "string"
          }
        }
      },
      "UpdateLoyaltyRuleRequest": {
        "required": [
          "RuleName",
          "RuleType",
          "PointsPerUnit"
        ],
        "type": "object",
        "properties": {
          "RuleName": {
            "maxLength": 255,
            "type": "string"
          },
          "RuleType": {
            "maxLength": 50,
            "type": "string"
          },
          "PointsPerUnit": {
            "maximum": 999.9999,
            "minimum": 0.0001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MinTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MerchantCategory": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "UserTier": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "Priority": {
            "maximum": 100,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Multiplier": {
            "maximum": 10,
            "minimum": 0.1,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "UpdateMerchantIdRequest": {
        "required": [
          "IdentifierType",
          "IdentifierValue"
        ],
        "type": "object",
        "properties": {
          "IdentifierType": {
            "maxLength": 50,
            "type": "string"
          },
          "IdentifierValue": {
            "maxLength": 255,
            "type": "string"
          },
          "Priority": {
            "maximum": 100,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          }
        }
      },
      "UpdateMerchantLoyaltyRuleRequest": {
        "required": [
          "RuleName",
          "PointsPerUnit"
        ],
        "type": "object",
        "properties": {
          "RuleName": {
            "maxLength": 255,
            "type": "string"
          },
          "PointsPerUnit": {
            "maximum": 999.9999,
            "minimum": 0.0001,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Multiplier": {
            "maximum": 10,
            "minimum": 0.1,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MinTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "MaxTransactionAmount": {
            "maximum": 999999.99,
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "UpdateMerchantRequest": {
        "required": [
          "Name"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 255,
            "type": "string"
          },
          "Description": {
            "maxLength": 1000,
            "type": "string",
            "nullable": true
          },
          "Category": {
            "maxLength": 100,
            "type": "string",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "IsPartner": {
            "type": "boolean"
          },
          "ContactEmail": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "ContactPhone": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "Address": {
            "maxLength": 500,
            "type": "string",
            "nullable": true
          },
          "Website": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          }
        }
      },
      "UpdateReferralInviteBenefitRequest": {
        "type": "object",
        "properties": {
          "OwnerUserId": {
            "maximum": 2147483647,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ReferredTierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "DiscountCodeId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "InheritBenefits": {
            "type": "boolean"
          }
        }
      },
      "UpdateReferralLevelRequest": {
        "required": [
          "Code",
          "Name",
          "Icon",
          "Color",
          "FirstCardCalculationType",
          "TopupCalculationType"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "Code": {
            "maxLength": 32,
            "type": "string"
          },
          "Name": {
            "maxLength": 80,
            "type": "string"
          },
          "Icon": {
            "maxLength": 40,
            "type": "string"
          },
          "Color": {
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "type": "string"
          },
          "DisplayOrder": {
            "maximum": 100,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MinimumMetricValue": {
            "maximum": 99999999999999999999,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "FirstCardCalculationType": {
            "type": "string"
          },
          "FirstCardRate": {
            "maximum": 100,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "TopupCalculationType": {
            "type": "string"
          },
          "TopupRate": {
            "maximum": 100,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ManualOnly": {
            "type": "boolean"
          }
        }
      },
      "UpdateReferralProgramRequest": {
        "required": [
          "Status",
          "LevelBasis",
          "DeliveryMode",
          "PayoutCurrency",
          "Levels"
        ],
        "type": "object",
        "properties": {
          "Status": {
            "type": "string"
          },
          "LevelBasis": {
            "type": "string"
          },
          "LevelLookbackMonths": {
            "maximum": 1200,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CommissionEligibilityMonths": {
            "maximum": 1200,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DeliveryMode": {
            "type": "string"
          },
          "PayoutCurrency": {
            "type": "string"
          },
          "VoucherClaimDays": {
            "maximum": 365,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Levels": {
            "maxItems": 50,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UpdateReferralLevelRequest"
            }
          }
        }
      },
      "UpdateVoucherActivationRequest": {
        "type": "object",
        "properties": {
          "Enabled": {
            "type": "boolean"
          },
          "ShutdownMode": {
            "pattern": "^(SUSPEND_NEW_ACTIVITY|REJECT_PENDING)$",
            "type": "string"
          }
        }
      },
      "UpdateVoucherSettingsRequest": {
        "type": "object",
        "properties": {
          "Enabled": {
            "type": "boolean"
          },
          "ShutdownMode": {
            "pattern": "^(SUSPEND_NEW_ACTIVITY|REJECT_PENDING)$",
            "type": "string"
          },
          "LowBalanceWarningPercentage": {
            "maximum": 100,
            "minimum": 0,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "VerificationTtlMinutes": {
            "maximum": 60,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DefaultRequiresApproval": {
            "type": "boolean"
          },
          "DailyReportRecipients": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "MaximumBatchSize": {
            "maximum": 10000,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaximumImportRows": {
            "maximum": 10000,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaximumMassAssignmentSize": {
            "maximum": 10000,
            "minimum": 1,
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "UserAssetsResponseV2": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Assets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssetBalance"
            }
          },
          "RetrievedAt": {
            "type": "string"
          }
        }
      },
      "UserBudgetBalance": {
        "type": "object",
        "properties": {
          "Currency": {
            "type": "string"
          },
          "AvailableBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "LedgerBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "PendingBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "UserBudgetCreateRequest": {
        "required": [
          "Name",
          "Currencies"
        ],
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 75,
            "type": "string",
            "description": "Budget display name."
          },
          "Currencies": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "ISO 4217 currency codes enabled for the budget, for example EUR or GBP."
          },
          "Type": {
            "type": "string",
            "description": "Optional requested budget type. Equals Money personal accounts are created as individual budgets and business accounts as shared budgets.",
            "nullable": true
          },
          "Features": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional budget features. Supported value: peopleCards.",
            "nullable": true
          },
          "AllowCurrencyAlignment": {
            "type": "boolean",
            "nullable": true
          }
        }
      },
      "UserBudgetListResponse": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Budgets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserBudgetResponse"
            }
          }
        }
      },
      "UserBudgetResponse": {
        "type": "object",
        "properties": {
          "BudgetId": {
            "type": "string"
          },
          "AccountId": {
            "type": "string"
          },
          "Name": {
            "type": "string"
          },
          "Type": {
            "type": "string",
            "nullable": true
          },
          "ParentId": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "type": "string"
          },
          "AllowCurrencyAlignment": {
            "type": "boolean",
            "nullable": true
          },
          "Currencies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "Balances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserBudgetBalance"
            }
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "UserBudgetTransferRequest": {
        "required": [
          "DestinationBudgetId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "DestinationBudgetId": {
            "type": "string"
          },
          "Amount": {
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Za-z]{3}$",
            "type": "string"
          },
          "Reference": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "nullable": true
          }
        }
      },
      "UserBudgetTransferResponse": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "TransferId": {
            "type": "string",
            "nullable": true
          },
          "SourceBudgetId": {
            "type": "string"
          },
          "DestinationBudgetId": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Amount": {
            "type": "string"
          },
          "Reference": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UserBudgetUpdateRequest": {
        "type": "object",
        "properties": {
          "Name": {
            "maxLength": 75,
            "type": "string",
            "description": "Budget display name.",
            "nullable": true
          },
          "AllowCurrencyAlignment": {
            "type": "boolean",
            "description": "Whether to allow currency alignment.",
            "nullable": true
          }
        },
        "description": "User-editable budget details. Budget status is managed by Equals Money and cannot be updated through this request."
      },
      "UserCreateV2": {
        "required": [
          "Email",
          "FirstName",
          "LastName",
          "ExternalUserId"
        ],
        "type": "object",
        "properties": {
          "Email": {
            "type": "string"
          },
          "FirstName": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "LastName": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "Phone": {
            "type": "string"
          },
          "ExternalUserId": {
            "type": "string"
          },
          "TierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "TierBillingCycle": {
            "pattern": "^(monthly|yearly)$",
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          },
          "InitialKycSource": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/KycSourceV2"
              }
            ],
            "nullable": true
          },
          "DateOfBirth": {
            "type": "string",
            "nullable": true
          },
          "Address": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "State": {
            "type": "string",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "nullable": true
          },
          "ZipCode": {
            "type": "string",
            "nullable": true
          },
          "CreateMandate": {
            "type": "boolean",
            "nullable": true
          },
          "MandateMaxAmount": {
            "type": "string",
            "nullable": true
          },
          "MandateCurrency": {
            "type": "string",
            "nullable": true
          },
          "MandateDescription": {
            "type": "string",
            "nullable": true
          },
          "BusinessName": {
            "type": "string",
            "nullable": true
          },
          "BusinessExternalId": {
            "type": "string",
            "nullable": true
          },
          "BusinessParentId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "ReferralId": {
            "type": "string",
            "nullable": true
          },
          "AccountType": {
            "pattern": "^(personal|business)$",
            "enum": [
              "business",
              "personal"
            ],
            "type": "string",
            "description": "Account type: \"personal\" or \"business\" (defaults to \"personal\")\n\nAllowed values: business, personal. Defaults to personal when omitted.",
            "nullable": true
          }
        }
      },
      "UserCryptoAddressListResponseV2": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoAddress"
            }
          },
          "CryptoAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CryptoAddress"
            }
          }
        }
      },
      "UserDashboardResponse": {
        "type": "object",
        "properties": {
          "PointBalance": {
            "$ref": "#/components/schemas/UserPointBalanceResponse"
          },
          "RecentTransactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PointTransactionResponse"
            }
          },
          "RedemptionOptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RedemptionOptionResponse"
            }
          },
          "Stats": {
            "$ref": "#/components/schemas/UserLoyaltyStatsResponse"
          },
          "Program": {
            "$ref": "#/components/schemas/LoyaltyProgramResponse"
          },
          "GeneratedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UserDetailResponseV2": {
        "type": "object",
        "properties": {
          "Phone": {
            "type": "string",
            "nullable": true
          },
          "DateOfBirth": {
            "type": "string",
            "nullable": true
          },
          "Address": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "State": {
            "type": "string",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "nullable": true
          },
          "ZipCode": {
            "type": "string",
            "nullable": true
          },
          "KycProvider": {
            "type": "string",
            "nullable": true
          },
          "KycVerificationId": {
            "type": "string",
            "nullable": true
          },
          "KycVerificationDate": {
            "type": "string",
            "nullable": true
          },
          "KycRejectionReason": {
            "type": "string",
            "nullable": true
          },
          "KycCompletedAt": {
            "type": "string",
            "nullable": true
          },
          "SumsubTokenForTransak": {
            "type": "string",
            "nullable": true
          },
          "LastKycSubmissionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "LastKycSumsubUserId": {
            "type": "string",
            "nullable": true
          },
          "LastKycProviderStatus": {
            "type": "string",
            "nullable": true
          },
          "LastKycProviderApplicationId": {
            "type": "string",
            "nullable": true
          },
          "ReferralId": {
            "type": "string",
            "nullable": true
          },
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalUserId": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string"
          },
          "FirstName": {
            "type": "string"
          },
          "LastName": {
            "type": "string"
          },
          "Status": {
            "$ref": "#/components/schemas/AccountStatusV2"
          },
          "KycStatus": {
            "$ref": "#/components/schemas/KycStatusV2"
          },
          "KycLevel": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/KycLevelV2"
              }
            ],
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "PackageId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "BusinessName": {
            "type": "string",
            "nullable": true
          },
          "BusinessExternalId": {
            "type": "string",
            "nullable": true
          },
          "BusinessParentId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "AccountType": {
            "enum": [
              "business",
              "personal"
            ],
            "type": "string",
            "description": "Allowed values: business, personal.",
            "nullable": true
          },
          "PrimaryExternalWalletId": {
            "type": "string",
            "nullable": true
          },
          "SelectedTierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "TierBillingCycle": {
            "type": "string",
            "nullable": true
          },
          "OnboardingProductPreference": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UserInternalTransferRequest": {
        "required": [
          "UserId",
          "SourceBalanceId",
          "DestinationBalanceId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SourceBalanceId": {
            "type": "string"
          },
          "DestinationBalanceId": {
            "type": "string"
          },
          "Amount": {
            "minimum": 0.01,
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Za-z]{3}$",
            "type": "string"
          },
          "Reference": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "nullable": true
          }
        },
        "description": "Create an internal transfer between balances for a specific user."
      },
      "UserKycSumSubTokenRequestV2": {
        "required": [
          "SumsubSdkToken",
          "DocumentIssueDate",
          "ExpiryDate",
          "PhoneCountryCode",
          "Phone",
          "Occupation",
          "AnnualSalary",
          "AccountPurpose",
          "ExpectedMonthlyVolume"
        ],
        "type": "object",
        "properties": {
          "SumsubSdkToken": {
            "type": "string"
          },
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "MiddleName": {
            "type": "string",
            "nullable": true
          },
          "Dob": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "nullable": true
          },
          "Gender": {
            "pattern": "^(M|F)$",
            "type": "string",
            "nullable": true
          },
          "Nationality": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code.",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "nullable": true
          },
          "PlaceOfBirth": {
            "type": "string",
            "nullable": true
          },
          "CountryOfBirth": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "NationalId": {
            "type": "string",
            "nullable": true
          },
          "IdType": {
            "pattern": "^(CN-RIC|PASSPORT|HK-HKID|DLN|Government-Issued ID Card)$",
            "type": "string",
            "nullable": true
          },
          "DocumentIssueDate": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Format: YYYY-MM-DD."
          },
          "ExpiryDate": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "Ssn": {
            "pattern": "^\\d{9}$",
            "type": "string",
            "description": "Required when Nationality is US. Exactly 9 digits, without separators.",
            "nullable": true
          },
          "PhoneCountryCode": {
            "maxLength": 3,
            "pattern": "^\\d{1,3}$",
            "type": "string"
          },
          "Phone": {
            "maxLength": 15,
            "type": "string"
          },
          "Occupation": {
            "type": "string"
          },
          "AnnualSalary": {
            "enum": [
              "0-10000",
              "10001-30000",
              "30001-50000",
              "50001-75000",
              "75001-100000",
              "100001-150000",
              "150001-250000",
              "250001+"
            ],
            "type": "string",
            "description": "Possible values: 0-10000, 10001-30000, 30001-50000, 50001-75000, 75001-100000, 100001-150000, 150001-250000, 250001+."
          },
          "AccountPurpose": {
            "type": "string"
          },
          "ExpectedMonthlyVolume": {
            "enum": [
              "0-1000",
              "1001-5000",
              "5001-15000",
              "15001-50000",
              "50001-100000",
              "100001+"
            ],
            "type": "string",
            "description": "Possible values: 0-1000, 1001-5000, 5001-15000, 15001-50000, 50001-100000, 100001+."
          },
          "IpAddress": {
            "type": "string"
          },
          "Street": {
            "type": "string",
            "nullable": true
          },
          "Street2": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "State": {
            "type": "string",
            "nullable": true
          },
          "PostCode": {
            "type": "string",
            "nullable": true
          },
          "AddressCountry": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code.",
            "nullable": true
          }
        }
      },
      "UserKycSumSubTokenUpdateResponse": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SumsubSdkToken": {
            "type": "string"
          },
          "Message": {
            "type": "string"
          },
          "Success": {
            "type": "boolean"
          },
          "SumsubUserId": {
            "type": "string",
            "nullable": true
          },
          "UpdatedAt": {
            "type": "string"
          }
        }
      },
      "UserKycVerificationData": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "KycStatus": {
            "$ref": "#/components/schemas/KycStatusV2"
          },
          "KycLevel": {
            "$ref": "#/components/schemas/KycLevelV2"
          },
          "KycProvider": {
            "type": "string",
            "nullable": true
          },
          "VerificationId": {
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "PhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "DateOfBirth": {
            "type": "string",
            "nullable": true
          },
          "Nationality": {
            "type": "string",
            "nullable": true
          },
          "DocumentType": {
            "type": "string",
            "nullable": true
          },
          "DocumentNumber": {
            "type": "string",
            "nullable": true
          },
          "AddressLine1": {
            "type": "string",
            "nullable": true
          },
          "AddressLine2": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "Region": {
            "type": "string",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "nullable": true
          },
          "PostalCode": {
            "type": "string",
            "nullable": true
          },
          "RejectionReason": {
            "type": "string",
            "nullable": true
          },
          "ReviewNotes": {
            "type": "string",
            "nullable": true
          },
          "VerifiedAt": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string"
          }
        }
      },
      "UserKycVerificationRequestV2": {
        "required": [
          "KycStatus",
          "KycLevel",
          "Occupation",
          "AnnualSalary",
          "AccountPurpose",
          "ExpectedMonthlyVolume",
          "DocumentIssueDate"
        ],
        "type": "object",
        "properties": {
          "KycStatus": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/KycStatusV2"
              }
            ],
            "nullable": true
          },
          "KycLevel": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/KycLevelV2"
              }
            ],
            "nullable": true
          },
          "VerificationId": {
            "type": "string",
            "nullable": true
          },
          "KycProvider": {
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "DateOfBirth": {
            "type": "string",
            "nullable": true
          },
          "Gender": {
            "type": "string",
            "nullable": true
          },
          "Nationality": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code, for example GBR.",
            "nullable": true
          },
          "Ssn": {
            "pattern": "^\\d{9}$",
            "type": "string",
            "description": "Required when Nationality is USA. Exactly 9 digits, without separators.",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "PhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "Occupation": {
            "type": "string",
            "nullable": true
          },
          "AnnualSalary": {
            "enum": [
              "0-10000",
              "10001-30000",
              "30001-50000",
              "50001-75000",
              "75001-100000",
              "100001-150000",
              "150001-250000",
              "250001+"
            ],
            "type": "string",
            "description": "Possible values: 0-10000, 10001-30000, 30001-50000, 50001-75000, 75001-100000, 100001-150000, 150001-250000, 250001+.",
            "nullable": true
          },
          "AccountPurpose": {
            "type": "string",
            "nullable": true
          },
          "ExpectedMonthlyVolume": {
            "enum": [
              "0-1000",
              "1001-5000",
              "5001-15000",
              "15001-50000",
              "50001-100000",
              "100001+"
            ],
            "type": "string",
            "description": "Possible values: 0-1000, 1001-5000, 5001-15000, 15001-50000, 50001-100000, 100001+.",
            "nullable": true
          },
          "IpAddress": {
            "type": "string",
            "nullable": true
          },
          "DocumentIssueDate": {
            "type": "string",
            "description": "Format: YYYY-MM-DD.",
            "nullable": true
          },
          "EqualsMainPurpose": {
            "type": "array",
            "items": {
              "enum": [
                "SALARY_OR_INCOME",
                "PERSONAL_TRANSFERS_OR_LIVING_EXPENSES",
                "FAMILY_SUPPORT",
                "MORTGAGE_OR_RENT_OR_UTILITY_BILLS",
                "SAVINGS",
                "INVESTMENT_PURPOSES",
                "INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES",
                "RECEIVING_OR_SENDING_LOAN_PAYMENTS",
                "PURCHASE_OF_GOODS_OR_SERVICES",
                "TRAVEL",
                "EDUCATION",
                "MEDICAL_EXPENSES",
                "CHARITABLE_DONATIONS"
              ],
              "type": "string"
            },
            "description": "Possible values: SALARY_OR_INCOME, PERSONAL_TRANSFERS_OR_LIVING_EXPENSES, FAMILY_SUPPORT, MORTGAGE_OR_RENT_OR_UTILITY_BILLS, SAVINGS, INVESTMENT_PURPOSES, INVESTMENT_OR_TRADING_IN_CRYPTOCURRENCIES, RECEIVING_OR_SENDING_LOAN_PAYMENTS, PURCHASE_OF_GOODS_OR_SERVICES, TRAVEL, EDUCATION, MEDICAL_EXPENSES, CHARITABLE_DONATIONS.",
            "nullable": true
          },
          "EqualsSourceOfFunds": {
            "type": "array",
            "items": {
              "enum": [
                "RECEIVING_FUNDS_FROM_OWN_ACCOUNTS",
                "RECEIVING_SALARY_PENSION_OR_DIVIDENDS",
                "RECEIVING_GIFTS_OR_INHERITANCES",
                "PROCEEDS_FROM_INVESTMENTS",
                "PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING",
                "PROCEEDS_FROM_SALE_OF_A_PROPERTY_OR_PHYSICAL_ASSET",
                "OTHER"
              ],
              "type": "string"
            },
            "description": "Possible values: RECEIVING_FUNDS_FROM_OWN_ACCOUNTS, RECEIVING_SALARY_PENSION_OR_DIVIDENDS, RECEIVING_GIFTS_OR_INHERITANCES, PROCEEDS_FROM_INVESTMENTS, PROCEEDS_FROM_CRYPTOCURRENCY_SALES_OR_TRADING, PROCEEDS_FROM_SALE_OF_A_PROPERTY_OR_PHYSICAL_ASSET, OTHER.",
            "nullable": true
          },
          "EqualsCurrenciesRequired": {
            "type": "array",
            "items": {
              "enum": [
                "AED",
                "AFN",
                "ALL",
                "AMD",
                "ANG",
                "AOA",
                "ARS",
                "AUD",
                "AWG",
                "AZN",
                "BAM",
                "BBD",
                "BDT",
                "BGN",
                "BHD",
                "BIF",
                "BMD",
                "BND",
                "BOB",
                "BOV",
                "BRL",
                "BSD",
                "BTN",
                "BWP",
                "BYN",
                "BZD",
                "CAD",
                "CDF",
                "CHF",
                "CLP",
                "CNY",
                "COP",
                "CRC",
                "CUC",
                "CUP",
                "CVE",
                "CZK",
                "DJF",
                "DKK",
                "DOP",
                "DZD",
                "EGP",
                "ERN",
                "ETB",
                "EUR",
                "FJD",
                "FKP",
                "GBP",
                "GEL",
                "GGP",
                "GHS",
                "GIP",
                "GMD",
                "GNF",
                "GTQ",
                "GYD",
                "HKD",
                "HNL",
                "HRK",
                "HTG",
                "HUF",
                "IDR",
                "ILS",
                "INR",
                "IQD",
                "IRR",
                "ISK",
                "JMD",
                "JOD",
                "JPY",
                "KES",
                "KGS",
                "KHR",
                "KMF",
                "KPW",
                "KRW",
                "KWD",
                "KYD",
                "KZT",
                "LAK",
                "LBP",
                "LKR",
                "LRD",
                "LSL",
                "LTL",
                "LVL",
                "LYD",
                "MAD",
                "MDL",
                "MGA",
                "MKD",
                "MMK",
                "MNT",
                "MOP",
                "MUR",
                "MVR",
                "MWK",
                "MXN",
                "MYR",
                "MZN",
                "NAD",
                "NGN",
                "NIO",
                "NOK",
                "NPR",
                "NZD",
                "OMR",
                "PAB",
                "PEN",
                "PGK",
                "PHP",
                "PKR",
                "PLN",
                "PYG",
                "QAR",
                "RON",
                "RSD",
                "RUB",
                "RWF",
                "SAR",
                "SBD",
                "SCR",
                "SEK",
                "SGD",
                "SHN",
                "SLL",
                "SOS",
                "SRD",
                "SSP",
                "STN",
                "SYP",
                "SZL",
                "THB",
                "TJS",
                "TMT",
                "TND",
                "TOP",
                "TRY",
                "TTD",
                "TWD",
                "TZS",
                "UAH",
                "UGX",
                "USD",
                "UYU",
                "UZS",
                "VND",
                "VUV",
                "WST",
                "XAF",
                "XAG",
                "XAU",
                "XCD",
                "XOF",
                "XPD",
                "XPF",
                "XPT",
                "YER",
                "ZAR",
                "ZMK",
                "ZMW",
                "ZWD"
              ],
              "type": "string"
            },
            "description": "Possible values: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BOV, BRL, BSD, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SEK, SGD, SHN, SLL, SOS, SRD, SSP, STN, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VND, VUV, WST, XAF, XAG, XAU, XCD, XOF, XPD, XPF, XPT, YER, ZAR, ZMK, ZMW, ZWD.",
            "nullable": true
          },
          "EqualsDestinationCountries": {
            "type": "array",
            "items": {
              "enum": [
                "AD",
                "AE",
                "AF",
                "AG",
                "AI",
                "AL",
                "AM",
                "AO",
                "AQ",
                "AR",
                "AS",
                "AT",
                "AU",
                "AW",
                "AX",
                "AZ",
                "BA",
                "BB",
                "BD",
                "BE",
                "BF",
                "BG",
                "BH",
                "BI",
                "BJ",
                "BL",
                "BM",
                "BN",
                "BO",
                "BQ",
                "BR",
                "BS",
                "BT",
                "BV",
                "BW",
                "BY",
                "BZ",
                "CA",
                "CC",
                "CD",
                "CF",
                "CG",
                "CH",
                "CI",
                "CK",
                "CL",
                "CM",
                "CN",
                "CO",
                "CR",
                "CU",
                "CV",
                "CW",
                "CX",
                "CY",
                "CZ",
                "DE",
                "DJ",
                "DK",
                "DM",
                "DO",
                "DZ",
                "EC",
                "EE",
                "EG",
                "EH",
                "ER",
                "ES",
                "ET",
                "FI",
                "FJ",
                "FK",
                "FM",
                "FO",
                "FR",
                "GA",
                "GB",
                "GD",
                "GE",
                "GF",
                "GG",
                "GH",
                "GI",
                "GL",
                "GM",
                "GN",
                "GP",
                "GQ",
                "GR",
                "GS",
                "GT",
                "GU",
                "GW",
                "GY",
                "HK",
                "HM",
                "HN",
                "HR",
                "HT",
                "HU",
                "ID",
                "IE",
                "IL",
                "IM",
                "IN",
                "IO",
                "IQ",
                "IR",
                "IS",
                "IT",
                "JE",
                "JM",
                "JO",
                "JP",
                "KE",
                "KG",
                "KH",
                "KI",
                "KM",
                "KN",
                "KP",
                "KR",
                "KW",
                "KY",
                "KZ",
                "LA",
                "LB",
                "LC",
                "LI",
                "LK",
                "LR",
                "LS",
                "LT",
                "LU",
                "LV",
                "LY",
                "MA",
                "MC",
                "MD",
                "ME",
                "MF",
                "MG",
                "MH",
                "MK",
                "ML",
                "MM",
                "MN",
                "MO",
                "MP",
                "MQ",
                "MR",
                "MS",
                "MT",
                "MU",
                "MV",
                "MW",
                "MX",
                "MY",
                "MZ",
                "NA",
                "NC",
                "NE",
                "NF",
                "NG",
                "NI",
                "NL",
                "NO",
                "NP",
                "NR",
                "NU",
                "NZ",
                "OM",
                "PA",
                "PE",
                "PF",
                "PG",
                "PH",
                "PK",
                "PL",
                "PM",
                "PN",
                "PR",
                "PS",
                "PT",
                "PW",
                "PY",
                "QA",
                "RE",
                "RO",
                "RS",
                "RU",
                "RW",
                "SA",
                "SB",
                "SC",
                "SD",
                "SE",
                "SG",
                "SH",
                "SI",
                "SJ",
                "SK",
                "SL",
                "SM",
                "SN",
                "SO",
                "SR",
                "SS",
                "ST",
                "SV",
                "SX",
                "SY",
                "SZ",
                "TC",
                "TD",
                "TF",
                "TG",
                "TH",
                "TJ",
                "TK",
                "TL",
                "TM",
                "TN",
                "TO",
                "TR",
                "TT",
                "TV",
                "TW",
                "TZ",
                "UA",
                "UG",
                "UM",
                "US",
                "UY",
                "UZ",
                "VA",
                "VC",
                "VE",
                "VG",
                "VI",
                "VN",
                "VU",
                "WF",
                "WS",
                "XK",
                "YE",
                "YT",
                "ZA",
                "ZM",
                "ZW"
              ],
              "type": "string"
            },
            "description": "Possible values: AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW.",
            "nullable": true
          },
          "EqualsExpectedAnnualVolume": {
            "enum": [
              "0-10000",
              "10001-50000",
              "50001-100000",
              "100001-250000",
              "250001-1000000",
              "1000001-5000000",
              "5000000+"
            ],
            "type": "string",
            "description": "Possible values: 0-10000, 10001-50000, 50001-100000, 100001-250000, 250001-1000000, 1000001-5000000, 5000000+.",
            "nullable": true
          },
          "EqualsExpectedPayments": {
            "enum": [
              "FEWER-THAN-5",
              "5-10",
              "10-20",
              "MORE-THAN-20"
            ],
            "type": "string",
            "description": "Possible values: FEWER-THAN-5, 5-10, 10-20, MORE-THAN-20.",
            "nullable": true
          },
          "NationalId": {
            "type": "string",
            "nullable": true
          },
          "DocumentType": {
            "type": "string",
            "nullable": true
          },
          "DocumentNumber": {
            "type": "string",
            "nullable": true
          },
          "DocumentExpiryDate": {
            "type": "string",
            "nullable": true
          },
          "DocumentIssuingCountry": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code, for example GBR.",
            "nullable": true
          },
          "DocumentIssuingAuthority": {
            "type": "string",
            "nullable": true
          },
          "DocumentIssuedAt": {
            "type": "string",
            "nullable": true
          },
          "DocumentFrontImage": {
            "type": "string",
            "nullable": true
          },
          "DocumentBackImage": {
            "type": "string",
            "nullable": true
          },
          "SelfieImage": {
            "type": "string",
            "nullable": true
          },
          "DocumentImageFormat": {
            "type": "string",
            "nullable": true
          },
          "AddressLine1": {
            "type": "string",
            "nullable": true
          },
          "AddressLine2": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "type": "string",
            "nullable": true
          },
          "Region": {
            "type": "string",
            "nullable": true
          },
          "PostalCode": {
            "type": "string",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-3 country code, for example GBR.",
            "nullable": true
          },
          "ProofOfAddressType": {
            "type": "string",
            "nullable": true
          },
          "ProofOfAddressImage": {
            "type": "string",
            "nullable": true
          },
          "ProofOfAddressIssueDate": {
            "type": "string",
            "nullable": true
          },
          "ProofOfAddressImageFormat": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          },
          "RejectionReason": {
            "type": "string",
            "nullable": true
          },
          "ReviewNotes": {
            "type": "string",
            "nullable": true
          },
          "KycDetails": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UserKycVerificationResponseV2": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean"
          },
          "Message": {
            "type": "string"
          },
          "User": {
            "$ref": "#/components/schemas/UserKycVerificationData"
          }
        }
      },
      "UserListResponseV2": {
        "type": "object",
        "properties": {
          "Users": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserResponseV2"
            }
          },
          "Total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageNumber": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalPages": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "UserLoyaltyStatsResponse": {
        "type": "object",
        "properties": {
          "TotalTransactions": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsEarnedThisMonth": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PointsEarnedLastMonth": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MonthlyGrowthPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "DaysActive": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "NextTierLevel": {
            "type": "string",
            "nullable": true
          },
          "PointsToNextTier": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "MonthlyEarnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonthlyEarningResponse"
            }
          }
        }
      },
      "UserPointBalanceResponse": {
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ProgramId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CurrentBalance": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalEarned": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TotalRedeemed": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "TierLevel": {
            "type": "string",
            "nullable": true
          },
          "LastActivity": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "EnrolledAt": {
            "type": "string",
            "format": "date-time"
          },
          "MonthlyStats": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/MonthlyStatsResponse"
              }
            ],
            "nullable": true
          }
        }
      },
      "UserResponseV2": {
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ExternalUserId": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string"
          },
          "FirstName": {
            "type": "string"
          },
          "LastName": {
            "type": "string"
          },
          "Status": {
            "$ref": "#/components/schemas/AccountStatusV2"
          },
          "KycStatus": {
            "$ref": "#/components/schemas/KycStatusV2"
          },
          "KycLevel": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/KycLevelV2"
              }
            ],
            "nullable": true
          },
          "CreatedAt": {
            "type": "string"
          },
          "UpdatedAt": {
            "type": "string"
          },
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "PackageId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "BusinessName": {
            "type": "string",
            "nullable": true
          },
          "BusinessExternalId": {
            "type": "string",
            "nullable": true
          },
          "BusinessParentId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "AccountType": {
            "enum": [
              "business",
              "personal"
            ],
            "type": "string",
            "description": "Allowed values: business, personal.",
            "nullable": true
          },
          "PrimaryExternalWalletId": {
            "type": "string",
            "nullable": true
          },
          "SelectedTierId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "TierBillingCycle": {
            "type": "string",
            "nullable": true
          },
          "OnboardingProductPreference": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UserToMasterTransferPayloadV2": {
        "required": [
          "UserId",
          "Amount",
          "Currency"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "UserUpdateV2": {
        "type": "object",
        "properties": {
          "ExternalUserId": {
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "nullable": true
          },
          "Phone": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "ValidationRuleDto": {
        "type": "object",
        "properties": {
          "RoutingCodeType": {
            "type": "string",
            "nullable": true
          },
          "FieldName": {
            "type": "string",
            "nullable": true
          },
          "Max": {
            "type": "string",
            "nullable": true
          },
          "Min": {
            "type": "string",
            "nullable": true
          },
          "Regex": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "VelocityControlV2": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string"
          },
          "Limit": {
            "type": "string"
          }
        }
      },
      "VerifyVoucherRedemptionRequest": {
        "required": [
          "Code"
        ],
        "type": "object",
        "properties": {
          "Code": {
            "type": "string"
          }
        }
      },
      "VoucherApiKeySummaryResponse": {
        "required": [
          "Id",
          "Name",
          "KeyPrefix",
          "Status",
          "Scopes",
          "AllowedIps",
          "ExpiresAt",
          "LastUsedAt",
          "CreatedAt"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Name": {
            "type": "string"
          },
          "KeyPrefix": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "Scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "AllowedIps": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "LastUsedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "VoucherAuditResponse": {
        "required": [
          "Id",
          "UserId",
          "ApiKeyId",
          "ActorType",
          "Action",
          "TargetType",
          "TargetId",
          "Status",
          "CorrelationId",
          "Timestamp"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "ApiKeyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int64",
            "nullable": true
          },
          "ActorType": {
            "type": "string"
          },
          "Action": {
            "type": "string"
          },
          "TargetType": {
            "type": "string"
          },
          "TargetId": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "CorrelationId": {
            "type": "string",
            "nullable": true
          },
          "Timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "VoucherCompanyModuleStatusResponse": {
        "required": [
          "CompanyId",
          "CompanyName",
          "GlobalEnabled",
          "CompanyEnabled",
          "InterlaceEnabled",
          "EffectiveEnabled",
          "ShutdownMode",
          "LowBalanceWarningPercentage",
          "VerificationTtlMinutes",
          "DefaultRequiresApproval",
          "DailyReportRecipients",
          "MaximumBatchSize",
          "MaximumImportRows",
          "MaximumMassAssignmentSize"
        ],
        "type": "object",
        "properties": {
          "CompanyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CompanyName": {
            "type": "string"
          },
          "GlobalEnabled": {
            "type": "boolean"
          },
          "CompanyEnabled": {
            "type": "boolean"
          },
          "InterlaceEnabled": {
            "type": "boolean"
          },
          "EffectiveEnabled": {
            "type": "boolean"
          },
          "ShutdownMode": {
            "type": "string"
          },
          "LowBalanceWarningPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "VerificationTtlMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DefaultRequiresApproval": {
            "type": "boolean"
          },
          "DailyReportRecipients": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "MaximumBatchSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaximumImportRows": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaximumMassAssignmentSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "VoucherDailyStatisticResponse": {
        "required": [
          "Date",
          "Currency",
          "IssuedCount",
          "IssuedValue",
          "RedeemedCount",
          "RedeemedValue",
          "FailedCount",
          "ReversedCount"
        ],
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date"
          },
          "Currency": {
            "type": "string"
          },
          "IssuedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "IssuedValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "RedeemedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "RedeemedValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "FailedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ReversedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "VoucherDashboardResponse": {
        "required": [
          "IssuedCount",
          "PendingApprovalCount"
        ],
        "type": "object",
        "properties": {
          "IssuedCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PendingApprovalCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "VoucherGroupResponse": {
        "required": [
          "Id",
          "Name",
          "Description",
          "Status",
          "DefaultType",
          "DefaultValue",
          "DefaultCurrency",
          "DefaultPerUserLimit",
          "DefaultTotalUseLimit",
          "DefaultAggregateCap",
          "DefaultRequiresApproval",
          "DefaultRequiresEmail2Fa",
          "DefaultValidFrom",
          "DefaultValidUntil",
          "CampaignReference",
          "CostCentre",
          "Tags",
          "CreatedAt"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Name": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "type": "string"
          },
          "DefaultType": {
            "type": "string"
          },
          "DefaultValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "DefaultCurrency": {
            "type": "string",
            "nullable": true
          },
          "DefaultPerUserLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DefaultTotalUseLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "DefaultAggregateCap": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "DefaultRequiresApproval": {
            "type": "boolean"
          },
          "DefaultRequiresEmail2Fa": {
            "type": "boolean"
          },
          "DefaultValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "DefaultValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CampaignReference": {
            "type": "string",
            "nullable": true
          },
          "CostCentre": {
            "type": "string",
            "nullable": true
          },
          "Tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "VoucherImportPreviewResponse": {
        "required": [
          "JobId",
          "Status",
          "TotalRows",
          "ValidRows",
          "InvalidRows",
          "Rows"
        ],
        "type": "object",
        "properties": {
          "JobId": {
            "type": "string",
            "format": "uuid"
          },
          "Status": {
            "type": "string"
          },
          "TotalRows": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ValidRows": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "InvalidRows": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VoucherImportRowPreview"
            }
          }
        }
      },
      "VoucherImportRowPreview": {
        "required": [
          "Row",
          "Valid",
          "ErrorCode",
          "ErrorMessage",
          "Name",
          "Value",
          "Currency",
          "Type",
          "UserId"
        ],
        "type": "object",
        "properties": {
          "Row": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Valid": {
            "type": "boolean"
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "Name": {
            "type": "string",
            "nullable": true
          },
          "Value": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "Currency": {
            "type": "string",
            "nullable": true
          },
          "Type": {
            "type": "string",
            "nullable": true
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          }
        }
      },
      "VoucherJobItemResponse": {
        "required": [
          "ItemIndex",
          "Status",
          "ExternalKey",
          "ErrorCode",
          "ErrorMessage",
          "Result"
        ],
        "type": "object",
        "properties": {
          "ItemIndex": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Status": {
            "type": "string"
          },
          "ExternalKey": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "Result": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "VoucherJobResponse": {
        "required": [
          "Id",
          "Kind",
          "Status",
          "TotalItems",
          "SuccessfulItems",
          "FailedItems",
          "CreatedAt",
          "CompletedAt"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Kind": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "TotalItems": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "SuccessfulItems": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "FailedItems": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "VoucherLiabilityResponse": {
        "required": [
          "Currency",
          "Outstanding",
          "Reserved",
          "Unbounded"
        ],
        "type": "object",
        "properties": {
          "Currency": {
            "type": "string"
          },
          "Outstanding": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Reserved": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Unbounded": {
            "type": "boolean"
          }
        }
      },
      "VoucherLiabilitySnapshotResponse": {
        "required": [
          "Date",
          "Currency",
          "Outstanding",
          "Reserved",
          "Unbounded"
        ],
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date"
          },
          "Currency": {
            "type": "string"
          },
          "Outstanding": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Reserved": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Unbounded": {
            "type": "boolean"
          }
        }
      },
      "VoucherModuleStatusResponse": {
        "required": [
          "GlobalEnabled",
          "CompanyEnabled",
          "InterlaceEnabled",
          "EffectiveEnabled",
          "ShutdownMode",
          "LowBalanceWarningPercentage",
          "VerificationTtlMinutes",
          "DefaultRequiresApproval",
          "DailyReportRecipients",
          "MaximumBatchSize",
          "MaximumImportRows",
          "MaximumMassAssignmentSize"
        ],
        "type": "object",
        "properties": {
          "GlobalEnabled": {
            "type": "boolean"
          },
          "CompanyEnabled": {
            "type": "boolean"
          },
          "InterlaceEnabled": {
            "type": "boolean"
          },
          "EffectiveEnabled": {
            "type": "boolean"
          },
          "ShutdownMode": {
            "type": "string"
          },
          "LowBalanceWarningPercentage": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "VerificationTtlMinutes": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "DefaultRequiresApproval": {
            "type": "boolean"
          },
          "DailyReportRecipients": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "MaximumBatchSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaximumImportRows": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaximumMassAssignmentSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          }
        }
      },
      "VoucherRedemptionResponse": {
        "required": [
          "Id",
          "VoucherId",
          "VoucherName",
          "Amount",
          "Currency",
          "Status",
          "TransactionReference",
          "ErrorCode",
          "CreatedAt",
          "CompletedAt"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "VoucherId": {
            "type": "string",
            "format": "uuid"
          },
          "VoucherName": {
            "type": "string"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "TransactionReference": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "VoucherReportRow": {
        "required": [
          "RedemptionId",
          "VoucherId",
          "VoucherName",
          "UserId",
          "Amount",
          "Currency",
          "Status",
          "ErrorCode",
          "CreatedAt",
          "CompletedAt"
        ],
        "type": "object",
        "properties": {
          "RedemptionId": {
            "type": "string",
            "format": "uuid"
          },
          "VoucherId": {
            "type": "string",
            "format": "uuid"
          },
          "VoucherName": {
            "type": "string"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "CompletedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "VoucherResponse": {
        "required": [
          "Id",
          "GroupId",
          "Name",
          "Description",
          "MaskedCode",
          "Type",
          "Value",
          "Currency",
          "Status",
          "SuccessfulUses",
          "ReservedUses",
          "PerUserLimit",
          "MaximumTotalUses",
          "RedeemedValue",
          "ReservedValue",
          "MaximumAggregateValue",
          "RequiresWhitelabelApproval",
          "RequiresEmail2Fa",
          "ValidFrom",
          "ValidUntil",
          "CreatedAt"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "GroupId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "Name": {
            "type": "string"
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "MaskedCode": {
            "type": "string"
          },
          "Type": {
            "type": "string"
          },
          "Value": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "SuccessfulUses": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "ReservedUses": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "PerUserLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "MaximumTotalUses": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "RedeemedValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "ReservedValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "MaximumAggregateValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "RequiresWhitelabelApproval": {
            "type": "boolean"
          },
          "RequiresEmail2Fa": {
            "type": "boolean"
          },
          "ValidFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ValidUntil": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "PlaintextCode": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "VoucherReversalResponse": {
        "required": [
          "Id",
          "RedemptionId",
          "Amount",
          "Currency",
          "Status",
          "RestoreUse",
          "DryRun",
          "TransactionReference"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "RedemptionId": {
            "type": "string",
            "format": "uuid"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "Status": {
            "type": "string"
          },
          "RestoreUse": {
            "type": "boolean"
          },
          "DryRun": {
            "type": "boolean"
          },
          "TransactionReference": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "VoucherRuleResponse": {
        "required": [
          "Id",
          "Name",
          "TriggerType",
          "CampaignMode",
          "Enabled",
          "AssignmentCount",
          "AssignedValue"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Name": {
            "type": "string"
          },
          "TriggerType": {
            "type": "string"
          },
          "CampaignMode": {
            "type": "string"
          },
          "Enabled": {
            "type": "boolean"
          },
          "AssignmentCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "AssignedValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        }
      },
      "VoucherValidationResponse": {
        "required": [
          "Valid",
          "Amount",
          "Currency",
          "RequiresEmailVerification",
          "RequiresApproval"
        ],
        "type": "object",
        "properties": {
          "Valid": {
            "type": "boolean"
          },
          "Amount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "Currency": {
            "type": "string"
          },
          "RequiresEmailVerification": {
            "type": "boolean"
          },
          "RequiresApproval": {
            "type": "boolean"
          }
        }
      },
      "WalletBalance": {
        "type": "object",
        "properties": {
          "WalletType": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Balance": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "USDValue": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "USDTEquivalent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "USDCEquivalent": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        },
        "description": "Individual wallet balance information"
      },
      "WalletTopUpRequest": {
        "type": "object",
        "properties": {
          "Token": {
            "type": "string"
          },
          "WalletAddress": {
            "type": "string"
          },
          "Value": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          }
        },
        "description": "Request model for wallet top-up"
      },
      "WidgetConfig": {
        "type": "object",
        "properties": {
          "PrimaryColor": {
            "type": "string",
            "description": "Primary color for widget theming",
            "nullable": true
          },
          "BackgroundColor": {
            "type": "string",
            "description": "Background color for widget theming",
            "nullable": true
          },
          "TextColor": {
            "type": "string",
            "description": "Text color for widget theming",
            "nullable": true
          },
          "Width": {
            "type": "string",
            "description": "Widget width (e.g., \"100%\", \"400px\")"
          },
          "Height": {
            "type": "string",
            "description": "Widget height (e.g., \"300px\", \"auto\")"
          }
        },
        "description": "Widget configuration for customization"
      },
      "WithdrawalCreateV2": {
        "required": [
          "Amount",
          "Currency",
          "Chain",
          "DestinationAddress"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
          },
          "Amount": {
            "type": "string"
          },
          "Currency": {
            "type": "string"
          },
          "Chain": {
            "type": "string"
          },
          "DestinationAddress": {
            "type": "string"
          },
          "DestinationTag": {
            "type": "string",
            "nullable": true
          },
          "Network": {
            "type": "string",
            "nullable": true
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ExternalReferenceId": {
            "type": "string",
            "nullable": true
          },
          "Metadata": {
            "type": "object",
            "nullable": true
          }
        }
      },
      "WithdrawalFeeRequestV2": {
        "required": [
          "Currency",
          "Amount",
          "Chain"
        ],
        "type": "object",
        "properties": {
          "Currency": {
            "type": "string"
          },
          "Amount": {
            "type": "string"
          },
          "Chain": {
            "type": "string"
          },
          "Network": {
            "type": "string",
            "nullable": true
          },
          "DestinationAddress": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WithdrawalFeeResponseV2": {
        "type": "object",
        "properties": {
          "Currency": {
            "type": "string"
          },
          "Amount": {
            "type": "string"
          },
          "Fee": {
            "type": "string"
          },
          "NetAmount": {
            "type": "string"
          },
          "Network": {
            "type": "string",
            "nullable": true
          },
          "EstimatedConfirmationTime": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "WithdrawalValidationResult": {
        "type": "object",
        "properties": {
          "IsValid": {
            "type": "boolean"
          },
          "UserId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32"
          },
          "RequestedAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double"
          },
          "RequestedCurrency": {
            "type": "string"
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "UserFriendlyMessage": {
            "type": "string",
            "nullable": true
          },
          "AvailableAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "ShortfallAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "format": "double",
            "nullable": true
          },
          "BalanceBreakdown": {
            "type": "object",
            "additionalProperties": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "format": "double"
            },
            "nullable": true
          },
          "AvailableBalance": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/AvailableWithdrawalBalanceResponse"
              }
            ],
            "nullable": true
          },
          "OptimalTransferPath": {
            "type": "string",
            "nullable": true
          },
          "RequiresInternalTransfer": {
            "type": "boolean"
          }
        },
        "description": "Result of withdrawal validation"
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "description": "API key for authorization. Required for all V2 endpoints.",
        "name": "x-api-key",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "Authentication",
      "description": "User authentication and token management"
    },
    {
      "name": "Users",
      "description": "User management operations including creation, updates, and KYC"
    },
    {
      "name": "Cards",
      "description": "Card management operations"
    },
    {
      "name": "Payments",
      "description": "Payment processing and transaction management"
    },
    {
      "name": "Transfers",
      "description": "Transfer operations between accounts and external services"
    },
    {
      "name": "Crypto Exchange",
      "description": "BoomFi onboarding, balances, exchange quotes, Interlace/EqualsMoney transfer workflows, user decisions, payouts, and payment tracking"
    },
    {
      "name": "Card Loads",
      "description": "Asynchronous crypto-to-fiat BPay card loads executed through BoomFi"
    },
    {
      "name": "MOR",
      "description": "Merchant of Record onboarding, users, cards, secure card widgets, and company wallets"
    },
    {
      "name": "KYC",
      "description": "Know Your Customer verification and compliance"
    },
    {
      "name": "Tiers",
      "description": "User tier and membership management"
    },
    {
      "name": "Health",
      "description": "API health and status monitoring"
    },
    {
      "name": "Dashboard",
      "description": "Dashboard information and user account management"
    },
    {
      "name": "Webhooks",
      "description": "Outbound webhook requests sent by CryptoCard Platform to configured partner webhook URLs."
    }
  ]
}