考勤假期管理¶
接入考勤业务¶
批量新增请假记录¶
使用场景:该接口用于从OA中写入请假记录到2号,一次添加的记录数不得超过100条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/leave/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"year": 2018,
"month": 12,
"records": [
{
"emp_id": "686460*****44f2987db8*****079b89",
"start_dt": "2018-12-09 09:30:20",
"end_dt": "2018-12-09 18:55:23",
"hour": 7,
"reason": "示例格式",
"type": "事假",
"int_type": 1
}
]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| year | Int | 是 | 年 |
| month | Int | 是 | 月 |
| records | List | 是 | 记录数组。最大支持100条记录。超过后,此次提交的数据都不会保存,并返回相应错误码。 |
emp_id |
String | 是 | 员工id |
start_dt |
String | 是 | 请假开始的日期时间字符串 |
end_dt |
String | 是 | 请假结束的日期时间字符串* |
hour |
Int | 是 | 请假时长,单位:小时 |
type |
String | 否 | 请假类型,支持 1.事假 2.短期病假 3.婚假 4.丧假 5.年假 6.调休假 7.产假 8.陪产假 9.路途假 10.探亲假 11.看护假 12.非出勤假 13.产检假 14.哺乳假 |
int_type |
Int | 否 | 请假类型,支持 1.事假 2.短期病假 3.婚假 4.丧假 5.年假 6.调休假 7.产假 8.陪产假 9.路途假 10.探亲假 11.看护假 12.非出勤假 13.产检假 14.哺乳假 |
reason |
String | 否 | 请假原因,最长支持100个字符 |
- 参数详细说明
start_dt和end_dt- 如果请假单位是天,则start_dt和end_dt的写法支持的写法示例如下:
2020-5-20请假时间段和时长会根据排班自动计算。2020-5-20 9:30,2020-5-20 19:00开始结束时间需包含排班时间段,如不够排班日时长,则请假失败- 如果请假单位是半天,示例如下:
2020-5-20 上午,2020-5-20 下午- 如果请假单位是小时,示例如下:
2020-5-20 10:00:00- 如填写
2020-5-20,将会被解析成2020-5-20 00:00:00,建议填写完整时间
hour请假时长- 请假记录时长显示的为填写的值,但系统核算、扣减假期余额使用通过排班计算出来的真实时长
type请假类型- 病假的写法支持:
病假、短期病假、带薪短期病假、带薪短期病假 - 事假的写法支持:
带薪事假、事假 - 调休的写法支持:
调休、调休假
- 病假的写法支持:
int_type请假类型- 病假的写法支持:
2 - 事假的写法支持:
1 - 调休的写法支持:
6
- 病假的写法支持:
-
ps:type和int_type不能同时为空,二者必传一。当有确定的请假类型时建议传int_type(譬如年假、事假); 当请假类型认知模糊时建议传type(譬如调休、调休假);当两种类型同时传时,会优先匹配int_type,匹配到不再匹配type。 -
注意:
-
一次添加的记录数不得大于100条
-
每个员工的请假记录会根据他所在的假期方案进行校验,如“是否允许透支”、“单次请假时长限制”、“请假单位”
- 单次请假限制
- 校验通过排班计算出来的时长是否满足假期方案里单次请假限制的范围
- 是否允许透支
- 如果不允许透支,且余额不为正数,则不允许请假
- 如果允许透支,则余额可能会被扣成负数
-
请假单位
需要按照员工所在假期方案里的请假单位进行请假
- 单次请假限制
-
不能导入当前考勤周期之前的请假记录
-
不能导入当前考勤周期六个月之后的请假记录
-
请假时长不能小于0
-
单个员工的多次请假记录如果有时间交叉,则会添加失败
-
如果员工不享受指定假期,则会添加失败(“不享受假期”的选项在假期方案>发放规则>不享受假期)
权限说明
返回结果:
{
"data": {
"fail": 1,
"total": 3,
"suc": [
{
"index": 1,
"hour": 7,
"type": "事假",
"reason": "示例格式2",
"int_type": 1,
"emp_id": "10aea****78d4875860065****14264c",
"start_dt": "2025-07-21 09:30:20",
"end_dt": "2025-07-21 18:55:23",
"id": "812ee****8ab4f5692a705b****a9b27"
},
{
"index": 2,
"hour": 7,
"type": "事假",
"reason": "示例格式3",
"int_type": 1,
"emp_id": "10aea****78d4875860065****14264c",
"start_dt": "2025-07-22 09:30:20",
"end_dt": "2025-07-22 18:55:24",
"id": "3e1c0****31e4c55b29a992****6344e"
}
],
"err": [
{
"hour": 7,
"type": "事假",
"fail": "时间段不正确",
"reason": "示例格式1-错误",
"int_type": 1,
"emp_id": "10aea****78d4875860065****14264c",
"start_dt": "2025-07-10 09:30:20",
"end_dt": "2025-07-09 18:55:23"
}
],
"success": 2
},
"errcode": 0,
"errmsg": ""
}
参数说明:
| 参数 | 说明 |
|---|---|
| errcode | 返回码。暂有以下错误码: 19001: 请开通考勤管理 19002: 请启用请假记录 19003: 请启用外勤记录 19004: 请启用加班记录 19005: 请启用打卡记录 19006: 数据不是当前年月的 19007: 提交的数据记录超过100条 |
| errmsg | 对返回码的文本描述内容 |
| data | 返回数据 |
total |
提交的数据总数。 |
fail |
提交的数据总中,有误的数据量 |
success |
提交的数据总中,成功保存的数据量 |
err |
提交的数据总中,数据错误原因数组 |
suc |
提交的数据总中,成功保存的数据数组 |
错误对象 (err item) 除字段 fail 外,其余字段均为对应传入字段的值。
| 字段 | 说明 |
|---|---|
| hour | 请假时长(小时) |
| type | 请假类型 |
| fail | 失败原因分类 |
| reason | 详细错误描述 |
| int_type | 请假类型编码 |
| emp_id | 员工Id |
| start_dt | 请假开始时间 |
| end_dt | 请假结束时间 |
成功对象 (suc item) 除字段 index、id 外,其余字段均为对应传入字段的值。
| 字段 | 说明 |
|---|---|
| index | 记录在原始请求中的顺序索引 |
| id | 服务端生成的唯一记录ID |
| hour | 请假时长(小时) |
| type | 请假类型 |
| reason | 成功时的备注信息 |
| int_type | 请假类型编码 |
| emp_id | 员工Id |
| start_dt | 请假开始时间 |
| end_dt | 请假结束时间 |
批量新增外勤记录¶
使用场景:该接口用于从OA中写入外勤记录到2号,一次添加的记录数不得超过100条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/outattend/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"year": 2018,
"month": 12,
"records": [
{
"emp_id": "686460*****44f2987db8*****079b89",
"start_dt": "2018-12-09 09:30:20",
"end_dt": "2018-12-09 18:55:23",
"hour": 7,
"reason": "示例格式",
"type": "外出",
"int_type": 1
}
]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| year | Int | 是 | 年 |
| month | Int | 是 | 月 |
| records | List | 是 | 记录数组。最大支持100条记录。超过后,此次提交的数据都不会保存,并返回相应错误码。 |
emp_id |
String | 是 | 员工id |
start_dt |
String | 是 | 外勤开始的日期时间字符串。支持的格式: %Y-%m-%d %H:%M:%S %Y/%m/%d %H:%M:%S |
end_dt |
String | 是 | 外勤结束的日期时间字符串。支持的格式: %Y-%m-%d %H:%M:%S %Y/%m/%d %H:%M:%S |
hour |
Int | 是 | 外勤时长, 单位:小时数 |
type |
String | 否 | 外勤类型。支持以下几种类型: 1.外出 2.出差 |
int_type |
Int | 否 | 外勤类型。支持以下几种类型: 1.外出 2.出差 |
reason |
String | 否 | 外勤原因。 最长支持100个字符 |
- 参数详细说明
start_dt和end_dt- 如果外勤规则单位是天,则start_dt和end_dt的写法支持的写法示例如下:
2020-5-20请假时间段和时长会根据排班自动计算。- 如果外勤规则单位是半天,示例如下:
2020-5-20 上午,2020-5-20 下午- 如果外勤规则单位是小时,示例如下:
2020-5-20 10:00:00- 如填写
2020-5-20,将会被解析成2020-5-20 00:00:00,建议填写完整时间
hour外勤时长- 外勤记录申请时长显示的为填写的值,但系统核算会通过排班计算出来的真实时长
type外勤类型- 外出的写法支持:
出差 - 出差的写法支持:
出差
- 外出的写法支持:
int_type外勤类型- 外出的写法支持:
1 - 出差的写法支持:
2
- 外出的写法支持:
-
ps:type和int_type不能同时为空,二者必传一。当有确定的外勤类型时建议传int_type(譬如外出、出差); 当外勤类型认知模糊时建议传type(譬如xx外出、xx出差);当两种类型同时传时,会优先匹配int_type,匹配到不再匹配type。 -
注意:
-
一次添加的记录数不得大于100条
-
每个员工的外勤记录会根据他所属考勤组的外勤规则来校验,如果开始结束时间的格式和外勤规则单位不匹配则会导入失败
-
不能导入当前考勤周期之前的外勤记录
-
不能导入当前考勤周期六个月之后的外勤记录
-
外勤时长不能小于0
权限说明
返回结果:
{
"data": {
"fail": 2,
"total": 3,
"suc": [
{
"index": 2,
"hour": 7,
"end_dt": "2025-07-26 18:55:23",
"reason": "示例格式3",
"int_type": 1,
"emp_id": "10aea****78d48758600659****4264c",
"start_dt": "2025-07-26 09:30:20",
"type": "外出",
"id": "7d4b7****1ac48b7ab7306d****3e909"
}
],
"err": [
{
"hour": 7,
"end_dt": "2025-07-09 18:55:23",
"fail": "该时段已存在外勤记录",
"reason": "示例格式1",
"int_type": 1,
"emp_id": "10aea****78d48758600659****4264c",
"start_dt": "2025-07-09 09:30:20",
"type": "外出"
},
{
"hour": 7,
"end_dt": "2025-07-20 18:55:23",
"fail": "该时段已存在外勤记录",
"reason": "示例格式2",
"int_type": 1,
"emp_id": "10aea****78d48758600659****4264c",
"start_dt": "2025-07-20 09:30:20",
"type": "外出"
}
],
"success": 1
},
"errcode": 0,
"errmsg": ""
}
参数说明:
| 参数 | 说明 |
|---|---|
| errcode | 返回码。暂有以下错误码: 19001: 请开通考勤管理 19002: 请启用请假记录 19003: 请启用外勤记录 19004: 请启用加班记录 19005: 请启用打卡记录 19006: 数据不是当前年月的 19007: 提交的数据记录超过100条 |
| errmsg | 对返回码的文本描述内容 |
| data | 返回数据 |
total |
提交的数据总数 |
fail |
提交的数据总中,有误的数据量 |
success |
提交的数据总中,成功保存的数据量 |
err |
提交的数据总中,数据错误原因数组 |
suc |
提交的数据总中,成功保存的数据数组 |
错误对象 (err item) 除字段 fail 外,其余字段均为对应传入字段的值。
| 字段 | 说明 |
|---|---|
| hour | 外勤时长(小时) |
| type | 外勤类型 |
| fail | 失败原因分类 |
| reason | 详细错误描述 |
| int_type | 外勤类型编码 |
| emp_id | 员工Id |
| start_dt | 外勤开始时间 |
| end_dt | 外勤结束时间 |
成功对象 (suc item) 除字段 index、id 外,其余字段均为对应传入字段的值。
| 字段 | 说明 |
|---|---|
| index | 记录在原始请求中的顺序索引 |
| id | 服务端生成的唯一记录ID |
| hour | 外勤时长(小时) |
| type | 外勤类型 |
| reason | 成功时的备注信息 |
| int_type | 外勤类型编码 |
| emp_id | 员工Id |
| start_dt | 外勤开始时间 |
| end_dt | 外勤结束时间 |
批量新增加班记录¶
使用场景:该接口用于从OA中写入加班记录到2号,一次添加的记录数不得超过100条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/overtime/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"year": 2018,
"month": 12,
"records": [
{
"emp_id": "686460*****44f2987db8*****079b89",
"start_dt": "2018-12-09 09:30:20",
"end_dt": "2018-12-09 18:55:23",
"hour": 7,
"need_calc": 0,
"reason": "示例格式",
"type": "节假日加班",
"int_type": 1
}
]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| year | Int | 是 | 年 |
| month | Int | 是 | 月 |
| records | List | 是 | 记录数组。最大支持100条记录。超过后,此次提交的数据都不会保存,并返回相应错误码。 |
emp_id |
String | 是 | 员工id |
start_dt |
String | 是 | 加班开始的日期时间字符串。支持的格式: %Y-%m-%d %H:%M:%S %Y/%m/%d %H:%M:%S |
end_dt |
String | 是 | 加班结束的日期时间字符串。支持的格式: %Y-%m-%d %H:%M:%S %Y/%m/%d %H:%M:%S |
hour |
Int | 是 | 加班时长, 单位:小时数 |
need_calc |
Int | 否 | 加班时长是否需按加班规则核算,0表示无需按加班规则核算;1表示按加班规则核算;可不传 |
type |
String | 否 | 加班类型。支持以下几种类型: 1.工作日加班 2.周末加班 3.节假日加班 |
int_type |
Int | 否 | 加班类型。支持以下几种类型: 1.工作日加班 2.周末加班 3.节假日加班 |
reason |
String | 否 | 加班原因。 最长支持100个字符 |
- 参数详细说明
start_dt和end_dt- 如果加班时间格式为%Y-%m-%d %H:%M:%S,示例如下:
2020-5-20 10:00:00- 如果加班时间格式为%Y/%m/%d %H:%M:%S,示例如下:
2020/5/20 10:00:00
hour加班时长- 单位:小时数
type加班类型- 工作日加班的写法支持:
工作日加班、xx工作日加班 - 周末加班的写法支持:
周末加班 - 节假日的写法支持:
节假日加班
- 工作日加班的写法支持:
-
int_type加班类型- 工作日加班的写法支持:
1 - 周末加班的写法支持:
2 - 节假日加班的写法支持:
3
- 工作日加班的写法支持:
-
注意: type和int_type不能同时为空,二者必传一。当有确定的加班类型时建议传int_type(譬如工作日加班); 当加班类型认知模糊时建议传type(譬如xx工作日加班);当两种类型同时传时,会优先匹配int_type,匹配到不再匹配type。- 如果同一个emp_id下有多条相同的start_dt,则只有一条记录会保存。
- 如果emp_id和start_dt已在存在系统里时,报提示记录重复。
权限说明
返回结果:
{
"data": {
"fail": 1,
"total": 3,
"suc": [
{
"index": 2,
"hour": 7,
"end_dt": "2025-07-18 18:55:23",
"reason": "示例格式2",
"int_type": 1,
"emp_id": "10aea****78d48758600659****4264c",
"start_dt": "2025-07-18 09:30:36",
"type": "节假日加班",
"id": "430eb****2b443cd8d86bcf****85613"
},
{
"index": 1,
"hour": 7,
"end_dt": "2025-07-17 18:55:23",
"reason": "示例格式",
"int_type": 1,
"emp_id": "10aea****78d48758600659****4264c",
"start_dt": "2025-07-17 09:30:37",
"type": "节假日加班",
"id": "91c16****5dd4a47b7767b8****d8d48"
}
],
"err": [
{
"hour": 7,
"end_dt": "2025-07-06 18:55:23",
"fail": "2025-07-07 09:30:20必须小于2025-07-06 18:55:23",
"reason": "示例格式",
"int_type": 1,
"emp_id": "10aea****78d48758600659****4264c",
"start_dt": "2025-07-07 09:30:20",
"type": "节假日加班"
}
],
"success": 2
},
"errcode": 0,
"errmsg": ""
}
参数说明:
| 参数 | 说明 |
|---|---|
| errcode | 返回码。暂有以下错误码: 19001: 请开通考勤管理 19002: 请启用请假记录 19003: 请启用外勤记录 19004: 请启用加班记录 19005: 请启用打卡记录 19006: 数据不是当前年月的 19007: 提交的数据记录超过100条 |
| errmsg | 对返回码的文本描述内容 |
| data | 返回数据 |
total |
提交的数据总数 |
fail |
提交的数据总中,有误的数据量 |
success |
提交的数据总中,成功保存的数据量 |
err |
提交的数据总中,数据错误原因数组 |
suc |
提交的数据总中,成功保存的数据数组 |
错误对象 (err item) 除字段 fail 外,其余字段均为对应传入字段的值。
| 字段 | 说明 |
|---|---|
| hour | 加班时长(小时) |
| type | 加班类型 |
| fail | 失败原因分类 |
| reason | 详细错误描述 |
| int_type | 加班类型编码 |
| emp_id | 员工Id |
| start_dt | 加班开始时间 |
| end_dt | 加班结束时间 |
成功对象 (suc item) 除字段 index、id 外,其余字段均为对应传入字段的值。
| 字段 | 说明 |
|---|---|
| index | 记录在原始请求中的顺序索引 |
| id | 服务端生成的唯一记录ID |
| hour | 加班时长(小时) |
| type | 加班类型 |
| reason | 成功时的备注信息 |
| int_type | 加班类型编码 |
| emp_id | 员工Id |
| start_dt | 加班开始时间 |
| end_dt | 加班结束时间 |
批量新增打卡记录¶
使用场景:该接口用于从OA中写入打卡记录到2号,打卡时间可多次,一次添加的记录数不得超过100条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/add_card/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"year": 2018,
"month": 12,
"records": [
{
"emp_id": "686460*****44f2987db8*****079b89",
"date": "2018-12-09",
"times": "18:55:23 08:55:23 07:55:23 14:55:23"
}
]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| year | Int | 是 | 年 |
| month | Int | 是 | 月 |
| records | List | 是 | 记录数组。最大支持100条记录。超过后,此次提交的数据都不会保存,并返回相应错误码。 |
emp_id |
String | 是 | 员工id |
date |
String | 是 | 打卡日期。支持的格式: %Y-%m-%d %Y/%m/%d |
times |
String | 是 | 以英文空白字符串分隔的时间字符串。支持的格式:只要能正确转为时间点的格式皆可 |
权限说明
返回结果:
{
"errcode": 0,
"errmsg": "",
"data": {
"fail": 2,
"total": 2,
"err": [
"11:91不是正确的时间格式",
"ss:91不是正确的时间格式"
],
"success": 8
}
}
参数说明:
| 参数 | 说明 |
|---|---|
| errcode | 返回码。暂有以下错误码: 19001: 请开通考勤管理 19002: 请启用请假记录 19003: 请启用外勤记录 19004: 请启用加班记录 19005: 请启用打卡记录 19006: 数据不是当前年月的 19007: 提交的数据记录超过100条 |
| errmsg | 对返回码的文本描述内容 |
| data | 返回数据 |
total |
提交的数据总数。 注:total <= fail + success |
fail |
提交的数据总中,有误的数据量 |
success |
提交的数据总中,成功保存的数据量 |
err |
提交的数据总中,数据错误原因数组 |
批量新增补卡记录¶
使用场景:该接口用于从OA中写入补卡记录到2号,打卡时间可多次,一次添加的记录数不得超过100条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/revamp_card/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"year": 2018,
"month": 12,
"records": [
{
"emp_id": "686460*****44f2987db8*****079b89",
"date": "2018-12-09",
"times": "18:55:23 08:55:23 07:55:23 14:55:23",
"user_name": "莉丝"
}
]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| year | Int | 是 | 年 |
| month | Int | 是 | 月 |
| records | List | 是 | 记录数组。最大支持100条记录。超过后,此次提交的数据都不会保存,并返回相应错误码。 |
emp_id |
String | 是 | 员工id |
date |
String | 是 | 打卡日期。支持的格式: %Y-%m-%d %Y/%m/%d |
times |
String | 是 | 以英文空白字符串分隔的时间字符串。支持的格式:只要能正确转为时间点的格式皆可 |
user_name |
String | 否 | 操作人 |
- 注意:
- 如果times里有多条相同的时间点,则只有第一个时间点会保存。
权限说明
返回结果:
{
"errcode": 0,
"errmsg": "",
"data": {
"fail": 2,
"total": 2,
"err": [
"11:91不是正确的时间格式",
"ss:91不是正确的时间格式"
],
"success": 8
}
}
参数说明:
| 参数 | 说明 |
|---|---|
| errcode | 返回码。暂有以下错误码: 19001: 请开通考勤管理 19002: 请启用请假记录 19003: 请启用外勤记录 19004: 请启用加班记录 19005: 请启用打卡记录 19006: 数据不是当前年月的 19007: 提交的数据记录超过100条 |
| errmsg | 对返回码的文本描述内容 |
| data | 返回数据 |
total |
提交的数据总数。 注:total <= fail + success |
fail |
提交的数据总中,有误的数据量 |
success |
提交的数据总中,成功保存的数据量 |
err |
提交的数据总中,数据错误原因数组 |
获取打卡记录¶
使用场景:返回员工的打卡记录。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/card_record/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_ids": ["686460*****44f2987db8*****079b89"],
"emp_oa_codes": [],
"start_dt": "2020-05-01 0:00:00",
"end_dt": "2020-05-22 10:10:00",
"type": [1, 2, 3]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_ids | List | 否 | 员工id 列表, 每次最多50个员工id |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 每次最多50个员工OA编码 |
| start_dt | DateTime | 是 | 打卡开始时间 |
| end_dt | DateTime | 是 | 打卡结束时间 |
| type | List | 否 | 打卡来源,不传,取所有的打卡类型 |
- 注意:
- emp_ids 和 emp_oa_codes必传其一,两个都传将只使用emp_ids, 忽略emp_oa_codes。
- 列表内无效的emp_id或emp_oa_code将会直接被忽略。
- 打卡来源说明:小程序打卡-上下班(1)、小程序打卡-外勤(2)、考勤机打卡(4)、HR添加(5)、补卡审批(3)、企业微信打卡-上下班(8)、自动打卡(10)、企业微信打卡-外勤(18)、企业微信审批应用(18)
权限说明
返回结果:
{
"data": [
{ "id": "686460*****44f298ddb8*****78a8c",
"emp_id": "686460*****44f2987db8*****079b89",
"emp_no": "100009",
"dep_name": "财务部",
"attendance_no": "100009",
"brand": "",
"remark": "",
"dep_oa": null,
"emp_name": "欧小彪",
"card_dt": "2020-05-01T09:16:00",
"site_name": null,
"longitude": "116.4994723850",
"latitude": "39.9768261720",
"dep_id": "51669aaa877149d78a8c3bd882cb292e",
"type": 5
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | String | 主键id |
| emp_id | String | 员工id |
| emp_name | String | 员工姓名 |
| emp_no | String | 工号 |
| attendance_no | String | 考勤编号 |
| dep_name | String | 部门名称 |
| dep_id | String | 部门ID |
| dep_oa | String | 部门OA编码 |
| card_dt | String | 打卡时间 |
| type | Int | 打卡来源 |
| brand | String | 打卡设备(手机设备型号/考勤机名称) |
| longitude | String | 打卡地点的经度 |
| latitude | String | 打卡地点的纬度 |
| site_name | String | 打卡地点 |
| remark | String | 备注 |
获取打卡结果¶
使用场景:该接口用于返回指定员工的打卡结果。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/card_result/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_ids": ["686460*****44f2987db8*****079b89"],
"emp_oa_codes": [],
"start_dt": "2020-05-01",
"end_dt": "2020-05-22"
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_ids | List | 否 | 员工id 列表, 每次最多50个员工id |
| emp_oa_codes | List | 否 | 员工OA编码 列表,每次最多50个员工OA编码 |
| start_dt | DateTime | 是 | 打卡开始时间 |
| end_dt | DateTime | 是 | 打卡结束时间 |
- 注意:
- emp_ids 和 emp_oa_codes必传其一,两个都传将只使用emp_ids, 忽略emp_oa_codes。
- 列表内无效的emp_id或emp_oa_code将会直接被忽略。
权限说明
返回结果:
{
"data": [
{ "id": "686460*****44f2987db8*****079b89",
"emp_id": "4b519a36*****44f2987db8*****079b908",
"emp_no": "100009",
"dep_name": "财务部",
"attendance_no": "100009",
"emp_name": "欧小彪",
"shift_info": [
{
"start": "08:30",
"end": "18:00"
}
],
"complex_shift_info": [
{
"start": "08:30",
"end": "17:30",
"is_overtime": false
},
{
"start": "19:07",
"end": "21:09",
"is_overtime": true
}
],
"dep_oa": null,
"card_info": [
{
"start_1_time": "09:16",
"remark": "",
"site_name": null,
"brand": "",
"start_1_result": "迟到46分钟",
"card_dt": "2020-05-01T09:16:00",
"type": 5
},
{
"remark": "",
"site_name": "",
"brand": "",
"end_1_time": "",
"card_dt": "",
"end_1_result": "缺卡",
"type": ""
}
],
"access_date": "2020-05-01",
"dep_id": "51669aaa877149d78a8c3bd882cb292e"
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | String | 主键id |
| emp_id | String | 员工id |
| emp_name | String | 员工姓名 |
| emp_no | String | 工号 |
| attendance_no | String | 考勤编号 |
| dep_name | String | 部门名称 |
| dep_id | String | 部门ID |
| dep_oa | String | 部门OA编码 |
| card_dt | String | 打卡时间 |
| shift_info | 班次信息 | |
| complex_shift_info | List | 复杂班次信息,仅当排了复杂班次,此字段才有值,否则为空列表 |
| type | Int | 打卡来源 |
| brand | String | 打卡设备(手机设备型号/考勤机名称) |
| site_name | String | 打卡地点 |
| remark | String | 备注 |
获取请假记录¶
使用场景:用于返回指定员工的请假记录,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/leave_record/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_ids": ["686460*****44f2987db8*****079b89"],
"emp_oa_codes": [],
"start_dt": "2020-05-01",
"end_dt": "2020-05-22",
"type": [1, 2, 3]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_ids | List | 否 | 员工id 列表, 一次最多50条 |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 一次最多50条 |
| start_dt | DateTime | 是 | 开始时间 |
| end_dt | DateTime | 是 | 结束时间 |
| type | List | 否 | 请假类型,不传,取所有的请假记录 |
- 注意:
- emp_ids 和 emp_oa_codes必传其一,两个都传将只使用emp_ids, 忽略emp_oa_codes。
- 列表内无效的emp_id或emp_oa_code将会直接被忽略。
- 请假类型:年假(5)、调休假(6)、事假(1)、路途假(9)、探亲假(10)、短期病假(2)、产假(7)、产检假(13)、婚假(3)、哺乳假(14)、看护假(11)、陪产假(8)、丧假(4)、非出勤假(12)。为空表示全部类型
- 自定义假期类型请通过2号考勤系统获取
权限说明
返回结果:
{
"data": [
{ "id": "686460*****44f2987db8*****079b89",
"emp_no": "100010",
"dep_name": "财务部",
"attendance_no": "100010",
"source_type": 1,
"source_id":"997c56**4bd4518aad98***2864d434",
"end_dt": "2020-04-01T13:59:00",
"reason": "",
"start_dt": "2020-04-01T09:00:00",
"dep_oa": null,
"length": 3.48,
"calc_length": 3.48,
"emp_name": "吴洪飞",
"emp_id": "997c56**4bd4518aad98***2864d434",
"dep_id": "51669aaa877149d78a8c3bd882cb292e",
"type": 1,
"title": "自定义-转休"
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | String | 主键id |
| emp_id | String | 员工id |
| emp_name | String | 员工姓名 |
| emp_no | String | 工号 |
| attendance_no | String | 考勤编号 |
| dep_name | String | 部门名称 |
| dep_id | String | 部门ID |
| dep_oa | String | 部门OA编码 |
| title | String | 假类名称 |
| type | Int | 请假类型 |
| source_type | Int | 数据来源:HR添加(1)、请假审批(2)、企业微信审批应用(8) |
| source_id | String | 数据来源记录ID,如审批单ID ,手动添加的记录该字段为空串 |
| start_dt | String | 请假开始时间 |
| end_dt | String | 请假结束时间 |
| length | Float | 请假时长 |
| calc_length | Float | 核算请假时长 |
| reason | String | 请假原因 |
获取加班记录¶
使用场景:用于返回指定员工的加班记录,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/ot_record/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_ids": ["686460*****44f2987db8*****079b89"],
"emp_oa_codes": [],
"start_dt": "2020-05-01",
"end_dt": "2020-05-22"
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_ids | List | 否 | 员工id 列表, 一次最多50条 |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 一次最多50条 |
| start_dt | DateTime | 是 | 开始时间 |
| end_dt | DateTime | 是 | 结束时间 |
- 注意:
- emp_ids 和 emp_oa_codes必传其一,两个都传将只使用emp_ids, 忽略emp_oa_codes。
- 列表内无效的emp_id或emp_oa_code将会直接被忽略。
权限说明
返回结果:
{
"data": [
{ "id": "686460*****44f2987db8*****079b89",
"emp_no": "100010",
"dep_name": "财务部",
"attendance_no": "100010",
"source_type": 1,
"source_id": "997c56**4bd4518aad98***2864d434",
"end_dt": "2020-04-01T13:59:00",
"reason": "",
"start_dt": "2020-04-01T09:00:00",
"dep_oa": null,
"length": 3.48,
"approval_length": 3.48,
"compensation": 1,
"emp_name": "吴洪飞",
"emp_id": "997c56**4bd4518aad98***2864d434",
"dep_id": "51669aaa877149d78a8c3bd882cb292e",
"type": 1
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | String | 主键id |
| emp_id | String | 员工id |
| emp_name | String | 员工姓名 |
| emp_no | String | 工号 |
| attendance_no | String | 考勤编号 |
| dep_name | String | 部门名称 |
| dep_id | String | 部门ID |
| dep_oa | String | 部门OA编码 |
| type | Int | 加班类型 |
| source_type | Int | 数据来源:HR添加(1)、加班审批(2) |
| source_id | String | 数据来源记录ID,如审批单ID ,手动添加的记录该字段为空串 |
| compensation | Int | 补偿方式:不计补偿(0)、加班工资(1)、加班调休(2) |
| start_dt | DateTime | 加班开始时间 |
| end_dt | DateTime | 加班结束时间 |
| approval_length | Float | 申请时长 |
| length | Float | 最终核算时长 |
| reason | String | 加班原因 |
获取外勤记录¶
使用场景:用于返回指定员工的外勤记录,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/outing_record/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_ids": ["686460*****44f2987db8*****079b89"],
"emp_oa_codes": [],
"start_dt": "2020-05-01",
"end_dt": "2020-05-22",
"type": 1
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_ids | List | 否 | 员工id 列表, 一次最多50条 |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 一次最多50条 |
| start_dt | DateTime | 是 | 开始时间 |
| end_dt | DateTime | 是 | 结束时间 |
| type | Int | 否 | 外勤类型,不传,取所有的外勤记录 |
- 注意:
- emp_ids 和 emp_oa_codes必传其一,两个都传将只使用emp_ids, 忽略emp_oa_codes。
- 列表内无效的emp_id或emp_oa_code将会直接被忽略。
- 外勤类型:外出(1),出差(2)。为空表示全部类型
权限说明
返回结果:
{
"data": [
{ "id": "686460*****44f2987db8*****079b89",
"emp_no": "100010",
"dep_name": "财务部",
"attendance_no": "100010",
"source_type": 1,
"source_id": "997c56**4bd4518aad98***2864d434",
"end_dt": "2020-04-01T13:59:00",
"reason": "",
"start_dt": "2020-04-01T09:00:00",
"dep_oa": null,
"length": 3.48,
"calc_length": 3.48,
"emp_name": "吴洪飞",
"emp_id": "997c56**4bd4518aad98***2864d434",
"dep_id": "51669aaa877149d78a8c3bd882cb292e",
"type": 1
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | String | 主键id |
| emp_id | String | 员工id |
| emp_name | String | 员工姓名 |
| emp_no | String | 工号 |
| attendance_no | String | 考勤编号 |
| dep_name | String | 部门名称 |
| dep_id | String | 部门ID |
| dep_oa | String | 部门OA编码 |
| type | Int | 外勤类型,外出(1),出差(2) |
| source_type | Int | 数据来源:HR添加(1)、外出审批(2)、出差审批(3)、企业微信外出审批(5)、企业微信出差审批(6) |
| source_id | String | 数据来源记录ID,如审批单ID ,手动添加的记录该字段为空串 |
| start_dt | DateTime | 外勤开始时间 |
| end_dt | DateTime | 外勤结束时间 |
| length | Float | 申请时长 |
| calc_length | Float | 最终核算时长 |
| reason | String | 外勤原因 |
批量删除请假记录¶
使用场景:用于删除指定的请假记录,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/delete/leave/?access_token=ACCESS_TOKEN
{
"ids": ["686460*****44f2987db8*****079b89"]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| ids | List | 是 | 请假记录id, 一次最多50条 |
权限说明
返回结果:
{
"data": {
"err": 1,
"succ": 0,
"err_info": [{
"id": "686460*****44f2987db8*****079b89",
"reason": "不允许删除"
}]
},
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| err | Int | 错误数 |
| succ | Int | 成功数 |
| err_info | List | 失败详情信息 |
id |
String | 请假记录id |
reason |
String | 失败原因 |
批量删除外勤记录¶
使用场景:用于删除指定的外勤记录,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/delete/out_attend/?access_token=ACCESS_TOKEN
{
"ids": ["561236*****44f2987db8*****079b89"],
"type": 1
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| ids | List | 是 | 外勤记录id, 一次最多50条 |
| type | Int | 是 | 外勤类型。支持以下几种类型,1.外出 2.出差 |
权限说明
返回结果:
{
"data": {
"err": 1,
"succ": 0,
"err_info": [{
"id": "561236*****44f2987db8*****079b89",
"reason": "不能删除历史考勤月份的考勤记录"
}]
},
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| err | Int | 错误数 |
| succ | Int | 成功数 |
| err_info | List | 失败详情信息 |
id |
String | 外勤记录id |
reason |
String | 失败原因 |
批量删除加班记录¶
使用场景:用于删除指定的加班记录,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/delete/overtime/?access_token=ACCESS_TOKEN
{
"ids": ["785660*****44f2987db8*****079b89"]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| ids | List | 是 | 加班记录id, 一次最多50条 |
权限说明
返回结果:
{
"data": {
"err": 1,
"succ": 0,
"err_info": [{
"id": "785660*****44f2987db8*****079b89",
"reason": "不能删除自动核算生成的考勤记录"
}]
},
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| err | Int | 错误数 |
| succ | Int | 成功数 |
| err_info | List | 失败详情信息 |
id |
String | 加班记录id |
reason |
String | 失败原因 |
考勤班次管理¶
获取班次列表¶
使用场景:用于返回企业设置的班次列表,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/shifts/list/?access_token=ACCESS_TOKEN
请求包结构体为:
请求参数与示例:
{
"p": 1,
"limit": 50,
"shift_ids": ["9u6460*****44f298668*****079b81", "9u6460*****44f298668*****079bko"]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| shift_ids | List | 否 | 班次id列表 |
| limit | Int | 否 | 每页条数 默认10 |
| p | Int | 否 | 页码 默认1 |
- 参数详细说明
shift_ids:- 班次id列表,用于查询指定班次信息,一次最多50条;
- 多个班次id用逗号分隔,如:e00def90a3814b578381ca3be9631d44,4dae9921356d40978586677ce01c315e
- 不传则查询所有班次信息。
- 特殊:划线排班创建的临时班次不会在所有班次中返回;如需查询请使用shift_ids参数查询或使用班次详情查询接口。
limit和p:limit每页条数,一页最多50条,默认10;p页码,从1开始,默认1
权限说明
返回结果:
{
"data": {
"p": 1,
"limit": 10,
"offset": 0,
"total_count": 3,
"totalpage": 1,
"objects": [
{
"name": "休息",
"short_name": "休息",
"shift_color": "#FFAC48",
"shift_rule_type": 2,
"convert_type": 0,
"shift_id": "3f198574ecca46f48f36decd66a5b044",
"overtime_hours": 0,
"is_elastic": false,
"work_hours": "0",
"day_start_tag": 1,
"is_complex": 0,
"is_temporary": 0
},
{
"name": "早晚打卡",
"short_name": "早晚",
"shift_color": "#5282F7",
"work_hours": "8.0",
"shift_rule_type": 1,
"convert_type": 1,
"shift_id": "241f664bbe6a4c22834f693a1b3b9b6a",
"overtime_hours": 0,
"is_elastic": true,
"day_start_tag": 1,
"is_complex": 0,
"is_temporary": 0,
"time_stages": [
{
"is_overtime": false,
"record_early": false,
"record_late": false,
"has_rest": false,
"start_time": "08:30",
"end_time": "16:30",
"card_mod": 1,
"rest_start_time": "",
"rest_end_time": "",
"remit_late": 0,
"remit_early": 0,
"clock_in_valid_start_time": "05:00",
"clock_in_valid_end_time": "13:00",
"clock_out_valid_start_time": "13:00",
"clock_out_valid_end_time": "04:00",
"serial": 1
}
],
"late_leave_rules": {
"later_leave_overtimes": 30,
"enable_ignore_absent": false
}
},
{
"name": "简单班次",
"short_name": "jd",
"shift_color": "#5282f7",
"start_1": "08:30",
"end_1": "17:30",
"absenteeism_1": 20,
"miss_type_1": 1,
"start_2": null,
"end_2": null,
"absenteeism_2": 0,
"miss_type_2": 0,
"start_3": null,
"end_3": null,
"absenteeism_3": 0,
"miss_type_3": 0,
"rest_start_dt": "12:00",
"rest_end_dt": "13:00",
"character_type": 1,
"character_grade": 0,
"character_advance": 30,
"character_postpone": 30,
"is_complex": 0,
"is_temporary": 0,
"convert_type": 0,
"shift_id": "e00def90a3814b578381ca3be9631d44",
"work_hours": "8.00",
"shift_rule_type": 1,
"advance_1": "06:00",
"postpone_1": "23:30",
"late_1": "10:00",
"early_1": "16:00"
}
]
},
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
公共相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| shift_id | String | 班次主键id |
| name | String | 班次名称 |
| short_name | String | 班次简称 |
| shift_color | String | 班次颜色 |
| shift_rule_type | Int | 班次类型标识:1-工作日班次;2-休息日班次 |
| convert_type | Int | 班次折算类型:0-按考勤组标准时长自动折算天;1-计该班次为1天;2-计该班次为0.5天(上午半天);3-计该班次为0.5天(下午半天) |
| day_start_tag | Int | 一天开始的标签:0-表示班次有效打卡时间开始为前一天开始计算;1-表示班次有效打卡时间开始为当天开始计算 |
| is_elastic | Boolean | 是否开启弹性规则:1-开启;0-关闭 |
| is_complex | Boolean | 是否为通用班次:1-通用班次;0-简单班次 |
| is_temporary | Boolean | 是否临时班次:1-是;0-否 |
| work_hours | String | 工作时长 |
| errcode | int | 状态码,0表示成功 |
| errmsg | String | 异常信息 |
通用班次相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| character_type | String | 弹性类型:0-未设置,1-豁免,2-弹性(早来早走,晚来晚走),3-弹性(分时段晚来晚),4-晚走晚到;5-分时段晚走晚到;6-上够标准时长即可 |
| overtime_hours | String | 加班时长 |
| time_stages | obj[] | 班段集合信息 |
serial |
Int | 班段序号 |
is_overtime |
Boolean | 是否为加班时段 |
record_early |
Boolean | 是否记早退 |
record_late |
Boolean | 是否记迟到 |
remit_late |
Int | 迟到豁免分钟数 |
remit_early |
Int | 早退豁免分钟数 |
has_rest |
Boolean | 是否存在休息段 |
start_time |
String | 班段打卡开始时间 |
end_time |
String | 班段打卡结束时间 |
clock_in_valid_start_time |
String | 班段内上班有效打卡开始时间,受day_start_tag影响,当day_start_tag为0时,表示班段有效打卡时间开始为前一天开始计算,类推 |
clock_in_valid_end_time |
String | 班段内上班有效打卡结束时间 |
clock_out_valid_start_time |
String | 班段内下班有效打卡开始时间 |
clock_out_valid_end_time |
String | 班段内下班有效打卡结束时间 |
card_mod |
Int | 打卡选项:1-上班, 下班都需要打卡;2-仅需要上班打卡;3-仅需要下班打卡;4-上班或下班任一打卡;5-上下班无需打卡 |
rest_start_time |
String | 班段内休息开始时间 |
rest_end_time |
String | 班段内休息结束时间 |
| late_rules | obj | 弹性规则:早来早走,晚来晚走 |
character_advance |
Int | 弹性晚到晚走早到早走-早到允许时长 |
character_postpone |
Int | 弹性晚到晚走早到早走-晚到允许时长 |
| grant_late_rules | obj | 分时段晚来晚走 |
character_grade |
Int | 弹性分段晚到晚走-分段数 |
character_postpone |
Int | 弹性分段晚到晚走-段间隔分钟数 |
character_advance |
Int | 最多晚来晚走分钟数 |
| late_leave_rules | obj | 晚走晚到规则 |
later_leave_overtimes |
Int | 弹性晚走晚到时间期满 分钟数 |
enable_ignore_absent |
Boolean | 是否开启晚走晚到当次日晚到允许点超过次日上班的整段时, 允许次日无需打卡的规则 |
| late_stages_rules | obj | 分时段晚走晚到 |
leave_later_stages |
obj[] | |
start |
String | 分时段晚走晚到-开始时间 |
end |
String | 分时段晚走晚到-结束时间 |
early_before |
String | 次日最晚上班时间 |
enable_ignore_absent |
Boolean | 是否开启晚走晚到当次日晚到允许点超过次日上班的整段时, 允许次日无需打卡的规则 |
| elastic_satisfy_rules | obj | 上够标准时长即可规则 |
standard_hour |
String | 需上够标准时长 |
standard_elastic_st |
String | 弹性标准时长上班打卡起 |
standard_elastic_ed |
String | 弹性标准时长上班打卡止 |
by_half_hour |
Boolean | 是否按照半小时计算 |
简单班次相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| start_1 | String | 上班时间1 |
| end_1 | String | 下班时间1 |
| advance_1 | String | 班段1上班有效打卡开始时间 |
| late_1 | String | 班段1上班有效打卡结束时间 |
| early_1 | String | 班段1下班有效打卡开始时间 |
| postpone_1 | String | 班段1下班有效打卡结束时间 |
| absenteeism_1 | Int | 旷工1分钟数 |
| miss_type_1 | Boolean | 无效打卡计算类型:0缺卡,1-旷工 |
| rest_start_dt | String | 休息开始时间 |
| rest_end_dt | String | 休息结束时间 |
| character_type | Int | 弹性类型:0-未设置,1-豁免,2-弹性(早来早走,晚来晚走),3-弹性(分时段晚来晚) |
| character_advance | Int | 弹性-允许提前下班分钟数 |
| character_postpone | Int | 弹性-允许推迟上班分钟数 |
- 参数详细说明
start_1和end_1:- 班次有效打卡时间段,格式为HH:mm-HH:mm,例如"08:30-17:30"。
- 班次有效打卡时间段不能超过24小时。
- 班段最大为3段,未设置的段不返回,譬如:start_2、end_2、start_3、end_3。
advance_1和postpone_1:- 最大为3段,未设置的段不返回,譬如:advance_2、postpone_3、advance_2、postpone_3
late_1和early_1:- 最大为3段,未设置的段不返回,譬如:late_2、early_3、late_2、early_3
absenteeism_1和miss_type_1:- 最大为3段,未设置的段不返回,譬如:absenteeism_2、miss_type_3、absenteeism_2、miss_type_3
获取班次详情¶
使用场景:用于返回企业设置的班次详情。
请求方式:GET(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/shifts/{id}/?access_token=ACCESS_TOKEN
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| id | String | 是 | 班次id |
权限说明
返回结果:
{
"data": {
"name": "郑州后厨",
"short_name": "小早",
"shift_color": "#DFF04D",
"work_hours": "8.33",
"shift_rule_type": 1,
"convert_type": 1,
"shift_id": "a20ecccbf7064ec69d7243b6162890ab",
"overtime_hours": "0",
"is_elastic": false,
"day_start_tag": 1,
"is_complex": 0,
"is_temporary": 0,
"time_stages": [
{
"is_overtime": false,
"record_early": false,
"record_late": false,
"has_rest": false,
"start_time": "06:00",
"end_time": "08:20",
"card_mod": 2,
"rest_start_time": "",
"rest_end_time": "",
"remit_late": 0,
"remit_early": 0,
"clock_in_valid_start_time": "05:30",
"clock_in_valid_end_time": "07:10",
"clock_out_valid_start_time": "07:10",
"clock_out_valid_end_time": "08:40",
"serial": 1
},
{
"is_overtime": false,
"record_early": false,
"record_late": false,
"has_rest": false,
"start_time": "09:00",
"end_time": "12:30",
"card_mod": 5,
"rest_start_time": "",
"rest_end_time": "",
"remit_late": 0,
"remit_early": 0,
"clock_in_valid_start_time": "08:40",
"clock_in_valid_end_time": "10:45",
"clock_out_valid_start_time": "10:45",
"clock_out_valid_end_time": "14:15",
"serial": 2
},
{
"is_overtime": false,
"record_early": false,
"record_late": false,
"has_rest": false,
"start_time": "16:00",
"end_time": "18:30",
"card_mod": 3,
"rest_start_time": "",
"rest_end_time": "",
"remit_late": 0,
"remit_early": 0,
"clock_in_valid_start_time": "14:15",
"clock_in_valid_end_time": "17:15",
"clock_out_valid_start_time": "17:15",
"clock_out_valid_end_time": "21:30",
"serial": 3
}
]
},
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
公共相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| shift_id | String | 班次主键id |
| name | String | 班次名称 |
| short_name | String | 班次简称 |
| shift_color | String | 班次颜色 |
| shift_rule_type | Int | 班次类型标识:1-工作日班次;2-休息日班次 |
| convert_type | Int | 班次折算类型:0-按考勤组标准时长自动折算天;1-计该班次为1天;2-计该班次为0.5天(上午半天);3-计该班次为0.5天(下午半天) |
| day_start_tag | Int | 一天开始的标签:0-表示班次有效打卡时间开始为前一天开始计算;1-表示班次有效打卡时间开始为当天开始计算 |
| is_elastic | Boolean | 是否开启弹性规则:1-开启;0-关闭 |
| is_complex | Boolean | 是否为通用班次:1-通用班次;0-简单班次 |
| is_temporary | Boolean | 是否临时班次:1-是;0-否 |
| work_hours | String | 工作时长 |
| errcode | int | 状态码,0表示成功 |
| errmsg | String | 异常信息 |
通用班次相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| character_type | String | 弹性类型:0-未设置,1-豁免,2-弹性(早来早走,晚来晚走),3-弹性(分时段晚来晚),4-晚走晚到;5-分时段晚走晚到;6-上够标准时长即可 |
| overtime_hours | String | 加班时长 |
| time_stages | obj[] | 班段集合信息 |
serial |
Int | 班段序号 |
is_overtime |
Boolean | 是否为加班时段 |
record_early |
Boolean | 是否记早退 |
record_late |
Boolean | 是否记迟到 |
remit_late |
Int | 迟到豁免分钟数 |
remit_early |
Int | 早退豁免分钟数 |
has_rest |
Boolean | 是否存在休息段 |
start_time |
String | 班段打卡开始时间 |
end_time |
String | 班段打卡结束时间 |
clock_in_valid_start_time |
String | 班段内上班有效打卡开始时间,受day_start_tag影响,当day_start_tag为0时,表示班段有效打卡时间开始为前一天开始计算,类推 |
clock_in_valid_end_time |
String | 班段内上班有效打卡结束时间 |
clock_out_valid_start_time |
String | 班段内下班有效打卡开始时间 |
clock_out_valid_end_time |
String | 班段内下班有效打卡结束时间 |
card_mod |
Int | 打卡选项:1-上班, 下班都需要打卡;2-仅需要上班打卡;3-仅需要下班打卡;4-上班或下班任一打卡;5-上下班无需打卡 |
rest_start_time |
String | 班段内休息开始时间 |
rest_end_time |
String | 班段内休息结束时间 |
| late_rules | obj | 弹性规则:早来早走,晚来晚走 |
character_advance |
Int | 弹性晚到晚走早到早走-早到允许时长 |
character_postpone |
Int | 弹性晚到晚走早到早走-晚到允许时长 |
| grant_late_rules | obj | 分时段晚来晚走 |
character_grade |
Int | 弹性分段晚到晚走-分段数 |
character_postpone |
Int | 弹性分段晚到晚走-段间隔分钟数 |
character_advance |
Int | 最多晚来晚走分钟数 |
| late_leave_rules | obj | 晚走晚到规则 |
later_leave_overtimes |
Int | 弹性晚走晚到时间期满 分钟数 |
enable_ignore_absent |
Boolean | 是否开启晚走晚到当次日晚到允许点超过次日上班的整段时, 允许次日无需打卡的规则 |
| late_stages_rules | obj | 分时段晚走晚到 |
leave_later_stages |
obj[] | |
start |
String | 分时段晚走晚到-开始时间 |
end |
String | 分时段晚走晚到-结束时间 |
early_before |
String | 次日最晚上班时间 |
enable_ignore_absent |
Boolean | 是否开启晚走晚到当次日晚到允许点超过次日上班的整段时, 允许次日无需打卡的规则 |
| elastic_satisfy_rules | obj | 上够标准时长即可规则 |
standard_hour |
String | 需上够标准时长 |
standard_elastic_st |
String | 弹性标准时长上班打卡起 |
standard_elastic_ed |
String | 弹性标准时长上班打卡止 |
by_half_hour |
Boolean | 是否按照半小时计算 |
简单班次相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| start_1 | String | 上班时间1 |
| end_1 | String | 下班时间1 |
| advance_1 | String | 班段1上班有效打卡开始时间 |
| late_1 | String | 班段1上班有效打卡结束时间 |
| early_1 | String | 班段1下班有效打卡开始时间 |
| postpone_1 | String | 班段1下班有效打卡结束时间 |
| absenteeism_1 | Int | 旷工1分钟数 |
| miss_type_1 | Boolean | 无效打卡计算类型:0缺卡,1-旷工 |
| rest_start_dt | String | 休息开始时间 |
| rest_end_dt | String | 休息结束时间 |
| character_type | Int | 弹性类型:0-未设置,1-豁免,2-弹性(早来早走,晚来晚走),3-弹性(分时段晚来晚) |
| character_advance | Int | 弹性-允许提前下班分钟数 |
| character_postpone | Int | 弹性-允许推迟上班分钟数 |
获取员工班次信息¶
使用场景:用于返回员工的班次信息,一次最多50条。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/shifts/emp/info/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_ids": [
"0d928d2cad7******b1f1ffe058e71", "fb098d2cad7******b1f1ffe058e71"
],
"start_date": "2025-03-05",
"end_date": "2025-03-05"
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_ids | List | 否 | 员工id 列表, 一次最多50条 |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 一次最多50条 |
| start_date | String | 是 | 查询开始日期 |
| end_date | String | 是 | 查询结束日期 |
- 参数详细说明
emp_ids和emp_oa_codes- 当
emp_ids和emp_oa_codes都未传值时,将直接返回空值; - 当
emp_ids和emp_oa_codes都传值时,将只使用emp_ids,忽略emp_oa_codes; - 列表内无效的emp_id或emp_oa_code将会直接被忽略;
- 当
start_date和end_date查询最大范围时间为31天。
权限说明
返回结果:
{
"data": [
{
"emp_id": "00f2d27f4efb4be3bda37f55f4003ce7",
"shift_data": [
{
"access_date": "2025-03-01",
"name": "门店早班更新",
"short_name": "早班",
"shift_color": "#5255F7",
"work_hours": "7.50",
"shift_rule_type": 1,
"convert_type": 0,
"shift_id": "d0c0890553e04137a6428df65643bfc1",
"overtime_hours": "0",
"is_elastic": false,
"day_start_tag": 1,
"is_complex": 0,
"is_temporary": 0,
"time_stages": [
{
"is_overtime": false,
"record_early": false,
"record_late": false,
"has_rest": false,
"start_time": "06:30",
"end_time": "14:00",
"card_mod": 1,
"rest_start_time": "",
"rest_end_time": "",
"remit_late": 0,
"remit_early": 0,
"clock_in_valid_start_time": "04:00",
"clock_in_valid_end_time": "10:00",
"clock_out_valid_start_time": "09:01",
"clock_out_valid_end_time": "21:00",
"serial": 1
}
]
},
{
"access_date": "2025-03-02",
"name": "门店早班更新",
"short_name": "早班",
"shift_color": "#5255F7",
"work_hours": "7.50",
"shift_rule_type": 1,
"is_complex": 0,
"is_temporary": 0,
"convert_type": 0,
"shift_id": "d0c0890553e04137a6428df65643bfc1",
"overtime_hours": "0",
"is_elastic": false,
"day_start_tag": 1,
"time_stages": [
{
"is_overtime": false,
"record_early": false,
"record_late": false,
"has_rest": false,
"start_time": "06:30",
"end_time": "14:00",
"card_mod": 1,
"rest_start_time": "",
"rest_end_time": "",
"remit_late": 0,
"remit_early": 0,
"clock_in_valid_start_time": "04:00",
"clock_in_valid_end_time": "10:00",
"clock_out_valid_start_time": "09:01",
"clock_out_valid_end_time": "21:00",
"serial": 1
}
]
}
]
},
{
"emp_id": "0d928d2cad7142e49bcb1f1ffe058e71",
"shift_data": [
{
"date": "2023-03-05",
"shift_name": "",
"err_msg": "员工不在月考勤表或员工不考勤",
"shift_id": null
}
]
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
公共相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| emp_id | String | 员工id |
| shift_id | String | 班次主键id |
| name | String | 班次名称 |
| short_name | String | 班次简称 |
| shift_color | String | 班次颜色 |
| shift_rule_type | Int | 班次类型标识:1-工作日班次;2-休息日班次 |
| convert_type | Int | 班次折算类型:0-按考勤组标准时长自动折算天;1-计该班次为1天;2-计该班次为0.5天(上午半天);3-计该班次为0.5天(下午半天) |
| day_start_tag | Int | 一天开始的标签:0-表示班次有效打卡时间开始为前一天开始计算;1-表示班次有效打卡时间开始为当天开始计算 |
| is_elastic | Boolean | 是否开启弹性规则:1-开启;0-关闭 |
| is_complex | Boolean | 是否为通用班次:1-通用班次;0-简单班次 |
| is_temporary | Boolean | 是否临时班次:1-是;0-否 |
| work_hours | String | 工作时长 |
| errcode | int | 状态码,0表示成功 |
| errmsg | String | 异常信息 |
通用班次相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| character_type | String | 弹性类型:0-未设置,1-豁免,2-弹性(早来早走,晚来晚走),3-弹性(分时段晚来晚),4-晚走晚到;5-分时段晚走晚到;6-上够标准时长即可 |
| overtime_hours | String | 加班时长 |
| time_stages | obj[] | 班段集合信息 |
serial |
Int | 班段序号 |
is_overtime |
Boolean | 是否为加班时段 |
record_early |
Boolean | 是否记早退 |
record_late |
Boolean | 是否记迟到 |
remit_late |
Int | 迟到豁免分钟数 |
remit_early |
Int | 早退豁免分钟数 |
has_rest |
Boolean | 是否存在休息段 |
start_time |
String | 班段打卡开始时间 |
end_time |
String | 班段打卡结束时间 |
clock_in_valid_start_time |
String | 班段内上班有效打卡开始时间,受day_start_tag影响,当day_start_tag为0时,表示班段有效打卡时间开始为前一天开始计算,类推 |
clock_in_valid_end_time |
String | 班段内上班有效打卡结束时间 |
clock_out_valid_start_time |
String | 班段内下班有效打卡开始时间 |
clock_out_valid_end_time |
String | 班段内下班有效打卡结束时间 |
card_mod |
Int | 打卡选项:1-上班, 下班都需要打卡;2-仅需要上班打卡;3-仅需要下班打卡;4-上班或下班任一打卡;5-上下班无需打卡 |
rest_start_time |
String | 班段内休息开始时间 |
rest_end_time |
String | 班段内休息结束时间 |
| late_rules | obj | 弹性规则:早来早走,晚来晚走 |
character_advance |
Int | 弹性晚到晚走早到早走-早到允许时长 |
character_postpone |
Int | 弹性晚到晚走早到早走-晚到允许时长 |
| grant_late_rules | obj | 分时段晚来晚走 |
character_grade |
Int | 弹性分段晚到晚走-分段数 |
character_postpone |
Int | 弹性分段晚到晚走-段间隔分钟数 |
character_advance |
Int | 最多晚来晚走分钟数 |
| late_leave_rules | obj | 晚走晚到规则 |
later_leave_overtimes |
Int | 弹性晚走晚到时间期满 分钟数 |
enable_ignore_absent |
Boolean | 是否开启晚走晚到当次日晚到允许点超过次日上班的整段时, 允许次日无需打卡的规则 |
| late_stages_rules | obj | 分时段晚走晚到 |
leave_later_stages |
obj[] | |
start |
String | 分时段晚走晚到-开始时间 |
end |
String | 分时段晚走晚到-结束时间 |
early_before |
String | 次日最晚上班时间 |
enable_ignore_absent |
Boolean | 是否开启晚走晚到当次日晚到允许点超过次日上班的整段时, 允许次日无需打卡的规则 |
| elastic_satisfy_rules | obj | 上够标准时长即可规则 |
standard_hour |
String | 需上够标准时长 |
standard_elastic_st |
String | 弹性标准时长上班打卡起 |
standard_elastic_ed |
String | 弹性标准时长上班打卡止 |
by_half_hour |
Boolean | 是否按照半小时计算 |
简单班次相关:
| 字段名 | 类型 | 说明 |
|---|---|---|
| start_1 | String | 上班时间1 |
| end_1 | String | 下班时间1 |
| advance_1 | String | 班段1上班有效打卡开始时间 |
| late_1 | String | 班段1上班有效打卡结束时间 |
| early_1 | String | 班段1下班有效打卡开始时间 |
| postpone_1 | String | 班段1下班有效打卡结束时间 |
| absenteeism_1 | Int | 旷工1分钟数 |
| miss_type_1 | Boolean | 无效打卡计算类型:0缺卡,1-旷工 |
| rest_start_dt | String | 休息开始时间 |
| rest_end_dt | String | 休息结束时间 |
| character_type | Int | 弹性类型:0-未设置,1-豁免,2-弹性(早来早走,晚来晚走),3-弹性(分时段晚来晚) |
| character_advance | Int | 弹性-允许提前下班分钟数 |
| character_postpone | Int | 弹性-允许推迟上班分钟数 |
考勤核算数据¶
获取员工每日实际出勤工时¶
使用场景:该接口返回指定日期的打卡时间和出勤工时。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/attends_info/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"query_start": "2020-04-01",
"query_end": "2020-04-02",
"dep_ids": [
"b05d5e2e199e4bae8f6c67a02afbff62"
],
"dep_oa_codes": [
"10004838"
]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| query_start | String | 是 | 查询开始日期 |
| query_end | String | 是 | 查询结束日期 |
| dep_ids | List | 否 | 部门ID dep_ids 与 dep_oa_codes不能同时为空 |
| dep_oa_codes | List | 否 | 部门 OA 编码 dep_oa_codes与dep_ids不能同时为空,且只支持两个参数只能传一个 |
- 注意:
- dep_ids 和 dep_oa_codes必传其一,两个都传将会被限制,不允许两个参数一起传。
-
列表内无效的 dep_ids 或 dep_oa_codes 将会直接被忽略。
-
注意:
- dep_ids 和 dep_oa_codes必传其一,两个都传将会被限制,不允许两个参数一起传。
- 列表内无效的 dep_ids 或 dep_oa_codes 将会直接被忽略。
权限说明
返回结果:
{
"data": {
"10104838": {
"2020-04-01": {
"shift_info": {
"end_1": "18:30",
"shift_hours": 8.0,
"start_1": "09:00"
},
"work_hours": 8.0,
"card_time": {
"end_3": null,
"end_2": null,
"end_1": "2020-04-01T18:43",
"start_2": null,
"start_3": null,
"start_1": "2020-04-01T08:10"
}
},
"2020-04-02": {
"shift_info": {
"end_1": "18:30",
"shift_hours": 8.0,
"start_1": "09:00"
},
"work_hours": 0.0,
"card_time": {
"end_3": null,
"end_2": null,
"end_1": null,
"start_2": null,
"start_3": null,
"start_1": "2020-04-01T08:10"
}
}
}
},
"errcode": 0,
"errmsg": ""
}
参数说明:
| 参数 | 说明 |
|---|---|
| errcode | 返回码。暂有以下错误码: 19001: 请开通考勤管理 19002: 请启用请假记录 19003: 请启用外勤记录 19004: 请启用加班记录 19005: 请启用打卡记录 19006: 数据不是当前年月的 19007: 提交的数据记录超过100条 |
| errmsg | 对返回码的文本描述内容 |
| data | 返回数据 |
10104838 |
若传参为dep_ids则为返回值员工ID;若传参为dep_oa_codes则为员工 OA 编码 |
2020-04-01 |
查询日期字符串 |
shift_info |
班次信息字典 |
start_1 |
上班时间1 |
end_1 |
下班时间1 |
start_2 |
上班时间2 |
end_2 |
下班时间2 |
start_3 |
上班时间3 |
end_3 |
下班时间3 |
shift_hours |
班次时长 |
work_hours |
实际出勤时长 |
card_time |
实际班次打卡时间信息字典 |
start_1 |
上班打卡时间1 |
end_1 |
下班打卡时间1 |
start_2 |
上班打卡时间2 |
end_2 |
下班打卡时间2 |
start_3 |
上班打卡时间3 |
end_3 |
下班打卡时间3 |
获取员工月缺卡明细¶
使用场景:该接口返回员工的月缺卡明细数据。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/miss_card/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"year": 2025,
"month": 8,
"emp_ids": ["b05d5e2e199e4bae8f6c67a02afbff62"],
"emp_oa_codes": ["10004838"]
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| year | int | 是 | 查询的年份 |
| month | int | 是 | 查询的月份 |
| access_date | String | 否 | 查询当前考勤月的某天,支持格式:%Y-%M-%D, %Y/%M/%D |
| emp_ids | List | 否 | 员工id 列表, 一次最多50条 |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 一次最多50条 |
- 注意:
- emp_ids 和 emp_oa_codes必传其一,两个都传将只使用emp_ids, 忽略emp_oa_codes。
- 列表内无效的emp_id或emp_oa_code将会直接被忽略
- 支持按月/按天返回员工的缺卡明细数据。
权限说明
返回结果:
{
"data": [
{
"emp_id": "57f322ef1a124448b2219f64fb253330",
"details": [
{
"date": "2025-08-19",
"records": [
{
"on_off": "off",
"id": "bfd5b076664f49278a92d4c93bba0331",
"shift_dt": "2025-08-19 18:30"
}
],
"weekday": 2
},
{
"date": "2025-08-29",
"records": [
{
"on_off": "on",
"id": "dfb2f1b9637c4a6d85d5690464dbdff3",
"shift_dt": "2025-08-29 10:00"
}
],
"weekday": 5
}
]
}
],
"errcode": 0,
"errmsg": ""
}
参数说明:
| 参数 | 说明 |
|---|---|
| emp_id | 员工ID |
| details | 缺卡明细 |
date |
日期 |
weekday |
星期 |
records |
缺卡日明细记录 |
└id |
打卡记录ID |
└on_off |
上班/下班:on表示上线;off表示下班 |
└shift_dt |
上班/下班的班次时间 |
获取员工月度考勤结果数据¶
使用场景:返回员工月度考勤结果,最多一次返回50条员工考勤结果。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/month_overview/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"year": 2019,
"month": 4,
"emp_ids": ["686460*****44f2987db8*****079b89"],
"emp_oa_codes": []
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| year | Int | 是 | 年 |
| month | Int | 是 | 月 |
| emp_ids | List | 否 | 员工id 列表, 一次最多50条 |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 一次最多50条 |
- 注意:
- emp_ids 和 emp_oa_codes必传其一,两个都传将只使用emp_ids, 忽略emp_oa_codes。
- 列表内无效的emp_id或emp_oa_code将会直接被忽略。
权限说明
返回结果:
{
"data": [
{ "id": "686460*****44f2987db8*****079b81",
"leave_non_attendance_hour": 0,
"early_leave_charge": 0,
"leave_lactation_hour": 0,
"leave_type_50_hour": 2,
"leave_type_51_hour": 6.5,
"expected_attend_day": 22,
"expected_attend_hour": 168,
"job_title_name": null,
"leave_maternity_day": 0,
"business_trip_day": 0,
"leave_mourning_day": 0,
"leave_annual_hour": 0,
"business_trip_hour": 0,
"mend_clock_count": 3,
"leave_hour_count": 0,
"dept_oa_code": null,
"late_count": 0,
"leave_paternity_hour": 0,
"emp_id": "8dd54c0**d47e5*****c5e3e13a45",
"comprehensive_charge": 0,
"leave_mourning_hour": 0,
"leave_trip_hour": 0,
"missing_clockin_count": 0,
"leave_home_hour": 0,
"leave_early_minute": 0,
"leave_marriage_hour": 0,
"leave_maternity_hour": 0,
"work_hour": 168,
"leave_marriage_day": 0,
"late_deduct_money": 0,
"absenteeism_count": 0,
"leave_care_hour": 0,
"leave_business_hour": 0,
"weekday_overtime_hours": 0,
"weekend_overtime_hours": 0,
"holiday_overtime_hours": 0,
"missing_clockout_count": 0,
"attendance_no": null,
"missing_clock_count": 0,
"absenteeism_deduct_money": 0,
"missing_clock_charge": 0,
"absenteeism_day": 0,
"leave_sick_hour": 0,
"emp_oa_code": null,
"dep_name": null,
"emp_name": "EMP NAME",
"leave_prenatal_checkup_hour": 0,
"dept_id": null,
"emp_no": null,
"late_minute_count": 0,
"job_title_id": null,
"field_work_hour": 168,
"early_leave_count": 0,
"month_total_outing_hour": 168,
"leave_timeoff_hour": 0
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | String | 主键ID |
| emp_id | String | 员工ID |
| emp_oa_code | String | 员工OA编码 |
| emp_name | String | 员工姓名 |
| emp_no | String | 员工工号 |
| attendance_no | String | 考勤编号 |
| dept_oa_code | String | 组织OA编码 |
| dept_id | Float | 组织ID |
| dep_name | String | 组织名称 |
| job_title_id | String | 岗位ID |
| job_title_name | String | 岗位名称 |
| expected_attend_day | Int | 应出勤天数 |
| expected_attend_hour | Float | 应出勤小时数 |
| work_hour | Float | 工作时长(单位:小时) |
| absenteeism_day | Int | 旷工天数 |
| missing_clockin_count | Int | 上班缺卡次数 |
| missing_clockout_count | Int | 下班缺卡次数 |
| missing_clock_count | Int | 缺卡次数 |
| mend_clock_count | Int | 补卡次数 |
| leave_marriage_hour | Float | 婚假小时 |
| leave_sick_hour | Float | 短期病假小时 |
| leave_annual_hour | Float | 年假小时 |
| leave_timeoff_hour | Float | 调休假小时 |
| leave_business_hour | Float | 事假小时 |
| leave_maternity_hour | Float | 产假小时 |
| leave_paternity_hour | Float | 陪产假小时 |
| leave_trip_hour | Float | 路途假小时 |
| leave_home_hour | Float | 探亲假小时 |
| leave_care_hour | Float | 看护假小时 |
| leave_non_attendance_hour | Float | 非出勤假小时 |
| leave_prenatal_checkup_hour | Float | 产检假小时 |
| leave_mourning_hour | Float | 丧假小时 |
| leave_lactation_hour | Float | 哺乳假小时 |
| leave_type_50_hour | Float | 自定义假类-50(自定义假类来自2号考勤假期假类自定义配置),单位小时 |
| leave_type_51_hour | Float | 自定义假类-51,单位小时 |
| leave_marriage_day | Float | 婚假天 |
| leave_maternity_day | Float | 产假天 |
| leave_mourning_day | Float | 丧假天 |
| leave_hour_count | Float | 请假总时长 |
| weekday_overtime_hours | Float | 工作日加班(小时) |
| weekend_overtime_hours | Float | 休息日加班(小时) |
| holiday_overtime_hours | Float | 节假日加班(小时) |
| late_count | Int | 迟到次数 |
| late_minute_count | Float | 迟到分钟数 |
| absenteeism_count | Int | 旷工次数 |
| early_leave_count | Int | 早退次数 |
| leave_early_minute | Float | 早退分钟数 |
| late_deduct_money | Float | 迟到扣款(元) |
| absenteeism_deduct_money | Float | 旷工扣款(元) |
| early_leave_charge | Float | 早退扣款(元) |
| comprehensive_charge | Float | 综合扣款(元) |
| missing_clock_charge | Float | 缺卡扣款(元) |
| business_trip_hour | Float | 出差(小时) |
| business_trip_day | Float | 出差天 |
| field_work_hour | Float | 外出(小时) |
| month_total_outing_hour | Float | 外勤合计(小时) |
计算外出/出差时长¶
使用场景:该接口根据员工所在考勤组的外出/出差规则核算指定时间段内可记工时长,并返回系统修正后的实际起止时间,可用于第三方系统在发起外出/出差审批前进行前置校验和自动填写时长。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/outing_hours_length/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_id": "686460*****44f2987db8*****079b89",
"start_dt": "2025-11-06",
"end_dt": "2025-11-06",
"outing_attendance_type": 1,
"start_m": "am",
"end_m": "pm"
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_id | String | 是 | 需要核算的员工ID |
| start_dt | String | 是 | 申请开始日期,支持YYYY-MM-DD、YYYY/MM/DD、YYYY-MM-DD HH:MM或YYYY/MM/DD HH:MM,不可晚于end_dt |
| end_dt | String | 是 | 申请结束日期,支持YYYY-MM-DD、YYYY/MM/DD、YYYY-MM-DD HH:MM或YYYY/MM/DD HH:MM |
| outing_attendance_type | Int | 是 | 外勤类型:1-外出、2-出差,对应考勤系统中的外勤/出差配置 |
| start_m | String | 否 | 当外出出差规则中设置的为按半天申请时,该参数必填,取值am/pm,am为上午,pm为下午 |
| end_m | String | 否 | 当外出出差规则中设置的为按半天申请时,该参数必填,取值am/pm,am为上午,pm为下午 |
- 注意
start_dt和end_dt必须满足start_dt <= end_dt,且跨度需在企业启用的考勤周期内。- 需提前在考勤系统中启用外勤/出差规则并分配给目标员工所在考勤组。
权限说明:
返回结果:
{
"data": {
"daily_time": 8.0,
"days": 1.0,
"hours": 8.0,
"start_dt": "2025-11-06T09:00:00",
"end_dt": "2025-11-06T18:30:00",
"length_is_disable": 0
},
"errcode": 0,
"errmsg": "",
"queries": {}
}
返回字段说明:
| 字段名 | 类型 | 说明 |
|---|---|---|
| hours | String | 根据企业规则计算出的外出/出差时长(小时) |
| days | String | 按 hours ÷ daily_time 折算出的天数 |
| daily_time | String | 员工考勤组设置的标准工作时长(小时) |
| start_dt | String | 结合班次、半天设置后系统确认的实际开始时间 |
| end_dt | String | 结合班次、半天设置后系统确认的实际结束时间 |
| length_is_disable | Int | 是否允许前端修改时长:1-禁止修改、0-允许修改 |
计算请假时长¶
使用场景:用于在审批或集成系统中实时核算员工某一请假类型在指定时间段内的实际可扣减时长、天数及跨月分钟数,确保与考勤核算口径一致。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/calc_leave_length/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_id": "686460*****44f2987db8*****079b89",
"vacation_type_value": 6,
"start_dt": "2025-11-28 06:00",
"end_dt": "2025-12-01 19:00",
"start_m": "am",
"end_m": "pm"
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_id | String | 是 | 需要核算的员工ID |
| vacation_type_value | Int | 是 | 请假类型值,需与考勤假期方案中的 type_value 保持一致(例如:1-事假、2-病假、3-婚假、4-丧假、5-年假、6-调休假、7-产假、8-陪产假、9-路途假、10-探亲假、11-看护假、12-非出勤假、13-产检假、14-哺乳假、50+为自定义假期等) |
| start_dt | String | 是 | 申请开始时间,支持YYYY-MM-DD、YYYY/MM/DD、YYYY-MM-DD HH:MM或YYYY/MM/DD HH:MM,不可晚于end_dt |
| end_dt | String | 是 | 申请结束时间,支持与 start_dt 相同的格式 |
| start_m | String | 否 | 当请假规则中设置的为按半天申请时,该参数必填,取值am/pm,am为上午,pm为下午 |
| end_m | String | 否 | 当请假规则中设置的为按半天申请时,该参数必填,取值am/pm,am为上午,pm为下午 |
- 注意
- 跨月请假时,
month_leave_hours会按年:月输出分钟数组,可用于财务或余额对账。
权限说明:需开通“考勤假期管理”,并保证 access_token 对应企业已启用请假核算功能。
返回结果:
{
"data": {
"daily_time": 8.0,
"month_leave_hours": {
"2025:11": [
480.0
],
"2025:12": [
480.0
]
},
"err_msg": "",
"days": 2.0,
"hours": 16.0,
"disable_modify_length": false,
"start_dt": "2025-11-28T06:00:00",
"end_dt": "2025-12-01T19:00:00"
},
"errcode": 0,
"errmsg": ""
}
返回字段说明:
| 字段名 | 类型 | 说明 |
|---|---|---|
| hours | String | 根据企业假期规则计算的请假时长(小时,保留两位小数) |
| days | String | 按 hours ÷ daily_time 折算出的天数 |
| month_leave_hours | Object | 跨月分钟分布,key 为 YYYY:MM,value 为该月内请假的分钟数数组 |
| daily_time | String | 员工考勤组设置的标准工作时长(小时) |
| start_dt | String | 用户提交的请假开始时间 |
| end_dt | String | 用户提交的请假结束时间 |
| err_msg | String | 计算失败时的提示信息,成功时为空字符串 |
| disable_modify_length | Boolean | 是否允许手工调整请假时长:true-禁止修改、false-允许修改 |
计算加班时长¶
使用场景:根据员工所在考勤组的加班规则(最小加班单位、加班类型限制等)核算指定起止时间内可计入的加班时长,常用于审批或集成系统发起前的自动校验或自动填写。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/calc_ot_hours/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_id": "686460*****44f2987db8*****p79b89",
"start_dt": "2025/11/08 00:00",
"end_dt": "2025/11/08 19:00"
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_id | String | 是 | 需要核算加班时长的员工ID |
| start_dt | String | 是 | 加班开始时间,支持,支持YYYY-MM-DD、YYYY/MM/DD、YYYY-MM-DD HH:MM或YYYY/MM/DD HH:MM,不可晚于end_dt |
| end_dt | String | 是 | 加班结束时间,支持与 start_dt 相同的格式,必须晚于 start_dt |
- 注意
- 系统会自动按照员工考勤组配置的加班规则(最小加班时长、是否跨天、加班类型匹配等)修正最终可计入的时长。
权限说明:
返回结果:
{
"data": {
"ot_hours": 19.0
},
"errcode": 0,
"errmsg": ""
}
返回字段说明:
| 字段名 | 类型 | 说明 |
|---|---|---|
| ot_hours | String | 根据企业加班规则核算后的加班时长(小时,保留两位小数) |
考勤统计概况¶
查询部门每日考勤概况数据¶
使用场景:返回指定部门(或全公司)的每日员工考勤概况数据
请求方式:GET(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/statistics_querier/daily_data/?access_token=ACCESS_TOKEN
请求参数与示例:
查询日期值 = "2022-10-08"
部门ID值 = "686460*****44f2987db8*****079b89"
ignore_department值 = false
https://openapi.2haohr.com/api/attendance/statistics_querier/daily_data/?access_token=ACCESS_TOKEN&query_dt={查询日期值}&department_id={部门ID值}&ignore_department={ignore_department值}&type={类型}
CURL工具请求示例:
curl -s "https://openapi.2haohr.com/api/attendance/statistics_querier/daily_data/?access_token=ACCESS_TOKEN&query_dt={查询日期值}&department_id={部门ID值}&ignore_department={ignore_department值}&type={类型}" --header "Content-Type: application/json"
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| query_dt | String | 是 | 查询日期,Date String "2022-10-10",未传值时默认查询今日 |
| department_id | String | 是 | 部门ID,department_id |
| ignore_department | Boolean | 否 | 是否忽略部门,如果忽略则意味着查询全公司考勤数据 |
| type | int | 否 | 获取类型 |
- 参数详细说明
ignore_department参数默认 false,但如果传递值为 true,将忽略 department_id 的取值;type参数默认为0。传入0则返回当日有出勤,且考勤无异常的员工; 传入1则返回当日有出勤,但包含迟到、早退的员工;
返回结果:
{
"data": {
"department_data": {
"department_id": "",
"department_name": ""
},
"attendance_data": {
"abnormal": 0,
"normal": 0,
"late": 0,
"early": 0,
"absent": 0,
"absenteeism": 0,
"outing_work": 0,
"outing_hours": 0,
"overtime": 0,
"leave": 0,
"business_trip": 0,
"all": 0,
"not_scheduler": 0
}
},
"errcode": 0,
"errmsg": ""
}
返回字段说明:
| 字段名 | 类型 | 说明 |
|---|---|---|
| department_data | Object | 部门信息,指定企业时为NULL |
| department_id | String | 部门ID |
| department_name | String | 部门名称 |
| attendance_data | Object | 考勤统计数据 |
| all | Int | 总人数 |
| abnormal | Int | 异常考勤的人数 |
| normal | Int | 正常考勤的人数 |
| late | Int | 迟到的人数 |
| early | Int | 早退的人数 |
| absent | Int | 缺卡的人数 |
| absenteeism | Int | 旷工的人数 |
| leave | Int | 请假的人数 |
| overtime | Int | 加班的人数 |
| outing_work | Int | 外勤的人数 |
| business_trip | Int | 出差的人数 |
| outing_hours | Int | 外出的人数 |
| not_scheduler | Int | 未排班的人数 |
查询部门每月考勤概况数据¶
使用场景:返回指定部门(或全公司)的每月员工考勤概况数据
请求方式:GET(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/statistics_querier/monthly_data/?access_token=ACCESS_TOKEN
请求参数与示例:
查询日期值 = "2022-10-08"
部门ID值 = "686460*****44f2987db8*****079b89"
ignore_department值 = false
https://openapi.2haohr.com/api/attendance/statistics_querier/monthly_data/?access_token=ACCESS_TOKEN&query_dt={查询日期值}&department_id={部门ID值}&ignore_department={ignore_department值}
CURL工具请求示例:
curl -s "https://openapi.2haohr.com/api/attendance/statistics_querier/monthly_data/?access_token=ACCESS_TOKEN&query_dt={查询日期值}&department_id={部门ID值}&ignore_department={ignore_department值}" --header "Content-Type: application/json"
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| query_dt | String | 是 | 查询日期,Date String "2022-10-10",未传值时默认查询当前月份 |
| department_id | String | 是 | 部门ID,department_id |
| ignore_department | Boolean | 否 | 是否忽略部门,如果忽略则意味着查询全公司考勤数据 |
注意:
- ignore_department 参数默认 false,但如果传递值为 true,将忽略 department_id 的取值。
权限说明:-
返回结果:
{
"data": {
"department_data": {
"department_id": "",
"department_name": ""
},
"attendance_data": {
"abnormal": 0,
"normal": 0,
"late": 0,
"early": 0,
"absent": 0,
"absenteeism": 0,
"outing_work": 0,
"outing_hours": 0,
"overtime": 0,
"leave": 0,
"business_trip": 0,
"all": 0,
"not_scheduler": 0
}
},
"errcode": 0,
"errmsg": ""
}
返回字段说明:
| 字段名 | 类型 | 说明 |
|---|---|---|
| department_data | Object | 部门信息,指定企业时为NULL |
| department_id | String | 部门ID |
| department_name | String | 部门名称 |
| attendance_data | Object | 考勤统计数据 |
| all | Int | 总人数 |
| abnormal | Int | 异常考勤的人数 |
| normal | Int | 正常考勤的人数 |
| full_time | Int | 满勤的人数 |
| not_full_time | Int | 未满勤的人数 |
| late | Int | 迟到的人数 |
| early | Int | 早退的人数 |
| absent | Int | 缺卡的人数 |
| absenteeism | Int | 旷工的人数 |
| leave | Int | 请假的人数 |
| overtime | Int | 加班的人数 |
| outing_work | Int | 外勤的人数 |
| business_trip | Int | 出差的人数 |
| outing_hours | Int | 外出的人数 |
假期统计概况¶
获取员工假期余额¶
使用场景:用于返回员工的假期余额数据,一次最多获取100个员工的数据。
请求方式:POST(HTTPS)
请求地址:https://openapi.2haohr.com/api/attendance/vacation_overview/?access_token=ACCESS_TOKEN
请求包结构体为:
{
"emp_ids": ["686460*****44f2987db8*****079b89", "ca0274*****b4145b4a*****6f176b3b"],
"emp_oa_codes": [],
"year": 2020,
"month": 4,
"type": 1
}
参数说明:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| access_token | String | 是 | 调用接口凭证 |
| emp_ids | List | 否 | 员工id 列表, 一次最多100条 |
| emp_oa_codes | List | 否 | 员工OA编码 列表, 一次最多100条 |
| year | Int | 否 | 年 |
| month | Int | 否 | 月 |
| type | Int | 否 | 假期类型,根据枚举类型查询 |
| type_name | String | 否 | 假期类型,根据假期类型名称查询 |
- 参数详细说明
emp_ids和emp_oa_codes- 当
emp_ids和emp_oa_codes都未传值时,将直接返回空值; - 当
emp_ids和emp_oa_codes都传值时,将只使用emp_ids,忽略emp_oa_codes; - 列表内无效的emp_id或emp_oa_code将会直接被忽略;
- 当
year和month- 表示想查询截止的年月:
- 当
year和month都未传值时,默认查询当前考勤周期年月; - 当
year和month都传值时,查询指定年月year和month在此之前的值(包括year和month); year和month需要同时都传值或都不传值,不能只传其中一个,传一个都会被直接忽略按都不传处理。
type和type_name- 请假类型
- 当
type和type_name都未传值时,默认统计全部假期类型; - 当
type和type_name都传值时,将只使用type,忽略type_name; - 当有确定的请假类型时建议传
type(譬如年假、事假) - 当请假类型认知模糊时建议传
type_name(譬如病假、短期病假) type假期类型枚举值:- 事假的写法支持:
1 - 病假的写法支持:
2 - 调休的写法支持:
6
- 事假的写法支持:
type_name假期类型枚举值:- 病假的写法支持:
病假、短期病假、带薪短期病假、带薪短期病假 - 事假的写法支持:
带薪事假、事假 - 调休的写法支持:
调休、调休假
- 病假的写法支持:
自定义假期类型请通过2号考勤假期系统获取,- 已知请假类型和假期类型名称的对应关系请参考如下:
- 事假:
1 - 短期病假:
2 - 婚假:
3 - 丧假:
4 - 年假:
5 - 调休假:
6 - 产假:
7 - 陪产假:
8 - 路途假:
9 - 探亲假:
10 - 看护假:
11 - 非出勤假:
12 - 产检假:
13 - 哺乳假:
14
- 事假:
返回结果:
{
"data":
[
{
"emp_id": "686460*****44f2987db8*****079b89",
"delivered_total": 22.5,
"deduction_total": 15.0,
"remaining": 7.5
},
{
"emp_id": "ca0274*****b4145b4a*****6f176b3b",
"delivered_total": 12.0,
"deduction_total": 2.5,
"remaining": 10.0
}
],
"errcode": 0,
"errmsg": ""
}
返回字段说明(以下所有字段都会返回无值为null):
| 字段名 | 类型 | 说明 |
|---|---|---|
| errcode | Int | 返回码。 错误码: 19001: 请开通考勤管理 19002: 请启用请假记录 19003: 假期类型未启用 19004: 假期未开启余额 19005: 假期类型不存在 19006: 一次提交的有效员工数超过100条 500: 内部服务错误 400: 参数错误 |
| errmsg | String | 对返回码的文本描述内容 |
| emp_id | String | 员工ID |
| delivered_total | Float | 累计发放假期总时长,单位默认为小时 |
| deduction_total | Float | 累计扣减假期总时长,单位默认为小时 |
| remaining | Float | 剩余假期余额,单位默认为小时 |