Skip to main content
Every Spritz user belongs to your integration. Onboarding has three beats: create the user, verify their identity, and read their capabilities to see what they can do. If the person already has a Spritz account, with you or with another integrator, you don’t create a new user. You connect to them instead, with their consent.

1. Create a user

Create a user with their email address. Spritz returns a user API key (prefixed ak_) that you use to authenticate requests on that user’s behalf.
Store the apiKey securely. You send it as the Authorization bearer for every request you make on this user’s behalf (see Authentication). You can also pass an optional timezone.

2. Verify identity

Before a user can move money, they complete identity verification (KYC). Start a verification session for the user:
Spritz uses Persona for identity verification. The session response gives you what Persona’s SDKs need: sessionId is the Persona inquiry ID and sessionToken is the session token. Recommended: embed Persona natively. For the best experience, run verification inside your own app with the Persona SDK that matches your platform, passing the inquiry ID and session token. Persona provides:
  • Web: the embedded flow
  • React Native: Persona’s React Native SDK
  • iOS and Android: Persona’s native mobile SDKs
See Persona’s docs for each SDK. Passing the session token resumes the same inquiry, so the result stays in sync with the user’s verification.status. Fallback: hosted flow. If you’d rather not embed, open verificationUrl in a browser tab, iframe, or mobile web view. It’s single-use and short-lived; if it expires before the user finishes, create another session. The user’s verification state is reported on their profile as verification.status: not_started, verified, failed, retry, or disabled. A retry status means they can try again; create a new session to do so.

3. Read capabilities

GET /v1/users/me returns the user’s verification status and their capabilities. Capabilities are the source of truth for what a user can do right now, and what’s blocking anything they can’t.
Each capability is a product, and for ramps a method:
  • Products: fiat_to_crypto, crypto_to_fiat, bill_pay, crypto_card
  • Methods: ach_credit, ach_debit, wire, sepa_credit_transfer, rtp, push_to_card, canadian_eft
Its status tells you where it stands: When a capability is requirements_needed, its requirements[] lists what to do, and nextRequirement points to the one to tackle first. Each requirement has a type, a human-readable description, an actionUrl where the user completes it, a retryable flag, and its own status (not_started, pending, completed, failed).

Drive your UI from capabilities

Render your onboarding and product UI off the capabilities list rather than tracking state yourself:
  • Show a capability as available when its status is active.
  • When it’s requirements_needed, surface the requirement description and send the user to its actionUrl.
  • After the user completes a requirement, re-fetch GET /v1/users/me, or react to the capabilities.updated webhook so you update without polling.

Connect an existing Spritz user

If the person already has a Spritz account, with you or with another integrator, use Integrator Connect to gain access with their consent instead of creating a new user. It’s an OAuth-style authorization flow.
1

Create a connect session

From your backend, create a session with a pre-registered HTTPS redirect URI and an optional state value you can use to tie the result back to a request.
2

Send the user to approve

Redirect the user to authorizationUrl. They sign in to Spritz, review your integration, and approve. The session is valid for about 10 minutes.
3

Receive the authorization code

On approval, Spritz redirects the user back to your redirectUri with a code and the state you sent.
4

Exchange the code for a user key

From your backend, exchange the code for that user’s API key. The code is single-use and expires after a few minutes.
You now hold a user API key for that user and can act on their behalf, exactly like a user you created.

Next

Authentication

Use the user API key to sign requests.

What we support

Rails, tokens, and regions behind each capability.

Off-ramp

Put an active capability to work.

Webhooks

React to capabilities.updated and verification changes.