Skip to content
Back to skills

Zohocl

ASecurity

A comprehensive skill for authenticating and interacting with Zoho APIs (CRM, Books, Desk, Creator, and more).

  • 665 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 8, 2026
businessjavascriptgojavabashexpresstestinggitapidatabasesecurity

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned February 10, 2026

npx -y skills add openclaw/skills --skill zohocl --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Zohocl?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Zohocl
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/openclaw-zohocl/badge)](https://www.skillsdirectory.com/skills/openclaw-zohocl)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Zoho API Skill for OpenClaw

A comprehensive skill for authenticating and interacting with Zoho APIs (CRM, Books, Desk, Creator, and more).

## Overview

Zoho is a business SaaS platform offering:
- **Zoho CRM** - Sales and contact management
- **Zoho Books** - Accounting and invoicing
- **Zoho Desk** - Customer support ticketing
- **Zoho Creator** - Low-code application development
- **Zoho Campaigns** - Email marketing
- **Zoho Inventory** - Stock management
- **Zoho Projects** - Project management
- **And 50+ more business apps!**

This skill enables secure OAuth2 authentication and API interactions with all Zoho products.

## Setup

### 1. Create Zoho API Client

**Step 1:** Go to Zoho Developer Console
šŸ”— https://api-console.zoho.com/

**Step 2:** Create a new client
- Click "Add Client"
- Choose "Server-based Application" (recommended)
- Fill in:
  - Client Name: OpenClaw-Zoho
  - Homepage URL: https://openclaw.ai
  - Authorized Redirect URIs: https://openclaw.ai/callback

**Step 3:** Copy your credentials
- **Client ID:** `xxxxxx`
- **Client Secret:** `xxxxxx`

---

### 2. Generate Refresh Token

**Step 1:** Construct OAuth URL
```bash
# Replace values in brackets []
https://accounts.zoho.com/oauth/v2/auth?
scope=ZohoCRM.modules.ALL&
client_id=[YOUR_CLIENT_ID]&
response_type=code&
access_type=offline&
redirect_uri=[YOUR_REDIRECT_URI]
```

**Step 2:** Open URL in browser
- You'll be redirected to Zoho login
- Click "Accept" to authorize

**Step 3:** Copy the authorization code from redirect URL

**Step 4:** Exchange code for tokens
```bash
curl -X POST "https://accounts.zoho.com/oauth/v2/token" \
  -d "grant_type=authorization_code" \
  -d "client_id=$ZOHO_CLIENT_ID" \
  -d "client_secret=$ZOHO_CLIENT_SECRET" \
  -d "redirect_uri=$ZOHO_REDIRECT_URI" \
  -d "code=[AUTHORIZATION_CODE]"
```

**Response:**
```json
{
  "access_token": "1000.xxxxxx",
  "expires_in": 3600,
  "refresh_token": "1000.xxxxxx"
}
```

**Step 5:** Save the refresh token securely!

---

### 3. Set Environment Variables

Create a `.env` file or set in your system:

```bash
# Required
export ZOHO_CLIENT_ID="your-client-id"
export ZOHO_CLIENT_SECRET="your-client-secret"
export ZOHO_REFRESH_TOKEN="your-refresh-token"

# Optional (defaults shown)
export ZOHO_DATA_CENTER="com"  # com, eu, cn, au, in, jp
export ZOHO_REDIRECT_URI="https://openclaw.ai/callback"
```

**Data Centers:**
| Code | Region |
|------|--------|
| com | US (default) |
| eu | Europe |
| cn | China |
| au | Australia |
| in | India |
| jp | Japan |

---

### 4. Generate Access Token

Zoho access tokens expire in **1 hour**. Always use refresh token:

```bash
curl -X POST "https://accounts.zoho.com/oauth/v2/token" \
  -d "grant_type=refresh_token" \
  -d "client_id=$ZOHO_CLIENT_ID" \
  -d "client_secret=$ZOHO_CLIENT_SECRET" \
  -d "refresh_token=$ZOHO_REFRESH_TOKEN"
```

**Response:**
```json
{
  "access_token": "1000.xxxxxx",
  "expires_in": 3600
}
```

---

## Zoho CRM API

### Base URLs

| Data Center | Base URL |
|-------------|----------|
| US | `https://www.zohoapis.com/crm/v2` |
| EU | `https://www.zohoapis.eu/crm/v2` |
| AU | `https://www.zohoapis.com.au/crm/v2` |
| IN | `https://www.zohoapis.in/crm/v2` |

---

### šŸ” Get All Modules

```bash
curl -X GET "[BASE_URL]/settings/modules" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

### šŸ‘„ CRM Leads Management

#### Get All Leads

```bash
curl -X GET "[BASE_URL]/Leads" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
```

**Response:**
```json
{
  "data": [
    {
      "id": "1234567890",
      "Company": "South Indian AB",
      "Last_Name": "Ravi",
      "First_Name": "Customer",
      "Email": "customer@example.com",
      "Phone": "+46700000000",
      "Status": "Not Contacted"
    }
  ],
  "info": {
    "page": 1,
    "per_page": 200,
    "total_count": 50
  }
}
```

---

#### Create New Lead

```bash
curl -X POST "[BASE_URL]/Leads" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {
        "Company": "South Indian AB",
        "Last_Name": "Ravi",
        "First_Name": "Customer",
        "Email": "customer@example.com",
        "Phone": "+46700000000",
        "Lead_Source": "Website",
        "Industry": "Technology"
      }
    ]
  }'
```

---

#### Update Lead

```bash
curl -X PUT "[BASE_URL]/Leads/[LEAD_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {
        "Phone": "+46709999999",
        "Status": "Contacted"
      }
    ]
  }'
```

---

#### Delete Lead

```bash
curl -X DELETE "[BASE_URL]/Leads/[LEAD_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

### šŸ’¼ CRM Deals Management

#### Create Deal

```bash
curl -X POST "[BASE_URL]/Deals" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {
        "Deal_Name": "Annual Software License - South Indian AB",
        "Amount": 50000,
        "Closing_Date": "2026-03-31",
        "Stage": "Needs Analysis",
        "Pipeline": "Standard",
        "Account_Name": "1234567890"
      }
    ]
  }'
```

---

#### Get Deals by Stage

```bash
curl -X GET "[BASE_URL]/Deals?stage=Closed Won" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

### šŸ‘¤ CRM Contacts Management

#### Create Contact

```bash
curl -X POST "[BASE_URL]/Contacts" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {
        "First_Name": "Ravi",
        "Last_Name": "Senthazal",
        "Email": "ravi@example.com",
        "Phone": "+46701234567",
        "Mailing_Street": "Drottninggatan 1",
        "Mailing_City": "Stockholm",
        "Mailing_Country": "Sweden"
      }
    ]
  }'
```

---

### šŸ¢ CRM Accounts/Companies Management

#### Create Account

```bash
curl -X POST "[BASE_URL]/Accounts" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {
        "Name": "South Indian Restaurant AB",
        "Phone": "+4681234567",
        "Website": "https://southindian.se",
        "Industry": "Restaurant",
        "Billing_City": "Stockholm",
        "Billing_Country": "Sweden",
        "Type": "Customer"
      }
    ]
  }'
```

---

### šŸ“ CRM Notes & Activities

#### Add Note to Record

```bash
curl -X POST "[BASE_URL]/Notes" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {
        "Note_Title": "Follow-up Call Scheduled",
        "Note_Content": "Customer requested follow-up call next week.",
        "Parent_Id": "[LEAD_ID]",
        "Parent_Name": "Leads"
      }
    ]
  }'
```

---

## Zoho Books API

### Base URLs

| Data Center | Base URL |
|-------------|----------|
| US | `https://www.zohoapis.com/books/v3` |
| EU | `https://www.zohoapis.eu/books/v3` |
| AU | `https://www.zohoapis.com.au/books/v3` |

**Important:** All requests require `organization_id` parameter!

---

### šŸ” Authentication for Books

Use the same OAuth tokens. Books uses CRM tokens by default!

---

### šŸ‘¤ Books - Customer Management

#### Get All Customers

```bash
curl -X GET "https://www.zohoapis.com/books/v3/contacts?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

#### Create Customer

```bash
curl -X POST "https://www.zohoapis.com/books/v3/contacts?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_name": "South Indian AB",
    "company_name": "South Indian Restaurant AB",
    "email": "billing@southindian.se",
    "phone": "+4681234567",
    "billing_address": {
      "street": "Drottninggatan 1",
      "city": "Stockholm",
      "state": "Stockholm County",
      "zip": "11123",
      "country": "Sweden"
    }
  }'
```

---

### šŸ’° Books - Invoicing

#### Create Invoice

```bash
curl -X POST "https://www.zohoapis.com/books/v3/invoices?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "1234567890",
    "date": "2026-02-05",
    "due_date": "2026-03-05",
    "line_items": [
      {
        "name": "South Indian Dinner Buffet",
        "description": "2 Adults, Weekend Package",
        "rate": 399,
        "quantity": 2,
        "item_id": "1234567890"
      },
      {
        "name": "Welcome Drinks",
        "rate": 49,
        "quantity": 2,
        "item_id": "1234567891"
      }
    ],
    "notes": "Thank you for dining with us!",
    "terms": "Payment due within 30 days."
  }'
```

---

#### Get Invoice Status

```bash
curl -X GET "https://www.zohoapis.com/books/v3/invoices/[INVOICE_ID]?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

#### Send Invoice to Customer

```bash
curl -X POST "https://www.zohoapis.com/books/v3/invoices/[INVOICE_ID]/actions/send?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to_mail_ids": ["customer@example.com"]
  }'
```

---

### šŸ“Š Books - Expense Tracking

#### Create Expense

```bash
curl -X POST "https://www.zohoapis.com/books/v3/expenses?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "date": "2026-02-05",
    "amount": 1500,
    "account_id": "1234567890",
    "description": "Weekly ingredient supply - spices",
    "vendor_id": "1234567890",
    "tax_id": "1234567890"
  }'
```

---

### šŸ“ˆ Books - Reports

#### Get Profit & Loss Report

```bash
curl -X GET "https://www.zohoapis.com/books/v3/reports/profitandloss?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

## Zoho Desk API

### Base URLs

| Data Center | Base URL |
|-------------|----------|
| US | `https://desk.zoho.com/api/v1` |
| EU | `https://desk.zoho.eu/api/v1` |
| AU | `https://desk.zoho.com.au/api/v1` |

---

### šŸŽ« Ticket Management

#### Get All Tickets

```bash
curl -X GET "https://desk.zoho.com/api/v1/tickets?departmentId=[DEPT_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

#### Create Ticket

```bash
curl -X POST "https://desk.zoho.com/api/v1/tickets" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Table Reservation Issue",
    "departmentId": "1234567890",
    "contact": {
      "lastName": "Ravi",
      "email": "customer@example.com"
    },
    "description": "Customer reported that their online table reservation was not found in the system.",
    "priority": "High",
    "status": "Open"
  }'
```

---

#### Update Ticket

```bash
curl -X PUT "https://desk.zoho.com/api/v1/tickets/[TICKET_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "In Progress",
    "priority": "High",
    "assigneeId": "1234567890"
  }'
```

---

#### Add Comment to Ticket

```bash
curl -X POST "https://desk.zoho.com/api/v1/tickets/[TICKET_ID]/comments" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Contacted customer, issue resolved. Reservation updated in system.",
    "isPublic": true
  }'
```

---

## Zoho Creator API

### Base URLs

| Data Center | Base URL |
|-------------|----------|
| US | `https://creator.zoho.com/api/v2` |
| EU | `https://creator.zoho.eu/api/v2` |

---

### šŸ“ Submit Form Data

```bash
curl -X POST "https://creator.zoho.com/api/v2/[APP_LINK_NAME]/[FORM_LINK_NAME]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "Name": "Employee Onboarding",
      "Employee_Name": "John Doe",
      "Department": "Engineering",
      "Start_Date": "2026-03-01",
      "Manager": "Jane Smith"
    }
  }'
```

---

### šŸ“Š Get Form Records

```bash
curl -X GET "https://creator.zoho.com/api/v2/[APP_LINK_NAME]/[FORM_LINK_NAME]?MaxRows=100" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

## Zoho Campaigns API

### Base URL
`https://campaigns.zoho.com/api/v1`

---

### šŸ“§ Create Campaign

```bash
curl -X POST "https://campaigns.zoho.com/api/v1/campaigns" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_name": "February Restaurant Promotion",
    "subject": "šŸ› Special Offer: 20% Off South Indian Thali!",
    "from_name": "South Indian Restaurant",
    "from_email": "marketing@southindian.se",
    "reply_to": "info@southindian.se"
  }'
```

---

### šŸ‘„ Manage Lists

```bash
# Get all mailing lists
curl -X GET "https://campaigns.zoho.com/api/v1/lists" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

---

## Advanced Features

### šŸ”„ Auto Token Refresh Script

Create a helper script `refresh-zoho-token.sh`:

```bash
#!/bin/bash

# Refresh Zoho access token
RESPONSE=$(curl -X POST "https://accounts.zoho.com/oauth/v2/token" \
  -d "grant_type=refresh_token" \
  -d "client_id=$ZOHO_CLIENT_ID" \
  -d "client_secret=$ZOHO_CLIENT_SECRET" \
  -d "refresh_token=$ZOHO_REFRESH_TOKEN")

# Extract access token
ACCESS_TOKEN=$(echo $RESPONSE | jq -r '.access_token')

# Export for current session
export ZOHO_ACCESS_TOKEN=$ACCESS_TOKEN

echo "Token refreshed: $ACCESS_TOKEN"
```

Run it:
```bash
chmod +x refresh-zoho-token.sh
./refresh-zoho-token.sh
```

---

### šŸ“” Webhooks Setup

Zoho can send real-time updates to your endpoints:

**Configure in Zoho:**
1. Go to Settings → Webhooks
2. Add webhook URL: `https://your-server.com/api/zoho-webhook`
3. Select triggers (e.g., `on_lead_create`, `on_deal_update`)

**Handle webhook in your app:**
```javascript
// Express.js example
app.post('/api/zoho-webhook', (req, res) => {
  const { module, data, event } = req.body;
  
  console.log(`Zoho Webhook: ${event} on ${module}`);
  console.log('Data:', data);
  
  // Process the update
  if (module === 'Leads') {
    // Handle new lead
    handleNewLead(data);
  }
  
  res.status(200).send('OK');
});
```

---

### šŸ”— Multi-Product Workflows

#### Example: Restaurant Customer to Invoice Flow

```bash
# 1. Customer books table (Zoho Creator form)
curl -X POST "https://creator.zoho.com/api/v2/restaurant/bookings" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "Customer_Name": "Ravi",
      "Email": "ravi@example.com",
      "Date": "2026-02-14",
      "Guests": 4,
      "Special_Requests": "Window seat preferred"
    }
  }'
```

```bash
# 2. Create CRM contact
curl -X POST "https://www.zohoapis.com/crm/v2/Contacts" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [{
      "First_Name": "Ravi",
      "Email": "ravi@example.com",
      "Source": "Table Booking"
    }]
  }'
```

```bash
# 3. After dining, create invoice
curl -X POST "https://www.zohoapis.com/books/v3/invoices?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "[CUSTOMER_ID]",
    "date": "2026-02-14",
    "line_items": [{
      "name": "Valentine's Day Special Thali",
      "rate": 499,
      "quantity": 4
    }]
  }'
```

---

## Error Handling

### Common Error Codes

| Code | Meaning | Solution |
|------|---------|----------|
| 401 | Invalid token | Refresh your access token |
| 400 | Bad request | Check JSON syntax |
| 403 | Forbidden | Check API permissions |
| 404 | Not found | Verify record ID |
| 429 | Rate limit | Wait and retry |
| 500 | Server error | Retry later |

---

### Retry Logic Example

```bash
# Function to call Zoho API with retry
call_zoho_api() {
  local url=$1
  local method=$2
  local data=$3
  local max_attempts=3
  local attempt=1
  
  while [ $attempt -le $max_attempts ]; do
    response=$(curl -s -o /dev/null -w "%{http_code}" \
      -X $method "$url" \
      -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d "$data")
    
    if [ $response -eq 200 ] || [ $response -eq 201 ]; then
      echo "Success!"
      return 0
    elif [ $response -eq 429 ]; then
      echo "Rate limited, waiting 60s..."
      sleep 60
    else
      echo "Error: $response"
    fi
    
    attempt=$((attempt + 1))
    sleep 5
  done
  
  echo "Failed after $max_attempts attempts"
  return 1
}
```

---

## Environment Variables Reference

| Variable | Required | Description |
|----------|----------|-------------|
| `ZOHO_CLIENT_ID` | āœ… | OAuth Client ID |
| `ZOHO_CLIENT_SECRET` | āœ… | OAuth Client Secret |
| `ZOHO_REFRESH_TOKEN` | āœ… | Long-lived refresh token |
| `ZOHO_ACCESS_TOKEN` | āŒ | Short-lived (auto-generated) |
| `ZOHO_DATA_CENTER` | āŒ | `com` (default), `eu`, `au`, `in` |
| `ZOHO_REDIRECT_URI` | āŒ | OAuth redirect URL |
| `ZOHO_ORG_ID` | āŒ | Books/Desk organization ID |

---

## Use Cases

### šŸ½ļø Restaurant Business

| Task | Zoho Product | Example |
|------|-------------|---------|
| Table bookings | Creator | Online reservation form |
| Customer database | CRM | Track dining preferences |
| Invoicing | Books | Monthly billing |
| Support tickets | Desk | Reservation issues |
| Marketing campaigns | Campaigns | New menu announcements |

---

### šŸ›’ SaaS Business

| Task | Zoho Product | Example |
|------|-------------|---------|
| Lead tracking | CRM | Sales pipeline |
| Customer support | Desk | Technical issues |
| Subscription billing | Books/Subscriptions | Recurring invoices |
| Feature requests | Creator | Feedback portal |
| Email marketing | Campaigns | Product updates |

---

### šŸ¢ General Business

| Task | Zoho Product | Example |
|------|-------------|---------|
| Contact management | CRM | Company database |
| Project tracking | Projects | Task assignments |
| Expense tracking | Books | Receipt management |
| HR onboarding | Creator | Employee forms |
| IT help desk | Desk | Support tickets |

---

## Security Best Practices

### āœ… Do's

- Store tokens in environment variables
- Use HTTPS for all API calls
- Rotate refresh tokens periodically
- Set up webhook verification
- Use least-privilege API scopes

### āŒ Don'ts

- Never commit tokens to GitHub
- Don't expose access tokens in URLs
- Avoid hardcoding credentials
- Don't share tokens between users

---

## Testing

### Validate Setup

```bash
# Test CRM connection
curl -X GET "https://www.zohoapis.com/crm/v2/settings/modules" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN"
```

Should return module list. If 401, refresh your token!

---

### Test Invoice Creation

```bash
# Create test invoice (amount: 1.00)
curl -X POST "https://www.zohoapis.com/books/v3/invoices?organization_id=[ORG_ID]" \
  -H "Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "[TEST_CUSTOMER_ID]",
    "line_items": [{
      "name": "Test Item",
      "rate": 1,
      "quantity": 1
    }]
  }'
```

---

## Troubleshooting

### "Invalid Token" Error

```bash
# Refresh your access token
curl -X POST "https://accounts.zoho.com/oauth/v2/token" \
  -d "grant_type=refresh_token" \
  -d "client_id=$ZOHO_CLIENT_ID" \
  -d "client_secret=$ZOHO_CLIENT_SECRET" \
  -d "refresh_token=$ZOHO_REFRESH_TOKEN"
```

---

### "Rate Limit Exceeded"

- Wait 60 seconds before retrying
- Implement exponential backoff
- Reduce API call frequency
- Contact Zoho support for higher limits

---

### "Module Not Found"

Verify module name spelling:
- āœ… `Leads`, `Contacts`, `Deals`, `Accounts`
- āŒ `Lead`, `Contact`, `Deal`, `Account`

---

### Permission Denied

Check your OAuth scopes:
- `ZohoCRM.modules.ALL` for full CRM access
- `ZohoBooks.fullaccess` for Books
- `ZohoDesk.fullaccess.all` for Desk

---

## Resources

### Official Documentation
- **Zoho CRM API:** https://www.zoho.com/crm/developer/docs/api/v2/
- **Zoho Books API:** https://www.zoho.com/books/developer/docs/api/v3/
- **Zoho Desk API:** https://desk.zoho.com/developer/docs/api/v1/
- **Zoho Creator API:** https://www.zoho.com/creator/developer/docs/api/v2/

### Tools
- **API Console:** https://api-console.zoho.com/
- **Developer Hub:** https://www.zoho.com/developer/

### Support
- **Zoho Community:** https://help.zoho.com/
- **Developer Forums:** https://forums.zoho.com/

---

## Version

- **Current:** 1.0.0
- **Created:** 2026-02-05
- **Author:** OpenClaw Community

---

**Happy Zoho Automation!** šŸš€šŸ“Š

Questions? Check the troubleshooting section or Zoho's official docs!

Files in this skill

  • EXAMPLES.md16 KB
  • README.md3.9 KB
  • SKILL.md20.6 KB
  • _meta.json273 B
  • index.js11.6 KB
  • package.json1009 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.