Multi-asset accounts.
Create vault accounts, allocate per-asset deposit addresses, query balances. The same account holds ETH on Ethereum, USDC on Base, BTC on Bitcoin — addressed by one id.
zenvault is the wallet engine for crypto products. Issue vault accounts, allocate per-asset addresses, sign transfers, gate every one of them through a policy you wrote, and read an audit log that doesn't lie.
zenvault has a small surface on purpose. If a concept isn't in this list, it isn't in the API.
Create vault accounts, allocate per-asset deposit addresses, query balances. The same account holds ETH on Ethereum, USDC on Base, BTC on Bitcoin — addressed by one id.
Vault to vault, to an allowlisted external wallet, to a one-time address, contract call, ERC-20 approve. All four use the same idempotent state machine.
Match the request against your transfer record. Verify the destination is allowlisted for the asset. Enforce a USD cap. Every decision is replayable.
Actor, target, before, after, IP, user agent. Security-sensitive writes commit alongside their audit row in the same transaction.
Every transfer transition emits a signed delivery. HMAC over (timestamp.body). Retried with capped exponential backoff and jitter for roughly three days.
One workspace per product, per environment. API keys are workspace-scoped and carry explicit scopes per resource. Rate budgets are per workspace, not pooled.
Every transfer moves through the same six states. Transitions are compare-and-swap; concurrent writers can't move a terminal transfer backwards. The policy check is in front of signing, so a rejected callback never reaches the chain.
Reconciliation polls non-terminal transfers every thirty seconds. Webhook deliveries and the reconciler converge on the same final answer — no drift, no orphans.
Every mutation records actor, target, before and after state, IP, and user agent. Security-sensitive writes commit alongside their audit row in the same database transaction — so the operation either succeeds together or rolls back together.
Replays of an already-decided cosigner callback return the prior answer verbatim. A reused refresh token doesn't just fail — it revokes its entire session family and logs the event.
Read the full security postureIssue wallets per merchant, collect on-chain, batch outbound payouts behind a policy gate.
Counterparty allowlists, trade-ticket-shaped policy, separation of duties between traders and approvers.
Hot/warm/cold topology by account purpose, internal transfers between vaults, settlement to user addresses.
Workspace per product line. Credentials never cross. Aggregated views for finance and compliance.
We're working with a small cohort of teams in the run-up to general availability. Tell us about your product and we'll get you a workspace.