Skip to main content
Before your user can deposit, check balances, or withdraw, you must create their Blend account. This is the mandatory first step in every integration.
You must call client.safe.account(userEoa) to get an accountId before any other SDK or API call. Deposit quotes, balance reads, and withdrawals all require it. Skip this step and nothing works.
When a user signs up for one of your products, Blend resolves a personal Safe for them. Each Safe is deterministically derived and completely isolated from other users.

Dynamic Safe Resolution

Safe addresses are derived from the user address plus your neobank and account type configuration.
InputSourceExample
neobankIdYour neobank identifier"your-neobank"
accountTypeIdYour account type UUID"uuid-xxx"
userAddressEnd user’s wallet address0xABC...
This produces a unique, predictable Safe context for every combination.

Multi-account support

Because account type is part of the resolution model, the same user can have multiple Blend accounts within your platform:
User: 0xABC...
Neobank: "your-neobank"

Account Type: "savings"   → Account + Safe for conservative product
Account Type: "growth"    → Account + Safe for aggressive product
Account Type: "btc-yield" → Account + Safe for bitcoin-oriented product
Each account is fully isolated with its own balances, positions, and risk exposure.

Cross-chain consistency

The same user account can deploy the same Safe address across multiple supported chains, which simplifies cross-chain deposit and withdrawal coordination.

Deploying user accounts

When a user creates an account:
1

Resolve the account and Safe address

Use the SDK to fetch the account record for this user. The response includes the deterministic Safe address and deployed chains.
const account = await client.safe.account(userEoa);
// account.safeAddress
// account.accountId
// account.chainsDeployed
2

Deploy the Safe when needed

If the Safe has not been deployed yet, trigger deployment. Blend handles the on-chain transaction.
await client.safe.request(account.accountId, 8453);
Your neobank pays a per-account deployment fee that covers gas costs and Safe setup. See Integration Fees for details.
3

Persist the account mapping

Record the Blend accountId against your internal user so later reads, deposit quotes, and withdrawals can use the correct account context.
The user’s Blend account is now ready to receive deposits and service read requests.

Account lifecycle

StateDescription
ResolvedSafe address computed but not yet deployed on-chain
DeployedSafe contract deployed and ready for deposits
ActiveHas a non-zero balance or active positions
InactiveZero balance; Safe still exists but has no active funds

Security model

  • Non-custodial: The user remains the owner of their Safe execution path
  • Isolated: Each account is independent from every other user account
  • Transparent: Integrators can surface deterministic Safe information directly in product UX
End users do not need admin portal access. They interact exclusively through your consumer app. The admin portal is for your team to manage account types, API keys, and monitoring.

Next steps

Deposit & Withdraw

Implement deposit and withdrawal flows.

Cross-chain

Handle multi-chain operations.
Last modified on March 20, 2026