# Otto AI x402 — USDC Withdrawal

> Otto AI x402 — USDC Withdrawal is a paid API for AI agents from x402.ottoai.services, paid per call via x402, $0.01/call, status unknown (last checked 2026-09-14).

Withdraw USDC earnings or balances from the Otto AI x402 platform to a specified recipient wallet address.

## Facts

- Endpoint: POST https://x402.ottoai.services/withdraw
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/otto-ai-x402-usdc-withdrawal-1cb985a7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_Dna5DkFDE67MmpZ-nWPDD

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability otto-ai-x402-usdc-withdrawal-1cb985a7 -d '<json body>'
```

Example prompt: Withdraw 25 USDC from my Otto AI x402 balance and send it to my wallet address 0xABC123... on Base.

## When to prefer this

Use this endpoint when you need to programmatically withdraw or transfer USDC earnings accumulated from calling Otto AI x402 pay-per-call services. Prefer this over manual wallet operations when automating revenue collection from DeFi API usage on Base, Polygon, or Solana networks.

## Known failure modes

- Insufficient balance — withdrawal amount exceeds available USDC balance
- Invalid recipient address — malformed or unsupported wallet address format
- Network error — selected chain (Base/Polygon/Solana) unavailable or congested
- Payment authorization failure — x402 payment header missing or invalid
- Amount below minimum threshold — withdrawal amount too small to process

## How this service works

Withdraw tokens from a user's Otto AI Safe to any EOA. Supports 7 chains (Base, Polygon, Arbitrum, Ethereum, BSC, Avalanche, Solana). Non-Base chains require an explicit EOA recipient.

## Output

Returns a JSON object confirming the withdrawal with: success boolean, tokenAmount (e.g. '25.00'), tokenSymbol (e.g. 'USDC'), transactionHash (on-chain tx hash), and recipientAddress confirming where funds were sent.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "amount": {
   "type": "number",
   "description": "Amount in human-readable format. Decimals are derived server-side — do NOT send decimals."
  },
  "chainId": {
   "type": "number",
   "description": "Chain ID (8453 Base default, 137, 42161, 56, 1, 43114, 1151111081099710)"
  },
  "tokenSymbol": {
   "type": "string",
   "description": "Token to withdraw: a known symbol (e.g. USDC, WETH) OR a 0x contract address, resolved on the given chain. Ambiguous symbols are rejected (HTTP 400) with candidates."
  },
  "tokenAddress": {
   "type": "string",
   "description": "Token contract address (alternative to tokenSymbol). If both are sent and disagree, the request is rejected."
  },
  "recipientAddress": {
   "type": "string",
   "description": "Destination EOA. Defaults to your own wallet (withdraw-to-self). Any DIFFERENT destination — on BOTH the external (x402) AND the internal (dApp) paths — requires an EIP-712 signed withdraw intent. REQUIRED on non-Base chains."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "success": true,
  "tokenAmount": "25.00",
  "tokenSymbol": "USDC",
  "transactionHash": "0x...",
  "recipientAddress": "0x..."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/otto-ai-x402-usdc-withdrawal-1cb985a7/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.ottoai.services](https://www.zero.xyz/host/x402.ottoai.services/llms.txt)
