Interact with Zoho CRM, Projects, and Meeting APIs. Use when managing deals, contacts, leads, tasks, projects, milestones, meeting recordings, or any Zoho workspace data. Triggers on mentions of Zoho, CRM, deals, pipeline, projects, tasks, milestones, meetings, recordings, standups.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
Interact with Zoho CRM, Projects, and Meeting APIs. Use when managing deals, contacts, leads, tasks, projects, milestones, meeting recordings, or any Zoho workspace data. Triggers on mentions of Zoho, CRM, deals, pipeline, projects, tasks, milestones, meetings, recordings, standups.
Save 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.
Step 4: Find Your Org IDs
CRM/Projects Org ID:
# After setting up .env with client_id, client_secret, refresh_token:
zoho raw GET /crm/v7/org | jq '.org[0].id'
Meeting 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.
Step 5: Configure .env
Create .env in the skill directory:
ZOHO_CLIENT_ID=1000.XXXXXXXXXXXXXXXXXXXXXXXXX
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_REFRESH_TOKEN=1000.your_refresh_token_here
ZOHO_ORG_ID=123456789 # CRM/Projects org ID
ZOHO_MEETING_ORG_ID=987654321 # Meeting org ID (different from CRM)
ZOHO_CRM_DOMAIN=https://www.zohoapis.com
ZOHO_PROJECTS_DOMAIN=https://projectsapi.zoho.com/restapi
ZOHO_MEETING_DOMAIN=https://meeting.zoho.com
ZOHO_ACCOUNTS_URL=https://accounts.zoho.com
Adjust the domain URLs if you're on a non-US datacenter (e.g. .eu, .in, .com.au).
OAuth Scopes Reference
Scope
Used For
ZohoCRM.modules.ALL
Read/write CRM records (Deals, Contacts, Leads, etc.)
ZohoCRM.settings.ALL
Read CRM field definitions and org settings
ZohoProjects.projects.ALL
Read/write projects
ZohoProjects.tasks.ALL
Read/write tasks, milestones, bugs, timelogs
ZohoMeeting.recording.READ
List and access meeting recordings
ZohoMeeting.meeting.READ
List meetings and session details
ZohoMeeting.meetinguds.READ
Download recording files
ZohoFiles.files.READ
Download files (recordings, transcripts)
You can request fewer scopes if you only need CRM or only need Meeting. The authorization URL scope parameter is comma-separated.
Troubleshooting Auth
"invalid_code" โ The authorization code expired (2 min lifetime). Redo Step 2.
"invalid_client" โ Wrong Client ID, or wrong accounts-server URL for your datacenter.
"invalid_redirect_uri" โ The redirect_uri in the curl must exactly match what you registered in API Console.
Token refresh fails โ Refresh tokens can be revoked. Redo Steps 2โ3 to get a new one.
"Given URL is wrong" โ You're hitting the wrong API domain for your datacenter.
CRM Commands
# List records from any module
zoho crm list Deals
zoho crm list Deals "page=1&per_page=5&sort_by=Created_Time&sort_order=desc"
zoho crm list Contacts
zoho crm list Leads
# Get a specific record
zoho crm get Deals 1234567890
# Search with criteria
zoho crm search Deals "(Stage:equals:Closed Won)"
zoho crm search Contacts "(Email:contains:@acme.com)"
zoho crm search Leads "(Lead_Source:equals:Web)"# Create a record
zoho crm create Contacts '{"data":[{"Last_Name":"Smith","First_Name":"John","Email":"j@co.com"}]}'
zoho crm create Deals '{"data":[{"Deal_Name":"New Project","Stage":"Qualification","Amount":50000}]}'# Update a record
zoho crm update Deals 1234567890 '{"data":[{"Stage":"Closed Won"}]}'# Delete a record
zoho crm delete Deals 1234567890
# 1. List recordings, filter by today's date (epoch ms)
zoho meeting recordings | jq --argjson start "$START_MS" --argjson end "$END_MS" \
'[.recordings[] | select(.startTimeinMs >= $start and .startTimeinMs <= $end)]'# 2. Download recording
zoho meeting download "$DOWNLOAD_URL" /tmp/recording.mp4
# 3. Extract audio
ffmpeg -i /tmp/recording.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav -y
# 4. Transcribe via Gemini Flash API (great for Arabic + English mix)# See scripts/standup-summarizer.sh for full implementation# 5. Summarize transcript with Claude/GPT# 6. Clean up temp files
A complete standup summarizer script is included at scripts/standup-summarizer.sh.
Raw API Calls
For anything not covered by subcommands:
# CRM endpoints
zoho raw GET /crm/v7/settings/fields?module=Deals
zoho raw GET /crm/v7/org
# Meeting endpoints
zoho raw GET "https://meeting.zoho.com/meeting/api/v2/{zsoid}/recordings.json"# Custom modules
zoho raw GET /crm/v7/Custom_Module