> For the complete documentation index, see [llms.txt](https://bound-1.gitbook.io/bound-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bound-1.gitbook.io/bound-docs/developer-guide/api-reference/off-ramp.md).

# Off Ramp

Withdraw USDC back to HyperEVM

## Move USDC back to HyperEVM

> Returns an unsigned \`sendAsset\` action — the deposit's mirror. Funds are credited to the\
> signing wallet itself on HyperEVM.\
> \
> Sign with \`signUserSignedAction\` (EIP-712, \`HyperliquidTransaction:SendAsset\` types).\
> Add \`nonce\` (ms) to the action object, sign, then POST \`{ action, nonce, signature }\`\
> directly to Hyperliquid \`/exchange\`.<br>

```json
{"openapi":"3.0.3","info":{"title":"Boundary Perps API","version":"1.0.0"},"tags":[{"name":"Off-ramp","description":"Withdraw USDC back to HyperEVM"}],"servers":[{"url":"https://api.bound.exchange","description":"Production"},{"url":"https://testnet-api.bound.exchange","description":"Testnet"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT access token from `POST /auth/authenticate`"}},"schemas":{"WithdrawRequest":{"type":"object","required":["userAddress","amount"],"properties":{"userAddress":{"type":"string","description":"EVM wallet address"},"amount":{"type":"string","description":"USDC amount to withdraw"}}},"ApiResponse_WithdrawAction":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WithdrawAction"}}},"WithdrawAction":{"type":"object","required":["kind","action"],"properties":{"kind":{"type":"string","enum":["withdraw"]},"action":{"$ref":"#/components/schemas/HlAction"}}},"HlAction":{"type":"object","additionalProperties":true,"description":"Opaque Hyperliquid action object. Bound builds it; you sign it byte for byte\nand never edit it. Bound re-derives the expected body when you relay it back.\n"},"ErrorEnvelope":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Error code (26xxx for Boundary Perps errors)"},"message":{"type":"string","description":"Error message key"},"details":{"type":"string","description":"Human-readable detail (present on some errors)"}}}},"responses":{"ErrorResponse":{"description":"Error response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"paths":{"/api/which-first/withdraw":{"post":{"operationId":"createWithdraw","tags":["Off-ramp"],"summary":"Move USDC back to HyperEVM","description":"Returns an unsigned `sendAsset` action — the deposit's mirror. Funds are credited to the\nsigning wallet itself on HyperEVM.\n\nSign with `signUserSignedAction` (EIP-712, `HyperliquidTransaction:SendAsset` types).\nAdd `nonce` (ms) to the action object, sign, then POST `{ action, nonce, signature }`\ndirectly to Hyperliquid `/exchange`.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawRequest"}}}},"responses":{"200":{"description":"Withdraw action to sign","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse_WithdrawAction"}}}},"400":{"$ref":"#/components/responses/ErrorResponse"}}}}}}
```
