Skip to main content
This guide covers the complete integration lifecycle for the QASH Partner API: registering end-users, running identity verification, logging the user in, executing financial operations, and issuing a card — all from your own backend.
Current scope: partner integrations currently support users in Colombia (countryCode: "CO"), one asset (USDC), with amounts expressed in USD-equivalent terms. Other countries and assets are not yet available through the partner API.

Two credential types

The integration uses two distinct credentials, for two distinct phases:
The access token is obtained through a two-step, backend-only email OTP login (Steps 5–6 below). There is no client-side SDK to integrate — your backend calls two endpoints and receives a standard QASH JWT.

1. Prerequisites

Before you start you need:
  • Partner API credentialsX-Api-Key + X-Api-Secret issued from the QASH Dashboard under Settings → API Keys. The secret is shown once at creation; store it securely in a secrets manager.
  • Server-side integration only — credentials must never be exposed to client-side code. Every call must originate from your backend.

Credential format

Base URL


2. User lifecycle

Every end-user goes through the following states before they can log in and transact:
Login is gated on active status — this is intentional. It’s what forces registration, profile, and KYC to run under partner API-key credentials rather than a user session: there is no user session yet at that point.

Onboarding and login sequence

Section numbers (§N) in the diagram match the numbered sections below.

3. Step 1 — Register a user

Request fields

Response — 201 Created

Store the id immediately. This UUID is your permanent reference for the user across all subsequent calls until you have an access token.

Errors


4. Step 2 — Create the user profile

Before starting KYC, the user must have a personal profile. Persona uses this data to pre-fill the identity verification form — without it the KYC call will fail.
See Create user profile for the full field reference.

5. Step 3 — Verify profile completion

If isComplete is false, the missingFields array lists what’s still needed. Use PATCH /api/v1/user/profile to fill in the gaps before proceeding to KYC.

6. Step 4 — Initiate KYC

Once the profile is complete, initiate identity verification.

Response — 200 OK

Redirect your user to verificationUrl. The form is pre-filled with the profile data you provided. Once the user finishes, QASH handles activation automatically — no webhook configuration required on your side.

Errors


7. Step 5 — Poll for activation

Poll until status is "active", using either endpoint:
or check KYC status directly:
Poll with exponential backoff. Start at 10 seconds, back off to 60 seconds max. Identity verification typically completes within 1–5 minutes in production.

8. Step 6 — Log the user in

This is the last pre-login call, and the bridge into everything else. See Send login code and Verify login code for full details.
The user receives a 6-digit code by email. Once they provide it back to your app:
Store accessToken and refreshToken in your backend on behalf of the user. From this point forward, every financial and card endpoint uses Authorization: Bearer <accessToken> — no X-Api-Key, X-Api-Secret, or userId needed. The token already identifies the user and your partner account.

9. Financial operations

All financial endpoints below use Authorization: Bearer <accessToken> only.

Amount format

Ledger amounts (accounts, balance, deposit, transfer, transactions) are decimal USDC values, not smallest-unit integers — e.g. 100 means USDC 100.00. Never use floating point math when handling these values in your own backend; treat them as fixed-precision decimals. payout and exchange/calculate deal with external currencies (e.g. COP) and follow the unit conventions documented on their own pages — see Payout and Calculate exchange.

9.1 Get balance

The user’s USDC account is provisioned automatically — there is no separate “create account” call. Use the id from this response as accountId in deposits, transfers, and transaction queries. See Get balance.

9.2 Deposit funds

See Deposit for the full field reference and response shape.

9.3 Transfer funds

See Transfer.

9.4 List / get transactions

See List transactions and Get transaction.

9.5 Payout to bank account

See Payout for the full request body — destination bank fields, idempotency via transactionId, and response shape.

9.6 Exchange rate quote

See Calculate exchange for request/response fields.

10. Card issuance and management

Once the user is logged in, issuing and managing their card uses the same access token — no separate credential.

10.1 Issue a card

This requires the user’s KYC to be approved and their profile complete — both are already satisfied at this point in the flow. See Issue a card for the full prerequisites and error cases.

10.2 Card management

See Cards overview for details on each.

11. User management

List your users


12. API key management

This is a separate credential from the end-user access token above — it authenticates you as the partner business, not an end user. Use it only to provision or revoke X-Api-Key/X-Api-Secret pairs from your own backend admin tooling.

Create a key pair

secretKey is returned once only. Store it immediately in a secrets manager.

Revoke a key


13. Security checklist

  • X-Api-Secret stored in a secrets manager — not in source code or environment files committed to git.
  • All API calls originate from your backend — no direct browser-to-QASH calls.
  • accessToken/refreshToken stored securely per user, not exposed to client-side code unless your integration is designed to hand sessions directly to a client app.
  • transactionId included on every payout request, unique per payout.
  • Your backend validates user.status === "active" before attempting login.
  • API key rotation plan in place — revoke and reissue on any suspected compromise.
  • Logs do not contain X-Api-Secret, accessToken, refreshToken, or raw API responses with sensitive fields.

14. Complete endpoint reference

Endpoint groups by auth model

Full endpoint map

User managementX-Api-Key + X-Api-Secret User profile and KYC statusX-Api-Key + X-Api-Secret + userId in body/query LoginX-Api-Key + X-Api-Secret KYC document/historyAuthorization: Bearer <accessToken> Financial operationsAuthorization: Bearer <accessToken> CardsAuthorization: Bearer <accessToken> API key managementAuthorization: Bearer <business-user-jwt>