Overview
The registration process is an 8-step flow that collects required KYC (Know Your Customer) information from new users and establishes formal consent records. Each step must be completed in order, with theonboardingId passed between steps to maintain session continuity.
Steps 1-2: Email and phone verification with onboardingId generation.
Step 3: KYC identity verification via Veriff using onboardingId (no authentication required).
Steps 4-5: Personal details and consent record creation using onboardingId (consent required for regulatory compliance - GDPR, CCPA, E-Sign Act).
Steps 6-7: Address collection that finalizes registration and returns userId and accessToken.
Step 8: Link consent set to userId to complete the audit trail.
All registration endpoints require the
x-client-key header. For US environment routing, include x-us-env: true header or region=us query parameter.Registration Flow Diagram
Complete Flow Overview
Step 1: Email Verification (Send)
Initiate registration by sending a verification code to the user’s email address.Endpoint
POST /v1/auth/register/email/send
Request
Response
Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Yes | User’s email address (must be valid email format) |
Common Errors
Email Already Registered
Email Already Registered
Invalid Email Format
Invalid Email Format
Step 2: Email Verification (Verify)
Verify the code received via email and create the user onboarding session.Endpoint
POST /v1/auth/register/email/verify
Request
Response
The
onboardingId returned here must be passed to all subsequent registration steps. Store it securely in your session.Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Yes | User’s email address (must match Step 1) |
password | string | Yes | User’s chosen password (8+ characters recommended) |
verificationCode | string | Yes | 6-digit code received via email |
contactVerificationId | string | Yes | ID from Step 1 response |
countryOfResidence | string | Yes | ISO 3166-1 alpha-2 country code (e.g., “GB”, “US”) |
allowMarketing | boolean | Yes | User consent for marketing communications (see Consent Management for tracking) |
allowSms | boolean | Yes | User consent for SMS communications (see Consent Management for tracking) |
Password Requirements
While specific requirements may vary, follow these best practices:
- Minimum 8 characters
- Include uppercase and lowercase letters
- Include numbers and special characters
- Avoid common passwords
Common Errors
Invalid Verification Code
Invalid Verification Code
Code Expired
Code Expired
Invalid Contact Verification ID
Invalid Contact Verification ID
Step 3: Phone Verification (Send)
Send SMS verification code to the user’s phone number.Endpoint
POST /v1/auth/register/phone/send
Request
Response
Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
phoneCountryCode | string | Yes | International dialing code with + prefix (e.g., “+44”, “+1”) |
phoneNumber | string | Yes | Phone number without country code or formatting |
contactVerificationId | string | Yes | ID from Step 1 response (same one used in Step 2) |
Common Errors
Invalid Phone Number
Invalid Phone Number
Phone Number Already Registered
Phone Number Already Registered
Step 4: Phone Verification (Verify)
Verify the SMS code and link the phone number to the user’s onboarding session.Endpoint
POST /v1/auth/register/phone/verify
Request
Response
Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
phoneCountryCode | string | Yes | Must match Step 3 |
phoneNumber | string | Yes | Must match Step 3 |
verificationCode | string | Yes | 6-digit code received via SMS |
onboardingId | string | Yes | Onboarding ID from Step 2 response |
Common Errors
Invalid Verification Code
Invalid Verification Code
Phone Number Mismatch
Phone Number Mismatch
Step 5: KYC Verification (Veriff)
Generate a verification session URL for identity verification. This step initiates the KYC process where users upload their government ID and complete biometric verification.No Authentication Required: This endpoint uses
onboardingId for validation and does not require a bearer token. The user doesn’t have an access token yet at this stage of registration.Endpoint
POST /v1/auth/register/verification
Request
Response
Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
onboardingId | string | Yes | Onboarding ID from Step 2 |
What Happens Next
After receiving thesessionUrl:
- Redirect the user to the Veriff session URL
- User completes verification by:
- Uploading a government-issued ID (passport, driver’s license, etc.)
- Taking a selfie for biometric matching
- Following on-screen instructions
- Verification processing (typically 5-30 minutes)
- User returns to your application
- Poll for status using
GET /v1/auth/register?onboardingId={id}to check verification state
Verification States
The user’sverificationState will be updated to:
- PENDING: Verification submitted and under review
- VERIFIED: Verification approved (ready to proceed)
- REJECTED: Verification rejected (can retry later)
Polling for Completion
Implement polling to detect when verification completes:Common Errors
Invalid Onboarding ID
Invalid Onboarding ID
Session Generation Failed
Session Generation Failed
Step 6: Personal Details
Collect the user’s personal information required for KYC compliance.Endpoint
POST /v1/auth/register/personal-details
Request
Request (US Users)
For users withcountryOfResidence = "US", SSN is required:
Response
Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
onboardingId | string | Yes | Onboarding ID from Step 2 |
firstName | string | Yes | User’s legal first name |
lastName | string | Yes | User’s legal last name |
countryOfNationality | string | Yes | ISO 3166-1 alpha-2 country code |
dateOfBirth | string | Yes | Format: YYYY-MM-DD (must be 18+ years old) |
ssn | string | Conditional | Required only if countryOfResidence = "US" |
Age Validation
Users must meet minimum age requirements (typically 18+). The API will validate thedateOfBirth against this requirement.
Common Errors
User Too Young
User Too Young
Missing SSN (US Users)
Missing SSN (US Users)
ssn field when countryOfResidence = "US"Step 7: Physical Address
Collect the user’s residential address information.Endpoint
POST /v1/auth/register/address
Request (Non-US Users)
Request (US Users)
For US users, include theusState field:
Response (Registration Complete)
WhenisSameMailingAddress = true OR countryOfResidence != "US":
Registration Complete: When
accessToken is returned, registration is complete. Store the token for authenticated API calls.Response (Mailing Address Required)
WhenisSameMailingAddress = false AND countryOfResidence = "US":
If
accessToken is null, proceed to Step 8 to collect mailing address (US users only).Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
onboardingId | string | Yes | Onboarding ID from Step 2 |
addressLine1 | string | Yes | Primary address line (street address) |
addressLine2 | string | No | Secondary address line (apartment, suite, etc.) |
city | string | Yes | City or town |
zip | string | Yes | Postal/ZIP code |
usState | string | Conditional | Required only if countryOfResidence = "US". Two-letter state code (e.g., “CA”, “NY”) |
isSameMailingAddress | boolean | Yes | Must be true for non-US users. For US users, set to false to collect separate mailing address |
Common Errors
Missing US State
Missing US State
usState field when countryOfResidence = "US"Invalid ZIP Code
Invalid ZIP Code
Step 8: Mailing Address (Optional - US Only)
For US users who have a different mailing address than their physical address, collect the mailing address information.This step is only required when:
countryOfResidence = "US", ANDisSameMailingAddress = falsein Step 7
Endpoint
POST /v1/auth/register/mailing-address
Request
Response
Registration Complete: The
accessToken returned here completes the registration process. Store it for authenticated API calls.Field Descriptions
| Field | Type | Required | Description |
|---|---|---|---|
onboardingId | string | Yes | Onboarding ID from Step 2 |
mailingAddressLine1 | string | Yes | Primary mailing address line |
mailingAddressLine2 | string | No | Secondary mailing address line |
mailingCity | string | Yes | Mailing address city |
mailingZip | string | Yes | Mailing address ZIP code |
mailingUsState | string | Yes | Two-letter state code for mailing address |
Step 9: Consent Management (Required for Production)
After core registration completes (Steps 1-8), create a formal consent record for regulatory compliance. This step is essential for production deployments handling user data under GDPR, CCPA, or E-Sign Act.Workflow
The consent flow requires two API calls:- Create onboarding consent - Create consent set using the
onboardingIdfrom registration - Link user to consent - Associate the permanent
userIdwith the consent set
Endpoint 1: Create Onboarding Consent
POST /v2/consent/onboarding
Request
Response
Store the
consentSetId returned from this call. You’ll need it for the linking step.Endpoint 2: Link User to Consent Set
PATCH /v2/consent/onboarding/{consentSetId}
Request
Response
Registration Complete with Audit Trail: Once the user is linked to the consent set, your registration flow is complete with full regulatory compliance. The consent record includes immutable audit trails for all future changes.
Policy Selection
Choose the correct policy based on the user’s country of residence:| User Location | Policy | Required Consents |
|---|---|---|
| United States | us | eSignAct, termsAndPrivacy, marketingNotifications, smsNotifications, emailNotifications |
| International | global | termsAndPrivacy, marketingNotifications, smsNotifications, emailNotifications |
E-Sign Act Disclosure for US Users: The
eSignAct consent is required for US users under the federal Electronic Signatures in Global and National Commerce Act. Your client application must present the E-Sign Act disclosure document to users and provide an opportunity to review it before they can consent. The disclosure typically explains:- What it means to conduct business electronically
- How to withdraw consent
- How to obtain paper copies of documents
- Hardware and software requirements
- How to contact the company
Common Errors
Invalid Policy Type
Invalid Policy Type
us for US, global for others)Missing Required Consent
Missing Required Consent
eSignAct consent when using policy: "us"Invalid Onboarding ID
Invalid Onboarding ID
onboardingId from Step 2 and ensure it hasn’t been used beforeUser Already Linked
User Already Linked
Next Steps After Consent
Once consent is established, you can:- View consent status:
GET /v2/consent/user/{userId} - Access audit trail:
GET /v2/consent/user/{userId}/audit - Allow revocation:
DELETE /v2/consent/consentSet/{id}/consent/{id}
Complete Registration Example
Here’s a complete end-to-end example implementing all registration steps:Troubleshooting
Session Expiration
Onboarding sessions may expire if too much time passes between steps. If you receive an “invalid onboarding ID” error:- Check if the session has expired (typically 30-60 minutes)
- Restart the registration flow from Step 1
- Complete all steps within the session timeout window
Verification Code Issues
If users report not receiving codes:- Email: Check spam/junk folders, verify email address is correct
- SMS: Verify phone number format, ensure number can receive SMS, check for carrier blocks
Data Validation Failures
Common validation errors and solutions:- Invalid email format: Ensure proper email validation on client side
- Weak password: Implement password strength checker matching server requirements
- Invalid date format: Use YYYY-MM-DD format consistently
- Invalid country code: Use ISO 3166-1 alpha-2 codes (2-letter codes)
- Phone number format: Remove spaces, dashes, and formatting characters
Best Practices
Client-Side Validation
Validate all fields on the client side before API submission to reduce errors and improve UX
Progress Tracking
Show users clear progress indicators through the 8-step flow so they know where they are
Error Messages
Provide clear, actionable error messages. Don’t just show API errors—explain what the user should do
Session Management
Store onboardingId securely and implement timeout warnings to prevent session expiration
Code Resend
Implement “resend code” functionality for both email and phone verification with rate limiting
Field Persistence
Save form progress locally so users don’t lose data if they navigate away or refresh
Next Steps
After successful registration (including Step 9 consent):- ✅ Store Access Token: Securely store the returned
accessTokenfor authenticated API calls (6-hour validity) - ✅ Consent Established: Your consent record with audit trail is now active. Users can manage consent via their profile
- Identity Verification: Direct users to complete identity verification via
GET /v1/user/verification - Profile Management: Allow users to view and update their profile via Profile Management
