{
  "schemaVersion": "1.0",
  "item": {
    "slug": "zoho",
    "name": "Zoho",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/shreefentsar/zoho",
    "canonicalUrl": "https://clawhub.ai/shreefentsar/zoho",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/zoho",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=zoho",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "references/crm-api.md",
      "references/meeting-api.md",
      "references/projects-api.md",
      "scripts/standup-summarizer.sh"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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/zoho"
    },
    "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/zoho",
    "agentPageUrl": "https://openagent3.xyz/skills/zoho/agent",
    "manifestUrl": "https://openagent3.xyz/skills/zoho/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/zoho/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Zoho Integration (CRM + Projects + Meeting)",
        "body": "Made by Zone 99 · GitHub · Contribute"
      },
      {
        "title": "Quick Start",
        "body": "Use the zoho CLI wrapper — it handles OAuth token refresh and caching automatically.\n\nzoho help          # Show all commands\nzoho token         # Print current access token (auto-refreshes)"
      },
      {
        "title": "Step 1: Register Your Application",
        "body": "Go to Zoho API Console\nClick Add Client → choose Server-based Applications\nFill in:\n\nClient Name: your app name (e.g. \"Clawdbot Zoho Integration\")\nHomepage URL: your domain or https://localhost\nRedirect URI: https://localhost/callback (or any URL you control — you only need it once to grab the code)\n\n\nClick Create\nNote down the Client ID and Client Secret"
      },
      {
        "title": "Step 2: Generate Authorization Code (Grant Token)",
        "body": "Build this URL and open it in your browser (replace the placeholders):\n\nhttps://accounts.zoho.com/oauth/v2/auth\n  ?response_type=code\n  &client_id=YOUR_CLIENT_ID\n  &scope=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoProjects.projects.ALL,ZohoProjects.tasks.ALL,ZohoMeeting.recording.READ,ZohoMeeting.meeting.READ,ZohoMeeting.meetinguds.READ,ZohoFiles.files.READ\n  &redirect_uri=https://localhost/callback\n  &access_type=offline\n  &prompt=consent\n\nImportant: Use the accounts URL matching your datacenter:\nRegionAccounts URLUShttps://accounts.zoho.comEUhttps://accounts.zoho.euINhttps://accounts.zoho.inAUhttps://accounts.zoho.com.auJPhttps://accounts.zoho.jpUKhttps://accounts.zoho.ukCAhttps://accounts.zohocloud.caSAhttps://accounts.zoho.sa\n\nAfter granting access, you'll be redirected to something like:\n\nhttps://localhost/callback?code=1000.abc123...&location=us&accounts-server=https://accounts.zoho.com\n\nCopy the code parameter value. This code expires in 2 minutes — move to Step 3 immediately."
      },
      {
        "title": "Step 3: Exchange Code for Refresh Token",
        "body": "Run this curl command (replace placeholders):\n\ncurl -X POST \"https://accounts.zoho.com/oauth/v2/token\" \\\n  -d \"client_id=YOUR_CLIENT_ID\" \\\n  -d \"client_secret=YOUR_CLIENT_SECRET\" \\\n  -d \"grant_type=authorization_code\" \\\n  -d \"redirect_uri=https://localhost/callback\" \\\n  -d \"code=PASTE_CODE_FROM_STEP_2\"\n\nResponse:\n\n{\n  \"access_token\": \"1000.xxxx.yyyy\",\n  \"refresh_token\": \"1000.xxxx.zzzz\",\n  \"api_domain\": \"https://www.zohoapis.com\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600\n}\n\nSave the refresh_token — this is your long-lived credential. The access token expires in 1 hour, but the CLI auto-refreshes it using the refresh token."
      },
      {
        "title": "Step 4: Find Your Org IDs",
        "body": "CRM/Projects Org ID:\n\n# After setting up .env with client_id, client_secret, refresh_token:\nzoho raw GET /crm/v7/org | jq '.org[0].id'\n\nMeeting Org ID:\nLog into Zoho Meeting → Admin Settings → look for the Organization ID in the URL or settings page. It's different from the CRM org ID."
      },
      {
        "title": "Step 5: Configure .env",
        "body": "Create .env in the skill directory:\n\nZOHO_CLIENT_ID=1000.XXXXXXXXXXXXXXXXXXXXXXXXX\nZOHO_CLIENT_SECRET=your_client_secret_here\nZOHO_REFRESH_TOKEN=1000.your_refresh_token_here\nZOHO_ORG_ID=123456789              # CRM/Projects org ID\nZOHO_MEETING_ORG_ID=987654321      # Meeting org ID (different from CRM)\nZOHO_CRM_DOMAIN=https://www.zohoapis.com\nZOHO_PROJECTS_DOMAIN=https://projectsapi.zoho.com/restapi\nZOHO_MEETING_DOMAIN=https://meeting.zoho.com\nZOHO_ACCOUNTS_URL=https://accounts.zoho.com\n\nAdjust the domain URLs if you're on a non-US datacenter (e.g. .eu, .in, .com.au)."
      },
      {
        "title": "OAuth Scopes Reference",
        "body": "ScopeUsed ForZohoCRM.modules.ALLRead/write CRM records (Deals, Contacts, Leads, etc.)ZohoCRM.settings.ALLRead CRM field definitions and org settingsZohoProjects.projects.ALLRead/write projectsZohoProjects.tasks.ALLRead/write tasks, milestones, bugs, timelogsZohoMeeting.recording.READList and access meeting recordingsZohoMeeting.meeting.READList meetings and session detailsZohoMeeting.meetinguds.READDownload recording filesZohoFiles.files.READDownload files (recordings, transcripts)\n\nYou can request fewer scopes if you only need CRM or only need Meeting. The authorization URL scope parameter is comma-separated."
      },
      {
        "title": "Troubleshooting Auth",
        "body": "\"invalid_code\" → The authorization code expired (2 min lifetime). Redo Step 2.\n\"invalid_client\" → Wrong Client ID, or wrong accounts-server URL for your datacenter.\n\"invalid_redirect_uri\" → The redirect_uri in the curl must exactly match what you registered in API Console.\nToken refresh fails → Refresh tokens can be revoked. Redo Steps 2–3 to get a new one.\n\"Given URL is wrong\" → You're hitting the wrong API domain for your datacenter."
      },
      {
        "title": "CRM Commands",
        "body": "# List records from any module\nzoho crm list Deals\nzoho crm list Deals \"page=1&per_page=5&sort_by=Created_Time&sort_order=desc\"\nzoho crm list Contacts\nzoho crm list Leads\n\n# Get a specific record\nzoho crm get Deals 1234567890\n\n# Search with criteria\nzoho crm search Deals \"(Stage:equals:Closed Won)\"\nzoho crm search Contacts \"(Email:contains:@acme.com)\"\nzoho crm search Leads \"(Lead_Source:equals:Web)\"\n\n# Create a record\nzoho crm create Contacts '{\"data\":[{\"Last_Name\":\"Smith\",\"First_Name\":\"John\",\"Email\":\"j@co.com\"}]}'\nzoho crm create Deals '{\"data\":[{\"Deal_Name\":\"New Project\",\"Stage\":\"Qualification\",\"Amount\":50000}]}'\n\n# Update a record\nzoho crm update Deals 1234567890 '{\"data\":[{\"Stage\":\"Closed Won\"}]}'\n\n# Delete a record\nzoho crm delete Deals 1234567890"
      },
      {
        "title": "CRM Modules",
        "body": "Leads, Contacts, Accounts, Deals, Tasks, Events, Calls, Notes, Products, Quotes, Sales_Orders, Purchase_Orders, Invoices"
      },
      {
        "title": "Search Operators",
        "body": "equals, not_equal, starts_with, contains, not_contains, in, not_in, between, greater_than, less_than"
      },
      {
        "title": "Projects Commands",
        "body": "# List all projects\nzoho proj list\n\n# Get project details\nzoho proj get 12345678\n\n# Tasks\nzoho proj tasks 12345678\nzoho proj create-task 12345678 \"name=Fix+login+bug&priority=High&start_date=01-27-2026\"\nzoho proj update-task 12345678 98765432 \"percent_complete=50\"\n\n# Other\nzoho proj milestones 12345678\nzoho proj tasklists 12345678\nzoho proj bugs 12345678\nzoho proj timelogs 12345678"
      },
      {
        "title": "Task Fields",
        "body": "name, start_date (MM-DD-YYYY), end_date, priority (None/Low/Medium/High), owner, description, tasklist_id, percent_complete"
      },
      {
        "title": "Meeting Commands",
        "body": "# List all recordings\nzoho meeting recordings\nzoho meeting recordings | jq '[.recordings[] | {topic, sDate, sTime, durationInMins, erecordingId}]'\n\n# Download a recording (use downloadUrl from recordings list)\nzoho meeting download \"https://files-accl.zohopublic.com/public?event-id=...\" output.mp4\n\n# List meetings/sessions\nzoho meeting list\nzoho meeting list \"fromDate=2026-01-01T00:00:00Z&toDate=2026-01-31T23:59:59Z\"\n\n# Get meeting details\nzoho meeting get 1066944216"
      },
      {
        "title": "Recording Response Fields",
        "body": "Key fields from zoho meeting recordings:\n\nerecordingId — encrypted recording ID (use for dedup/tracking)\ntopic — meeting title\nsDate, sTime — start date/time (human-readable)\nstartTimeinMs — start time as epoch ms (use for date filtering)\ndurationInMins — recording duration\ndownloadUrl / publicDownloadUrl — MP4 download URL\ntranscriptionDownloadUrl — Zoho-generated transcript (if available)\nsummaryDownloadUrl — Zoho-generated summary (if available)\nfileSize / fileSizeInMB — recording file size\nstatus — e.g. UPLOADED\nmeetingKey — meeting identifier\ncreatorName — who started the recording"
      },
      {
        "title": "Meeting Recording Pipeline",
        "body": "For automated standup/meeting summarization:\n\n# 1. List recordings, filter by today's date (epoch ms)\nzoho meeting recordings | jq --argjson start \"$START_MS\" --argjson end \"$END_MS\" \\\n  '[.recordings[] | select(.startTimeinMs >= $start and .startTimeinMs <= $end)]'\n\n# 2. Download recording\nzoho meeting download \"$DOWNLOAD_URL\" /tmp/recording.mp4\n\n# 3. Extract audio\nffmpeg -i /tmp/recording.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav -y\n\n# 4. Transcribe via Gemini Flash API (great for Arabic + English mix)\n# See scripts/standup-summarizer.sh for full implementation\n\n# 5. Summarize transcript with Claude/GPT\n# 6. Clean up temp files\n\nA complete standup summarizer script is included at scripts/standup-summarizer.sh."
      },
      {
        "title": "Raw API Calls",
        "body": "For anything not covered by subcommands:\n\n# CRM endpoints\nzoho raw GET /crm/v7/settings/fields?module=Deals\nzoho raw GET /crm/v7/org\n\n# Meeting endpoints\nzoho raw GET \"https://meeting.zoho.com/meeting/api/v2/{zsoid}/recordings.json\"\n\n# Custom modules\nzoho raw GET /crm/v7/Custom_Module"
      },
      {
        "title": "When checking deals/pipeline",
        "body": "zoho crm list Deals \"sort_by=Created_Time&sort_order=desc&per_page=10\" | jq '.data[] | {Deal_Name, Stage, Amount, Closing_Date}'"
      },
      {
        "title": "When checking project progress",
        "body": "zoho proj list | jq '.projects[] | {name, status, id: .id_string}'\nzoho proj tasks <project_id> | jq '.tasks[] | {name, status: .status.name, percent_complete, priority}'"
      },
      {
        "title": "When creating tasks from conversation",
        "body": "zoho proj create-task <project_id> \"name=Task+description&priority=High&start_date=MM-DD-YYYY&end_date=MM-DD-YYYY\""
      },
      {
        "title": "When summarizing meeting recordings",
        "body": "# Quick list of recent recordings\nzoho meeting recordings | jq '[.recordings[:5] | .[] | {topic, sDate, sTime, durationInMins, fileSize}]'\n\n# Download latest recording\nURL=$(zoho meeting recordings | jq -r '.recordings[0].downloadUrl')\nzoho meeting download \"$URL\" /tmp/latest.mp4"
      },
      {
        "title": "Rate Limits",
        "body": "CRM: 100 requests/min\nProjects: varies by plan\nMeeting: standard API limits\nToken refresh: don't call more than needed (cached automatically)"
      },
      {
        "title": "References",
        "body": "CRM API Fields\nProjects API Endpoints\nMeeting API Reference"
      }
    ],
    "body": "Zoho Integration (CRM + Projects + Meeting)\n\nMade by Zone 99 · GitHub · Contribute\n\nQuick Start\n\nUse the zoho CLI wrapper — it handles OAuth token refresh and caching automatically.\n\nzoho help          # Show all commands\nzoho token         # Print current access token (auto-refreshes)\n\nAuthentication Setup\nStep 1: Register Your Application\nGo to Zoho API Console\nClick Add Client → choose Server-based Applications\nFill in:\nClient Name: your app name (e.g. \"Clawdbot Zoho Integration\")\nHomepage URL: your domain or https://localhost\nRedirect URI: https://localhost/callback (or any URL you control — you only need it once to grab the code)\nClick Create\nNote down the Client ID and Client Secret\nStep 2: Generate Authorization Code (Grant Token)\n\nBuild this URL and open it in your browser (replace the placeholders):\n\nhttps://accounts.zoho.com/oauth/v2/auth\n  ?response_type=code\n  &client_id=YOUR_CLIENT_ID\n  &scope=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoProjects.projects.ALL,ZohoProjects.tasks.ALL,ZohoMeeting.recording.READ,ZohoMeeting.meeting.READ,ZohoMeeting.meetinguds.READ,ZohoFiles.files.READ\n  &redirect_uri=https://localhost/callback\n  &access_type=offline\n  &prompt=consent\n\n\nImportant: Use the accounts URL matching your datacenter:\n\nRegion\tAccounts URL\nUS\thttps://accounts.zoho.com\nEU\thttps://accounts.zoho.eu\nIN\thttps://accounts.zoho.in\nAU\thttps://accounts.zoho.com.au\nJP\thttps://accounts.zoho.jp\nUK\thttps://accounts.zoho.uk\nCA\thttps://accounts.zohocloud.ca\nSA\thttps://accounts.zoho.sa\n\nAfter granting access, you'll be redirected to something like:\n\nhttps://localhost/callback?code=1000.abc123...&location=us&accounts-server=https://accounts.zoho.com\n\n\nCopy the code parameter value. This code expires in 2 minutes — move to Step 3 immediately.\n\nStep 3: Exchange Code for Refresh Token\n\nRun this curl command (replace placeholders):\n\ncurl -X POST \"https://accounts.zoho.com/oauth/v2/token\" \\\n  -d \"client_id=YOUR_CLIENT_ID\" \\\n  -d \"client_secret=YOUR_CLIENT_SECRET\" \\\n  -d \"grant_type=authorization_code\" \\\n  -d \"redirect_uri=https://localhost/callback\" \\\n  -d \"code=PASTE_CODE_FROM_STEP_2\"\n\n\nResponse:\n\n{\n  \"access_token\": \"1000.xxxx.yyyy\",\n  \"refresh_token\": \"1000.xxxx.zzzz\",\n  \"api_domain\": \"https://www.zohoapis.com\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600\n}\n\n\nSave the refresh_token — this is your long-lived credential. The access token expires in 1 hour, but the CLI auto-refreshes it using the refresh token.\n\nStep 4: Find Your Org IDs\n\nCRM/Projects Org ID:\n\n# After setting up .env with client_id, client_secret, refresh_token:\nzoho raw GET /crm/v7/org | jq '.org[0].id'\n\n\nMeeting Org ID: Log into Zoho Meeting → Admin Settings → look for the Organization ID in the URL or settings page. It's different from the CRM org ID.\n\nStep 5: Configure .env\n\nCreate .env in the skill directory:\n\nZOHO_CLIENT_ID=1000.XXXXXXXXXXXXXXXXXXXXXXXXX\nZOHO_CLIENT_SECRET=your_client_secret_here\nZOHO_REFRESH_TOKEN=1000.your_refresh_token_here\nZOHO_ORG_ID=123456789              # CRM/Projects org ID\nZOHO_MEETING_ORG_ID=987654321      # Meeting org ID (different from CRM)\nZOHO_CRM_DOMAIN=https://www.zohoapis.com\nZOHO_PROJECTS_DOMAIN=https://projectsapi.zoho.com/restapi\nZOHO_MEETING_DOMAIN=https://meeting.zoho.com\nZOHO_ACCOUNTS_URL=https://accounts.zoho.com\n\n\nAdjust the domain URLs if you're on a non-US datacenter (e.g. .eu, .in, .com.au).\n\nOAuth Scopes Reference\nScope\tUsed For\nZohoCRM.modules.ALL\tRead/write CRM records (Deals, Contacts, Leads, etc.)\nZohoCRM.settings.ALL\tRead CRM field definitions and org settings\nZohoProjects.projects.ALL\tRead/write projects\nZohoProjects.tasks.ALL\tRead/write tasks, milestones, bugs, timelogs\nZohoMeeting.recording.READ\tList and access meeting recordings\nZohoMeeting.meeting.READ\tList meetings and session details\nZohoMeeting.meetinguds.READ\tDownload recording files\nZohoFiles.files.READ\tDownload files (recordings, transcripts)\n\nYou can request fewer scopes if you only need CRM or only need Meeting. The authorization URL scope parameter is comma-separated.\n\nTroubleshooting Auth\n\"invalid_code\" → The authorization code expired (2 min lifetime). Redo Step 2.\n\"invalid_client\" → Wrong Client ID, or wrong accounts-server URL for your datacenter.\n\"invalid_redirect_uri\" → The redirect_uri in the curl must exactly match what you registered in API Console.\nToken refresh fails → Refresh tokens can be revoked. Redo Steps 2–3 to get a new one.\n\"Given URL is wrong\" → You're hitting the wrong API domain for your datacenter.\nCRM Commands\n# List records from any module\nzoho crm list Deals\nzoho crm list Deals \"page=1&per_page=5&sort_by=Created_Time&sort_order=desc\"\nzoho crm list Contacts\nzoho crm list Leads\n\n# Get a specific record\nzoho crm get Deals 1234567890\n\n# Search with criteria\nzoho crm search Deals \"(Stage:equals:Closed Won)\"\nzoho crm search Contacts \"(Email:contains:@acme.com)\"\nzoho crm search Leads \"(Lead_Source:equals:Web)\"\n\n# Create a record\nzoho crm create Contacts '{\"data\":[{\"Last_Name\":\"Smith\",\"First_Name\":\"John\",\"Email\":\"j@co.com\"}]}'\nzoho crm create Deals '{\"data\":[{\"Deal_Name\":\"New Project\",\"Stage\":\"Qualification\",\"Amount\":50000}]}'\n\n# Update a record\nzoho crm update Deals 1234567890 '{\"data\":[{\"Stage\":\"Closed Won\"}]}'\n\n# Delete a record\nzoho crm delete Deals 1234567890\n\nCRM Modules\n\nLeads, Contacts, Accounts, Deals, Tasks, Events, Calls, Notes, Products, Quotes, Sales_Orders, Purchase_Orders, Invoices\n\nSearch Operators\n\nequals, not_equal, starts_with, contains, not_contains, in, not_in, between, greater_than, less_than\n\nProjects Commands\n# List all projects\nzoho proj list\n\n# Get project details\nzoho proj get 12345678\n\n# Tasks\nzoho proj tasks 12345678\nzoho proj create-task 12345678 \"name=Fix+login+bug&priority=High&start_date=01-27-2026\"\nzoho proj update-task 12345678 98765432 \"percent_complete=50\"\n\n# Other\nzoho proj milestones 12345678\nzoho proj tasklists 12345678\nzoho proj bugs 12345678\nzoho proj timelogs 12345678\n\nTask Fields\n\nname, start_date (MM-DD-YYYY), end_date, priority (None/Low/Medium/High), owner, description, tasklist_id, percent_complete\n\nMeeting Commands\n# List all recordings\nzoho meeting recordings\nzoho meeting recordings | jq '[.recordings[] | {topic, sDate, sTime, durationInMins, erecordingId}]'\n\n# Download a recording (use downloadUrl from recordings list)\nzoho meeting download \"https://files-accl.zohopublic.com/public?event-id=...\" output.mp4\n\n# List meetings/sessions\nzoho meeting list\nzoho meeting list \"fromDate=2026-01-01T00:00:00Z&toDate=2026-01-31T23:59:59Z\"\n\n# Get meeting details\nzoho meeting get 1066944216\n\nRecording Response Fields\n\nKey fields from zoho meeting recordings:\n\nerecordingId — encrypted recording ID (use for dedup/tracking)\ntopic — meeting title\nsDate, sTime — start date/time (human-readable)\nstartTimeinMs — start time as epoch ms (use for date filtering)\ndurationInMins — recording duration\ndownloadUrl / publicDownloadUrl — MP4 download URL\ntranscriptionDownloadUrl — Zoho-generated transcript (if available)\nsummaryDownloadUrl — Zoho-generated summary (if available)\nfileSize / fileSizeInMB — recording file size\nstatus — e.g. UPLOADED\nmeetingKey — meeting identifier\ncreatorName — who started the recording\nMeeting Recording Pipeline\n\nFor automated standup/meeting summarization:\n\n# 1. List recordings, filter by today's date (epoch ms)\nzoho meeting recordings | jq --argjson start \"$START_MS\" --argjson end \"$END_MS\" \\\n  '[.recordings[] | select(.startTimeinMs >= $start and .startTimeinMs <= $end)]'\n\n# 2. Download recording\nzoho meeting download \"$DOWNLOAD_URL\" /tmp/recording.mp4\n\n# 3. Extract audio\nffmpeg -i /tmp/recording.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav -y\n\n# 4. Transcribe via Gemini Flash API (great for Arabic + English mix)\n# See scripts/standup-summarizer.sh for full implementation\n\n# 5. Summarize transcript with Claude/GPT\n# 6. Clean up temp files\n\n\nA complete standup summarizer script is included at scripts/standup-summarizer.sh.\n\nRaw API Calls\n\nFor anything not covered by subcommands:\n\n# CRM endpoints\nzoho raw GET /crm/v7/settings/fields?module=Deals\nzoho raw GET /crm/v7/org\n\n# Meeting endpoints\nzoho raw GET \"https://meeting.zoho.com/meeting/api/v2/{zsoid}/recordings.json\"\n\n# Custom modules\nzoho raw GET /crm/v7/Custom_Module\n\nUsage Patterns\nWhen checking deals/pipeline\nzoho crm list Deals \"sort_by=Created_Time&sort_order=desc&per_page=10\" | jq '.data[] | {Deal_Name, Stage, Amount, Closing_Date}'\n\nWhen checking project progress\nzoho proj list | jq '.projects[] | {name, status, id: .id_string}'\nzoho proj tasks <project_id> | jq '.tasks[] | {name, status: .status.name, percent_complete, priority}'\n\nWhen creating tasks from conversation\nzoho proj create-task <project_id> \"name=Task+description&priority=High&start_date=MM-DD-YYYY&end_date=MM-DD-YYYY\"\n\nWhen summarizing meeting recordings\n# Quick list of recent recordings\nzoho meeting recordings | jq '[.recordings[:5] | .[] | {topic, sDate, sTime, durationInMins, fileSize}]'\n\n# Download latest recording\nURL=$(zoho meeting recordings | jq -r '.recordings[0].downloadUrl')\nzoho meeting download \"$URL\" /tmp/latest.mp4\n\nRate Limits\nCRM: 100 requests/min\nProjects: varies by plan\nMeeting: standard API limits\nToken refresh: don't call more than needed (cached automatically)\nReferences\nCRM API Fields\nProjects API Endpoints\nMeeting API Reference"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/shreefentsar/zoho",
    "publisherUrl": "https://clawhub.ai/shreefentsar/zoho",
    "owner": "shreefentsar",
    "version": "2.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/zoho",
    "downloadUrl": "https://openagent3.xyz/downloads/zoho",
    "agentUrl": "https://openagent3.xyz/skills/zoho/agent",
    "manifestUrl": "https://openagent3.xyz/skills/zoho/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/zoho/agent.md"
  }
}