Zoho CRM은(는) 무엇을 하나요?
관리되는 OAuth 인증으로 Zoho CRM API에 액세스하세요. 검색 및 대량 작업을 포함한 전체 CRUD 작업으로 리드, 연락처, 계정, 거래 및 기타 CRM 모듈을 관리하세요. 또한 조직 세부 정보, 사용자 관리 및 모듈 메타데이터 검색을 지원합니다.
빠른 시작
# 리드 목록 조회
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 키를 복사하세요.
연결 관리
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 | 문자열 | 필수. 쉼표로 구분된 필드 API 이름 (최대 50개) |
page | 정수 | 페이지 번호 (기본값: 1) |
per_page | 정수 | 페이지당 레코드 수 (기본값/최대: 200) |
sort_by | 문자열 | 정렬 기준: id, Created_Time, 또는 Modified_Time |
sort_order | 문자열 | asc 또는 desc (기본값) |
cvid | long | 사용자 정의 보기 ID |
page_token | 문자열 | 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": "사용자 이름",
"id": "7243485000000590001"
},
"Created_Time": "2026-02-06T01:10:56-08:00",
"id": "7243485000000619001",
"Created_By": {
"name": "사용자 이름",
"id": "7243485000000590001"
}
},
"message": "레코드 추가됨",
"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": "업데이트된 회사 이름"
}]
}).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": "사용자 이름",
"id": "7243485000000590001"
},
"Created_Time": "2026-02-06T01:10:56-08:00",
"id": "7243485000000619001",
"Created_By": {
"name": "사용자 이름",
"id": "7243485000000590001"
}
},
"message": "레코드 업데이트됨",
"status": "success"
}
]
}
레코드 삭제
DELETE /zoho-crm/crm/v8/{module_api_name}?ids={record_id1},{record_id2}
쿼리 매개변수:
| 매개변수 | 유형 | 설명 |
|---|---|---|
ids | 문자열 | 쉼표로 구분된 레코드 ID (필수, 최대 100개) |
wf_trigger | 부울 | 워크플로 실행 (기본값: 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": "레코드 삭제됨",
"status": "success"
}
]
}
레코드 검색
GET /zoho-crm/crm/v8/{module_api_name}/search
쿼리 매개변수 (하나 필수):
| 매개변수 | 유형 | 설명 |
|---|---|---|
criteria | 문자열 | 검색 기준 (예: (Last_Name:equals:Smith)) |
email | 문자열 | 이메일 주소로 검색 |
phone | 문자열 | 전화번호로 검색 |
word | 문자열 | 전체 텍스트 검색 |
page | 정수 | 페이지 번호 |
per_page | 정수 | 페이지당 레코드 수 (최대 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
}
}
조직 세부 정보
... (잘림)