{
  "schemaVersion": "1.0",
  "item": {
    "slug": "sectors-financial-agents",
    "name": "Sectors Financial Agents",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/aidityasadhakim/sectors-financial-agents",
    "canonicalUrl": "https://clawhub.ai/aidityasadhakim/sectors-financial-agents",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/sectors-financial-agents",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=sectors-financial-agents",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "references/idx-endpoints.md",
      "references/sgx-endpoints.md",
      "scripts/check_setup.py",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/sectors-financial-agents"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/sectors-financial-agents",
    "agentPageUrl": "https://openagent3.xyz/skills/sectors-financial-agents/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sectors-financial-agents/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sectors-financial-agents/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Sectors API",
        "body": "Query IDX and SGX financial market data through the Sectors REST API.\n\nFull API docs: https://sectors.app/api"
      },
      {
        "title": "Constraints",
        "body": "ONLY make HTTP requests to https://api.sectors.app/v1. Never call any other domain, database, or external service.\nAll endpoints are GET requests returning JSON.\nNever hardcode or guess an API key. Always read it from the SECTORS_API_KEY environment variable.\nIf SECTORS_API_KEY is not set, prompt the user to set it: export SECTORS_API_KEY=\"your-api-key-here\" or run the setup check script at scripts/check_setup.py."
      },
      {
        "title": "1. Set the API key",
        "body": "The API key must be available as the SECTORS_API_KEY environment variable.\n\n# Option A: Set in your current shell\nexport SECTORS_API_KEY=\"your-api-key-here\"\n\n# Option B: Add to your shell profile (~/.bashrc, ~/.zshrc) for persistence\necho 'export SECTORS_API_KEY=\"your-api-key-here\"' >> ~/.bashrc\n\n# Option C: Use a .env file in the project root (see .env.example)\n\nFor agent-specific configuration:\n\nClaude Code: claude config set env SECTORS_API_KEY your-api-key-here\nOpenCode: Set in ~/.config/opencode/config.json under env\nCursor: Settings > Features > Environment Variables"
      },
      {
        "title": "2. Install the dependency",
        "body": "pip install requests"
      },
      {
        "title": "3. Verify setup (optional)",
        "body": "python scripts/check_setup.py"
      },
      {
        "title": "Making requests",
        "body": "import os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\n\nheaders = {\"Authorization\": API_KEY}\nresponse = requests.get(f\"{BASE_URL}/subsectors/\", headers=headers)\ndata = response.json()\n\nThe Authorization header takes the raw API key. Do NOT prefix it with Bearer."
      },
      {
        "title": "Endpoint decision table",
        "body": "Pick the right endpoint based on what the user needs:"
      },
      {
        "title": "Market structure",
        "body": "User wantsEndpointRequired paramsList all subsectorsGET /subsectors/noneList all industriesGET /industries/noneList all subindustriesGET /subindustries/noneSGX sector listGET /sgx/sectors/none"
      },
      {
        "title": "Company discovery",
        "body": "User wantsEndpointRequired paramsCompanies in a subsectorGET /companies/?sub_sector={sub_sector}sub_sectorCompanies in a subindustryGET /companies/?sub_industry={sub_industry}sub_industryCompanies in a stock indexGET /index/{index}/indexCompanies with segment dataGET /companies/list_companies_with_segments/noneSGX companies by sectorGET /sgx/companies/?sector={sector}sector"
      },
      {
        "title": "Company details",
        "body": "User wantsEndpointRequired paramsFull company report (IDX)GET /company/report/{ticker}/tickerSGX company reportGET /sgx/company/report/{ticker}tickerListing performanceGET /listing-performance/{ticker}/tickerQuarterly financial datesGET /company/get_quarterly_financial_dates/{ticker}/tickerQuarterly financialsGET /financials/quarterly/{ticker}/tickerCompany segmentsGET /company/get-segments/{ticker}/ticker"
      },
      {
        "title": "Market data",
        "body": "User wantsEndpointRequired paramsDaily stock priceGET /daily/{ticker}tickerIndex daily dataGET /index-daily/{index_code}/index_codeIndex summaryGET /index/{index}/indexIDX total market capGET /idx-total/none"
      },
      {
        "title": "Rankings and screening",
        "body": "User wantsEndpointRequired paramsTop gainers/losersGET /companies/top-changes/none (all optional)Top companies by metricGET /companies/top/none (all optional)Top growth companiesGET /companies/top-growth/none (all optional)Most traded stocksGET /most-traded/none (all optional)SGX top companiesGET /sgx/companies/top/none (all optional)\n\nFor full parameter lists and response schemas, see:\n\nreferences/idx-endpoints.md -- all 18 IDX endpoints\nreferences/sgx-endpoints.md -- all 6 SGX endpoints\nassets/endpoint-map.md -- quick-lookup table"
      },
      {
        "title": "Fetch a company report",
        "body": "import os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nticker = \"BBCA\"\nparams = {\"sections\": \"overview,valuation,financials\"}\nresp = requests.get(f\"{BASE_URL}/company/report/{ticker}/\", headers=headers, params=params)\nreport = resp.json()\n\nprint(report[\"company_name\"])\nprint(report[\"overview\"][\"market_cap\"])\n\nAvailable sections: overview, valuation, future, peers, financials, dividend, management, ownership. Use all or omit for everything."
      },
      {
        "title": "Get daily stock prices in a date range",
        "body": "import os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nticker = \"BBRI.JK\"\n# Normalize: uppercase, strip .JK\nclean = ticker.upper().replace(\".JK\", \"\")\n\nparams = {\"start\": \"2025-01-01\", \"end\": \"2025-01-31\"}\nresp = requests.get(f\"{BASE_URL}/daily/{clean}\", headers=headers, params=params)\nprices = resp.json()\n\nfor day in prices:\n    print(day[\"date\"], day[\"close\"], day[\"volume\"])"
      },
      {
        "title": "Find top gainers and losers",
        "body": "import os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nparams = {\n    \"classifications\": \"top_gainers,top_losers\",\n    \"periods\": \"7d,30d\",\n    \"n_stock\": 5,\n    \"min_mcap_billion\": 5000,\n}\nresp = requests.get(f\"{BASE_URL}/companies/top-changes/\", headers=headers, params=params)\nmovers = resp.json()\n\nfor stock in movers[\"top_gainers\"][\"7d\"]:\n    print(stock[\"symbol\"], stock[\"price_change\"])"
      },
      {
        "title": "List companies in an index",
        "body": "import os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\n# Available: lq45, idx30, kompas100, jii70, idxhidiv20, srikehati, etc.\nresp = requests.get(f\"{BASE_URL}/index/lq45/\", headers=headers)\ncompanies = resp.json()\n\nfor c in companies:\n    print(c[\"symbol\"], c[\"company_name\"])"
      },
      {
        "title": "SGX company report",
        "body": "import os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nticker = \"D05\"  # DBS Group\nresp = requests.get(f\"{BASE_URL}/sgx/company/report/{ticker}\", headers=headers)\nreport = resp.json()\n\nprint(report[\"name\"])\nprint(report[\"valuation\"][\"pe\"])\nprint(report[\"financials\"][\"gross_margin\"])"
      },
      {
        "title": "Ticker normalization",
        "body": "MarketRuleExampleIDXUppercase, strip .JK suffixbbca.jk -> BBCASGXUppercase, strip .SI suffixd05.si -> D05\n\nAlways normalize before passing to an endpoint."
      },
      {
        "title": "Gotchas",
        "body": "Auth header format: Use Authorization: <raw_key>. NOT Bearer <key>. NOT Authorization: Bearer <key>.\n\n\nDate format: Always YYYY-MM-DD. Example: 2025-06-15.\n\n\nDate range limit: The /most-traded/ endpoint requires start and end dates within 90 days of each other.\n\n\nKebab-case for subsectors and sectors: Use banks, financing-service, consumer-defensive. Not camelCase or snake_case.\n\n\nNested response structure: Ranking endpoints (top-changes, top, top-growth) return objects keyed by classification, then by period. Always navigate both levels.\n# top-changes returns: { \"top_gainers\": { \"7d\": [...], \"30d\": [...] } }\n# top returns: { \"dividend_yield\": [...], \"revenue\": [...] }\n\n\n\nMarket cap units: IDX values are in billion IDR (min_mcap_billion). SGX values are in million SGD (min_mcap_million).\n\n\nDefault values matter: Many optional params default to \"all\" or specific values (e.g. n_stock defaults to 5, min_mcap_billion defaults to 5000). Be explicit when you need different behavior.\n\n\nIndex codes: IDX index daily data uses lowercase codes: ihsg, lq45, idx30. Company-by-index uses the same codes.\n\n\nQuarterly financials approx flag: When approx=true, the API returns the closest available quarter if an exact match for report_date is not found.\n\n\nCompany report sections param: Only appended to the URL when not \"all\". If you want all sections, omit the sections parameter entirely."
      },
      {
        "title": "Available IDX indices",
        "body": "ftse, idx30, idxbumn20, idxesgl, idxg30, idxhidiv20, idxq30, idxv30, jii70, kompas100, lq45, sminfra18, srikehati, economic30, idxvesta28"
      },
      {
        "title": "Top companies classifications",
        "body": "IDX (/companies/top/): dividend_yield, total_dividend, revenue, earnings, market_cap, pb, pe, ps\n\nIDX growth (/companies/top-growth/): top_earnings_growth_gainers, top_earnings_growth_losers, top_revenue_growth_gainers, top_revenue_growth_losers\n\nIDX movers (/companies/top-changes/): top_gainers, top_losers\n\nSGX (/sgx/companies/top/): dividend_yield, revenue, earnings, market_cap, pe"
      },
      {
        "title": "Error handling",
        "body": "Always check the response status:\n\nresp = requests.get(url, headers=headers)\nif resp.status_code == 403:\n    raise ValueError(\"Invalid or missing API key. Ensure SECTORS_API_KEY is set correctly.\")\nif resp.status_code == 404:\n    raise ValueError(f\"Resource not found: {url}\")\nif not resp.ok:\n    raise RuntimeError(f\"API error {resp.status_code}: {resp.text}\")\ndata = resp.json()"
      }
    ],
    "body": "Sectors API\n\nQuery IDX and SGX financial market data through the Sectors REST API.\n\nFull API docs: https://sectors.app/api\n\nConstraints\nONLY make HTTP requests to https://api.sectors.app/v1. Never call any other domain, database, or external service.\nAll endpoints are GET requests returning JSON.\nNever hardcode or guess an API key. Always read it from the SECTORS_API_KEY environment variable.\nIf SECTORS_API_KEY is not set, prompt the user to set it: export SECTORS_API_KEY=\"your-api-key-here\" or run the setup check script at scripts/check_setup.py.\nSetup\n1. Set the API key\n\nThe API key must be available as the SECTORS_API_KEY environment variable.\n\n# Option A: Set in your current shell\nexport SECTORS_API_KEY=\"your-api-key-here\"\n\n# Option B: Add to your shell profile (~/.bashrc, ~/.zshrc) for persistence\necho 'export SECTORS_API_KEY=\"your-api-key-here\"' >> ~/.bashrc\n\n# Option C: Use a .env file in the project root (see .env.example)\n\n\nFor agent-specific configuration:\n\nClaude Code: claude config set env SECTORS_API_KEY your-api-key-here\nOpenCode: Set in ~/.config/opencode/config.json under env\nCursor: Settings > Features > Environment Variables\n2. Install the dependency\npip install requests\n\n3. Verify setup (optional)\npython scripts/check_setup.py\n\nMaking requests\nimport os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\n\nheaders = {\"Authorization\": API_KEY}\nresponse = requests.get(f\"{BASE_URL}/subsectors/\", headers=headers)\ndata = response.json()\n\n\nThe Authorization header takes the raw API key. Do NOT prefix it with Bearer.\n\nEndpoint decision table\n\nPick the right endpoint based on what the user needs:\n\nMarket structure\nUser wants\tEndpoint\tRequired params\nList all subsectors\tGET /subsectors/\tnone\nList all industries\tGET /industries/\tnone\nList all subindustries\tGET /subindustries/\tnone\nSGX sector list\tGET /sgx/sectors/\tnone\nCompany discovery\nUser wants\tEndpoint\tRequired params\nCompanies in a subsector\tGET /companies/?sub_sector={sub_sector}\tsub_sector\nCompanies in a subindustry\tGET /companies/?sub_industry={sub_industry}\tsub_industry\nCompanies in a stock index\tGET /index/{index}/\tindex\nCompanies with segment data\tGET /companies/list_companies_with_segments/\tnone\nSGX companies by sector\tGET /sgx/companies/?sector={sector}\tsector\nCompany details\nUser wants\tEndpoint\tRequired params\nFull company report (IDX)\tGET /company/report/{ticker}/\tticker\nSGX company report\tGET /sgx/company/report/{ticker}\tticker\nListing performance\tGET /listing-performance/{ticker}/\tticker\nQuarterly financial dates\tGET /company/get_quarterly_financial_dates/{ticker}/\tticker\nQuarterly financials\tGET /financials/quarterly/{ticker}/\tticker\nCompany segments\tGET /company/get-segments/{ticker}/\tticker\nMarket data\nUser wants\tEndpoint\tRequired params\nDaily stock price\tGET /daily/{ticker}\tticker\nIndex daily data\tGET /index-daily/{index_code}/\tindex_code\nIndex summary\tGET /index/{index}/\tindex\nIDX total market cap\tGET /idx-total/\tnone\nRankings and screening\nUser wants\tEndpoint\tRequired params\nTop gainers/losers\tGET /companies/top-changes/\tnone (all optional)\nTop companies by metric\tGET /companies/top/\tnone (all optional)\nTop growth companies\tGET /companies/top-growth/\tnone (all optional)\nMost traded stocks\tGET /most-traded/\tnone (all optional)\nSGX top companies\tGET /sgx/companies/top/\tnone (all optional)\n\nFor full parameter lists and response schemas, see:\n\nreferences/idx-endpoints.md -- all 18 IDX endpoints\nreferences/sgx-endpoints.md -- all 6 SGX endpoints\nassets/endpoint-map.md -- quick-lookup table\nCommon patterns\nFetch a company report\nimport os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nticker = \"BBCA\"\nparams = {\"sections\": \"overview,valuation,financials\"}\nresp = requests.get(f\"{BASE_URL}/company/report/{ticker}/\", headers=headers, params=params)\nreport = resp.json()\n\nprint(report[\"company_name\"])\nprint(report[\"overview\"][\"market_cap\"])\n\n\nAvailable sections: overview, valuation, future, peers, financials, dividend, management, ownership. Use all or omit for everything.\n\nGet daily stock prices in a date range\nimport os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nticker = \"BBRI.JK\"\n# Normalize: uppercase, strip .JK\nclean = ticker.upper().replace(\".JK\", \"\")\n\nparams = {\"start\": \"2025-01-01\", \"end\": \"2025-01-31\"}\nresp = requests.get(f\"{BASE_URL}/daily/{clean}\", headers=headers, params=params)\nprices = resp.json()\n\nfor day in prices:\n    print(day[\"date\"], day[\"close\"], day[\"volume\"])\n\nFind top gainers and losers\nimport os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nparams = {\n    \"classifications\": \"top_gainers,top_losers\",\n    \"periods\": \"7d,30d\",\n    \"n_stock\": 5,\n    \"min_mcap_billion\": 5000,\n}\nresp = requests.get(f\"{BASE_URL}/companies/top-changes/\", headers=headers, params=params)\nmovers = resp.json()\n\nfor stock in movers[\"top_gainers\"][\"7d\"]:\n    print(stock[\"symbol\"], stock[\"price_change\"])\n\nList companies in an index\nimport os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\n# Available: lq45, idx30, kompas100, jii70, idxhidiv20, srikehati, etc.\nresp = requests.get(f\"{BASE_URL}/index/lq45/\", headers=headers)\ncompanies = resp.json()\n\nfor c in companies:\n    print(c[\"symbol\"], c[\"company_name\"])\n\nSGX company report\nimport os\nimport requests\n\nAPI_KEY = os.environ[\"SECTORS_API_KEY\"]\nBASE_URL = \"https://api.sectors.app/v1\"\nheaders = {\"Authorization\": API_KEY}\n\nticker = \"D05\"  # DBS Group\nresp = requests.get(f\"{BASE_URL}/sgx/company/report/{ticker}\", headers=headers)\nreport = resp.json()\n\nprint(report[\"name\"])\nprint(report[\"valuation\"][\"pe\"])\nprint(report[\"financials\"][\"gross_margin\"])\n\nTicker normalization\nMarket\tRule\tExample\nIDX\tUppercase, strip .JK suffix\tbbca.jk -> BBCA\nSGX\tUppercase, strip .SI suffix\td05.si -> D05\n\nAlways normalize before passing to an endpoint.\n\nGotchas\n\nAuth header format: Use Authorization: <raw_key>. NOT Bearer <key>. NOT Authorization: Bearer <key>.\n\nDate format: Always YYYY-MM-DD. Example: 2025-06-15.\n\nDate range limit: The /most-traded/ endpoint requires start and end dates within 90 days of each other.\n\nKebab-case for subsectors and sectors: Use banks, financing-service, consumer-defensive. Not camelCase or snake_case.\n\nNested response structure: Ranking endpoints (top-changes, top, top-growth) return objects keyed by classification, then by period. Always navigate both levels.\n\n# top-changes returns: { \"top_gainers\": { \"7d\": [...], \"30d\": [...] } }\n# top returns: { \"dividend_yield\": [...], \"revenue\": [...] }\n\n\nMarket cap units: IDX values are in billion IDR (min_mcap_billion). SGX values are in million SGD (min_mcap_million).\n\nDefault values matter: Many optional params default to \"all\" or specific values (e.g. n_stock defaults to 5, min_mcap_billion defaults to 5000). Be explicit when you need different behavior.\n\nIndex codes: IDX index daily data uses lowercase codes: ihsg, lq45, idx30. Company-by-index uses the same codes.\n\nQuarterly financials approx flag: When approx=true, the API returns the closest available quarter if an exact match for report_date is not found.\n\nCompany report sections param: Only appended to the URL when not \"all\". If you want all sections, omit the sections parameter entirely.\n\nAvailable IDX indices\n\nftse, idx30, idxbumn20, idxesgl, idxg30, idxhidiv20, idxq30, idxv30, jii70, kompas100, lq45, sminfra18, srikehati, economic30, idxvesta28\n\nTop companies classifications\n\nIDX (/companies/top/): dividend_yield, total_dividend, revenue, earnings, market_cap, pb, pe, ps\n\nIDX growth (/companies/top-growth/): top_earnings_growth_gainers, top_earnings_growth_losers, top_revenue_growth_gainers, top_revenue_growth_losers\n\nIDX movers (/companies/top-changes/): top_gainers, top_losers\n\nSGX (/sgx/companies/top/): dividend_yield, revenue, earnings, market_cap, pe\n\nError handling\n\nAlways check the response status:\n\nresp = requests.get(url, headers=headers)\nif resp.status_code == 403:\n    raise ValueError(\"Invalid or missing API key. Ensure SECTORS_API_KEY is set correctly.\")\nif resp.status_code == 404:\n    raise ValueError(f\"Resource not found: {url}\")\nif not resp.ok:\n    raise RuntimeError(f\"API error {resp.status_code}: {resp.text}\")\ndata = resp.json()"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/aidityasadhakim/sectors-financial-agents",
    "publisherUrl": "https://clawhub.ai/aidityasadhakim/sectors-financial-agents",
    "owner": "aidityasadhakim",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/sectors-financial-agents",
    "downloadUrl": "https://openagent3.xyz/downloads/sectors-financial-agents",
    "agentUrl": "https://openagent3.xyz/skills/sectors-financial-agents/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sectors-financial-agents/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sectors-financial-agents/agent.md"
  }
}