Zoho CRM
透過受管理的 OAuth 認證存取 Zoho CRM API。對潛在客戶、聯絡人、帳戶、交易及其他 CRM 模組進行完整的 CRUD 操作,包括搜尋和批次操作。同時支援組織詳細資料、使用者管理及模組中繼資料取得。
快速入門
# 列出潛在客戶
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 權杖。
認證
所有請求都需要在授權標頭中提供 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 金鑰
連線管理
在 https://ctrl.maton.ai 管理您的 Zoho CRM OAuth 連線。
列出連線
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 | 待辦事項 |
| 通話 | Calls | 通話記錄 |
| 活動 | Events | 日曆約會 |
| 產品 | Products | 您銷售的項目 |
列出記錄
GET /zoho-crm/crm/v8/{module_api_name}?fields={field1},{field2}
查詢參數:
| 參數 | 類型 | 說明 |
|---|---|---|
fields | string | 必要。 逗號分隔的欄位 API 名稱(最多 50 個) |
page | integer | 頁碼(預設:1) |
per_page | integer | 每頁記錄數(預設/最多: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": "[email protected]",
"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.request.urlopen(req)), indent=2))
EOF
範例 - 列出帳戶:
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
範例 - 列出交易:
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 /zoho-crm/crm/v8/{module_api_name}/{record_id}
範例:
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
建立記錄
POST /zoho-crm/crm/v8/{module_api_name}
Content-Type: application/json
{
"data": [
{
"field_api_name": "value"
}
]
}
各模組的必要欄位:
| 模組 | 必要欄位 |
|---|---|
| 潛在客戶 | Last_Name |
| 聯絡人 | Last_Name |
| 帳戶 | Account_Name |
| 交易 | Deal_Name, Stage |
| 任務 | Subject |
| 通話 | Subject, Call_Type, Call_Start_Time, Call_Duration |
| 活動 | Event_Title, Start_DateTime, End_DateTime |
範例 - 建立潛在客戶:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"data": [{
"Last_Name": "Smith",
"First_Name": "John",
"Email": "[email protected]",
"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
回應:
{
"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"
}
]
}
範例 - 建立聯絡人:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"data": [{
"Last_Name": "Doe",
"First_Name": "Jane",
"Email": "[email protected]",
"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
範例 - 建立帳戶:
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
更新記錄
PUT /zoho-crm/crm/v8/{module_api_name}
Content-Type: application/json
{
"data": [
{
"id": "record_id",
"field_api_name": "updated_value"
}
]
}
範例:
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
回應:
{
"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 /zoho-crm/crm/v8/{module_api_name}?ids={record_id1},{record_id2}
查詢參數:
| 參數 | 類型 | 說明 |
|---|---|---|
ids | string | 逗號分隔的記錄 ID(必要,最多 100 個) |
wf_trigger | boolean | 是否觸發工作流程(預設:true) |
範例:
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
回應:
{
"data": [
{
"code": "SUCCESS",
"details": {
"id": "7243485000000619001"
},
"message": "record deleted",
"status": "success"
}
]
}
搜尋記錄
GET /zoho-crm/crm/v8/{module_api_name}/search
查詢參數(擇一必要):
| 參數 | 類型 | 說明 |
|---|---|---|
criteria | string | 搜尋條件(例如 (Last_Name:equals:Smith)) |
email | string | 依電子郵件地址搜尋 |
phone | string | 依電話號碼搜尋 |
word | string | 全域文字搜尋 |
page | integer | 頁碼 |
per_page | integer | 每頁記錄數(最多 200 筆) |
條件格式: ((field_api_name:operator:value) and/or (...))
運算子:
- 文字欄位:
equals、not_equal、starts_with、in - 日期/數字欄位:
equals、not_equal、greater_than、less_than、between、in - 布林欄位:
equals、not_equal
範例 - 依電子郵件搜尋:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-crm/crm/v8/Leads/[email protected]')
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
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
回應:
{
"data": [
{
"First_Name": "Christopher",
"Email": "[email protected]",
"Last_Name": "Maclead (Sample)",
"id": "7243485000000597000"
}
],
"info": {
"per_page": 200,
"count": 1,
"page": 1,
"more_records": false
}
}
組織詳細資料
...