# OptOut.cash Full Agent Context OptOut.cash is a private-only settlement coordinator. The visible product is: ```text Supported USDC or USDT in -> native BTC out ``` Everything between those endpoints is hidden from the user. The user should not pick THORChain, a provider, a vault, or a memo. ## User Outcome The app should show: - the selected stablecoin spend amount - the final Bitcoin address supplied by the user - expected sats/BTC received - network/liquidity cost - quote expiry before payment submission - settlement state, Bitcoin delivery state, and transaction/receipt outputs after payment submission - privacy caveats The app should not show provider implementation details in the default human flow. ## Supported Input And Output Input: | Source id | Network | CAIP-2 | Asset | Minimum | | --- | --- | --- | --- | --- | | `base-usdc` | Base | `eip155:8453` | USDC | 1 USDC | | `eth-usdc` | Ethereum | `eip155:1` | USDC | 1 USDC | | `bsc-usdc` | BNB Chain | `eip155:56` | USDC | 1 USDC | | `bsc-usdt` | BNB Chain | `eip155:56` | USDT | 1 USDT | | `tron-usdt` | Tron | `tron:mainnet` | USDT | 1 USDT | Output: - Native Bitcoin L1 only. Unsupported: - Unlisted stablecoin rails - Alternate output types - Name resolution - Public route selection ## Settlement API Agents should prefer: - `POST /api/settlements/quote` - `POST /api/settlements/create` Quote example: ```json { "sourceAssetId": "base-usdc", "amountUsd": "25.00", "refundAddress": "0x0000000000000000000000000000000000000000", "output": { "type": "bitcoin", "address": "bc1q..." }, "privacyMode": "required" } ``` Create requires an `Idempotency-Key` header. Reuse the same key when retrying the same intended settlement. Do not retry with a new key unless the user intends to create a second settlement. ## Current Liquidity Adapter Current implementation detail: - Supported stablecoin rails use THORChain. This is an adapter detail, not a user-facing route. The human product copy should say supported stablecoin to Bitcoin, not swap route. ## Cost Model OptOut.cash does not add an app fee. The live quote still includes THORChain network, liquidity, slippage, and outbound costs. The app does not set `affiliate` or `affiliate_bps`. ## Delivery State Do not treat THORChain quote `total_swap_seconds` as a Bitcoin confirmation ETA. After payment submission, status should be state-based: - Funding transaction observed - BTC delivery pending - BTC transaction sent - Bitcoin transaction confirmed ## x402 Boundary The live settlement flow is not an x402 transfer. It requires wallet-signed router calldata or memo-bearing transfer data because the THORChain instruction must be carried. The endpoint `/api/x402/capabilities` remains as a machine-readable capability boundary and reports this limitation. ## Privacy Boundary OptOut.cash is privacy-preserving, not anonymous or untraceable. Always-on privacy rules: - Disable name resolution. - Prefer fresh BTC addresses. - Keep route providers hidden from the user. - Do not auto-open explorers. - Minimize logs and never store seed phrases or private keys. Caveats: - Stablecoin funding transactions are visible on their source networks. - Native BTC outputs are public on Bitcoin. - Timing and amount correlation can still reduce privacy. ## Public Discovery Surfaces - `/robots.txt` - `/sitemap.xml` - `/ai.txt` - `/llms.txt` - `/llms-full.txt` - `/openapi.yaml` - `/.well-known/agent-capabilities.json` - `/api/x402/capabilities` ## Error Shape Most API failures return: ```json { "error": { "code": "stable_error_code", "message": "Human-readable recovery detail.", "retryable": false } } ``` Validation errors can include details. Runtime quote and settlement responses are authoritative over discovery documents. ## Operational Configuration Important environment variables: - `THORCHAIN_API_BASE` See the repository README for setup and local validation commands.