{
  "tools": [
    {
      "name": "get_me",
      "description": "Account that owns this API key.",
      "scopes": [
        "read:account"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/me",
      "example": {}
    },
    {
      "name": "list_automations",
      "description": "Filtered summaries of the key owner's automations.",
      "scopes": [
        "read:automations"
      ],
      "write": false,
      "method": "POST",
      "path": "/api/v1/automations/summary",
      "example": {
        "limit": 20
      }
    },
    {
      "name": "get_automation",
      "description": "One automation by id (same scopes as follower/bot/emitter/portfolio reads).",
      "scopes": [
        "read:automations"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/followers/:id",
      "example": {
        "id": 42,
        "type": "follower"
      }
    },
    {
      "name": "get_pnl_series",
      "description": "Historical PnL points for an automation.",
      "scopes": [
        "read:automations"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/followers/:id/pnl-series",
      "example": {
        "id": 42,
        "type": "follower"
      }
    },
    {
      "name": "get_position",
      "description": "Current position for an automation.",
      "scopes": [
        "read:automations"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/followers/:id/position",
      "example": {
        "id": 42,
        "type": "follower"
      }
    },
    {
      "name": "get_user_statistics",
      "description": "Aggregated trading statistics for the key owner.",
      "scopes": [
        "read:account"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/me/statistics",
      "example": {
        "trading_mode": "paper"
      }
    },
    {
      "name": "get_positions",
      "description": "Open positions across the key owner's automations.",
      "scopes": [
        "read:account"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/me/positions",
      "example": {
        "trading_mode": "paper"
      }
    },
    {
      "name": "get_available_cash",
      "description": "Sum of live free stable balances across the key owner's credential venues.",
      "scopes": [
        "read:account"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/me/available-cash",
      "example": {}
    },
    {
      "name": "list_orders",
      "description": "Order history for one follower or one bot.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/orders",
      "example": {
        "follower_id": 42,
        "limit": 20
      }
    },
    {
      "name": "list_signals",
      "description": "Signal history for one emitter.",
      "scopes": [
        "read:signals"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/signals",
      "example": {
        "emitter_id": 1001
      }
    },
    {
      "name": "get_backtest_quota",
      "description": "Remaining backtest quota and in-flight limits.",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtest/quota",
      "example": {}
    },
    {
      "name": "list_backtests",
      "description": "Backtest jobs the key owner can access (compact metrics plus robustness).",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtests",
      "example": {
        "limit": 20
      }
    },
    {
      "name": "get_backtest",
      "description": "One backtest job. Default summary includes robustness gates.",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtest/:job_id",
      "example": {
        "job_id": "bt-1a2b3c4d"
      }
    },
    {
      "name": "summarize_backtest_batch",
      "description": "Rank a bulk backtest batch (best per symbol by default) with compact metrics, robustness gates, and app URLs.",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtests/summary",
      "example": {
        "batch_id": "cde2a214-8827-4651-9f98-52f0221ff666",
        "group_by": "symbol",
        "rank_by": "quality"
      }
    },
    {
      "name": "get_backtest_signals",
      "description": "Trades for a backtest (full history is kept briefly).",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtest/:job_id/signals",
      "example": {
        "job_id": "bt-1a2b3c4d"
      }
    },
    {
      "name": "create_backtest",
      "description": "Enqueue a backtest. Check quota first.",
      "scopes": [
        "write:backtest"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/backtest",
      "example": {
        "name": "BTC 1h sample",
        "symbol": "BTC",
        "exchange": "hyperliquid",
        "candle_timeframe": "1h",
        "execution_interval": 3600000,
        "start_time": 1711929600000,
        "end_time": 1714521600000,
        "initial_capital": 10000
      }
    },
    {
      "name": "cancel_backtest",
      "description": "Cancel a queued or running backtest.",
      "scopes": [
        "write:backtest"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/backtest/:job_id/cancel",
      "example": {
        "job_id": "bt-1a2b3c4d"
      }
    },
    {
      "name": "create_backtest_batch",
      "description": "Bulk backtest sweep seeded from an automation or backtest (current config plus added values), or from a full template. Defaults to a draft preview.",
      "scopes": [
        "write:backtest"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/backtest/bulk",
      "example": {
        "from_automation": {
          "type": "bot",
          "id": 42
        },
        "candle_timeframes": [
          "4h"
        ],
        "param_ranges": [
          {
            "param_key": "entry.rules.rsi.0.params.period",
            "values": [
              10,
              21
            ]
          }
        ]
      }
    },
    {
      "name": "run_backtest_batch",
      "description": "Enqueue a draft bulk batch, or re-run a finished one.",
      "scopes": [
        "write:backtest"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/backtest/bulk/batches/:batch_id/rerun",
      "example": {
        "batch_id": "cde2a214-8827-4651-9f98-52f0221ff666"
      }
    },
    {
      "name": "list_backtest_batches",
      "description": "Bulk backtest batches with job progress.",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtest/bulk/batches",
      "example": {
        "limit": 20
      }
    },
    {
      "name": "get_backtest_batch",
      "description": "One bulk backtest batch with progress and saved config.",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtest/bulk/batches/:batch_id",
      "example": {
        "batch_id": "cde2a214-8827-4651-9f98-52f0221ff666"
      }
    },
    {
      "name": "cancel_backtest_batch",
      "description": "Cancel a running bulk backtest batch.",
      "scopes": [
        "write:backtest"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/backtest/bulk/batches/:batch_id/cancel",
      "example": {
        "batch_id": "cde2a214-8827-4651-9f98-52f0221ff666"
      }
    },
    {
      "name": "search_marketplace",
      "description": "Search public marketplace listings.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/marketplace/search",
      "example": {
        "q": "btc",
        "limit": 20
      }
    },
    {
      "name": "list_community_examples",
      "description": "Browse Community examples: public shared backtests (historical sims).",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtest/community-examples",
      "example": {
        "limit": 20,
        "positive_roi": true
      }
    },
    {
      "name": "get_community_example",
      "description": "Get a Community example or shared backtest by job_id.",
      "scopes": [
        "read:backtests"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/backtest/:job_id",
      "example": {
        "job_id": "job-uuid",
        "view": "summary"
      }
    },
    {
      "name": "publish_community_example",
      "description": "Share a completed backtest you own to Community examples.",
      "scopes": [
        "write:backtest"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/backtest/:job_id/community-example",
      "example": {
        "job_id": "job-uuid",
        "title": "RSI BTC example",
        "visibility": "public"
      }
    },
    {
      "name": "unpublish_community_example",
      "description": "Remove a backtest from Community examples.",
      "scopes": [
        "write:backtest"
      ],
      "write": true,
      "method": "DELETE",
      "path": "/api/v1/backtest/:job_id/community-example",
      "example": {
        "job_id": "job-uuid"
      }
    },
    {
      "name": "list_leaderboard",
      "description": "Public automation leaderboard (same as the app ranking page): platform automations and public listings, ranked, params redacted.",
      "scopes": [
        "read:automations"
      ],
      "write": false,
      "method": "POST",
      "path": "/api/v1/emitters/summary",
      "example": {
        "sort_by": "roi",
        "roi_window": "30d",
        "symbol": "BTCUSDT",
        "limit": 10
      }
    },
    {
      "name": "list_markets",
      "description": "List markets with optional filters.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/markets",
      "example": {
        "exchange": "hyperliquid",
        "limit": 20
      }
    },
    {
      "name": "list_exchanges",
      "description": "List supported exchanges.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchanges",
      "example": {
        "active_only": true
      }
    },
    {
      "name": "get_ticker",
      "description": "Latest ticker for an exchange and symbol.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/ticker",
      "example": {
        "exchange": "hyperliquid",
        "symbol": "BTC"
      }
    },
    {
      "name": "get_candles",
      "description": "OHLCV candles for an exchange and symbol.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/datafeed/history",
      "example": {
        "exchange": "hyperliquid",
        "symbol": "BTC",
        "resolution": "60"
      }
    },
    {
      "name": "get_symbol_correlation",
      "description": "Pearson correlation for daily buy-and-hold returns across symbols.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "POST",
      "path": "/api/v1/markets/symbol-correlation",
      "example": {
        "symbols": [
          "BTC",
          "ETH",
          "SOL"
        ],
        "exchange": "binance_usdm"
      }
    },
    {
      "name": "get_symbol_volatility",
      "description": "Sample std of daily returns for markets over 7d/30d/90d/365d windows.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "POST",
      "path": "/api/v1/markets/symbol-volatility",
      "example": {
        "symbols": [
          {
            "exchange": "binance",
            "symbol": "BTCUSDT"
          },
          {
            "exchange": "binance",
            "symbol": "ETHUSDT"
          }
        ],
        "windows": [
          "7d",
          "30d",
          "90d",
          "365d"
        ]
      }
    },
    {
      "name": "get_symbol_fee_breakeven",
      "description": "Minimum price move to break even after entry+exit fees; returns both maker and taker same-role scenarios.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "POST",
      "path": "/api/v1/markets/symbol-fee-breakeven",
      "example": {
        "symbols": [
          {
            "exchange": "binance_usdm",
            "symbol": "BTCUSDT"
          }
        ]
      }
    },
    {
      "name": "list_terminal_orders",
      "description": "The key owner's terminal orders.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/terminal/orders",
      "example": {
        "trading_mode": "paper",
        "limit": 20
      }
    },
    {
      "name": "get_terminal_order",
      "description": "One terminal order by client_order_id.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/terminal/orders/by-client-order-id/:client_order_id",
      "example": {
        "client_order_id": "dogabot-t1a2b3c4"
      }
    },
    {
      "name": "list_terminal_positions",
      "description": "The key owner's terminal positions.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/terminal/positions",
      "example": {
        "trading_mode": "paper"
      }
    },
    {
      "name": "list_terminal_emitters",
      "description": "Emitters the key owner can use as a terminal leader.",
      "scopes": [
        "read:automations"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/me/emitters",
      "example": {}
    },
    {
      "name": "list_exchange_balances",
      "description": "Live wallet snapshot from a connected exchange.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/balances",
      "example": {
        "exchange": "hyperliquid",
        "asset": "USDT"
      }
    },
    {
      "name": "list_exchange_positions",
      "description": "Live venue futures/perp contracts (spot returns empty).",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/positions",
      "example": {
        "exchange": "binance_usdm"
      }
    },
    {
      "name": "get_exchange_margin_summary",
      "description": "Live futures margin summary and liq-distance aggregates.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/margin-summary",
      "example": {
        "exchange": "binance_usdm"
      }
    },
    {
      "name": "list_exchange_orders",
      "description": "Live venue open + recent filled/canceled orders.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/orders",
      "example": {
        "exchange": "binance_usdm",
        "symbol": "BTC",
        "status": "open",
        "limit": 50
      }
    },
    {
      "name": "list_exchange_trades",
      "description": "Live venue fills (paginated).",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/trades",
      "example": {
        "exchange": "binance_usdm",
        "symbol": "BTC",
        "limit": 50
      }
    },
    {
      "name": "list_exchange_income",
      "description": "Live venue income/cashflow history.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/income",
      "example": {
        "exchange": "binance_usdm",
        "limit": 50
      }
    },
    {
      "name": "get_exchange_openable_notional",
      "description": "Aster remaining openable notional (USDT) at symbol+leverage.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/openable-notional",
      "example": {
        "exchange": "aster_dex",
        "symbol": "BZUSDT",
        "leverage": 50
      }
    },
    {
      "name": "set_exchange_leverage",
      "description": "Change initial futures leverage on perp venues, optional margin_mode (confirm_live required).",
      "scopes": [
        "write:terminal"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/exchange/leverage",
      "example": {
        "exchange": "aster_dex",
        "symbol": "BZUSDT",
        "leverage": 3,
        "margin_mode": "isolated",
        "confirm_live": true
      }
    },
    {
      "name": "set_exchange_margin_mode",
      "description": "Switch cross/isolated margin for a symbol (confirm_live required).",
      "scopes": [
        "write:terminal"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/exchange/margin-mode",
      "example": {
        "exchange": "binance_usdm",
        "symbol": "BTCUSDT",
        "margin_mode": "isolated",
        "confirm_live": true
      }
    },
    {
      "name": "get_exchange_leverage_capabilities",
      "description": "Static per-venue leverage and margin-mode support matrix.",
      "scopes": [
        "read:orders"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/exchange/leverage-capabilities",
      "example": {
        "exchange": "bybit_linear"
      }
    },
    {
      "name": "get_terminal_symbol_rules",
      "description": "Lot size, min quantity, and min notional for a venue symbol.",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/terminal/symbol-rules",
      "example": {
        "exchange": "hyperliquid",
        "symbol": "BTC"
      }
    },
    {
      "name": "get_terminal_order_capabilities",
      "description": "Venue-native order capabilities (stops, brackets, post-only).",
      "scopes": [
        "read:markets"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/terminal/order-capabilities",
      "example": {
        "exchange": "aster_dex",
        "symbol": "BTC"
      }
    },
    {
      "name": "place_terminal_order",
      "description": "Place a terminal order (async ack). Prefer paper.",
      "scopes": [
        "write:terminal"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/terminal/place-order",
      "example": {
        "exchange": "hyperliquid",
        "symbol": "BTC",
        "side": "buy",
        "quantity": 0.001,
        "price": 0,
        "order_type": "market",
        "trading_mode": "paper",
        "broadcast_mode": "personal"
      }
    },
    {
      "name": "cancel_terminal_order",
      "description": "Cancel a resting terminal order.",
      "scopes": [
        "write:terminal"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/terminal/cancel-order",
      "example": {
        "client_order_id": "dogabot-t1a2b3c4"
      }
    },
    {
      "name": "cancel_exchange_order",
      "description": "Cancel one live venue resting order.",
      "scopes": [
        "write:terminal"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/exchange/cancel-order",
      "example": {
        "exchange": "binance_usdm",
        "symbol": "BTC",
        "trading_mode": "paper",
        "order_id": "123456"
      }
    },
    {
      "name": "cancel_exchange_orders",
      "description": "Bulk-cancel live venue resting orders.",
      "scopes": [
        "write:terminal"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/exchange/cancel-orders",
      "example": {
        "exchange": "binance_usdm",
        "symbol": "BTC",
        "trading_mode": "paper",
        "cancel_open": true
      }
    },
    {
      "name": "create_automation",
      "description": "Create a bot, follower, emitter, or portfolio.",
      "scopes": [
        "write:automation"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/bots",
      "example": {
        "name": "Paper BTC trend",
        "trading_mode": "paper",
        "exchange": "binance_usdm",
        "symbol": "BTC",
        "initial_capital": 10000,
        "execution_interval": 3600000,
        "candle_timeframe": "1h",
        "params": {
          "entry": {
            "combinationMode": "all_agree",
            "agreementThreshold": 1,
            "rules": {
              "rsi": {
                "enabled": true,
                "invert": false,
                "params": {
                  "period": 14,
                  "oversold": 30,
                  "overbought": 70
                }
              }
            }
          },
          "exit": {
            "combinationMode": "all_agree",
            "rules": {}
          },
          "increase": {
            "combinationMode": "all_agree",
            "rules": {}
          },
          "reversal": {
            "combinationMode": "all_agree",
            "rules": {}
          }
        },
        "type": "bot"
      }
    },
    {
      "name": "start_automation",
      "description": "Start an owned automation.",
      "scopes": [
        "write:lifecycle"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/bots/:id/start",
      "example": {
        "id": 42,
        "type": "bot"
      }
    },
    {
      "name": "stop_automation",
      "description": "Stop an owned automation.",
      "scopes": [
        "write:lifecycle"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/bots/:id/stop",
      "example": {
        "id": 42,
        "type": "bot"
      }
    },
    {
      "name": "update_automation",
      "description": "Update a stopped automation (tags-only while running).",
      "scopes": [
        "write:automation"
      ],
      "write": true,
      "method": "PATCH",
      "path": "/api/v1/bots/:id",
      "example": {
        "id": 42,
        "type": "bot",
        "name": "Renamed bot"
      }
    },
    {
      "name": "delete_automation",
      "description": "Delete an owned automation (requires confirm_delete).",
      "scopes": [
        "write:automation"
      ],
      "write": true,
      "method": "DELETE",
      "path": "/api/v1/bots/:id",
      "example": {
        "id": 42,
        "type": "bot",
        "confirm_delete": true
      }
    },
    {
      "name": "set_automation_book",
      "description": "Set one bot/follower book leg (book-only or +venue). Session/MCP OAuth only.",
      "scopes": [
        "write:lifecycle"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/bots/:id/books",
      "example": {
        "type": "bot",
        "id": 259,
        "exchange": "aster_dex",
        "symbol": "ETHUSDT",
        "position": 0,
        "reason": "accounting_correction"
      }
    },
    {
      "name": "list_credentials",
      "description": "List exchange credentials (masked api_key only).",
      "scopes": [
        "read:credentials"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/credentials",
      "example": {}
    },
    {
      "name": "create_credential",
      "description": "Create an exchange credential (secrets write-only).",
      "scopes": [
        "write:credentials"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/credentials",
      "example": {
        "name": "Binance paper",
        "exchange": "binance_usdm",
        "api_key": "REPLACE_ME",
        "secret_key": "REPLACE_ME"
      }
    },
    {
      "name": "update_credential",
      "description": "Update credential name and/or rotate keys.",
      "scopes": [
        "write:credentials"
      ],
      "write": true,
      "method": "PUT",
      "path": "/api/v1/credentials/:id",
      "example": {
        "id": 7,
        "name": "Binance paper (rotated)"
      }
    },
    {
      "name": "set_default_credential",
      "description": "Mark a credential as default for its exchange.",
      "scopes": [
        "write:credentials"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/credentials/:id/default",
      "example": {
        "id": 7
      }
    },
    {
      "name": "delete_credential",
      "description": "Delete an exchange credential (requires confirm_delete).",
      "scopes": [
        "write:credentials"
      ],
      "write": true,
      "method": "DELETE",
      "path": "/api/v1/credentials/:id",
      "example": {
        "id": 7,
        "confirm_delete": true
      }
    },
    {
      "name": "list_tags",
      "description": "List automation tags.",
      "scopes": [
        "read:automations"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/tags",
      "example": {}
    },
    {
      "name": "create_tag",
      "description": "Create an automation tag.",
      "scopes": [
        "write:automation"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/tags",
      "example": {
        "lookup_key": "high-conviction",
        "description": "Priority strategies"
      }
    },
    {
      "name": "update_tag",
      "description": "Update a tag lookup_key and/or description.",
      "scopes": [
        "write:automation"
      ],
      "write": true,
      "method": "PATCH",
      "path": "/api/v1/tags/:id",
      "example": {
        "id": 3,
        "description": "Updated description"
      }
    },
    {
      "name": "delete_tag",
      "description": "Delete a tag (requires confirm_delete).",
      "scopes": [
        "write:automation"
      ],
      "write": true,
      "method": "DELETE",
      "path": "/api/v1/tags/:id",
      "example": {
        "id": 3,
        "confirm_delete": true
      }
    },
    {
      "name": "create_ai_chat_conversation",
      "description": "Create an Ask AI conversation thread.",
      "scopes": [
        "write:ask_ai"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/ai/chat/conversations",
      "example": {
        "title": "Risk check"
      }
    },
    {
      "name": "ask_ai_chat",
      "description": "Send a message to Ask AI and wait for the full turn.",
      "scopes": [
        "write:ask_ai"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/ai/chat/conversations/:id/messages",
      "example": {
        "id": "conv_abc",
        "message": "Summarize my paper risk and suggest a small BTC buy."
      }
    },
    {
      "name": "confirm_ai_chat_tool",
      "description": "Approve or reject a pending Ask AI write tool.",
      "scopes": [
        "write:ask_ai"
      ],
      "write": true,
      "method": "POST",
      "path": "/api/v1/ai/chat/conversations/:id/tools/:call_id/confirm",
      "example": {
        "id": "conv_abc",
        "call_id": "call_1",
        "approve": true
      }
    },
    {
      "name": "get_ai_chat_conversation",
      "description": "Get an Ask AI conversation with messages.",
      "scopes": [
        "write:ask_ai"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/ai/chat/conversations/:id",
      "example": {
        "id": "conv_abc"
      }
    },
    {
      "name": "list_ai_chat_conversations",
      "description": "List recent Ask AI conversations.",
      "scopes": [
        "write:ask_ai"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/ai/chat/conversations",
      "example": {
        "limit": 20
      }
    },
    {
      "name": "get_ai_chat_quota",
      "description": "Daily Ask AI quota (used, limit, remaining).",
      "scopes": [
        "write:ask_ai"
      ],
      "write": false,
      "method": "GET",
      "path": "/api/v1/ai/chat/quota",
      "example": {}
    }
  ]
}
