{"id":"2149b141-61cb-4edd-a03c-2ad828a10662","entityType":"agent","slug":"clawhub-skills-abhi152003-maxxit-lazy-trading","name":"maxxit-lazy-trading","canonicalUrl":"https://www.xpersona.co/agent/clawhub-skills-abhi152003-maxxit-lazy-trading","canonicalPath":"/agent/clawhub-skills-abhi152003-maxxit-lazy-trading","generatedAt":"2026-10-10T08:14:22.848Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Execute perpetual trades on Ostium via Maxxit's Lazy Trading API. Includes programmatic endpoints for opening/closing positions, managing risk, fetching market data, and copy-trading other OpenClaw agents. --- emoji: 📈 name: maxxit-lazy-trading version: 1.2.0 author: Maxxit description: Execute perpetual trades on Ostium via Maxxit's Lazy Trading API. Includes programmatic endpoints for opening/closing positions, managing risk, fetching market data, and copy-trading other OpenClaw agents. homepage: https://maxxit.ai repository: https://github.com/Maxxit-ai/maxxit-latest disableModelInvocation: true requires: env: - MA","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.","installCommand":"clawhub skill install skills:abhi152003:maxxit-lazy-trading","sourceUrl":"https://github.com/openclaw/skills/tree/main/skills/abhi152003/maxxit-lazy-trading","homepage":"https://maxxit.ai","primaryLinks":[{"label":"View on ClawHub","url":"https://github.com/openclaw/skills/tree/main/skills/abhi152003/maxxit-lazy-trading","kind":"source"},{"label":"Homepage","url":"https://maxxit.ai","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":50,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Execute perpetual trades on Ostium via Maxxit's Lazy Trading API. Includes programmatic endpoints for opening/closing positions, managing risk, fetching market "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"trade","status":"self-declared"},{"label":"be","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"trade","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"be","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:trade|supported|profile capability:be|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No source adoption metrics were available."},"stars":null,"forks":null,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-25T05:55:24.101Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-25T05:55:24.101Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-26T05:55:24.101Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install skills:abhi152003:maxxit-lazy-trading","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T08:14:22.847Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-abhi152003-maxxit-lazy-trading/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"---\nemoji: 📈\nname: maxxit-lazy-trading\nversion: 1.2.0\nauthor: Maxxit\ndescription: Execute perpetual trades on Ostium via Maxxit's Lazy Trading API. Includes programmatic endpoints for opening/closing positions, managing risk, fetching market data, and copy-trading other OpenClaw agents.\nhomepage: https://maxxit.ai\nrepository: https://github.com/Maxxit-ai/maxxit-latest\ndisableModelInvocation: true\nrequires:\n  env:\n    - MAXXIT_API_KEY\n    - MAXXIT_API_URL\nmetadata:\n  openclaw:\n    requiredEnv:\n      - MAXXIT_API_KEY\n      - MAXXIT_API_URL\n    bins:\n      - curl\n    primaryCredential: MAXXIT_API_KEY\n---\n\n# Maxxit Lazy Trading\n\nExecute perpetual futures trades on Ostium protocol through Maxxit's Lazy Trading API. This skill enables automated trading through programmatic endpoints for opening/closing positions and managing risk.\n\n## When to Use This Skill\n\n- User wants to execute trades on Ostium\n- User asks about their lazy trading account details\n- User wants to check their USDC/ETH balance\n- User wants to view their open positions or portfolio\n- User wants to see their closed position history or PnL\n- User wants to discover available trading symbols\n- User wants to get market data or LunarCrush metrics for analysis\n- User wants a whole market snapshot for the trading purpose\n- User wants to compare altcoin rankings (AltRank) across different tokens\n- User wants to identify high-sentiment trading opportunities\n- User wants to know social volume trends for crypto assets\n- User wants to open a new trading position (long/short)\n- User wants to close an existing position\n- User wants to set or modify take profit levels\n- User wants to set or modify stop loss levels\n- User wants to fetch current token/market prices\n- User mentions \"lazy trade\", \"perps\", \"perpetuals\", or \"futures trading\"\n- User wants to automate their trading workflow\n- User wants to copy-trade or mirror another trader's positions\n- User wants to discover other OpenClaw agents to learn from\n- User wants to see what trades top-performing traders are making\n- User wants to find high-impact-factor traders to replicate\n\n---\n\n## ⚠️ CRITICAL: API Parameter Rules (Read Before Calling ANY Endpoint)\n\n> **NEVER assume, guess, or hallucinate values for API request parameters.** Every required parameter must come from either a prior API response or explicit user input. If you don't have a required value, you MUST fetch it from the appropriate dependency endpoint first.\n\n### Parameter Dependency Graph\n\nThe following shows where each required parameter comes from. **Always resolve dependencies before calling an endpoint.**\n\n| Parameter | Source | Endpoint to Fetch From |\n|-----------|--------|------------------------|\n| `userAddress` / `address` | `/club-details` response → `user_wallet` | `GET /club-details` |\n| `agentAddress` | `/club-details` response → `ostium_agent_address` | `GET /club-details` |\n| `tradeIndex` | `/open-position` response → `actualTradeIndex` **OR** `/positions` response → `tradeIndex` | `POST /open-position` or `POST /positions` |\n| `pairIndex` | `/positions` response → `pairIndex` **OR** `/symbols` response → symbol `id` | `POST /positions` or `GET /symbols` |\n| `entryPrice` | `/open-position` response → `entryPrice` **OR** `/positions` response → `entryPrice` | `POST /open-position` or `POST /positions` |\n| `market` / `symbol` | User specifies token **OR** `/symbols` response → `symbol` (e.g. `ETH/USD`) | User input or `GET /symbols` |\n| `side` | User specifies `\"long\"` or `\"short\"` | User input (required) |\n| `collateral` | User specifies the USDC amount | User input (required) |\n| `leverage` | User specifies the multiplier | User input (required) |\n| `takeProfitPercent` | User specifies (e.g., 0.30 = 30%) | User input (required) |\n| `stopLossPercent` | User specifies (e.g., 0.10 = 10%) | User input (required) |\n| `address` (for copy-trader-trades) | `/copy-traders` response → `creatorWallet` or `walletAddress` | `GET /copy-traders` |\n\n### Mandatory Workflow Rules\n\n1. **Always call `/club-details` first** to get `user_wallet` (used as `userAddress`/`address`) and `ostium_agent_address` (used as `agentAddress`). Cache these for the session — they don't change.\n2. **Never hardcode or guess wallet addresses.** They are unique per user and must come from `/club-details`.\n3. **For opening a position:** Fetch market data first (via `/lunarcrush` or `/market-data`), present it to the user, get explicit confirmation plus trade parameters (collateral, leverage, side, TP, SL), then execute.\n   - **Market format rule (Ostium):** `/symbols` returns pairs like `ETH/USD`, but `/open-position` expects `market` as base token only (e.g. `ETH`). Convert by taking the base token before `/`.\n4. **For setting TP/SL after opening:** Use the `actualTradeIndex` from the `/open-position` response. If you don't have it (e.g., position was opened earlier), call `/positions` to get `tradeIndex`, `pairIndex`, and `entryPrice`.\n5. **For closing a position:** You need the `tradeIndex` — always call `/positions` first to look up the correct one for the user's specified market/position.\n6. **Ask the user for trade parameters** — never assume collateral amount, leverage, TP%, or SL%. Present defaults but let the user confirm or override.\n7. **Validate the market exists** by calling `/symbols` before trading if you're unsure whether a token is available on Ostium.\n\n### Pre-Flight Checklist (Run Mentally Before Every API Call)\n\n```\n✅ Do I have the user's wallet address? → If not, call /club-details\n✅ Do I have the agent address? → If not, call /club-details\n✅ Does this endpoint need a tradeIndex? → If not in hand, call /positions\n✅ Does this endpoint need entryPrice/pairIndex? → If not in hand, call /positions\n✅ Did I ask the user for all trade parameters? → collateral, leverage, side, TP%, SL%\n✅ Is the market/symbol valid? → If unsure, call /symbols to verify\n```\n\n---\n\n## Authentication\n\nAll requests require an API key with prefix `lt_`. Pass it via:\n- Header: `X-API-KEY: lt_your_api_key`\n- Or: `Authorization: Bearer lt_your_api_key`\n\n## API Endpoints\n\n## Ostium Programmatic Endpoints (`/api/lazy-trading/programmatic/*`)\n\n> All endpoints under `/api/lazy-trading/programmatic/*` are for **Ostium** unless explicitly prefixed with `/aster/`.\n\n### Get Account Details\n\nRetrieve lazy trading account information including agent status, Telegram connection, and trading preferences.\n\n```bash\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/club-details\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"user_wallet\": \"0x...\",\n  \"agent\": {\n    \"id\": \"agent-uuid\",\n    \"name\": \"Lazy Trader - Username\",\n    \"venue\": \"ostium\",\n    \"status\": \"active\"\n  },\n  \"telegram_user\": {\n    \"id\": 123,\n    \"telegram_user_id\": \"123456789\",\n    \"telegram_username\": \"trader\"\n  },\n  \"deployment\": {\n    \"id\": \"deployment-uuid\",\n    \"status\": \"active\",\n    \"enabled_venues\": [\"ostium\"]\n  },\n  \"trading_preferences\": {\n    \"risk_tolerance\": \"medium\",\n    \"trade_frequency\": \"moderate\"\n  },\n  \"ostium_agent_address\": \"0x...\",\n  \"aster_configured\": \"true\",\n}\n```\n\n### Get Available Symbols\n\nRetrieve all available trading symbols from the Ostium exchange. Use this to discover which symbols you can trade and get LunarCrush data for.\n\n```bash\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/symbols\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"symbols\": [\n    {\n      \"id\": 0,\n      \"symbol\": \"BTC/USD\",\n      \"group\": \"crypto\",\n      \"maxLeverage\": 150\n    },\n    {\n      \"id\": 1,\n      \"symbol\": \"ETH/USD\",\n      \"group\": \"crypto\",\n      \"maxLeverage\": 100\n    }\n  ],\n  \"groupedSymbols\": {\n    \"crypto\": [\n      { \"id\": 0, \"symbol\": \"BTC/USD\", \"group\": \"crypto\", \"maxLeverage\": 150 },\n      { \"id\": 1, \"symbol\": \"ETH/USD\", \"group\": \"crypto\", \"maxLeverage\": 100 }\n    ],\n    \"forex\": [...]\n  },\n  \"count\": 45\n}\n```\n\n### Get LunarCrush Market Data\n\nRetrieve cached LunarCrush market metrics for a specific symbol. This data includes social sentiment, price changes, volatility, and market rankings.\n\n> **⚠️ Dependency**: You must call the `/symbols` endpoint first to get the exact symbol string (e.g., `\"BTC/USD\"`). The symbol parameter requires an exact match.\n\n```bash\n# First, get available symbols\nSYMBOL=$(curl -s -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/symbols\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" | jq -r '.symbols[0].symbol')\n\n# Then, get LunarCrush data for that symbol\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/lunarcrush?symbol=${SYMBOL}\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"symbol\": \"BTC/USD\",\n  \"lunarcrush\": {\n    \"galaxy_score\": 72.5,\n    \"alt_rank\": 1,\n    \"social_volume_24h\": 15234,\n    \"sentiment\": 68.3,\n    \"percent_change_24h\": 2.45,\n    \"volatility\": 0.032,\n    \"price\": \"95000.12345678\",\n    \"volume_24h\": \"45000000000.00000000\",\n    \"market_cap\": \"1850000000000.00000000\",\n    \"market_cap_rank\": 1,\n    \"social_dominance\": 45.2,\n    \"market_dominance\": 52.1,\n    \"interactions_24h\": 890000,\n    \"galaxy_score_previous\": 70.1,\n    \"alt_rank_previous\": 1\n  },\n  \"updated_at\": \"2026-02-14T08:30:00.000Z\"\n}\n```\n\n**LunarCrush Field Descriptions:**\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `galaxy_score` | Float | Overall coin quality score (0-100) combining social, market, and developer activity |\n| `alt_rank` | Int | Rank among all cryptocurrencies (lower is better, 1 = best) |\n| `social_volume_24h` | Float | Social media mentions in last 24 hours |\n| `sentiment` | Float | Market sentiment score (0-100, 50 is neutral, >50 is bullish) |\n| `percent_change_24h` | Float | Price change percentage in last 24 hours |\n| `volatility` | Float | Price volatility score (0-1, <0.02 stable, 0.02-0.05 normal, >0.05 risky) |\n| `price` | String | Current price in USD (decimal string for precision) |\n| `volume_24h` | String | Trading volume in last 24 hours (decimal string) |\n| `market_cap` | String | Market capitalization (decimal string) |\n| `market_cap_rank` | Int | Rank by market cap (lower is better) |\n| `social_dominance` | Float | Social volume relative to total market |\n| `market_dominance` | Float | Market cap relative to total market |\n| `interactions_24h` | Float | Social media interactions in last 24 hours |\n| `galaxy_score_previous` | Float | Previous galaxy score (for trend analysis) |\n| `alt_rank_previous` | Int | Previous alt rank (for trend analysis) |\n\n**Data Freshness:**\n- LunarCrush data is cached and updated periodically by a background worker\n- Check the `updated_at` field to see when the data was last refreshed\n- Data is typically refreshed every few hours\n\n### Get Account Balance\n\nRetrieve USDC and ETH balance for the user's Ostium wallet address.\n\n> **⚠️ Dependency**: The `address` field is the user's Ostium wallet address (`user_wallet`). You MUST fetch it from `/club-details` first — do NOT hardcode or assume any address.\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/balance\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\"address\": \"0x...\"}\"\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"address\": \"0x...\",\n  \"usdcBalance\": \"1000.50\",\n  \"ethBalance\": \"0.045\"\n}\n```\n\n### Get Portfolio Positions\n\nGet all open positions for the user's Ostium trading account. **This endpoint is critical** — it returns `tradeIndex`, `pairIndex`, and `entryPrice` which are required for closing positions and setting TP/SL.\n\n> **⚠️ Dependency**: The `address` field must come from `/club-details` → `user_wallet`. NEVER guess it.\n>\n> **🔑 This endpoint provides values needed by**: `/close-position` (needs `tradeIndex`), `/set-take-profit` (needs `tradeIndex`, `pairIndex`, `entryPrice`), `/set-stop-loss` (needs `tradeIndex`, `pairIndex`, `entryPrice`).\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/positions\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\"address\": \"0x...\"}\"\n```\n\n**Request Body:**\n```json\n{\n  \"address\": \"0x...\"  // REQUIRED — from /club-details → user_wallet. NEVER guess this.\n}\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"positions\": [\n    {\n      \"market\": \"BTC\",\n      \"marketFull\": \"BTC/USD\",\n      \"side\": \"long\",\n      \"collateral\": 100.0,\n      \"entryPrice\": 95000.0,\n      \"leverage\": 10.0,\n      \"tradeId\": \"12345\",\n      \"tradeIndex\": 2,\n      \"pairIndex\": \"0\",\n      \"notionalUsd\": 1000.0,\n      \"totalFees\": 2.50,\n      \"stopLossPrice\": 85500.0,\n      \"takeProfitPrice\": 0.0\n    }\n  ],\n  \"totalPositions\": 1\n}\n```\n\n> **Key fields to extract from each position:**\n> - `tradeIndex` — needed for `/close-position`, `/set-take-profit`, `/set-stop-loss`\n> - `pairIndex` — needed for `/set-take-profit`, `/set-stop-loss`\n> - `entryPrice` — needed for `/set-take-profit`, `/set-stop-loss`\n> - `side` — needed for `/set-take-profit`, `/set-stop-loss`\n```\n\n### Get Position History\n\nGet raw trading history for an address (includes open, close, cancelled orders, etc.).\n\n**Note:** The user's Ostium wallet address can be fetched from the `/api/lazy-trading/programmatic/club-details` endpoint (see Get Account Balance section above).\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/history\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"address\": \"0x...\", \"count\": 50}'\n```\n\n**Request Body:**\n```json\n{\n  \"address\": \"0x...\",  // User's Ostium wallet address (required)\n  \"count\": 50           // Number of recent orders to retrieve (default: 50)\n}\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"history\": [\n    {\n      \"market\": \"ETH\",\n      \"side\": \"long\",\n      \"collateral\": 50.0,\n      \"leverage\": 5,\n      \"price\": 3200.0,\n      \"pnlUsdc\": 15.50,\n      \"profitPercent\": 31.0,\n      \"totalProfitPercent\": 31.0,\n      \"rolloverFee\": 0.05,\n      \"fundingFee\": 0.10,\n      \"executedAt\": \"2025-02-10T15:30:00Z\",\n      \"tradeId\": \"trade_123\"\n    }\n  ],\n  \"count\": 25\n}\n```\n\n### Open Position\n\nOpen a new perpetual futures position on Ostium.\n\n> **⚠️ Dependencies — ALL must be resolved BEFORE calling this endpoint:**\n> 1. `agentAddress` → from `/club-details` → `ostium_agent_address` (NEVER guess)\n> 2. `userAddress` → from `/club-details` → `user_wallet` (NEVER guess)\n> 3. `market` → validate via `/symbols` endpoint if unsure the token exists\n>    - If `/symbols` returns `ETH/USD`, pass `market: \"ETH\"` to `/open-position` (not `ETH/USD`)\n> 4. `side`, `collateral`, `leverage` → **ASK the user explicitly**, do not assume\n>\n> **📊 Recommended Pre-Trade Flow:**\n> 1. Call `/lunarcrush?symbol=TOKEN/USD` or `/market-data` to get market conditions\n> 2. Present the market data to the user (price, sentiment, volatility)\n> 3. Ask the user: \"Do you want to proceed? Specify: collateral (USDC), leverage, long/short\"\n> 4. Only after user confirms → call `/open-position`\n>\n> **🔑 SAVE the response** — `actualTradeIndex` and `entryPrice` are needed for setting TP/SL later.\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/open-position\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agentAddress\": \"0x...\",\n    \"userAddress\": \"0x...\",\n    \"market\": \"BTC\",\n    \"side\": \"long\",\n    \"collateral\": 100,\n    \"leverage\": 10\n  }'\n```\n\n**Request Body:**\n```json\n{\n  \"agentAddress\": \"0x...\",      // REQUIRED — from /club-details → ostium_agent_address. NEVER guess.\n  \"userAddress\": \"0x...\",       // REQUIRED — from /club-details → user_wallet. NEVER guess.\n  \"market\": \"BTC\",              // REQUIRED — Base token only for Ostium (e.g. \"ETH\", not \"ETH/USD\"). Validate via /symbols if unsure.\n  \"side\": \"long\",               // REQUIRED — \"long\" or \"short\". ASK the user.\n  \"collateral\": 100,            // REQUIRED — Collateral in USDC. ASK the user.\n  \"leverage\": 10,               // Optional (default: 10). ASK the user.\n  \"deploymentId\": \"uuid...\",    // Optional — associated deployment ID\n  \"signalId\": \"uuid...\",        // Optional — associated signal ID\n  \"isTestnet\": false            // Optional (default: false)\n}\n```\n\n**Response (IMPORTANT — save these values):**\n```json\n{\n  \"success\": true,\n  \"orderId\": \"order_123\",\n  \"tradeId\": \"trade_abc\",\n  \"transactionHash\": \"0x...\",\n  \"txHash\": \"0x...\",\n  \"status\": \"OPEN\",\n  \"message\": \"Position opened successfully\",\n  \"actualTradeIndex\": 2,       // ← SAVE THIS — needed for /set-take-profit and /set-stop-loss\n  \"entryPrice\": 95000.0         // ← SAVE THIS — needed for /set-take-profit and /set-stop-loss\n}\n```\n\n### Close Position\n\nClose an existing perpetual futures position on Ostium.\n\n> **⚠️ Dependencies — resolve BEFORE calling this endpoint:**\n> 1. `agentAddress` → from `/club-details` → `ostium_agent_address`\n> 2. `userAddress` → from `/club-details` → `user_wallet`\n> 3. `tradeIndex` → call `/positions` first to find the position you want to close, then use its `tradeIndex`\n>\n> **NEVER guess the `tradeIndex` or `tradeId`.** Always fetch from `/positions` endpoint.\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/close-position\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agentAddress\": \"0x...\",\n    \"userAddress\": \"0x...\",\n    \"market\": \"BTC\",\n    \"tradeId\": \"12345\"\n  }'\n```\n\n**Request Body:**\n```json\n{\n  \"agentAddress\": \"0x...\",      // REQUIRED — from /club-details → ostium_agent_address. NEVER guess.\n  \"userAddress\": \"0x...\",       // REQUIRED — from /club-details → user_wallet. NEVER guess.\n  \"market\": \"BTC\",              // REQUIRED — Token symbol\n  \"tradeId\": \"12345\",           // Optional — from /positions → tradeId\n  \"actualTradeIndex\": 2,         // Highly recommended — from /positions → tradeIndex. NEVER guess.\n  \"isTestnet\": false            // Optional (default: false)\n}\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"result\": {\n    \"txHash\": \"0x...\",\n    \"market\": \"BTC\",\n    \"closePnl\": 25.50\n  },\n  \"closePnl\": 25.50,\n  \"message\": \"Position closed successfully\",\n  \"alreadyClosed\": false\n}\n```\n\n### Set Take Profit\n\nSet or update take-profit level for an existing position on Ostium.\n\n> **⚠️ Dependencies — you need ALL of these before calling:**\n> 1. `agentAddress` → from `/club-details` → `ostium_agent_address`\n> 2. `userAddress` → from `/club-details` → `user_wallet`\n> 3. `tradeIndex` → from `/open-position` response → `actualTradeIndex`, **OR** from `/positions` → `tradeIndex`\n> 4. `entryPrice` → from `/open-position` response → `entryPrice`, **OR** from `/positions` → `entryPrice`\n> 5. `pairIndex` → from `/positions` → `pairIndex`, **OR** from `/symbols` → symbol `id`\n> 6. `takeProfitPercent` → **ASK the user** (default: 0.30 = 30%)\n> 7. `side` → from `/positions` → `side` (\"long\" or \"short\")\n>\n> **If you just opened a position:** Use `actualTradeIndex` and `entryPrice` from the `/open-position` response.\n> **If the position was opened earlier:** Call `/positions` to fetch `tradeIndex`, `entryPrice`, `pairIndex`, and `side`.\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/set-take-profit\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agentAddress\": \"0x...\",\n    \"userAddress\": \"0x...\",\n    \"market\": \"BTC\",\n    \"tradeIndex\": 2,\n    \"takeProfitPercent\": 0.30,\n    \"entryPrice\": 90000,\n    \"pairIndex\": 0\n  }'\n```\n\n**Request Body:**\n```json\n{\n  \"agentAddress\": \"0x...\",        // REQUIRED — from /club-details. NEVER guess.\n  \"userAddress\": \"0x...\",         // REQUIRED — from /club-details. NEVER guess.\n  \"market\": \"BTC\",                // REQUIRED — Token symbol\n  \"tradeIndex\": 2,                // REQUIRED — from /open-position or /positions. NEVER guess.\n  \"takeProfitPercent\": 0.30,       // Optional (default: 0.30 = 30%). ASK the user.\n  \"entryPrice\": 90000,             // REQUIRED — from /open-position or /positions. NEVER guess.\n  \"pairIndex\": 0,                  // REQUIRED — from /positions or /symbols. NEVER guess.\n  \"side\": \"long\",                  // Optional (default: \"long\") — from /positions.\n  \"isTestnet\": false              // Optional (default: false)\n}\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"message\": \"Take profit set successfully\",\n  \"tpPrice\": 117000.0\n}\n```\n\n### Set Stop Loss\n\nSet or update stop-loss level for an existing position on Ostium.\n\n> **⚠️ Dependencies — identical to Set Take Profit. You need ALL of these before calling:**\n> 1. `agentAddress` → from `/club-details` → `ostium_agent_address`\n> 2. `userAddress` → from `/club-details` → `user_wallet`\n> 3. `tradeIndex` → from `/open-position` response → `actualTradeIndex`, **OR** from `/positions` → `tradeIndex`\n> 4. `entryPrice` → from `/open-position` response → `entryPrice`, **OR** from `/positions` → `entryPrice`\n> 5. `pairIndex` → from `/positions` → `pairIndex`, **OR** from `/symbols` → symbol `id`\n> 6. `stopLossPercent` → **ASK the user** (default: 0.10 = 10%)\n> 7. `side` → from `/positions` → `side` (\"long\" or \"short\")\n>\n> **If you just opened a position:** Use `actualTradeIndex` and `entryPrice` from the `/open-position` response.\n> **If the position was opened earlier:** Call `/positions` to fetch `tradeIndex`, `entryPrice`, `pairIndex`, and `side`.\n\n```bash\n# Same dependency resolution as Set Take Profit (see above for full example)\n# Step 1: Get addresses from /club-details\n# Step 2: Get position details from /positions\n# Step 3: Set stop loss with user-specified stopLossPercent\n\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/set-stop-loss\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agentAddress\": \"0x...\",\n    \"userAddress\": \"0x...\",\n    \"market\": \"BTC\",\n    \"tradeIndex\": 2,\n    \"stopLossPercent\": 0.10,\n    \"entryPrice\": 90000,\n    \"pairIndex\": 0,\n    \"side\": \"long\"\n  }'\n```\n\n**Request Body:**\n```json\n{\n  \"agentAddress\": \"0x...\",        // REQUIRED — from /club-details. NEVER guess.\n  \"userAddress\": \"0x...\",         // REQUIRED — from /club-details. NEVER guess.\n  \"market\": \"BTC\",                // REQUIRED — Token symbol\n  \"tradeIndex\": 2,                // REQUIRED — from /open-position or /positions. NEVER guess.\n  \"stopLossPercent\": 0.10,         // Optional (default: 0.10 = 10%). ASK the user.\n  \"entryPrice\": 90000,             // REQUIRED — from /open-position or /positions. NEVER guess.\n  \"pairIndex\": 0,                  // REQUIRED — from /positions or /symbols. NEVER guess.\n  \"side\": \"long\",                  // Optional (default: \"long\") — from /positions.\n  \"isTestnet\": false              // Optional (default: false)\n}\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"message\": \"Stop loss set successfully\",\n  \"slPrice\": 81000.0,\n  \"liquidationPrice\": 85500.0,\n  \"adjusted\": false\n}\n```\n\n### Get All Market Data\n\nRetrieve the complete market snapshot from Ostium, including all symbols and their full LunarCrush metrics. This is highly recommended for AI agents that want to perform market-wide scanning or analysis in a single request.\n\n```bash\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/market-data\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 0,\n      \"symbol\": \"BTC/USD\",\n      \"group\": \"crypto\",\n      \"maxLeverage\": 150,\n      \"metrics\": {\n        \"galaxy_score\": 72.5,\n        \"alt_rank\": 1,\n        \"social_volume_24h\": 15234,\n        \"sentiment\": 68.3,\n        \"percent_change_24h\": 2.45,\n        \"volatility\": 0.032,\n        \"price\": \"95000.12345678\",\n        \"volume_24h\": \"45000000000.00000000\",\n        \"market_cap\": \"1850000000000.00000000\",\n        \"market_cap_rank\": 1,\n        \"social_dominance\": 45.2,\n        \"market_dominance\": 52.1,\n        \"interactions_24h\": 890000,\n        \"galaxy_score_previous\": 70.1,\n        \"alt_rank_previous\": 1\n      },\n      \"updated_at\": \"2026-02-14T08:30:00.000Z\"\n    },\n    ...\n  ],\n  \"count\": 45\n}\n```\n\n### Get Token Price\n\nFetch the current market price for a token from Ostium price feed.\n\n```bash\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/price?token=BTC&isTestnet=false\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Query Parameters:**\n| Parameter | Type | Required | Description |\n|-----------|-------|----------|-------------|\n| `token` | string | Yes | Token symbol to fetch price for (e.g., BTC, ETH, SOL) |\n| `isTestnet` | boolean | No | Use testnet price feed (default: false) |\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"token\": \"BTC\",\n  \"price\": 95000.0,\n  \"isMarketOpen\": true,\n  \"isDayTradingClosed\": false\n}\n```\n\n### Discover Traders to Copy (Copy Trading — Step 1)\n\nDiscover other OpenClaw Traders and top-performing traders to potentially copy-trade. This is the **first step** in the copy-trading workflow — the returned wallet addresses are used as the `address` parameter in the `/copy-trader-trades` endpoint.\n\n> **⚠️ Dependency Chain**: This endpoint provides the wallet addresses needed by `/copy-trader-trades`. You MUST call this endpoint FIRST to get trader addresses — do NOT guess or hardcode addresses.\n\n```bash\n# Get all traders (OpenClaw + Leaderboard)\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/copy-traders\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n\n# Get only OpenClaw Traders (prioritized)\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/copy-traders?source=openclaw\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n\n# Get only Leaderboard traders with filters\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/copy-traders?source=leaderboard&minImpactFactor=50&minTrades=100\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Query Parameters:**\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `source` | string | `all` | `openclaw` (OpenClaw agents only), `leaderboard` (top traders only), `all` (both) |\n| `limit` | int | 20 | Max results per tier (max 100) |\n| `minTrades` | int | — | Min trade count filter (leaderboard only) |\n| `minImpactFactor` | float | — | Min impact factor filter (leaderboard only) |\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"openclawTraders\": [\n    {\n      \"agentId\": \"3dbc322f-...\",\n      \"agentName\": \"OpenClaw Trader - 140226114735\",\n      \"creatorWallet\": \"0x4e7f1e29d9e1f81c3e9249e3444843c2006f3325\",\n      \"venue\": \"OSTIUM\",\n      \"status\": \"PRIVATE\",\n      \"isCopyTradeClub\": false,\n      \"performance\": {\n        \"apr30d\": 0,\n        \"apr90d\": 0,\n        \"aprSinceInception\": 0,\n        \"sharpe30d\": 0\n      },\n      \"deployment\": {\n        \"id\": \"dep-uuid\",\n        \"status\": \"ACTIVE\",\n        \"safeWallet\": \"0x...\",\n        \"isTestnet\": false\n      }\n    }\n  ],\n  \"topTraders\": [\n    {\n      \"walletAddress\": \"0xabc...\",\n      \"totalVolume\": \"1500000.000000\",\n      \"totalClosedVolume\": \"1200000.000000\",\n      \"totalPnl\": \"85000.000000\",\n      \"totalProfitTrades\": 120,\n      \"totalLossTrades\": 30,\n      \"totalTrades\": 150,\n      \"winRate\": 0.80,\n      \"lastActiveAt\": \"2026-02-15T10:30:00.000Z\",\n      \"scores\": {\n        \"edgeScore\": 0.82,\n        \"consistencyScore\": 0.75,\n        \"stakeScore\": 0.68,\n        \"freshnessScore\": 0.92,\n        \"impactFactor\": 72.5\n      },\n      \"updatedAt\": \"2026-02-17T06:00:00.000Z\"\n    }\n  ],\n  \"openclawCount\": 5,\n  \"topTradersCount\": 20\n}\n```\n\n**Key fields to use in next steps:**\n- `openclawTraders[].creatorWallet` → use as `address` in `/copy-trader-trades`\n- `topTraders[].walletAddress` → use as `address` in `/copy-trader-trades`\n\n### Get Trader's Recent Trades (Copy Trading — Step 2)\n\nFetch recent on-chain trades for a specific trader address. This queries the Ostium subgraph in real-time for fresh trade data.\n\n> **⚠️ Dependency**: The `address` parameter MUST come from the `/copy-traders` endpoint response:\n> - For OpenClaw traders: use `creatorWallet` from `openclawTraders[]`\n> - For leaderboard traders: use `walletAddress` from `topTraders[]`\n>\n> **NEVER guess or hardcode the address.** Always call `/copy-traders` first.\n\n```bash\n# Step 1: Discover traders first\nTRADER_ADDRESS=$(curl -s -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/copy-traders?source=openclaw\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" | jq -r '.openclawTraders[0].creatorWallet')\n\n# Step 2: Fetch their recent trades\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/copy-trader-trades?address=${TRADER_ADDRESS}\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n\n# With custom lookback and limit\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/copy-trader-trades?address=${TRADER_ADDRESS}&hours=48&limit=50\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Query Parameters:**\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `address` | string | *required* | Trader wallet address (from `/copy-traders`) |\n| `limit` | int | 20 | Max trades to return (max 50) |\n| `hours` | int | 24 | Lookback window in hours (max 168 / 7 days) |\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"traderAddress\": \"0x4e7f1e29d9e1f81c3e9249e3444843c2006f3325\",\n  \"trades\": [\n    {\n      \"tradeId\": \"0x123...\",\n      \"side\": \"LONG\",\n      \"tokenSymbol\": \"BTC\",\n      \"pair\": \"BTC/USD\",\n      \"collateral\": 500.00,\n      \"leverage\": 10.0,\n      \"entryPrice\": 95000.50,\n      \"takeProfitPrice\": 100000.00,\n      \"stopLossPrice\": 90000.00,\n      \"timestamp\": \"2026-02-17T14:30:00.000Z\"\n    }\n  ],\n  \"count\": 5,\n  \"lookbackHours\": 24\n}\n```\n\n**Trade Field Descriptions:**\n| Field | Description |\n|-------|-------------|\n| `side` | `\"LONG\"` or `\"SHORT\"` — the trade direction |\n| `tokenSymbol` | Token being traded (e.g., `BTC`, `ETH`) |\n| `pair` | Full pair label (e.g., `BTC/USD`) |\n| `collateral` | USDC amount used as collateral |\n| `leverage` | Leverage multiplier (e.g., 10.0 = 10x) |\n| `entryPrice` | Price at which the trade was opened |\n| `takeProfitPrice` | Take profit price (null if not set) |\n| `stopLossPrice` | Stop loss price (null if not set) |\n| `timestamp` | When the trade was opened |\n\n> **Next step**: After reviewing the trades, use `/open-position` to open a similar position. You'll need your own `agentAddress` and `userAddress` from `/club-details`.\n\n## Signal Format Examples\n\nThe lazy trading system processes natural language trading signals. Here are examples:\n\n### Opening Positions\n- `\"Long ETH with 5x leverage, entry at 3200\"`\n- `\"Short BTC 10x, TP 60000, SL 68000\"`\n- `\"Buy 100 USDC worth of ETH perpetual\"`\n\n### With Risk Management\n- `\"Long SOL 3x leverage, entry 150, take profit 180, stop loss 140\"`\n- `\"Short AVAX 5x, risk 2% of portfolio\"`\n\n### Closing Positions\n- `\"Close ETH long position\"`\n- `\"Take profit on BTC short\"`\n\n---\n\n## Complete Workflow Examples\n\nThese are the mandatory step-by-step workflows for common trading operations. **Follow these exactly.**\n\n### Workflow 1: Opening a New Position (Full Flow)\n\n```\nStep 1: GET /club-details\n   → Extract: user_wallet (→ userAddress), ostium_agent_address (→ agentAddress)\n   → Cache these for the session\n\nStep 2: GET /symbols\n   → Verify the user's requested token is available on Ostium\n   → Extract exact symbol string and maxLeverage\n   → Convert pair format to market token for /open-position:\n     \"ETH/USD\" -> \"ETH\"\n\nStep 3: GET /lunarcrush?symbol=TOKEN/USD  (or GET /market-data for all)\n   → Get market data: price, sentiment, volatility, galaxy_score\n   → Present this data to the user:\n     \"BTC is currently at $95,000 with sentiment 68.3 (bullish) and volatility 0.032 (normal).\n      Galaxy Score: 72.5/100. Do you want to proceed?\"\n\nStep 4: ASK the user for trade parameters\n   → \"Please confirm: collateral (USDC), leverage, long or short?\"\n   → \"Would you like to set TP and SL? If so, what percentages?\"\n   → Wait for explicit user confirmation before proceeding\n\nStep 5: POST /open-position\n   → Use agentAddress and userAddress from Step 1\n   → Use market, side, collateral, leverage from Step 4\n   → IMPORTANT: Pass market as base token only (e.g. ETH), not pair format (ETH/USD)\n   → SAVE the response: actualTradeIndex and entryPrice\n\nStep 6 (if user wants TP/SL): POST /set-take-profit and/or POST /set-stop-loss\n   → Use tradeIndex = actualTradeIndex from Step 5\n   → Use entryPrice from Step 5\n   → For pairIndex, use the symbol id from Step 2 or call /positions\n   → Use takeProfitPercent/stopLossPercent from Step 4\n```\n\n### Workflow 2: Closing an Existing Position\n\n```\nStep 1: GET /club-details\n   → Extract: user_wallet, ostium_agent_address\n\nStep 2: POST /positions (address = user_wallet from Step 1)\n   → List all open positions\n   → Present them to the user if multiple: \"You have 3 open positions: BTC long, ETH short, SOL long. Which one do you want to close?\"\n   → Extract the tradeIndex for the position to close\n\nStep 3: POST /close-position\n   → Use agentAddress and userAddress from Step 1\n   → Use market and actualTradeIndex from Step 2\n   → Show the user the closePnl from the response\n```\n\n### Workflow 3: Setting TP/SL on an Existing Position\n\n```\nStep 1: GET /club-details\n   → Extract: user_wallet, ostium_agent_address\n\nStep 2: POST /positions (address = user_wallet from Step 1)\n   → Find the target position\n   → Extract: tradeIndex, entryPrice, pairIndex, side\n\nStep 3: ASK the user\n   → \"Position: BTC long at $95,000. Current TP: none, SL: $85,500.\"\n   → \"What TP% and SL% would you like to set?\"\n\nStep 4: POST /set-take-profit and/or POST /set-stop-loss\n   → Use ALL values from Steps 1-3 — NEVER guess any of them\n```\n\n### Workflow 4: Checking Portfolio & Market Overview\n\n```\nStep 1: GET /club-details\n   → Extract: user_wallet\n\nStep 2: POST /balance (address = user_wallet)\n   → Show the user their USDC and ETH balances\n\nStep 3: POST /positions (address = user_wallet)\n   → Show all open positions with PnL details\n\nStep 4 (optional): GET /market-data\n   → Show market conditions for tokens they hold\n```\n\n### Workflow 5: Copy-Trading Another OpenClaw Agent (Full Flow)\n\n```\nStep 1: GET /copy-traders?source=openclaw\n   → Discover other OpenClaw Trader agents\n   → Extract: creatorWallet from the trader you want to copy\n   → IMPORTANT: This is a REQUIRED first step — you cannot call\n     /copy-trader-trades without an address from this endpoint\n\nStep 2: GET /copy-trader-trades?address={creatorWallet}\n   → Fetch recent trades for that trader from the Ostium subgraph\n   → Review: side (LONG/SHORT), tokenSymbol, leverage, collateral, entry price\n   → Decide: \"Should I copy this trade?\"\n   → DEPENDENCY: The address param comes from Step 1 (creatorWallet or walletAddress)\n\nStep 3: GET /club-details\n   → Get YOUR OWN userAddress (user_wallet) and agentAddress (ostium_agent_address)\n   → These are needed to execute your own trade\n\nStep 4: POST /open-position\n   → Mirror the trade from Step 2 using your own addresses from Step 3:\n     - market = tokenSymbol from the copied trade\n     - side = side from the copied trade (LONG/SHORT → long/short)\n     - collateral = decide based on your own risk tolerance\n     - leverage = match the copied trader's leverage or adjust\n   → SAVE: actualTradeIndex and entryPrice from response\n\nStep 5 (optional): POST /set-take-profit and/or POST /set-stop-loss\n   → Use actualTradeIndex and entryPrice from Step 4\n   → Match the copied trader's TP/SL ratios or set your own\n```\n\n**Dependency Chain Summary:**\n```\n/copy-traders → provides address → /copy-trader-trades → provides trade details\n/club-details → provides your addresses → /open-position → copies the trade\n```\n\n---\n\n## Aster DEX (BNB Chain) Endpoints\n\n> Aster DEX is a perpetual futures exchange on BNB Chain. Use Aster endpoints when the user wants to trade on BNB Chain. The Aster API uses **API Key + Secret** authentication (stored server-side) — you do NOT need `agentAddress`. You only need `userAddress` from `/club-details`.\n\n### Venue Selection\n\n| Venue | Chain | Symbol Format | Auth Required | When to Use |\n|-------|-------|--------------|---------------|-------------|\n| **Ostium** | Arbitrum | `BTC`, `ETH` | `agentAddress` + `userAddress` | Default for most trades |\n| **Aster** | BNB Chain | `BTCUSDT`, `ETHUSDT` | `userAddress` only | When user specifies BNB Chain or Aster |\n\n**How to check if Aster is configured:** In the `/club-details` response, `aster_configured: true` means the user has set up Aster API keys. If `false`, direct them to set up Aster at maxxit.ai/openclaw.\n\n### Aster Symbols\n\nAster uses Binance-style symbol format: `BTCUSDT`, `ETHUSDT`, etc. The API auto-appends `USDT` if you pass just `BTC`.\n\n```bash\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/symbols\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"symbols\": [\n    {\n      \"symbol\": \"BTCUSDT\",\n      \"baseAsset\": \"BTC\",\n      \"quoteAsset\": \"USDT\",\n      \"pricePrecision\": 2,\n      \"quantityPrecision\": 3,\n      \"contractType\": \"PERPETUAL\",\n      \"status\": \"TRADING\"\n    }\n  ],\n  \"count\": 50\n}\n```\n\n### Aster Price\n\n```bash\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/price?token=BTC\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"token\": \"BTC\",\n  \"symbol\": \"BTCUSDT\",\n  \"price\": 95000.50\n}\n```\n\n### Aster Market Data\n\n```bash\ncurl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/market-data?symbol=BTC\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\"\n```\n\n### Aster Balance\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/balance\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userAddress\": \"0x...\"\n  }'\n```\n\n**Request Body:**\n```json\n{\n  \"userAddress\": \"0x...\"    // REQUIRED — from /club-details → user_wallet. NEVER guess.\n}\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"balance\": 1000.50,\n  \"availableBalance\": 800.25,\n  \"unrealizedProfit\": 50.10\n}\n```\n\n### Aster Positions\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/positions\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userAddress\": \"0x...\"\n  }'\n```\n\n**Response:**\n```json\n{\n  \"success\": true,\n  \"positions\": [\n    {\n      \"symbol\": \"BTCUSDT\",\n      \"positionAmt\": 0.01,\n      \"entryPrice\": 95000.0,\n      \"markPrice\": 96000.0,\n      \"unrealizedProfit\": 10.0,\n      \"liquidationPrice\": 80000.0,\n      \"leverage\": 10,\n      \"side\": \"long\"\n    }\n  ],\n  \"count\": 1\n}\n```\n\n### Aster Open Position\n\n> **📋 LLM Pre-Call Checklist — Ask the user these questions before calling this endpoint:**\n> 1. **Symbol**: \"Which token do you want to trade?\" (e.g. BTC, ETH, SOL)\n> 2. **Side**: \"Long or short?\"\n> 3. **Quantity**: \"How much [TOKEN] do you want to trade?\" — get the answer in base asset units (e.g. `0.01 BTC`, `0.5 ETH`).\n> 4. **Leverage**: \"What leverage? (e.g. 10x)\"\n> 5. **Order type**: \"Market order or limit order?\" (default: MARKET). If LIMIT, also ask for the limit price.\n>\n> **Aster requires `quantity` (base asset) for open-position. Do not use collateral.**\n> **NEVER call this endpoint without a confirmed `quantity` in base asset units.**\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/open-position\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userAddress\": \"0x...\",\n    \"symbol\": \"BTC\",\n    \"side\": \"long\",\n    \"quantity\": 0.01,\n    \"leverage\": 10\n  }'\n```\n\n**Request Body:**\n```json\n{\n  \"userAddress\": \"0x...\",     // REQUIRED — from /club-details → user_wallet. NEVER guess.\n  \"symbol\": \"BTC\",           // REQUIRED — Token name or full symbol (BTCUSDT). ASK the user.\n  \"side\": \"long\",            // REQUIRED — \"long\" or \"short\". ASK the user.\n  \"quantity\": 0.01,          // REQUIRED — Position size in BASE asset (e.g. 0.01 BTC). ASK the user.\n  \"leverage\": 10,            // Optional — Leverage multiplier. ASK the user.\n  \"type\": \"MARKET\",          // Optional — \"MARKET\" (default) or \"LIMIT\". ASK the user.\n  \"price\": 95000             // Required only for LIMIT orders. ASK the user if type is LIMIT.\n}\n```\n\n> ⚠️ **IMPORTANT:** `quantity` must always be specified in the **base asset** (e.g. `0.01` for 0.01 BTC).  \n> If the user provides a USDT/collateral amount, ask them to provide the exact token quantity instead.  \n> Do not convert collateral to quantity in this workflow.\n\n**Response (IMPORTANT — save these values):**\n```json\n{\n  \"success\": true,\n  \"orderId\": 12345678,\n  \"symbol\": \"BTCUSDT\",\n  \"side\": \"BUY\",\n  \"status\": \"FILLED\",\n  \"avgPrice\": \"95000.50\",\n  \"executedQty\": \"0.010\",\n  \"message\": \"Position opened: long BTCUSDT\"\n}\n```\n\n### Aster Close Position\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/close-position\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userAddress\": \"0x...\",\n    \"symbol\": \"BTC\"\n  }'\n```\n\n**Request Body:**\n```json\n{\n  \"userAddress\": \"0x...\",    // REQUIRED\n  \"symbol\": \"BTC\",          // REQUIRED\n  \"quantity\": 0.005         // Optional — omit to close full position\n}\n```\n\n### Aster Set Take Profit\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/set-take-profit\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userAddress\": \"0x...\",\n    \"symbol\": \"BTC\",\n    \"takeProfitPercent\": 0.30,\n    \"entryPrice\": 95000,\n    \"side\": \"long\"\n  }'\n```\n\n**Request Body (two options):**\n```json\n{\n  \"userAddress\": \"0x...\",\n  \"symbol\": \"BTC\",\n  \"stopPrice\": 123500          // Option A: exact trigger price\n}\n```\n```json\n{\n  \"userAddress\": \"0x...\",\n  \"symbol\": \"BTC\",\n  \"takeProfitPercent\": 0.30,   // Option B: percentage (0.30 = 30%)\n  \"entryPrice\": 95000,\n  \"side\": \"long\"\n}\n```\n\n### Aster Set Stop Loss\n\nSame pattern as take profit:\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/set-stop-loss\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userAddress\": \"0x...\",\n    \"symbol\": \"BTC\",\n    \"stopLossPercent\": 0.10,\n    \"entryPrice\": 95000,\n    \"side\": \"long\"\n  }'\n```\n\n### Aster Change Leverage\n\n```bash\ncurl -L -X POST \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/aster/change-leverage\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"userAddress\": \"0x...\",\n    \"symbol\": \"BTC\",\n    \"leverage\": 20\n  }'\n```\n\n### Aster Parameter Dependency Graph\n\n| Parameter | Source | How to Get |\n|-----------|--------|-----------|\n| `userAddress` | `/club-details` → `user_wallet` | `GET /club-details` |\n| `aster_configured` | `/club-details` → `aster_configured` | `GET /club-details` (must be `true`) |\n| `symbol` | User specifies token | User input (auto-resolved: `BTC` → `BTCUSDT`) |\n| `side` | User specifies `\"long\"` or `\"short\"` | User input (required) |\n| `quantity` | User specifies in base asset units (e.g. `0.01 BTC`) | User input (required). If user provides USDT/collateral amount, ask for quantity instead. Do not calculate in the workflow. |\n| `leverage` | User specifies | User input |\n| `entryPrice` | `/aster/positions` → `entryPrice` | From position data |\n| `stopPrice` | User specifies or calculated from percent | User input or calculated |\n\n### Aster Workflow: Open Position on BNB Chain\n\n```\nStep 1: GET /club-details\n   → Extract: user_wallet\n   → Check: aster_configured == true (if false, tell user to set up Aster at maxxit.ai/openclaw)\n\nStep 2: GET /aster/symbols\n   → Verify the token is available on Aster\n\nStep 3: GET /aster/price?token=BTC\n   → Get current price, present to user\n\nStep 4: ASK the user for ALL trade parameters\n   → \"Which token?\" (e.g. BTC, ETH, SOL)\n   → \"Long or short?\"\n   → \"How much [TOKEN] do you want to buy/sell?\" — collect answer in BASE asset units (e.g. 0.01 BTC)\n       • If user gives a USDT/collateral amount, ask them to provide token quantity instead.\n   → \"Leverage? (e.g. 10x)\"\n   → \"Market or limit order?\" — if LIMIT, also ask for the limit price\n\nStep 5: POST /aster/open-position\n   → Use userAddress from Step 1\n   → Use symbol, side, quantity (base asset), leverage from Step 4\n   → SAVE orderId and avgPrice from response\n\nStep 6 (if user wants TP/SL): POST /aster/set-take-profit and/or POST /aster/set-stop-loss\n   → Use entryPrice = avgPrice from Step 5\n   → Use side from Step 4\n   → Ask user for takeProfitPercent / stopLossPercent (or exact stopPrice)\n```\n\n### Aster Workflow: Close Position\n\n```\nStep 1: GET /club-details → Extract user_wallet\n\nStep 2: POST /aster/positions (userAddress = user_wallet)\n   → Show positions to user, let them pick which to close\n\nStep 3: POST /aster/close-position\n   → Pass userAddress and symbol\n   → Omit quantity to close full position\n```\n\n---\n\n## Environment Variables\n\n| Variable | Description | Example |\n|----------|-------------|---------|\n| `MAXXIT_API_KEY` | Your lazy trading API key (starts with `lt_`) | `lt_abc123...` |\n| `MAXXIT_API_URL` | Maxxit API base URL | `https://maxxit.ai` |\n\n## Error Handling\n\n| Status Code | Meaning |\n|-------------|---------|\n| 401 | Invalid or missing API key |\n| 404 | Lazy trader agent not found (complete setup first) |\n| 400 | Missing or invalid message / parameters |\n| 405 | Wrong HTTP method |\n| 500 | Server error |\n\n## Getting Started\n\n1. **Set up Lazy Trading**: Visit https://maxxit.ai/lazy-trading to connect your wallet and configure your agent\n2. **Generate API Key**: Go to your dashboard and create an API key\n3. **Configure Environment**: Set `MAXXIT_API_KEY` and `MAXXIT_API_URL`\n4. **Start Trading**: Use this skill to send signals!\n\n## Security Notes\n\n- Never share your API key\n- API keys can be revoked and regenerated from the dashboard\n- All trades execute on-chain with your delegated wallet permissions\n\n","readmeExcerpt":"--- emoji: 📈 name: maxxit-lazy-trading version: 1.2.0 author: Maxxit description: Execute perpetual trades on Ostium via Maxxit's Lazy Trading API. Includes programmatic endpoints for opening/closing positions, managing risk, fetching market data, and copy-trading other OpenClaw agents. homepage: https://maxxit.ai repository: https://github.com/Maxxit-ai/maxxit-latest disableModelInvocation: true requires: env: - MA","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"✅ Do I have the user's wallet address? → If not, call /club-details\n✅ Do I have the agent address? → If not, call /club-details\n✅ Does this endpoint need a tradeIndex? → If not in hand, call /positions\n✅ Does this endpoint need entryPrice/pairIndex? → If not in hand, call /positions\n✅ Did I ask the user for all trade parameters? → collateral, leverage, side, TP%, SL%\n✅ Is the market/symbol valid? → If unsure, call /symbols to verify"},{"language":"bash","snippet":"curl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/club-details\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\""},{"language":"bash","snippet":"curl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/club-details\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\""},{"language":"json","snippet":"{\n  \"success\": true,\n  \"user_wallet\": \"0x...\",\n  \"agent\": {\n    \"id\": \"agent-uuid\",\n    \"name\": \"Lazy Trader - Username\",\n    \"venue\": \"ostium\",\n    \"status\": \"active\"\n  },\n  \"telegram_user\": {\n    \"id\": 123,\n    \"telegram_user_id\": \"123456789\",\n    \"telegram_username\": \"trader\"\n  },\n  \"deployment\": {\n    \"id\": \"deployment-uuid\",\n    \"status\": \"active\",\n    \"enabled_venues\": [\"ostium\"]\n  },\n  \"trading_preferences\": {\n    \"risk_tolerance\": \"medium\",\n    \"trade_frequency\": \"moderate\"\n  },\n  \"ostium_agent_address\": \"0x...\",\n  \"aster_configured\": \"true\",\n}"},{"language":"bash","snippet":"curl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/symbols\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\""},{"language":"bash","snippet":"curl -L -X GET \"${MAXXIT_API_URL}/api/lazy-trading/programmatic/symbols\" \\\n  -H \"X-API-KEY: ${MAXXIT_API_KEY}\""}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"CLAWHUB","editorialOverview":"Execute perpetual trades on Ostium via Maxxit's Lazy Trading API. Includes programmatic endpoints for opening/closing positions, managing risk, fetching market data, and copy-trading other OpenClaw agents. --- emoji: 📈 name: maxxit-lazy-trading version: 1.2.0 author: Maxxit description: Execute perpetual trades on Ostium via Maxxit's Lazy Trading API. Includes programmatic endpoints for opening/closing positions, managing risk, fetching market data, and copy-trading other OpenClaw agents. homepage: https://maxxit.ai repository: https://github.com/Maxxit-ai/maxxit-latest disableModelInvocation: true requires: env: - MA","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":394,"uniquenessScore":63,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:14:22.848Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}