Skip to main content

Advanced Embedded Wallet Features

Beyond core auth and Send/Swap/Receive, 1Claw offers treasury primitives for fintech-style products: tracked deposits, off-chain ledgers, hierarchical orgs, and enterprise custody options.

Deposit destinations​

Unique inbound addresses for attributing deposits and firing webhooks when funds arrive.

const { data } = await client.depositDestinations.create({
chain: "ethereum",
label: "Invoice #1042",
treasury_wallet_id: walletUuid, // optional; reuse existing wallet address
auto_credit_account_id: internalAccountUuid, // optional
});
// data.address, data.id, data.status
EndpointDescription
POST /v1/deposit-destinationsCreate destination
GET /v1/deposit-destinationsList (?chain=, ?status=)
GET /v1/deposit-destinations/{id}Detail + deposit events
PATCH /v1/deposit-destinations/{id}Update status (active, paused, archived)

Human-only. Background monitor records deposit_events and emits wallet.transfer.received webhooks on confirmation.

Use case: Per-checkout deposit address in a marketplace; auto-credit an internal account when confirmed.

Internal accounts (ledger)​

Gas-free instant transfers between named accounts within the same org — double-entry bookkeeping without on-chain fees.

const { data: account } = await client.internalAccounts.create({
name: "USD Float",
description: "Platform liquidity",
});

await client.internalAccounts.transfer({
from_account_id: fromId,
to_account_id: toId,
asset: "USDC",
amount: "100.00",
memo: "Payout batch 7",
});

Pass an Idempotency-Key header on the HTTP request for safe retries (recommended for production):

curl -X POST "https://api.1claw.co/v1/internal-transfers" \
-H "Authorization: Bearer $USER_JWT" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"from_account_id": "'"$FROM"'",
"to_account_id": "'"$TO"'",
"asset": "USDC",
"amount": "100.00"
}'

Allowed assets: USD, USDC, USDT, ETH, EUR (allowlist enforced).

EndpointDescription
POST /v1/internal-accountsCreate account
GET /v1/internal-accountsList with balances
POST /v1/internal-transfersTransfer (caller must own from_account)
GET /v1/internal-accounts/{id}/ledgerPaginated history

Pair with deposit destinations (auto_credit_account_id) for "deposit → ledger credit → user withdrawal" flows.

Sub-organizations​

Enterprise hierarchical isolation — each end-user or business unit gets its own sub-org with separate vaults, agents, and policies under a parent org.

await client.subOrgs.create({
name: "Acme Corp — Tenant 42",
description: "Isolated resources",
billing_model: "user_pays",
});

await client.subOrgs.addUser(subOrgId, { user_id: userUuid });
await client.subOrgs.generateWallets(subOrgId, { chains: ["ethereum"] });

Enable per-user isolation at provision time:

await platform.platform.upsertUser({
email: "user@example.com",
external_subject: "tenant:42",
create_sub_org: true,
});

See Multi-tenant Platform API.

CMEK and MPC custody​

Treasury keys in __treasury-keys use org envelope encryption (AES-256-GCM DEKs wrapped by KMS KEKs). Paid tiers add stronger custody:

MPC (vault-level)​

ModeTier defaultBehavior
XOR 2-of-2 client custodyPro / TeamServer share + client share on read
Shamir 2-of-3 multi-HSMBusiness / EnterpriseGCP + AWS + Azure; no client share required

Enable on a vault: POST /v1/vaults/{id}/mpc with { custody_mode, providers? }.

Details: MPC.

CMEK (Business / Enterprise)​

Customer-managed AES-256-GCM layer — your key never leaves your environment; only SHA-256 fingerprint stored server-side.

  • POST /v1/vaults/{id}/cmek — enable
  • POST /v1/vaults/{id}/cmek-rotate — batch re-wrap with X-CMEK-Old-Key / X-CMEK-New-Key

Details: CMEK.

Treasury vault specifics

__treasury-keys MPC mode is auto-selected from billing tier at first wallet generation. CMEK applies when enabled on the underlying vault infrastructure your org uses for treasury storage.

TEE signing (agents, not treasury sends)​

Human treasury sends execute in Vault with HSM-backed keys. Optional TEE routing applies to agent Intents API traffic via Shroud (intents_require_tee, execution_require_tee) — not the standard embedded-wallet send path.

Attestation: GET https://shroud.1claw.co/v1/shroud/attestation

See Security overview and Trust model comparison.

Portfolio aggregation​

Unified balance view across treasury wallets, agent signing keys, and smart accounts:

const { data } = await client.portfolio.get({
chains: "ethereum,solana",
include_tokens: true,
});

Useful for dashboard-style apps serving power users with both embedded wallets and agents.

Roadmap and v0.53.1 notes​

Wallet access policies (live API)​

Role-based grants for send, swap, balance view, and export are available via:

  • POST/GET/DELETE /v1/treasury/wallets/access-policies
  • Dashboard: Settings → Wallet Access

See Wallet access policies. Runtime enforcement on every treasury send/swap path is part of the v0.53.1 parity sprint — spend policies remain the primary cap for embedded end-user sends today.

Credential recovery (org admin)​

Org owners can configure MFA/passkey recovery escape hatches (domain/credential_recovery.rs). Approve + delayed execute flow; requires org owner/admin. No end-user self-service API yet — watch Changelog 2026.

Shamir org KEK (Business+)​

Business/Enterprise orgs can configure Shamir-split org KEKs for multi-HSM custody. Reconstruct forwards to Shroud TEE when configured. Operator runbook: internal docs.

Migration from other wallet providers​