What changed in the public API.
Compared all 410 operations in the published 2026-10-07 snapshot with all 448 operations in the deployed contract. 38 entries are new, 0 are absent, and 32 have updated operations or referenced schemas. This is a contract comparison; it does not prove live transactional behaviour or programme enablement.
Live API reference ↗ · Download the documentation OpenAPI subset
The current documentation scope displays 446 operations. Temporarily unpublished provider operations are omitted from the catalogue and downloadable subset; the upstream audit totals above remain historical.
28 October: unified app onboarding and Banking customer controls → (app implementation, separate from the public contract audit below).
Bring your integration up to date.
The guide and catalogue now use the current staging OpenAPI contract. Review these workflow changes when upgrading an existing integration.
Crypto Exchange verification and settlement accounts
Before funding or trading, read the user’s exchange verification state and follow the action it requests. The published contract now exposes application read/submit, session creation, business verification, business authorisation code delivery/confirmation, tax identification (TIN), enhanced due diligence (EDD), and provisioned settlement accounts. Send the company-owned userId in the query with company API-key requests. Application answers are a dictionary and UseSumsubAnswers is optional. Required nullable TIN/EDD fields must still be present: null and an omitted field are different. The request and response schemas now document the application draft, verification status and session URL. Use tier sdd or cdd for individuals, or kyb for business. To reuse approved SumSub answers, send Answers: {} with UseSumsubAnswers: true. Read provisioned addresses and bank details from settlement-accounts; submission alone does not establish approval.
GET /api/v2/crypto-virtual-accounts/verificationGET /api/v2/crypto-virtual-accounts/verification/applicationPOST /api/v2/crypto-virtual-accounts/verification/applicationPOST /api/v2/crypto-virtual-accounts/verification/sessionGET /api/v2/crypto-virtual-accounts/verification/businessPOST /api/v2/crypto-virtual-accounts/verification/businessPOST /api/v2/crypto-virtual-accounts/verification/business/authorisation/send-codePOST /api/v2/crypto-virtual-accounts/verification/business/authorisationPOST /api/v2/crypto-virtual-accounts/verification/tinPOST /api/v2/crypto-virtual-accounts/verification/eddGET /api/v2/crypto-virtual-accounts/verification/settlement-accounts
Explicit exchange funding, crypto payouts and fiat payouts
POST /api/v2/crypto-virtual-accounts/equals-to-interlace/fund is a separate explicit-destination contract: userId is in the query, and the JSON uses IdempotencyKey, SourceBudgetId, FiatCurrency, FiatAmount, CryptoCurrency, ChainId and DestinationAddress. Its IdempotencyKey must be 8–128 characters. The original Banking-to-Crypto cards route remains available with its original UserId, BudgetId and Amount fields; do not mix the two request shapes. Crypto payouts use payout-address with Amount, Ccy and WalletAddress plus the selected network. Fiat payouts use payout-fiat and can refer to an ExternalAccountId. Register crypto destinations through crypto-address-book using lowercase name, currency, chain_id and address. Quote requests also expose InterlaceDestinationAddress and BankWithdrawal.ExternalAccountId. Trading overview adds deposits, payments, restricted_trading_currencies and fiat_funding_fees_and_limits; read current limits before presenting actions. Funding now has a typed response contract. Payouts return provider-defined JSON; do not assume a transfer ID or settlement status field without checking the returned payload.
POST /api/v2/crypto-virtual-accounts/equals-to-interlace/fundPOST /api/v2/crypto-virtual-accounts/equals-to-interlacePOST /api/v2/crypto-virtual-accounts/payout-addressPOST /api/v2/crypto-virtual-accounts/payout-fiatPOST /api/v2/crypto-virtual-accounts/crypto-address-bookPOST /api/v2/crypto-virtual-accounts/exchange/quoteGET /api/v2/crypto-virtual-accounts/trading-overview
Business onboarding tier, assessment and payment workflow
The new /api/v2/business-onboarding workflow complements the existing /api/v2/business/onboarding KYB application and evidence routes. Read workflow state, choose a returned tier with TierId, and use the assessment and payment actions only when appropriate for that state. Company API-key callers must supply the target business userId in the query. Checkout takes a payment UUID and TermsAccepted; invoice retrieval uses the payment UUID. Workflow status, tier selection and checkout now have response schemas; assessment returns HTTP 202 with status ASSESSMENT_PENDING and invoices return PDF content. Do not invent response properties or infer completion from HTTP success; reconcile through the workflow read endpoint. The /api/v2/admin/business-onboarding routes are separately restricted by AdminAccess in the implementation; appearing in Scalar does not grant integration API keys administrator access.
GET /api/v2/business-onboardingPOST /api/v2/business-onboarding/tierPOST /api/v2/business-onboarding/assessPOST /api/v2/business-onboarding/payments/{paymentId}/checkoutGET /api/v2/business-onboarding/payments/{paymentId}/invoiceGET /api/v2/business/onboarding/options
MOR retry protection, pagination and response casing
The current published MOR contract now documents optional Idempotency-Key on POST mutations. Strongly prefer one stable key per company/business action; retries must preserve method, path, query, content type and body. Completed results replay the original status/body, including partial success and errors. A changed request produces IDEMPOTENCY_KEY_CONFLICT; an unresolved operation produces IDEMPOTENCY_OUTCOME_PENDING. Reconcile pending outcomes rather than changing keys. LabelPrefix is not deduplication. Cards/page provides bounded pages (default 25, maximum 100) with stored balances. Success and business-error properties are camelCase; validation/authentication/rate-limit errors can use other formats. Merchant and assigned-card transactions expose recorded fee fields; a null fee is not zero. New outbound events cover card assignment, unassignment, load requests and KYB updates.
GET /api/v2/mor/public/cards/pagePOST /api/v2/mor/public/cards/{cardId}/loadPOST /api/v2/mor/public/cards/{cardId}/unloadGET /api/v2/mor/public/transactionsPOST /webhooks/outbound/mor.card.assignedPOST /webhooks/outbound/mor.card.unassignedPOST /webhooks/outbound/mor.kyb.updated
Cost reporting, customer nationality and referral policy fields
POST /api/v2/reporting/costs accepts From and To timestamps plus required nullable ExcludedUserIds. Its response separates currencies and includes Complete: do not treat incomplete coverage as zero cost or combine currency totals without conversion. GET users/{userId} now includes Nationality from the linked Sumsub applicant with saved-profile fallback; nationality differs from address country. Referral community policy responses add DirectRewardBps, AvailableCommunityBps and HasTopupMargin; use the returned policy instead of assuming available reward margin.
POST /api/v2/reporting/costsGET /api/v2/users/{userId}
Personal onboarding and KYC before ordering cards
Create a personal user, start one KYC entry flow (hosted URL, SDK, reusable SumSub or manual evidence), and poll detailed KYC status. Require the relevant provider's approval, not only a generic KYC flag. Crypto cards accounts are created with the user when Crypto cards is the company default; use the /api/v2/users/create-interlace-account/{userId} repair route when needed. Banking requires its personal onboarding application and approved account/budget. Then discover a tier and card product and order the card. Never invent IDs or assume provider approvals are interchangeable.
POST /api/v2/usersPOST /api/v2/users/{userId}/sumsub/kyc-urlGET /api/v2/users/{userId}/kyc/detailed-statusPOST /api/v2/banking/equalsmoney-onboardingGET /api/v2/tiersGET /api/v2/tiers/card-tier/{cardTierId}POST /api/v2/cards
Issue or order a virtual card
Complete user/provider onboarding first, list tiers, assign the selected tier and read its card products. BankProviderType identifies Crypto cards (1) and Banking (2) for the card providers covered here. POST /api/v2/cards requires UserId, CardTypeId and Phone. BudgetId is required for Banking; obtain it from the user's budgets rather than inventing one. Use the local returned card Id for later controls. Physical cards also require their documented delivery fields; check fee quotes and supported shipping first. Read current status after creation and never treat a pending provider action as complete.
GET /api/v2/tiersPOST /api/v2/users/{userId}/tierGET /api/v2/tiers/card-tier/{cardTierId}GET /api/v2/banking/users/{userId}/budgetsPOST /api/v2/cardsGET /api/v2/cards/{cardId}
Public API authentication and scope
Use x-api-key from a trusted backend; the key supplies company scope. Pass the target userId when required. Dashboard JWT, /Users/Me, self-service onboarding and loyalty administration are outside the current public OpenAPI contract. Absence from this contract does not mean the dashboard feature was deleted. Outbound webhook entries describe requests Hoppa sends to your receiver; never call those paths on Hoppa.
KYC, business KYB and additional information
KYC requests accept Nationality and Ssn. Effective US/USA nationality requires exactly nine SSN digits. Use the business options endpoint for canonical IndustryMain, IndustrySub and EmployeeCount values; employee count is an enum string, not a number. Banking RFI supports text responses with optional AssociatedPersonId and batches of up to ten PDF, JPEG or PNG files. Business onboarding also has compliance read, requirements, draft and submission operations.
GET /api/v2/business/onboarding/optionsPOST /api/v2/users/{userId}/kyc/equalsmoney/informationPOST /api/v2/users/{userId}/kyc/equalsmoney/documentsPOST /api/v2/business/onboarding/compliance
Card auto top-up and Auto Lock
Read current settings and current-month usage before editing. Low-balance, failed-transaction and deposit modes are mutually exclusive on a card. Enabling requires explicit DisclaimerAccepted. Deposit mode supports USDC/USDT on Crypto cards, updates only supplied currencies, and allows each currency on only one card per user. Pass userId on every auto-top-up request. Auto Lock now has explicit enable/disable POST routes in addition to the existing PUT route.
GET /api/v2/cards/{cardId}/auto-topupPOST /api/v2/cards/auto-topup/low-balancePOST /api/v2/cards/auto-topup/failed-txPOST /api/v2/cards/auto-topup/depositPOST /api/v2/cards/{cardId}/auto-lock/enablePOST /api/v2/cards/{cardId}/auto-lock/disable
Crypto Exchange quotes, funding and decisions
The Crypto Exchange group keeps the /api/v2/crypto-virtual-accounts prefix. Discover account IDs through trading-overview, request an exact exchange quote and accept its identifier before expiry. Crypto cards-to-Banking supports quote, initiate and confirm. Banking-to-Crypto cards requires a stable IdempotencyKey in the JSON body, uses Exchange funding and webhook-driven re-quoting, and requests user approval for moves beyond ±0.5%. Track the returned transfer and submit decisions only when its state requires them. External accounts and bank address-book routes replace assumptions based on the old settlement-account and swap-quote entries.
GET /api/v2/crypto-virtual-accounts/trading-overviewPOST /api/v2/crypto-virtual-accounts/exchange/quotePOST /api/v2/crypto-virtual-accounts/exchange/acceptPOST /api/v2/crypto-virtual-accounts/equals-to-interlaceGET /api/v2/crypto-virtual-accounts/transfers/{id}POST /api/v2/crypto-virtual-accounts/transfers/{transferId}/decision
Banking payment approval
Read approval capabilities for the target user. Email OTP remains the baseline; native device and browser passkey approval depend on programme enablement, enrollment and client readiness. Pass userId with company API-key requests. Send the selected ApprovalDeviceId or ApprovalPasskeyId at initiation. Enroll first, verify the issued challenge through the matching approval endpoint, then complete the original payee/payout action. An active approval must be cancelled before changing to email fallback. Keep the stored quote and terms; changed or expired terms require renewed initiation and approval. A pending execution must be reconciled, not recreated.
GET /api/v2/banking/approvals/capabilitiesPOST /api/v2/banking/approvals/devices/enrollPOST /api/v2/banking/approvals/verifyPOST /api/v2/banking/approvals/passkeys/enrollPOST /api/v2/banking/approvals/passkeys/verifyDELETE /api/v2/banking/approvals/{verificationToken}
MOR discovery and card lifecycle
All public MOR operations require MOR enablement on the API key’s company. Discover products with GET /api/v2/mor/public/cards/available before selecting CardTypeId. Simple-user creation now requires Phone. The public surface also exposes company provisioning and merchant tiers, merchant transactions, card analytics, unassignment, cancellation, assigned-user card transactions and load requests. Use these MOR routes for MOR resources; the core card DELETE guidance does not replace the MOR cancel operation.
GET /api/v2/mor/public/cards/availablePOST /api/v2/mor/public/usersPOST /api/v2/mor/public/cards/{cardId}/unassignPOST /api/v2/mor/public/cards/{cardId}/cancelPOST /api/v2/mor/public/users/{userId}/cards/{cardId}/load-requests
Crypto withdrawal verification and resends
Initiate the withdrawal, keep the returned VerificationToken and WithdrawalRequestId, and send VerificationToken with OtpCode to confirm. The contract also provides a resend endpoint. Handle RemainingAttempts, IsExpired and IsLocked; a 202 response means processing remains asynchronous. Reconcile uncertain outcomes before initiating another irreversible withdrawal.
POST /api/v2/transfers/withdrawals/cryptoPOST /api/v2/transfers/withdrawals/crypto/confirmPOST /api/v2/transfers/withdrawals/crypto/resend
Referral programmes and customer attribution
The current contract includes programme versions/drafts/publishing, capabilities, geographic and risk policies, member and level lifecycle, links, invitations, attribution commands, community earnings, vouchers, reviews, bulk jobs and reporting. Read capabilities/options before presenting actions; do not infer that a programme supports every operation. Link edits use PATCH. Use preview/simulation operations before committing supported programme changes.
GET /api/v2/referrals/capabilitiesGET /api/v2/referrals/optionsPATCH /api/v2/referrals/links/{linkId}PATCH /api/v2/users/{userId}/referrals/links/{linkId}POST /api/v2/referrals/programs/{programId}/simulate
Webhook delivery and fee events
Verify X-Hoppacard-Signature as lowercase-hex HMAC-SHA256 over the exact raw request body using your webhook secret. Return 2xx after durable acceptance and deduplicate webhook identifiers. Network failures, timeouts, 408, 429 and 5xx are retried up to fifteen times after the initial delivery over approximately 76 hours. Other 4xx responses are permanent failures. This update highlights fee.charged and kyc.resubmission_required; the full webhook index includes all documented events and payloads.
POST /webhooks/outbound/fee.chargedPOST /webhooks/outbound/kyc.resubmission_required
Account linking, prices and authorization
The public contract also adds account-claim challenges and verification, account-link scan/exchange/status, price lookup and conversion, discount-code validation, Banking deposit tracking, and real-time authorization configuration, capabilities, BINs, cards, rules and decisions. Availability is programme-specific; read capabilities before enabling controls. Consult each current schema for required values and ownership constraints.
POST /api/v2/users/account-claim/challengesPOST /api/v2/users/account-links/scanGET /api/v2/pricesGET /api/v2/authorization/capabilitiesPOST /api/v2/discount-codes/validate
Added to the catalogue (38)
GET /api/v2/admin/business-onboarding
Refer to the current OpenAPI schema.
GET /api/v2/admin/business-onboarding/configuration
Refer to the current OpenAPI schema.
GET /api/v2/admin/business-onboarding/price-tables
Refer to the current OpenAPI schema.
GET /api/v2/admin/business-onboarding/{userId}/documents/{documentId}
Refer to the current OpenAPI schema.
GET /api/v2/admin/business-onboarding/{userId}/history
Refer to the current OpenAPI schema.
GET /api/v2/business-onboarding
Refer to the current OpenAPI schema.
GET /api/v2/business-onboarding/payments/{paymentId}/invoice
Refer to the current OpenAPI schema.
GET /api/v2/crypto-virtual-accounts/verification
Refer to the current OpenAPI schema.
GET /api/v2/crypto-virtual-accounts/verification/application
Refer to the current OpenAPI schema.
GET /api/v2/crypto-virtual-accounts/verification/business
Refer to the current OpenAPI schema.
GET /api/v2/crypto-virtual-accounts/verification/settlement-accounts
Read the authenticated user's provisioned crypto addresses and bank settlement details.
GET /api/v2/mor/public/cards/page
List a bounded page of merchant cards using stored balances. The original GET /cards remains unchanged.
POST /api/v2/admin/business-onboarding/billing/preview
Refer to the current OpenAPI schema.
POST /api/v2/admin/business-onboarding/{userId}/decision
Refer to the current OpenAPI schema.
POST /api/v2/admin/business-onboarding/{userId}/payments/{paymentId}/bank-transfer
Refer to the current OpenAPI schema.
POST /api/v2/admin/business-onboarding/{userId}/reconcile-submission
Refer to the current OpenAPI schema.
POST /api/v2/business-onboarding/assess
Refer to the current OpenAPI schema.
POST /api/v2/business-onboarding/payments/{paymentId}/checkout
Refer to the current OpenAPI schema.
POST /api/v2/business-onboarding/tier
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/crypto-address-book
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/equals-to-interlace/fund
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/payout-address
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/payout-fiat
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/verification/application
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/verification/business
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/verification/business/authorisation
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/verification/business/authorisation/send-code
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/verification/edd
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/verification/session
Refer to the current OpenAPI schema.
POST /api/v2/crypto-virtual-accounts/verification/tin
Refer to the current OpenAPI schema.
POST /api/v2/reporting/costs
Refer to the current OpenAPI schema.
POST /webhooks/outbound/mor.card.assigned
mor.card.assigned
POST /webhooks/outbound/mor.card.load_request.updated
mor.card.load_request.updated
POST /webhooks/outbound/mor.card.unassigned
mor.card.unassigned
POST /webhooks/outbound/mor.kyb.updated
mor.kyb.updated
PUT /api/v2/admin/business-onboarding/billing
Refer to the current OpenAPI schema.
PUT /api/v2/admin/business-onboarding/complex-case-pricing
Refer to the current OpenAPI schema.
PUT /api/v2/admin/business-onboarding/configuration/{tierId}
Refer to the current OpenAPI schema.
Changed request, response or description (32)
GET /api/v2/crypto-virtual-accounts/trading-overview
Refer to the current OpenAPI schema.
Changed referenced schemas: BoomFiBalanceData, BoomFiDeposit, BoomFiTradingOverview, BoomFiTradingSubAccount, BoomFiTradingVirtualAccountData, JsonElement.
GET /api/v2/crypto-virtual-accounts/transfers
List Exchange transfer workflows
Changed referenced schemas: BoomFiOtcTradeRequestResponse.
GET /api/v2/crypto-virtual-accounts/transfers/{id}
Get a Exchange transfer workflow
Changed referenced schemas: BoomFiOtcTradeRequestResponse.
GET /api/v2/mor/public/cards
Get all merchant cards with their current available and pending balances.
Changed operation fields: description, responses.
GET /api/v2/mor/public/cards/analytics
Get the API key's merchant card portfolio and daily usage analytics.
Changed operation fields: description, responses.
Changed referenced schemas: MorCardAnalyticsResult, MorDailyCardUsage.
GET /api/v2/mor/public/cards/available
List the card products available to the API key's merchant.
Changed operation fields: description, responses.
Changed referenced schemas: MorAvailableCardProduct.
GET /api/v2/mor/public/cards/{cardId}/secure-widget
Get a secure hosted card-information widget.
Changed operation fields: description, responses.
GET /api/v2/mor/public/companies
List only the MoR child companies belonging to the API key's company.
Changed operation fields: description, responses.
Changed referenced schemas: MorCompanySummary.
GET /api/v2/mor/public/companies/merchant-tiers
List active business Crypto cards tiers available for provisioning under the API key's company.
Changed operation fields: description, responses.
Changed referenced schemas: MorMerchantTierSummary.
GET /api/v2/mor/public/onboarding-status
Get the merchant onboarding status; optionally refresh it from Crypto cards.
Changed operation fields: description, responses.
GET /api/v2/mor/public/transactions
List the API key's merchant transactions, with pagination and optional user, status, and type filters.
Changed operation fields: description, responses.
Changed referenced schemas: MorTransactionListResult, MorTransactionPagination, MorTransactionStats, MorTransactionSummary, MorTransactionUser.
GET /api/v2/mor/public/users/{userId}/cards
Get one user_simple's assigned cards and aggregate card balances.
Changed operation fields: description, responses.
GET /api/v2/mor/public/users/{userId}/cards/{cardId}/transactions
Get transaction history for a card currently assigned to a user_simple in the API key's merchant.
Changed operation fields: description, responses.
Changed referenced schemas: MorAssignedCardTransaction, MorCardTransactionPage.
GET /api/v2/mor/public/wallets
Get merchant wallets, deposit addresses, and fiat/crypto balances.
Changed operation fields: description, responses.
GET /api/v2/referrals/programs/{programId}/community/policy
Refer to the current OpenAPI schema.
Changed referenced schemas: ReferralCommunityPolicyResponse.
GET /api/v2/users/{userId}
Get user by ID, including address and nationality from the linked Sumsub applicant when available. Saved profile values are returned when Sumsub is unavailable.
Changed operation fields: summary.
Changed referenced schemas: UserDetailResponseV2.
POST /api/v2/crypto-virtual-accounts/exchange/quote
Request an exact Exchange balance-to-balance quote
Changed referenced schemas: BoomFiExchangeBankDestination, PublicBoomFiExchangeQuoteRequest.
POST /api/v2/crypto-virtual-accounts/interlace-to-equals/confirm
Confirm a Crypto cards-to-Banking transfer through Exchange
Changed referenced schemas: BoomFiOtcTradeRequestResponse.
POST /api/v2/crypto-virtual-accounts/payin-address
Refer to the current OpenAPI schema.
Changed referenced schemas: BoomFiOtcTradeRequestResponse.
POST /api/v2/crypto-virtual-accounts/transfers/{transferId}/decision
Respond to a changed Exchange quote
Changed referenced schemas: BoomFiOtcTradeRequestResponse.
POST /api/v2/mor/public/cardholder
Create or return the merchant's company-level CORPORATE_MANAGED cardholder.
Changed operation fields: description, parameters, responses.
POST /api/v2/mor/public/cards/batch
Order 1-20 prepaid cards in a batch.
Changed operation fields: description, parameters, responses.
POST /api/v2/mor/public/cards/{cardId}/assign
Assign a merchant-owned card to a user_simple in the same company.
Changed operation fields: description, parameters, responses.
POST /api/v2/mor/public/cards/{cardId}/cancel
Permanently cancel a merchant-owned Crypto cards.
Changed operation fields: description, parameters, responses.
Changed referenced schemas: MorCardCancellationResult, MorCardLoadRequestSummary, MorCardSummary.
POST /api/v2/mor/public/cards/{cardId}/load
Load a merchant-owned card from the merchant's Crypto cards account.
Changed operation fields: description, parameters, responses.
POST /api/v2/mor/public/cards/{cardId}/unassign
Remove a user assignment from a merchant-owned card and cancel its pending load requests.
Changed operation fields: description, parameters, responses.
Changed referenced schemas: MorCardLoadRequestSummary, MorCardSummary.
POST /api/v2/mor/public/cards/{cardId}/unload
Unload a merchant-owned card to the merchant's Crypto cards account.
Changed operation fields: description, parameters, responses.
POST /api/v2/mor/public/companies
Provision a MoR child company and its admin using a company's API key with MoR enabled.
Changed operation fields: description, parameters, responses.
Changed referenced schemas: MorCompanyProvisionResult.
POST /api/v2/mor/public/kyb
Submit or resubmit KYB for the API key's MoR merchant.
Changed operation fields: description, parameters, responses.
POST /api/v2/mor/public/users
Add a user_simple to the API key's MoR company.
Changed operation fields: description, parameters, responses.
POST /api/v2/mor/public/users/{userId}/cards/{cardId}/load-requests
Create or update a load request for a card currently assigned to a user_simple in the API key's merchant.
Changed operation fields: description, parameters, responses.
Changed referenced schemas: MorCardLoadRequestSummary.
PUT /api/v2/referrals/programs/{programId}/community/policy
Refer to the current OpenAPI schema.
Changed referenced schemas: ReferralCommunityPolicyResponse.
Absent from the current public contract (0)
Do not use these entries as public integration contracts. Some remain private dashboard functionality; absence does not establish removal from the platform.