API REFERENCE
API 参考
职引 Open API v1 全部端点。基础地址 https://api2.bysjob.com,所有接口走 Authorization: Bearer hecn_live_… 鉴权,建议传 Idempotency-Key 头防重复执行。
快速开始
1. 申请 API Key:登录后进入「用户中心 → API 密钥」,点击「创建 API Key」。Key 明文仅展示一次,请立即保存。
2. 认证:每个请求带 Authorization: Bearer hecn_live_…。
3. 幂等:写入类接口建议带 Idempotency-Key 头(≤160 字符),重复请求返回首次结果且不重复扣费。
4. 计费:按量付费,仅扣付费积分与注册赠送积分;资源包、订阅、促销不参与。余额不足返回 402。
角色权限:求职者可调用简历解析、人岗匹配;JD 优化、批量筛选仅招聘者可用(求职者调用返回 403 recruiter_only)。
错误码
| HTTP | error | 含义 |
|---|---|---|
| 400 | invalid_input | 参数校验失败,见 detail |
| 401 | unauthorized | 缺少或无效的 API Key |
| 402 | insufficient_points | 付费积分不足,充值后重试 |
| 403 | recruiter_only | 该接口仅招聘者可用 |
| 409 | idempotency_key_in_progress | 同 Key 请求正在执行,稍后重试 |
| 413 | payload_too_large | 请求体超 75MB 或 data URL 超 25M 字符 |
| 429 | open_api_quota_exceeded | 超出日/月请求限额 |
| 500 | internal_error | 服务异常,凭 request_id 联系排查 |
端点概览
| 方法 | 路径 | 计费 |
|---|---|---|
| POST | /api/open/v1/resumes/parse | 按页计费:TextIn xParse 0.05 积分/页(5 point_cents/页),不向上取整 |
| POST | /api/open/v1/matches/resume-jd | 固定计费:1 积分/次(100 point_cents),与模型实际消耗无关 |
| POST | /api/open/v1/jds/optimize | 按模型实际 token 消耗计费,最低 1 积分/次(100 point_cents) |
| POST | /api/open/v1/batches/screen | 按候选人数量计费:1 积分/位(100 point_cents/位) |
| GET | /api/open/v1/batches/:id | 本接口不扣费 |
简历解析
/api/open/v1/resumes/parse将 PDF 简历解析为结构化纯文本,按页计费。适合 ATS、校招系统与人才库做入库前预处理。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
fileDataUrl | string | 是 | PDF 的 base64 data URL,形如 data:application/pdf;base64,...,最长 25,000,000 字符。 |
fileName | string | 否 | 文件名,最长 240 字符,仅用于审计展示。 |
pages | integer | 否 | 显式指定页数(1–10000)。不传则按 PDF 内部 /Type /Page 估算。 |
timeoutMs | integer | 否 | 单次解析超时(10000–660000 毫秒)。不传走默认。 |
curl -X POST https://api2.bysjob.com/api/open/v1/resumes/parse \
-H "Authorization: Bearer hecn_live_xxx" \
-H "Idempotency-Key: parse-resume-001" \
-H "Content-Type: application/json" \
-d '{
"fileDataUrl": "data:application/pdf;base64,JVBERi0xLjQK...",
"fileName": "张三_前端工程师.pdf",
"pages": 3
}'{
"ok": true,
"request_id": "8f3c...e21",
"data": {
"text": "张三 | 前端工程师\n联系方式:...\n教育背景:...",
"pages": 3
},
"usage": { "pages": 3, "provider": "textin", "model": "xparse-document-parse" },
"billing": {
"billed_point_cents": 15,
"billed_points": 0.15,
"balance_point_cents": 9985,
"resource_point_cents": 0
}
}计费:按页计费:TextIn xParse 0.05 积分/页(5 point_cents/页),不向上取整。3 页 = 0.15 积分。
- 解析走 B 端 TextIn xParse,原文不长期存储,批量任务入库时以占位符替代明文。
- data URL 过大(超 25M 字符)直接返回 413;全局请求体上限 75MB。
人岗匹配
/api/open/v1/matches/resume-jd输入 JD 与简历文本,返回匹配分、优势、差距、关键词覆盖与下一步复核建议。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
resume_text | string | 是 | 简历正文,最长 12,000 字符。也接受 camelCase resumeText。 |
jd_text | string | 是 | 岗位描述正文,10–8,000 字符。也接受 camelCase jdText。 |
job_title | string | 否 | 岗位名称,最长 200 字符,辅助匹配定向。也接受 camelCase jobTitle。 |
curl -X POST https://api2.bysjob.com/api/open/v1/matches/resume-jd \
-H "Authorization: Bearer hecn_live_xxx" \
-H "Idempotency-Key: match-001" \
-H "Content-Type: application/json" \
-d '{
"resume_text": "张三,5 年前端经验,精通 React/TypeScript...",
"jd_text": "招聘高级前端工程师,要求熟悉 React、TypeScript、Webpack..."
}'{
"ok": true,
"request_id": "a1b2...c3d4",
"data": {
"score": 78,
"strengths": ["React 5 年实战", "TypeScript 类型体系熟悉"],
"gaps": ["缺少 Node.js 后端经验"],
"actions": ["建议补充 1-2 个全栈项目案例"]
},
"usage": { "prompt_tokens": 1820, "completion_tokens": 320, "total_tokens": 2140 },
"billing": {
"billed_point_cents": 100,
"billed_points": 1,
"balance_point_cents": 9885,
"resource_point_cents": 0
}
}计费:固定计费:1 积分/次(100 point_cents),与模型实际消耗无关。
- 字段同时接受 snake_case 与 camelCase,建议统一用 snake_case。
JD 优化
/api/open/v1/jds/optimize把招聘需求转成更清晰、合规、可发布的岗位描述,便于企业系统内嵌。
请求体约束
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
jd_text | string | 否 | 原始 JD 正文,最长 8,000 字符。也接受 camelCase jdText。 |
job_title | string | 否 | 岗位名称,最长 200 字符。也接受 camelCase jobTitle。 |
requirements | string | 否 | 岗位要求要点,最长 8,000 字符。 |
location | string | 否 | 工作地点,最长 120 字符。 |
experience | string | 否 | 经验要求,最长 120 字符。 |
curl -X POST https://api2.bysjob.com/api/open/v1/jds/optimize \
-H "Authorization: Bearer hecn_live_xxx" \
-H "Idempotency-Key: jd-opt-001" \
-H "Content-Type: application/json" \
-d '{
"job_title": "高级前端工程师",
"requirements": "React/TypeScript/性能优化/跨团队协作",
"location": "上海",
"experience": "3-5 年"
}'{
"ok": true,
"request_id": "e5f6...7890",
"data": {
"content": "## 高级前端工程师(上海)\n\n### 岗位职责\n1. ..."
},
"usage": { "prompt_tokens": 960, "completion_tokens": 740, "total_tokens": 1700 },
"billing": {
"billed_point_cents": 100,
"billed_points": 1,
"balance_point_cents": 9785,
"resource_point_cents": 0
}
}计费:按模型实际 token 消耗计费,最低 1 积分/次(100 point_cents)。
- 仅招聘者可用;求职者调用返回 403 recruiter_only。
批量筛选
/api/open/v1/batches/screenJD + 多份简历异步处理,立即返回 batch_id,随后用查询接口轮询进度与候选人排序。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
jd_text | string | 是 | 岗位描述正文,10–8,000 字符。也接受 camelCase jdText。 |
label | string | 否 | 任务标签,最长 120 字符,便于检索。 |
resumes | array<object> | 是 | 候选人简历数组,1–20 条。每条含 text(必填,≤12,000 字符)与 label(可选,≤120 字符)。 |
curl -X POST https://api2.bysjob.com/api/open/v1/batches/screen \
-H "Authorization: Bearer hecn_live_xxx" \
-H "Idempotency-Key: batch-001" \
-H "Content-Type: application/json" \
-d '{
"jd_text": "招聘高级前端工程师,要求 React/TypeScript...",
"label": "前端组-0625",
"resumes": [
{ "label": "张三", "text": "5 年前端,精通 React..." },
{ "label": "李四", "text": "3 年前端,Vue 转 React..." }
]
}'{
"ok": true,
"request_id": "b7c8...d9e0",
"data": { "batch_id": "f1a2...3b4c", "status": "running", "total": 2 },
"billing": { "billed_point_cents": 0, "billed_points": 0, "balance_point_cents": 0, "resource_point_cents": 0 },
"estimated_point_cents": 200,
"billing_note": "费用按候选人数量 × 1 积分异步结算,首响应不计费。"
}计费:按候选人数量计费:1 积分/位(100 point_cents/位)。失败项不扣费。费用异步结算,首响应仅给预估。
- 仅招聘者可用;求职者调用返回 403 recruiter_only。
- 批量任务异步执行,进程崩溃残留的 running 任务会在 30 分钟后被后台回收标 failed。
- 真实扣费以 GET /api/open/v1/batches/:id 返回为准。
查询批量任务
/api/open/v1/batches/:id按 batch_id 查询批量筛选任务的进度、候选人排序与汇总结论。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string (path) | 是 | 创建批量任务时返回的 batch_id。 |
curl -X GET https://api2.bysjob.com/api/open/v1/batches/f1a2...3b4c \
-H "Authorization: Bearer hecn_live_xxx"{
"ok": true,
"data": {
"batch_id": "f1a2...3b4c",
"status": "done",
"total": 2,
"completed": 2,
"label": "前端组-0625",
"created_at": "2026-06-25T10:00:00.000Z",
"items": [
{ "candidate_label": "张三", "score": 82, "tags": ["React", "TypeScript"], "recommendation": "建议进入面试;补充全栈案例" },
{ "candidate_label": "李四", "score": 61, "tags": ["Vue"], "recommendation": "可考虑,需补充考察" }
],
"summary": {
"matchConclusion": "已完成 2 位候选人与 JD 的批量匹配,当前最匹配为「张三」(82 分,优先推进)。",
"topReasons": ["第 1 名「张三」:82 分,优先推进;建议进入面试"]
}
}
}计费:本接口不扣费。批量费用在创建任务时按候选人数量异步结算。
- 仅招聘者可用;求职者调用返回 403 recruiter_only。
- status 取值:running / done / failed。running 超过 30 分钟会被惰性回收为 failed。