zoho-crm
Zoho CRMのAPIと連携し、リード、連絡先、取引先、商談などのCRMレコードの管理、検索、更新、削除、さらには営業パイプラインの管理や組織設定へのアクセスを可能にするSkillです。
📜 元の英語説明(参考)
Zoho CRM API integration with managed OAuth. Manage leads, contacts, accounts, deals, and other CRM records. Use this skill when users want to read, create, update, or delete CRM records, search contacts, manage sales pipelines, access organization settings, manage users, or retrieve module metadata in Zoho CRM. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key.
🇯🇵 日本人クリエイター向け解説
Zoho CRMのAPIと連携し、リード、連絡先、取引先、商談などのCRMレコードの管理、検索、更新、削除、さらには営業パイプラインの管理や組織設定へのアクセスを可能にするSkillです。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o zoho-crm.zip https://jpskill.com/download/5615.zip && unzip -o zoho-crm.zip && rm zoho-crm.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5615.zip -OutFile "$d\zoho-crm.zip"; Expand-Archive "$d\zoho-crm.zip" -DestinationPath $d -Force; ri "$d\zoho-crm.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
zoho-crm.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
zoho-crmフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-17
- 同梱ファイル
- 2
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Zoho CRM
マネージド OAuth 認証で Zoho CRM API にアクセスできます。リード、連絡先、アカウント、商談、その他の CRM モジュールを、検索や一括操作を含む完全な CRUD 操作で管理できます。また、組織の詳細、ユーザー管理、モジュールメタデータの取得もサポートしています。
クイックスタート
# List leads
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads?fields=First_Name,Last_Name,Email')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
ベース URL
https://gateway.maton.ai/zoho-crm/crm/v8/{endpoint}
このゲートウェイは www.zohoapis.com/crm/v8 へのリクエストをプロキシし、OAuth トークンを自動的に挿入します。
認証
すべてのリクエストには、Authorization ヘッダーに Maton API キーが必要です。
Authorization: Bearer $MATON_API_KEY
環境変数: API キーを MATON_API_KEY として設定してください。
export MATON_API_KEY="YOUR_API_KEY"
API キーの取得
- maton.ai でサインインまたはアカウントを作成します。
- maton.ai/settings にアクセスします。
- API キーをコピーします。
接続管理
Zoho CRM OAuth 接続は https://ctrl.maton.ai で管理します。
接続のリスト表示
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=zoho-crm&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
接続の作成
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'zoho-crm'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
接続の取得
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
レスポンス:
{
"connection": {
"connection_id": "e55c5bac-241a-4cc8-9db5-50d2cad09136",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "zoho-crm",
"metadata": {}
}
}
返された url をブラウザで開いて、OAuth 認証を完了してください。
接続の削除
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
接続の指定
複数の Zoho CRM 接続がある場合は、Maton-Connection ヘッダーでどの接続を使用するかを指定します。
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads?fields=First_Name,Last_Name,Email')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', 'e55c5bac-241a-4cc8-9db5-50d2cad09136')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
省略した場合、ゲートウェイはデフォルト(最も古い)のアクティブな接続を使用します。
API リファレンス
モジュール
Zoho CRM はデータをモジュールに整理しています。主要なモジュールは以下の通りです。
| モジュール | API 名 | 説明 |
|---|---|---|
| リード | Leads |
潜在顧客 |
| 連絡先 | Contacts |
個人 |
| アカウント | Accounts |
組織/企業 |
| 商談 | Deals |
営業機会 |
| キャンペーン | Campaigns |
マーケティングキャンペーン |
| タスク | Tasks |
To-do アイテム |
| 通話 | Calls |
電話通話ログ |
| イベント | Events |
カレンダーの予定 |
| 製品 | Products |
販売するアイテム |
レコードのリスト表示
GET /zoho-crm/crm/v8/{module_api_name}?fields={field1},{field2}
クエリパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
fields |
string | 必須。 カンマ区切りのフィールド API 名(最大 50) |
page |
integer | ページ番号(デフォルト: 1) |
per_page |
integer | 1 ページあたりのレコード数(デフォルト/最大: 200) |
sort_by |
string | ソート基準: id、Created_Time、または Modified_Time |
sort_order |
string | asc または desc(デフォルト) |
cvid |
long | カスタムビュー ID |
page_token |
string | 2000 件を超えるレコードのページネーション用 |
例 - リードのリスト表示:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads?fields=First_Name,Last_Name,Email,Phone,Company')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
レスポンス:
{
"data": [
{
"First_Name": "Christopher",
"Email": "christopher-maclead@noemail.invalid",
"Last_Name": "Maclead (Sample)",
"Phone": "555-555-5555",
"Company": "Rangoni Of Florence",
"id": "7243485000000597000"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"sort_by": "id",
"sort_order": "desc",
"more_records": false,
"next_page_token": null
}
}
例 - 連絡先のリスト表示:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Contacts?fields=First_Name,Last_Name,Email,Phone')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.reque 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Zoho CRM
Access the Zoho CRM API with managed OAuth authentication. Manage leads, contacts, accounts, deals, and other CRM modules with full CRUD operations including search and bulk operations. Also supports organization details, user management, and module metadata retrieval.
Quick Start
# List leads
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads?fields=First_Name,Last_Name,Email')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://gateway.maton.ai/zoho-crm/crm/v8/{endpoint}
The gateway proxies requests to www.zohoapis.com/crm/v8 and automatically injects your OAuth token.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Zoho CRM OAuth connections at https://ctrl.maton.ai.
List Connections
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=zoho-crm&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'zoho-crm'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "e55c5bac-241a-4cc8-9db5-50d2cad09136",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "zoho-crm",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Specifying Connection
If you have multiple Zoho CRM connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads?fields=First_Name,Last_Name,Email')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', 'e55c5bac-241a-4cc8-9db5-50d2cad09136')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If omitted, the gateway uses the default (oldest) active connection.
API Reference
Modules
Zoho CRM organizes data into modules. Core modules include:
| Module | API Name | Description |
|---|---|---|
| Leads | Leads |
Potential customers |
| Contacts | Contacts |
Individual people |
| Accounts | Accounts |
Organizations/companies |
| Deals | Deals |
Sales opportunities |
| Campaigns | Campaigns |
Marketing campaigns |
| Tasks | Tasks |
To-do items |
| Calls | Calls |
Phone call logs |
| Events | Events |
Calendar appointments |
| Products | Products |
Items you sell |
List Records
GET /zoho-crm/crm/v8/{module_api_name}?fields={field1},{field2}
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
fields |
string | Required. Comma-separated field API names (max 50) |
page |
integer | Page number (default: 1) |
per_page |
integer | Records per page (default/max: 200) |
sort_by |
string | Sort by: id, Created_Time, or Modified_Time |
sort_order |
string | asc or desc (default) |
cvid |
long | Custom view ID |
page_token |
string | For >2000 records pagination |
Example - List Leads:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads?fields=First_Name,Last_Name,Email,Phone,Company')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"data": [
{
"First_Name": "Christopher",
"Email": "christopher-maclead@noemail.invalid",
"Last_Name": "Maclead (Sample)",
"Phone": "555-555-5555",
"Company": "Rangoni Of Florence",
"id": "7243485000000597000"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"sort_by": "id",
"sort_order": "desc",
"more_records": false,
"next_page_token": null
}
}
Example - List Contacts:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Contacts?fields=First_Name,Last_Name,Email,Phone')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Example - List Accounts:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Accounts?fields=Account_Name,Website,Phone')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Example - List Deals:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Deals?fields=Deal_Name,Stage,Amount')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get Record
GET /zoho-crm/crm/v8/{module_api_name}/{record_id}
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads/7243485000000597000')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Records
POST /zoho-crm/crm/v8/{module_api_name}
Content-Type: application/json
{
"data": [
{
"field_api_name": "value"
}
]
}
Mandatory Fields by Module:
| Module | Required Fields |
|---|---|
| Leads | Last_Name |
| Contacts | Last_Name |
| Accounts | Account_Name |
| Deals | Deal_Name, Stage |
| Tasks | Subject |
| Calls | Subject, Call_Type, Call_Start_Time, Call_Duration |
| Events | Event_Title, Start_DateTime, End_DateTime |
Example - Create Lead:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"data": [{
"Last_Name": "Smith",
"First_Name": "John",
"Email": "john.smith@example.com",
"Company": "Acme Corp",
"Phone": "+1-555-0123"
}]
}).encode()
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"data": [
{
"code": "SUCCESS",
"details": {
"Modified_Time": "2026-02-06T01:10:56-08:00",
"Modified_By": {
"name": "User Name",
"id": "7243485000000590001"
},
"Created_Time": "2026-02-06T01:10:56-08:00",
"id": "7243485000000619001",
"Created_By": {
"name": "User Name",
"id": "7243485000000590001"
}
},
"message": "record added",
"status": "success"
}
]
}
Example - Create Contact:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"data": [{
"Last_Name": "Doe",
"First_Name": "Jane",
"Email": "jane.doe@example.com",
"Phone": "+1-555-9876"
}]
}).encode()
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Contacts', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Example - Create Account:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"data": [{
"Account_Name": "Acme Corporation",
"Website": "https://acme.com",
"Phone": "+1-555-1234"
}]
}).encode()
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Accounts', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Update Records
PUT /zoho-crm/crm/v8/{module_api_name}
Content-Type: application/json
{
"data": [
{
"id": "record_id",
"field_api_name": "updated_value"
}
]
}
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"data": [{
"id": "7243485000000619001",
"Phone": "+1-555-9999",
"Company": "Updated Company Name"
}]
}).encode()
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads', data=data, method='PUT')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"data": [
{
"code": "SUCCESS",
"details": {
"Modified_Time": "2026-02-06T01:11:01-08:00",
"Modified_By": {
"name": "User Name",
"id": "7243485000000590001"
},
"Created_Time": "2026-02-06T01:10:56-08:00",
"id": "7243485000000619001",
"Created_By": {
"name": "User Name",
"id": "7243485000000590001"
}
},
"message": "record updated",
"status": "success"
}
]
}
Delete Records
DELETE /zoho-crm/crm/v8/{module_api_name}?ids={record_id1},{record_id2}
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
ids |
string | Comma-separated record IDs (required, max 100) |
wf_trigger |
boolean | Execute workflows (default: true) |
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads?ids=7243485000000619001', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"data": [
{
"code": "SUCCESS",
"details": {
"id": "7243485000000619001"
},
"message": "record deleted",
"status": "success"
}
]
}
Search Records
GET /zoho-crm/crm/v8/{module_api_name}/search
Query Parameters (one required):
| Parameter | Type | Description |
|---|---|---|
criteria |
string | Search criteria (e.g., (Last_Name:equals:Smith)) |
email |
string | Search by email address |
phone |
string | Search by phone number |
word |
string | Global text search |
page |
integer | Page number |
per_page |
integer | Records per page (max 200) |
Criteria Format: ((field_api_name:operator:value) and/or (...))
Operators:
- Text fields:
equals,not_equal,starts_with,in - Date/Number fields:
equals,not_equal,greater_than,less_than,between,in - Boolean fields:
equals,not_equal
Example - Search by email:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads/search?email=christopher-maclead@noemail.invalid')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Example - Search by criteria:
python <<'EOF'
import urllib.request, os, json
import urllib.parse
criteria = urllib.parse.quote('(Last_Name:starts_with:Smith)')
req = urllib.request.Request(f'https://gateway.maton.ai/zoho-crm/crm/v8/Leads/search?criteria={criteria}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"data": [
{
"First_Name": "Christopher",
"Email": "christopher-maclead@noemail.invalid",
"Last_Name": "Maclead (Sample)",
"id": "7243485000000597000"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"more_records": false
}
}
Organization Details
Retrieve your Zoho CRM organization details.
GET /zoho-crm/crm/v8/org
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/org')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"org": [
{
"id": "7243485000000020005",
"company_name": "Acme Corp",
"domain_name": "org123456789",
"primary_email": "admin@example.com",
"phone": "555-555-5555",
"currency": "US Dollar - USD",
"currency_symbol": "$",
"iso_code": "USD",
"time_zone": "PST",
"country_code": "US",
"zgid": "123456789",
"type": "production",
"mc_status": false,
"license_details": {
"paid": true,
"paid_type": "enterprise",
"users_license_purchased": 10,
"trial_expiry": null
}
}
]
}
Users
Retrieve users in your Zoho CRM organization.
GET /zoho-crm/crm/v8/users
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
type |
string | Filter by user type: AllUsers, ActiveUsers, DeactiveUsers, ConfirmedUsers, NotConfirmedUsers, DeletedUsers, ActiveConfirmedUsers, AdminUsers, ActiveConfirmedAdmins, CurrentUser |
page |
integer | Page number (default: 1) |
per_page |
integer | Records per page (default/max: 200) |
ids |
string | Comma-separated user IDs (max 100) |
Example - List all users:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/users?type=AllUsers')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"users": [
{
"id": "7243485000000590001",
"first_name": "John",
"last_name": "Doe",
"full_name": "John Doe",
"email": "john.doe@example.com",
"status": "active",
"confirm": true,
"role": {
"name": "CEO",
"id": "7243485000000026005"
},
"profile": {
"name": "Administrator",
"id": "7243485000000026011"
},
"time_zone": "PST",
"country": "US",
"locale": "en_US"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"more_records": false
}
}
Example - Get specific user:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/users/7243485000000590001')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Modules Metadata
Retrieve metadata about all available CRM modules.
GET /zoho-crm/crm/v8/settings/modules
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
status |
string | Filter by status: user_hidden, system_hidden, scheduled_for_deletion, visible |
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/settings/modules')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"modules": [
{
"api_name": "Leads",
"module_name": "Leads",
"singular_label": "Lead",
"plural_label": "Leads",
"api_supported": true,
"creatable": true,
"editable": true,
"deletable": true,
"viewable": true,
"status": "visible",
"generated_type": "default",
"id": "7243485000000002175",
"profiles": [
{"name": "Administrator", "id": "7243485000000026011"}
]
}
]
}
Fields Metadata
Retrieve field metadata for a specific module.
GET /zoho-crm/crm/v8/settings/fields?module={module_api_name}
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
module |
string | Required. API name of the module (e.g., Leads, Contacts) |
type |
string | all for all fields, unused for unused fields only |
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/settings/fields?module=Leads')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"fields": [
{
"api_name": "Last_Name",
"field_label": "Last Name",
"data_type": "text",
"system_mandatory": true,
"custom_field": false,
"visible": true,
"searchable": true,
"sortable": true,
"id": "7243485000000002613"
}
]
}
Layouts Metadata
Retrieve layout metadata for a specific module.
GET /zoho-crm/crm/v8/settings/layouts?module={module_api_name}
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
module |
string | Required. API name of the module (e.g., Leads, Contacts) |
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/settings/layouts?module=Leads')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"layouts": [
{
"id": "7243485000000091055",
"name": "Standard",
"api_name": "Standard",
"status": "active",
"visible": true,
"profiles": [
{"name": "Administrator", "id": "7243485000000026011"}
],
"sections": [
{
"display_label": "Lead Information",
"api_name": "Lead_Information",
"sequence_number": 1,
"fields": [...]
}
]
}
]
}
Roles
Retrieve roles in your Zoho CRM organization.
GET /zoho-crm/crm/v8/settings/roles
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/settings/roles')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"roles": [
{
"id": "7243485000000026005",
"name": "CEO",
"display_label": "CEO",
"share_with_peers": true,
"description": null,
"reporting_to": null
},
{
"id": "7243485000000026008",
"name": "Manager",
"display_label": "Manager",
"share_with_peers": false,
"reporting_to": {
"name": "CEO",
"id": "7243485000000026005"
}
}
]
}
Example - Get specific role:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/settings/roles/7243485000000026005')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Profiles
Retrieve profiles (permission sets) in your Zoho CRM organization.
GET /zoho-crm/crm/v8/settings/profiles
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/settings/profiles')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"profiles": [
{
"id": "7243485000000026011",
"name": "Administrator",
"display_label": "Administrator",
"type": "normal_profile",
"custom": false,
"description": null
},
{
"id": "7243485000000026014",
"name": "Standard",
"display_label": "Standard",
"type": "normal_profile",
"custom": false,
"description": null
}
]
}
Example - Get specific profile:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/settings/profiles/7243485000000026011')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Pagination
Zoho CRM uses page-based pagination with optional page tokens for large datasets:
GET /zoho-crm/crm/v8/{module_api_name}?fields=First_Name,Last_Name&page=1&per_page=50
Response includes pagination info:
{
"data": [...],
"info": {
"per_page": 50,
"count": 50,
"page": 1,
"sort_by": "id",
"sort_order": "desc",
"more_records": true,
"next_page_token": "token_value",
"page_token_expiry": "2026-02-07T01:10:56-08:00"
}
}
- For up to 2,000 records: Use
pageparameter (increment each request) - For 2,000+ records: Use
page_tokenfrom previous response - Page tokens expire after 24 hours
Code Examples
JavaScript
const response = await fetch(
'https://gateway.maton.ai/zoho-crm/crm/v8/Leads?fields=First_Name,Last_Name,Email',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const data = await response.json();
Python
import os
import requests
response = requests.get(
'https://gateway.maton.ai/zoho-crm/crm/v8/Leads',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
params={'fields': 'First_Name,Last_Name,Email'}
)
data = response.json()
Notes
- The
fieldsparameter is required for list operations (max 50 fields) - Module API names are case-sensitive (e.g.,
Leads, notleads) - Maximum 100 records per create/update request
- Maximum 100 records per delete request
- Maximum 200 records returned per GET request
- Maximum 2,000 records without page_token; up to 100,000 with page_token
- Use field API names (not display names) in requests
- If you receive a scope error, contact Maton support at support@maton.ai with the specific operations/APIs you need and your use-case
- Empty datasets return HTTP 204 (No Content) with empty body
- IMPORTANT: When using curl commands, use
curl -gwhen URLs contain brackets to disable glob parsing - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments
Error Handling
| Status | Meaning |
|---|---|
| 400 | Missing Zoho CRM connection, missing required parameter, or invalid request |
| 401 | Invalid or missing Maton API key, or OAuth scope mismatch |
| 404 | Resource not found |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Zoho CRM API |
Common Error Codes
| Code | Description |
|---|---|
OAUTH_SCOPE_MISMATCH |
OAuth token lacks required permissions for the endpoint |
MANDATORY_NOT_FOUND |
Required field is missing |
INVALID_DATA |
Data type mismatch or format error |
DUPLICATE_DATA |
Record violates unique field constraint |
RECORD_NOT_FOUND |
The specified record ID does not exist |
Troubleshooting: API Key Issues
- Check that the
MATON_API_KEYenvironment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Troubleshooting: Invalid App Name
- Ensure your URL path starts with
zoho-crm. For example:
- Correct:
https://gateway.maton.ai/zoho-crm/crm/v8/Leads - Incorrect:
https://gateway.maton.ai/crm/v8/Leads
Resources
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (27,984 bytes)
- 📎 LICENSE.txt (1,072 bytes)