Skip to main content
Wallet creation is the first place where the SDK’s prepared-transaction model shows up clearly.

Two create modes

You can create a wallet either:
  • from a policy with policyId / policy_id
  • from an inline initialUser / initial_user
If the policy ID is omitted, the backend can create a no-recovery wallet from the inline authority you provide. Common authority shapes are ed25519, secp256k1, and secp256r1.

Basic create flow

TypeScript
Passkey-backed creation works the same way with secp256r1:
TypeScript
EVM-backed creation works the same way with secp256k1:
TypeScript

What you get back

The result is not just one transaction. It is a categorized create plan: For plain non-recovery creates, this usually collapses to one main creation transaction plus any client authority signing the create flow needs.

Recovery-enabled create flows

If the policy is recovery-enabled and the SDK can derive both the requester authority and guardian information, create(...) also returns recoverySetup / recovery_setup. That setup plan is not the same thing as completed recovery setup. It is the follow-up input for wallet.recovery.prepareSetup(...) / wallet.recovery.prepare_setup(...).

What to submit

Always submit the prepared transactions exactly in the returned order. If the client-authority transaction collection is not empty, those transactions must be signed by the client authority before submission. If the operator-signed transaction collection is not empty, treat those transactions as already operator signed. They still need fee payer or sponsor submission, but not another authority signature.