Skip to main content

Wallets API

Manage stablecoin wallets for agent payments.

Authentication

All endpoints require either:
  • Session auth (browser login cookie)
  • Org API key: Authorization: Bearer conto_xxx...

List Wallets

curl https://conto.finance/api/wallets \
  -H "Authorization: Bearer $CONTO_API_KEY"

Query Parameters

ParameterTypeDescription
statusstringFilter: ACTIVE, FROZEN, CLOSED
chainTypestringFilter: EVM, SOLANA
chainIdstringFilter by chain ID

Response

{
  "wallets": [
    {
      "id": "cmm59z8fj000m49h7bjqza22q",
      "name": "Operations Wallet",
      "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2e3a1",
      "walletType": "EOA",
      "chainType": "EVM",
      "chainId": "42431",
      "custodyType": "SPONGE",
      "usdcBalance": 5000.00,
      "status": "ACTIVE",
      "isWatchOnly": false,
      "createdAt": "2024-01-15T10:00:00Z"
    }
  ]
}

Get Wallet

curl https://conto.finance/api/wallets/{walletId} \
  -H "Authorization: Bearer $CONTO_API_KEY"

Create Wallet

curl -X POST https://conto.finance/api/wallets \
  -H "Authorization: Bearer $CONTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Operations Wallet",
    "custodyType": "SPONGE",
    "chainType": "EVM",
    "chainId": "42431"
  }'

Request Body

FieldTypeRequiredDefaultDescription
namestringYes-Wallet display name (1-100 chars)
walletTypestringNoEOAEOA, SMART_WALLET, MULTISIG
chainTypestringNoEVMEVM or SOLANA
chainIdstringNo-Chain ID (e.g. "42431" for Tempo, "8453" for Base)
custodyTypestringNoSPONGECustody provider (see below)
importAddressstringNo-Import an existing wallet address
isWatchOnlybooleanNofalseWatch-only wallets cannot send transactions

Custody Providers

ProviderDescription
SPONGE(Default) Fast setup with gas sponsorship for stablecoin transfers
PRIVYEnterprise-grade key management via Privy API with built-in policy controls
EXTERNALExternally managed wallet (import address required)
SMART_CONTRACT(Coming Soon) On-chain enforcement via allowlist contract
After creating a wallet, you must provision it to get a blockchain address. See the Provision endpoint below.

Provision Wallet

Provision a Sponge-custodied wallet on-chain. This links the wallet to the platform Sponge account, syncs a real blockchain address and balance, and marks the wallet ready for SDK-initiated payments. No request body required.
curl -X POST https://conto.finance/api/wallets/{walletId}/provision \
  -H "Authorization: Bearer $CONTO_API_KEY"

Response

{
  "wallet": {
    "id": "cmm...",
    "name": "Operations Wallet",
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2e3a1",
    "walletType": "EOA",
    "chainType": "EVM",
    "custodyType": "SPONGE",
    "usdcBalance": 100.00,
    "status": "ACTIVE"
  },
  "provisioned": true,
  "chain": {
    "name": "Tempo Testnet",
    "chainId": "42431",
    "explorer": "https://testnet.tempothroughput.com"
  }
}

Update Wallet

curl -X PATCH https://conto.finance/api/wallets/{walletId} \
  -H "Authorization: Bearer $CONTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Wallet Name",
    "status": "FROZEN"
  }'

Request Body

FieldTypeDescription
namestringWallet display name (1-100 chars)
statusstringACTIVE, FROZEN, CLOSED

Wallet Status Values

StatusDescription
ACTIVENormal operation
FROZENTemporarily disabled
CLOSEDNo longer in use

Wallet Lifecycle

The recommended workflow for wallet setup:
  1. Create wallet via POST /api/wallets
  2. Provision wallet via POST /api/wallets/{id}/provision
  3. Link wallet to agent via POST /api/agents/{agentId}/wallets
  4. Agent can now request payments using the wallet

Error Responses

StatusDescription
400Invalid request data
401Authentication failed
403Missing required scope
404Wallet not found
409Wallet is frozen