Zoho Recruit
Zoho Recruit
通过托管的 OAuth 认证访问 Zoho Recruit API。管理候选人、职位空缺、面试、申请和招聘工作流,支持完整的增删改查操作。
快速开始
# 列出所有候选人
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates?per_page=10')
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-recruit/{原生API路径}
替换{原生API路径}为实际的 Zoho Recruit API 端点路径。网关会将请求代理至recruit.zoho.com并自动注入您的 OAuth 令牌。
认证
所有请求都要求在 Authorization 请求头中包含 Maton API 密钥:
Authorization: Bearer $MATON_API_KEY
环境变量:将您的 API 密钥设置为MATON_API_KEY:
export MATON_API_KEY="您的API密钥"
获取您的 API 密钥
- 请登录或前往maton.ai
- 前往maton.ai/settings
- 复制您的API密钥
连接管理
在以下地址管理您的Zoho Recruit OAuth连接https://ctrl.maton.ai。
列出连接
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=zoho-recruit&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-recruit'}).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": "0c9fa9b1-80b6-4caa-afc2-8629fe4d9661",
"status": "ACTIVE",
"creation_time": "2026-02-06T07:48:59.474215Z",
"last_updated_time": "2026-02-06T07:57:52.950167Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "zoho-recruit",
"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 Recruit连接,请通过以下方式指定要使用的连接Maton-连接请求头:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '0c9fa9b1-80b6-4caa-afc2-8629fe4d9661')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
如果省略,网关将使用默认(最早创建的)活动连接。
API 参考
模块
列出所有模块
获取您的 Zoho Recruit 账户中所有可用模块的列表。
GET /zoho-recruit/recruit/v2/settings/modules
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/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
候选人
列出候选人
GET /zoho-recruit/recruit/v2/Candidates
查询参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
fields | 字符串 | - | 逗号分隔的字段API名称 |
排序顺序 | 字符串 | - | 升序或降序 |
排序依据 | 字符串 | - | 用于排序的字段API名称 |
已转化 | 字符串 | - | 真,假, 或两者 |
已批准 | 字符串 | - | 真,假,或两者 |
页面 | 整数 | 1 | 页码 |
每页记录数 | 整数 | 200 | 每页记录数(最多200条) |
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates?per_page=10')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
响应:
{
"data": [
{
"id": "846336000000552208",
"First_Name": "Christina",
"Last_Name": "Palaskas",
"Email": "c.palaskas@example.com",
"Candidate_Status": "已转换 - 员工",
"Current_Employer": "Chandlers",
"Current_Job_Title": "技术顾问",
"Experience_in_Years": 3,
"Skill_Set": "沟通、演示、客户服务",
"Candidate_Owner": {
"name": "Byungkyu Park",
"id": "846336000000549541"
}
}
],
"info": {
"per_page": 10,
"count": 1,
"page": 1,
"more_records": false
}
}
通过ID获取候选人
GET /zoho-recruit/recruit/v2/Candidates/{record_id}
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates/846336000000552208')
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-recruit/recruit/v2/Candidates/search?criteria={criteria}
查询参数:
| 参数 | 类型 | 描述 |
|---|---|---|
criteria | 字符串 | 搜索条件(例如:(Last_Name:contains:Smith)) |
email | 字符串 | 按邮箱搜索 |
phone | 字符串 | 按电话搜索 |
word | 字符串 | 全局词语搜索 |
page | 整数 | 页码 |
per_page | 整数 | 每页记录数 |
搜索运算符:
- 文本:
等于,不等于,以...开头,以...结尾,包含,不包含,在...中 - 日期/数字:
等于,不等于大于小于大于等于小于等于介于示例:python <<'EOF' import urllib.request, os, json import urllib.parse criteria = urllib.parse.quote('(Candidate_Status:equals:Active)') req = urllib.request.Request(f'https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates/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创建候选人POST /zoho-recruit/recruit/v2/Candidates Content-Type: application/json { "data": [ { "First_Name": "John", "Last_Name": "Doe", "Email": "john.doe@example.com", "Phone": "555-123-4567", "Current_Job_Title": "Software Engineer" } ] }示例:
python <<'EOF' import urllib.request, os, json data = json.dumps({ "data": [{ "First_Name": "John", "Last_Name": "Doe", "Email": "john.doe@example.com", "Phone": "555-123-4567" }] }).encode() req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates', 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", "status": "success", "message": "record added", "details": { "id": "846336000000600001", "Created_Time": "2026-02-06T10:00:00-08:00", "Created_By": { "name": "User Name", "id": "846336000000549541" } } } ] }
更新候选人
PUT /zoho-recruit/recruit/v2/Candidates/{record_id} Content-Type: application/json { "data": [ { "Current_Job_Title": "Senior Software Engineer" } ] }
示例:
python <<'EOF' import urllib.request, os, json data = json.dumps({ "data": [{ "Current_Job_Title": "Senior Software Engineer" }] }).encode() req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates/846336000000552208', 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
删除候选人
Update Candidate
PUT /zoho-recruit/recruit/v2/Candidates/{record_id}
Content-Type: application/json
{
"data": [
{
"Current_Job_Title": "Senior Software Engineer"
}
]
}
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"data": [{
"Current_Job_Title": "Senior Software Engineer"
}]
}).encode()
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates/846336000000552208', 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
Delete Candidates
DELETE /zoho-recruit/recruit/v2/Candidates?ids={record_id1},{record_id2}
职位空缺
列出职位空缺
GET /zoho-recruit/recruit/v2/Job_Openings
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Job_Openings?per_page=10')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
响应:
{
"data": [
{
"id": "846336000000552093",
"Posting_Title": "高级会计师(示例)",
"Job_Opening_Status": "等待批准",
"Date_Opened": "2026-01-21",
"Target_Date": "2026-02-20",
"Industry": "会计",
"City": "塔拉哈西",
"No_of_Candidates_Hired": 0,
"No_of_Candidates_Associated": 0
}
],
"info": {
"per_page": 10,
"count": 1,
"page": 1,
"more_records": false
}
}
根据ID获取职位空缺
GET /zoho-recruit/recruit/v2/Job_Openings/{record_id}
创建职位空缺
POST /zoho-recruit/recruit/v2/Job_Openings
Content-Type: application/json
{
"data": [
{
"Posting_Title": "软件工程师",
"Job_Opening_Status": "进行中",
"Date_Opened": "2026-02-01",
"Target_Date": "2026-03-01"
}
]
}
更新职位空缺
PUT /zoho-recruit/recruit/v2/Job_Openings/{record_id}
Content-Type: application/json
删除职位空缺
DELETE /zoho-recruit/recruit/v2/Job_Openings?ids={record_id1},{record_id2}
面试
列出面试
GET /zoho-recruit/recruit/v2/Interviews
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Interviews?per_page=10')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
通过ID获取面试
GET /zoho-recruit/recruit/v2/Interviews/{record_id}
创建面试
POST /zoho-recruit/recruit/v2/Interviews
Content-Type: application/json
{
"data": [
{
"Interview_Name": "技术面试",
"Candidate_Name": {"id": "846336000000552208"},
"Posting_Title": {"id": "846336000000552093"},
"Start_DateTime": "2026-02-10T10:00:00-08:00",
"End_DateTime": "2026-02-10T11:00:00-08:00"
}
]
}
部门
列出部门
GET /zoho-recruit/recruit/v2/Departments
示例:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/zoho-recruit/recruit/v2/Departments?per_page=10')
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-recruit/recruit/v2/Applications
通用记录操作
所有模块都支持相同的CRUD操作:
# 列出记录
GET /zoho-recruit/recruit/v2/{module_api_name}
# 通过ID获取记录
GET /zoho-recruit/recruit/v2/{module_api_name}/{record_id}
# 创建记录
POST /zoho-recruit/recruit/v2/{module_api_name}
# 更新记录
PUT /zoho-recruit/recruit/v2/{module_api_name}/{record_id}
# 删除记录
DELETE /zoho-recruit/recruit/v2/{module_api_name}?ids={id1},{id2}
# 搜索记录
GET /zoho-recruit/recruit/v2/{module_api_name}/search?criteria={criteria}
可用模块
| 模块 | API名称 | 描述 |
|---|---|---|
| 候选人 | Candidates | 求职者 |
| 职位空缺 | 职位空缺 | 空缺职位 |
| 申请 | 申请 | 求职申请 |
| 面试 | 面试 | 已安排面试 |
| 部门 | 部门 | 公司部门 |
| 客户 | 客户 | 客户公司 |
| 联系人 | 联系人 | 联系人 |
| 活动 | 活动 | 招聘活动 |
| 推荐 | 推荐 | 员工推荐 |
| 任务 | 任务 | 待办事项 |
| 事件 | 事件 | 日历事件 |
| 供应商 | 供应商 | 外部供应商 |
分页
Zoho Recruit 使用基于页面的分页:
GET /zoho-recruit/recruit/v2/{module_api_name}?page=1&per_page=200
页面:页码(默认:1)每页记录数:每页记录数(默认:200,最大:200)
响应包含分页信息:
{
"data": [...],
"info": {
"per_page": 200,
"count": 50,
"page": 1,
"more_records": false
}
}
代码示例
JavaScript
const response = await fetch(
'https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates?per_page=10',
{
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-recruit/recruit/v2/Candidates',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
params={'per_page': 10}
)
data = response.json()
注意事项
- 记录ID是数字字符串(例如,
846336000000552208) - 每个GET请求最多200条记录
- 每个POST/PUT请求最多100条记录
- 每个DELETE请求最多100条记录
- 模块API名称区分大小写(例如,
Job_Openings,而不是job_openings) Last_Name是候选人模块的必填字段- 日期格式:
yyyy-MM-dd - 日期时间格式:
yyyy-MM-ddTHH:mm:ss±HH:mm(ISO 8601标准) - 查找字段使用包含
id以及可选地包含name - 的JSON对象。
重要提示:当使用curl命令时,如果URL包含特殊字符,请使用curl -g - 。
重要提示:当将curl输出通过管道传递给jq或其他命令时,在某些shell环境中,像$MATON_API_KEY
这样的环境变量可能无法正确展开。
| 错误处理 | 状态码 |
|---|---|
| 含义 | 400 |
| 缺少Zoho Recruit连接或请求无效 | 无效或缺失的Maton API密钥 |
| 429 | 请求频率受限 |
| 4xx/5xx | 来自Zoho Recruit API的穿透错误 |
常见错误代码
| 代码 | 描述 |
|---|---|
| INVALID_DATA | 字段值无效 |
| MANDATORY_NOT_FOUND | 缺少必填字段 |
| DUPLICATE_DATA | 检测到重复记录 |
| INVALID_MODULE | 模块API名称无效 |
| NO_PERMISSION | 权限不足 |
故障排除:API密钥问题
- 请检查
MATON_API_KEY环境变量已设置:
echo $MATON_API_KEY
- 通过列出连接来验证API密钥是否有效:
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
故障排除:应用名称无效
- 请确保您的URL路径以
zoho-recruit开头。例如:
- 正确示例:
https://gateway.maton.ai/zoho-recruit/recruit/v2/Candidates - 错误示例:
https://gateway.maton.ai/recruit/v2/Candidates


微信扫一扫,打赏作者吧~