@ottowallets/sdk
v1.1.1
Published
Official Otto Wallets TypeScript SDK for server-to-server integrations.
Maintainers
Readme
@ottowallets/sdk
Official TypeScript SDK for Otto Wallets server-to-server integrations using workspace-generated credentials: apiKey and secretKey.
This package intentionally exposes only the functional integration surface of the platform. Sensitive flows such as end-user authentication, workspace configuration, RBAC, network activation, and other operational controls remain in the Otto web dashboard for security reasons.
Installation
npm install @ottowallets/sdkQuick start
import { BasePath, OttoSDK } from '@ottowallets/sdk';
const otto = new OttoSDK({
apiKey: process.env.OTTO_API_KEY!,
secretKey: process.env.OTTO_SECRET_KEY!,
basePath: BasePath.prod,
});Base paths
BasePath.prod->https://api.ottowallets.com/api/v1BasePath.sandbox->https://api.ottowallets.com/api/v1BasePath.local->http://localhost:3000/api/v1
Credentials
Use the API credentials generated inside your Otto workspace.
apiKey: public identifier sent in theX-API-KeyheadersecretKey: shared secret used to sign every request asX-Signaturewith HMAC-SHA256
These credentials are managed from the dashboard and should not be embedded in client-side applications.
Exposed resources
Vaults
await otto.vaults.create({ name: 'Treasury' });
await otto.vaults.list({ page: 1, pageSize: 20 });Wallets
await otto.wallets.create({
network: 'ethereum',
vault_id: 'vault-id',
name: 'Primary wallet',
});
await otto.wallets.list({
page: 1,
pageSize: 20,
filters: {
vault: 'Treasury',
networks: ['ethereum'],
},
});
await otto.wallets.getBalance({
network: 'ethereum',
address: '0x123...',
});
await otto.wallets.sendTransaction({
network: 'ethereum',
from: '0x123...',
to: '0xabc...',
amount: 0.5,
});Transactions
await otto.transactions.list({ page: 1, limit: 20 });
await otto.transactions.getMetrics();
await otto.transactions.getVolumeHistory({ from: '2026-01-01T00:00:00.000Z' });Gas Station
await otto.gasStation.list();
await otto.gasStation.getAvailableNetworks();
await otto.gasStation.refill({
walletAddress: '0x123...',
amount: 0.01,
purpose: 'GAS',
});The Gas Station domain also supports sponsored operational flows such as wallet targeting, vault management, and internal sponsored multisend logic.
Important: The multi-recipient batch transaction flow already exists in backend/platform flows, but it is not yet exposed as a public API-gateway SDK method in this package.
MPC wallets
await otto.mpc.listWallets();
await otto.mpc.createWallet({
networkId: 'network-id',
threshold: 2,
participants: [
{ type: 'SERVER', publicKey: 'server-public-key' },
{ type: 'EXTERNAL', publicKey: 'backup-public-key' },
],
});
await otto.mpc.listSessions();Out of scope for the SDK
The following areas intentionally remain in the Otto web dashboard:
- user authentication flows
- workspace setup and credential management
- RBAC, roles, policies, and assignments
- network activation and operational configuration
- other security-sensitive administrative controls
Compatibility
OttoWalletSDK is still exported, and OttoSDK is available as a shorter alias.
License
MIT
