Skip to main content

Creating Wallets

Get users started in minutes with immediate value—no KYC verification required. Creating wallets allows users to experience the platform's benefits immediately, building momentum toward completing verification when they're ready to move money.

Create User → Create Wallet → Access Program Benefits

What's Available

After creating wallets users can:

  • Link bank accounts and cards for future use
  • Receive and accumulate merchant communications
  • Receive prizes and promotional benefits
  • View balance and explore features

Why This Works: Users see immediate value—their program benefits for use, accounts linked—building momentum toward completing verification.

Implementation Guide

Let's build the onboarding flow to set up a user and wallet.

Initial Setup

First, establish your authentication headers that you'll use for all API calls:

const API_CONFIG = {
baseUrl: 'https://merchant-api.accruesavings.com',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${CLIENT_SECRET}`,
'client-id': CLIENT_ID
}
};

Step 1: Create the User

When a customer first interacts with your application:

Endpoint: POST /api/v1/users

async function createUser(customer) {
const response = await fetch(`${API_CONFIG.baseUrl}/api/v1/users`, {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify({
data: {
type: 'User',
attributes: {
email: customer.email,
phoneNumber: customer.phone, // Format: +1XXXXXXXXXX
firstName: customer.firstName,
lastName: customer.lastName
}
}
})
});

if (response.status === 409) {
// User exists - this is fine, fetch their ID
return await findExistingUser(customer.email);
}

const data = await response.json();
return data.data.id; // Store this ID
}

Key Points:

  • Phone numbers must include country code
  • Email and phone must be unique
  • 409 Conflict means user exists (handle gracefully)
  • Returns immediately—no verification needed

Step 2: Create the Wallet

A wallet can be created for a user:

Endpoint: POST /api/v1/wallets

async function createWallet(userId) {
const response = await fetch(`${API_CONFIG.baseUrl}/api/v1/wallets`, {
method: 'POST',
headers: API_CONFIG.headers,
body: JSON.stringify({
data: {
type: 'Wallet',
attributes: {
userId: userId
}
}
})
});

const data = await response.json();
return data.data.id;
}

Important: Wallet creation is instant and doesn't require KYC. Users can immediately start receiving rewards and linking accounts.

Error Handling

Handle common errors gracefully:

const errorHandlers = {
UserAlreadyExists: async (email) => {
// User exists - fetch and continue
return await findExistingUser(email);
},

WalletAlreadyExists: () => ({
success: true,
message: 'Wallet ready'
})
};

Next Steps

Once a wallet is created, users can:

  • Link accounts for future use
  • Receive rewards and program benefits
  • Explore wallet features

When users are ready to move money, they'll need to complete KYC to enable deposits, purchases, and withdrawals.