Make one safe request.
All public v2 calls are made from your backend with your company API key. Never ship the key in a browser or mobile app.
Store it as HOPPA_API_KEY in your server’s secret manager.
Base URL: https://staging.hoppa.global
x-api-key: YOUR_API_KEY on every request.
Verify credentials by listing tiers
curl --request GET 'https://staging.hoppa.global/api/v2/tiers' \
-H 'x-api-key: YOUR_API_KEY'Example 200 responseJSON · collapse
{
"Tiers": [
{
"Id": 12,
"Name": "Personal Plus",
"Description": "Personal accounts with cards and payments",
"TierLevel": 2,
"AccountType": "personal",
"MonthlyFee": 9.99,
"YearlyFee": 99,
"Features": [
"CARDS",
"PAYMENTS"
],
"IsDefault": false,
"IsActive": true,
"IncludesEqualsCards": true,
"IncludesEqualsIban": true,
"CreatedAt": "2026-07-01T08:00:00Z",
"UpdatedAt": "2026-08-01T08:00:00Z"
}
]
}Create, verify, then provision.
Create the Hoppa user once, then choose exactly one of four KYC input methods: hosted SumSub, mobile SDK, reusable SumSub sharing, or a complete manual payload. Each selected bank still has an independent approval state.
IdStep 1 — create the customer
/api/v2/users- ExternalUserId must be your stable customer ID, not an email address that may change.
- Phone should be E.164, for example
+447700900123. - Send AccountType: personal explicitly.
- Keep the returned Hoppa Id; every following call uses it.
Create a personal user
curl --request POST 'https://staging.hoppa.global/api/v2/users' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Email": "jane.doe@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Phone": "+447700900123",
"ExternalUserId": "customer_1042",
"AccountType": "personal",
"DateOfBirth": "1990-01-15",
"Address": "10 Market Street",
"City": "London",
"Country": "GB",
"ZipCode": "SW1A 1AA"
}'Example 201 responseJSON · collapse
{
"Id": 123,
"ExternalUserId": "customer_1042",
"Email": "jane.doe@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Status": "ACTIVE",
"KycStatus": "NOT_STARTED",
"AccountType": "personal",
"CompanyId": 42,
"CreatedAt": "2026-08-05T09:30:00Z"
}Step 2 — choose how to provide KYC
/api/v2/users/{userId}/sumsub/kyc-urlUse the returned short-lived AccessToken and Configuration to launch the SumSub WebSDK. Your backend still owns status polling and provider provisioning.
Create a hosted SumSub KYC link
curl --request POST 'https://staging.hoppa.global/api/v2/users/123/sumsub/kyc-url' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Occupation": "STUDENT",
"AnnualSalary": "0-10000",
"AccountPurpose": "PERSONAL_USE",
"ExpectedMonthlyVolume": "0-1000",
"DocumentIssueDate": "2022-01-01",
"IpAddress": "203.0.113.10"
}'Example 200 responseJSON · collapse
{
"Success": true,
"AccessToken": "SUMSUB_WEBSDK_ACCESS_TOKEN",
"ApplicantId": "sumsub_applicant_abc123",
"ExternalUserId": "123",
"KycSubmissionId": 9081,
"Status": "PENDING",
"ExistingStatus": "NOT_STARTED",
"ExpiresAt": "2026-08-05T10:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"IsNewApplicant": true,
"Message": "KYC session created",
"Configuration": {
"levelName": "HOPPA_PRODUCTION"
}
}Step 3 — wait for the right approval
/api/v2/users/{userId}/kyc/detailed-statusBase KYC approved → ensure Interlace account exists.
Required for selected setupBase/programme KYC approved → BPay link is created with the first eligible card.
Not selectedBase KYC approved → submit Equals Money application and any requested documents.
Not selectedStep 4 — run provider onboarding
When Interlace is the company default, user creation provisions the account. Treat /users/create-interlace-account/{userId} as an idempotent repair path.
The UnifiedSwitch/BPay link is provisioned lazily when the first BPay card is ordered. The chosen tier and card product must support provider type 3.
Submit the multipart application below after SumSub is approved. The proof of address must be JPG, JPEG, PNG or PDF and not older than three months.
Submit Equals Money personal onboarding
curl --request POST 'https://staging.hoppa.global/api/v2/banking/equalsmoney-onboarding?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'RequestedFeatures=PAYMENTS' \
-F 'RequestedFeatures=CARDS' \
-F 'MainPurpose=PERSONAL_TRANSFERS_OR_LIVING_EXPENSES' \
-F 'SourceOfFunds=RECEIVING_SALARY_PENSION_OR_DIVIDENDS' \
-F 'DestinationOfFunds=GB' \
-F 'CurrenciesRequired=GBP' \
-F 'AnnualVolume=10000-50000' \
-F 'NumberOfPayments=5-10' \
-F 'CardPurposes=TRAVEL' \
-F 'AtmWithdrawalsRequired=false' \
-F 'NumberOfCardsRequired=1' \
-F 'CardAnnualSpend=10000-50000' \
-F 'ProofOfAddress=@/absolute/path/proof-of-address.pdf'Example 202 responseJSON · collapse
{
"Success": true,
"Message": "Application accepted for review",
"CorrelationId": "eq_onboarding_551",
"AccountId": "eq_account_771"
}Keep company KYB separate from personal KYC.
Create the Hoppa user with AccountType: business. The public full KYB application shown here is the Equals Money path; Interlace and BPay business availability is programme-specific.
/api/v2/business/onboarding/associated-people?userId=321/api/v2/business/onboarding/application?userId=321/api/v2/business/onboarding/application/documents?userId=321/api/v2/business/onboarding/associated-people/{personId}/documents?userId=321/api/v2/business/onboarding/application/submit?userId=321Create an Equals Money business application
curl --request POST 'https://staging.hoppa.global/api/v2/business/onboarding/application?userId=321' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Market": "UK",
"BusinessType": "PRIVATE_COMPANY",
"CountryOfIncorporation": "GB",
"RegisteredName": "Example Trading Ltd",
"RegistrationNumber": "12345678",
"BusinessOverview": "Online retail of consumer electronics",
"IndustryMain": "RETAIL",
"IndustrySub": "E_COMMERCE",
"EmployeeCount": 12,
"IncorporationDate": "2020-03-12",
"Website": "https://example.com"
}'Example 200 responseJSON · collapse
{
"id": "application_eq_90210",
"status": "draft",
"accountId": null,
"market": "UK",
"type": "PRIVATE_COMPANY",
"registeredName": "Example Trading Ltd",
"registrationNumber": "12345678",
"createdAt": "2026-08-05T09:35:00Z"
}Discover resources; never manufacture IDs.
After onboarding, ask the API what this customer has. When two or three banks are selected, each returned resource identifies the provider that owns the operation.
/api/v2/banking/providers?userId=123Which providers are available.
/api/v2/banking/accounts?userId=123Accounts, currencies and provider IDs.
/api/v2/banking/balance?userId=123Aggregated balances across providers.
/api/v2/banking/users/123/budgetsEquals Money budgets used by cards and payouts.
/api/v2/banking/users/123/equals-banking-infoEquals Money account and IBAN details.
/api/v2/users/123/assetsInterlace/crypto wallet assets.
Display friendly provider and currency labels in your UI, but pass the exact returned accountId, balanceId, budgetId, payeeId or local cardId back to the API.
Resolve the product before ordering.
GET /tiersPOST /users/{id}/tierGET /tiers/card-tier/{tierId}POST /cardsOrder a virtual card
curl --request POST 'https://staging.hoppa.global/api/v2/cards' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: card-order-customer-1042-v1' \
--data '{
"UserId": 123,
"CardTypeId": 456,
"Phone": "+447700900123",
"Currency": "GBP",
"CardName": "Jane main card",
"BudgetId": "budget_only_for_equals_money",
"AutoLockEnabled": false
}'Example 201 responseJSON · collapse
{
"Id": 789,
"UserId": 123,
"ExternalCardId": "provider_card_771",
"Nickname": "Jane main card",
"CardType": "VIRTUAL",
"Status": "PENDING",
"Currency": "GBP",
"CardTypeId": 456,
"TierId": 12,
"AutoLockEnabled": false,
"CreatedAt": "2026-08-05T09:40:00Z"
}Remove BudgetId for Interlace and BPay. For Equals Money it is required. For a physical card also send complete DeliveryAddress and, where configured, a design ID.
Physical Interlace cards
- Quote production and mailing fees with
GET /api/v2/cards/physical-card-fees?userId=123&country=GB&cardTypeId=456. - Show both fee rows and the total to the customer.
- Order the card. For an existing pending card, quote
GET /cards/{cardId}/bulk-ship/quoteand executePOST /cards/{cardId}/bulk-ship.
Manage an issued card
/api/v2/cards?userId=123List local cards. Use the returned local Id for all card actions.
/api/v2/cards/789?userId=123Fetch status and safe details.
/api/v2/cards/789/activate?userId=123Physical card after delivery.
/api/v2/cards/789/freeze?userId=123Temporary stop; supported across providers.
/api/v2/cards/789/enable?userId=123Re-enable unless system-blocked.
/api/v2/cards/789/pin?userId=123PIN must satisfy documented six-digit rules.
/api/v2/cards/789/widget?userId=123Short-lived secure iframe URL. Never persist card data.
/api/v2/cards/789?userId=123Interlace only. Permanent cancellation.
Move money using the card’s provider.
The public card endpoints look the same, but the source and destination are provider-specific.
Quantum USD → card. Unload returns card funds to the Quantum wallet.
Linked fiat account → card. Crypto funding uses BoomFi via /card-loads/crypto.
Budget → card balance. Ensure the budget has enough USD-equivalent funds.
Top up a card
curl --request POST 'https://staging.hoppa.global/api/v2/cards/topup' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: topup-card-789-20260805-001' \
--data '{
"CardId": 789,
"Token": "USD",
"Value": 100
}'Example 200 responseJSON · collapse
{
"Success": true,
"OrderId": "topup_5501",
"Token": "USD",
"Value": 100,
"Fee": 2,
"Message": "Card top-up completed",
"CreatedAt": "2026-08-05T09:42:00Z"
}Unload a card
curl --request POST 'https://staging.hoppa.global/api/v2/cards/unload-card' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: unload-card-789-20260805-001' \
--data '{
"CardId": 789,
"Currency": "USD",
"Value": 25
}'Example 200 responseJSON · collapse
{
"Success": true,
"CardId": 789,
"RequestedAmount": 25,
"ActualAmount": 25,
"Fee": 0,
"NetAmount": 25,
"Currency": "USD",
"Status": "COMPLETED",
"TransactionId": "txn_unload_4401",
"CompletedAt": "2026-08-05T09:43:00Z"
}Use the four-step payout state machine.
First create and, when required, verify a payee. Then quote, check, initiate and finally create the payout.
A. Create the IBAN payee
/api/v2/banking/payees/required-fields?userId=123&paymentType=COMPANY&paymentMethod=SEPA.CREDITTRANSFER¤cy=EURBuild the form from this response. For SEPA, send the IBAN in Iban and the BIC in Bic when requested.
Validate and create a payee
curl --request POST 'https://staging.hoppa.global/api/v2/banking/payees?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: payee-acme-eur-v1' \
--data '{
"Name": "Acme Supplies Ltd",
"PaymentType": "COMPANY",
"PaymentMethod": "SEPA.CREDITTRANSFER",
"Currency": "EUR",
"Iban": "DE89370400440532013000",
"Bic": "COBADEFFXXX",
"BankName": "Example Bank",
"Comments": "Approved supplier"
}'Example 202 responseJSON · collapse
{
"Success": true,
"VerificationToken": "verification_abc123",
"Message": "OTP sent",
"ExpiresAt": "2026-08-05T09:50:00Z",
"RecipientName": "Acme Supplies Ltd",
"AccountNumberLast4": "3000"
}B. Quote and pay
Quote a payout
curl --request POST 'https://staging.hoppa.global/api/v2/banking/quotations?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: payout-invoice-2026-018-quote' \
--data '{
"PayeeId": 902,
"FromCurrency": "EUR",
"Amount": 125.5,
"FeeMethod": "INCLUDED",
"BalanceId": "provider_balance_or_budget_id"
}'Example 200 responseJSON · collapse
{
"IsAvailable": true,
"Id": "quote_eq_771",
"QuoteRequestId": "quote_request_990",
"Rate": "1.0000",
"Fees": [
{
"Amount": "1.50",
"Currency": "EUR"
}
],
"ExpirationTime": "2026-08-05T09:48:00Z"
}2 Check the payout
POST /api/v2/banking/payouts/check?userId=123
{
"PayeeId": 902,
"QuotationId": "id-from-quotation",
"Amount": "125.50",
"Currency": "EUR",
"BalanceId": "provider_balance_or_budget_id",
"Memo": "Invoice 2026-018"
}3 Initiate and send OTP
POST /api/v2/banking/payouts/initiate?userId=123
{
"CheckId": "check-id",
"QuoteRequestId": "quote-request-id",
"PayeeId": 902,
"Amount": "125.50",
"Currency": "EUR",
"FromCurrency": "EUR",
"BalanceId": "provider_balance_or_budget_id"
}4 Verify OTP
POST /api/v2/banking/otp/verify?userId=123
{
"verificationId": "id-from-initiate",
"code": "123456"
}5 Create the payout
POST /api/v2/banking/payouts?userId=123
{
"VerificationToken": "verified-token",
"CheckId": "check-id",
"QuoteRequestId": "quote-request-id",
"PayeeId": 902,
"Amount": "125.50",
"Currency": "EUR",
"FromCurrency": "EUR",
"BalanceId": "provider_balance_or_budget_id"
}Treat API responses as acceptance, not settlement.
Store the local Hoppa ID immediately, then update your state from webhooks and scheduled reconciliation.
List unified banking transactions
curl --request GET 'https://staging.hoppa.global/api/v2/banking/transactions?userId=123&page=1&pageSize=50' \
-H 'x-api-key: YOUR_API_KEY'Example 200 responseJSON · collapse
{
"Transactions": [
{
"Id": "txn_1001",
"Provider": "EqualsMoney",
"Amount": "125.50",
"Currency": "EUR",
"Status": "COMPLETED",
"CreatedAt": "2026-08-05T08:00:00Z"
}
],
"Total": 1,
"Page": 1,
"PageSize": 50
}/api/v2/banking/transactionsUnified view across provider accounts.
/api/v2/transactionsFees, card links and metadata.
/api/v2/cards/{cardId}/transactionsAuthorisations and card movements.
/api/v2/banking/payouts/{payoutId}Provider-refreshed payout state.
Webhook receiver rules
user.registeredcardholder.createdcardholder.approvedcard.createdcard.updatedcard.deletedcard.3ds.otpMove money only between discovered balances.
Use account and budget IDs returned for this user. The banking layer can create and maintain Equals Money budgets, move funds internally, and quote then execute foreign-exchange trades.
Create an Equals Money budget
curl --request POST 'https://staging.hoppa.global/api/v2/banking/users/123/budgets' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "Operations GBP",
"Currencies": [
"GBP",
"EUR"
],
"Type": "individual",
"Features": [
"peopleCards"
],
"AllowCurrencyAlignment": true
}'Example 201 responseJSON · collapse
{
"BudgetId": "budget_gbp_cards",
"AccountId": "account_eq_123",
"Name": "Operations GBP",
"Type": "individual",
"Status": "active",
"AllowCurrencyAlignment": true,
"Currencies": [
"GBP",
"EUR"
],
"Balances": [
{
"Currency": "GBP",
"Available": "0.00"
}
],
"CreatedAt": "2026-08-05T09:45:00Z"
}Transfer between a user’s balances
curl --request POST 'https://staging.hoppa.global/api/v2/banking/transfers/internal' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"SourceBalanceId": "balance_gbp_primary",
"DestinationBalanceId": "budget_gbp_cards",
"Amount": 250,
"Currency": "GBP",
"Reference": "Fund card budget"
}'Example 201 responseJSON · collapse
{
"Success": true,
"TransferId": "transfer_eq_771",
"Status": "PENDING",
"Amount": 250,
"Currency": "GBP",
"Provider": "EqualsMoney",
"CreatedAt": "2026-08-05T09:46:00Z",
"ErrorMessage": null
}Quote a foreign-exchange trade
curl --request POST 'https://staging.hoppa.global/api/v2/banking/trades/quote?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"AccountId": "account_from_banking_accounts",
"BaseCurrency": "GBP",
"QuoteCurrency": "EUR",
"Amount": 500,
"Side": "sell"
}'Example 200 responseJSON · collapse
{
"QuoteId": "fx_quote_991",
"BaseCurrency": "GBP",
"QuoteCurrency": "EUR",
"Amount": 500,
"QuoteAmount": 585.25,
"ExchangeRate": 1.1705,
"Provider": "EqualsMoney",
"ExpiresAt": "2026-08-05T09:52:00Z"
}/api/v2/banking/users/{userId}/budgets/{budgetId}/api/v2/banking/users/{userId}/budgets/{budgetId}/transfer/api/v2/banking/trades/execute/api/v2/banking/orders/quote/api/v2/banking/orders/tradeChoose the route from the source and destination.
“Transfer” is not one operation. First identify who owns the source balance and where money must finish. The selected bank combination below marks which routes are available for the current setup.
User crypto wallet→Company treasury
POST /transfers/user-to-masterCompany treasury→User crypto wallet
POST /transfers/master-to-userUSDC / USDT→Interlace Quantum USD
POST /transfers/crypto-to-quantum-transferInterlace Quantum USD→USDC / USDT
POST /transfers/quantum-usd-to-crypto-exchangeEquals Money budget→Another budget on same account
POST /banking/users/{userId}/budgets/{budgetId}/transferEquals Money budget→User Interlace USDC address
POST /crypto-virtual-accounts/equals-to-interlaceEquals Money budget→USDC / USDT address + chain
POST /crypto-virtual-accounts/equals-to-wallet/*BoomFi crypto deposit→BPay card in USD / EUR
POST /card-loads/cryptoBPay account or Equals budget→IBAN / bank payee
POST /banking/payoutsUser crypto balance→Blockchain wallet
POST /transfers/withdrawals/cryptoCompany treasury transfers
Use these only for movement between the authenticated company master wallet and one of its users. UserId is always the customer side of the transfer.
Sweep a user balance to the master wallet
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/user-to-master' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "100.00",
"Currency": "USDC",
"Description": "Move user funds to company treasury",
"ExternalReferenceId": "treasury_sweep_1042_001",
"Metadata": {
"customerId": "customer_1042"
}
}'Example 201 responseJSON · collapse
{
"Id": "transfer_10001",
"Status": "PENDING",
"UserId": 123,
"Amount": "100.00",
"Currency": "USDC",
"TransferType": "user_to_master_transfer",
"ExternalReferenceId": "treasury_sweep_1042_001",
"CreatedAt": "2026-08-05T09:47:00Z"
}Fund a user from the master wallet
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/master-to-user' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "75.00",
"Currency": "USDC",
"Description": "Fund customer wallet",
"ExternalReferenceId": "customer_funding_1042_001",
"Metadata": {
"approvedBy": "treasury-system"
}
}'Example 201 responseJSON · collapse
{
"Id": "transfer_10002",
"Status": "PENDING",
"UserId": 123,
"Amount": "75.00",
"Currency": "USDC",
"TransferType": "master_to_user_transfer",
"ExternalReferenceId": "customer_funding_1042_001",
"CreatedAt": "2026-08-05T09:48:00Z"
}Interlace Quantum conversions
The destination of crypto-to-Quantum is always USD. The reverse path accepts only the supported target crypto currencies. Each operation currently has its own one-request-per-15-seconds limit; respect Retry-After after a 429.
Convert crypto to Quantum USD
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/crypto-to-quantum-transfer?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"SourceCurrency": "USDC",
"DestinationCurrency": "USD",
"Amount": 125
}'Example 200 responseJSON · collapse
{
"Success": true,
"TransferId": "crypto_quantum_201",
"Message": "Transfer submitted",
"CreatedAt": "2026-08-05T09:49:00Z",
"Details": {
"SourceAmount": "125.00",
"SourceCurrency": "USDC",
"DestinationCurrency": "USD",
"Status": "PROCESSING"
}
}Convert Quantum USD to crypto
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/quantum-usd-to-crypto-exchange?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Currency": "USDC",
"Amount": 100
}'Example 200 responseJSON · collapse
{
"Success": true,
"Message": "Exchange submitted",
"SourceAmount": 100,
"TargetCurrency": "USDC",
"CryptoAmountReceived": 99.25,
"Rate": 1,
"Fee": 0.75,
"TradeId": "quantum_crypto_202",
"Status": "PROCESSING",
"InitiatedAt": "2026-08-05T09:50:00Z",
"Details": {
"SourceCurrency": "USD"
}
}Equals Money cross-provider transfers
Transfer an Equals budget to Interlace
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/equals-to-interlace' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"FiatCurrency": "GBP",
"Amount": 250,
"BudgetId": "equals_budget_from_banking_api"
}'Example 201 responseJSON · collapse
{
"Success": true,
"Message": "Transfer initiated",
"Reference": "eq_interlace_301",
"UserId": 123,
"BudgetId": "equals_budget_from_banking_api",
"FiatCurrency": "GBP",
"FiatAmount": "250.00",
"CryptoCurrency": "USDC",
"EstimatedCryptoAmount": "330.00",
"EstimatedFeeAmount": "2.50",
"Rate": "0.75",
"ChainId": 1,
"Chain": "ethereum",
"DepositAddress": "interlace_address_from_user_wallet",
"BoomFiPayout": {
"Status": "PENDING"
}
}Initiate an Equals budget transfer to a wallet
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/equals-to-wallet/initiate' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"FiatCurrency": "EUR",
"Amount": 150,
"BudgetId": "equals_budget_from_banking_api",
"CryptoCurrency": "USDC",
"Chain": "ethereum",
"Address": "0x1111111111111111111111111111111111111111"
}'Example 200 responseJSON · collapse
{
"Success": true,
"VerificationToken": "eq_wallet_verify_401",
"Message": "OTP sent",
"ExpiresAt": "2026-08-05T09:55:00Z",
"Reference": "eq_wallet_401",
"UserId": 123,
"BudgetId": "equals_budget_from_banking_api",
"FiatCurrency": "EUR",
"FiatAmount": "150.00",
"CryptoCurrency": "USDC",
"EstimatedCryptoAmount": "168.18",
"EstimatedFeeAmount": "1.50",
"Rate": "0.88",
"ChainId": 1,
"Chain": "ethereum",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"DestinationAddressMasked": "0x1111…1111"
}For an external wallet, display the quote and send the OTP, then finish with POST /api/v2/crypto-virtual-accounts/equals-to-wallet/confirm using UserId, VerificationToken and OtpCode.
Complete transfer endpoint inventory
/api/v2/transfers/api/v2/transfers/{transferId}/api/v2/transfers/wallet-topup/api/v2/transactions/top-up/api/v2/transfers/withdrawals/fee-and-quota/api/v2/transfers/withdrawals/available-balance/api/v2/transfers/withdrawals/validate/api/v2/transfers/withdrawals/crypto/api/v2/transfers/withdrawals/crypto/confirm/api/v2/transfers/crypto-transactions/api/v2/transfers/crypto-refunds/api/v2/transfers/crypto-refunds/gas-fee/api/v2/transfers/crypto-refundsSeparate deposits, conversions and withdrawals.
A wallet address, crypto virtual account, Quantum balance and BPay card are different resources. Show the network and currency together, and never infer a chain from the token symbol.
Use /transfers/wallet-topup for the hosted Transak route, or a returned deposit address for a direct on-chain deposit.
Use /crypto-to-quantum-transfer and /quantum-usd-to-crypto-exchange for Interlace wallet conversions.
Open a BoomFi crypto account, request pay-in addresses, settlement accounts, ramp quotes and supported swap targets.
Use the dedicated Equals-to-Interlace or Equals-to-wallet initiate/confirm operations. Do not imitate them with a generic transfer.
BPay card load from crypto
Create a BPay crypto card load
curl --request POST 'https://staging.hoppa.global/api/v2/card-loads/crypto' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: bpay-crypto-load-789-001' \
--data '{
"UserId": 123,
"CardId": 789,
"CryptoCurrency": "USDC",
"CryptoAmount": "100.00",
"ChainId": 1,
"FiatCurrency": "USD"
}'Example 202 responseJSON · collapse
{
"Id": 5501,
"Status": "AWAITING_DEPOSIT",
"UserId": 123,
"CardId": 789,
"CryptoCurrency": "USDC",
"CryptoAmount": "100.00",
"ChainId": 1,
"FiatCurrency": "USD",
"EstimatedFiatAmount": "99.00",
"DepositInstruction": {
"Address": "0xdepositaddress",
"Network": "ethereum"
},
"CreatedAt": "2026-08-05T09:50:00Z"
}Crypto virtual account
Open a crypto virtual account
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Name": "Customer settlement",
"Providers": [
"boomfi"
],
"Chains": [
{
"ChainId": 1,
"Currencies": [
"USDC",
"USDT"
]
}
]
}'Example 201 responseJSON · collapse
{
"Success": true,
"Message": "Crypto virtual account created",
"Results": [
{
"Provider": "boomfi",
"AccountId": "boomfi_account_771",
"Status": "ACTIVE",
"Chains": [
{
"ChainId": 1,
"Currencies": [
"USDC",
"USDT"
]
}
]
}
]
}/api/v2/crypto-virtual-accounts/trading-overview/api/v2/crypto-virtual-accounts/swap-targets/api/v2/crypto-virtual-accounts/payin-address/api/v2/crypto-virtual-accounts/settlement-accounts/api/v2/crypto-virtual-accounts/equals-to-wallet/initiate/api/v2/crypto-virtual-accounts/equals-to-wallet/confirmExternal withdrawal
- Show fee, quota and spendable balance from
GET /transfers/withdrawals/fee-and-quotaandGET /transfers/withdrawals/available-balance. - Validate currency, chain, amount and destination with
GET /transfers/withdrawals/validate. - Create the withdrawal, then show the OTP input only when the response requires confirmation.
- Confirm through
POST /transfers/withdrawals/crypto/confirmand reconcile using the transfer ID.
Create an external crypto withdrawal
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/withdrawals/crypto' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Currency": "USDC",
"Chain": "ethereum",
"Amount": "50.00",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"ConfirmExchangeRate": true,
"Description": "Customer withdrawal",
"Metadata": {
"externalReferenceId": "withdrawal_9081"
}
}'Example 201 responseJSON · collapse
{
"Success": true,
"TransactionId": "withdrawal_tx_771",
"WithdrawalRequestId": 9081,
"Status": "OTP_REQUIRED",
"ActualAmount": 50,
"Currency": "USDC",
"Fees": [
{
"Type": "NETWORK",
"Amount": "2.00",
"Currency": "USDC"
}
],
"OtpRequired": true,
"OtpExpiresAt": "2026-08-05T10:00:00Z",
"Message": "OTP sent"
}Token swap
Swap supported tokens
curl --request POST 'https://staging.hoppa.global/api/v2/swaptokens/swap' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"TokenIn": "USDC",
"TokenOut": "USDT",
"AmountIn": "100.00",
"Slippage": 0.5,
"ChainIdIn": 1,
"ChainIdOut": 1,
"FromAddress": "wallet_address_from_api",
"ToAddress": "wallet_address_from_api"
}'Example 200 responseJSON · collapse
{
"TransactionId": 701,
"Transaction": {
"Status": "PENDING",
"Hash": null
},
"Route": {
"TokenIn": "USDC",
"TokenOut": "USDT",
"AmountIn": "100.00",
"EstimatedAmountOut": "99.70"
}
}List previous swaps with GET /api/v2/swaptokens/history. The slippage value is a percentage; show it to the customer before submitting.
Add product modules without changing the core customer ID.
These modules reuse your company-scoped API key and Hoppa resources, but they have separate lifecycles. Enable only the modules included in your commercial programme.
Create hosted payment requests, recurring mandates, payouts and withdrawals. Persist the returned ID and status.
/api/v2/payments/*Complete merchant KYB, create the company cardholder, add lightweight users, order 1–20 cards, assign, load and unload.
/api/v2/mor/public/*Manage groups and codes, assignments, verification, reversals, imports, liability and reports. Redemption is idempotent.
/api/v2/vouchers/*Configure programmes, merchants and MIDs, auto-assign points, import transactions, show dashboards and redemption options.
/api/v2/loyalty/*Admins can manage discount codes and associate a discount with a card. Do not expose company-admin credentials to end users.
/api/v2/admin/discount-codes/*Create a hosted payment request
curl --request POST 'https://staging.hoppa.global/api/v2/payments/requests' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "49.99",
"Currency": "GBP",
"Description": "Invoice 2026-042",
"ExternalReferenceId": "invoice_2026_042",
"CallbackUrl": "https://api.example.com/webhooks/hoppa/payments",
"SuccessUrl": "https://app.example.com/payment/success",
"FailureUrl": "https://app.example.com/payment/failed",
"Metadata": {
"orderId": "order_5531"
}
}'Example 201 responseJSON · collapse
{
"Id": 8042,
"UserId": 123,
"CompanyId": 42,
"Amount": "49.99",
"Currency": "GBP",
"Status": "PENDING",
"ExternalReferenceId": "invoice_2026_042",
"PaymentUrl": "https://pay.hoppa.global/r/request_8042",
"CreatedAt": "2026-08-05T09:55:00Z"
}Order a MOR prepaid-card batch
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/cards/batch' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CardTypeId": 456,
"Quantity": 10,
"AutoLockEnabled": true,
"LabelPrefix": "EVENT-2026"
}'Example 200 responseJSON · collapse
{
"Success": true,
"Ordered": 10,
"Cards": [
{
"Id": 9101,
"Label": "EVENT-2026-01",
"Status": "PENDING",
"AutoLockEnabled": true
}
],
"Message": "Card batch accepted"
}/api/v2/mor/public/kyb/api/v2/mor/public/onboarding-status/api/v2/mor/public/cardholder/api/v2/mor/public/users/api/v2/mor/public/cards/{cardId}/assign/api/v2/mor/public/cards/{cardId}/load/api/v2/mor/public/cards/{cardId}/unload/api/v2/mor/public/cards/{cardId}/secure-widgetRedeem a voucher for a user
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/redemptions' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: voucher-welcome-25-customer-1042' \
--data '{
"UserId": 123,
"Code": "WELCOME-25-ABCD"
}'Example 200 responseJSON · collapse
{
"Id": "52fe70de-7bb8-4f1b-b874-fb8123b2ae11",
"VoucherId": "41c5f18f-3bd1-4206-8ac7-94fc53867d2a",
"VoucherName": "Welcome 25",
"Amount": 25,
"Currency": "GBP",
"Status": "COMPLETED",
"TransactionReference": "voucher_tx_772",
"CreatedAt": "2026-08-05T09:56:00Z",
"CompletedAt": "2026-08-05T09:56:01Z"
}Design the back office before go-live.
Support teams need the same IDs and states as your code. Cover user maintenance, onboarding gates, transaction exports, card controls and reconciliation—not only the happy path.
User profile and compliance
List and update users, collect occupation/referral data, inspect detailed KYC state, verify users, upload requested Equals Money documents, and retrieve wallets, assets, crypto addresses and tier.
GET/PUT /api/v2/users/{userId}Config-driven onboarding
Load the gate configuration, check out the required gate, create KYC1/KYC2 sessions, poll onboarding status and assign the approved tier.
GET /api/v2/onboarding/configCard controls and activity
Fetch holders and limits, update limits and auto-lock, list card transactions, estimate Quantum top-up costs, and handle physical-card shipping.
GET /api/v2/cards/{cardId}/limitsTransactions and exports
List, inspect, sync, aggregate and export platform transactions; retrieve Equals Money payment confirmations; repeat the equivalent workflow for whitelabel accounts.
GET /api/v2/transactions/exportDual-balance card funding
Load the dashboard view, preview the conversion and fees, submit funding once, then poll the request ID to a terminal state.
POST /api/v2/dashboard/dual-balance/card-funding/previewSupport escalation
Send the local user and transaction identifiers, a clear customer-visible problem description and your external reference through the transaction-reporting endpoint.
POST /api/v2/admin/support/messages/report-transactionWebhook contract families
Scalar contains receiver contracts for authentication, customer, cardholder, card, transfer, transaction, payment and 3DS event families. Implement one hardened receiver, dispatch by event type, and keep unknown events for later replay instead of dropping them.
Find every documented operation.
This searchable snapshot covers all 330 intentionally exposed operations in the current staging OpenAPI document. Use the guided sections above to choose the correct workflow, then open Scalar for the exact live request and response schema.
Authentication3 operations
POST/Users/AuthenticateRetired legacy authentication endpointlegacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/Users/Authenticate' \
-H 'x-api-key: YOUR_API_KEY'410GoneProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/Users/RefreshTokenRetired legacy refresh endpointlegacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/Users/RefreshToken' \
-H 'x-api-key: YOUR_API_KEY'410GoneProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/Users/MeGet current user informationRequest & responses +
Retrieves information about the currently authenticated user
curl --request GET 'https://staging.hoppa.global/Users/Me' \
-H 'x-api-key: YOUR_API_KEY'200OKAuthenticateResponse
{
"Id": 123,
"Username": "string",
"Email": "user@example.com",
"Firstname": "Jane",
"Lastname": "Doe",
"AccessToken": "USDC",
"RefreshToken": "USDC"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Banking32 operations
GET/api/v2/banking/accountsGet all accounts across all banking providersRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/accounts?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKUnifiedAccountsResponse
{
"Accounts": [
{
"AccountId": "string",
"ParentAccountId": "string",
"BudgetId": "string",
"DisplayName": "string",
"AccountType": "string",
"Status": "PENDING",
"Provider": "EqualsMoney",
"SupportedCurrencies": [
"string"
],
"CreatedAt": "2026-08-05T09:30:00Z"
}
],
"TotalCount": 1
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/accounts/fund-testFund an Equals Money account with a sandbox test credit.testRequest & responses +
Staging only. This endpoint uses the Equals Money sandbox budget-credit simulator and will not work in production. Use AccountId from GET /api/v2/banking/accounts. Amount defaults to 100.00 when omitted.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/accounts/fund-test?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"AccountId": "string",
"BalanceId": "100.00",
"Currency": "USD",
"Amount": {}
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"AccountId": "string",
"BalanceId": "100.00",
"Currency": "USD",
"Amount": {}
}200OKFundAccountResponse
{
"Success": true,
"Message": "string",
"AccountId": "string",
"BudgetId": "string",
"Currency": "USD",
"Amount": "100.00"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/equalsmoney-onboardingCreate an EqualsMoney personal onboarding applicationRequest & responses +
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.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/equalsmoney-onboarding?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'RequestedFeatures=CARDS' \
-F 'MainPurpose=SALARY_OR_INCOME' \
-F 'SourceOfFunds=RECEIVING_FUNDS_FROM_OWN_ACCOUNTS' \
-F 'DestinationOfFunds=AD' \
-F 'CurrenciesRequired=AED' \
-F 'AnnualVolume=0-10000' \
-F 'NumberOfPayments=FEWER-THAN-5' \
-F 'CardPurposes=SALARY_OR_INCOME' \
-F 'CardAnnualSpend=0-10000' \
-F 'NumberOfCardsRequired=0-10' \
-F 'AtmWithdrawalsRequired=true' \
-F 'ProofOfAddress=@/absolute/path/document.pdf'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"RequestedFeatures": [
"CARDS"
],
"MainPurpose": [
"SALARY_OR_INCOME"
],
"SourceOfFunds": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
],
"DestinationOfFunds": [
"AD"
],
"CurrenciesRequired": [
"AED"
],
"AnnualVolume": "0-10000",
"NumberOfPayments": "FEWER-THAN-5",
"CardPurposes": [
"SALARY_OR_INCOME"
],
"CardAnnualSpend": "0-10000",
"NumberOfCardsRequired": "0-10",
"AtmWithdrawalsRequired": true,
"ProofOfAddress": "<binary file>"
}202AcceptedEqualsMoneyOnboardingDashboardResponse
{
"Success": true,
"Message": "string",
"CorrelationId": "string",
"AccountId": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/users/{userId}/equals-banking-infoGet Equals banking information for a specific user in the authenticated company.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/users/123/equals-banking-info?currency=USD' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123currencyquerystringoptionalExample: USD200OKapplication/json
[
{
"UserId": 123,
"FirstName": "Jane",
"LastName": "Doe",
"UserName": "string",
"MaskedEmail": "user@example.com",
"MaskedPhone": "+447700900123",
"PaymentType": "string",
"PaymentMethod": "string",
"Currency": "USD",
"Country": "GB",
"AccountNumber": "string",
"BankName": "string",
"RoutingCodes": [
{
"RoutingCodeType": "string",
"RoutingCodeValue": "string"
}
],
"BankAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
},
"PayeeAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
}
}
]400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/balanceGet aggregated balance across all banking providersRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/balance?userId=123¤cy=USD' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123currencyquerystringoptionalExample: USD200OKUnifiedBalanceResponse
{
"Balances": [
{
"AccountId": "string",
"Currency": "USD",
"Available": 100,
"Current": 100,
"Provider": "EqualsMoney",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"TotalAvailableUsd": 100
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/transactionsGet transactions across all banking providersRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/transactions?Currency=USD&From=2026-08-05T09%3A30%3A00Z&To=2026-08-05T09%3A30%3A00Z&Page=1&PageSize=1&Provider=EqualsMoney' \
-H 'x-api-key: YOUR_API_KEY'Parameters
CurrencyquerystringoptionalExample: USDFromquerystringoptionalExample: 2026-08-05T09:30:00ZToquerystringoptionalExample: 2026-08-05T09:30:00ZPagequeryintegeroptionalExample: 1PageSizequeryintegeroptionalExample: 1ProviderquerystringoptionalExample: EqualsMoneyuserIdqueryintegeroptionalExample: 123200OKUnifiedTransactionsResponse
{
"Transactions": [
{
"TransactionId": "string",
"AccountId": "string",
"Type": "string",
"Amount": 100,
"Currency": "USD",
"Description": "Example description",
"Status": "PENDING",
"Provider": "EqualsMoney",
"CreatedAt": "2026-08-05T09:30:00Z"
}
],
"Total": 1,
"Page": 1,
"PageSize": 1
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/users/{userId}/budgetsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/users/123/budgets' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123200OKUserBudgetListResponse
{
"UserId": 123,
"Total": 1,
"Budgets": [
{
"BudgetId": "string",
"AccountId": "string",
"Name": "string",
"Type": "string",
"ParentId": "string",
"Status": "PENDING",
"AllowCurrencyAlignment": true,
"Currencies": [
"string"
],
"Balances": [
{
"Currency": "USD",
"AvailableBalance": 100,
"LedgerBalance": 100,
"PendingBalance": 100
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/users/{userId}/budgetsOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/users/123/budgets' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Currencies": [
"string"
],
"Type": "string",
"Features": [
"string"
],
"AllowCurrencyAlignment": true
}'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"Name": "string",
"Currencies": [
"string"
],
"Type": "string",
"Features": [
"string"
],
"AllowCurrencyAlignment": true
}201CreatedUserBudgetResponse
{
"BudgetId": "string",
"AccountId": "string",
"Name": "string",
"Type": "string",
"ParentId": "string",
"Status": "PENDING",
"AllowCurrencyAlignment": true,
"Currencies": [
"string"
],
"Balances": [
{
"Currency": "USD",
"AvailableBalance": 100,
"LedgerBalance": 100,
"PendingBalance": 100
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/users/{userId}/budgets/{budgetId}Open request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/users/123/budgets/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123budgetIdpathstringrequiredExample: 123200OKUserBudgetResponse
{
"BudgetId": "string",
"AccountId": "string",
"Name": "string",
"Type": "string",
"ParentId": "string",
"Status": "PENDING",
"AllowCurrencyAlignment": true,
"Currencies": [
"string"
],
"Balances": [
{
"Currency": "USD",
"AvailableBalance": 100,
"LedgerBalance": 100,
"PendingBalance": 100
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/banking/users/{userId}/budgets/{budgetId}Updates user-editable budget details. Budget status is managed by Equals Money and is read-only.Request & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/banking/users/123/budgets/123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"AllowCurrencyAlignment": true
}'Parameters
userIdpathintegerrequiredExample: 123budgetIdpathstringrequiredExample: 123Example request body
{
"Name": "string",
"AllowCurrencyAlignment": true
}200OKUserBudgetResponse
{
"BudgetId": "string",
"AccountId": "string",
"Name": "string",
"Type": "string",
"ParentId": "string",
"Status": "PENDING",
"AllowCurrencyAlignment": true,
"Currencies": [
"string"
],
"Balances": [
{
"Currency": "USD",
"AvailableBalance": 100,
"LedgerBalance": 100,
"PendingBalance": 100
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/users/{userId}/budgets/{budgetId}/transferOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/users/123/budgets/123/transfer' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"DestinationBudgetId": "string",
"Amount": 100,
"Currency": "USD",
"Reference": "external_reference_123"
}'Parameters
userIdpathintegerrequiredExample: 123budgetIdpathstringrequiredExample: 123Example request body
{
"DestinationBudgetId": "string",
"Amount": 100,
"Currency": "USD",
"Reference": "external_reference_123"
}200OKUserBudgetTransferResponse
{
"Success": true,
"TransferId": "string",
"SourceBudgetId": "string",
"DestinationBudgetId": "string",
"Currency": "USD",
"Amount": "100.00",
"Reference": "external_reference_123"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/payeesList payees across all banking providersRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/payees?Limit=1&Page=1&Currency=USD&SearchName=example&userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
LimitqueryintegeroptionalExample: 1PagequeryintegeroptionalExample: 1CurrencyquerystringoptionalExample: USDSearchNamequerystringoptionalExample: exampleuserIdqueryintegeroptionalExample: 123200OKUnifiedPayeesResponse
{
"Payees": [
{
"PayeeId": 123,
"Name": "string",
"BankName": "string",
"Currency": "USD",
"AccountNumber": "string",
"Iban": "string",
"Status": "PENDING",
"Providers": [
"EqualsMoney"
],
"ProviderRecords": [
{
"Provider": "EqualsMoney",
"ExternalPayeeId": "external_reference_123",
"LocalPayeeId": 123
}
],
"CreatedAt": "2026-08-05T09:30:00Z"
}
],
"Total": 1,
"Page": 1,
"Limit": 1
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/payeesPayee Step 1: validate a new payee and send the OTP required by Equals Money.Request & responses +
This endpoint does not create the payee immediately. Equals Money requires recipient OTP approval before creation.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/payees?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"PaymentType": "COMPANY",
"Currency": "USD",
"Name": "string",
"AccountNumber": "string",
"Iban": "string",
"Bic": "string",
"BankCode": "string",
"BankName": "string",
"FirstName": "Jane",
"LastName": "Doe",
"RoutingCodeList": [
{
"RoutingCodeType": "string",
"RoutingCodeValue": "string"
}
],
"routingCodes": [
{
"RoutingCodeType": "string",
"RoutingCodeValue": "string"
}
],
"BankAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
},
"PayeeAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
},
"Comments": "string",
"PaymentMethod": "SWIFT",
"VerificationMethod": "string"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"PaymentType": "COMPANY",
"Currency": "USD",
"Name": "string",
"AccountNumber": "string",
"Iban": "string",
"Bic": "string",
"BankCode": "string",
"BankName": "string",
"FirstName": "Jane",
"LastName": "Doe",
"RoutingCodeList": [
{
"RoutingCodeType": "string",
"RoutingCodeValue": "string"
}
],
"routingCodes": [
{
"RoutingCodeType": "string",
"RoutingCodeValue": "string"
}
],
"BankAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
},
"PayeeAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
},
"Comments": "string",
"PaymentMethod": "SWIFT",
"VerificationMethod": "string"
}202AcceptedPayeeInitiateResponse
{
"Success": true,
"VerificationToken": "USDC",
"Message": "string",
"ExpiresAt": "2026-08-05T09:30:00Z",
"RecipientName": "string",
"AccountNumberLast4": "string",
"VerificationResult": {
"Status": "PENDING",
"Title": "string",
"Message": "string",
"ReasonCode": "string",
"NameMatch": true,
"CanProceed": true
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/payees/confirmPayee Step 2: create and confirm the payee after OTP verification.Request & responses +
Use the VerificationToken returned from POST /api/v2/banking/payees after it has been verified through POST /api/v2/banking/otp/verify.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/payees/confirm?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"VerificationToken": "USDC"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"VerificationToken": "USDC"
}201CreatedPayeeResponse
{
"Id": 123,
"ExternalId": "external_reference_123",
"FirstName": "Jane",
"LastName": "Doe",
"UserName": "string",
"PaymentType": "string",
"PaymentMethod": "string",
"Currency": "USD",
"AccountNumber": "string",
"BankName": "string",
"RoutingCodeList": [
{
"RoutingCodeType": "string",
"RoutingCodeValue": "string"
}
],
"routingCodes": [
{
"RoutingCodeType": "string",
"RoutingCodeValue": "string"
}
],
"BankAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
},
"PayeeAddress": {
"Country": "GB",
"City": "London",
"State": "string",
"PostalCode": "SW1A 1AA",
"AddressLine1": "string",
"AddressLine2": "string"
},
"Comments": "string",
"Provider": "string",
"RequiresConfirmation": true,
"Status": "PENDING",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/payees/required-fieldsGet required fields for payee creationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/payees/required-fields?PaymentType=example&Currency=USD&Country=GB' \
-H 'x-api-key: YOUR_API_KEY'Parameters
PaymentTypequerystringoptionalExample: exampleCurrencyquerystringoptionalExample: USDCountryquerystringoptionalExample: GB200OKPayeeRequiredFieldsResponse
{
"Data": [
{
"PaymentMethod": "SWIFT",
"Fields": [
{
"FieldName": "string",
"ValidationRules": [
{}
]
}
]
}
]
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/banking/payees/{payeeId}Delete a payee from ALL banking providers where user has accountsRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/banking/payees/123?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
payeeIdpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 123200OKUnifiedPayeeDeleteResponse
{
"Success": true,
"Results": [
{
"Provider": "EqualsMoney",
"Success": true,
"ExternalPayeeId": "external_reference_123",
"ErrorMessage": "string"
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/quotationsPayout Step 1: create a quote for an existing payee.Request & responses +
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.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/quotations?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"PayeeId": 123,
"FromCurrency": "USD",
"Amount": 100,
"FeeMethod": "100.00",
"BalanceId": "100.00"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"PayeeId": 123,
"FromCurrency": "USD",
"Amount": 100,
"FeeMethod": "100.00",
"BalanceId": "100.00"
}200OKQuotationResponse
{
"IsAvailable": true,
"UnavailableReason": "string",
"RetryAfterSeconds": 1,
"Id": "string",
"QuoteRequestId": "string",
"Rate": "string",
"Fees": [
{
"Currency": "USD",
"Amount": "100.00",
"FeeType": 1
}
],
"ExpirationTime": "string",
"CreateTime": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/payouts/checkPayout Step 2: check the quoted payout before OTP approval.Request & responses +
Send the quote Id from POST /api/v2/banking/quotations as QuotationId. The returned CheckId is used in POST /api/v2/banking/payouts/initiate.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/payouts/check?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"PayeeId": 123,
"QuotationId": "string",
"Amount": "100.00",
"Currency": "USD",
"BalanceId": "100.00",
"Memo": "Example description",
"Reason": "string"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"PayeeId": 123,
"QuotationId": "string",
"Amount": "100.00",
"Currency": "USD",
"BalanceId": "100.00",
"Memo": "Example description",
"Reason": "string"
}200OKCheckPayoutResponse
{
"CheckId": "string",
"Pass": true,
"DetailMessage": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/payouts/initiatePayout Step 3: send the OTP for a checked payout.Request & responses +
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.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/payouts/initiate?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CheckId": "string",
"PayeeId": 123,
"Amount": "100.00",
"Currency": "USD",
"QuoteRequestId": "string",
"FromCurrency": "USD",
"BalanceId": "100.00"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"CheckId": "string",
"PayeeId": 123,
"Amount": "100.00",
"Currency": "USD",
"QuoteRequestId": "string",
"FromCurrency": "USD",
"BalanceId": "100.00"
}200OKPayoutInitiateResponse
{
"Success": true,
"VerificationToken": "USDC",
"Message": "string",
"ExpiresAt": "2026-08-05T09:30:00Z",
"RecipientName": "string",
"Amount": 100,
"Currency": "USD"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/payoutsList payout transactions for the authenticated user or API-key selected user.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/payouts?limit=10&page=1¤cy=USD&clientTransactionId=123&userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
limitqueryintegeroptionalExample: 10pagequeryintegeroptionalExample: 1currencyquerystringoptionalExample: USDclientTransactionIdquerystringoptionalExample: 123userIdqueryintegeroptionalExample: 123200OKPayoutListResponse
{
"Total": 1,
"List": [
{
"Id": 123,
"ExternalId": "external_reference_123",
"ClientTransactionId": "string",
"BusinessId": "string",
"BusinessTypeCode": 1,
"BalanceId": "100.00",
"PayeeId": 123,
"FromAmount": "100.00",
"FromCurrency": "USD",
"ToAmount": "100.00",
"ToCurrency": "USD",
"Status": "PENDING",
"Message": "string",
"Refund": {
"Amount": "100.00",
"Currency": "USD"
},
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"Fees": [
{
"Currency": "USD",
"Amount": "100.00",
"FeeType": 1
}
]
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/payoutsPayout Step 4: create the payout after OTP verification.Request & responses +
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.
curl --request POST 'https://staging.hoppa.global/api/v2/banking/payouts?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CheckId": "string",
"PayeeId": 123,
"Amount": "100.00",
"Currency": "USD",
"VerificationToken": "USDC",
"QuoteRequestId": "string",
"FromCurrency": "USD",
"BalanceId": "100.00"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"CheckId": "string",
"PayeeId": 123,
"Amount": "100.00",
"Currency": "USD",
"VerificationToken": "USDC",
"QuoteRequestId": "string",
"FromCurrency": "USD",
"BalanceId": "100.00"
}201CreatedCreatePayoutResponse
{
"Id": 123,
"ExternalId": "external_reference_123",
"ClientTransactionId": "string",
"Status": "PENDING",
"Message": "string",
"FromAmount": "100.00",
"FromCurrency": "USD",
"ToAmount": "100.00",
"ToCurrency": "USD",
"Fees": [
{
"Currency": "USD",
"Amount": "100.00",
"FeeType": 1
}
],
"CreatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/payouts/{payoutId}Get a payout transaction by ID for the authenticated user or API-key selected user.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/payouts/123?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
payoutIdpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 123200OKPayoutResponse
{
"Id": 123,
"ExternalId": "external_reference_123",
"ClientTransactionId": "string",
"BusinessId": "string",
"BusinessTypeCode": 1,
"BalanceId": "100.00",
"PayeeId": 123,
"FromAmount": "100.00",
"FromCurrency": "USD",
"ToAmount": "100.00",
"ToCurrency": "USD",
"Status": "PENDING",
"Message": "string",
"Refund": {
"Amount": "100.00",
"Currency": "USD"
},
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"Fees": [
{
"Currency": "USD",
"Amount": "100.00",
"FeeType": 1
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/otp/verifyVerify an OTP code for a pending banking operation such as payout creation.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/otp/verify?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"VerificationToken": "USDC",
"OtpCode": "string"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"VerificationToken": "USDC",
"OtpCode": "string"
}200OKOtpVerifyResponse
{
"Success": true,
"Message": "string",
"ErrorCode": "string",
"VerificationToken": "USDC",
"RemainingAttempts": 1,
"IsExpired": true,
"IsLocked": true
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/otp/resendResend the OTP code for a pending banking operation.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/otp/resend?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"VerificationToken": "USDC"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"VerificationToken": "USDC"
}200OKOtpResendResponse
{
"Success": true,
"Message": "string",
"ExpiresAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/transfers/internalExecute an internal transfer between balances for a specific user within the authenticated company.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/transfers/internal' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"SourceBalanceId": "100.00",
"DestinationBalanceId": "100.00",
"Amount": 100,
"Currency": "USD",
"Reference": "external_reference_123"
}'Example request body
{
"UserId": 123,
"SourceBalanceId": "100.00",
"DestinationBalanceId": "100.00",
"Amount": 100,
"Currency": "USD",
"Reference": "external_reference_123"
}201CreatedUnifiedTransferResponse
{
"Success": true,
"TransferId": "string",
"Status": "PENDING",
"Amount": 100,
"Currency": "USD",
"Provider": "EqualsMoney",
"CreatedAt": "2026-08-05T09:30:00Z",
"ErrorMessage": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/quotesGet a quote for a transferRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/quotes?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"SourceAccountId": "string",
"PayeeId": 123,
"Amount": 100,
"SourceCurrency": "USD",
"TargetCurrency": "USD"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"SourceAccountId": "string",
"PayeeId": 123,
"Amount": 100,
"SourceCurrency": "USD",
"TargetCurrency": "USD"
}200OKUnifiedQuoteResponse
{
"QuoteId": "string",
"SourceAmount": 100,
"SourceCurrency": "USD",
"TargetAmount": 100,
"TargetCurrency": "USD",
"ExchangeRate": 100,
"Fee": 100,
"Provider": "EqualsMoney",
"ExpiresAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/orders/quoteOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/orders/quote?accountId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"sourceCurrency": {
"amount": 100,
"currency": {
"budgetId": "string",
"currencyCode": "USD"
}
},
"targetCurrency": {
"amount": 100,
"currency": {
"budgetId": "string",
"currencyCode": "USD"
}
},
"settlementDate": "20260505",
"type": {
"from": "balance",
"to": "payment",
"recipientId": "string"
}
}'Parameters
accountIdquerystringoptionalExample: 123Example request body
{
"sourceCurrency": {
"amount": 100,
"currency": {
"budgetId": "string",
"currencyCode": "USD"
}
},
"targetCurrency": {
"amount": 100,
"currency": {
"budgetId": "string",
"currencyCode": "USD"
}
},
"settlementDate": "20260505",
"type": {
"from": "balance",
"to": "payment",
"recipientId": "string"
}
}200OKEqualsMoneyQuoteResponse
{
"orderId": "string",
"quoteRequestId": "string",
"settlement": {
"date": "2026-08-05",
"price": {
"amount": 100,
"currency": "USD"
},
"charges": {
"fee": 100,
"margin": 100,
"other": 100
}
},
"quote": {
"rate": 100,
"inverseRate": 100,
"fromGbpAmount": 100,
"from": {
"amount": 100,
"currency": "USD"
},
"to": {
"amount": 100,
"currency": "USD"
},
"direction": 1
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/orders/tradeOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/orders/trade?accountId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"orderId": "string",
"quoteRequestId": "string",
"moveMoneyRequestId": "string",
"payments": {
"amount": 100,
"currency": {
"budgetId": "string",
"currencyCode": "USD"
},
"recipientId": "string",
"internalReference": "external_reference_123",
"externalReference": "external_reference_123"
}
}'Parameters
accountIdquerystringoptionalExample: 123Example request body
{
"orderId": "string",
"quoteRequestId": "string",
"moveMoneyRequestId": "string",
"payments": {
"amount": 100,
"currency": {
"budgetId": "string",
"currencyCode": "USD"
},
"recipientId": "string",
"internalReference": "external_reference_123",
"externalReference": "external_reference_123"
}
}200OKEqualsMoneyTradeResponse
{
"orderId": "string",
"bank": "string",
"settlement": {
"date": "2026-08-05",
"price": {
"amount": 100,
"currency": "USD"
},
"charges": {
"fee": 100,
"margin": 100,
"other": 100
}
},
"trade": {
"rate": 100,
"inverseRate": 100,
"from": {
"amount": 100,
"currency": "USD"
},
"to": {
"amount": 100,
"currency": "USD"
}
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/budgets/{budgetId}/transferOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/budgets/123/transfer?accountId=123&userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"destinationBudgetId": "string",
"currency": "USD",
"amount": "100.00",
"reference": "external_reference_123"
}'Parameters
budgetIdpathstringrequiredExample: 123accountIdquerystringoptionalExample: 123userIdqueryintegeroptionalExample: 123Example request body
{
"destinationBudgetId": "string",
"currency": "USD",
"amount": "100.00",
"reference": "external_reference_123"
}200OKEqualsMoneyTransferResponse
{
"success": true,
"debitBoxTransactionId": {},
"creditBoxTransactionId": {}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/trades/quoteGet FX trade quoteRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/trades/quote?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"AccountId": "string",
"BaseCurrency": "USD",
"QuoteCurrency": "USD",
"Amount": 100,
"Side": "buy"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"AccountId": "string",
"BaseCurrency": "USD",
"QuoteCurrency": "USD",
"Amount": 100,
"Side": "buy"
}200OKUnifiedTradeQuoteResponse
{
"QuoteId": "string",
"BaseCurrency": "USD",
"QuoteCurrency": "USD",
"Amount": 100,
"QuoteAmount": 100,
"ExchangeRate": 100,
"Provider": "EqualsMoney",
"ExpiresAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/banking/trades/executeExecute FX tradeRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/banking/trades/execute?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"QuoteId": "string",
"AccountId": "string"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"QuoteId": "string",
"AccountId": "string"
}201CreatedUnifiedTradeResponse
{
"Success": true,
"TradeId": "string",
"Status": "PENDING",
"Amount": 100,
"ReceivedAmount": 100,
"ExchangeRate": 100,
"Provider": "EqualsMoney",
"ExecutedAt": "2026-08-05T09:30:00Z",
"ErrorMessage": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/banking/providersGet list of banking providers the current user has accounts withRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/banking/providers?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKapplication/json
[
"string"
]400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
BusinessOnboarding8 operations
GET/api/v2/business/onboarding/optionsGet canonical EqualsMoney KYB onboarding option values for client select fields.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/business/onboarding/options' \
-H 'x-api-key: YOUR_API_KEY'200OKKybOnboardingOptionsResponse
{
"Markets": [
{
"Key": "string",
"Value": "string"
}
],
"BusinessTypes": [
{
"Key": "string",
"Value": "string"
}
],
"EmployeeCounts": [
{
"Key": "string",
"Value": "string"
}
],
"AssociationTypes": [
{
"Key": "string",
"Value": "string"
}
],
"Industries": [
{
"SubIndustries": [
{
"Key": "string",
"Value": "string"
}
],
"Key": "string",
"Value": "string"
}
],
"RequestedFeatures": [
{
"Key": "string",
"Value": "string"
}
],
"CardPurposes": [
{
"Key": "string",
"Value": "string"
}
],
"CardEstimatedAnnualSpendRanges": [
{
"Key": "string",
"Value": "string"
}
],
"CardCountRanges": [
{
"Key": "string",
"Value": "string"
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/business/onboarding/applicationGet the current application statusRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/business/onboarding/application?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKEqualsMoneyApplicationResponse
{
"id": "string",
"status": "PENDING",
"accountId": "string",
"market": "string",
"type": "string",
"createdAt": "2026-08-05T09:30:00Z",
"updatedAt": "2026-08-05T09:30:00Z",
"firstName": "Jane",
"lastName": "Doe",
"dob": "2026-08-05",
"email": "user@example.com",
"phoneNumber": "+447700900123",
"nationalities": [
"string"
],
"identityDocumentNumber": "string",
"taxId": "string",
"countryOfIncorporation": "GB",
"regionOfIncorporation": "string",
"registeredName": "string",
"registrationNumber": "string",
"tradingNames": [
"string"
],
"businessOverview": "string",
"industry": {
"main": "string",
"sub": "string"
},
"employeeCount": "string",
"incorporationDate": "2026-08-05",
"website": "string",
"businessPromotionDescription": "Example description",
"featureInformation": {
"requestedFeatures": [
"CARDS"
],
"cardsInformation": {
"purposes": [
"SALARY_OR_INCOME"
],
"estimatedAnnualSpend": "0-10000",
"atmWithdrawalsRequired": true,
"businessDisplayName": "string",
"numberOfCardsRequired": "0-10",
"cardsAreForEmployees": true
},
"paymentsInformation": {
"purposes": [
"SALARY_OR_INCOME"
],
"estimatedPaymentCount": "FEWER-THAN-5",
"estimatedPaymentVolume": "0-10000",
"inboundCurrencies": [
"AED"
],
"outboundCurrencies": [
"AED"
],
"receivingCountries": [
"AD"
],
"sendingCountries": [
"AD"
],
"accountFundingSource": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
]
}
},
"addresses": [
{
"addressType": "REGISTERED",
"streetName": "string",
"postcode": "SW1A 1AA",
"city": "London",
"countryCode": "AD",
"buildingNumber": "string",
"buildingName": "string",
"region": "string"
}
],
"associatedPeople": [
{
"associatedPersonId": "string",
"associationType": "string",
"jobTitle": "string",
"ownershipPercentage": 1
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/business/onboarding/applicationCreate a business application for KYBRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/business/onboarding/application?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"BusinessType": "PRIVATE_COMPANY",
"CountryOfIncorporation": "AD",
"RegisteredName": "string",
"BusinessOverview": "string",
"IndustryMain": "ACCOMMODATION_FOOD",
"IndustrySub": "ACCOMMODATION",
"EmployeeCount": "ONE_TO_TEN",
"IncorporationDate": "2026-08-05",
"Market": "UK",
"RegionOfIncorporation": "string",
"RegistrationNumber": "string",
"TradingNames": [
"string"
],
"PhoneNumber": "+447700900123",
"TaxId": "string",
"Website": "string",
"BusinessPromotionDescription": "Example description",
"RequestedFeatures": [
"CARDS"
],
"CardsInformation": {
"BusinessDisplayName": "string",
"Purposes": [
"ADVERTISING_AND_MARKETING"
],
"EstimatedAnnualSpend": "0-10000",
"NumberOfCardsRequired": "0-10",
"CardsAreForEmployees": true,
"AtmWithdrawalsRequired": true
},
"PaymentsInformation": {
"Purposes": [
"PAYING_SUPPLIERS"
],
"AccountFundingSource": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
],
"EstimatedPaymentCount": "FEWER-THAN-5-PAYMENTS",
"EstimatedPaymentVolume": "0-10000",
"InboundCurrencies": [
"AED"
],
"OutboundCurrencies": [
"AED"
],
"ReceivingCountries": [
"AD"
],
"SendingCountries": [
"AD"
]
},
"Addresses": [
{
"AddressType": "REGISTERED",
"StreetName": "string",
"Postcode": "SW1A 1AA",
"City": "London",
"CountryCode": "AD",
"BuildingNumber": "string",
"BuildingName": "string",
"Region": "string"
}
],
"AssociatedPeople": [
{
"AssociatedPersonId": "string",
"AssociationType": "APPLICANT",
"JobTitle": "string",
"OwnershipPercentage": 1
}
]
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"BusinessType": "PRIVATE_COMPANY",
"CountryOfIncorporation": "AD",
"RegisteredName": "string",
"BusinessOverview": "string",
"IndustryMain": "ACCOMMODATION_FOOD",
"IndustrySub": "ACCOMMODATION",
"EmployeeCount": "ONE_TO_TEN",
"IncorporationDate": "2026-08-05",
"Market": "UK",
"RegionOfIncorporation": "string",
"RegistrationNumber": "string",
"TradingNames": [
"string"
],
"PhoneNumber": "+447700900123",
"TaxId": "string",
"Website": "string",
"BusinessPromotionDescription": "Example description",
"RequestedFeatures": [
"CARDS"
],
"CardsInformation": {
"BusinessDisplayName": "string",
"Purposes": [
"ADVERTISING_AND_MARKETING"
],
"EstimatedAnnualSpend": "0-10000",
"NumberOfCardsRequired": "0-10",
"CardsAreForEmployees": true,
"AtmWithdrawalsRequired": true
},
"PaymentsInformation": {
"Purposes": [
"PAYING_SUPPLIERS"
],
"AccountFundingSource": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
],
"EstimatedPaymentCount": "FEWER-THAN-5-PAYMENTS",
"EstimatedPaymentVolume": "0-10000",
"InboundCurrencies": [
"AED"
],
"OutboundCurrencies": [
"AED"
],
"ReceivingCountries": [
"AD"
],
"SendingCountries": [
"AD"
]
},
"Addresses": [
{
"AddressType": "REGISTERED",
"StreetName": "string",
"Postcode": "SW1A 1AA",
"City": "London",
"CountryCode": "AD",
"BuildingNumber": "string",
"BuildingName": "string",
"Region": "string"
}
],
"AssociatedPeople": [
{
"AssociatedPersonId": "string",
"AssociationType": "APPLICANT",
"JobTitle": "string",
"OwnershipPercentage": 1
}
]
}200OKEqualsMoneyApplicationResponse
{
"id": "string",
"status": "PENDING",
"accountId": "string",
"market": "string",
"type": "string",
"createdAt": "2026-08-05T09:30:00Z",
"updatedAt": "2026-08-05T09:30:00Z",
"firstName": "Jane",
"lastName": "Doe",
"dob": "2026-08-05",
"email": "user@example.com",
"phoneNumber": "+447700900123",
"nationalities": [
"string"
],
"identityDocumentNumber": "string",
"taxId": "string",
"countryOfIncorporation": "GB",
"regionOfIncorporation": "string",
"registeredName": "string",
"registrationNumber": "string",
"tradingNames": [
"string"
],
"businessOverview": "string",
"industry": {
"main": "string",
"sub": "string"
},
"employeeCount": "string",
"incorporationDate": "2026-08-05",
"website": "string",
"businessPromotionDescription": "Example description",
"featureInformation": {
"requestedFeatures": [
"CARDS"
],
"cardsInformation": {
"purposes": [
"SALARY_OR_INCOME"
],
"estimatedAnnualSpend": "0-10000",
"atmWithdrawalsRequired": true,
"businessDisplayName": "string",
"numberOfCardsRequired": "0-10",
"cardsAreForEmployees": true
},
"paymentsInformation": {
"purposes": [
"SALARY_OR_INCOME"
],
"estimatedPaymentCount": "FEWER-THAN-5",
"estimatedPaymentVolume": "0-10000",
"inboundCurrencies": [
"AED"
],
"outboundCurrencies": [
"AED"
],
"receivingCountries": [
"AD"
],
"sendingCountries": [
"AD"
],
"accountFundingSource": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
]
}
},
"addresses": [
{
"addressType": "REGISTERED",
"streetName": "string",
"postcode": "SW1A 1AA",
"city": "London",
"countryCode": "AD",
"buildingNumber": "string",
"buildingName": "string",
"region": "string"
}
],
"associatedPeople": [
{
"associatedPersonId": "string",
"associationType": "string",
"jobTitle": "string",
"ownershipPercentage": 1
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/business/onboarding/application/submitSubmit the application for reviewRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/business/onboarding/application/submit?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKEqualsMoneyApplicationResponse
{
"id": "string",
"status": "PENDING",
"accountId": "string",
"market": "string",
"type": "string",
"createdAt": "2026-08-05T09:30:00Z",
"updatedAt": "2026-08-05T09:30:00Z",
"firstName": "Jane",
"lastName": "Doe",
"dob": "2026-08-05",
"email": "user@example.com",
"phoneNumber": "+447700900123",
"nationalities": [
"string"
],
"identityDocumentNumber": "string",
"taxId": "string",
"countryOfIncorporation": "GB",
"regionOfIncorporation": "string",
"registeredName": "string",
"registrationNumber": "string",
"tradingNames": [
"string"
],
"businessOverview": "string",
"industry": {
"main": "string",
"sub": "string"
},
"employeeCount": "string",
"incorporationDate": "2026-08-05",
"website": "string",
"businessPromotionDescription": "Example description",
"featureInformation": {
"requestedFeatures": [
"CARDS"
],
"cardsInformation": {
"purposes": [
"SALARY_OR_INCOME"
],
"estimatedAnnualSpend": "0-10000",
"atmWithdrawalsRequired": true,
"businessDisplayName": "string",
"numberOfCardsRequired": "0-10",
"cardsAreForEmployees": true
},
"paymentsInformation": {
"purposes": [
"SALARY_OR_INCOME"
],
"estimatedPaymentCount": "FEWER-THAN-5",
"estimatedPaymentVolume": "0-10000",
"inboundCurrencies": [
"AED"
],
"outboundCurrencies": [
"AED"
],
"receivingCountries": [
"AD"
],
"sendingCountries": [
"AD"
],
"accountFundingSource": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
]
}
},
"addresses": [
{
"addressType": "REGISTERED",
"streetName": "string",
"postcode": "SW1A 1AA",
"city": "London",
"countryCode": "AD",
"buildingNumber": "string",
"buildingName": "string",
"region": "string"
}
],
"associatedPeople": [
{
"associatedPersonId": "string",
"associationType": "string",
"jobTitle": "string",
"ownershipPercentage": 1
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/business/onboarding/application/documentsUpload an EqualsMoney business onboarding documentRequest & responses +
Uploads one document for the authenticated user's active EqualsMoney business onboarding application. Standard 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. Use `Purpose` to classify the file. Use `OTHER` for industry-specific EDD documents where no more specific proof category fits. ## Standard EDD documents that may be requested | Requirement area | Examples | | --- | --- | | Customer base | Overview of customer count, type, industries, and jurisdictions. | | Third-party funds | Names of third-party payers and the purpose of those payments. | | Beneficiaries | Key beneficiaries/payees and geographic locations. | | Source of funds | Latest audited financial statements, or 3 months corporate bank statements with 3 customer invoices, or eligible unaudited financial statements. | ## Industry-specific additional document requirements | Industry | Additional documents/evidence commonly required | | --- | --- | | 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. | | Investment funds | Funds questionnaire, PPM/OM or other offering documents, investor report where applicable, investment agreement, AML policy/procedures, AML comfort letter. | | Consultancy | Customer and beneficiary/supplier lists, serviced-industries confirmation, client sourcing explanation, customer-base breakdown, 3 months corporate bank statements, AML/CFT supervision status. | | 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. | | 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. | | 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. | | 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. | | Maritime shipping | Vessel list, vessel ownership evidence, owner/yacht manager details, vessel activity monitoring documents, shipping manifest. | | 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. | | 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. | | Jewellery - gold/silver | High-value dealer confirmation, AML policy/procedures, supplier list, licences/memberships, Modern Slavery Policy, bank statements, supplier/client shipping invoices. | | 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. | | 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. | | Weapons and firearms | Licences/permits, manufacturing details, 3 invoices and contractual agreements, buyer due diligence, under-18 controls, customer type confirmation. | | 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. | | 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. | | Mining | Jurisdiction licences/permits, Modern Slavery Policy, ABC policy, ESG policy, government/third-party agreements, onsite mining audit, project details, bank statements, supplier invoices. | | 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. | | 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. | | 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. | | 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. | | 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. | | Portable electronics | Supplier/beneficiary list, 3 supplier invoices, wholesale shipping documents, bank statements with 3 client invoices, operating model, cash due diligence. |
curl --request POST 'https://staging.hoppa.global/api/v2/business/onboarding/application/documents?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'File=@/absolute/path/document.pdf' \
-F 'Purpose=PROOF_OF_FORMATION'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"File": "<binary file>",
"Purpose": "PROOF_OF_FORMATION"
}200OKEqualsMoneyDocumentResponse
{
"id": "string",
"applicationId": "string",
"associatedPersonId": "string",
"purpose": "Example description",
"createdAt": "2026-08-05T09:30:00Z",
"updatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/business/onboarding/associated-peopleGet associated people for the current userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/business/onboarding/associated-people?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKapplication/json
[
{
"Id": 123,
"ExternalId": "external_reference_123",
"FirstName": "Jane",
"LastName": "Doe",
"Email": "user@example.com",
"AssociationType": "string",
"JobTitle": "string",
"OwnershipPercentage": 1,
"IdentityDocumentUploaded": true,
"AddressDocumentUploaded": true,
"CreatedAt": "2026-08-05T09:30:00Z"
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/business/onboarding/associated-peopleCreate associated people for a business application (Directors, UBOs, Applicants)Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/business/onboarding/associated-people?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"People": [
{
"firstName": "Jane",
"lastName": "Doe",
"dateOfBirth": "2026-08-05",
"emailAddress": "user@example.com",
"nationalities": [
"string"
],
"taxId": "string",
"phoneNumber": "+447700900123",
"address": {
"addressLine1": "string",
"townCity": "London",
"postcode": "SW1A 1AA",
"countryCode": "GB",
"addressLine2": "string",
"streetName": "string",
"buildingNumber": "string",
"buildingName": "string",
"region": "string",
"city": "London",
"country": "GB",
"address": "string"
}
}
]
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"People": [
{
"firstName": "Jane",
"lastName": "Doe",
"dateOfBirth": "2026-08-05",
"emailAddress": "user@example.com",
"nationalities": [
"string"
],
"taxId": "string",
"phoneNumber": "+447700900123",
"address": {
"addressLine1": "string",
"townCity": "London",
"postcode": "SW1A 1AA",
"countryCode": "GB",
"addressLine2": "string",
"streetName": "string",
"buildingNumber": "string",
"buildingName": "string",
"region": "string",
"city": "London",
"country": "GB",
"address": "string"
}
}
]
}200OKapplication/json
[
{
"id": "string",
"firstName": "Jane",
"lastName": "Doe",
"dateOfBirth": "2026-08-05",
"emailAddress": "user@example.com",
"nationalities": [
"string"
],
"taxId": "string",
"phoneNumber": "+447700900123",
"createdAt": "2026-08-05T09:30:00Z",
"updatedAt": "2026-08-05T09:30:00Z"
}
]400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/business/onboarding/associated-people/{associatedPersonId}/documentsUpload an EqualsMoney associated person onboarding documentRequest & responses +
Uploads one identity, address, or supporting document for an EqualsMoney associated person.
curl --request POST 'https://staging.hoppa.global/api/v2/business/onboarding/associated-people/123/documents?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'File=@/absolute/path/document.pdf' \
-F 'Purpose=PROOF_OF_IDENTITY'Parameters
associatedPersonIdpathstringrequiredExample: 123userIdqueryintegeroptionalExample: 123Example request body
{
"File": "<binary file>",
"Purpose": "PROOF_OF_IDENTITY"
}200OKEqualsMoneyDocumentResponse
{
"id": "string",
"applicationId": "string",
"associatedPersonId": "string",
"purpose": "Example description",
"createdAt": "2026-08-05T09:30:00Z",
"updatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Card Loads2 operations
POST/api/v2/card-loads/cryptoConvert crypto through BoomFi and load the settled USD/EUR amount onto a BPay card.Request & responses +
The operation is asynchronous. Deposit crypto at the returned instruction, then poll GET /api/v2/card-loads/{id}?userId={userId} until status is completed or failed.
curl --request POST 'https://staging.hoppa.global/api/v2/card-loads/crypto' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"CryptoCurrency": "USDC",
"CryptoAmount": "100.00",
"FiatCurrency": "USD",
"UserId": 123,
"CardId": 123,
"ChainId": 123,
"BoomFiAccountId": "string",
"BoomFiAccountReference": "external_reference_123"
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"CryptoCurrency": "USDC",
"CryptoAmount": "100.00",
"FiatCurrency": "USD",
"UserId": 123,
"CardId": 123,
"ChainId": 123,
"BoomFiAccountId": "string",
"BoomFiAccountReference": "external_reference_123"
}202AcceptedBoomFiBPayCardLoadResponse
{
"Id": 123,
"Status": "PENDING",
"UserId": 123,
"CardId": 123,
"CryptoCurrency": "USDC",
"CryptoAmount": "100.00",
"ChainId": 123,
"FiatCurrency": "USD",
"EstimatedFiatAmount": "100.00",
"SettledFiatAmount": "100.00",
"DepositInstruction": {
"account_id": 123,
"sub_account_id": 123,
"chain_id": 123,
"chain_name": "string",
"currency": "USD",
"address": "string"
},
"BoomFiOrderId": "string",
"BoomFiOrderStatus": "PENDING",
"BoomFiSettlementStatus": "PENDING",
"BPayTransferId": "string",
"FailureMessage": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/card-loads/{id}Get the current BoomFi and BPay status for a crypto card load.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/card-loads/123?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 123200OKBoomFiBPayCardLoadResponse
{
"Id": 123,
"Status": "PENDING",
"UserId": 123,
"CardId": 123,
"CryptoCurrency": "USDC",
"CryptoAmount": "100.00",
"ChainId": 123,
"FiatCurrency": "USD",
"EstimatedFiatAmount": "100.00",
"SettledFiatAmount": "100.00",
"DepositInstruction": {
"account_id": 123,
"sub_account_id": 123,
"chain_id": 123,
"chain_name": "string",
"currency": "USD",
"address": "string"
},
"BoomFiOrderId": "string",
"BoomFiOrderStatus": "PENDING",
"BoomFiSettlementStatus": "PENDING",
"BPayTransferId": "string",
"FailureMessage": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Cards20 operations
GET/api/v2/cards/quantum-topup/estimateEstimate Quantum top-up conversion using CryptoConnect quotes for USD to USDT/USDC and USDT/USDC to USDRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards/quantum-topup/estimate?userId=123&amount=100' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123amountquerynumberoptionalExample: 100200OKQuantumTopUpEstimateResponse
{
"success": true,
"message": "string",
"usdAmount": 100,
"usdToUsdt": {
"baseCurrency": "USD",
"quoteCurrency": "USD",
"baseAmount": "100.00",
"rfqAmount": "100.00",
"rfqCurrency": "USD",
"fee": "100.00",
"feeCurrency": "USD",
"rate": "string",
"quoteId": "string",
"quoteTime": "string",
"ttlMs": "string"
},
"usdToUsdc": {
"baseCurrency": "USD",
"quoteCurrency": "USD",
"baseAmount": "100.00",
"rfqAmount": "100.00",
"rfqCurrency": "USD",
"fee": "100.00",
"feeCurrency": "USD",
"rate": "string",
"quoteId": "string",
"quoteTime": "string",
"ttlMs": "string"
},
"usdtToUsd": {
"baseCurrency": "USD",
"quoteCurrency": "USD",
"baseAmount": "100.00",
"rfqAmount": "100.00",
"rfqCurrency": "USD",
"fee": "100.00",
"feeCurrency": "USD",
"rate": "string",
"quoteId": "string",
"quoteTime": "string",
"ttlMs": "string"
},
"usdcToUsd": {
"baseCurrency": "USD",
"quoteCurrency": "USD",
"baseAmount": "100.00",
"rfqAmount": "100.00",
"rfqCurrency": "USD",
"fee": "100.00",
"feeCurrency": "USD",
"rate": "string",
"quoteId": "string",
"quoteTime": "string",
"ttlMs": "string"
},
"usdt": {
"baseCurrency": "USD",
"quoteCurrency": "USD",
"baseAmount": "100.00",
"rfqAmount": "100.00",
"rfqCurrency": "USD",
"fee": "100.00",
"feeCurrency": "USD",
"rate": "string",
"quoteId": "string",
"quoteTime": "string",
"ttlMs": "string"
},
"usdc": {
"baseCurrency": "USD",
"quoteCurrency": "USD",
"baseAmount": "100.00",
"rfqAmount": "100.00",
"rfqCurrency": "USD",
"fee": "100.00",
"feeCurrency": "USD",
"rate": "string",
"quoteId": "string",
"quoteTime": "string",
"ttlMs": "string"
},
"topupfee": 100,
"topupfeepercent": 100
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}403ForbiddenErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/cards/{cardId}/limitsUpdate card spending limits (daily/weekly/monthly) for a specific user and cardRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/cards/123/limits?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Daily": 100,
"Weekly": 100,
"Monthly": 100
}'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123Example request body
{
"Daily": 100,
"Weekly": 100,
"Monthly": 100
}200OKCardUpdateLimitsResponseV2
{
"Success": true,
"Message": "string",
"Daily": 100,
"Weekly": 100,
"Monthly": 100
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/cardsGet list of cards for a userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKCardListResponseV2
{
"Cards": [
{
"Id": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"DeliveryAddressId": "string",
"Nickname": "string",
"CardType": "string",
"CardNumber": "string",
"ExpiryDate": "2026-08-05",
"Status": "PENDING",
"Balance": {
"Available": "string",
"Pending": "string",
"Frozen": "string",
"Currency": "USD"
},
"Currency": "USD",
"VelocityControl": {
"Type": "string",
"Limit": "string"
},
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CardTypeId": 123,
"CardTypeTierId": 123,
"TierId": 123,
"AutoLockEnabled": true,
"AutoLockActiveUntil": "2026-08-05T09:30:00Z",
"TransakOrder": "string",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"Message": "string",
"Errors": [
{
"key": "string",
"reason": "string"
}
]
}
],
"Total": 1,
"PageTotal": 1
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cardsCreate a new cardRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"CardTypeId": 123,
"Phone": "+447700900123",
"ExternalCardId": "external_reference_123",
"Nickname": "string",
"Currency": "USD",
"CardName": "string",
"BudgetId": "string",
"BillingAddress": {
"Line1": "string",
"Line2": "string",
"City": "London",
"State": "string",
"Country": "GB",
"PostalCode": "SW1A 1AA"
},
"DeliveryAddress": {
"Line1": "string",
"Line2": "string",
"City": "London",
"State": "string",
"Country": "GB",
"PostalCode": "SW1A 1AA"
},
"DeliveryAddressId": "string",
"PhoneCode": "+447700900123",
"DesignId": "string",
"PhysicalCardDesignId": "string",
"DiscountCode": "string",
"AutoLockEnabled": true
}'Example request body
{
"UserId": 123,
"CardTypeId": 123,
"Phone": "+447700900123",
"ExternalCardId": "external_reference_123",
"Nickname": "string",
"Currency": "USD",
"CardName": "string",
"BudgetId": "string",
"BillingAddress": {
"Line1": "string",
"Line2": "string",
"City": "London",
"State": "string",
"Country": "GB",
"PostalCode": "SW1A 1AA"
},
"DeliveryAddress": {
"Line1": "string",
"Line2": "string",
"City": "London",
"State": "string",
"Country": "GB",
"PostalCode": "SW1A 1AA"
},
"DeliveryAddressId": "string",
"PhoneCode": "+447700900123",
"DesignId": "string",
"PhysicalCardDesignId": "string",
"DiscountCode": "string",
"AutoLockEnabled": true
}201CreatedCardResponseV2
{
"Id": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"DeliveryAddressId": "string",
"Nickname": "string",
"CardType": "string",
"CardNumber": "string",
"ExpiryDate": "2026-08-05",
"Status": "PENDING",
"Balance": {
"Available": "string",
"Pending": "string",
"Frozen": "string",
"Currency": "USD"
},
"Currency": "USD",
"VelocityControl": {
"Type": "string",
"Limit": "string"
},
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CardTypeId": 123,
"CardTypeTierId": 123,
"TierId": 123,
"AutoLockEnabled": true,
"AutoLockActiveUntil": "2026-08-05T09:30:00Z",
"TransakOrder": "string",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"Message": "string",
"Errors": [
{
"key": "string",
"reason": "string"
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/cards/physical-card-feesGet Interlace physical card production and mailing fees for a user and destination countryRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards/physical-card-fees?userId=123&country=GB&cardTypeId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123countryquerystringoptionalExample: GBcardTypeIdqueryintegeroptionalExample: 123200OKCardPhysicalCardFeesResponseV2
{
"Success": true,
"UserId": 123,
"AccountId": "string",
"BinId": "string",
"ExternalBinId": "external_reference_123",
"Zone": "string",
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"Message": "string",
"ErrorCode": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/cards/{cardId}/bulk-ship/quoteQuote Interlace physical card shipment fees for the authenticated user's card.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards/123/bulk-ship/quote?userId=0' \
-H 'x-api-key: YOUR_API_KEY'Parameters
cardIdpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 0200OKCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}400Bad RequestCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cards/{cardId}/bulk-ship/quoteQuote Interlace physical card shipment fees for the authenticated user's card.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards/123/bulk-ship/quote?userId=0' \
-H 'x-api-key: YOUR_API_KEY'Parameters
cardIdpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 0200OKCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}400Bad RequestCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cards/{cardId}/bulk-shipExecute Interlace physical card shipment for the authenticated user's card.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards/123/bulk-ship?userId=0' \
-H 'x-api-key: YOUR_API_KEY'Parameters
cardIdpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 0200OKCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}400Bad RequestCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundCardBulkShipResponseV2
{
"Success": true,
"CardId": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"ShipmentExecuted": true,
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"FeeType": "100.00",
"FeeTypeLabel": "100.00"
}
],
"FeeZone": "100.00",
"FeeBinId": "100.00",
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true,
"CustomerProductionAmount": "100.00",
"CustomerShippingAmount": "100.00",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"CardUnloadAttempted": true,
"CardUnloadSucceeded": true,
"CardUnloadAmount": "100.00",
"TaskId": "string",
"Status": "PENDING",
"Message": "string",
"ErrorCode": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/cards/cardHoldersGet list of card holders for a userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards/cardHolders?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKapplication/json
[
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"AccountId": "string",
"CardHolderId": "string",
"BinRangeId": 123,
"CardHolderStatus": "PENDING",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
]400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/cards/{cardId}Get detailed card information including sensitive dataRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards/123?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123200OKCardDetailsResponseV2
{
"CardNo": "string",
"CVV": "string",
"ExpYear": "string",
"ExpMonth": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"Id": 123,
"UserId": 123,
"ExternalCardId": "external_reference_123",
"DeliveryAddressId": "string",
"Nickname": "string",
"CardType": "string",
"CardNumber": "string",
"ExpiryDate": "2026-08-05",
"Status": "PENDING",
"Balance": {
"Available": "string",
"Pending": "string",
"Frozen": "string",
"Currency": "USD"
},
"Currency": "USD",
"VelocityControl": {
"Type": "string",
"Limit": "string"
},
"CardTypeId": 123,
"CardTypeTierId": 123,
"TierId": 123,
"AutoLockEnabled": true,
"AutoLockActiveUntil": "2026-08-05T09:30:00Z",
"TransakOrder": "string",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"Message": "string",
"Errors": [
{
"key": "string",
"reason": "string"
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/cards/{cardId}Permanently delete an Interlace card.Request & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/cards/123?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123200OKCardDeleteResponseV2
{
"Success": true,
"Message": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cards/{cardId}/activateActivate a physical cardRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards/123/activate?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123200OKCardActivateResponseV2
{
"Success": true,
"Message": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cards/{cardId}/freezeFreeze a card to temporarily disable itRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards/123/freeze?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123200OKCardFreezeResponseV2
{
"Success": true,
"Message": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cards/{cardId}/enableEnable (unfreeze) a card to re-enable itRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards/123/enable?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123200OKCardEnableResponseV2
{
"Success": true,
"Message": "string",
"AutoLockActiveUntil": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/cards/{cardId}/auto-lockEnable or disable Auto Lock for a cardRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/cards/123/auto-lock?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Enabled": true
}'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123Example request body
{
"Enabled": true
}200OKCardAutoLockResponseV2
{
"Success": true,
"Message": "string",
"AutoLockEnabled": true,
"AutoLockActiveUntil": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/cards/{cardId}/transactionsGet card transactions for a specific user and cardRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards/123/transactions?userId=123&limit=25&page=1' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123limitqueryintegeroptionalExample: 25pagequeryintegeroptionalExample: 1200OKCardTransactionsResponseV2
{
"Transactions": [
{
"Id": "string",
"AccountId": "string",
"CardId": "string",
"Currency": "USD",
"Amount": 100,
"Fee": 100,
"Type": "string",
"ClientTransactionId": "string",
"Remark": "string",
"Detail": "string",
"Status": "PENDING",
"TransactionTime": "2026-08-05T09:30:00Z",
"TransactionCurrency": "USD",
"TransactionAmount": 100,
"MerchantName": "string",
"Mcc": "string",
"MccCategory": "string",
"MerchantCity": "London",
"MerchantCountry": "GB",
"MerchantState": "string",
"MerchantZipcode": "SW1A 1AA",
"MerchantMid": "string"
}
],
"Total": 1,
"PageTotal": 1,
"CurrentPage": 1,
"HasMorePages": true
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/cards/{cardId}/pinUpdate card PINRequest & responses +
**PIN Code Rules** 1. **Length** The PIN must be exactly 6 digits. 2. **No repeated digits** It must not contain any sequence of three identical digits. Not allowed: `111`, `222`, `999` 3. **No sequential digits** No three consecutive increasing or decreasing digits. Examples not allowed: `123`, `234`, `789`, `890`, `098`, `321`
curl --request PUT 'https://staging.hoppa.global/api/v2/cards/123/pin?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Pin": "246805"
}'Parameters
userIdqueryintegeroptionalExample: 123cardIdpathintegerrequiredExample: 123Example request body
{
"Pin": "246805"
}200OKCardUpdatePinResponseV2
{
"Success": true,
"Message": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cards/topupTopUp - Direct card top-up with card IDRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards/topup' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CardId": 123,
"Token": "USDC",
"Value": 100
}'Example request body
{
"CardId": 123,
"Token": "USDC",
"Value": 100
}200OKTopUpResponse
{
"Success": true,
"TransakUrl": "https://example.com/callback",
"OrderId": "string",
"Token": "USDC",
"Value": 100,
"WalletAddress": "0x1111111111111111111111111111111111111111",
"Message": "string",
"ErrorCode": "string",
"ErrorMessage": "string",
"Fee": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"Configuration": {
"FiatCurrency": "USD",
"CryptoCurrency": "USDC",
"Network": "string",
"MinAmount": 100,
"MaxAmount": 100,
"IsTestMode": true
}
}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server Errorapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/cards/unload-cardUnloadFromCard - Unload funds from a card to quantum walletRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/cards/unload-card' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CardId": 123,
"Currency": "USD",
"Value": 100
}'Example request body
{
"CardId": 123,
"Currency": "USD",
"Value": 100
}200OKCardUnloadResponse
{
"Success": true,
"CardId": 123,
"ExternalCardId": "external_reference_123",
"RequestedAmount": 100,
"ActualAmount": 100,
"Fee": 100,
"NetAmount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionId": "string",
"ExternalTransactionId": "external_reference_123",
"RequestedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"Destination": {
"Type": "string",
"AccountNumber": "string",
"WalletAddress": "0x1111111111111111111111111111111111111111",
"BankName": "string",
"RoutingNumber": "string",
"SwiftCode": "string",
"AccountHolderName": "string",
"IsVerified": true
},
"BalanceAfter": {
"AvailableBalance": 100,
"PendingBalance": 100,
"TotalBalance": 100,
"Currency": "USD",
"UpdatedAt": "2026-08-05T09:30:00Z"
},
"ErrorCode": "string",
"ErrorMessage": "string",
"Message": "string",
"Audit": {
"RequestedBy": "string",
"RequestedAt": "2026-08-05T09:30:00Z",
"RequestSource": "string",
"IPAddress": "string",
"UserAgent": "string",
"IsSecureConnection": true,
"AuthenticationMethod": "string",
"AdditionalNotes": "string"
}
}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server Errorapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/cards/{cardId}/widgetGet secure widget URL for displaying card details in an iframeRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/cards/123/widget?userId=123&verificationToken=USDC' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123verificationTokenquerystringoptionalExample: USDCcardIdpathintegerrequiredExample: 123200OKCardWidgetResponse
{
"Success": true,
"WidgetUrl": "https://example.com/callback",
"WidgetToken": "USDC",
"ExpiresIn": 1,
"ErrorCode": "string",
"ErrorMessage": "string",
"CardId": 123,
"Config": {
"PrimaryColor": "string",
"BackgroundColor": "string",
"TextColor": "string",
"Width": "string",
"Height": "string"
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Crypto Virtual Accounts9 operations
GET/api/v2/crypto-virtual-accounts/trading-overviewOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/trading-overview?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKBoomFiTradingOverview
{
"account": {
"id": 123,
"reference": "external_reference_123",
"name": "string",
"account_type": "string",
"enabled": true,
"state": "string",
"sub_accounts": [
{
"id": 123,
"chain_id": 123,
"address": "string",
"chain": {
"id": {},
"name": {},
"native_currency_symbol": {}
},
"state": "string",
"status": "PENDING"
}
]
},
"balances": {
"balances": [
{
"account_id": 123,
"chain": {
"id": {},
"name": {},
"native_currency_symbol": {}
},
"currency": "USD",
"token_address": "USDC",
"amount": "100.00",
"amount_billing_currency": "USD",
"pending_amount": "100.00",
"pending_amount_billing_currency": "USD"
}
],
"total_balance": "100.00"
},
"currencies": {},
"settlement_accounts": [
{
"id": 123,
"name": "string",
"currency": "USD",
"bank_name": "string",
"account_number": "string",
"account_number_hint": "string",
"account_holder_name": "string",
"country": "GB",
"enabled": true,
"state": "string",
"status": "PENDING"
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/crypto-virtual-accounts/swap-targetsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/swap-targets?currency=USD&chainId=123&amount=100.00' \
-H 'x-api-key: YOUR_API_KEY'Parameters
currencyquerystringoptionalExample: USDchainIdqueryintegeroptionalExample: 123amountquerystringoptionalExample: 100.00200OKapplication/json
[
{
"currency": "USD",
"chain_id": 123
}
]400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/crypto-virtual-accounts/settlement-accountsOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/settlement-accounts' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"name": "string",
"account_number": "string",
"bank_name": "string",
"account_holder_name": "string",
"country": "GB",
"currency": "USD"
}'Example request body
{
"name": "string",
"account_number": "string",
"bank_name": "string",
"account_holder_name": "string",
"country": "GB",
"currency": "USD"
}201CreatedBoomFiBankAddressBookAccount
{
"id": 123,
"name": "string",
"currency": "USD",
"bank_name": "string",
"account_number": "string",
"account_number_hint": "string",
"account_holder_name": "string",
"country": "GB",
"enabled": true,
"state": "string",
"status": "PENDING"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/crypto-virtual-accountsOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Providers": [
"boomfi"
],
"Chains": [
{
"Currencies": [
"string"
],
"ChainId": 123
}
],
"UserId": 123
}'Example request body
{
"Name": "string",
"Providers": [
"boomfi"
],
"Chains": [
{
"Currencies": [
"string"
],
"ChainId": 123
}
],
"UserId": 123
}201CreatedOpenCryptoVirtualAccountResponse
{
"Success": true,
"Message": "string",
"Results": [
{
"Provider": "string",
"Status": "PENDING",
"Reference": "external_reference_123",
"Message": "string",
"Account": {
"id": 123,
"name": "string",
"address": "string",
"chain_id": 123,
"currencies": [
{}
],
"enabled": true,
"created_at": "2026-08-05T09:30:00Z"
},
"Wallets": [
{
"Id": 123,
"WalletAddress": "0x1111111111111111111111111111111111111111",
"CryptoAsset": "string",
"Status": "PENDING",
"ExternalWalletId": "external_reference_123",
"WalletType": "string"
}
]
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/crypto-virtual-accounts/payin-addressOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/payin-address' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"crypto_currency": "USDC",
"chain_id": 123,
"userId": 123
}'Example request body
{
"crypto_currency": "USDC",
"chain_id": 123,
"userId": 123
}201CreatedCreateCryptoDepositAddressResponse
{
"DepositWallet": {},
"OtcRequest": {
"Id": 123,
"Status": "PENDING",
"BoomFiVirtualAccountId": "string",
"CryptoCurrency": "USDC",
"CryptoAmount": "100.00",
"ChainId": 123,
"FiatCurrency": "USD",
"SettlementIban": "string",
"SettlementAccountId": "string",
"BoomFiOrderId": "string",
"BoomFiQuoteId": "string",
"BoomFiOrderStatus": "PENDING",
"BoomFiSettlementStatus": "PENDING",
"ToAmount": "100.00",
"EffectiveRate": "string",
"FailureMessage": "string",
"SlackChannelId": "string",
"SlackThreadTs": "string",
"SlackPermalink": "string",
"CompletedAt": "2026-08-05T09:30:00Z",
"CompletionMessage": "string"
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/crypto-virtual-accounts/equals-to-interlaceOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/equals-to-interlace' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"FiatCurrency": "USD",
"Amount": 100,
"BudgetId": "string"
}'Example request body
{
"UserId": 123,
"FiatCurrency": "USD",
"Amount": 100,
"BudgetId": "string"
}201CreatedPublicEqualsToInterlaceResponse
{
"Success": true,
"Message": "string",
"Reference": "external_reference_123",
"UserId": 123,
"BudgetId": "string",
"FiatCurrency": "USD",
"FiatAmount": "100.00",
"CryptoCurrency": "USDC",
"EstimatedCryptoAmount": "100.00",
"EstimatedFeeAmount": "100.00",
"Rate": "string",
"ChainId": 123,
"Chain": "string",
"DepositAddress": "string",
"BoomFiPayout": {}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/crypto-virtual-accounts/equals-to-wallet/initiateOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/equals-to-wallet/initiate' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"FiatCurrency": "USD",
"Amount": 100,
"BudgetId": "string",
"CryptoCurrency": "USDC",
"Chain": "string",
"Address": "string"
}'Example request body
{
"UserId": 123,
"FiatCurrency": "USD",
"Amount": 100,
"BudgetId": "string",
"CryptoCurrency": "USDC",
"Chain": "string",
"Address": "string"
}200OKPublicEqualsToWalletInitiateResponse
{
"Success": true,
"VerificationToken": "USDC",
"Message": "string",
"ExpiresAt": "2026-08-05T09:30:00Z",
"Reference": "external_reference_123",
"UserId": 123,
"BudgetId": "string",
"FiatCurrency": "USD",
"FiatAmount": "100.00",
"CryptoCurrency": "USDC",
"EstimatedCryptoAmount": "100.00",
"EstimatedFeeAmount": "100.00",
"Rate": "string",
"ChainId": 123,
"Chain": "string",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"DestinationAddressMasked": "0x1111111111111111111111111111111111111111"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/crypto-virtual-accounts/equals-to-wallet/confirmOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/equals-to-wallet/confirm' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"VerificationToken": "USDC",
"OtpCode": "string"
}'Example request body
{
"UserId": 123,
"VerificationToken": "USDC",
"OtpCode": "string"
}200OKPublicEqualsToWalletConfirmResponse
{
"Status": "PENDING",
"Notice": "string",
"Success": true,
"VerificationToken": "USDC",
"Message": "string",
"ExpiresAt": "2026-08-05T09:30:00Z",
"Reference": "external_reference_123",
"UserId": 123,
"BudgetId": "string",
"FiatCurrency": "USD",
"FiatAmount": "100.00",
"CryptoCurrency": "USDC",
"EstimatedCryptoAmount": "100.00",
"EstimatedFeeAmount": "100.00",
"Rate": "string",
"ChainId": 123,
"Chain": "string",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"DestinationAddressMasked": "0x1111111111111111111111111111111111111111"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/crypto-virtual-accounts/ramp-quoteOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/crypto-virtual-accounts/ramp-quote' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CryptoCurrency": "USDC",
"FiatCurrency": "USD",
"CryptoAmount": "100.00",
"UserId": 123,
"AccountId": "string",
"AccountReference": "external_reference_123",
"ChainId": 123
}'Example request body
{
"CryptoCurrency": "USDC",
"FiatCurrency": "USD",
"CryptoAmount": "100.00",
"UserId": 123,
"AccountId": "string",
"AccountReference": "external_reference_123",
"ChainId": 123
}200OKBoomFiRampQuoteData
{
"buy_currency": "USD",
"buy_amount": "100.00",
"sell_currency": "USD",
"sell_amount": "100.00",
"payment_method": "string",
"quote_time": "2026-08-05T09:30:00Z",
"expiry": "2026-08-05T09:30:00Z",
"rate": "string",
"fees": {
"fee_ccy": "100.00",
"network_fee": "100.00",
"boomfi_fee": "100.00",
"total_fee": "100.00"
},
"quote_amount": "100.00",
"settlement_ccy": "string",
"settlement_chain_id": 123,
"settlement_token_address": "USDC",
"session": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DiscountCodes6 operations
GET/api/v2/admin/discount-codesGets all discount codes for the authenticated user's companyadminRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/admin/discount-codes?companyId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
companyIdqueryintegeroptionalExample: 123200OKDiscountCodeListResponse
{
"Codes": [
{
"Id": 123,
"Code": "string",
"Description": "Example description",
"CompanyId": 123,
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"CurrentUses": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CreatedBy": 1
}
],
"Total": 1
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/admin/discount-codesCreates a new discount codeadminRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/admin/discount-codes?companyId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Code": "string",
"Description": "Example description",
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true
}'Parameters
companyIdqueryintegeroptionalExample: 123Example request body
{
"Code": "string",
"Description": "Example description",
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true
}200OKDiscountCodeResponse
{
"Id": 123,
"Code": "string",
"Description": "Example description",
"CompanyId": 123,
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"CurrentUses": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CreatedBy": 1
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/admin/discount-codes/{id}Gets a specific discount code by IDadminRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/admin/discount-codes/123?companyId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathintegerrequiredExample: 123companyIdqueryintegeroptionalExample: 123200OKDiscountCodeResponse
{
"Id": 123,
"Code": "string",
"Description": "Example description",
"CompanyId": 123,
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"CurrentUses": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CreatedBy": 1
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/admin/discount-codes/{id}Updates an existing discount codeadminRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/admin/discount-codes/123?companyId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Code": "string",
"Description": "Example description",
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true,
"UpdateExistingCards": true
}'Parameters
idpathintegerrequiredExample: 123companyIdqueryintegeroptionalExample: 123Example request body
{
"Code": "string",
"Description": "Example description",
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true,
"UpdateExistingCards": true
}200OKDiscountCodeResponse
{
"Id": 123,
"Code": "string",
"Description": "Example description",
"CompanyId": 123,
"DiscountType": "string",
"BuyDiscountPercent": 100,
"MonthlyDiscountPercent": 100,
"YearlyDiscountPercent": 100,
"BuyDiscountFixed": 100,
"MonthlyDiscountFixed": 100,
"YearlyDiscountFixed": 100,
"MaxUsesTotal": 1,
"MaxUsesPerUser": 1,
"CurrentUses": 1,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidTill": "2026-08-05T09:30:00Z",
"ApplicableUserIds": [
1
],
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CreatedBy": 1
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/admin/discount-codes/{id}Deletes a discount codeadminRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/admin/discount-codes/123?companyId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathintegerrequiredExample: 123companyIdqueryintegeroptionalExample: 123200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/admin/discount-codes/cards/{cardId}/discountUpdates a card's discount code (for admin use)adminRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/admin/discount-codes/cards/123/discount?companyId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"DiscountCode": "string"
}'Parameters
cardIdpathintegerrequiredExample: 123companyIdqueryintegeroptionalExample: 123Example request body
{
"DiscountCode": "string"
}200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DualBalance4 operations
GET/api/v2/dashboard/dual-balanceOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/dashboard/dual-balance' \
-H 'x-api-key: YOUR_API_KEY'200OKDualBalanceDashboardResponse
{
"Enabled": true,
"WhitelabelName": "string",
"Status": "PENDING",
"TotalUsd": 100,
"AvailableUsd": 100,
"LastUpdatedAt": "2026-08-05T09:30:00Z",
"FundingEligible": true,
"Message": "string",
"Balances": [
{
"BalanceId": "100.00",
"Type": "string",
"Currency": "USD",
"Balance": 100,
"AvailableBalance": 100,
"UsdValue": 100,
"AvailableUsdValue": 100,
"Timestamp": "2026-08-05T09:30:00Z"
}
],
"Cards": [
{
"CardId": 123,
"Label": "string",
"Currency": "USD"
}
]
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/dashboard/dual-balance/card-funding/previewOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/dashboard/dual-balance/card-funding/preview' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"BalanceId": "100.00",
"Amount": 100,
"CardId": 123
}'Example request body
{
"BalanceId": "100.00",
"Amount": 100,
"CardId": 123
}200OKDualBalanceFundingPreviewResponse
{
"PreviewId": "00000000-0000-4000-8000-000000000123",
"SourceCurrency": "USD",
"SourceAmount": 100,
"SourceDebitUsd": 100,
"CardTopUpFeeUsd": 100,
"ExpectedNetCardCreditUsd": 100,
"MinimumUsd": 100,
"MaximumUsd": 100,
"ExpiresAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/dashboard/dual-balance/card-fundingOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/dashboard/dual-balance/card-funding' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"PreviewId": "00000000-0000-4000-8000-000000000123"
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"PreviewId": "00000000-0000-4000-8000-000000000123"
}202AcceptedDualBalanceFundingAcceptedResponse
{
"RequestId": "00000000-0000-4000-8000-000000000123",
"Status": "PENDING"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/dashboard/dual-balance/card-funding/{requestId}Open request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/dashboard/dual-balance/card-funding/00000000-0000-4000-8000-000000000123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
requestIdpathstringrequiredExample: 00000000-0000-4000-8000-000000000123200OKDualBalanceFundingStatusResponse
{
"RequestId": "00000000-0000-4000-8000-000000000123",
"Status": "PENDING",
"SourceCurrency": "USD",
"SourceAmount": 100,
"SourceDebitUsd": 100,
"CardTopUpFeeUsd": 100,
"NetCardCreditUsd": 100,
"CardId": 123,
"InterlaceOperationId": "string",
"CardLoadOperationId": "string",
"ErrorCode": "string",
"Message": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Loyalty Program61 operations
GET/api/loyalty-programs/programs/{companyId}Get loyalty programs for a specific company (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/programs/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
companyIdpathintegerrequiredExample: 123200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/loyalty-programs/auto-assign/stats/{loyaltyProgramId}Get point assignment statistics for a loyalty program (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/auto-assign/stats/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
loyaltyProgramIdpathintegerrequiredExample: 123200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/auto-assign/card-transactionProcess card transaction for automatic point assignment (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/auto-assign/card-transaction' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Example request body
{}200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/auto-assign/payment-requestProcess payment request for automatic point assignment (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/auto-assign/payment-request' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Example request body
{}200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/auto-assign/bulkBulk process transactions for automatic point assignment (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/auto-assign/bulk' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Example request body
{}200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/auto-assign/reverseReverse point assignment (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/auto-assign/reverse' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Example request body
{}200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/loyalty-programs/transaction-import/configs/{companyId}Get transaction import configurations for a company (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/transaction-import/configs/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
companyIdpathintegerrequiredExample: 123200OKapplication/json
[
{}
]400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/loyalty-programs/transaction-import/jobs/{companyId}Get transaction import jobs for a company (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/transaction-import/jobs/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
companyIdpathintegerrequiredExample: 123200OKapplication/json
[
{}
]400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/loyalty-programs/transaction-import/transactions/{jobId}Get imported transactions for a specific job (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/transaction-import/transactions/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
jobIdpathintegerrequiredExample: 123200OKapplication/json
[
{}
]400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/transaction-import/configsCreate transaction import configuration (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/transaction-import/configs' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Example request body
{}201Createdapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/transaction-import/upload/{configId}Upload file for transaction import (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/transaction-import/upload/123' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'File=@/absolute/path/document.pdf'Parameters
configIdpathintegerrequiredExample: 123Example request body
{
"File": "<binary file>"
}200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/loyalty-programs/merchantsGet merchants with filtering (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/merchants?search=example&category=example&isActive=example&page=1&limit=50' \
-H 'x-api-key: YOUR_API_KEY'Parameters
searchquerystringoptionalExample: examplecategoryquerystringoptionalExample: exampleisActivequerystringoptionalExample: examplepagequeryintegeroptionalExample: 1limitqueryintegeroptionalExample: 50200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/merchantsCreate merchant (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/merchants' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Example request body
{}201Createdapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/loyalty-programs/merchants/statsGet merchant statistics (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/merchants/stats' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/loyalty-programs/merchants/{merchantId}/idsGet merchant IDs for a specific merchant (legacy endpoint compatibility).legacyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/loyalty-programs/merchants/123/ids' \
-H 'x-api-key: YOUR_API_KEY'Parameters
merchantIdpathintegerrequiredExample: 123200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/loyalty-programs/merchants/{merchantId}/idsAdd merchant ID (legacy endpoint compatibility).legacyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/loyalty-programs/merchants/123/ids' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Parameters
merchantIdpathintegerrequiredExample: 123Example request body
{}201Createdapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/loyalty-programs/merchants/{merchantId}Update merchant (legacy endpoint compatibility).legacyRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/loyalty-programs/merchants/123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{}'Parameters
merchantIdpathintegerrequiredExample: 123Example request body
{}200OKapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/loyalty-programs/merchants/{merchantId}Delete merchant (legacy endpoint compatibility).legacyRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/loyalty-programs/merchants/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
merchantIdpathintegerrequiredExample: 123204No Contentapplication/json
{}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/programsGet loyalty program configuration for the authenticated companyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/programs' \
-H 'x-api-key: YOUR_API_KEY'200OKLoyaltyProgramResponse
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"IsActive": true,
"PointValueRate": 100,
"PointValueCurrency": "USD",
"Rules": [
{
"Id": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/programsCreate or update loyalty program for the authenticated companyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/programs' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"PointValueRate": 100,
"Description": "Example description",
"IsActive": true,
"PointValueCurrency": "USD"
}'Example request body
{
"Name": "string",
"PointValueRate": 100,
"Description": "Example description",
"IsActive": true,
"PointValueCurrency": "USD"
}200OKLoyaltyProgramResponse
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"IsActive": true,
"PointValueRate": 100,
"PointValueCurrency": "USD",
"Rules": [
{
"Id": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/loyalty/programsUpdate loyalty program for the authenticated companyRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/loyalty/programs' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"PointValueRate": 100,
"Description": "Example description",
"IsActive": true,
"PointValueCurrency": "USD"
}'Example request body
{
"Name": "string",
"PointValueRate": 100,
"Description": "Example description",
"IsActive": true,
"PointValueCurrency": "USD"
}200OKLoyaltyProgramResponse
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"IsActive": true,
"PointValueRate": 100,
"PointValueCurrency": "USD",
"Rules": [
{
"Id": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/rulesGet all loyalty rules for the authenticated company's loyalty programRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/rules' \
-H 'x-api-key: YOUR_API_KEY'200OKLoyaltyRulesResponse
{
"Rules": [
{
"Id": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"TotalCount": 1
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/rulesCreate a new loyalty rule for the authenticated company's loyalty programRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/rules' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100
}'Example request body
{
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100
}201CreatedLoyaltyRuleResponse
{
"Id": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/loyalty/rules/{ruleId}Update an existing loyalty ruleRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/loyalty/rules/123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100
}'Parameters
ruleIdpathintegerrequiredExample: 123Example request body
{
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100
}200OKLoyaltyRuleResponse
{
"Id": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/loyalty/rules/{ruleId}Delete a loyalty rule with referential integrity checksRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/loyalty/rules/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
ruleIdpathintegerrequiredExample: 123204No Contentapplication/json
{}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}409ConflictErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/balancesGet point balances for all users (admin view)Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/balances?limit=50&offset=0' \
-H 'x-api-key: YOUR_API_KEY'Parameters
limitqueryintegeroptionalExample: 50offsetqueryintegeroptionalExample: 0200OKapplication/json
[
{
"UserId": 123,
"ProgramId": 123,
"CurrentBalance": 1,
"TotalEarned": 1,
"TotalRedeemed": 1,
"TierLevel": "string",
"LastActivity": "2026-08-05T09:30:00Z",
"EnrolledAt": "2026-08-05T09:30:00Z",
"MonthlyStats": {
"CurrentMonthEarned": 1,
"PreviousMonthEarned": 1,
"GrowthPercentage": 100,
"TransactionCount": 1
}
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/transactionsGet point transactions for all users (admin view)Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/transactions?limit=50&offset=0&transactionType=example&startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z' \
-H 'x-api-key: YOUR_API_KEY'Parameters
limitqueryintegeroptionalExample: 50offsetqueryintegeroptionalExample: 0transactionTypequerystringoptionalExample: examplestartDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00Z200OKapplication/json
[
{
"Id": 123,
"TransactionType": "string",
"Points": 1,
"Description": "Example description",
"Source": "string",
"SourceTransactionId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"Metadata": {}
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/user-balanceGet point balance for the authenticated userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/user-balance' \
-H 'x-api-key: YOUR_API_KEY'200OKUserPointBalanceResponse
{
"UserId": 123,
"ProgramId": 123,
"CurrentBalance": 1,
"TotalEarned": 1,
"TotalRedeemed": 1,
"TierLevel": "string",
"LastActivity": "2026-08-05T09:30:00Z",
"EnrolledAt": "2026-08-05T09:30:00Z",
"MonthlyStats": {
"CurrentMonthEarned": 1,
"PreviousMonthEarned": 1,
"GrowthPercentage": 100,
"TransactionCount": 1
}
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/user-transactionsGet point transaction history for the authenticated userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/user-transactions?limit=50&offset=0&transactionType=example&startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z' \
-H 'x-api-key: YOUR_API_KEY'Parameters
limitqueryintegeroptionalExample: 50offsetqueryintegeroptionalExample: 0transactionTypequerystringoptionalExample: examplestartDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00Z200OKapplication/json
[
{
"Id": 123,
"TransactionType": "string",
"Points": 1,
"Description": "Example description",
"Source": "string",
"SourceTransactionId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"Metadata": {}
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/test-calculationTest point calculation for a transactionRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/test-calculation' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Amount": 100,
"Currency": "USD",
"MerchantCategory": "string",
"UserTier": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z"
}'Example request body
{
"Amount": 100,
"Currency": "USD",
"MerchantCategory": "string",
"UserTier": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z"
}200OKPointCalculationResponse
{
"TotalPoints": 1,
"TransactionAmount": 100,
"Currency": "USD",
"AppliedRules": [
{
"RuleId": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"PointsEarned": 1,
"Priority": 1
}
],
"Breakdown": {
"BasePoints": 100,
"BonusPoints": 100,
"MultiplierBonus": 100,
"AppliedConditions": [
"string"
]
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/transaction-import/configsGet all transaction import configurations for the authenticated companyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/transaction-import/configs' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Id": 123,
"ConfigName": "string",
"ImportMethod": "string",
"FieldMappings": {},
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/transaction-import/configsCreate a new transaction import configurationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/transaction-import/configs' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"ConfigName": "string",
"ImportMethod": "string",
"FieldMappings": {},
"IsActive": true
}'Example request body
{
"ConfigName": "string",
"ImportMethod": "string",
"FieldMappings": {},
"IsActive": true
}201CreatedTransactionImportConfigResponse
{
"Id": 123,
"ConfigName": "string",
"ImportMethod": "string",
"FieldMappings": {},
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/transaction-import/upload/{configId}Upload and process a transaction import fileRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/transaction-import/upload/123' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'File=@/absolute/path/document.pdf'Parameters
configIdpathintegerrequiredExample: 123Example request body
{
"File": "<binary file>"
}202AcceptedImportJobResponse
{
"Id": 123,
"Status": "PENDING",
"FileName": "string",
"TotalRecords": 1,
"ProcessedRecords": 1,
"SuccessfulRecords": 1,
"FailedRecords": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"StartedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"ErrorDetails": {}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}413Payload Too LargeErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/transaction-import/jobsGet import job history with status and statisticsRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/transaction-import/jobs?limit=50&offset=0' \
-H 'x-api-key: YOUR_API_KEY'Parameters
limitqueryintegeroptionalExample: 50offsetqueryintegeroptionalExample: 0200OKapplication/json
[
{
"Id": 123,
"Status": "PENDING",
"FileName": "string",
"TotalRecords": 1,
"ProcessedRecords": 1,
"SuccessfulRecords": 1,
"FailedRecords": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"StartedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"ErrorDetails": {}
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/transaction-import/jobs/details/{jobId}Get detailed information about a specific import jobRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/transaction-import/jobs/details/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
jobIdpathintegerrequiredExample: 123200OKImportJobResponse
{
"Id": 123,
"Status": "PENDING",
"FileName": "string",
"TotalRecords": 1,
"ProcessedRecords": 1,
"SuccessfulRecords": 1,
"FailedRecords": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"StartedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"ErrorDetails": {}
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/merchantsGet merchants with search, filtering, and paginationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/merchants?search=example&category=example&isActive=true&isPartner=true&limit=50&offset=0' \
-H 'x-api-key: YOUR_API_KEY'Parameters
searchquerystringoptionalExample: examplecategoryquerystringoptionalExample: exampleisActivequerybooleanoptionalExample: trueisPartnerquerybooleanoptionalExample: truelimitqueryintegeroptionalExample: 50offsetqueryintegeroptionalExample: 0200OKMerchantListResponse
{
"Merchants": [
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"Category": "string",
"CompanyId": 123,
"IsActive": true,
"IsPartner": true,
"ContactEmail": "user@example.com",
"ContactPhone": "+447700900123",
"Address": "string",
"Website": "string",
"MerchantIds": [
{
"Id": 123,
"MerchantId": 123,
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"LoyaltyRules": [
{
"Id": 123,
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"Pagination": {
"Total": 1,
"PageNumber": 1,
"PageSize": 1,
"TotalPages": 1
}
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/merchantsCreate a new merchant for the authenticated companyRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/merchants' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Description": "Example description",
"Category": "string",
"IsActive": true,
"IsPartner": true,
"ContactEmail": "user@example.com",
"ContactPhone": "+447700900123",
"Address": "string",
"Website": "string"
}'Example request body
{
"Name": "string",
"Description": "Example description",
"Category": "string",
"IsActive": true,
"IsPartner": true,
"ContactEmail": "user@example.com",
"ContactPhone": "+447700900123",
"Address": "string",
"Website": "string"
}201CreatedMerchantResponse
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"Category": "string",
"CompanyId": 123,
"IsActive": true,
"IsPartner": true,
"ContactEmail": "user@example.com",
"ContactPhone": "+447700900123",
"Address": "string",
"Website": "string",
"MerchantIds": [
{
"Id": 123,
"MerchantId": 123,
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"LoyaltyRules": [
{
"Id": 123,
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/loyalty/merchants/{merchantId}Update an existing merchantRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/loyalty/merchants/123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Description": "Example description",
"Category": "string",
"IsActive": true,
"IsPartner": true,
"ContactEmail": "user@example.com",
"ContactPhone": "+447700900123",
"Address": "string",
"Website": "string"
}'Parameters
merchantIdpathintegerrequiredExample: 123Example request body
{
"Name": "string",
"Description": "Example description",
"Category": "string",
"IsActive": true,
"IsPartner": true,
"ContactEmail": "user@example.com",
"ContactPhone": "+447700900123",
"Address": "string",
"Website": "string"
}200OKMerchantResponse
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"Category": "string",
"CompanyId": 123,
"IsActive": true,
"IsPartner": true,
"ContactEmail": "user@example.com",
"ContactPhone": "+447700900123",
"Address": "string",
"Website": "string",
"MerchantIds": [
{
"Id": 123,
"MerchantId": 123,
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"LoyaltyRules": [
{
"Id": 123,
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/loyalty/merchants/{merchantId}Delete a merchant with cascade validationRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/loyalty/merchants/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
merchantIdpathintegerrequiredExample: 123204No Contentapplication/json
{}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}409ConflictErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/merchants/statsGet merchant statistics including transaction counts and revenue metricsRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/merchants/stats?period=30d' \
-H 'x-api-key: YOUR_API_KEY'Parameters
periodquerystringoptionalExample: 30d200OKMerchantStatsResponse
{
"TotalMerchants": 1,
"ActiveMerchants": 1,
"InactiveMerchants": 1,
"PartnerMerchants": 1,
"TotalTransactions": 1,
"TotalRevenue": 100,
"AverageTransactionValue": 100,
"CategoryStats": [
{
"Category": "string",
"MerchantCount": 1,
"Percentage": 100
}
],
"TopMerchants": [
{
"MerchantId": 123,
"Name": "string",
"Category": "string",
"TransactionCount": 1,
"Revenue": 100,
"PointsAwarded": 1
}
],
"TopCategories": [
{
"Category": "string",
"MerchantCount": 1,
"TransactionCount": 1,
"Revenue": 100
}
],
"Period": "string",
"StartDate": "2026-08-05T09:30:00Z",
"EndDate": "2026-08-05T09:30:00Z",
"GeneratedAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/merchants/{merchantId}/idsGet merchant IDs for a specific merchantRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/ids' \
-H 'x-api-key: YOUR_API_KEY'Parameters
merchantIdpathintegerrequiredExample: 123200OKapplication/json
[
{
"Id": 123,
"MerchantId": 123,
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/merchants/{merchantId}/idsCreate a new merchant ID for a specific merchantRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/ids' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true
}'Parameters
merchantIdpathintegerrequiredExample: 123Example request body
{
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true
}201CreatedMerchantIdResponse
{
"Id": 123,
"MerchantId": 123,
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/loyalty/merchants/{merchantId}/ids/{midId}Update an existing merchant IDRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/ids/123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true
}'Parameters
merchantIdpathintegerrequiredExample: 123midIdpathintegerrequiredExample: 123Example request body
{
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true
}200OKMerchantIdResponse
{
"Id": 123,
"MerchantId": 123,
"IdentifierType": "string",
"IdentifierValue": "string",
"Priority": 1,
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/loyalty/merchants/{merchantId}/ids/{midId}Delete a merchant IDRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/ids/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
merchantIdpathintegerrequiredExample: 123midIdpathintegerrequiredExample: 123204No Contentapplication/json
{}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/merchants/{merchantId}/loyalty-rulesGet merchant loyalty rules for a specific merchantRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/loyalty-rules' \
-H 'x-api-key: YOUR_API_KEY'Parameters
merchantIdpathintegerrequiredExample: 123200OKapplication/json
[
{
"Id": 123,
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/merchants/{merchantId}/loyalty-rulesCreate a new merchant loyalty ruleRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/loyalty-rules' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z"
}'Parameters
merchantIdpathintegerrequiredExample: 123Example request body
{
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z"
}201CreatedMerchantLoyaltyRuleResponse
{
"Id": 123,
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/loyalty/merchants/{merchantId}/loyalty-rules/{ruleId}Update an existing merchant loyalty ruleRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/loyalty-rules/123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z"
}'Parameters
merchantIdpathintegerrequiredExample: 123ruleIdpathintegerrequiredExample: 123Example request body
{
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z"
}200OKMerchantLoyaltyRuleResponse
{
"Id": 123,
"RuleName": "string",
"PointsPerUnit": 100,
"Multiplier": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/loyalty/merchants/{merchantId}/loyalty-rules/{ruleId}Delete a merchant loyalty ruleRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/loyalty/merchants/123/loyalty-rules/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
merchantIdpathintegerrequiredExample: 123ruleIdpathintegerrequiredExample: 123204No Contentapplication/json
{}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/auto-assign/card-transactionProcess automatic point assignment for a card transactionRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/auto-assign/card-transaction' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"TransactionId": "string",
"TransactionAmount": 100,
"Currency": "USD",
"MerchantName": "string",
"MerchantCategory": "string",
"MerchantId": "string",
"UserTier": "string",
"Source": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"TransactionId": "string",
"TransactionAmount": 100,
"Currency": "USD",
"MerchantName": "string",
"MerchantCategory": "string",
"MerchantId": "string",
"UserTier": "string",
"Source": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z",
"Metadata": {}
}200OKPointTransactionResponse
{
"Id": 123,
"TransactionType": "string",
"Points": 1,
"Description": "Example description",
"Source": "string",
"SourceTransactionId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"Metadata": {}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/auto-assign/payment-requestProcess automatic point assignment for a payment requestRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/auto-assign/payment-request' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"PaymentRequestId": "string",
"TransactionAmount": 100,
"Currency": "USD",
"PaymentMethod": "string",
"MerchantName": "string",
"MerchantCategory": "string",
"MerchantId": "string",
"UserTier": "string",
"Source": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"PaymentRequestId": "string",
"TransactionAmount": 100,
"Currency": "USD",
"PaymentMethod": "string",
"MerchantName": "string",
"MerchantCategory": "string",
"MerchantId": "string",
"UserTier": "string",
"Source": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z",
"Metadata": {}
}200OKPointTransactionResponse
{
"Id": 123,
"TransactionType": "string",
"Points": 1,
"Description": "Example description",
"Source": "string",
"SourceTransactionId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"Metadata": {}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/auto-assign/bulkProcess multiple transactions in bulk for automatic point assignmentRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/auto-assign/bulk' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Transactions": [
{
"UserId": 123,
"TransactionId": "string",
"TransactionAmount": 100,
"Currency": "USD",
"MerchantName": "string",
"MerchantCategory": "string",
"MerchantId": "string",
"UserTier": "string",
"Source": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z",
"Metadata": {}
}
],
"Source": "string",
"ContinueOnError": true
}'Example request body
{
"Transactions": [
{
"UserId": 123,
"TransactionId": "string",
"TransactionAmount": 100,
"Currency": "USD",
"MerchantName": "string",
"MerchantCategory": "string",
"MerchantId": "string",
"UserTier": "string",
"Source": "string",
"TransactionTimestamp": "2026-08-05T09:30:00Z",
"Metadata": {}
}
],
"Source": "string",
"ContinueOnError": true
}200OKBulkProcessingResponse
{
"TotalTransactions": 1,
"SuccessfulTransactions": 1,
"FailedTransactions": 1,
"TotalPointsAwarded": 1,
"OverallSuccess": true,
"ProcessingTimeMs": 1,
"ProcessingTime": "string",
"Errors": [
"string"
],
"SuccessfulResults": [
{
"TransactionId": "string",
"UserId": 123,
"PointsEarned": 1
}
],
"Results": [
{
"TransactionId": "string",
"Success": true,
"PointsEarned": 1,
"PointsAwarded": 1,
"UserId": 123,
"ErrorMessage": "string",
"Transaction": {
"Id": 123,
"TransactionType": "string",
"Points": 1,
"Description": "Example description",
"Source": "string",
"SourceTransactionId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"Metadata": {}
}
}
],
"ProcessedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/auto-assign/stats/{loyaltyProgramId}Get point assignment statistics for a loyalty programRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/auto-assign/stats/123?startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z' \
-H 'x-api-key: YOUR_API_KEY'Parameters
loyaltyProgramIdpathintegerrequiredExample: 123startDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00Z200OKPointAssignmentStatsResponse
{
"LoyaltyProgramId": 123,
"Period": "string",
"StartDate": "2026-08-05T09:30:00Z",
"EndDate": "2026-08-05T09:30:00Z",
"TotalAssignments": 1,
"TotalPointsAssigned": 1,
"TotalReversals": 1,
"TotalPointsReversed": 1,
"AveragePointsPerTransaction": 100,
"SourceBreakdown": [
{
"Source": "string",
"TransactionCount": 1,
"TotalPoints": 1,
"Percentage": 100
}
],
"DailyStats": [
{
"Date": "2026-08-05T09:30:00Z",
"TransactionCount": 1,
"PointsAssigned": 1,
"ReversalCount": 1,
"PointsReversed": 1
}
],
"GeneratedAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/loyalty/auto-assign/reverseReverse a point assignment with audit trail supportRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/loyalty/auto-assign/reverse' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"TransactionId": 123,
"Reason": "string",
"Source": "string",
"Metadata": {}
}'Example request body
{
"TransactionId": 123,
"Reason": "string",
"Source": "string",
"Metadata": {}
}204No Contentapplication/json
{}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/statsGet comprehensive loyalty program statisticsRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/stats' \
-H 'x-api-key: YOUR_API_KEY'200OKLoyaltyStatsResponse
{
"TotalUsers": 1,
"ActiveUsers": 1,
"TotalPointsEarned": 1,
"TotalPointsRedeemed": 1,
"TotalTransactions": 1,
"AveragePointsPerUser": 100,
"TierDistribution": [
{
"TierLevel": "string",
"UserCount": 1,
"Percentage": 100
}
],
"MonthlyTrends": [
{
"Month": "string",
"PointsEarned": 1,
"PointsRedeemed": 1,
"TransactionCount": 1
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/geographic-analyticsGet geographic analytics with regional performance dataRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/geographic-analytics?period=30d' \
-H 'x-api-key: YOUR_API_KEY'Parameters
periodquerystringoptionalExample: 30d200OKGeographicAnalyticsResponse
{
"RegionStats": [
{
"Region": "string",
"Country": "GB",
"City": "London",
"UserCount": 1,
"TransactionCount": 1,
"TotalPoints": 1,
"AveragePointsPerUser": 100,
"GrowthRate": 100
}
],
"Period": "string",
"GeneratedAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/location-insightsGet location insights with city and country performance rankingsRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/location-insights?period=30d&metric=transactions' \
-H 'x-api-key: YOUR_API_KEY'Parameters
periodquerystringoptionalExample: 30dmetricquerystringoptionalExample: transactions200OKLocationInsightsResponse
{
"TopLocations": [
{
"Location": "string",
"Country": "GB",
"City": "London",
"Value": 1,
"Rank": 1,
"PercentageOfTotal": 100
}
],
"Period": "string",
"Metric": "string",
"GeneratedAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/geographic-analytics/exportExport geographic analytics data to CSV formatRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/geographic-analytics/export?period=30d' \
-H 'x-api-key: YOUR_API_KEY'Parameters
periodquerystringoptionalExample: 30d200OKFileContentResult
{
"FileContents": "BASE64_ENCODED_DATA",
"ContentType": "string",
"FileDownloadName": "string",
"LastModified": "2026-08-05T09:30:00Z",
"EntityTag": {
"Tag": {
"Buffer": "string",
"Offset": 1,
"Length": 1,
"Value": "string",
"HasValue": true
},
"IsWeak": true
},
"EnableRangeProcessing": true
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/merchant-categoriesGet merchant categories for analytics filteringRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/merchant-categories' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
"string"
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/user/dashboardGet comprehensive user dashboard data with auto-enrollmentRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/user/dashboard' \
-H 'x-api-key: YOUR_API_KEY'200OKUserDashboardResponse
{
"PointBalance": {
"UserId": 123,
"ProgramId": 123,
"CurrentBalance": 1,
"TotalEarned": 1,
"TotalRedeemed": 1,
"TierLevel": "string",
"LastActivity": "2026-08-05T09:30:00Z",
"EnrolledAt": "2026-08-05T09:30:00Z",
"MonthlyStats": {
"CurrentMonthEarned": 1,
"PreviousMonthEarned": 1,
"GrowthPercentage": 100,
"TransactionCount": 1
}
},
"RecentTransactions": [
{
"Id": 123,
"TransactionType": "string",
"Points": 1,
"Description": "Example description",
"Source": "string",
"SourceTransactionId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"Metadata": {}
}
],
"RedemptionOptions": [
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"PointsRequired": 1,
"Category": "string",
"IsAvailable": true,
"ImageUrl": "https://example.com/callback",
"CashValue": 100,
"ExpiresAt": "2026-08-05T09:30:00Z",
"IsLimitedTime": true,
"QuantityAvailable": 1
}
],
"Stats": {
"TotalTransactions": 1,
"PointsEarnedThisMonth": 1,
"PointsEarnedLastMonth": 1,
"MonthlyGrowthPercentage": 100,
"DaysActive": 1,
"NextTierLevel": "string",
"PointsToNextTier": 1,
"MonthlyEarnings": [
{
"Month": "string",
"Year": 1,
"PointsEarned": 1,
"TransactionCount": 1
}
]
},
"Program": {
"Id": 123,
"Name": "string",
"Description": "Example description",
"IsActive": true,
"PointValueRate": 100,
"PointValueCurrency": "USD",
"Rules": [
{
"Id": 123,
"RuleName": "string",
"RuleType": "string",
"PointsPerUnit": 100,
"MinTransactionAmount": 100,
"MaxTransactionAmount": 100,
"MerchantCategory": "string",
"UserTier": "string",
"Priority": 1,
"IsActive": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Multiplier": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
},
"GeneratedAt": "2026-08-05T09:30:00Z"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/user/transactionsGet user point transactions with advanced filteringRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/user/transactions?transactionType=example&startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z&source=example&minPoints=1&maxPoints=1' \
-H 'x-api-key: YOUR_API_KEY'Parameters
transactionTypequerystringoptionalExample: examplestartDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00ZsourcequerystringoptionalExample: exampleminPointsqueryintegeroptionalExample: 1maxPointsqueryintegeroptionalExample: 1limitqueryintegeroptionalExample: 50offsetqueryintegeroptionalExample: 0200OKapplication/json
[
{
"Id": 123,
"TransactionType": "string",
"Points": 1,
"Description": "Example description",
"Source": "string",
"SourceTransactionId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"Metadata": {}
}
]400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/loyalty/user/redemption-optionsGet available redemption options for the authenticated userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/loyalty/user/redemption-options' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"PointsRequired": 1,
"Category": "string",
"IsAvailable": true,
"ImageUrl": "https://example.com/callback",
"CashValue": 100,
"ExpiresAt": "2026-08-05T09:30:00Z",
"IsLimitedTime": true,
"QuantityAvailable": 1
}
]401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
MOR12 operations
POST/api/v2/mor/public/kybSubmit or resubmit KYB for the API key's MoR merchant.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/kyb' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CompanyName": "string",
"RegistrationNumber": "string",
"RegistrationCountry": "GB",
"Industry": "string",
"Website": "string",
"IncorporationDate": "2026-08-05",
"BusinessDescription": "Example description",
"AddressLine1": "string",
"AddressLine2": "string",
"City": "London",
"State": "string",
"Country": "GB",
"PostalCode": "SW1A 1AA",
"PhoneNumber": "+447700900123",
"PhoneCountryCode": "+447700900123",
"UboInformation": {
"UboFirstName": "Jane",
"UboLastName": "Doe",
"UboGender": "string",
"UboCountryCode": "GB",
"UboIdType": "string",
"UboIdNumber": "string",
"UboDob": "2026-08-05"
},
"Ubos": [
{
"FirstName": "Jane",
"LastName": "Doe",
"Dob": "2026-08-05",
"Nationality": "string",
"OwnershipPercentage": 100,
"IdNumber": "string",
"Gender": "string",
"CountryCode": "GB",
"IdType": "string"
}
]
}'Example request body
{
"CompanyName": "string",
"RegistrationNumber": "string",
"RegistrationCountry": "GB",
"Industry": "string",
"Website": "string",
"IncorporationDate": "2026-08-05",
"BusinessDescription": "Example description",
"AddressLine1": "string",
"AddressLine2": "string",
"City": "London",
"State": "string",
"Country": "GB",
"PostalCode": "SW1A 1AA",
"PhoneNumber": "+447700900123",
"PhoneCountryCode": "+447700900123",
"UboInformation": {
"UboFirstName": "Jane",
"UboLastName": "Doe",
"UboGender": "string",
"UboCountryCode": "GB",
"UboIdType": "string",
"UboIdNumber": "string",
"UboDob": "2026-08-05"
},
"Ubos": [
{
"FirstName": "Jane",
"LastName": "Doe",
"Dob": "2026-08-05",
"Nationality": "string",
"OwnershipPercentage": 100,
"IdNumber": "string",
"Gender": "string",
"CountryCode": "GB",
"IdType": "string"
}
]
}200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/mor/public/onboarding-statusGet the merchant onboarding status; optionally refresh it from Interlace.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/mor/public/onboarding-status?refresh=false' \
-H 'x-api-key: YOUR_API_KEY'Parameters
refreshquerybooleanoptionalExample: false200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/mor/public/cardholderCreate or return the merchant's company-level CORPORATE_MANAGED cardholder.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/cardholder' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Dob": "2026-08-05"
}'Example request body
{
"Dob": "2026-08-05"
}200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/mor/public/usersAdd a user_simple to the API key's MoR company.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/users' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Password": "string"
}'Example request body
{
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Password": "string"
}200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/mor/public/cards/batchOrder 1-20 prepaid cards in a batch.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/cards/batch' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"CardTypeId": 123,
"Quantity": 1,
"AutoLockEnabled": true,
"LabelPrefix": "string"
}'Example request body
{
"CardTypeId": 123,
"Quantity": 1,
"AutoLockEnabled": true,
"LabelPrefix": "string"
}200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/mor/public/cards/{cardId}/assignAssign a merchant-owned card to a user_simple in the same company.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/cards/123/assign' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"AssignedUserId": 123
}'Parameters
cardIdpathintegerrequiredExample: 123Example request body
{
"AssignedUserId": 123
}200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/mor/public/cards/{cardId}/loadLoad a merchant-owned card from the merchant's Interlace account.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/cards/123/load' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Amount": 100
}'Parameters
cardIdpathintegerrequiredExample: 123Example request body
{
"Amount": 100
}200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/mor/public/cards/{cardId}/unloadUnload a merchant-owned card to the merchant's Interlace account.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/mor/public/cards/123/unload' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Amount": 100
}'Parameters
cardIdpathintegerrequiredExample: 123Example request body
{
"Amount": 100
}200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/mor/public/cardsGet all merchant cards with their current available and pending balances.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/mor/public/cards' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/mor/public/users/{userId}/cardsGet one user_simple's assigned cards and aggregate card balances.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/mor/public/users/123/cards' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/mor/public/cards/{cardId}/secure-widgetGet a secure hosted card-information widget.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/mor/public/cards/123/secure-widget' \
-H 'x-api-key: YOUR_API_KEY'Parameters
cardIdpathintegerrequiredExample: 123200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/mor/public/walletsGet merchant wallets, deposit addresses, and fiat/crypto balances.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/mor/public/wallets' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Onboarding6 operations
GET/api/v2/onboarding/configOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/onboarding/config?companyId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
companyIdqueryintegeroptionalExample: 123200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/onboarding/statusOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/onboarding/status' \
-H 'x-api-key: YOUR_API_KEY'200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/onboarding/tierOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/onboarding/tier' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"TierId": 123
}'Example request body
{
"TierId": 123
}200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/onboarding/gates/{gateNumber}/checkoutOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/onboarding/gates/1/checkout' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"TermsAccepted": false
}'Parameters
gateNumberpathintegerrequiredExample: 1Example request body
{
"TermsAccepted": false
}200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/onboarding/kyc1/sessionOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/onboarding/kyc1/session' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"FirstName": "Jane",
"LastName": "Doe",
"Email": "user@example.com",
"Country": "GB",
"Phone": "+447700900123"
}'Example request body
{
"FirstName": "Jane",
"LastName": "Doe",
"Email": "user@example.com",
"Country": "GB",
"Phone": "+447700900123"
}200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/onboarding/kyc2/sessionOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/onboarding/kyc2/session' \
-H 'x-api-key: YOUR_API_KEY'200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Payments13 operations
POST/api/v2/payments/createCreate a payment with automatic currency exchange and transferRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/payments/create' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"MerchantReferenceId": "external_reference_123",
"MandateId": 123,
"Metadata": {}
}'Example request body
{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"MerchantReferenceId": "external_reference_123",
"MandateId": 123,
"Metadata": {}
}200OKPaymentResponseV2
{
"Id": 123,
"Status": "PENDING",
"Message": "string",
"TransactionId": 123,
"TransferId": "string",
"ExchangeQuote": {
"FromCurrency": "USD",
"ToCurrency": "USD",
"FromAmount": "100.00",
"ToAmount": "100.00",
"ExchangeRate": "string",
"Fee": "100.00"
},
"ExchangeTradeId": "string",
"RequiredAmount": "100.00",
"AvailableAmount": "100.00",
"Shortfall": "string",
"TransakOrder": {
"OrderId": "string",
"RedirectUrl": "https://example.com/callback",
"WidgetUrl": "https://example.com/callback",
"Status": "PENDING",
"Amount": "100.00",
"Currency": "USD",
"CryptoAmount": "100.00",
"CryptoCurrency": "USDC"
},
"Amount": "100.00",
"Currency": "USD",
"UserId": 123,
"CompanyId": 123,
"MandateId": 123,
"CreatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/payments/mandatesList payment mandates with filtering and paginationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/payments/mandates?pageNumber=1&pageSize=10&userId=123&status=PENDING¤cy=USD&dateFrom=2026-08-05' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pageNumberqueryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 10userIdqueryintegeroptionalExample: 123statusqueryMandateStatusV2optionalExample: PENDINGcurrencyquerystringoptionalExample: USDdateFromquerystringoptionalExample: 2026-08-05dateToquerystringoptionalExample: 2026-08-05200OKPaymentMandateListResponseV2
{
"Mandates": [
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"MaxAmount": "100.00",
"Currency": "USD",
"Frequency": "ONE_TIME",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"StartDate": "2026-08-05",
"EndDate": "2026-08-05",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
],
"Total": 1,
"PageNumber": 1,
"PageSize": 1,
"TotalPages": 1
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/payments/mandatesCreate a payment mandateRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/payments/mandates' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"MaxAmount": "100.00",
"Currency": "USD",
"Frequency": "ONE_TIME",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"StartDate": "2026-08-05",
"EndDate": "2026-08-05",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"MaxAmount": "100.00",
"Currency": "USD",
"Frequency": "ONE_TIME",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"StartDate": "2026-08-05",
"EndDate": "2026-08-05",
"Metadata": {}
}201CreatedPaymentMandateResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"MaxAmount": "100.00",
"Currency": "USD",
"Frequency": "ONE_TIME",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"StartDate": "2026-08-05",
"EndDate": "2026-08-05",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/payments/mandates/{mandateId}Get payment mandate by IDRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/payments/mandates/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
mandateIdpathintegerrequiredExample: 123200OKPaymentMandateResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"MaxAmount": "100.00",
"Currency": "USD",
"Frequency": "ONE_TIME",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"StartDate": "2026-08-05",
"EndDate": "2026-08-05",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/payments/mandates/{mandateId}/revokeRevoke a payment mandateRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/payments/mandates/123/revoke' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Reason": "string"
}'Parameters
mandateIdpathintegerrequiredExample: 123Example request body
{
"Reason": "string"
}200OKPaymentMandateResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"MaxAmount": "100.00",
"Currency": "USD",
"Frequency": "ONE_TIME",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"StartDate": "2026-08-05",
"EndDate": "2026-08-05",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/payments/requestsList payment requests with filtering and paginationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/payments/requests?pageNumber=1&pageSize=10&userId=123&status=PENDING¤cy=USD&dateFrom=2026-08-05' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pageNumberqueryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 10userIdqueryintegeroptionalExample: 123statusqueryPaymentStatusV2optionalExample: PENDINGcurrencyquerystringoptionalExample: USDdateFromquerystringoptionalExample: 2026-08-05dateToquerystringoptionalExample: 2026-08-05200OKPaymentRequestListResponseV2
{
"PaymentRequests": [
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"Amount": "100.00",
"Currency": "USD",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CallbackUrl": "https://example.com/callback",
"SuccessUrl": "https://example.com/callback",
"FailureUrl": "https://example.com/callback",
"PaymentUrl": "https://example.com/callback",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}
],
"Total": 1,
"PageNumber": 1,
"PageSize": 1,
"TotalPages": 1
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/payments/requestsCreate a payment requestRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/payments/requests' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CallbackUrl": "https://example.com/callback",
"SuccessUrl": "https://example.com/callback",
"FailureUrl": "https://example.com/callback",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CallbackUrl": "https://example.com/callback",
"SuccessUrl": "https://example.com/callback",
"FailureUrl": "https://example.com/callback",
"Metadata": {}
}201CreatedPaymentRequestResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"Amount": "100.00",
"Currency": "USD",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CallbackUrl": "https://example.com/callback",
"SuccessUrl": "https://example.com/callback",
"FailureUrl": "https://example.com/callback",
"PaymentUrl": "https://example.com/callback",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/payments/requests/{requestId}Get payment request by IDRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/payments/requests/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
requestIdpathintegerrequiredExample: 123200OKPaymentRequestResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"Amount": "100.00",
"Currency": "USD",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CallbackUrl": "https://example.com/callback",
"SuccessUrl": "https://example.com/callback",
"FailureUrl": "https://example.com/callback",
"PaymentUrl": "https://example.com/callback",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/payments/requests/{requestId}/cancelCancel a payment requestRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/payments/requests/123/cancel' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Reason": "string"
}'Parameters
requestIdpathintegerrequiredExample: 123Example request body
{
"Reason": "string"
}200OKPaymentRequestResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"Amount": "100.00",
"Currency": "USD",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CallbackUrl": "https://example.com/callback",
"SuccessUrl": "https://example.com/callback",
"FailureUrl": "https://example.com/callback",
"PaymentUrl": "https://example.com/callback",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/payments/payoutsCreate a payoutRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/payments/payouts' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"DestinationTag": "string",
"Network": "string",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"DestinationTag": "string",
"Network": "string",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}201CreatedPayoutResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"Amount": "100.00",
"Currency": "USD",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"DestinationTag": "string",
"Network": "string",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"TransactionId": "string",
"TransactionHash": "string",
"Fee": "100.00",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}501Not ImplementedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/payments/withdrawals/feeGet withdrawal fee estimateRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/payments/withdrawals/fee' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Currency": "USD",
"Amount": "100.00",
"Chain": "string",
"Network": "string",
"DestinationAddress": "0x1111111111111111111111111111111111111111"
}'Example request body
{
"Currency": "USD",
"Amount": "100.00",
"Chain": "string",
"Network": "string",
"DestinationAddress": "0x1111111111111111111111111111111111111111"
}200OKWithdrawalFeeResponseV2
{
"Currency": "USD",
"Amount": "100.00",
"Fee": "100.00",
"NetAmount": "100.00",
"Network": "string",
"EstimatedConfirmationTime": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}501Not ImplementedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/payments/withdrawalsCreate a withdrawalRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/payments/withdrawals' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Amount": "100.00",
"Currency": "USD",
"Chain": "string",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"UserId": 123,
"DestinationTag": "string",
"Network": "string",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}'Example request body
{
"Amount": "100.00",
"Currency": "USD",
"Chain": "string",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"UserId": 123,
"DestinationTag": "string",
"Network": "string",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}201CreatedPayoutResponseV2
{
"Id": 123,
"UserId": 123,
"CompanyId": 123,
"Amount": "100.00",
"Currency": "USD",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"DestinationTag": "string",
"Network": "string",
"Status": "PENDING",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"TransactionId": "string",
"TransactionHash": "string",
"Fee": "100.00",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}501Not ImplementedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/payments/assets/co-brandGet co-brand assetsRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/payments/assets/co-brand?companyId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
companyIdqueryintegeroptionalExample: 123200OKUserAssetsResponseV2
{
"UserId": 123,
"Assets": [
{
"Id": 123,
"Currency": "USD",
"Balance": "100.00",
"AvailableBalance": "100.00",
"FrozenBalance": "100.00",
"PendingBalance": "100.00",
"Network": "string",
"AssetType": "string",
"BalanceType": "100.00",
"BalanceId": "100.00",
"CreatedAt": "2026-08-05T09:30:00Z"
}
],
"RetrievedAt": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}501Not ImplementedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PublicVouchers41 operations
GET/api/v2/vouchers/settingsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/settings' \
-H 'x-api-key: YOUR_API_KEY'200OKVoucherModuleStatusResponse
{
"GlobalEnabled": true,
"CompanyEnabled": true,
"InterlaceEnabled": true,
"EffectiveEnabled": true,
"ShutdownMode": "string",
"LowBalanceWarningPercentage": 100,
"VerificationTtlMinutes": 1,
"DefaultRequiresApproval": true,
"DailyReportRecipients": [
"string"
],
"MaximumBatchSize": 1,
"MaximumImportRows": 1,
"MaximumMassAssignmentSize": 1
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/vouchers/settingsOpen request and response documentationRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/vouchers/settings' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Enabled": true,
"ShutdownMode": "string",
"LowBalanceWarningPercentage": 100,
"VerificationTtlMinutes": 1,
"DefaultRequiresApproval": true,
"DailyReportRecipients": [
"string"
],
"MaximumBatchSize": 1,
"MaximumImportRows": 1,
"MaximumMassAssignmentSize": 1
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Enabled": true,
"ShutdownMode": "string",
"LowBalanceWarningPercentage": 100,
"VerificationTtlMinutes": 1,
"DefaultRequiresApproval": true,
"DailyReportRecipients": [
"string"
],
"MaximumBatchSize": 1,
"MaximumImportRows": 1,
"MaximumMassAssignmentSize": 1
}200OKVoucherModuleStatusResponse
{
"GlobalEnabled": true,
"CompanyEnabled": true,
"InterlaceEnabled": true,
"EffectiveEnabled": true,
"ShutdownMode": "string",
"LowBalanceWarningPercentage": 100,
"VerificationTtlMinutes": 1,
"DefaultRequiresApproval": true,
"DailyReportRecipients": [
"string"
],
"MaximumBatchSize": 1,
"MaximumImportRows": 1,
"MaximumMassAssignmentSize": 1
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/groupsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/groups' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Id": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"Description": "Example description",
"Status": "PENDING",
"DefaultType": "string",
"DefaultValue": 100,
"DefaultCurrency": "USD",
"DefaultPerUserLimit": 1,
"DefaultTotalUseLimit": 1,
"DefaultAggregateCap": 100,
"DefaultRequiresApproval": true,
"DefaultRequiresEmail2Fa": true,
"DefaultValidFrom": "2026-08-05T09:30:00Z",
"DefaultValidUntil": "2026-08-05T09:30:00Z",
"CampaignReference": "external_reference_123",
"CostCentre": "string",
"Tags": [
"string"
],
"CreatedAt": "2026-08-05T09:30:00Z"
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/groupsOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/groups' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Description": "Example description",
"DefaultType": "string",
"DefaultValue": 100,
"DefaultCurrency": "USD",
"DefaultPerUserLimit": 1,
"DefaultTotalUseLimit": 1,
"DefaultAggregateCap": 100,
"DefaultRequiresApproval": true,
"DefaultRequiresEmail2Fa": true,
"DefaultValidFrom": "2026-08-05T09:30:00Z",
"DefaultValidUntil": "2026-08-05T09:30:00Z",
"CampaignReference": "external_reference_123",
"CostCentre": "string",
"Tags": [
"string"
]
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Name": "string",
"Description": "Example description",
"DefaultType": "string",
"DefaultValue": 100,
"DefaultCurrency": "USD",
"DefaultPerUserLimit": 1,
"DefaultTotalUseLimit": 1,
"DefaultAggregateCap": 100,
"DefaultRequiresApproval": true,
"DefaultRequiresEmail2Fa": true,
"DefaultValidFrom": "2026-08-05T09:30:00Z",
"DefaultValidUntil": "2026-08-05T09:30:00Z",
"CampaignReference": "external_reference_123",
"CostCentre": "string",
"Tags": [
"string"
]
}200OKVoucherGroupResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"Description": "Example description",
"Status": "PENDING",
"DefaultType": "string",
"DefaultValue": 100,
"DefaultCurrency": "USD",
"DefaultPerUserLimit": 1,
"DefaultTotalUseLimit": 1,
"DefaultAggregateCap": 100,
"DefaultRequiresApproval": true,
"DefaultRequiresEmail2Fa": true,
"DefaultValidFrom": "2026-08-05T09:30:00Z",
"DefaultValidUntil": "2026-08-05T09:30:00Z",
"CampaignReference": "external_reference_123",
"CostCentre": "string",
"Tags": [
"string"
],
"CreatedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/vouchers/groups/{id}/status/{status}Open request and response documentationRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/vouchers/groups/00000000-0000-4000-8000-000000000123/status/PENDING' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123statuspathstringrequiredExample: PENDINGIdempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKVoucherGroupResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"Description": "Example description",
"Status": "PENDING",
"DefaultType": "string",
"DefaultValue": 100,
"DefaultCurrency": "USD",
"DefaultPerUserLimit": 1,
"DefaultTotalUseLimit": 1,
"DefaultAggregateCap": 100,
"DefaultRequiresApproval": true,
"DefaultRequiresEmail2Fa": true,
"DefaultValidFrom": "2026-08-05T09:30:00Z",
"DefaultValidUntil": "2026-08-05T09:30:00Z",
"CampaignReference": "external_reference_123",
"CostCentre": "string",
"Tags": [
"string"
],
"CreatedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchersOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers?page=1&pageSize=50' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pagequeryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 50200OKapplication/json
[
{
"Id": "00000000-0000-4000-8000-000000000123",
"GroupId": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"Description": "Example description",
"MaskedCode": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"Status": "PENDING",
"SuccessfulUses": 1,
"ReservedUses": 1,
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"RedeemedValue": 100,
"ReservedValue": 100,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"PlaintextCode": "string"
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchersOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Description": "Example description",
"GroupPublicId": "00000000-0000-4000-8000-000000000123",
"TargetUserId": 123,
"CustomCode": "string",
"Prefix": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"InitialStatus": "PENDING",
"ExternalReference": "external_reference_123",
"AcceptUnboundedLiability": true
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Name": "string",
"Description": "Example description",
"GroupPublicId": "00000000-0000-4000-8000-000000000123",
"TargetUserId": 123,
"CustomCode": "string",
"Prefix": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"InitialStatus": "PENDING",
"ExternalReference": "external_reference_123",
"AcceptUnboundedLiability": true
}200OKVoucherResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"GroupId": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"Description": "Example description",
"MaskedCode": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"Status": "PENDING",
"SuccessfulUses": 1,
"ReservedUses": 1,
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"RedeemedValue": 100,
"ReservedValue": 100,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"PlaintextCode": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/batchOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/batch' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Count": 1,
"SharedCode": true,
"Description": "Example description",
"GroupPublicId": "00000000-0000-4000-8000-000000000123",
"TargetUserId": 123,
"CustomCode": "string",
"Prefix": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"InitialStatus": "PENDING",
"ExternalReference": "external_reference_123",
"AcceptUnboundedLiability": true
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Name": "string",
"Count": 1,
"SharedCode": true,
"Description": "Example description",
"GroupPublicId": "00000000-0000-4000-8000-000000000123",
"TargetUserId": 123,
"CustomCode": "string",
"Prefix": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"InitialStatus": "PENDING",
"ExternalReference": "external_reference_123",
"AcceptUnboundedLiability": true
}200OKVoucherJobResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Kind": "string",
"Status": "PENDING",
"TotalItems": 1,
"SuccessfulItems": 1,
"FailedItems": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/assignmentsOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/assignments' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"VoucherId": "00000000-0000-4000-8000-000000000123",
"UserId": 123
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"VoucherId": "00000000-0000-4000-8000-000000000123",
"UserId": 123
}200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/assignments/from-groupOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/assignments/from-group' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"GroupId": "00000000-0000-4000-8000-000000000123",
"UserId": 123
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"GroupId": "00000000-0000-4000-8000-000000000123",
"UserId": 123
}200OKVoucherResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"GroupId": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"Description": "Example description",
"MaskedCode": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"Status": "PENDING",
"SuccessfulUses": 1,
"ReservedUses": 1,
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"RedeemedValue": 100,
"ReservedValue": 100,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"PlaintextCode": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/vouchers/{id}/status/{status}Open request and response documentationRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/vouchers/00000000-0000-4000-8000-000000000123/status/PENDING' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123statuspathstringrequiredExample: PENDINGIdempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKVoucherResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"GroupId": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"Description": "Example description",
"MaskedCode": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"Status": "PENDING",
"SuccessfulUses": 1,
"ReservedUses": 1,
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"RedeemedValue": 100,
"ReservedValue": 100,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"PlaintextCode": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/{id}/revealOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/00000000-0000-4000-8000-000000000123/reveal' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/redemptionsOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/redemptions' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Code": "string"
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"UserId": 123,
"Code": "string"
}200OKVoucherRedemptionResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionReference": "external_reference_123",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/validateOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/validate' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Code": "string"
}'Example request body
{
"UserId": 123,
"Code": "string"
}200OKVoucherValidationResponse
{
"Valid": true,
"Amount": 100,
"Currency": "USD",
"RequiresEmailVerification": true,
"RequiresApproval": true
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/redemptions/{id}/verification/resendOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/redemptions/00000000-0000-4000-8000-000000000123/verification/resend?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123userIdqueryintegeroptionalExample: 123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/redemptions/{id}/verifyOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/redemptions/00000000-0000-4000-8000-000000000123/verify?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Code": "string"
}'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123userIdqueryintegeroptionalExample: 123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Code": "string"
}200OKVoucherRedemptionResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionReference": "external_reference_123",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/redemptions/{id}Open request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/redemptions/00000000-0000-4000-8000-000000000123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123200OKVoucherRedemptionResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionReference": "external_reference_123",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
DELETE/api/v2/vouchers/redemptions/{id}Open request and response documentationRequest & responses +
curl --request DELETE 'https://staging.hoppa.global/api/v2/vouchers/redemptions/00000000-0000-4000-8000-000000000123?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123userIdqueryintegeroptionalExample: 123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKVoucherRedemptionResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionReference": "external_reference_123",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/approvalsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/approvals' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Id": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionReference": "external_reference_123",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/approvals/{id}Open request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/approvals/00000000-0000-4000-8000-000000000123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Reason": "string",
"Approve": true,
"Notes": "string"
}'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Reason": "string",
"Approve": true,
"Notes": "string"
}200OKVoucherRedemptionResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionReference": "external_reference_123",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/liabilityOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/liability' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Currency": "USD",
"Outstanding": 100,
"Reserved": 100,
"Unbounded": true
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/liability/previewOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/liability/preview' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"Description": "Example description",
"GroupPublicId": "00000000-0000-4000-8000-000000000123",
"TargetUserId": 123,
"CustomCode": "string",
"Prefix": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"InitialStatus": "PENDING",
"ExternalReference": "external_reference_123",
"AcceptUnboundedLiability": true
}'Example request body
{
"Name": "string",
"Description": "Example description",
"GroupPublicId": "00000000-0000-4000-8000-000000000123",
"TargetUserId": 123,
"CustomCode": "string",
"Prefix": "string",
"Type": "string",
"Value": 100,
"Currency": "USD",
"PerUserLimit": 1,
"MaximumTotalUses": 1,
"MaximumAggregateValue": 100,
"RequiresWhitelabelApproval": true,
"RequiresEmail2Fa": true,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"InitialStatus": "PENDING",
"ExternalReference": "external_reference_123",
"AcceptUnboundedLiability": true
}200OKapplication/json
[
{
"Currency": "USD",
"Outstanding": 100,
"Reserved": 100,
"Unbounded": true
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/redemptions/{id}/retryOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/redemptions/00000000-0000-4000-8000-000000000123/retry' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKVoucherRedemptionResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionReference": "external_reference_123",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/rulesOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/rules' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Id": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"TriggerType": "string",
"CampaignMode": "string",
"Enabled": true,
"AssignmentCount": 1,
"AssignedValue": 100
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/rulesOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/rules' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Name": "string",
"TriggerType": "string",
"CampaignMode": "string",
"VoucherGroupId": "00000000-0000-4000-8000-000000000123",
"SharedVoucherId": "00000000-0000-4000-8000-000000000123",
"ThresholdAmount": 100,
"ThresholdCurrency": "USD",
"MaximumAssignments": 1,
"MaximumAssignedValue": 100,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Criteria": {},
"VoucherTemplate": {}
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Name": "string",
"TriggerType": "string",
"CampaignMode": "string",
"VoucherGroupId": "00000000-0000-4000-8000-000000000123",
"SharedVoucherId": "00000000-0000-4000-8000-000000000123",
"ThresholdAmount": 100,
"ThresholdCurrency": "USD",
"MaximumAssignments": 1,
"MaximumAssignedValue": 100,
"ValidFrom": "2026-08-05T09:30:00Z",
"ValidUntil": "2026-08-05T09:30:00Z",
"Criteria": {},
"VoucherTemplate": {}
}200OKVoucherRuleResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Name": "string",
"TriggerType": "string",
"CampaignMode": "string",
"Enabled": true,
"AssignmentCount": 1,
"AssignedValue": 100
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/vouchers/rules/{id}/enabled/{enabled}Open request and response documentationRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/vouchers/rules/00000000-0000-4000-8000-000000000123/enabled/true' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123enabledpathbooleanrequiredExample: trueIdempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/imports/previewOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/imports/preview' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data '{
"ContentType": "string",
"ContentDisposition": "string",
"Headers": {},
"Length": 1,
"Name": "string",
"FileName": "string"
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"ContentType": "string",
"ContentDisposition": "string",
"Headers": {},
"Length": 1,
"Name": "string",
"FileName": "string"
}200OKVoucherImportPreviewResponse
{
"JobId": "00000000-0000-4000-8000-000000000123",
"Status": "PENDING",
"TotalRows": 1,
"ValidRows": 1,
"InvalidRows": 1,
"Rows": [
{
"Row": 1,
"Valid": true,
"ErrorCode": "string",
"ErrorMessage": "string",
"Name": "string",
"Value": 100,
"Currency": "USD",
"Type": "string",
"UserId": 123
}
]
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/imports/templateOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/imports/template' \
-H 'x-api-key: YOUR_API_KEY'200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/imports/{id}/confirmOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/imports/00000000-0000-4000-8000-000000000123/confirm' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Mode": "string"
}'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Mode": "string"
}200OKVoucherJobResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Kind": "string",
"Status": "PENDING",
"TotalItems": 1,
"SuccessfulItems": 1,
"FailedItems": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/assignments/massOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/assignments/mass' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"VoucherId": "00000000-0000-4000-8000-000000000123",
"UserIds": [
1
],
"UserIdentifiers": [
"string"
],
"TierIds": [
1
],
"CardTypes": [
"string"
],
"TransactionTypes": [
"string"
],
"TransactionFrom": "2026-08-05T09:30:00Z",
"TransactionTo": "2026-08-05T09:30:00Z",
"MinimumCompletedTransactionVolume": 100,
"TransactionCurrency": "USD"
}'Parameters
Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"VoucherId": "00000000-0000-4000-8000-000000000123",
"UserIds": [
1
],
"UserIdentifiers": [
"string"
],
"TierIds": [
1
],
"CardTypes": [
"string"
],
"TransactionTypes": [
"string"
],
"TransactionFrom": "2026-08-05T09:30:00Z",
"TransactionTo": "2026-08-05T09:30:00Z",
"MinimumCompletedTransactionVolume": 100,
"TransactionCurrency": "USD"
}200OKVoucherJobResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Kind": "string",
"Status": "PENDING",
"TotalItems": 1,
"SuccessfulItems": 1,
"FailedItems": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/jobsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/jobs' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Id": "00000000-0000-4000-8000-000000000123",
"Kind": "string",
"Status": "PENDING",
"TotalItems": 1,
"SuccessfulItems": 1,
"FailedItems": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/jobs/{id}Open request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/jobs/00000000-0000-4000-8000-000000000123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123200OKVoucherJobResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Kind": "string",
"Status": "PENDING",
"TotalItems": 1,
"SuccessfulItems": 1,
"FailedItems": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/jobs/{id}/itemsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/jobs/00000000-0000-4000-8000-000000000123/items' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123200OKapplication/json
[
{
"ItemIndex": 1,
"Status": "PENDING",
"ExternalKey": "string",
"ErrorCode": "string",
"ErrorMessage": "string",
"Result": "string"
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/jobs/{id}/retryOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/jobs/00000000-0000-4000-8000-000000000123/retry' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001200OKVoucherJobResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"Kind": "string",
"Status": "PENDING",
"TotalItems": 1,
"SuccessfulItems": 1,
"FailedItems": 1,
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/jobs/{id}/codes/exportOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/jobs/00000000-0000-4000-8000-000000000123/codes/export' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/vouchers/redemptions/{id}/reversalOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/vouchers/redemptions/00000000-0000-4000-8000-000000000123/reversal' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Idempotency-Key: operation-customer-1042-001' \
-H 'Content-Type: application/json' \
--data '{
"Reason": "string",
"RestoreUse": true,
"DryRun": true,
"Confirm": true
}'Parameters
idpathstringrequiredExample: 00000000-0000-4000-8000-000000000123Idempotency-KeyheaderstringoptionalExample: operation-customer-1042-001Example request body
{
"Reason": "string",
"RestoreUse": true,
"DryRun": true,
"Confirm": true
}200OKVoucherReversalResponse
{
"Id": "00000000-0000-4000-8000-000000000123",
"RedemptionId": "00000000-0000-4000-8000-000000000123",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"RestoreUse": true,
"DryRun": true,
"TransactionReference": "external_reference_123"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/reports/redemptionsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/reports/redemptions?from=2026-08-05T09%3A30%3A00Z&to=2026-08-05T09%3A30%3A00Z&status=PENDING¤cy=USD' \
-H 'x-api-key: YOUR_API_KEY'Parameters
fromquerystringoptionalExample: 2026-08-05T09:30:00ZtoquerystringoptionalExample: 2026-08-05T09:30:00ZstatusquerystringoptionalExample: PENDINGcurrencyquerystringoptionalExample: USD200OKapplication/json
[
{
"RedemptionId": "00000000-0000-4000-8000-000000000123",
"VoucherId": "00000000-0000-4000-8000-000000000123",
"VoucherName": "string",
"UserId": 123,
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"ErrorCode": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z"
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/reports/daily-statisticsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/reports/daily-statistics?from=2026-08-05&to=2026-08-05' \
-H 'x-api-key: YOUR_API_KEY'Parameters
fromquerystringoptionalExample: 2026-08-05toquerystringoptionalExample: 2026-08-05200OKapplication/json
[
{
"Date": "2026-08-05",
"Currency": "USD",
"IssuedCount": 1,
"IssuedValue": 100,
"RedeemedCount": 1,
"RedeemedValue": 100,
"FailedCount": 1,
"ReversedCount": 1
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/reports/liability-snapshotsOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/reports/liability-snapshots?from=2026-08-05&to=2026-08-05' \
-H 'x-api-key: YOUR_API_KEY'Parameters
fromquerystringoptionalExample: 2026-08-05toquerystringoptionalExample: 2026-08-05200OKapplication/json
[
{
"Date": "2026-08-05",
"Currency": "USD",
"Outstanding": 100,
"Reserved": 100,
"Unbounded": true
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/reports/{report}/exportOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/reports/example/export' \
-H 'x-api-key: YOUR_API_KEY'Parameters
reportpathstringrequiredExample: example200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/vouchers/auditOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/vouchers/audit?page=1&pageSize=100' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pagequeryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 100200OKapplication/json
[
{
"Id": 123,
"UserId": 123,
"ApiKeyId": 123,
"ActorType": "string",
"Action": "string",
"TargetType": "string",
"TargetId": "string",
"Status": "PENDING",
"CorrelationId": "string",
"Timestamp": "2026-08-05T09:30:00Z"
}
]Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Support1 operations
POST/api/v2/admin/support/messages/report-transactionOpen request and response documentationadminRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/admin/support/messages/report-transaction' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"TargetUserId": 123,
"TransactionId": 123,
"Message": "string"
}'Example request body
{
"TargetUserId": 123,
"TransactionId": 123,
"Message": "string"
}200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Swap2 operations
POST/api/v2/swaptokens/swapOpen request and response documentationRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/swaptokens/swap' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"TokenIn": "USDC",
"TokenOut": "USDC",
"AmountIn": "100.00",
"Slippage": 100,
"ChainIdIn": 1,
"ChainIdOut": 1,
"FromAddress": "0x1111111111111111111111111111111111111111",
"ToAddress": "0x1111111111111111111111111111111111111111"
}'Example request body
{
"UserId": 123,
"TokenIn": "USDC",
"TokenOut": "USDC",
"AmountIn": "100.00",
"Slippage": 100,
"ChainIdIn": 1,
"ChainIdOut": 1,
"FromAddress": "0x1111111111111111111111111111111111111111",
"ToAddress": "0x1111111111111111111111111111111111111111"
}200OKSwapResponse
{
"Transaction": {
"to": "string",
"data": "string",
"value": "string",
"abi": "string",
"args": [
{}
]
},
"Route": {
"query": {
"params": {
"chainIdIn": 1,
"chainIdOut": 1,
"tokenIn": "USDC",
"tokenOut": "USDC",
"amountIn": "100.00"
},
"slippage": 100,
"from": "string",
"recipient": "string"
},
"route": [
{
"pool": {
"lp": {
"chainId": {},
"address": {},
"name": {},
"symbol": {},
"decimals": {},
"tags": {},
"permit": {}
},
"decimals": [
{}
],
"coins": [
{}
],
"address": "string",
"underlyingCoins": [
{}
],
"type": "string"
},
"fees": [
{
"type": {},
"token": {},
"percent": {},
"amount": {}
}
],
"priceImpact": "string",
"params": {
"tokenIn": {
"chainId": {},
"address": {},
"name": {},
"symbol": {},
"decimals": {},
"chainName": {},
"originalName": {},
"originalSymbol": {},
"tags": {},
"synthTags": {},
"permit": {}
},
"chainIdIn": 1,
"tokenOut": {
"chainId": {},
"address": {},
"name": {},
"symbol": {},
"decimals": {},
"chainName": {},
"originalName": {},
"originalSymbol": {},
"tags": {},
"synthTags": {},
"permit": {}
},
"chainIdOut": 1,
"amountIn": "100.00",
"amountInWithoutSlippage": "100.00",
"amountOut": "100.00",
"amountOutWithoutSlippage": "100.00",
"slippage": 100
},
"type": "string",
"chainId": 123
}
],
"amountIn": "100.00",
"amountInWithoutSlippage": "100.00",
"amountOut": "100.00",
"amountOutWithoutSlippage": "100.00",
"tokenInPrice": 100,
"tokenOutPrice": 100,
"priceImpact": 100,
"totalFee": {
"type": "string",
"amount": "100.00",
"percent": "string"
},
"signature": "string"
},
"TransactionId": 123
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/swaptokens/historyOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/swaptokens/history?userId=123&page=1&pageSize=20' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123pagequeryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 20200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Tiers2 operations
GET/api/v2/tiersGet company tiers for the authenticated companyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/tiers' \
-H 'x-api-key: YOUR_API_KEY'200OKGetTiersResponseV2
{
"Tiers": [
{
"Id": 123,
"Name": "string",
"Description": "Example description",
"TierLevel": 1,
"AccountType": "string",
"MonthlyFee": 100,
"YearlyFee": 100,
"Features": [
"string"
],
"Limits": {},
"IsDefault": true,
"IsActive": true,
"StripeAccountOwnerOverride": "string",
"IncludesEqualsCards": true,
"IncludesEqualsIban": true,
"EuPriceTableId": "string",
"UkPriceTableId": "string",
"UsPriceTableId": "string",
"UpPriceTableId": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}403ForbiddenErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/tiers/card-tier/{cardTierId}Get all card type tiers for a specific tier ID for the authenticated companyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/tiers/card-tier/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
cardTierIdpathintegerrequiredExample: 123200OKGetCardTypeTierResponseV2
{
"CardTypeTiers": [
{
"CardTypeSecondaryId": 123,
"CardTypeId": 123,
"TierId": 123,
"BinRangeOverrideId": 123,
"EffectiveBinRangeId": 123,
"FreeCardsIncluded": 1,
"FreeCardsPeriod": "string",
"MonthlySubscriptionFee": 100,
"YearlySubscriptionFee": 100,
"MaxCards": 1,
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CardType": {
"Id": 123,
"Name": "string",
"Code": "string",
"Description": "Example description",
"Features": [
"string"
],
"MonthlyFee": 100,
"IssuanceFee": 100,
"CurrencyCode": "USD",
"Limits": {},
"Benefits": [
"string"
],
"AvailableDesigns": [
"string"
],
"IssuanceTime": "string",
"IsEnabled": true,
"CompanyId": 123,
"RequiresKycLevel": "string",
"MonthlySubscriptionFee": 100,
"YearlySubscriptionFee": 100,
"SubscriptionFeatures": [
"string"
],
"BaseFeatures": [
"string"
],
"LoadOptions": [
"string"
],
"ReplacementFee": 100,
"AtmWithdrawalFee": 100,
"IsVirtual": true,
"IsPhysical": true,
"CardNetwork": "string",
"Provider": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
}
]
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}403ForbiddenErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Transactions7 operations
GET/api/v2/transactionsGet paginated transactions with advanced filteringRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transactions?page=1&pageSize=20&types=example&statuses=example&startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pagequeryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 20typesqueryarrayoptionalExample: examplestatusesqueryarrayoptionalExample: examplestartDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00ZsearchquerystringoptionalExample: exampleminAmountquerynumberoptionalExample: 100maxAmountquerynumberoptionalExample: 100sourcesqueryarrayoptionalExample: examplecardIdsqueryarrayoptionalExample: 789walletIdsqueryarrayoptionalExample: 123sortByquerystringoptionalExample: datesortOrderquerystringoptionalExample: descuserIdqueryintegeroptionalExample: 123200OKPaginatedTransactionResponse
{
"Data": [
{
"Id": 123,
"ExternalTransactionId": "external_reference_123",
"RelatedCardTransactionId": "string",
"Type": "string",
"Description": "Example description",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionDate": "2026-08-05T09:30:00Z",
"MerchantName": "string",
"MerchantCategory": "string",
"Category": "string",
"CardId": 123,
"WalletId": 123,
"Source": "string",
"FeeAmount": 100,
"FeeCurrency": "USD",
"Metadata": {}
}
],
"Pagination": {
"Page": 1,
"PageSize": 1,
"Total": 1,
"TotalPages": 1,
"HasPrevious": true,
"HasNext": true
},
"Stats": {
"TotalCount": 1,
"TotalAmount": 100,
"AmountByCurrency": {},
"CountByType": {},
"AmountByType": {},
"CountByStatus": {}
}
}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server ErrorNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transactions/syncSync current user's transactions with Interlace (Quantum Account). Adds any missing transactions by external_id.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transactions/sync?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKapplication/json
{}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server ErrorNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transactions/{id}Get transaction by IDRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transactions/123?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 123200OKTransactionDetailResponse
{
"UserId": 123,
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"AccountId": 123,
"Id": 123,
"ExternalTransactionId": "external_reference_123",
"RelatedCardTransactionId": "string",
"Type": "string",
"Description": "Example description",
"Amount": 100,
"Currency": "USD",
"Status": "PENDING",
"TransactionDate": "2026-08-05T09:30:00Z",
"MerchantName": "string",
"MerchantCategory": "string",
"Category": "string",
"CardId": 123,
"WalletId": 123,
"Source": "string",
"FeeAmount": 100,
"FeeCurrency": "USD",
"Metadata": {}
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server ErrorNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transactions/{id}/equals-money/payment-confirmationOpen request and response documentationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transactions/123/equals-money/payment-confirmation?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
idpathintegerrequiredExample: 123userIdqueryintegeroptionalExample: 123200OKFileResult
{
"ContentType": "string",
"FileDownloadName": "string",
"LastModified": "2026-08-05T09:30:00Z",
"EntityTag": {
"Tag": {
"Buffer": "string",
"Offset": 1,
"Length": 1,
"Value": "string",
"HasValue": true
},
"IsWeak": true
},
"EnableRangeProcessing": true
}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}404Not FoundProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transactions/statsGet transaction statisticsRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transactions/stats?startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z&userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
startDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00ZuserIdqueryintegeroptionalExample: 123200OKTransactionStatisticsResponse
{
"TotalTransactions": 1,
"TotalAmount": 100,
"AverageAmount": 100,
"AmountByCurrency": {},
"CountByType": {},
"CountByStatus": {},
"DailyVolume": [
{
"Date": "2026-08-05T09:30:00Z",
"Volume": 100,
"Count": 1
}
],
"TopMerchants": [
{
"MerchantName": "string",
"TotalAmount": 100,
"TransactionCount": 1
}
]
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server ErrorNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transactions/exportExport transactions in CSV or PDF formatRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transactions/export?format=csv&types=example&statuses=example&startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z&search=example' \
-H 'x-api-key: YOUR_API_KEY'Parameters
formatquerystringoptionalExample: csvtypesqueryarrayoptionalExample: examplestatusesqueryarrayoptionalExample: examplestartDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00ZsearchquerystringoptionalExample: exampleminAmountquerynumberoptionalExample: 100maxAmountquerynumberoptionalExample: 100sourcesqueryarrayoptionalExample: examplecardIdsqueryarrayoptionalExample: 789walletIdsqueryarrayoptionalExample: 123userIdqueryintegeroptionalExample: 123200OKFileResult
{
"ContentType": "string",
"FileDownloadName": "string",
"LastModified": "2026-08-05T09:30:00Z",
"EntityTag": {
"Tag": {
"Buffer": "string",
"Offset": 1,
"Length": 1,
"Value": "string",
"HasValue": true
},
"IsWeak": true
},
"EnableRangeProcessing": true
}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server ErrorNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transactions/top-upProcesses a wallet top-up operation using external payment methods.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transactions/top-up' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Token": "USDC",
"WalletAddress": "0x1111111111111111111111111111111111111111",
"Value": 100
}'Example request body
{
"Token": "USDC",
"WalletAddress": "0x1111111111111111111111111111111111111111",
"Value": 100
}200OKTopUpResponse
{
"Success": true,
"TransakUrl": "https://example.com/callback",
"OrderId": "string",
"Token": "USDC",
"Value": 100,
"WalletAddress": "0x1111111111111111111111111111111111111111",
"Message": "string",
"ErrorCode": "string",
"ErrorMessage": "string",
"Fee": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"Configuration": {
"FiatCurrency": "USD",
"CryptoCurrency": "USDC",
"Network": "string",
"MinAmount": 100,
"MaxAmount": 100,
"IsTestMode": true
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Transfers17 operations
GET/api/v2/transfers/{transferId}Get transfer by IDRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transfers/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
transferIdpathintegerrequiredExample: 123200OKTransferResponseV2
{
"Id": 123,
"UserId": 123,
"Status": "PENDING",
"Amount": "100.00",
"Currency": "USD",
"SourceType": "CRYPTO_ASSETS",
"DestinationType": "CRYPTO_ASSETS",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"Metadata": {},
"TransferType": "string",
"Message": "string",
"ErrorCode": "string",
"FeeAmount": "100.00",
"FeeCurrency": "USD",
"FeeType": "None",
"NetAmount": "100.00"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/user-to-masterCreate a transfer from user to master accountRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/user-to-master' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}201CreatedTransferResponseV2
{
"Id": 123,
"UserId": 123,
"Status": "PENDING",
"Amount": "100.00",
"Currency": "USD",
"SourceType": "CRYPTO_ASSETS",
"DestinationType": "CRYPTO_ASSETS",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"Metadata": {},
"TransferType": "string",
"Message": "string",
"ErrorCode": "string",
"FeeAmount": "100.00",
"FeeCurrency": "USD",
"FeeType": "None",
"NetAmount": "100.00"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/master-to-userCreate a transfer from master account to userRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/master-to-user' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"Amount": "100.00",
"Currency": "USD",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"Metadata": {}
}201CreatedTransferResponseV2
{
"Id": 123,
"UserId": 123,
"Status": "PENDING",
"Amount": "100.00",
"Currency": "USD",
"SourceType": "CRYPTO_ASSETS",
"DestinationType": "CRYPTO_ASSETS",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"Metadata": {},
"TransferType": "string",
"Message": "string",
"ErrorCode": "string",
"FeeAmount": "100.00",
"FeeCurrency": "USD",
"FeeType": "None",
"NetAmount": "100.00"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transfersList transfers with filtering and paginationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transfers?pageNumber=1&pageSize=10&userId=123&status=PENDING¤cy=USD&dateFrom=2026-08-05' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pageNumberqueryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 10userIdqueryintegeroptionalExample: 123statusqueryTransferStatusV2optionalExample: PENDINGcurrencyquerystringoptionalExample: USDdateFromquerystringoptionalExample: 2026-08-05dateToquerystringoptionalExample: 2026-08-05200OKTransferListResponseV2
{
"Transfers": [
{
"Id": 123,
"UserId": 123,
"Status": "PENDING",
"Amount": "100.00",
"Currency": "USD",
"SourceType": "CRYPTO_ASSETS",
"DestinationType": "CRYPTO_ASSETS",
"Description": "Example description",
"ExternalReferenceId": "external_reference_123",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"Metadata": {},
"TransferType": "string",
"Message": "string",
"ErrorCode": "string",
"FeeAmount": "100.00",
"FeeCurrency": "USD",
"FeeType": "None",
"NetAmount": "100.00"
}
],
"Total": 1,
"PageNumber": 1,
"PageSize": 1,
"TotalPages": 1
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/wallet-topupRequest a wallet top-up via TransakRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/wallet-topup?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Token": "USDC",
"WalletAddress": "0x1111111111111111111111111111111111111111",
"Value": 100
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"Token": "USDC",
"WalletAddress": "0x1111111111111111111111111111111111111111",
"Value": 100
}200OKTopUpResponse
{
"Success": true,
"TransakUrl": "https://example.com/callback",
"OrderId": "string",
"Token": "USDC",
"Value": 100,
"WalletAddress": "0x1111111111111111111111111111111111111111",
"Message": "string",
"ErrorCode": "string",
"ErrorMessage": "string",
"Fee": 100,
"CreatedAt": "2026-08-05T09:30:00Z",
"Configuration": {
"FiatCurrency": "USD",
"CryptoCurrency": "USDC",
"Network": "string",
"MinAmount": 100,
"MaxAmount": 100,
"IsTestMode": true
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/crypto-to-quantum-transferCreate a crypto-to-quantum transfer for internal account transfers (destination is always USD)Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/crypto-to-quantum-transfer?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"SourceCurrency": "USD",
"Amount": 100,
"DestinationCurrency": "USD"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"SourceCurrency": "USD",
"Amount": 100,
"DestinationCurrency": "USD"
}200OKCryptoToQuantumTransferResponse
{
"Success": true,
"TransferId": "string",
"Message": "string",
"ErrorCode": "string",
"ErrorMessage": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"Details": {
"SourceCurrency": "USD",
"DestinationCurrency": "USD",
"Amount": 100,
"Status": "PENDING",
"InterlaceAccountId": "string",
"TransferPath": "string",
"RequiresExchange": true,
"ExchangeRate": 100,
"AvailableBalances": {},
"RequiredAmount": 100,
"TotalAvailableValue": 100
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/quantum-usd-to-crypto-exchangeExchange Quantum USD to Crypto (USDC/USDT)Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/quantum-usd-to-crypto-exchange?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Currency": "USD",
"Amount": 100
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"Currency": "USD",
"Amount": 100
}200OKQuantumToCryptoExchangeResponse
{
"Success": true,
"Message": "string",
"ErrorCode": "string",
"SourceAmount": 100,
"TargetCurrency": "USD",
"CryptoAmountReceived": 100,
"Rate": 100,
"Fee": 100,
"TradeId": "string",
"Status": "PENDING",
"InitiatedAt": "2026-08-05T09:30:00Z",
"Details": {
"FinalCryptoBalance": 100,
"FinalQuantumBalance": 100
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transfers/withdrawals/fee-and-quotaGet withdrawal fee and quota informationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transfers/withdrawals/fee-and-quota?userId=123&chain=example&address=example¤cy=USD&amount=100.00' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123chainquerystringoptionalExample: exampleaddressquerystringoptionalExample: examplecurrencyquerystringoptionalExample: USDamountquerystringoptionalExample: 100.00200OKFeeAndQuotaResponse
{
"Code": "string",
"Message": "string",
"Data": {
"CrossChainQuota": "string",
"CrossChainFeeRate": "100.00",
"CrossChainAmount": "100.00",
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"Type": "string"
}
]
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transfers/withdrawals/available-balanceGet available withdrawal balance for a userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transfers/withdrawals/available-balance?userId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123200OKAvailableWithdrawalBalanceResponse
{
"TotalAvailableUSDT": 100,
"TotalAvailableUSDC": 100,
"WalletBreakdown": [
{
"WalletType": "string",
"Currency": "USD",
"Balance": 100,
"USDValue": 100,
"USDTEquivalent": 100,
"USDCEquivalent": 100
}
],
"ExchangeRateUSDToUSDT": 100,
"ExchangeRateUSDToUSDC": 100
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/withdrawals/cryptoCreate an external crypto withdrawal (to blockchain address)Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/withdrawals/crypto' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"UserId": 123,
"Currency": "USD",
"Chain": "string",
"Amount": "100.00",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"ConfirmExchangeRate": true,
"Description": "Example description",
"Metadata": {}
}'Example request body
{
"UserId": 123,
"Currency": "USD",
"Chain": "string",
"Amount": "100.00",
"DestinationAddress": "0x1111111111111111111111111111111111111111",
"ConfirmExchangeRate": true,
"Description": "Example description",
"Metadata": {}
}201CreatedExternalCryptoWithdrawalResponse
{
"Success": true,
"TransactionId": "string",
"InterlaceTransferId": "string",
"WithdrawalRequestId": 123,
"Status": "PENDING",
"ActualAmount": 100,
"Currency": "USD",
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"Type": "string"
}
],
"Message": "string",
"OtpRequired": true,
"OtpExpiresAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}422Unprocessable EntityErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/withdrawals/crypto/confirmConfirm a crypto withdrawal with an emailed OTP codeRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/withdrawals/crypto/confirm' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"WithdrawalRequestId": 123,
"OtpCode": "string",
"UserId": 123
}'Example request body
{
"WithdrawalRequestId": 123,
"OtpCode": "string",
"UserId": 123
}200OKExternalCryptoWithdrawalResponse
{
"Success": true,
"TransactionId": "string",
"InterlaceTransferId": "string",
"WithdrawalRequestId": 123,
"Status": "PENDING",
"ActualAmount": 100,
"Currency": "USD",
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"Type": "string"
}
],
"Message": "string",
"OtpRequired": true,
"OtpExpiresAt": "2026-08-05T09:30:00Z"
}202AcceptedExternalCryptoWithdrawalResponse
{
"Success": true,
"TransactionId": "string",
"InterlaceTransferId": "string",
"WithdrawalRequestId": 123,
"Status": "PENDING",
"ActualAmount": 100,
"Currency": "USD",
"Fees": [
{
"Amount": "100.00",
"Currency": "USD",
"Type": "string"
}
],
"Message": "string",
"OtpRequired": true,
"OtpExpiresAt": "2026-08-05T09:30:00Z"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}503Service UnavailableErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transfers/withdrawals/validateValidate withdrawal requestRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transfers/withdrawals/validate?userId=123¤cy=USD&amount=100' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123currencyquerystringoptionalExample: USDamountquerynumberoptionalExample: 100200OKWithdrawalValidationResult
{
"IsValid": true,
"UserId": 123,
"RequestedAmount": 100,
"RequestedCurrency": "USD",
"ErrorCode": "string",
"ErrorMessage": "string",
"UserFriendlyMessage": "string",
"AvailableAmount": 100,
"ShortfallAmount": 100,
"BalanceBreakdown": {},
"AvailableBalance": {
"TotalAvailableUSDT": 100,
"TotalAvailableUSDC": 100,
"WalletBreakdown": [
{
"WalletType": "string",
"Currency": "USD",
"Balance": 100,
"USDValue": 100,
"USDTEquivalent": 100,
"USDCEquivalent": 100
}
],
"ExchangeRateUSDToUSDT": 100,
"ExchangeRateUSDToUSDC": 100
},
"OptimalTransferPath": "string",
"RequiresInternalTransfer": true
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transfers/crypto-transactionsGet user crypto transactions (CryptoConnect transfers)Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transfers/crypto-transactions?userId=123&id=123&transactionHash=example&referenceId=external_reference_123&startTime=example&endTime=example' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123idquerystringoptionalExample: 123transactionHashquerystringoptionalExample: examplereferenceIdquerystringoptionalExample: external_reference_123startTimequerystringoptionalExample: exampleendTimequerystringoptionalExample: examplelimitqueryintegeroptionalExample: 10pagequeryintegeroptionalExample: 1200OKCryptoTransfersListResponse
{
"Transfers": [
{
"Id": "string",
"AccountId": "string",
"ReferenceId": "external_reference_123",
"Source": {
"Type": "string",
"Id": "string",
"Chain": "string",
"Address": "string"
},
"Destination": {
"Type": "string",
"Id": "string",
"Chain": "string",
"Address": "string"
},
"Amount": {
"Amount": 100,
"Currency": "USD"
},
"Fees": [
{
"Amount": 100,
"Currency": "USD",
"Type": "string"
}
],
"Status": "PENDING",
"CreateTime": "2026-08-05T09:30:00Z",
"CompleteTime": "2026-08-05T09:30:00Z"
}
],
"Total": 1,
"Page": 1,
"Limit": 1
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/transfers/crypto-refundsGet crypto refunds for a userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/transfers/crypto-refunds?userId=123&id=123&transferId=123&transactionHash=example&referenceId=external_reference_123&startTime=example' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123idquerystringoptionalExample: 123transferIdquerystringoptionalExample: 123transactionHashquerystringoptionalExample: examplereferenceIdquerystringoptionalExample: external_reference_123startTimequerystringoptionalExample: exampleendTimequerystringoptionalExample: examplelimitqueryintegeroptionalExample: 10pagequeryintegeroptionalExample: 1200OKCryptoRefundsListResponse
{
"Refunds": [
{
"Id": "string",
"TransferId": "string",
"AccountId": "string",
"Destination": {
"Type": "string",
"Id": "string",
"Chain": "string",
"Address": "string"
},
"Amount": {
"Amount": 100,
"Currency": "USD"
},
"Fees": [
{
"Amount": 100,
"Currency": "USD",
"Type": "string"
}
],
"Status": "PENDING",
"TransactionHash": "string",
"ReferenceId": "external_reference_123",
"CreateTime": "2026-08-05T09:30:00Z",
"CompleteTime": "2026-08-05T09:30:00Z"
}
],
"Total": 1,
"Page": 1,
"Limit": 1
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/crypto-refundsCreate a crypto refundRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/crypto-refunds?userId=123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"TransferId": "string",
"Address": "string"
}'Parameters
userIdqueryintegeroptionalExample: 123Example request body
{
"TransferId": "string",
"Address": "string"
}201CreatedCreateCryptoRefundResponse
{
"Success": true,
"RefundId": "string",
"TransferId": "string",
"AccountId": "string",
"Destination": {
"Type": "string",
"Id": "string",
"Chain": "string",
"Address": "string"
},
"Amount": {
"Amount": 100,
"Currency": "USD"
},
"Fees": [
{
"Amount": 100,
"Currency": "USD",
"Type": "string"
}
],
"Status": "PENDING",
"ReferenceId": "external_reference_123",
"CreateTime": "2026-08-05T09:30:00Z",
"CompleteTime": "2026-08-05T09:30:00Z",
"Message": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/crypto-refunds/gas-feeGet refund gas fee for a specific currency and chainRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/crypto-refunds/gas-fee' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Currency": "USD",
"Chain": "string"
}'Example request body
{
"Currency": "USD",
"Chain": "string"
}200OKGetRefundGasFeeResponse
{
"Fees": [
{
"Amount": 100,
"Currency": "USD",
"Type": "string"
}
],
"Message": "string"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/transfers/test-feesTest endpoint for fee charging flowtestRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/transfers/test-fees?userId=123&completeFee=100&whitelabelFee=100' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdqueryintegeroptionalExample: 123completeFeequerynumberoptionalExample: 100whitelabelFeequerynumberoptionalExample: 100200OKapplication/json
{}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Users17 operations
GET/api/v2/usersList users with filtering and paginationRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users?pageNumber=1&pageSize=10&query=example&status=PENDING&kycStatus=SUBMITTED&externalUserId=external_reference_123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pageNumberqueryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 10queryquerystringoptionalExample: examplestatusqueryAccountStatusV2optionalExample: PENDINGkycStatusqueryKycStatusV2optionalExample: SUBMITTEDexternalUserIdquerystringoptionalExample: external_reference_123dateFromquerystringoptionalExample: 2026-08-05dateToquerystringoptionalExample: 2026-08-05200OKUserListResponseV2
{
"Users": [
{
"Id": 123,
"ExternalUserId": "external_reference_123",
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Status": "PENDING",
"KycStatus": "SUBMITTED",
"KycLevel": "HOPPA_PRODUCTION",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompanyId": 123,
"PackageId": 123,
"BusinessName": "string",
"BusinessExternalId": "external_reference_123",
"BusinessParentId": 123,
"AccountType": "business",
"PrimaryExternalWalletId": "external_reference_123",
"SelectedTierId": 123,
"TierBillingCycle": "string",
"OnboardingProductPreference": "external_reference_123"
}
],
"Total": 1,
"PageNumber": 1,
"PageSize": 1,
"TotalPages": 1
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/usersCreate a new userRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/users' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"ExternalUserId": "external_reference_123",
"Phone": "+447700900123",
"TierId": 123,
"TierBillingCycle": "string",
"Metadata": {},
"InitialKycSource": "SUMSUB",
"DateOfBirth": "2026-08-05",
"Address": "string",
"City": "London",
"State": "string",
"Country": "GB",
"ZipCode": "SW1A 1AA",
"CreateMandate": true,
"MandateMaxAmount": "2026-08-05",
"MandateCurrency": "2026-08-05",
"MandateDescription": "2026-08-05",
"BusinessName": "string",
"BusinessExternalId": "external_reference_123",
"BusinessParentId": 123,
"ReferralId": "string",
"AccountType": "business"
}'Example request body
{
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"ExternalUserId": "external_reference_123",
"Phone": "+447700900123",
"TierId": 123,
"TierBillingCycle": "string",
"Metadata": {},
"InitialKycSource": "SUMSUB",
"DateOfBirth": "2026-08-05",
"Address": "string",
"City": "London",
"State": "string",
"Country": "GB",
"ZipCode": "SW1A 1AA",
"CreateMandate": true,
"MandateMaxAmount": "2026-08-05",
"MandateCurrency": "2026-08-05",
"MandateDescription": "2026-08-05",
"BusinessName": "string",
"BusinessExternalId": "external_reference_123",
"BusinessParentId": 123,
"ReferralId": "string",
"AccountType": "business"
}201CreatedUserResponseV2
{
"Id": 123,
"ExternalUserId": "external_reference_123",
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Status": "PENDING",
"KycStatus": "SUBMITTED",
"KycLevel": "HOPPA_PRODUCTION",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompanyId": 123,
"PackageId": 123,
"BusinessName": "string",
"BusinessExternalId": "external_reference_123",
"BusinessParentId": 123,
"AccountType": "business",
"PrimaryExternalWalletId": "external_reference_123",
"SelectedTierId": 123,
"TierBillingCycle": "string",
"OnboardingProductPreference": "external_reference_123"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}409ConflictErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/users/{userId}Get user by IDRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123200OKUserDetailResponseV2
{
"Phone": "+447700900123",
"DateOfBirth": "2026-08-05",
"Address": "string",
"City": "London",
"State": "string",
"Country": "GB",
"ZipCode": "SW1A 1AA",
"KycProvider": "string",
"KycVerificationId": "string",
"KycVerificationDate": "2026-08-05",
"KycRejectionReason": "string",
"KycCompletedAt": "2026-08-05T09:30:00Z",
"SumsubTokenForTransak": "USDC",
"LastKycSubmissionId": 123,
"LastKycSumsubUserId": "string",
"LastKycProviderStatus": "PENDING",
"LastKycProviderApplicationId": "string",
"ReferralId": "string",
"Id": 123,
"ExternalUserId": "external_reference_123",
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Status": "PENDING",
"KycStatus": "SUBMITTED",
"KycLevel": "HOPPA_PRODUCTION",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompanyId": 123,
"PackageId": 123,
"BusinessName": "string",
"BusinessExternalId": "external_reference_123"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/users/{userId}Update user informationRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/users/123' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"ExternalUserId": "external_reference_123",
"FirstName": "Jane",
"LastName": "Doe",
"Phone": "+447700900123",
"Metadata": {}
}'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"ExternalUserId": "external_reference_123",
"FirstName": "Jane",
"LastName": "Doe",
"Phone": "+447700900123",
"Metadata": {}
}200OKUserResponseV2
{
"Id": 123,
"ExternalUserId": "external_reference_123",
"Email": "user@example.com",
"FirstName": "Jane",
"LastName": "Doe",
"Status": "PENDING",
"KycStatus": "SUBMITTED",
"KycLevel": "HOPPA_PRODUCTION",
"CreatedAt": "2026-08-05T09:30:00Z",
"UpdatedAt": "2026-08-05T09:30:00Z",
"CompanyId": 123,
"PackageId": 123,
"BusinessName": "string",
"BusinessExternalId": "external_reference_123",
"BusinessParentId": 123,
"AccountType": "business",
"PrimaryExternalWalletId": "external_reference_123",
"SelectedTierId": 123,
"TierBillingCycle": "string",
"OnboardingProductPreference": "external_reference_123"
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/users/occupation-codesGet complete list of occupation codesRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users/occupation-codes' \
-H 'x-api-key: YOUR_API_KEY'200OKapplication/json
[
{
"Value": "string",
"Title": "string",
"MajorGroup": "string",
"MinorGroup": "string"
}
]500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/users/{userId}/kyc/verifyVerify and update user KYC information with comprehensive verification dataRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/users/123/kyc/verify' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"KycStatus": "SUBMITTED",
"KycLevel": "HOPPA_PRODUCTION",
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"DocumentIssueDate": "2026-08-05",
"VerificationId": "string",
"KycProvider": "string",
"FirstName": "Jane",
"LastName": "Doe",
"DateOfBirth": "2026-08-05",
"Gender": "string",
"Nationality": "string",
"Email": "user@example.com",
"PhoneNumber": "+447700900123",
"IpAddress": "string",
"EqualsMainPurpose": [
"SALARY_OR_INCOME"
],
"EqualsSourceOfFunds": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
],
"EqualsCurrenciesRequired": [
"AED"
],
"EqualsDestinationCountries": [
"AD"
],
"EqualsExpectedAnnualVolume": "0-10000",
"EqualsExpectedPayments": "FEWER-THAN-5",
"NationalId": "string",
"DocumentType": "string",
"DocumentNumber": "string",
"DocumentExpiryDate": "2026-08-05",
"DocumentIssuingCountry": "GB",
"DocumentIssuingAuthority": "string",
"DocumentIssuedAt": "string",
"DocumentFrontImage": "BASE64_ENCODED_DATA",
"DocumentBackImage": "BASE64_ENCODED_DATA"
}'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"KycStatus": "SUBMITTED",
"KycLevel": "HOPPA_PRODUCTION",
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"DocumentIssueDate": "2026-08-05",
"VerificationId": "string",
"KycProvider": "string",
"FirstName": "Jane",
"LastName": "Doe",
"DateOfBirth": "2026-08-05",
"Gender": "string",
"Nationality": "string",
"Email": "user@example.com",
"PhoneNumber": "+447700900123",
"IpAddress": "string",
"EqualsMainPurpose": [
"SALARY_OR_INCOME"
],
"EqualsSourceOfFunds": [
"RECEIVING_FUNDS_FROM_OWN_ACCOUNTS"
],
"EqualsCurrenciesRequired": [
"AED"
],
"EqualsDestinationCountries": [
"AD"
],
"EqualsExpectedAnnualVolume": "0-10000",
"EqualsExpectedPayments": "FEWER-THAN-5",
"NationalId": "string",
"DocumentType": "string",
"DocumentNumber": "string",
"DocumentExpiryDate": "2026-08-05",
"DocumentIssuingCountry": "GB",
"DocumentIssuingAuthority": "string",
"DocumentIssuedAt": "string",
"DocumentFrontImage": "BASE64_ENCODED_DATA",
"DocumentBackImage": "BASE64_ENCODED_DATA"
}200OKUserKycVerificationResponseV2
{
"Success": true,
"Message": "string",
"User": {
"Id": 123,
"KycStatus": "SUBMITTED",
"KycLevel": "HOPPA_PRODUCTION",
"KycProvider": "string",
"VerificationId": "string",
"FirstName": "Jane",
"LastName": "Doe",
"Email": "user@example.com",
"PhoneNumber": "+447700900123",
"DateOfBirth": "2026-08-05",
"Nationality": "string",
"DocumentType": "string",
"DocumentNumber": "string",
"AddressLine1": "string",
"AddressLine2": "string",
"City": "London",
"Region": "string",
"Country": "GB",
"PostalCode": "SW1A 1AA",
"RejectionReason": "string",
"ReviewNotes": "string",
"VerifiedAt": "string",
"UpdatedAt": "2026-08-05T09:30:00Z"
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/users/{userId}/crypto-addressesGet user crypto wallet addresses. Passing `userId = 0` returns master account addresses for the authenticated company.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users/123/crypto-addresses' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123200OKUserCryptoAddressListResponseV2
{
"UserId": 123,
"Addresses": [
{
"Address": "string",
"Currency": "USD",
"Chain": "string",
"Tag": "string",
"Network": "string",
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z"
}
],
"CryptoAddresses": [
{
"Address": "string",
"Currency": "USD",
"Chain": "string",
"Tag": "string",
"Network": "string",
"IsActive": true,
"CreatedAt": "2026-08-05T09:30:00Z"
}
]
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/users/{userId}/assetsGet user assets (balances). Passing `userId = 0` returns master account balances for the authenticated company.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users/123/assets?interlaceAccountId=123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123interlaceAccountIdquerystringoptionalExample: 123200OKUserAssetsResponseV2
{
"UserId": 123,
"Assets": [
{
"Id": 123,
"Currency": "USD",
"Balance": "100.00",
"AvailableBalance": "100.00",
"FrozenBalance": "100.00",
"PendingBalance": "100.00",
"Network": "string",
"AssetType": "string",
"BalanceType": "100.00",
"BalanceId": "100.00",
"CreatedAt": "2026-08-05T09:30:00Z"
}
],
"RetrievedAt": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
PUT/api/v2/users/{userId}/kyc/sumsub-tokenUpdate user SumSub KYC tokenRequest & responses +
curl --request PUT 'https://staging.hoppa.global/api/v2/users/123/kyc/sumsub-token' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"SumsubSdkToken": "USDC",
"DocumentIssueDate": "2026-08-05",
"ExpiryDate": "2026-08-05",
"PhoneCountryCode": "+447700900123",
"Phone": "+447700900123",
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"FirstName": "Jane",
"LastName": "Doe",
"MiddleName": "string",
"Dob": "2026-08-05",
"Gender": "string",
"Nationality": "string",
"Country": "GB",
"PlaceOfBirth": "string",
"CountryOfBirth": "GB",
"Email": "user@example.com",
"NationalId": "string",
"IdType": "string",
"Ssn": "string",
"IpAddress": "string",
"Street": "string",
"Street2": "string",
"City": "London",
"State": "string",
"PostCode": "SW1A 1AA",
"AddressCountry": "GB"
}'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"SumsubSdkToken": "USDC",
"DocumentIssueDate": "2026-08-05",
"ExpiryDate": "2026-08-05",
"PhoneCountryCode": "+447700900123",
"Phone": "+447700900123",
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"FirstName": "Jane",
"LastName": "Doe",
"MiddleName": "string",
"Dob": "2026-08-05",
"Gender": "string",
"Nationality": "string",
"Country": "GB",
"PlaceOfBirth": "string",
"CountryOfBirth": "GB",
"Email": "user@example.com",
"NationalId": "string",
"IdType": "string",
"Ssn": "string",
"IpAddress": "string",
"Street": "string",
"Street2": "string",
"City": "London",
"State": "string",
"PostCode": "SW1A 1AA",
"AddressCountry": "GB"
}200OKUserKycSumSubTokenUpdateResponse
{
"UserId": 123,
"SumsubSdkToken": "USDC",
"Message": "string",
"Success": true,
"SumsubUserId": "string",
"UpdatedAt": "2026-08-05T09:30:00Z"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/users/{userId}/kyc/sumsub-access-tokenGet a SumSub access token for the user (for mobile SDK)Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/users/123/kyc/sumsub-access-token' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"DocumentIssueDate": "2026-08-05",
"IpAddress": "string"
}'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"DocumentIssueDate": "2026-08-05",
"IpAddress": "string"
}200OKSumSubAccessTokenApiResponseV2
{
"Success": true,
"Token": "USDC",
"UserId": "string",
"Error": {}
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/users/{userId}/kyc/detailed-statusGet detailed KYC status breakdown for the userRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users/123/kyc/detailed-status' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123200OKDetailedKycStatusResponseV2
{
"HoppaCardKycApproved": true,
"BankKycApproved": true,
"CardIssuerKycApproved": true,
"Interlace": {
"Provider": "string",
"Status": "PENDING",
"Approved": true,
"ExternalId": "external_reference_123",
"LastUpdated": "2026-08-05T09:30:00Z"
},
"EqualsMoney": {
"ApplicationId": "string",
"ApplicationStatus": "PENDING",
"AccountId": "string",
"RequiredAction": "string",
"ActionUrl": "https://example.com/callback",
"additionalDocumentsRequested": [
{
"type": "string",
"text": "string",
"expectedResponseType": "string",
"applicationId": "string",
"informationRequestId": "string",
"additionalInformation": "string",
"associatedPersonId": "string",
"requestedAt": "2026-08-05T09:30:00Z"
}
],
"Provider": "string",
"Status": "PENDING",
"Approved": true,
"ExternalId": "external_reference_123",
"LastUpdated": "2026-08-05T09:30:00Z"
}
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/users/{userId}/kyc/equalsmoney/documentsUpload an additional document requested by EqualsMoney for a user. Requires company API key authentication.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/users/123/kyc/equalsmoney/documents' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'File=@/absolute/path/document.pdf' \
-F 'Type=string' \
-F 'AssociatedPersonId=string'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"File": "<binary file>",
"Type": "string",
"AssociatedPersonId": "string"
}200OKEqualsMoneyAdditionalDocumentUploadResponseV2
{
"Success": true,
"DocumentId": "string",
"Type": "string",
"FileName": "string",
"RemainingAdditionalDocumentsRequested": [
{
"type": "string",
"text": "string",
"expectedResponseType": "string",
"applicationId": "string",
"informationRequestId": "string",
"additionalInformation": "string",
"associatedPersonId": "string",
"requestedAt": "2026-08-05T09:30:00Z"
}
]
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/users/check-referralCheck if a referral code is valid for a companyRequest & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users/check-referral?referralCode=example' \
-H 'x-api-key: YOUR_API_KEY'Parameters
referralCodequerystringoptionalExample: example200OKReferralCheckResponse
{
"Valid": true,
"TierId": 123
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/users/{userId}/walletsList crypto wallets for a user. Passing `userId = 0` returns master account wallets for the authenticated company.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/users/123/wallets?id=123&nickname=example¤cy=USD&master=true&referenceId=external_reference_123&limit=10' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123idquerystringoptionalExample: 123nicknamequerystringoptionalExample: examplecurrencyquerystringoptionalExample: USDmasterquerybooleanoptionalExample: truereferenceIdquerystringoptionalExample: external_reference_123limitqueryintegeroptionalExample: 10pagequeryintegeroptionalExample: 1200OKCryptoConnectWalletsV3Response
{
"code": "string",
"message": "string",
"data": {
"total": "string",
"list": [
{
"id": "string",
"accountId": "string",
"nickname": "string",
"master": true,
"referenceId": "external_reference_123",
"balances": [
{}
],
"addresses": [
{}
]
}
]
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/users/create-interlace-account/{userId}Create an Interlace account for the authenticated userRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/users/create-interlace-account/123' \
-H 'x-api-key: YOUR_API_KEY'Parameters
userIdpathintegerrequiredExample: 123200OKCreateInterlaceAccountResponse
{
"Success": true,
"InterlaceAccountId": "string",
"ExternalUserId": "external_reference_123",
"Message": "string",
"CreatedAt": "2026-08-05T09:30:00Z",
"AccountAlreadyExists": true,
"ErrorCode": "string",
"ErrorMessage": "string"
}400Bad RequestProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}401UnauthorizedProblemDetails
{
"type": "string",
"title": "string",
"status": 1,
"detail": "string",
"instance": "string"
}500Internal Server Errorapplication/json
{}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/users/{userId}/sumsub/kyc-urlGenerate SumSub KYC verification URL for userRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/users/123/sumsub/kyc-url' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"DocumentIssueDate": "2026-08-05",
"IpAddress": "string"
}'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"Occupation": "string",
"AnnualSalary": "0-10000",
"AccountPurpose": "Example description",
"ExpectedMonthlyVolume": "0-1000",
"DocumentIssueDate": "2026-08-05",
"IpAddress": "string"
}200Returns the SumSub access tokenSumSubKycUrlResponse
{
"Success": true,
"ErrorCode": "string",
"ErrorMessage": "string",
"AccessToken": "USDC",
"ApplicantId": "string",
"ExternalUserId": "external_reference_123",
"KycSubmissionId": 123,
"Status": "PENDING",
"ExistingStatus": "PENDING",
"ExpiresAt": "2026-08-05T09:30:00Z",
"CreatedAt": "2026-08-05T09:30:00Z",
"CompletedAt": "2026-08-05T09:30:00Z",
"IsNewApplicant": true,
"Message": "string",
"Configuration": {
"LevelName": "string",
"TokenValidityHours": 1,
"Provider": "string",
"IsTestMode": true,
"SdkVersion": "string",
"RequiredDocuments": [
"string"
]
}
}400Invalid request or KYC already completedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401User not authenticatedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}403User does not belong to the companyErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404User not foundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal server errorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/users/{userId}/tierSet user tier and queue the first subscription fee for scheduled fee chargingRequest & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/users/123/tier' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"TierId": 123,
"TierCycle": "string"
}'Parameters
userIdpathintegerrequiredExample: 123Example request body
{
"TierId": 123,
"TierCycle": "string"
}200OKTierBuyResponse
{
"Success": true,
"UserId": 123,
"TierId": 123,
"TierName": "string",
"TierLevel": "string",
"OrderId": "string",
"TotalCost": 100,
"Currency": "USD",
"Status": "PENDING",
"PurchasedAt": "2026-08-05T09:30:00Z",
"ActivatedAt": "2026-08-05T09:30:00Z",
"ExpiresAt": "2026-08-05T09:30:00Z",
"UpgradeDetails": {
"PreviousTierName": "string",
"PreviousTierLevel": "string",
"NewTierName": "string",
"NewTierLevel": "string",
"IsUpgrade": true,
"IsDowngrade": true,
"IsRenewal": true,
"ChangedFeatures": [
"string"
],
"AddedFeatures": [
"string"
],
"RemovedFeatures": [
"string"
]
},
"PaymentDetails": {
"PaymentMethod": "string",
"WalletAddress": "0x1111111111111111111111111111111111111111",
"TransactionId": "string",
"AmountPaid": 100,
"Amount": 100,
"Currency": "USD",
"PaymentDate": "2026-08-05T09:30:00Z",
"ProcessedAt": "2026-08-05T09:30:00Z",
"PaymentStatus": "PENDING",
"Status": "PENDING",
"FailureReason": "string"
},
"NewBenefits": {
"MaxCards": 1,
"DailySpendLimit": 100,
"MonthlySpendLimit": 100,
"DailyWithdrawLimit": 100,
"MonthlyWithdrawLimit": 100,
"VirtualCards": true,
"PhysicalCards": true,
"InternationalUsage": true,
"PremiumSupport": true,
"CashbackPercentage": 100,
"SupportedCurrencies": [
"string"
],
"AvailableCardTypes": [
{
"Id": 123,
"Name": "string",
"Type": "string",
"Price": 100,
"IsVirtual": true,
"IsPhysical": true,
"IsActive": true,
"MonthlyFee": 100,
"YearlyFee": 100,
"BankProviderType": 1,
"CustomerPaysForProduction": true,
"CustomerPaysForShippment": true
}
]
},
"ErrorCode": "string",
"ErrorMessage": "string",
"Message": "string",
"Audit": {
"RequestedBy": "string",
"RequestedAt": "2026-08-05T09:30:00Z",
"RequestSource": "string",
"IPAddress": "string",
"UserAgent": "string",
"IsSecureConnection": true,
"AuthenticationMethod": "string",
"AdditionalNotes": "string"
},
"PurchaseId": "00000000-0000-4000-8000-000000000123",
"PurchaseExpiresAt": "2026-08-05T09:30:00Z",
"StripePayment": {
"PublishableKey": "string",
"ClientSecret": "string",
"PaymentIntentId": "string"
}
}400Bad RequestErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}401UnauthorizedErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}404Not FoundErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}500Internal Server ErrorErrorResponse
{
"Message": "string",
"Code": "string",
"Status": 1,
"ValidationErrors": {},
"Details": "string"
}Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Webhooks64 operations
POST/webhooks/outbound/user.registereduser.registeredRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a user is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/user.registered' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "user.registered",
"domain": "user",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"email": "user@example.com"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "user.registered",
"domain": "user",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"email": "user@example.com"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/user.kyc.updateduser.kyc.updatedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a user's KYC status changes during verification submission or provider processing. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/user.kyc.updated' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "user.kyc.updated",
"domain": "user",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "pending"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "user.kyc.updated",
"domain": "user",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "pending"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/kyc.verifiedkyc.verifiedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Interlace or SumSub KYC review is processed. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/kyc.verified' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.verified",
"domain": "kyc",
"provider": "sumsub",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"kycLevel": "hoppacard-stagging",
"status": "approved"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.verified",
"domain": "kyc",
"provider": "sumsub",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"kycLevel": "hoppacard-stagging",
"status": "approved"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/kyc.interlace_submission_failedkyc.interlace_submission_failedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when SumSub approval could not be submitted to Interlace. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/kyc.interlace_submission_failed' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.interlace_submission_failed",
"domain": "kyc",
"provider": "interlace",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"error": "Interlace submission failed",
"accountId": "acc_123",
"applicantId": "applicant_123"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.interlace_submission_failed",
"domain": "kyc",
"provider": "interlace",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"error": "Interlace submission failed",
"accountId": "acc_123",
"applicantId": "applicant_123"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/legal_entity.statuslegal_entity.statusRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a business legal entity status changes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/legal_entity.status' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "legal_entity.status",
"domain": "kyc",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"entityId": "le_123",
"status": "approved",
"type": "BUSINESS"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "legal_entity.status",
"domain": "kyc",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"entityId": "le_123",
"status": "approved",
"type": "BUSINESS"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/bank_account.statusbank_account.statusRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a business bank account status changes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/bank_account.status' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "bank_account.status",
"domain": "account",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"bankAccountId": "ba_123",
"iban": "GB00HOPP00000000000000",
"currency": "GBP",
"status": "active"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "bank_account.status",
"domain": "account",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"bankAccountId": "ba_123",
"iban": "GB00HOPP00000000000000",
"currency": "GBP",
"status": "active"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/account.deposit.addressaccount.deposit.addressRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when deposit addresses are created for a user's account. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/account.deposit.address' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.deposit.address",
"domain": "account",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "created"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.deposit.address",
"domain": "account",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "created"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/account.createdaccount.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money account is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/account.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.created",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountCreated",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PENDING",
"type": "INDIVIDUAL"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.created",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountCreated",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PENDING",
"type": "INDIVIDUAL"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/account.activatedaccount.activatedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money account is activated. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/account.activated' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.activated",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountActivated",
"id": "acc_eq_123",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"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"
}
]
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.activated",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountActivated",
"id": "acc_eq_123",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"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"
}
]
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/account.status_updatedaccount.status_updatedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money account status changes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/account.status_updated' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.status_updated",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountStatusUpdated",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "SUSPENDED",
"type": "INDIVIDUAL"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.status_updated",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountStatusUpdated",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "SUSPENDED",
"type": "INDIVIDUAL"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.completedpayment.completedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a payment completes successfully. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.completed' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.completed",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentId": 987,
"amount": 25.5,
"currency": "EUR"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.completed",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentId": 987,
"amount": 25.5,
"currency": "EUR"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.mandate.createdpayment.mandate.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a payment mandate is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.mandate.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.mandate.created",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentMandateId": 456,
"maxAmount": 250,
"currency": "EUR",
"frequency": "monthly"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.mandate.created",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentMandateId": 456,
"maxAmount": 250,
"currency": "EUR",
"frequency": "monthly"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.mandate.cancelledpayment.mandate.cancelledRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a payment mandate is cancelled. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.mandate.cancelled' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.mandate.cancelled",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentMandateId": 456
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.mandate.cancelled",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentMandateId": 456
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.request.createdpayment.request.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a payment request is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.request.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.created",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"amount": 19.99,
"currency": "EUR"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.created",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"amount": 19.99,
"currency": "EUR"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.request.cancelledpayment.request.cancelledRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a payment request is cancelled. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.request.cancelled' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.cancelled",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"amount": 19.99,
"currency": "EUR"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.cancelled",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"amount": 19.99,
"currency": "EUR"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.request.confirmed.directpayment.request.confirmed.directRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a payment request is confirmed by direct payment. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.request.confirmed.direct' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.confirmed.direct",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"paymentMandateId": 456,
"amount": 19.99,
"currency": "EUR",
"transferId": "tr_123"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.confirmed.direct",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"paymentMandateId": 456,
"amount": 19.99,
"currency": "EUR",
"transferId": "tr_123"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.request.confirmed.with.exchangepayment.request.confirmed.with.exchangeRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent after a payment request is confirmed using crypto exchange. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.request.confirmed.with.exchange' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.confirmed.with.exchange",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"paymentMandateId": 456,
"amount": 19.99,
"currency": "EUR",
"transferId": "tr_123"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.confirmed.with.exchange",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"paymentMandateId": 456,
"amount": 19.99,
"currency": "EUR",
"transferId": "tr_123"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/order.completedorder.completedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment order completes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/order.completed' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.completed",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"orderId": "order_123",
"accountId": "account_123"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.completed",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"orderId": "order_123",
"accountId": "account_123"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/order.createdorder.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money FX order is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/order.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.created",
"domain": "order",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "OrderCreated",
"orderId": "order_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CREATED",
"buyCurrency": "EUR",
"sellCurrency": "GBP",
"buyAmount": 1000,
"sellAmount": 850,
"rate": 0.85,
"payments": [
{
"settlementDate": "2026-04-29 00:00:00 UTC",
"rate": 0.85,
"inverseRate": 1.1765,
"internalReference": "INT-123",
"externalReference": "EXT-123",
"from": {
"amount": 850,
"currency": "GBP"
},
"to": {
"amount": 1000,
"currency": "EUR"
},
"recipient": {
"id": "recipient_123",
"name": "Example Supplier Ltd"
}
}
]
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.created",
"domain": "order",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "OrderCreated",
"orderId": "order_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CREATED",
"buyCurrency": "EUR",
"sellCurrency": "GBP",
"buyAmount": 1000,
"sellAmount": 850,
"rate": 0.85,
"payments": [
{
"settlementDate": "2026-04-29 00:00:00 UTC",
"rate": 0.85,
"inverseRate": 1.1765,
"internalReference": "INT-123",
"externalReference": "EXT-123",
"from": {
"amount": 850,
"currency": "GBP"
},
"to": {
"amount": 1000,
"currency": "EUR"
},
"recipient": {
"id": "recipient_123",
"name": "Example Supplier Ltd"
}
}
]
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/order.cancelledorder.cancelledRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money FX order is cancelled. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/order.cancelled' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.cancelled",
"domain": "order",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "OrderCancelled",
"orderId": "order_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CANCELLED"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.cancelled",
"domain": "order",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "OrderCancelled",
"orderId": "order_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CANCELLED"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payout.paymentpayout.paymentRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a business payout payment update is processed. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payout.payment' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payout.payment",
"domain": "payout",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"accountId": 321,
"amount": 100,
"currency": "EUR",
"status": "completed",
"transferId": "transfer_123",
"type": "PAYOUT.PAYMENT"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payout.payment",
"domain": "payout",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"accountId": 321,
"amount": 100,
"currency": "EUR",
"status": "completed",
"transferId": "transfer_123",
"type": "PAYOUT.PAYMENT"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/business_account.transactionbusiness_account.transactionRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a business account transaction is processed. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/business_account.transaction' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "business_account.transaction",
"domain": "business_account",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"accountId": 321,
"transactionType": "payout_payment",
"amount": 100,
"currency": "EUR",
"status": "completed",
"fee": 1.25
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "business_account.transaction",
"domain": "business_account",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"accountId": 321,
"transactionType": "payout_payment",
"amount": 100,
"currency": "EUR",
"status": "completed",
"fee": 1.25
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/wallet.topped_upwallet.topped_upRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a wallet, budget, or card funding transaction credits value. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/wallet.topped_up' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.topped_up",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1001",
"walletId": "wallet_123",
"userId": "12345",
"amount": "100.00",
"currency": "EUR",
"status": "completed",
"provider": "hoppacard"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.topped_up",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1001",
"walletId": "wallet_123",
"userId": "12345",
"amount": "100.00",
"currency": "EUR",
"status": "completed",
"provider": "hoppacard"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/wallet.withdrawalwallet.withdrawalRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a wallet withdrawal or debit transaction is processed. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/wallet.withdrawal' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.withdrawal",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1002",
"walletId": "wallet_123",
"userId": "12345",
"amount": "50.00",
"currency": "EUR",
"status": "completed",
"provider": "hoppacard"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.withdrawal",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1002",
"walletId": "wallet_123",
"userId": "12345",
"amount": "50.00",
"currency": "EUR",
"status": "completed",
"provider": "hoppacard"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/wallet.refundwallet.refundRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a crypto refund is processed. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/wallet.refund' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.refund",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1001",
"userId": "12345",
"amount": "10.00",
"currency": "USDT",
"chain": "TRON",
"address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"status": "completed",
"transferId": "transfer_123",
"transactionHash": "0x1234567890abcdef",
"provider": "hoppacard"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.refund",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1001",
"userId": "12345",
"amount": "10.00",
"currency": "USDT",
"chain": "TRON",
"address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"status": "completed",
"transferId": "transfer_123",
"transactionHash": "0x1234567890abcdef",
"provider": "hoppacard"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/budget.createdbudget.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a budget is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/budget.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.created",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"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"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.created",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"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"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/budget.updatedbudget.updatedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a budget is updated. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/budget.updated' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.updated",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"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"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.updated",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"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"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/budget.deletedbudget.deletedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a budget is deleted. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/budget.deleted' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.deleted",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"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"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.deleted",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"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"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/budget.transaction.closedbudget.transaction.closedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a budget transaction is closed. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/budget.transaction.closed' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.transaction.closed",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1001",
"userId": "12345",
"budgetId": "budget_123",
"amount": "15.00",
"currency": "EUR",
"status": "closed",
"type": "DEBIT"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.transaction.closed",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": "1001",
"userId": "12345",
"budgetId": "budget_123",
"amount": "15.00",
"currency": "EUR",
"status": "closed",
"type": "DEBIT"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/budget.creditedbudget.creditedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money budget receives funds. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/budget.credited' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.credited",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"budgetId": "budget_123",
"amount": 75,
"currency": "EUR",
"source": "BANK_TRANSFER",
"reference": "Invoice 123",
"remitterName": "Example Ltd"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.credited",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"budgetId": "budget_123",
"amount": 75,
"currency": "EUR",
"source": "BANK_TRANSFER",
"reference": "Invoice 123",
"remitterName": "Example Ltd"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/budget.debitedbudget.debitedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money budget is debited. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/budget.debited' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.debited",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1002,
"externalTransactionId": "ext_tx_456",
"userId": 12345,
"budgetId": "budget_123",
"amount": 25,
"currency": "EUR",
"source": "CARD_PAYMENT"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.debited",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1002,
"externalTransactionId": "ext_tx_456",
"userId": 12345,
"budgetId": "budget_123",
"amount": 25,
"currency": "EUR",
"source": "CARD_PAYMENT"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/budget.credit_pendingbudget.credit_pendingRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money budget credit is pending settlement. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/budget.credit_pending' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.credit_pending",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "BoxCreditPending",
"budgetId": "budget_123",
"budgetName": "Operations Budget",
"settlementPriceAmount": 1200,
"settlementPriceCurrency": "GBP",
"valueDateTime": "2026-04-29 00:00:00 UTC"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.credit_pending",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "BoxCreditPending",
"budgetId": "budget_123",
"budgetName": "Operations Budget",
"settlementPriceAmount": 1200,
"settlementPriceCurrency": "GBP",
"valueDateTime": "2026-04-29 00:00:00 UTC"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.createdcard.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a card is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.created",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"cardNumber": "****-****-****-4242",
"lastFour": "4242",
"status": "active",
"currency": "EUR"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.created",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"cardNumber": "****-****-****-4242",
"lastFour": "4242",
"status": "active",
"currency": "EUR"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.activatedcard.activatedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a card is activated. Virtual cards may emit this immediately after creation. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.activated' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.activated",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.activated",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.updatedcard.updatedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a card status changes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.updated' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.updated",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"previousStatus": "PENDING",
"newStatus": "ACTIVE",
"lastFour": "4242"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.updated",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"previousStatus": "PENDING",
"newStatus": "ACTIVE",
"lastFour": "4242"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.deletedcard.deletedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a card is deleted or cancelled. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.deleted' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.deleted",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"previousStatus": "ACTIVE",
"newStatus": "CANCELLED"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.deleted",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"previousStatus": "ACTIVE",
"newStatus": "CANCELLED"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.shippedcard.shippedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a physical card is shipped. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.shipped' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.shipped",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"trackingNumber": "TRACK123",
"shippingCarrier": "DHL",
"shippedAt": "2026-04-28 10:15:30 UTC"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.shipped",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"trackingNumber": "TRACK123",
"shippingCarrier": "DHL",
"shippedAt": "2026-04-28 10:15:30 UTC"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.transactioncard.transactionRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent for card purchases, refunds, reversals, fee transactions, freezes, and unfreezes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.transaction' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.transaction",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_payment",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28 10:15:30 UTC",
"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"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.transaction",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_payment",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28 10:15:30 UTC",
"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"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.topupcard.topupRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when value is loaded onto a card. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.topup' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.topup",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_topup",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28 10:15:30 UTC",
"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"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.topup",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_topup",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28 10:15:30 UTC",
"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"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.unloadcard.unloadRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when value is unloaded from a card. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.unload' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.unload",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_unload",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28 10:15:30 UTC",
"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"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.unload",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_unload",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28 10:15:30 UTC",
"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"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.state_updatedcard.state_updatedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money card state changes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.state_updated' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.state_updated",
"domain": "card",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"cardId": 555,
"externalCardId": "card_ext_123",
"userId": 12345,
"previousState": "ACTIVE",
"currentState": "SUSPENDED",
"status": "blocked"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.state_updated",
"domain": "card",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"cardId": 555,
"externalCardId": "card_ext_123",
"userId": 12345,
"previousState": "ACTIVE",
"currentState": "SUSPENDED",
"status": "blocked"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.3ds.otpcard.3ds.otpRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a card 3DS OTP is received from Interlace. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.3ds.otp' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.3ds.otp",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"externalCardId": "card_ext_123",
"otp": "123456",
"expiresAt": "2026-04-28 10:20:30 UTC"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.3ds.otp",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"externalCardId": "card_ext_123",
"otp": "123456",
"expiresAt": "2026-04-28 10:20:30 UTC"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/card.3ds_auth_requestcard.3ds_auth_requestRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money card 3DS authentication request requires OTP handling. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/card.3ds_auth_request' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.3ds_auth_request",
"domain": "card",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"externalCardId": "card_ext_123",
"merchantName": "Example Merchant",
"amount": 42.5,
"currency": "EUR",
"transactionId": "txn_123",
"otp": "123456"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.3ds_auth_request",
"domain": "card",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardId": 555,
"externalCardId": "card_ext_123",
"merchantName": "Example Merchant",
"amount": 42.5,
"currency": "EUR",
"transactionId": "txn_123",
"otp": "123456"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/digitalwallet.token_transitiondigitalwallet.token_transitionRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money digital wallet token changes state. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/digitalwallet.token_transition' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "digitalwallet.token_transition",
"domain": "digitalwallet",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "DigitalWalletTokenTransition",
"cardId": "card_ext_123",
"tokenId": "token_123",
"walletType": "APPLE_PAY",
"eventTime": "2026-04-28 10:15:30 UTC",
"previousState": "INACTIVE",
"currentState": "ACTIVE"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "digitalwallet.token_transition",
"domain": "digitalwallet",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "DigitalWalletTokenTransition",
"cardId": "card_ext_123",
"tokenId": "token_123",
"walletType": "APPLE_PAY",
"eventTime": "2026-04-28 10:15:30 UTC",
"previousState": "INACTIVE",
"currentState": "ACTIVE"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/cardholder.statuscardholder.statusRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent whenever a cardholder status update is processed. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/cardholder.status' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.status",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "Active"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.status",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "Active"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/cardholder.createdcardholder.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a cardholder is created by the banking provider. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/cardholder.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.created",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "Active",
"cardholderId": "cardholder_123"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.created",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "Active",
"cardholderId": "cardholder_123"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/cardholder.approvedcardholder.approvedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a cardholder is approved by the banking provider. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/cardholder.approved' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.approved",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "Active"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.approved",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"status": "Active"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/cardholder.deletedcardholder.deletedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when a cardholder is deleted by the banking provider. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/cardholder.deleted' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.deleted",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardholderId": "cardholder_123"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.deleted",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"userId": 12345,
"cardholderId": "cardholder_123"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/person.createdperson.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money associated person is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/person.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "person.created",
"domain": "person",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PersonCreated",
"personId": "person_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "person.created",
"domain": "person",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PersonCreated",
"personId": "person_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/kyc.updatekyc.updateRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when Equals Money updates a user's KYC review status. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/kyc.update' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.update",
"domain": "kyc",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "KycUpdate",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PENDING_DOCUMENTS",
"personId": "person_123",
"requiredAction": "upload_bank_statement",
"actionUrl": "https://app.equalsmoney.com/kyc/upload"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.update",
"domain": "kyc",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "KycUpdate",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PENDING_DOCUMENTS",
"personId": "person_123",
"requiredAction": "upload_bank_statement",
"actionUrl": "https://app.equalsmoney.com/kyc/upload"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/kyc.information_requestkyc.information_requestRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when Equals Money requests additional KYC documents. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/kyc.information_request' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.information_request",
"domain": "kyc",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "KycInformationRequest",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"requiredDocuments": [
"proof_of_address",
"source_of_funds"
]
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.information_request",
"domain": "kyc",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "KycInformationRequest",
"correlationId": "corr_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"requiredDocuments": [
"proof_of_address",
"source_of_funds"
]
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/recipient.createdrecipient.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money recipient is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/recipient.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "recipient.created",
"domain": "recipient",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "RecipientCreated",
"recipientId": "recipient_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"name": "Example Supplier Ltd"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "recipient.created",
"domain": "recipient",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "RecipientCreated",
"recipientId": "recipient_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"name": "Example Supplier Ltd"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/recipient.deletedrecipient.deletedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money recipient is deleted. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/recipient.deleted' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "recipient.deleted",
"domain": "recipient",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "RecipientDeleted",
"recipientId": "recipient_123",
"eventTime": "2026-04-28 10:15:30 UTC"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "recipient.deleted",
"domain": "recipient",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "RecipientDeleted",
"recipientId": "recipient_123",
"eventTime": "2026-04-28 10:15:30 UTC"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.createdpayment.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.created",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentCreated",
"paymentId": "payment_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PROCESSING",
"amount": 250,
"currency": "GBP",
"recipientId": "recipient_123",
"reference": "Invoice 123"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.created",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentCreated",
"paymentId": "payment_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PROCESSING",
"amount": 250,
"currency": "GBP",
"recipientId": "recipient_123",
"reference": "Invoice 123"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/payment.returnedpayment.returnedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment is returned. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/payment.returned' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.returned",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentReturned",
"paymentId": "payment_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "RETURNED",
"returnReason": "Beneficiary account closed"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.returned",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentReturned",
"paymentId": "payment_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "RETURNED",
"returnReason": "Beneficiary account closed"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/fee.createdfee.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money fee is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/fee.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "fee.created",
"domain": "fee",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "FeeCreated",
"feeId": "fee_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"feeType": "payment_fee",
"amount": 2.5,
"currency": "GBP"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "fee.created",
"domain": "fee",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "FeeCreated",
"feeId": "fee_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"feeType": "payment_fee",
"amount": 2.5,
"currency": "GBP"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatch.createdpaymentbatch.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatch.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.created",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCreated",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CREATED",
"totalAmount": 1500,
"currency": "GBP",
"paymentCount": 3
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.created",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCreated",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CREATED",
"totalAmount": 1500,
"currency": "GBP",
"paymentCount": 3
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatch.cancelledpaymentbatch.cancelledRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch is cancelled. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatch.cancelled' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.cancelled",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCancelled",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CANCELLED"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.cancelled",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCancelled",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CANCELLED"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatch.validation_errorpaymentbatch.validation_errorRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch fails validation. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatch.validation_error' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.validation_error",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchValidationError",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"errors": [
"Recipient account number is invalid",
"Payment amount exceeds limit"
]
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.validation_error",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchValidationError",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"errors": [
"Recipient account number is invalid",
"Payment amount exceeds limit"
]
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatch.processingpaymentbatch.processingRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch enters processing. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatch.processing' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.processing",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchProcessing",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PROCESSING"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.processing",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchProcessing",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "PROCESSING"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatch.completedpaymentbatch.completedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch completes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatch.completed' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.completed",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCompleted",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "COMPLETED",
"successCount": 2,
"failureCount": 1
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.completed",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCompleted",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "COMPLETED",
"successCount": 2,
"failureCount": 1
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatchorder.createdpaymentbatchorder.createdRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch FX order is created. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatchorder.created' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.created",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCreated",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CREATED"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.created",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCreated",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CREATED"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatchorder.completedpaymentbatchorder.completedRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch FX order completes. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatchorder.completed' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.completed",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCompleted",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "COMPLETED"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.completed",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCompleted",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "COMPLETED"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/webhooks/outbound/paymentbatchorder.cancelledpaymentbatchorder.cancelledRequest & responses +
This operation documents an outbound webhook request that CryptoCard Platform sends to your configured webhook URL. Sent when an Equals Money payment batch FX order is cancelled. Configure the destination URL and webhook secret on the company configuration. We send an HTTP `POST` with `Content-Type: application/json` and `X-Hoppacard-Signature`. The signature is a lowercase hex HMAC-SHA256 digest of the exact request body, using your webhook secret as the key. Return any 2xx status code to acknowledge the webhook.
curl --request POST 'https://staging.hoppa.global/webhooks/outbound/paymentbatchorder.cancelled' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'X-Hoppacard-Signature: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6a' \
-H 'Content-Type: application/json' \
--data '{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.cancelled",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCancelled",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CANCELLED"
}
}'Parameters
X-Hoppacard-SignatureheaderstringrequiredExample: c1f6d6d2e8b9f1f13b0f7a2b8cc8d4f44aa50ef0997b0c0e86f8f4f6112e3c6aExample request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.cancelled",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28 10:15:30 UTC",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCancelled",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28 10:15:30 UTC",
"status": "CANCELLED"
}
}200Return any 2xx response to acknowledge receipt.No body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
WhitelabelTransactions3 operations
GET/api/v2/whitelabel/transactionsGet company transactions (user_id = 0 and company_id matches the user's company).Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/whitelabel/transactions?page=1&pageSize=20&status=PENDING&type=example&startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z' \
-H 'x-api-key: YOUR_API_KEY'Parameters
pagequeryintegeroptionalExample: 1pageSizequeryintegeroptionalExample: 20statusquerystringoptionalExample: PENDINGtypequerystringoptionalExample: examplestartDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00Z200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
POST/api/v2/whitelabel/transactions/syncSync transactions from Interlace for the whitelabel company's account. Creates transactions with user_id=0 and company_id set to the requesting user's company.Request & responses +
curl --request POST 'https://staging.hoppa.global/api/v2/whitelabel/transactions/sync' \
-H 'x-api-key: YOUR_API_KEY'200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
GET/api/v2/whitelabel/transactions/exportExport all transactions matching the filters (no pagination) for CSV export.Request & responses +
curl --request GET 'https://staging.hoppa.global/api/v2/whitelabel/transactions/export?status=PENDING&type=example&startDate=2026-08-05T09%3A30%3A00Z&endDate=2026-08-05T09%3A30%3A00Z' \
-H 'x-api-key: YOUR_API_KEY'Parameters
statusquerystringoptionalExample: PENDINGtypequerystringoptionalExample: examplestartDatequerystringoptionalExample: 2026-08-05T09:30:00ZendDatequerystringoptionalExample: 2026-08-05T09:30:00Z200OKNo body
No response body is defined for this status.Examples use safe placeholder values. Confirm required fields, enums and programme availability in the live Scalar schema before sending production traffic.
Make retries boring and safe.
Fix the request. Do not retry unchanged.
Fix credentials or company scope.
Confirm the resource belongs to this user and company.
Fetch current state; the operation may already exist.
Wait for Retry-After, then retry with jitter.
Retry only idempotent calls with exponential backoff.
Production readiness checklist
Open the live API reference.
Use this guide for the workflow and Scalar for the exact current schema and response model.
