Document introduction(Intro)
API endpoint
shell
Formal :'https://api.mokahr.com/api-platform/v1'
Test:'https://api-staging-3.mokahr.com/api-platform/v1'
javascript
Formal :'https://api.mokahr.com/api-platform/v1'
Test:'https://api-staging-3.mokahr.com/api-platform/v1'
Moka API is designed based on REST, which uses standard HTTP functions such as, HTTP method, HTTP status code, and HTTP basic auth. It can help services that support HTTP can be easily accessed. All interface data is transmitted in JSON format (including error messages) and encoded in Unicode UTF-8. When a field value is empty, the response is null; if the field is an array and empty, the response is an null array [].
The Moka API is improving and upgrading for better experience. When an update includes an interface that is not backwards compatible, we upgrade the API version and keep the old API running normally. It means that when accessing the Moka API, your code needs to be able to handle some backward compatible changes such as the increase of response fields.
Api interface old version
The old version of the API interface is no longer updated, so we don’t recommend you to use it anymore.
Switch to Api interface old version
SSO guidance(Single Sign On)
Single sign-on, referred to as SSO, means that in multiple application systems, users only need to sign in once to access all mutually trusted application systems.
Switch toSSO guidance
Guidance for Exam/Assessment, Pre-employment screening (PES) , and Video Interview
(platform)
Switch to the Guidance
The format and description of time fields (Date)
The time fields' formats in the current API version are as follows:
Type | Format | Example | Description |
---|---|---|---|
Year | yyyy | 2018 | Graduation year |
Month | yyyy-MM | 2018-09 | Graduation time |
Day | yyyy-MM-dd | 2018-09-27 | Duty time |
Hour, Minute, Second | yyyy-MM-ddTHH:mm:ss.sssZ | 2018-09-27T02:00:00.000Z | Interview start time |
Among them, the format of YYYY-MM-DDTHH:mm:ss.sssZ is ISO8601 standard, the specific meaning can refer to here
Note: Due to historical reasons, some fields are not formatted strictly according to the above rules. For example, some days-accurate dates also use the format of yyyy-MM-ddTHH:mm:ss.sssZ. Therefore, the developers had better recognize these formats at the same time, and parse them into the desired content as needed.
API Development Guide (Guide)
ATS API standard integration solution
- Moka provides Moka ATS Standard Delivery Integrated Development Solution for developers' reference
Authentication verification instructions (Basic Auth)
> Request.example
$ curl https://api.mokahr.com/api-platform/v1/archiveReasons \
-u 'your_api_key:'
> Note:
1、Please replace 'your_api_key' with your API Key for testing
2、curl uses the -u flag to pass in basic auth authentication information. Since password is empty, the colon :
after username is necessary.
You need to use the private API Key generated by Moka for your organization to authenticate requests to access the Moka API. Please ask your CSM (Customer Success Manager) for an API Key if needed.
The authentication of Moka API is based on HTTP Basic Auth. When sending a request, the API Key needs to be provided as the username of basic auth, and the password does not need to be provided. When testing, please make sure that the HTTP request has the following header:Authorization: Basic
<base64("username:password")>
All requests must send through HTTPS
Oauth2 Authentication Description (Oauth2)
If you need to connect with the Moka open platform to obtain private data (such as applications, job information, etc.), in order to ensure data security and privacy, you need to obtain authorization to access, that is, to obtain the authorization token accessToken for accessing user data. This process adopts the internationally accepted OAuth2.0 standard protocol as the user authentication and authorization protocol. OAuth2.0 protocol specification
Preparation
You need to use the private clientId and clientSecret generated by Moka for your organization, and get the accessToken through clientid and clientSecret. A request to access the Moka API through an accessToken. Ask your CSM (Customer Success Manager) for clientid and clientSecret if needed.
Get accessToken
The call interface accessToken is valid for 2 hours.
When the validity period is greater than or equal to 30 minutes, call the accessToken interface to return the old accessToken.
When the validity period is less than 30 minutes, call the accessToken interface to return a new accessToken. At this time, both the old and new accessTokens are valid.
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/auth/oauth2/getToken' \
--header 'Content-Type: application/json' \
--data-raw '
{
"clientID": "moka_Z1Y99DlokiOGXmw8",
"clientSecret": "ell2Wl2dwUQ7no75BAsLrwtUaPw8W0tAEoYXv13ibRoV",
"grantType": "client_credentials"
}'
> Response example
{
"code": 0,
"msg": "Success",
"data": {
"accessToken": "a-685ca366-45e8-4025-9825-9840280ecd39",
"expiresIn": 6824,
"tokenType": "Bearer"
}
}
> Sample Error Response
{
"code": 110020,
"msg": "unauthorized_client",
"data": {}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/auth/oauth2/getToken
Body parameters
Field | Type | Whether it is required | Description |
---|---|---|---|
clientID | String | Yes | Apply with unique identifier, contact CSM to obtain |
clientSecret | String | Yes | Apply with key, contact CSM to obtain |
grantType | String | Yes | Authorization type, value is client_credentials |
Response parameter
Field | Type | Description |
---|---|---|
code | integer | 0 :Success,Others:Error |
msg | String | Error info |
data | Object | |
data.accessToken | String | Interface access credentials |
data.tokenType | String | accessToken的Type目前只支持Bearer |
data.expiresIn | Number | accessToken expiration time,Unit:Second |
Error code
code | errorMessage | Error description |
---|---|---|
110020 | unauthorized_client | invalid clientID or clienSecret, please contact CSM to get valid clientID or clienSecret |
call business interface
> Request example
curl --location --request PUT 'https://api.mokahr.com/api-platform/v2/departments' \
--header 'Authorization: Bearer
<accesstoken>
' \
--header 'Content-Type: application/json' \
--data '{
"departments": [
{ "departmentCode": "ididid1", "name": "namenamename1", "parentCode": "ididid1", "sequence": 0 },
{ "departmentCode": "ididid2", "name": "namenamename2", "parentCode": "ididid2" },
{ "departmentCode": "ididid2", "name": "namenamename2", "parentCode": "ididid2", "type": 2 },
{ "departmentCode": "ididid3", "name": "namenamename3", "parentCode": "0"}
]
}'
When calling the business interface, you need to add the Authorization parameter in the Header, the value isBearer
<accesstoken>
.
Taking calling the new organization structure interface as an example, the request example is as follows:
Proactive push instructions (Webhooks)
What are webhooks
Webhooks are a way to trigger Moka to actively push data when certain events occur. When these events occur, we send an HTTP POST request to the webhook endpoint you set URL. The request body will contain relevant data in JSON format. Since webhook is not an API endpoint for accessing Moka, no API is required Key to perform HTTP basic auth verification. In addition to supporting HTTP RESTful interface, we also support WebService (SOAP) interface. Please refer to the instructions below.
Please provide CSM with an HTTPS URL accessible from the public network as the address for receiving webhook requests. After we configure it, we will provide you with a signing key (signing key), it is used for verification, please keep it properly. If it is a WebService (SOAP) interface, please provide the CSM with an address where WSDL can be obtained, and inform that this is a WebService (SOAP) interface.
## Security of webhooks (HTTP RESTful method)
We only support HTTPS endpoint
Since Moka needs to send some Candidate information to the outside, which may contain sensitive information. We need to ensure that all information is encrypted. Although the request is an HTTPS endpoint, we will not verify the validity of the certificate with the CA. So you can provide a self-signed certificate about how to create and use self-signed certificates.
Signature authentication
> Signature authentication
```javascript import crypto from 'crypto';
/** * @description body签名 * @description 加密方式 HamcSha256 * @description 加密 result为16进制 * @param {Object} body 接口Parameter * @param {String} signKey 加密使用的key */ function validateWebhook(body, signKey) { const signStr = JSON.stringify(body); console.log('sha256 signStr:', signStr);// sha256 signStr: {"name":"test","email":"test@mokahr.com"} const sign = crypto.createHmac('sha256', signKey).update(signStr).digest('hex'); console.log('sha256 sign:', sign);// sha256 sign: 7d6981ccf0d789e29e4f5940fe9a7e9385d8a211ad44ecaaba335fb14dd2a32d } const body = { name: 'test', email: 'test@mokahr.com', } const signKey = 'qwer';
validateWebhook(body, signKey); ```
We ensure the authenticity of the request source (authentication, that is, the request comes from Moka) by signing the request body. The signature generated by the signature will be placed in the query of the request url along with the request
can be sent together. Request URL such as:
https://your-endpoint.com/moka?sign=d23da96c279366d66e2780d300d9b09d6b0ec09efbbe2c3fd84980d981e4b41a
In terms of verification, you need to use the signing key as the key and the request body as the content, calculate the result through HMAC-SHA256
, and compare it with the signature in the request URL.
Data encryption
> Data encryption and decryption
, If you have higher data security requirements, you can choose to encrypt the transmitted data. Our encryption algorithm adopts AES-256, hexadecimal, and the encryption mode is CBC.
We only encrypt the data
Field in the body, excluding id
, event
, triggeredAt
and other fields.
, If Data encryption is required, please contact CSM to enable it and set the encryption key.
Please keep the encryption key properly, and if such as is leaked, please contact us in time to deal with it.
## Receive webhooks (HTTP RESTful method)
You need to configure your server to accept Moka push webhook requests. The request method is HTTP POST, and the content is in JSON format.
Each event has a consistent JSON structure, but different trigger events will have different data content. The JSON structure is as follows:
Field | Type | Description |
---|---|---|
id | string | The unique id identifies this request |
event | string | Event type,, such aspushCandidate |
triggeredAt | timestamp | Trigger time |
data | object | Real data. Different event with different structure and content |
The currently provided webhook events are as follows:
Event type | Description |
---|---|
pushCandidate | Push Candidate information. Applicable scenarios are: |
Candidates who waiting for offers need to be pushed to the OA/EHR system for offer approval and sending. Candidates to be onboarded need to be pushed to the EHR system for entering employee information, etc.
Respond webhooks (HTTP RESTful method)
After successfully receiving and processing the webhook request, return 2xx. When Moka receives a non-2xx result, it will prompt the user that the import failed. If there is an error message, it can be returned in the body, eg:{msg:'There is an error in the current data'}.
WebService (SOAP) method
WebHooks in WebService mode are similar to those in HTTP mode, except that the protocol is based on SOAP. To configure WebHooks in SOAP mode, you need to provide CSM with an address where WSDL can be obtained. SOAP method names, parameters, and return values need to be consistent with those described in the following documents. The signature uses the Bearer method, you can refer to here
SOAP description
In addition to using the HTTP RESTful interface, a SOAP service interface can also be provided, which can be invoked by Moka. If you want to use SOAP, you need to provide the corresponding WSDL address to CSM. The interface standard of SOAP method is as follows:
Type | Description |
---|---|
Method name | pushCandidate |
Parameter | Candidate information, the data type is xml, and the field type is consistent with json, please refer to the description of the json part above. |
Response value | true /false represents success or failure |
Redirect to external system
If OA/EHR wants to jump to the target address after triggering webhooks in MOKA, it only needs to be in Just add the redirectUrl parameter to the return parameter of the body. When MOKA receives similar parameters, it will judge whether to jump to the PC end or the Mobile end according to the user's device. Currently, redirect only supports RESTful webhooks.
Field | Type | Description |
---|---|---|
redirectUrl | array | External link |
mobileUrl | string | When the mobile terminal of the third-party system redirect to the temporary link of the external system, it is recommended to sign in directly with a token |
pcUrl | string | When the pc terminal of the third-party system redirect to the temporary link of the external system, it is recommended to sign in directly with a token |
> Response example
{
"redirectUrl": {
"mobileUrl": "https: //app.mokahr.com/m/interviews/356408095/intervi",
"pcUrl": "https://app.mokahr.com/m/interviews/356408095/intervi"
}
}
Push candidate info
Function illustration
Pushing candidate information is currently triggered by clicking the "Import EHR" button in Moka, as shown in the figure below:
Redirect toREST Redirect toSOAP
a name="REST illustration">
REST illustration
> Data example:
{
"id": "f353e5ce-17e0-4783-bee4-4a6b734b20fe",
"event": "pushCandidate",
"triggeredAt": 1505296287,
"data": {
"applicationId": 12798,
"CandidateId": 8030,
"moved_at": "2018-08-03T10:25:12.000Z",
"name": "邵旭冬",
"phone": "18600000000",
"email": "shaodong@example.com",
"gender": "Male",
"created_at": "2018-08-03T10:25:12.000Z",
"birthYear": 1992,
"birthDate":"2020-03-17T00:00:00.000Z",
"nationality": "中国",
"experience": 7,
"ethnic": "汉族",
"forwardLocation": null,
"salary": "",
"aimSalary": null,
"certificateType": 1,
"citizenId": "410322199202152910",
"nativePlace": "北京City朝阳District",
"location": "北京",
"source": "OtherSource",
"sourceList": [
{
"name": "OtherSource",
"isBuiltin": true
}, {
"id": 4,
"name": "Other",
"isBuiltin": true
}
],
"sourceType": 1,
"academicDegree": "Bachelor degree",
"lastSpeciality": "人力资源管理",
"married": "Single",
"jobCommitment": " Full-time",
"hireMode": 1,
"finishedAt": "2019-08-23T16:00:00.000Z",
"resumeKey": "962bcac5-7671-4cbb-bbd7-376177703674.doc",
"stageName": "To be onboarded",
"probation": null,
"lastCompany": null,
"operator": {
"name": "李明",
"email": "liming@example.com",
"phone": "18600000001",
"number": "A001"
},
"lastCompany": "郑州麦田伙伴科技有限公司",
"nativePlaceCode": 310107,
"nationalityCode": 3,
"genderCode": 0,
"academicDegreeCode": 7,
"ethnicCode": 2,
"job": {
"title": "黑龙江-资易通业务线-催收部-CEO",
"department": "运维部",
"departmentCode": "6758",
"parentDepartmentCode": "6836",
"departmentPath": "信息物流中心/运维部",
"competencyType": "产品类",
"jobId": "39d3d5c9-949e-40d4-8d4b-5cb247d327a8",
"jobDescription": "
<p>
职位表述职位表述
</p>
",
"customFields": [
{
"name": "职位-年月",
"value": "2019-01"
}
]
},
"jobManager": {
"name": "test",
"email": "11q1@qq.com",
"phone": "17611232222",
"employeeId": "01"
},
"officeweb365Url": "http://www.officeweb365Url.com",
"officeweb365PrintUrl": "http://www.officeweb365PrintUrl.com",
"resumePdfMeta": null,
"portraitUrl": "http://www.portraitUrl.com",
"resumeUrl": "https://moka-test.oss-cn-beijing.aliyuncs.com/962bcac5-7671-4cbb-bbd7-376177703674.doc?OSSAccessKeyId=LTAIoEXIQWCGUAZO&Expires=1540374892&Signature=M1KKiwjG240uTmqK4qSbmRAU+yI=",
"educationInfo": [
{
"startDate": "2011-09",
"endDate": "2015-06",
"now": false,
"school": "北京邮电大学",
"speciality": "土木工程",
"academicDegree": "Bachelor degree"
}
],
"experienceInfo": [
{
"startDate": "2016-03",
"endDate": "2017-09",
"now": true,
"company": "北京有利科技有限公司",
"title": "高级Java工程师",
"summary": "Job responsibilityXXX",
"reasonForLeaving": "Reason for resignationXXX",
"underlingNumber": "5"
},
{
"startDate": "2015-05",
"endDate": "2016-03",
"now": false,
"company": "北京水果电商技术有限公司",
"title": "java工程师",
"summary": "Job responsibilityXXX",
"reasonForLeaving": "Reason for resignationXXX",
"underlingNumber": "5"
}
],
"customFields": [
{
"name": "身高",
"value": 175,
"section": "educationInfo",
"index": 0
},
{
"name": "Contact name",
"value": "张三",
"section": "紧急联系人",
"index": 0
},
{
"name": "联系人关系",
"value": "父亲",
"section": "紧急联系人",
"index": 0
},
{
"name": "Contact phone",
"value": "13012341234",
"section": "紧急联系人",
"index": 0
},
{
"name": "Contact email",
"value": "zs@demo.com",
"section": "紧急联系人",
"index": 0
},
{
"name": "Contact name",
"value": "张小四",
"section": "紧急联系人",
"index": 1
},
{
"name": "联系人关系",
"value": "兄弟",
"section": "紧急联系人",
"index": 1
},
{
"name": "Contact phone",
"value": "130567585678",
"section": "紧急联系人",
"index": 1
},
{
"name": "Contact email",
"value": "zxs@demo.com",
"section": "紧急联系人",
"index": 1
},
{
"name": "预计到岗 Date",
"value": "2018-4-23T09:10:26.000Z",
"now": false,
"section": "basicInfo",
"index": 1
},
{
"name": " Internship期",
"value": {
"startDate": "2004-01",
"endDate": "2005-01"
},
"now": true,
"section": "basicInfo",
"index": 1
}
],
"interviewers": [
{
"name": "李明",
"email": "liming@example.com",
"phone": "18600000001",
"round": 1,
"roundName": "1st round",
"roundOtherName": {
"en-US": {
"name": "1st round"
}
},
"startTime": "2018-08-03T10:25:12.000Z",
"createdAt": "2018-08-03T10:20:12.000Z",
"locationCountry": "中国",
"locationCityId": 141129,
"locationAddress": "滨海镇小山村",
"resultName": " Very dissatisfied",
"resultType": 0,
"feedback": "水平一般",
"feedbackTemplateResult": [
{
"type": 1,
"title": "题目1的标题",
"description": "题目1的Description",
"calcScoreType": "total",
"needReason": true,
"result": 9,
"scoreType": 1,
"subjects": [
{
"type": 1,
"title": "小题1的标题",
"description": "小题1的Description",
"result": 9,
"reason": "小题1的Score review"
}
]
},
{
"type": 2,
"title": "题目2的标题",
"description": "题目2的Description",
"result": 1,
"subjects": [
{
"title": "小题1的标题",
"description": "小题1的Description",
"result": 1,
"options": ["选项1", "选项2"],
"reason": "小题1的Score review"
}
]
},
{
"type": 3,
"title": "题目3的标题",
"description": "题目3的Description",
"subjects": [
{
"title": "小题1的标题",
"description": "小题1的Description",
"result": "技术很棒",
"reason": "小题1的Score review"
}
]
}
]
},
{
"name": "王宏",
"email": "wanghong@example.com",
"phone": "18600000002",
"round": 2,
"roundName": "2nd round",
"roundOtherName": {
"en-US": {
"name": "2st round"
}
},
"startTime": "2018-08-03T10:25:12.000Z",
"createdAt": "2018-08-03T10:20:12.000Z",
"resultName": " Satisfaction",
"resultType": 1,
"feedback": "水平有限"
}
],
"interviewFeedbackUrl": "https://cdn.mokahr.com/e11d677-4962-4309-b507-2273bf2499c8.pdf?OSSAccessKeyId=BBc12XXIQWCGUAZO&Expires=1505300229&Signature=Vdw6zpNH8HTUnu1FvhSjdXiqK6Q=",
"extendedInterviewers":[],
"extendedInterviewerFeedbackUrl":"",
"referrer": {
"name": "杨",
"email": "11111@mokahr.com",
"phone": "15001802222",
"number": "2019"
},
"headcountInfo": [
{
"id": 1,
"number": "A001",
"name": "紧急hc",
"status": "timeout"
}
],
"jobRanksInfo": [
{
"name": "初级",
"type": "类别1",
"level": 1
}
],
"offer": {
"approvalStatus": "APPROVED",
"salaryNumber": 8000,
"checkinDate": "2018-5-3",
"location": "北京City海淀District中关村方正国际大厦1001",
"creator": {
"name": "赵摩卡",
"email": "zhao@mokahr.com"
},
"finishedAt": "2018-4-23T09:10:26.000Z",
"customFields": [
{
"name": "职级",
"value": "P6"
}
],
"hcInfo": {
"id": 8,
"number": "005",
"name": "啦啦",
"status": "timeout"
},
"jobRankInfo": {
"level": 3,
"name": "总裁",
"type": null
},
"departmentName": "产品创新部",
"departmentCode": 30,
"parentDepartmentCode": 10,
"departmentPath": "产研部/产品创新部",
"offerLastSentAt": "2019-10-29T03:41:07.000Z"
},
"attachments": [
{
"name": " attachment1",
"size": 1024,
"url": "https://cdn.mokahr.com/e11d677-4962-4309-b507-2273bf2499c8.pdf?OSSAccessKeyId=BBc12XXIQWCGUAZO&Expires=1505300229&Signature=Vdw6zpNH8HTUnu1FvhSjdXiqK6Q=",
"type": "Candidate_UPLOAD_ATTACHMENT",
"customFieldId": 1,
"customFieldName": "上传简历"
}
],
"offerAttachment": {
"url": "https://cdn.mokahr.com/1234567-4962-4309-b507-2273bf2499c8.pdf?OSSAccessKeyId=BBc12XXIQWCGUAZO&Expires=1505300229&Signature=Vdw6zpNH8HTUnu1FvhSjdXiqK6Q="
},
"examReportLinks": [
{
"name": "考试 result链接",
"url": "https://t.cn/XXXXXX"
}
],
"examAttachments": [
{
"name": "考试 result",
"url": "https://cdn.mokahr.com/1234567-4962-4309-b507-2273bf2499c8.pdf?OSSAccessKeyId=BBc12XXIQWCGUAZO&Expires=1505300229&Signature=Vdw6zpNH8HTUnu1FvhSjdXiqK6Q="
}
],
"projectInfo": [
{
"startDate": "2018-09",
"endDate": "2018-10",
"projectName": "测试项目",
"title": "工程师",
"projectDescript": "这Yes个测试的项目",
"responsibilities": "开发",
"now": false
}
],
"languageInfo": [
{
"language": "213",
"level": "一般",
"listenAndSpeak": "良好",
"readAndWrite": "熟练"
}
],
"ehrCustomFields": [
{
"name": "extendDepartmentId",
"value": 3
}
],
"ehrCandidateExternalLink": "https://cdn.mokahr.com/forward/Candidate/info?access_token=93e0eb37-6a5c-4fe4-91db-0579a844fb51",
"label": [
{
"id": 76,
"label": "特别厉害"
},
{
"id": 62,
"label": "FisH"
}
],
"remarks": [
{
"creator": {
"name": "李国兴",
"phone": "18810380011",
"email": "guoxing123@trymoka.com",
"number": "1234"
},
"content": "这个Candidate还不错@[李国兴](1) ",
"targets": [
{
"name": "李国兴",
"phone": "18810380011",
"email": "guoxing123@trymoka.com",
"number": "1234"
}
],
"is_private": 1,
"type": "人工填写",
"created_at": "2020-03-30T05:53:28.000Z"
}
],
"owners": {
"name": "张乔",
"phone": "15810253321",
"email": "zhangqiao@mokahr.com",
"employee_id": "220"
}
}
}
Request 'data' structure, as follows:
Field | Type | Description |
---|---|---|
CandidateId | integer | The unique id of Candidate in Moka |
applicationId | integer | The unique id of Candidate's application in Moka |
name | string | Name |
prefixPhone | string | Country calling code |
phone | string | Phone |
string | ||
gender | string | Gender Optional values are: Male Female |
created_at | string | Resume in-system time |
birthYear | integer | Birthyear,, such as1990 |
birthDate | string | Birthdate |
ethnic | string | Ethnicity |
certificateType | integer | Certificate type Optional values are: 1 : id card2 : Hong Kong id card 3 : Macau id card4 :Taiwan id card5 : Passport 6 : Other identity document7 : Exit-Entry Permit for Travelling to and from Hong Kong and Macau (EEP) 8 : The Mainland Travel Permit for Taiwan Residents9 :Foreigners' Work Permit10 :Residence Permit for Foreigner |
citizenId | string | identification No. |
nationality | string | Country/Region |
nativePlace | string | Birthplace |
experience | integer | Work experience, 0 represents fresh graduate, -1 represents current student, others represent specific years. |
portraitUrl | string | The link of Candidate's portrait is valid for 1 hour |
hireMode | integer | Recruitment mode Optional values are: 1 : experienced hires2 : Campus recruitment |
finishedAt | string | Recruitment goal finish time |
industry | string | Industry |
archived | boolean | Whether to archive the application |
archivedAt | string | Archive application time |
archiveReasonId | number | Reason for archive id |
archiveReasons | string | Reason for archive |
archiveReasonsDetails | string | Detail reason for archive |
talentPoolsList | array | Candidate's talent pool |
talentPoolsList[].talentPoolId | number | Talent pool id |
talentPoolsList[].name | string | Talent pool name |
talentPoolsList[].description | string | Talent pool description |
source | string | Source,Such as, 'Lagou' |
sourceList | Array | Source level,the group will in numerical order, such as Tier-1 source, Tier-2 level, Tier-3 level |
sourceList[].id | integer | Source id (Tier-1 level doesn't exist) |
sourceList[].name | string | Source name |
sourceList[].isBuiltin | boolean | Whether the system has a built-in channel |
sourceType | integer | From Optional values are: 1 : Active search,2 :Direct delivery,3 :Talent recommendation |
location | string | Location,Such as, 'Beijing' |
lastCompany | string | Recent company Optional values are: null :no recent companyxxx :Served company name |
academicDegree | string | Highest education Optional values are: Bachelor degree ,Master degree ,Doctor degree ,Senior high school ,Junior college ,Technical secondary school ,MBA ,Others |
lastSpeciality | string | Recent graduate major |
married | string | Marital status, one of the following values::'Married', 'Single', 'Divorced', 'Widowed', 'CIVILUNION', 'COHABITATING', 'MARRIED', 'DIVORCED', 'ENGAGED', 'SEPARATED', 'SINGLE', 'WIDOWED' |
nativePlaceCode | integer | Birthplace code(null when birthplace is empty,Code details refer to attachment) |
nationalityCode | integer | Nationality code(null when nationality is empty,Code details refer to attachment) |
genderCode | integer | Gender code(null if gender is empty, see attachment for code details) |
academicDegreeCode | integer | Recent graduate major |
ethnicCode | integer | Ethnicity code(null if Ethnicity is empty, see attachment for code details) |
personal | string | Self- description |
salary | string | Current salary |
forwardLocation | string | Preferred city |
aimSalary | string | Preferred salary |
personalInterests | string | Hobby |
political | string | Political status |
educationInfo[] | array | Education experience |
educationInfo[].startDate | string | School start date,accurate to month. , such as2010-09 , 2008 |
educationInfo[].endDate | string | School end date,accurate to month. , such as2010-09 , 2008 |
educationInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
educationInfo[].school | string | School |
educationInfo[].speciality | string | Major |
educationInfo[].academicDegree | string | Education,optional values are:Bachelor degree ,Master degree ,Doctor degree ,Senior high school ,Junior college ,Technical secondary school ,MBA ,Others |
experienceInfo[] | array | Work experience |
experienceInfo[].startDate | string | Work start time,accurate to month. , such as2010-09 , 2008 |
experienceInfo[].endDate | string | Work end time,accurate to month. , such as2010-09 , 2008 |
experienceInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
experienceInfo[].company | string | Company name |
experienceInfo[].title | string | Job title |
experienceInfo[].department | string | Department |
experienceInfo[].salary | string | Salary |
experienceInfo[].summary | string | Job responsibility |
experienceInfo[].reasonForLeaving | string | Reason for resignation |
experienceInfo[].underlingNumber | string | No.of subordinate |
experienceInfo[].type | string | Company type |
experienceInfo[].location | string | Work location |
experienceInfo[].size | string | Company size |
awardInfo[] | array | Awards |
awardInfo[].awardDate | datetime | Winning date |
awardInfo[].awardName | string | Award name |
resumeUrl | string | Resume download link. HTTP GET request the URL to download the original resume file, and it is only valid for 48 hours. Thus, you need to download it as soon as possible. |
job | object | Position info |
job.jobId | string | Position id |
job.title | string | Job title |
job.department | string | Department |
job.departmentPath | string | The department full path of the position, from superior to subordinate, split by '/' |
job.departmentCode | string | Department code |
job.parentDepartmentCode | string | Upper-department code |
job.competencyType | string | Function type |
job.jobDescription | string | Job description |
job.customFields | array | Position custom field |
job.customFields[].name | string | Job title custom field name |
job.customFields[].value | string | Position custom field value |
interviewers[] | array | The interviewer who join in this application of the Candidate |
interviewers[].name | string | Interviewer name |
interviewers[].email | string | Interviewer email |
interviewers[].phone | string | Interviewer phone |
interviewers[].id | number | Interview id |
interviewers[].groupId | string | Interview group id |
interviewers[].interviewType | string | Interview type. On-site interview、Phone interview、Video interview |
interviewers[].attendStatus | string | Whether to accept the interview No feedback , No show , Rejected , Accepted |
interviewers[].cancelReason | string | Reason for cancelling interview |
interviewers[].participated | string | Interview feedback classification Not start , Filled feedback , Not fill feedback |
interviewers[].status | string | Interview status Optional value Cancelled , unfinished , Finished |
interviewers[].round | integer | Interview rounds Optional value 1 : 1st round2 : 2nd round3 : Final round ,etc. |
interviewers[].roundName | string | Interview roundsTitle,1st round ,2nd round ,Final round ,etc. |
interviewers[].roundOtherName | object | The name of interview rounds in other languages |
interviewers[].startTime | string | Interview start time |
interviewers[].createdAt | string | Time for creating interview |
interviewers[].locationCountry | string | Interview location(country) |
interviewers[].locationCityId | number | Interview location(city id) |
interviewers[].locationAddress | string | Interview location(full address) |
interviewers[].result Deprecated | integer | Interview result Optional values are: 1 : Very dissatisfied2 : Dissatisfied3 ; Satisfaction4 :Very satisfied |
interviewers[].resultName | string | Interview feedback |
interviewers[].resultType | integer | Type of interview feedback result Optional values are: 0 : Dissatisfied 1 : Satisfaction |
interviewers[].feedback | string | Interview feedback content |
interviewers[].feedbackTemplateResult | array | Information of interview evaluation |
interviewers[].feedbackTemplateResult[].type | number | Question type Optional values are: 1 :Scoring question2 : Single-choice question3 :Description4 :Multiple response |
interviewers[].feedbackTemplateResult[].title | string | Question title |
interviewers[].feedbackTemplateResult[].description | string | Question description |
interviewers[].feedbackTemplateResult[].result | number | Total score |
interviewers[].feedbackTemplateResult[].calcScoreType | string | Optional values are:avg : Averagetotal : Total score (valid when the ‘type’ is 1) |
interviewers[].feedbackTemplateResult[].scoreType | number | Optional values are:5 represents 5-point10 represents 10-point (valid when the ‘type’ is 1) |
interviewers[].feedbackTemplateResult[].needReason | string | Whether need scoring review or not (valid when the ‘type’ is 1) |
interviewers[].feedbackTemplateResult[].subjects | array | Information about each sub-question |
interviewers[].feedbackTemplateResult[].subjects[].type | number | Question type Optional values are: 1 : Scoring question, 2 : Multiple choice, 3 : Description, 4 : Multiple response |
interviewers[].feedbackTemplateResult[].subjects[].title | string | Sub-question title |
interviewers[].feedbackTemplateResult[].subjects[].description | string | Sub-question description |
interviewers[].feedbackTemplateResult[].subjects[].result | number | Sub-question result:Scoring question is the value of selected score; Multiple choice is the index value of options,which is started from 0;Description question is the string of description. When the question is type=2,multiple choice question,with the return value is "result": 0; When the question type=4 ,multiple response question, with the return value is "result": [1,2] |
interviewers[].feedbackTemplateResult[].subjects[].reason | string | Score review |
interviewers[].feedbackTemplateResult[].subjects[].options | string | Array of option strings (only valid when type is 2) |
interviewFeedbackUrl | string | The download link of interview feedback summary file (contains the interview feedback data generated by the the current application). HTTP GET request to this URL can download the interview feedback summary file, and this link is valid for 1 hour. Thus, you need to download it as soon as possible after receiving the request. |
extendedInterviewers[] | array | No interview feedback information from the interviewer who participated in the candidate's application for this application. For specific fields, refer to interviewers |
extendedInterviewerFeedbackUrl | string | Interview feedback summary (if the application is recommended from other positions, the interview feedback includes the interview feedback generated by the application of other positions) file download link, HTTP GET requests this URL to download the interview feedback summary file, this link is time-sensitive Sex, the expiration time is 48 hours, it needs to be downloaded and saved on the server as soon as possible after receiving the request |
ehrCustomFields[] | array | The ehr custom export field set configured in the CSM background |
ehrCustomFields[].name | string | Custom field name |
ehrCustomFields[].value | any | Custom field value |
ehrCandidateExternalLink | string | The link of Candidate details can be directly opened and viewed in the browser. The link is valid for 14 days by default and can be set up to 365 days. |
idCardFrontList | array | Upload id card picture (portrait side) |
idCardBackList | string | Upload id card picture (national emblem side) |
idCardSignOrganization | string | Issuing authority of id card |
idCardValidity | string | id card validity period |
customAttachmentList | obj | All attachments of Candidate's standard resume |
customAttachmentList.customUpload+customId | ary | The key of the attachment of the Candidate's standard resume is composed of customUpload (fixed string) + customid |
customAttachmentList.customUpload+customId[].attachmentName | string | Attachment name |
customAttachmentList.customUpload+customId[].attachmentSize | number | Attachment size (byte) |
customAttachmentList.customUpload+customId[].CandidateId | number | Candidate id |
customAttachmentList.customUpload+customId[].customId | number | Custom field id |
customAttachmentList.customUpload+customId[].downloadUrl | string | The download address will invalid in 24 hours |
customAttachmentList.customUpload+customId[].createdAt | string | Created time of attachment (timestamp format) |
referrer | object | Referrer info |
referrer.name | string | Referrer name |
referrer.email | string | Referrer email |
referrer.phone | string | Referrer phone |
referrer.number | string | Employee No. of referrer Optional values are: : null :no employee No. xxx :Employee No. |
operator | object | Operator info |
operator.name | string | Operator name |
operator.email | string | Operator email |
operator.phone | string | Operator phone |
operator.number | string | Operator No. |
jobRanksInfo[].name | string | Job level name |
jobRanksInfo[].type | string | Job level type |
jobRanksInfo[].level | string | Job level grade |
headcountInfo[].id | number | Headcount ID |
headcountInfo[].number | string | Headcount code |
headcountInfo[].name | string | Headcount name |
headcountInfo[].status | string | Headcount status |
customFields[] | array | Candidate custom fields, containing only the custom fields set in the standard resume |
customFields[].name | string | Candidate custom field name |
customFields[].value | string | Value of Candidate custom field . For yes or no question type Optional values are: 1 :Yes 0 :No. |
customFields[].now | boolean | This field exists when the custom field is a time period, and identifies whether the end time is "today". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
customFields[].section | string | Name of the module where the custom field is located, the module can be a built-in module (e.g. experienceInfo) or a custom module (e.g. emergency contact) |
customFields[].index | string | For modules with multiple pieces of data such as experienceInfo, educationInfo, or custom modules (such as emergency contacts), index indicates which field is the custom field information of which piece of data |
customFields[].codes | string | Custom code for multiple choice questions (valid for multiple choice questions with code) |
offer | object | Offer info |
offer.createdAt | string | Create offer time. Date format is: ISO8601 |
offer.status | string | Offer status Optional values are: notCreated :To be created: pending : To be sent: sent : Pending : accepted :Accepted rejected :Rejected |
offer.approvalStatus | string | Approval status Optional values are: UNINITIATED :UninitiatedINPROGRES : In processAPPROVED : ApprovedREJECTED : DeniedRECALLED : Withdrawn |
offer.salaryNumber | number | Monthly salary |
offer.checkinDate | string | Estimated start time |
offer.location | string | Onboard Location |
offer.creator | object | Offer creator info |
offer.creator.name | string | Offer creator name |
offer.creator.email | string | Offer creator email |
offer.finishedAt | string | Accept offer time. Date format is: ISO8601 |
offer.customFields | array | Offer custom field |
offer.customFields[].name | string | Offer custom field name |
offer.customFields[].value | string | Offer custom field value |
offer.customFields[].codes | string | Custom code for multiple choice questions (valid for multiple choice questions with code) |
offer.attachmentList | array | Offer attachment list |
offer.attachmentList[].name | string | Offer attachment name |
offer.attachmentList[].size | number | Offer attachment size |
offer.attachmentList[].downloadUrl | string | The download link of offer attachment is valid for 48 hours |
offer.attachmentList[].attachmentType | number | Offer attachment type Optional values are: 0 :Attachment for Candidate1 .Attachment for approver2 :Offer attachment |
offer.hcInfo | object | The headcount info selected by offer |
offer.hcInfo.id | number | The headcount id selected by offer |
offer.hcInfo.number | string | The headcount code selected by offer |
offer.hcInfo.name | string | The headcount name selected by offer |
offer.hcInfo.status | string | The headcount status selected by offer |
offer.jobRankInfo | object | Job level info selected by offer |
offer.jobRankInfo.type | string | The job level name selected by offer |
offer.jobRankInfo.level | string | Job level selected by offer |
offer.jobRankInfo.name | string | Job level name selected by offer |
offer.departmentName | string | Onboarding department name |
offer.departmentCode | number | Onboarding department code |
offer.parentDepartmentCode | number | The upper department of onboarding department code |
offer.departmentPath | string | The full path of Onboarding department |
offer.offerLastSentAt | string | Last offer time |
offer.offerAttachmentDownloadUrl | string | The download URL of attachment generated by offer is valid for 48 hours |
attachments | array | The Candidate's attachment |
attachments[].name | string | The doc. name of Candidate's attachment |
attachments[].applyFormId | number | Registration form template id |
attachments[].size | integer | Candidate attachment size |
attachments[].url | string | The download url of Candidate attachment |
attachments[].customFieldId | integer | Custom attachment field ID |
attachments[].customFieldName | string | Custom attachment field names |
attachments[].type | string | Candidate attachment type Optional values are: Candidate_UPLOAD_ATTACHMENT Upload by candidateUPLOAD_PORTRAIT Candidate portrait HR_UPLOAD_ATTACHMENT Upload manually by HR HM_UPLOAD_ATTACHMENT Manual upload on the HR sideINTERVIEW_ACCEPT Attachment of the registration form generated by the candidate accepted interviewINTERVIEW_SIGNIN Registration form attachment generated by candidate interview sign-inOFFER_ACCEPT Attachment of the registration form generated by the candidate accepted offer MERGE_APPLICATION_ATTACHMENT Attachments generated by mergering candidates INVITE_UPDATE_RESUME Invite Candidates to update the registration form for resume generation |
offerAttachment | object | Candidate attachment related to offer By default, this field does not exist. If necessary, please contact your CMS. This field will not exist even if the candidate interface switch is turned on |
offerAttachment.url | string | The download url of Candidate attachment related to offer The link is valid for 48 hours |
examReportLinks | array | Link of Candidate assessment/test result |
examReportLinks[].name | string | Candidate assessment/test name |
examReportLinks[].url | string | Link of Candidate assessment/test result |
examReportLinks[].type | string | Represent: exam or evaluation |
examReportLinks[].result | string | Link of Candidate assessment/test result |
examReportLinks[].detailResult | string | Detailed result of Candidate assessment/test |
examAttachments | array | Related attachment of Candidate assessment/test |
examAttachments[].name | string | Related attachment name of Candidate assessment/test |
examAttachments[].url | string | Related attachment download url of Candidate assessment/test The link is valid for 1 hour |
examAttachments[].result | string | Link of Candidate assessment/test result |
examAttachments[].detailResult | string | Detailed result of job assessment/test |
projectInfo | array | Project experience |
projectInfo[].startDate | string | Project start date,accurate to month. , such as2010-09 , 2008 |
projectInfo[].endDate | string | Project end date,accurate to month. , such as2010-09 , 2008 |
projectInfo[].projectName | string | Project name |
projectInfo[].title | string | Job title and duty |
projectInfo[].projectDescript | string | Project description |
projectInfo[].responsibilities | string | Responsibility in project |
projectInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
languageInfo | array | Language skill |
languageInfo[].language | string | Language type |
languageInfo[].level | string | Proficiency |
languageInfo[].listenAndSpeak | string | Listening and speaking |
languageInfo[].readAndWrite | string | Reading and writing |
stageName | string | Stage name |
jobManager | object | Position administrator |
jobManager.name | string | The name of position leader |
jobManager.phone | string | The phone of position leader |
jobManager.email | string | Position leader email |
jobManager.number | string | Position leader phone employee No. |
jobManager.employeeId | string | Position leader phone employee No.(Deprecated) |
jobAssistants | array | Position assistant |
jobAssistants[].name | string | Position assistant name |
jobAssistants[].phone | string | Position assistant phone |
jobAssistants[].email | string | Position assistant email |
jobAssistants[].employeeId | string | Position assistant employee No.(Deprecated) |
label | array | Candidate tag |
label[].id | number | Tag id |
label[].label | string | Tag name |
remarks | array | Candidate note |
remarks[].creator | object | The creator info of note |
remarks[].creator.name | object | The creator name of note |
remarks[].creator.phone | object | The creator phone of note |
remarks[].creator.email | object | The creator email of note |
remarks[].creator.number | object | The creator's employee No. of note |
remarks[].content | string | Note content |
remarks[].targets | array | The information of the person who mentioned by '@' in the note, which format is the same as the creator' s information |
remarks[].is_private | number | Whether the not is private,1:Private0:Public |
remarks[].type | string | Note type: manually |
remarks[].created_at | string | Time for creating note |
owners | object | Candidate owner |
owners.name | string | Candidate owner name |
owners.phone | string | Candidate owner phone |
owners.email | string | Candidate owner email |
owners.employeeId | string | Candidate owner employee No. |
survey | array | Pre-employment screening (PES) content |
survey[].name | string | Pre-employment screening (PES) name |
survey[].date | string | Pre-employment screening (PES) date |
survey[].result | string | Pre-employment screening (PES) result |
survey[].surveyAttachmentsUrl | string | The link of PES report |
survey[].surveyAttachmentName | string | The name of PES attachment |
survey[].surveyAttachments[] | array | PES multiple attachments (the new version of the single attachment and multiple attachments are in this attachment collection. The original single attachment results are only used for historical compatibility) |
survey[].surveyAttachments[].surveyAttachmentsUrl | string | The link of PES report |
survey[].surveyAttachments[].surveyAttachmentName | string | The name of PES attachment |
practiceInfo[] | array | Intern experience |
practiceInfo[].startDate | string | Intern start time |
practiceInfo[].endDate | string | Intern end time |
practiceInfo[].company | string | Company name |
practiceInfo[].title | string | Job title |
> SOAP parameter example of candidate info:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<event>
pushCandidate
</event>
<id>
f353e5ce-17e0-4783-bee4-4a6b734b20fe
</id>
<triggeredat>
1505296287
</triggeredat>
<data>
<academicdegree>
Bachelor degree
</academicdegree>
<applicationid>
12798
</applicationid>
<birthyear>
1992
</birthyear>
<Candidateid>
8030
</Candidateid>
<customfields>
<element>
<index>
0
</index>
<name>
身高
</name>
<section>
educationInfo
</section>
<value>
175
</value>
</element>
<element>
<index>
0
</index>
<name>
Contact name
</name>
<section>
紧急联系人
</section>
<value>
张三
</value>
</element>
<element>
<index>
0
</index>
<name>
联系人关系
</name>
<section>
紧急联系人
</section>
<value>
父亲
</value>
</element>
<element>
<index>
0
</index>
<name>
Contact phone
</name>
<section>
紧急联系人
</section>
<value>
13012341234
</value>
</element>
<element>
<index>
0
</index>
<name>
Contact email
</name>
<section>
紧急联系人
</section>
<value>
zs@demo.com
</value>
</element>
<element>
<index>
1
</index>
<name>
Contact name
</name>
<section>
紧急联系人
</section>
<value>
张小四
</value>
</element>
<element>
<index>
1
</index>
<name>
联系人关系
</name>
<section>
紧急联系人
</section>
<value>
兄弟
</value>
</element>
<element>
<index>
1
</index>
<name>
Contact phone
</name>
<section>
紧急联系人
</section>
<value>
130567585678
</value>
</element>
<element>
<index>
1
</index>
<name>
Contact email
</name>
<section>
紧急联系人
</section>
<value>
zxs@demo.com
</value>
</element>
</customfields>
<educationinfo>
<element>
<academicdegree>
Bachelor degree
</academicdegree>
<enddate>
2015-06
</enddate>
<school>
北京邮电大学
</school>
<speciality>
土木工程
</speciality>
<startdate>
2011-09
</startdate>
</element>
</educationinfo>
<email>
shaodong@example.com
</email>
<experienceinfo>
<element>
<company>
北京有利科技有限公司
</company>
<enddate>
2017-09
</enddate>
<startdate>
2016-03
</startdate>
<title>
高级Java工程师
</title>
</element>
<element>
<company>
北京水果电商技术有限公司
</company>
<enddate>
2016-03
</enddate>
<startdate>
2015-05
</startdate>
<title>
java工程师
</title>
</element>
</experienceinfo>
<gender>
Male
</gender>
<headcountinfo>
<element>
<id>
1
</id>
<number>
A001
</number>
</element>
</headcountinfo>
<interviewfeedbackurl>
https://cdn.mokahr.com/e11d677-4962-4309-b507-2273bf2499c8.pdf?OSSAccessKeyId=BBc12XXIQWCGUAZO&Expires=1505300229&Signature=Vdw6zpNH8HTUnu1FvhSjdXiqK6Q%3D
</interviewfeedbackurl>
<interviewers>
<element>
<email>
liming@example.com
</email>
<feedback>
水平一般
</feedback>
<feedbacktemplateresult>
<element>
<calcscoretype>
total
</calcscoretype>
<description>
题目1的Description
</description>
<needreason>
true
</needreason>
<scoretype>
5
</scoretype>
<subjects>
<element>
<description>
小题1的Description
</description>
<result>
10
</result>
<title>
小题1的标题
</title>
</element>
</subjects>
<title>
题目1的标题
</title>
<type>
1
</type>
</element>
<element>
<description>
题目2的Description
</description>
<subjects>
<element>
<description>
小题1的Description
</description>
<options>
<element>
选项1
</element>
<element>
选项2
</element>
</options>
<result>
1
</result>
<title>
小题1的标题
</title>
</element>
</subjects>
<title>
题目2的标题
</title>
<type>
2
</type>
</element>
<element>
<description>
题目3的Description
</description>
<subjects>
<element>
<description>
小题1的Description
</description>
<result>
技术很棒
</result>
<title>
小题1的标题
</title>
</element>
</subjects>
<title>
题目3的标题
</title>
<type>
3
</type>
</element>
</feedbacktemplateresult>
<name>
李明
</name>
<phone>
18600000001
</phone>
<result>
1
</result>
<round>
1
</round>
<roundname>
1st round
</roundname>
</element>
<element>
<email>
wanghong@example.com
</email>
<feedback>
水平有限
</feedback>
<name>
王宏
</name>
<phone>
18600000002
</phone>
<result>
2
</result>
<round>
2
</round>
<roundname>
2nd round
</roundname>
</element>
</interviewers>
<job>
<department>
研发部
</department>
<title>
java工程师
</title>
</job>
<jobranksinfo>
<element>
<level>
1
</level>
<name>
初级
</name>
<type>
类别1
</type>
</element>
</jobranksinfo>
<location>
北京
</location>
<married>
Single
</married>
<name>
邵旭冬
</name>
<offer>
<checkindate>
2018-5-3
</checkindate>
<creator>
<email>
zhao@mokahr.com
</email>
<name>
赵摩卡
</name>
</creator>
<customfields>
<element>
<name>
职级
</name>
<value>
P6
</value>
</element>
</customfields>
<finishedat>
2018-4-23T09:10:26.000Z
</finishedat>
<location>
北京City海淀District中关村方正国际大厦1001
</location>
<lastcompany>
郑州麦田伙伴科技有限公司
</lastcompany>
<salarynumber>
8000
</salarynumber>
</offer>
<operator>
<email>
liming@example.com
</email>
<name>
李明
</name>
<phone>
18600000001
</phone>
<number>
A001
</number>
</operator>
<phone>
18600000000
</phone>
<referrer>
<email>
11111@mokahr.com
</email>
<name>
杨
</name>
<phone>
18600000001
</phone>
<number>
2019
</number>
</referrer>
<resumeurl>
https://cdn.mokahr.com/55142a64-ab10-4292-ac9e-93af856fa001.doc?OSSAccessKeyId=LTAIoEXIQWCGUAZO&Expires=1505300229&Signature=fiD81pNH8HTUnu1FvhsnjCvjK6Q%3D
</resumeurl>
<source/>
Others
<sourcetype>
1
</sourcetype>
</data>
</root>
Attachment:
System built-in field code mapping table.xlsx
Push interview info
Pushing interview info is currently triggered in Moka by clicking the ‘confirm’ button in adding interview webpage
> Data example:
{
"id":"f353e5ce-17e0-4783-bee4-4a6b734b20fe",
"event":"createInterviewsInfo",
"triggeredAt":1505296287,
"data":{
"applicationIds":[
200006263
],
"interviewType":3,
"createTime":1597391796747,
"creator":{
"id":"200000217",
"name":"张武杰",
"email":"z@mokahr.com",
"phone":"17610230001"
},
"interviews":[
{
"event_id":"12345612",
"applicationIds":[
200006263
],
"roomId":1,
"roomName":"Meeting room A",
"address":{
"id":1524,
"country":"中国",
"cityId":310109,
"address":"XxxCityxx县xx小District"
},
"startTime":1597392000000,
"endTime":1597393800000,
"interviewerIds":[
200000217
],
"interviewee":[
{
"id":200006257,
"name":"zwj5",
"email":"z@mokahr.com",
"phone":"17610230000",
"jobId":"6c465f4b-e791-423f-a053-5e76e04e5f29",
"jobTitle":"java"
}
],
"interviewer":[
{
"id":200000217,
"name":"张武杰",
"email":"z@mokahr.com",
"phone":"17610230000"
}
]
}
]
}
}
Request 'data' structure, as follows:
Field | Type | Description |
---|---|---|
id | array | Unique id |
event | array | Event type createInterviewsInfo:information of creating interview updateInterviewsInfo:information of updating interview deleteInterviewsInfo:information of deleting interview |
triggeredAt | array | Trigger time |
data | object | Interview info |
data.applicationIds | array | Application id |
data.interviewType | integer | Interview type. 1:On-site interview 2:Group interview 3:Phone interview 4:Video interview 5:Sequential interview |
data.createTime | integer | Timestamp |
data.creator | object | Interview creator info |
data.creator.id | string | Interview creator id |
data.creator.name | string | Interview creator name |
data.creator.email | string | Interview creator email |
data.creator.phone | string | Interview creator phone |
data.interviews | array | Interview info |
data.interviews[].event_id | array | Interview unique id |
data.interviews[].applicationIds | array | Application id |
data.interviews[].roundId | integer | Round id |
data.interviews[].roundName | string | Round name |
data.interviews[].roomId | integer | Interview room id |
data.interviews[].roomName | string | Interview room name |
data.interviews[].address | object | Interview location info |
data.interviews[].address.id | integer | Interview location id |
data.interviews[].address.country | string | Interview location - country |
data.interviews[].address.cityId | integer | Interview location - City id |
data.interviews[].address.address | string | Interview location - full address |
data.interviews[].startTime | integer | Interview start time (timestamp) |
data.interviews[].endTime | integer | Interview end time (timestamp) |
data.interviews[].interviewerIds | array | Interviewer id |
data.interviews[].interviewee | array | Candidate info |
data.interviews[].interviewee[].id | integer | Candidate id |
data.interviews[].interviewee[].name | string | Candidate name |
data.interviews[].interviewee[].email | string | Candidate email |
data.interviews[].interviewee[].phone | string | Candidate phone |
data.interviews[].interviewee[].jobId | string | Candidate interview position id |
data.interviews[].interviewee[].jobTitle | string | Candidate interview job title |
data.interviews[].interviewee[].intervieweeUrl | string | Invitation link for Candidate |
data.interviews[].interviewer | array | Interviewer info |
data.interviews[].interviewer[].id | integer | Interviewer id |
data.interviews[].interviewer[].name | string | Interviewer name |
data.interviews[].interviewer[].email | string | Interviewer email |
data.interviews[].interviewer[].phone | string | Interviewer phone |
data.interviews[].interviewer[].interviewerUrl | string | Invitation link for interviewer |
Response body in JSON, as follows
Field | Type | Description |
---|---|---|
code | Integer | Response code,0:Success, not 0 represents failure |
msg | String | Response info |
data | Object | Respond data |
Public API
Upload attachment
Upload attachment interface
Request example
$ https://api.mokahr.com/api-platform/v1/file/upload \
-u 'your_api_key:' \
-X POST \
-H 'Content-Type: multipart/form-data' \
-F 'upload_file=@/path/to/uploads/upload_file.txt'
> Response example
{
"data": {
"key": "xxx"
},
"code": 200,
"msg": ""
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/file/upload
Request body parameter(multipart/form-data)
Field | Required | Type | Description |
---|---|---|---|
upload_file | Yes | file | Upload file |
Response body in JSON, as follows
Field | Type | Description |
---|---|---|
code | string | 200 :Success |
not 200 represents error
msg | string | Interface return value illustration
data | Object | Respond data
data.key | String | Unique key
Obtain switch status
Obtain switch status interface
Request example
$ https://api.mokahr.com/api-platform/v1/public/switchStatus \
-u 'your_api_key:' \
-u 'your-api-key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '{
"type": "",
"belongOrgId": "",
"hireMode": 0
}'
Response example
{
"data": {
"belongOrgId": "vipshophr-test",
"content": "false",
"hireMode": 0,
"orgId": "vipshophr-test",
"type": "send_offer_force_cc",
"version": "1.0"
},
"code": 0,
"msg": ""
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/public/switchStatus
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
type | yes | string | config type Currently, only send is supported_ Offer_ Force_ Cc |
belongOrgId | no | string | The subsidiary ID must be those changes_ Dept_ Company ID with id=0; If not transmitted, the default is to use orgId |
hireMode | no | integer | Recruitment mode (social recruitment 1, school recruitment 2) |
Response body in JSON, as follows
Field | Type | Description |
---|---|---|
code | string | 0 :Success not 0 represents error |
msg | string | Interface return value illustration |
data | Object | Respond data |
data.type | String | Type of query |
data.content | String | Return to content |
data.belongOrgId | String | The subsidiary ID must be those changes_ Dept_ Company ID with id=0; If not transmitted, the default is to use orgId |
data.hireMode | String | Recruitment mode (social recruitment 1, school recruitment 2) |
data.orgId | String | orgid |
Career website API
This API is mainly used to obtain job information on the career website, and to apply to a job.
Get website list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/website/list \
-X GET
> Response example
{
"code": 200,
"msg": "success",
"data": [
{
"id": 29189,
"name": "系统默认社会招聘门户",
"type": "social",
"creator": {
"email": "系统"
}
},
{
"id": 29190,
"name": "系统默认校园招聘门户",
"type": "campus",
"creator": {
"email": "系统"
}
},
{
"id": 29191,
"name": "内部推荐",
"type": "recommend",
"creator": {
"email": "系统"
}
}
]
}
Obtain a list of all career website information created by the company in the career website module
HTTP request
GET https://api.mokahr.com/api-platform/v1/website/list
Request parameterNone
Response body in JSON
Field | Type | Description |
---|---|---|
code | string | 200 :Success not 200 represents error |
msg | string | Interface return value illustration |
data[].id | string | Website id |
data[].name | string | Website name |
data[].type | string | Website type Optional values are: camp :Campus recruitmentsocial :experienced hiresrecommend :Employee referral (by default, it does not distinguish between experienced hires and campus recruitment)recommend_campus :Employee referral in campus recruitmentrecommend_social :Employee referral in experienced hires |
data[].creator | object | Creator info |
data[].creator.id | number | The user id of creator in Moka |
data[].creator.email | string | Creator email |
Get position list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/jobs/moka\?mode\=social \
-X GET
> Response example
{
"total": 10000,
"jobs": [
{
"id": "1234",
"title": "网页设计师",
"status": "open",
"description": "
<div>
<b>
我们Yes谁
</b>
<div>
",
"minSalary": 1000,
"maxSalary": 9000,
"minExperience": 3,
"maxExperience": 5,
"number": 10,
"commitment": " Full-time",
"education": "Bachelor degree",
"closedAt": "2017-10-01T22:00:00.000Z",
"openedAt": "2017-09-01T21:00:00.000Z",
"prior": 1,
"hireMode": 1,
"mjCode": "MJ001",
"finishedAt": "2019-08-23T16:00:00.000Z",
"department": {
"id": 1,
"name": "技术部"
},
"locations": [
{
"id": 1,
"province": "广东",
"city": "深圳City",
"area": "福田District",
"country": "中国",
"address": "车公庙泰然大厦C座22楼"
}
],
"zhineng": {
"id": 1,
"name": "技术类"
},
"customFields": [
{
"id": 1,
"name": "Salary范围",
"value": "100-200",
"type": "string_info"
}
]
}
]
}
Get position list in career website
HTTP request
GET https://api.mokahr.com/api-platform/v1/jobs/{orgId}
Request URL parameter
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | The unique id corresponding to each enterprise customer |
Request query parameter
Field | Required | Type | Description |
---|---|---|---|
mode | Yes | string | Recruitment mode Optional values are: social :experienced hires campus :Campus recruitment |
keyword | No | string | Search keyword |
limit | No | string | Number of entries per page for pagination, default 30 |
offset | No | string | The offset used for paging, the indicated index starts from 0 |
locationIds | No | array | The address id returned by the address list interface, such as [1,2,3] See job address for detailed parameters |
zhinengId | No | number | The address id returned by the function list interface See job function for detailedparameters |
siteId | No | number | Website id |
commitment | No | number | Employment type Optional values are: 1 : Full-time2 : Part-time3 : Internship4 :Others |
updatedFromAt | No | string | The start time of job screening by update time, such as 2020-06-01 |
updatedEndAt | No | string | The end time of job screening by update time, such as 2020-07-01 |
departmentCodes | No | array | Department code list of the current position |
status | No | string | Position status Optional values are: open :openclosed :Closepause :Pause |
Response body in JSON
Field | Type | Description |
---|---|---|
total | integer | Total positions |
jobs[] | array | Position list |
jobs[].id | string | Position id |
jobs[].title | string | Job title |
jobs[].status | string | Position status Optional values are: open :openclosed :Closepause :Pause |
jobs[].description | string | Employment description |
jobs[].mjCode | string | Position No. |
jobs[].minSalary | integer | Salary floor, unit: thousand (K) |
jobs[].maxSalary | integer | Salary ceiling, unit: thousand (K) |
jobs[].minExperience | integer | Minimum working years |
jobs[].maxExperience | integer | Maximum working years |
jobs[].number | integer | No.of vacancy |
jobs[].commitment | string | Employment type Optional values are: 全职 兼职 实习 其他 |
jobs[].education | string | Education requirement |
jobs[].closedAt | string | Position close time. Date format is: ISO8601 |
jobs[].openedAt | string | Start recruitment time. Date format is: ISO8601 |
jobs[].updatedAt | string | Position update time. Date format is: ISO8601 |
jobs[].prior | integer | Whether in urgent hiring,1 为Urgent hiring |
jobs[].hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
jobs[].finishedAt | string | Recruitment goal finish time |
jobs[].isRecommendation | boolean | Whether it is a referral position |
jobs[].department | object | Information about the department where the position is located |
jobs[].department.id | integer | Department id |
jobs[].department.name | string | Department name |
jobs[].locations | array | Workplace |
jobs[].locations[].id | integer | Address id |
jobs[].locations[].province | string | Province |
jobs[].locations[].city | string | City |
jobs[].locations[].area | string | District |
jobs[].locations[].country | string | Country |
jobs[].locations[].address | string | Full address |
jobs[].zhineng | object | Job function info |
jobs[].zhineng.id | integer | Job function id |
jobs[].zhineng.name | string | Job title |
jobs[].customFields | array | Job title custom fields list |
jobs[].customFields[].id | integer | Custom field id |
jobs[].customFields[].name | string | Custom field name |
jobs[].customFields[].type | string | Custom field type Optional value: string_info bool_info |
jobs[].customFields[].value | string | The value of the custom field |
jobs[].jobManager | object | Recruiter (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobs[].jobManager.name | string | Recruiter name |
jobs[].jobManager.email | string | Position leader email |
jobs[].jobManager.phone | string | Recruiter phone |
jobs[].jobManager.employee_id | string | Position leader phone employee No. |
jobs[].jobHrAssistant | object[] | Position assistant (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobs[].jobHrAssistant[].name | string | Position assistant name |
jobs[].jobHrAssistant[].email | string | Position assistant email |
jobs[].jobHrAssistant[].phone | string | Position assistant phone |
jobs[].jobHrAssistant[].employee_id | string | Position assistant employee No. |
jobs[].jobHiringManager | object[] | Hiring manager (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobs[].jobHiringManager[].name | string | Hiring manager name |
jobs[].jobHiringManager[].email | string | Hiring manager email |
jobs[].jobHiringManager[].phone | string | Hiring manager phone |
jobs[].jobHiringManager[].employee_id | string | Hiring manager employee No. |
jobs[].jobInterviewer | object[] | Interviewer (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobs[].jobInterviewer[].name | string | Interviewer name |
jobs[].jobInterviewer[].email | string | Interviewer email |
jobs[].jobInterviewer[].phone | string | Interviewer phone |
jobs[].jobInterviewer[].employee_id | string | Interviewer employee No. |
Q&A
1、Regarding whether the closed recruitment positions are displayed: if the position is closed, if you do not check to cancel the display on the career website, it will also be displayed on the official website, and closedAt is the closing time.
image.png
2、Whether to support deleting positions or displaying deleted positions: No support, it will be completely gone once deleted. If there is candidate data in the recruitment process under this position, it cannot be deleted in the system.
Get a position info
Request example
curl --location --request GET
'https://api-staging-3.mokahr.com/api-platform/v1/jobs/orgid-test/b19c75f0-170'
> Response example
{
"id": "1234",
"title": "网页设计师",
"status": "open",
"description": "
<div>
<b>
我们Yes谁
</b>
<div>
",
"minSalary": 1000,
"maxSalary": 9000,
"minExperience": 3,
"maxExperience": 5,
"number": 10,
"commitment": " Full-time",
"education": "Bachelor degree",
"closedAt": "2017-10-01T22:00:00.000Z",
"openedAt": "2017-09-01T21:00:00.000Z",
"updatedAt": "2017-09-01T21:00:00.000Z",
"hireMode": 1,
"finishedAt": "2019-08-23T16:00:00.000Z",
"department": {
"id": 1,
"name": "技术部"
},
"locations": [
{
"id": 1,
"country": "中国",
"address": "北京City海淀District海淀西大街"
}
],
"zhineng": {
"id": 1,
"name": "技术类"
},
"customFields": [
{
"id": 1,
"name": "Salary范围",
"value": "100-200",
"type": "string_info"
}
]
}
Get all info about a position.
HTTP request
GET https://api.mokahr.com/api-platform/v1/jobs/{orgId}/{jobId}
Request Path parameter
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | The client unique id of each company |
jobId | Yes | string | Position id |
Response
Field | Type | Description |
---|---|---|
id | string | Position id |
title | string | Job title |
status | string | Position status Optional values are: open :openclosed :Close pause :Pause |
description | string | Employment description |
mjCode | string | Position No. |
minSalary | integer | Salary floor, unit: thousand (K) |
maxSalary | integer | Salary ceiling, unit: thousand (K) |
minExperience | integer | Minimum working years |
maxExperience | integer | Maximum working years |
number | integer | No.of vacancy |
commitment | string | Employment type Optional values are: Full-time Part-time Internship Others |
education | string | Education requirement |
closedAt | string | Position close time. Date format is: ISO8601 |
openedAt | string | Start recruitment time. Date format is: ISO8601 |
updatedAt | string | Position update time. Date format is: ISO8601 |
hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
finishedAt | string | Recruitment goal finish time |
isRecommendation | boolean | Whether it is a referral position |
department | object | Information about the department where the position is located |
department.id | integer | Department id |
department.name | string | Department name |
locations | array | Workplace |
locations[].id | integer | Address id |
locations[].province | string | Province |
locations[].city | string | City |
locations[].area | string | District |
locations[].country | string | Country |
locations[].address | string | Full address |
zhineng | object | Job function info |
zhineng.id | integer | Job function id |
zhineng.name | string | Job title |
customFields | array | Job title custom fields list |
customFields[].id | integer | Custom field id |
customFields[].name | string | Custom field name |
customFields[].type | string | Custom field type Optional values are: string_info bool_info |
customFields[].value | string | The value of the custom field |
jobManager | object | Recruiter (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobManager.name | string | Recruiter name |
jobManager.email | string | Position leader email |
jobManager.phone | string | Recruiter phone |
jobManager.employee_id | string | Position leader phone employee No. |
jobHrAssistant | object[] | Position assistant (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobHrAssistant[].name | string | Position assistant name |
jobHrAssistant[].email | string | Position assistant email |
jobHrAssistant[].phone | string | Position assistant phone |
jobHrAssistant[].employee_id | string | Position assistant employee No. |
jobHiringManager | object[] | Hiring manager (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobHiringManager[].name | string | Hiring manager name |
jobHiringManager[].email | string | Hiring manager email |
jobHiringManager[].phone | string | Hiring manager phone |
jobHiringManager[].employee_id | string | Hiring manager employee No. |
jobInterviewer | object[] | Interviewer (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of the person in charge of the official website position interface) |
jobInterviewer[].name | string | Interviewer name |
jobInterviewer[].email | string | Interviewer email |
jobInterviewer[].phone | string | Interviewer phone |
jobInterviewer[].employee_id | string | Interviewer employee No. |
## Apply a position > Request example(json)
$ curl https://api.mokahr.com/api-platform/v1/jobs/moka/1234/apply \
-u 'your-api-key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '
{
"basicInfo":
{
"name": "张三",
"age": 22,
"email": "zhangsan@mokahr.com",
"gender": "Male",
"phone": "18612345678",
"lastCompany": "阿里巴巴",
"lastSpeciality": "计算机",
"academicDegree": "Bachelor degree"
},
"educationInfo":
[
{
"school": "北京大学",
"startDate": "2014-09",
"endDate": "2017-06",
"speciality": "软件工程",
"academicDegree": "Bachelor degree"
}
],
"experienceInfo":
[
{
"company": "百度",
"startDate": "2014-09",
"endDate": "2017-06",
"title": "初级工程师",
"summary": "负责产品功能实现"
}
],
"languageInfo": [
{
"language": "213",
"level": "一般",
"listenAndSpeak": "良好",
"readAndWrite": "熟练"
}
],
"projectInfo":
[
{
"projectName": "项目1",
"startDate": "2017-01",
"endDate": "2017-11",
"projectDescription": "Project function description",
"title": "后端工程师",
"responsibilities": "项目职责"
}
],
"practiceInfo":
[
{
"company": "腾讯",
"title": " Internship工程师",
"startDate": "2017-01",
"endDate": "2017-11",
"summary": "负责简单的功能实现"
}
],
"jobIntention": {
"aimSalary": "7000-13000元/月",
"forwardLocation": "北京"
},
"selfDescription": {
"personal": "人经历丰富,在校担任过部长,主持人以及新生教官. "
},
"customFields": [
{
"id": 1,
"value": "aaa"
"index": 0,
},
{
"id": 2,
"value": "bbb"
}
],
"recommender": {
"email": "zhangsan@mokahr.com",
"name": "张三",
"phone": "18612345678",
"employeeId": "1"
}
}'
> Request example(multipart/form-data)
$ curl https://api.mokahr.com/api-platform/v1/jobs/moka/1234/apply \
-u 'your-api-key:' \
-X POST \
-H 'Content-Type: multipart/form-data' \
-F 'basicInfo={"name": "张三", "age": 20, "gender": "Male", "phone": "18612345678"}' \
-F 'educationInfo=[{"school": "北京大学", "startDate": "2014-01", "endDate": "2017-01", "speciality": "软件工程"}]' \
-F 'experienceInfo=[{"company": "百度", "startDate": "2017-01", "endDate": "2017-01", "title": "工程师"}]' \
-F 'projectInfo=[{"projectName": "项目1", "startDate":"2017-01","endDate":"2017-11","title":"工程师"}]' \
-F 'practiceInfo=[{"company":"腾讯", "title":" Internship工程师", "startDate":"2017-01", "endDate":"2017-11"}]' \
-F 'jobIntention={"aimSalary": "7000-13000/月", forwardLocation: "北京"}' \
-F 'selfDescription={personal: "人经历丰富,在校担任过部长,主持人以及新生教官. "}' \
-F 'customFields=[{"id": "1", "value": "aaa"}, {"id": "2", "value": "bbb"}]' \
-F 'recommender={"email": "zhangsan@mokahr.com","name": "张三","phone":"18612345678","employeeId":"1"}' \
-F 'resume=@/path/to/resume/张三.pdf' \
-F 'attachments=@/path/to/attachments/attach1.txt' \
-F 'attachments=@/path/to/attachments/attach2.txt'
Return information for new applications
This API supports two request formats, namely the multipart/form-data
method and the json
method.
If you need to upload your resume or attachment files, you must use the multipart/form-data
method.
Resume files uploaded using multipart/form-data
will be processed by our resume parsing service.
This API needs to verify the identity information. For the verification method, please refer to Request Verification/Auth
section.
Note: Whether this module field is required depends on the field property settings in the system
> Response example(Part of the fields)
{
"id": 1,
"name": "张三",
"age": 20,
"gender": "Male",
"educationInfo":
[
{
"school": "北京大学",
"startDate": "2014-09",
"endDate": "2017-06",
"speciality": "软件工程",
"academicDegree": "Bachelor degree"
}
],
"experienceInfo":
[
{
"company": "百度",
"startDate": "2014-09",
"endDate": "2017-06",
"title": "初级工程师",
"summary": "负责产品功能实现"
}
],
"projectInfo":
[
{
"projectName": "项目1",
"startDate": "2017-01",
"endDate": "2017-11",
"projectDescription": "Project function description",
"title": "后端工程师",
"responsibilities": "项目职责"
}
]
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/jobs/{orgId}/{jobId}/apply
Request URL parameter
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | The client unique id of each company |
jobId | Yes | string | Position id |
Request query parameter
Field | Required | Type | Description |
---|---|---|---|
isRecommendation | No | integer | Whether it is a referral application Optional values are: 1 :Referral application不传参 :not referral applicationWhen isRecommendation is passed in as 1, the recommender field is mandatory in the body |
isCheckProtect | No | integer | Whether to verify the protection period Optional values are: 1 :and isRecommendation=1, means to verify the protection period`不传参:not to verify the protection period |
recommendationType | No | integer | Introverted official website needs to be used together after splitting Optional values are: 1 :Employee referral of experienced hires2 :Referral in campus recruitment |
siteId | No | integer | Is it the designated official website channel? If not, it is the system’s default official website. If isRecommendation is passed in, this parameter is invalid |
acquisitionMode | No | integer | Apply method Optional values are: 0 :Unknown2 :Import background5 :Talent recommendation8 :Direct recommend9 :Direct apply |
websiteSourceId | No | integer | Source effect, takes effect when siteId is valid |
ownerEmail | No | integer | Owner email of the candidate valid values include Super Administrator, Administrator, and the Assistant and Leader of the position. |
Request body(json)
Field | Required | Type | Description |
---|---|---|---|
basicInfo | Yes | string | Basic information, at least one attribute |
basicInfo.name | No | string | Candidate name |
basicInfo.age | No | integer | Candidate age |
basicInfo.gender | No | string | Candidate gender Optional value 男 女 |
basicInfo.email | No | string | Candidate email |
basicInfo.phone | No | string | Candidate phone |
basicInfo.lastCompany | No | string | Recent company |
basicInfo.lastSpeciality | No | string | Recent graduate major |
basicInfo.academicDegree | No | string | Highest education |
basicInfo.political | No | string | Political status |
educationInfo | No | array | Education experience |
educationInfo[].school | No | string | School |
educationInfo[].startDate | No | string | Start time |
educationInfo[].endDate | No | string | End time |
educationInfo[].speciality | No | string | Major |
educationInfo[].academicDegree | No | string | Education |
experienceInfo | No | array | Work experience |
experienceInfo[].company | No | string | Company name |
experienceInfo[].startDate | No | string | Start time |
experienceInfo[].endDate | No | string | End time |
experienceInfo[].title | No | string | position |
experienceInfo[].summary | No | string | Job responsibility |
languageInfo | No | array | Language skill |
languageInfo[].language | No | string | Language type |
languageInfo[].level | No | string | Proficiency |
languageInfo[].listenAndSpeak | No | string | Listening and speaking |
languageInfo[].readAndWrite | No | string | Reading and writing |
projectInfo | No | array | Project experience |
projectInfo[].projectName | No | string | Project name |
projectInfo[].startDate | No | string | Start time |
projectInfo[].endDate | No | string | End time |
projectInfo[].title | No | string | Job title and duty in project |
projectInfo[].projectDescription | No | string | Project description |
projectInfo[].responsibilities | No | string | Responsibility in project |
practiceInfo | No | array | Intern experience |
practiceInfo[].company | No | string | Company name |
practiceInfo[].title | No | string | Job title |
practiceInfo[].startDate | No | string | Start time |
practiceInfo[].endDate | No | string | End time |
practiceInfo[].summary | No | string | Job responsibility |
jobIntention | No | object | Preferred job |
jobIntention.aimSalary | No | string | Expected salary, unit: thousand (K) |
jobIntention.forwardLocation | No | string | Preferred city |
selfDescription | No | object | Self- description |
selfDescription.personal | No | object | Self-description |
customFields[].id | No | integer | Custom field id |
customFields[].value | No | string | Custom field value |
customFields[].index | No | number | If the current module data is an array and contains custom fields, the value is required and consistent with the array subscript (Note: custom module data is supported) |
recommender.name | No | string | Referrer name |
recommender.email | No | string | Referrer email |
recommender.phone | No | string | Referrer phone |
recommender.employeeId | No | string | Employee No. of referrer |
Request body(multipart/form-data)
Field | Required | Type | Description |
---|---|---|---|
basicInfo | Yes | string | String in json format, the fields are the same as basicInfo in json request mode |
educationInfo | No | string | String in json format, the fields are the same as educationInfo in json request mode |
experienceInfo | No | string | String in json format, the fields are the same as experienceInfo in json request mode |
projectInfo | No | string | String in json format, the fields are the same as projectInfo in json request mode |
practiceInfo | No | string | String in json format, the fields are the same as practiceInfo in json request mode |
languageInfo | No | string | String in json format, the fields are the same as languageInfo in json request mode |
jobIntention | No | string | String in json format, the fields are the same as jobIntention in json request mode |
selfDescription | No | string | String in json format, the fields are the same as selfDescription in json request mode |
recommender | No | string | String in json format, the fields are the same as recommender in json request mode |
customFields | No | string | String in json format, the fields are the same as customFields in json request mode |
resume | No | file | Resume file |
attachments | No | file | Attachment files, up to 10 are supported |
Response(Part of the fields)
Field | Type | Description |
---|---|---|
id | integer | Application id |
CandidateId | integer | Candidate id |
orgId | integer | Tenant id |
stageId | integer | Stage id |
name | name | Candidate name |
age | age | Candidate age |
CandidateId | long | Candidate id |
gender | string | Candidate gender |
countryCallingCode | string | Country calling code |
skill | string | Skill |
recommendReason | string | Recommend reason |
educationInfo | array | Education experience |
educationInfo[].school | string | School |
educationInfo[].startDate | string | Start time |
educationInfo[].endDate | string | End time |
educationInfo[].speciality | string | Major |
educationInfo[].academicDegree | string | Education |
experienceInfo | array | Work experience |
experienceInfo[].company | string | Company name |
experienceInfo[].startDate | string | Start time |
experienceInfo[].endDate | string | End time |
experienceInfo[].title | string | position |
experienceInfo[].summary | string | Job responsibility |
projectInfo | array | Project experience |
projectInfo[].projectName | string | Project name |
projectInfo[].startDate | string | Start time |
projectInfo[].endDate | string | End time |
projectInfo[].title | string | Job title and duty in project |
projectInfo[].projectDescription | string | Project function description |
projectInfo[].responsibilities | string | Responsibility in project |
practiceInfo | array | Intern experience |
Get application status
> Request example
curl --location --request GET 'https://api.mokahr.com/api-platform/v1/applications/33211111' \
--header 'Authorization: Basic aHRuYlJqcGhyRDhzNQ3dUw6'
> Response example
{
"CandidateId": 201170308,
"stageName": "笔试",
"status": "in_progress",
"code": 0,
"msg": "Success",
"success": true
}
Get a application status, including whether to reject, whether he/she is regular employee, whether in process, and the current stage title, etc.
HTTP request
GET https://api.mokahr.com/api-platform/v1/applications/{applicationId}
Request URL parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | Unique id of application |
Response body in JSON
Field | Type | Description |
---|---|---|
status | string | Application status Optional values are: in_progress :In processrejected :Rejected |
hired
:Regular employee
stageName | string | The name of the current stage‘ s stage
CandidateId | integer | The unique id of Candidate in Moka
code | string | 200
:Success
not 200 represents error
msg | string | Interface return value illustration
success | string | true
:Successfalse
: Failure
Deprecated, please use code to judge the call result instead of business logic
Get position address list
> Request example
curl --location --request GET 'https://api.mokahr.com/api-platform/v1/jobs-groupedby-location/orgid-test?mode=social' \
--header 'Authorization: Basic aHRuYlJq*********3J6RWNLd3FWR0Q3dUw6'
> Response example
{
"jobs": [
{
"id": "北京City",
"label": "北京City",
"locationRows": [
{
"id": 445,
"cityId": 110000
},
{
"id": 446,
"cityId": 110105
}
],
"jobCount": 2
},
{
"id": "上海City",
"label": "上海City",
"locationRows": [
{
"id": 398,
"cityId": 310000
}
],
"jobCount": 1
},
{
"id": "Others",
"label": "Others",
"cityId": null,
"locationRows": [
{
"id": 377,
"cityId": null
}
],
"jobCount": 6
},
{
"id": "阿尔巴尼亚",
"label": "阿尔巴尼亚",
"cityId": null,
"locationRows": [
{
"id": 2061,
"cityId": null
}
],
"jobCount": 1
}
]
}
Get position address list. Note: the id for checking position list interface is the same as the id in locationRows. Take Beijing for example since it has multiple work locations, if you want to check positions in Beijing, should pass locationIds: [445,446] to position interface.
HTTP request
GET https://api.mokahr.com/api-platform/v1/jobs-groupedby-location/{orgId}
Request URL parameter
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | Organization id |
Query
Field | Required | Type | Description |
---|---|---|---|
mode | Yes | string | Recruitment modesocial :experienced hirescampus :Campus recruitment |
Response
Response body in JSON
Field | Field type | Description |
---|---|---|
jobs | array | |
jobs.id | string | Province id |
jobs.label | string | Province |
jobs.locationRows | object | |
jobs.locationRows.id | integer | Office location list id |
jobs.locationRows.cityId | integer | City id |
jobs.labelCityId | string | City tag id |
jobs.jobCount | integer | The total positions under this address |
Get a list of job responsibilities
> Request example
curl --location --request GET 'https://api.mokahr.com/api-platform/v1/jobs-groupedby-zhineng/orgid-test?mode=social&siteId=33232323' \
--header 'Authorization: Basic aHRuYlJqcGhyRDhzNWl********FWR0Q3dUw6'
> Response example
{
"jobs": [
{
"id": 2873,
"label": "技术类",
"jobCount": 64
}
]
}
Get a list of job responsibilities
Note:The id in the array can be used to filter the job list interface; using the interface on the right as an example, if you need to query the jobs under the technical category, you need to pass zhinengId:2873
to the job interface
HTTP request
GET https://api.mokahr.com/api-platform/v1/jobs-groupedby-zhineng/{orgId}
Request URL parameter
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | Organization id |
Query
Field | Required | Type | Description |
---|---|---|---|
mode | No | string | Recruitment mode Optional values are: social :experienced hirescampus :Campus recruitment |
siteId | No | number | Website id |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Job responsibilities id |
label | string | Job responsibilities‘ name |
parentId | integer | Parent job responsibilities id |
jobCount | integer | The number of positions for this level and all lower-level job responsibilities |
Career website job application page configuration (no sign-in required)
> Request example
<iframe src="https://app.mokahr.com/apply/test/90#/job/2bc083cf-bf34-45ba-a1a8-d028ed039d2d?pure=1">
</iframe>
The pure version of the official website application form removes the navigation and other moka elements of the candidate application page, and only includes the application form and channel import resume part, which can be embedded in the self-developed official website through iframe.
There is a distinction between PC and mobile. Just add query pure=1
to the url of the original normal application page
Landing page
pc
https://app.mokahr.com/apply/{orgId}/{siteId}#/job/{jobId}/apply?pure=1
Mobile
https://app.mokahr.com/m/apply/{orgId}/{siteId}#/job/{jobId}/select?pure=1
Request URL parameter
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | Organization id |
siteId | No | integer | Multi-official website id after multi-official website is enabled, none can be omitted For example, one of the multi-official website links is https://app.mokahr.com/apply/test/56 , and the siteId is the last 56. This link can be obtained from the career website link managed by the official website in the system. |
jobId | Yes | string | Position id |
Note Campus recruitment positions need to replace apply
in pathname with campus_apply
for example:
PC
https://app.mokahr.com/campus_apply/{orgId}/{siteId}#/job/{jobId}/apply?pure=1
Mobile
https://app.mokahr.com/m/campus_apply/{orgId}/{siteId}#/job/{jobId}/select?pure=1
Obtain Source Effect Information of Specified Official Website
> Request example
$ curl --location --request GET 'https://api.mokahr.com/api-platform/v1/website/website-soure' \
--header 'Authorization: Basic aHRuYlJqcGhyRDhzNWl********FWR0Q3dUw6'
--header 'Content-Type: application/json' \
--data-raw '{
"siteId":1222
}'
> Response example
{
"code": 200,
"msg": "success",
"data": {
"total": 560,
"version": "1.0",
"websiteSourceInfoDTOList": [
{
"id": 3,
"isPreach": true,
"name": "Presentation Meeting 1",
"shortUrl": "https://app.mokahr.com/su/aaaaa",
"version": "1.0"
},
{
"id": 5,
"isPreach": false,
"name": "Source Effect of Official Website 1",
"shortUrl": "https://app.mokahr.com/su/bbbbb",
"version": "1.0"
}
]
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/website/website-soure
Request body(json)
Field | Required | Type | Description |
---|---|---|---|
siteId | Yes | number | siteId |
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | code |
message | string | message |
data | object | |
data.total | number | total count |
data.websiteSourceInfoDTOList | array | Source Effect Information |
data.websiteSourceInfoDTOList[].id | number | Source Effect Information id |
data.websiteSourceInfoDTOList[].isPreach | boolean | Whether it is a presentation meeting, true: presentation meeting, false: not a presentation meeting |
data.websiteSourceInfoDTOList[].name | string | Source Effect Information name |
data.websiteSourceInfoDTOList[].shortUrl | string | short url |
Company info API
Get company location list
Get the info of company location list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/locations \
-u 'your-api_key:' \
-X GET
> Response example
[
{
"id": 15,
"country": "中国",
"province": "上海City",
"city": null,
"area": null,
"address": "人民广场",
"map": {
"locPoint": {
"lng": 121.487899,
"lat": 31.249162
},
"center": {
"lng": 121.492498,
"lat": 31.245087
}
}
}
]
HTTP request
GET https://api.mokahr.com/api-platform/v1/locations
Request parameter
None
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Location id |
country | string | Country |
province | string | Province |
city | string | City |
area | string | Region |
address | string | Detailed location |
map | object | Map info |
map.locpoint | object | Map marker coordinate |
map.locpoint.lng | number | Map marker longitude, Amap coordinate system |
map.locpoint.lat | number | Map marker latitude, Amap coordinate system |
map.center | object | The center coordinate of the map slice |
map.center.lng | number | Map center longitude, Amap coordinate system |
map.center.lat | number | Map center latitude, Amap coordinate system |
Add company address(bulk)
Add company address in bulk
Add company address through addressCode
addressCode exists:skip and error
addressCode doesn't exist:add
The department does not support lower-level linkage
> Request example
$ curl --location --request POST 'https://api.mokahr.com/api-platform/locations/v2/batch_create_locations' \
--header 'Content-Type: application/json' \
--header 'Authorization: ' \
--data-raw '{
"locations": [
{
"addressCode": "114514",
"cityId": 110105,
"address": "测试address",
"lat": 22.627981,
"lng": 114.115447
}
]
}'
> Response example
{
"code":0,
"message":"",
"data":[{
"message":"",
"addressCode":"",
"addressId":"",
"succeed":true
}]
}
HTTP request
POST https://api.mokahr.com/api-platform/locations/v2/batch_create_locations
Request body(json)
Field | Required | Type | Description |
---|---|---|---|
locations | Yes | array | Company address information |
locations[].addressCode | Yes | string | The unique id of the company address in the external system |
locations[].cityId | Yes | integer | The administrative district code of the area where you are located, see http://www.mokahr.com/docs/api/#district-code for details |
locations[].address | No | string | Full address |
locations[].lat | No | double | Longitude(AutoNavi Maps) |
locations[].lng | No | double | Latitude(AutoNavi Maps) |
locations[].departmentIds[] | No | array[integer] | Department info in Moka system The department unique id in Moka When both departmentId and departmentCode are passed, departmentId When neither departmentId nor departmentCode is passed, it defaults to all departments |
locations[].departmentCodes[] | No | array[string] | Department info of external system |
The department unique id in external system (enable sync-organization)
When both departmentId and departmentCode are passed, departmentId
When neither departmentId nor departmentCode is passed, it defaults to all departments
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Error code, not 0 represents failure |
message | string | Error description |
data | array | |
data[].message | string | Error description |
data[].addressCode | string | The unique id of the company address in the external system |
data[].addressId | string | The unique id of company address in Moka |
data[].succeed | boolean | whether it is successful Optional values are: true :Success<br/false : Failure |
Delete company address(bulk)
Delete company address(bulk)
Delete company address through addressCode
addressCode exists:delete
addressCode doesn't exist:skip and error
> Request example
$ curl --location --request POST 'https://api.mokahr.com/api-platform/locations/v2/batch_delete_locations' \
--header 'Content-Type: application/json' \
--header 'Authorization: ' \
--data-raw '{
"locations": [
{
"addressCode": "114514"
}
]
}'
> Response example
{
"code":0,
"message":"",
"data":[{
"message":"",
"addressCode":"",
"succeed":true
}]
}
HTTP request
POST https://api.mokahr.com/api-platform/locations/v2/batch_delete_locations
Request body(json)
Field | Required | Type | Description |
---|---|---|---|
locations | Yes | array | Company address information |
locations[].addressCode | Yes | string | The unique id of the company address in the external system |
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Error code, not 0 represents failure |
message | string | Error description |
data | array | |
data[].message | string | Error description |
data[].addressCode | string | The unique id of the company address in the external system |
data[].succeed | boolean | whether it is successful Optional values are: true :Successfalse : Failure |
Update company address(bulk)
Update company address(bulk)
Update company address through addressCode
addressCode exists:update
addressCode doesn't exist:skip and error
The department does not support lower-level linkage
> Request example
$ curl --location --request POST 'https://api.mokahr.com/api-platform/locations/v2/batch_update_locations' \
--header 'Content-Type: application/json' \
--header 'Authorization: ' \
--data-raw '{
"locations": [
{
"addressCode": "114514",
"cityId": 110105,
"address": "测试address",
"lat": 22.627981,
"lng": 114.115447
}
]
}'
> Response example
{
"code":0,
"message":"",
"data":[{
"message":"",
"addressCode":"",
"addressId":"",
"succeed":true
}]
}
HTTP request
POST https://api.mokahr.com/api-platform/locations/v2/batch_update_locations
Request body(json)
Field | Required | Type | Description |
---|---|---|---|
locations | Yes | array | Company address information |
locations[].addressCode | Yes | string | The unique id of the company address in the external system |
locations[].cityId | Yes | integer | The administrative district code of the area where you are located See http://www.mokahr.com/docs/api/#district-code for details |
locations[].address | No | string | Full address |
locations[].lat | No | double | Longitude(AutoNavi Maps) |
locations[].lng | No | double | Latitude(AutoNavi Maps) |
locations[].departmentIds[] | No | array[integer] | Department info in Moka system The department unique id in Moka When both departmentId and departmentCode are passed, departmentId When neither departmentId nor departmentCode is passed, it defaults to all departments |
locations[].departmentCodes[] | No | array[string] | Department info of external system The department unique id in external system (enable sync-organization) When both departmentId and departmentCode are passed, departmentId When neither departmentId nor departmentCode is passed, it defaults to all departments |
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Error code, not 0 represents failure |
message | string | Error description |
data | array | |
data[].message | string | Error description |
data[].addressCode | string | The unique id of the company address in the external system |
data[].succeed | boolean | whether it is successful Optional values are: true :Successfalse : Failure |
Get company address(bulk)
Get company location in bulk
(1)V1 Title update:“Get company location list” replaced to “Get company address”
(2)Add “Get company address” V2 interface
Check the corresponding type of company address through addressType
Return if there is
Skip and error if not
> Request example
$ curl --location --request POST 'https://api.mokahr.com/api-platform/locations/v2/get_location_list' \
--header 'Content-Type: application/json' \
--header 'Authorization: ' \
--data-raw '{
"addressType": 0
}'
> Response example
{
"code":0,
"message":"",
"data":[{
"addressId":"",
"addressCode":"",
"country":"",
"province":"",
"city":"",
"district":"",
"address":"",
"map":{},
"departments":[
{
"departmentName":"",
"departmentId":"",
"departmentCode":""
}
]
}]
}
HTTP request
POST https://api.mokahr.com/api-platform/locations/v2/get_location_list
Request body(json)
Field | Required | Type | Description |
---|---|---|---|
addressType | Yes | integer | Company address type,Required Optional values are: 0 :Company address created synchronously by API1 :Company address created in the system2 :All company addresses (API synchronization and system creation) |
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Error code, not 0 represents failure |
message | string | Error description |
data | array | |
data[].addressId | string | The unique id of company address in Moka |
data[].addressCode | string | The unique id of the company address in the external system Empty means that the address is created in the Moka system |
data[].country | string | Country |
data[].province | string | Province |
data[].city | string | City |
data[].district | string | Province |
data[].address | string | Detailed address of company |
data[].map | object | object |
data[].departments[].departmentName | string | The department name that related to company address |
data[].departments[].departmentId | string | The department unique id in Moka |
data[].departments[].departmentCode | string | The department unique id in external system (enable sync-organization) |
Store API
Get store list
Get store list
> Request example
$ curl 'https://api.mokahr.com/api-platform/v1/get_stores' \
-u 'your_api_key:' \
-X POST \
-d '{
"apiCodes": ["111111","22222"],
"pageNum": 1,
"pageSize": 20,
"disabled": 0
}'
> Request data example:
{
"data": [
{
"id": 1,
"name": "门店1通恒大厦",
"lat": 39.980769,
"lng": 116.373172,
"locationId": 5,
"departmentId": 9,
"apiCode": "1111",
"createdAt": "2019-12-03T07:12:36.000Z",
"disabled": 0,
"country": "中国",
"cityId": 110108,
"address": "通恒大厦",
"mapJson": "{\"locPoint\":{\"lng\":116.373172,\"lat\":39.980769},\"center\":{\"lng\":116.373172,\"lat\":39.980769},\"zoom\":14}",
"jobNumber": 0
},
{
"id": 2,
"name": "门店2翠微",
"lat": 39.982824,
"lng": 116.372663,
"locationId": 6,
"departmentId": 0,
"apiCode": "",
"createdAt": "2019-12-03T07:12:36.000Z",
"disabled": 0,
"country": "中国",
"cityId": 110108,
"address": "海淀翠微",
"mapJson": "{\"locPoint\":{\"lng\":116.372663,\"lat\":39.982824},\"center\":{\"lng\":116.370759,\"lat\":39.983045},\"zoom\":16}",
"jobNumber": 0
}
]
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/get_stores
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
apiCodes | No | Array[string] | The store unique code saved by the customer |
pageNum | No | number | Page, default 1 |
pageSize | No | number | numbers per page, default 20, maximum 20 |
disabled | No | number | The enable status of store Optional values are: 0 :Enabled atore1 : Disabled store |
Response data in JSON
data is an array of stores, sorted by store creation time from early to late. The data structure for each of these is:
Field | Type | Description |
---|---|---|
data | array | |
id | number | Store id iis the unique code of store in Moka |
name | string | Store name |
lat | number | Store latitude, Amap coordinate system |
lng | number | Store longitude, Amap coordinate system |
locationId | number | Location id |
departmentId | number | The department id that related to store |
cityId | string | The administrative area code of the store, Details on http://www.mokahr.com/docs/api/#district-code |
apiCode | string | The store unique id saved by client |
address | string | Store address |
disabled | number | The enable status of store Optional values are: 0 :Enabled store 1 : Disabled store |
createdAt | string | The store created time in ISO8601 format |
jobNumber | number | Positions under this store |
mapJson | json | Deprecated |
Note that if the field is empty, the content will be an empty string
Sync-store
The Moka system will synchronize the stores in the current system according to the information of each store in the requested list (Add, Update, Disable, Enable).
HTTP request
PUT https://api.mokahr.com/api-platform/v1/stores
> Request example
$ curl 'https://api.mokahr.com/api-platform/v1/stores' \
-u 'your_api_key:' \
-X PUT \
-d '[
{
"apiCode": "111111",
"name": "北京海淀District门店",
"lat": 39.985043,
"lng": 116.293914,
"address": "北京海淀District花园路x号",
"cityId": 110108,
"departmentName": "北京海淀District门店组织"
},
{
"apiCode": "222222",
"name": "北京朝阳District门店",
"lat": 22.627981,
"lng": 114.115447,
"address": "北京City朝阳District麦子店街道枣营北里社District",
"cityId": 110105,
"departmentName": "北京朝阳District门店组织"
},
...
]'
> OperationSuccess:
{
"success": true,
"result": {
"new": 20,
"update": 10,
"disabled": 0
}
}
> Operation Failure:
{
"success": false,
"errorMessage": "Error info ",
"errors": [
{}
]
}
> unopened store error
{
"success": false,
"errorMessage": "未开启门店功能"
}
> validationError:
{
"success": false,
"errorMessage": "Validation Failed",
"errors": [
{
"field": "apiCode",
"code": "duplicated",
"details": "123456"
},
{
"field": "name",
"code": "duplicated",
"details": "北京朝阳District门店1"
},
{
"field": "cityId",
"code": "invalid",
"details": {
"cityId": "999999",
"apiCode": "123456",
"name": "北京朝阳District门店1",
"lat": 22.627981,
"lng": 114.115447,
"address": "北京朝阳District",
"departmentName": "朝阳Department"
},
"document_url": "http://www.mokahr.com/docs/api/#stores"
},
{
"field": "name,cityId",
"code": "missing_field",
"details": {
"apiCode": "111111",
"lat": 24.775118681,
"lng": "115.49405445",
"address": "海淀District花园路4号"
}
}
]
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
apiCode | Yes | string | The unique id of the store |
name | Yes | string | Store name |
address | Yes | string | Store address (including addresses in provinces and cities) |
cityId | No | number | The administrative area code of the store,Details on http://www.mokahr.com/docs/api/#district-code |
lat | No | number | Store coordinates latitude (Gaode map system) |
lng | No | number | Store coordinates longitude (Gaode map system) |
relationDepartmentType | No | boolean | Optional values are:true :Match the department according to the department codefalse :Match departments by department name |
departmentCode | No | string | Department code (If relationDepartmentType is true, the departmentCode field will be used to match the department) |
departmentName | No | string | Department name (RelationDepartmentType is not passed, or relationDepartmentType is false, and then departmentName is passed at the same time, use departmentName to match) |
disabled | No | number | The enable status of store Optional values are: 0 :Enabled store1 :Disabled store |
处理
We will verify the data field, and if the verification fails, a specific error message will be returned:
Verifying field:['name', 'apiCode', 'cityId', 'address']
Possible error code:
code | Description |
---|---|
duplicated | Duplicated info |
invalid | Incorrect data, for example, uploading an unsupported city id |
missing_field | The field is missing, or the field value is null |
Adjust store permission
> Request example
$ curl 'https://api.mokahr.com/api-platform/v1/store/changeJobManagerOrAssistantByStore' \
-u 'your_api_key:' \
-X POST \
-d '{
"operation" : "add",
"dataType" : 1,
"userData" : "jinhaiyang@mokahr.com",
"managerType" : 30,
"apiCode":"10086",
"orgId" : "livingsimple"
}'
> The successful example of response data:
{
"code": 200,
"msg": "success",
"data": {}
}
> The fail example of response data:
{
"code": 12714002,
"msg": "Error info :Unsupported IC type"
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/store/changeJobManagerOrAssistantByStore
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
orgId | No | string | Company id |
operation | Yes | string | Operation add :Add a user permission to the corresponding position in that store remove :Remove a user permission to the corresponding position in that store |
dataType | Yes | number | Type of userData1 :Email2 : Phone number3 :Employee No. |
userData | Yes | string | User marker, email/ phone number/ Employee No. |
managerType | No | number | !!!Note: at least one of managerType and additionalRoles is required IC type 30 :Represents the recruiter under the store25 :Represents the position assistant under the store additionalRoles |
apiCode | Yes | string | The unique id of the store |
Response data in JSON
code为200
ResponseSuccess,Other Failure
codeError code, as follows:
code | Description |
---|---|
12714000 | Unsupported operation type |
12714001 | Unsupported user data type |
12714002 | Unsupported IC type |
12714003 | Duplicated user information, exist multi-users |
12714004 | Duplicated API code, exist multi-stores |
12714005 | User role permissions cannot be lower than HR |
12714006 | The store not found |
12714007 | Please open sync-store |
12714008 | The user not found |
12714009 | No position can be operated in the current store |
12714010 | Unable to add the person in charge of the position as an assistant |
12714011 | The user has been banned |
12714012 | Unable to remove the permission of person in charge |
12714013 | Unable to support conglomerate client |
12714014 | Unsupported additional role types: entry only supports job interviewers and hiring managers |
12714015 | There are more than two additional role types: there are at most two types of input parameters |
12714016 | The additional role type is duplicated, please check the additionalRoles parameter: the input parameter only supports job interviewers, and the hiring manager should not be repeated |
12714017 | The user role needs to be interviewer and above:When setting the user as an interviewer or hiring manager, the user needs to be an interviewer and above |
12714018 | No role specified: Select at least one of the person in charge role type and additional role type |
Organization structure API
Organization structure API
Full synchronization of organization structure
The Moka system will synchronize the department in the current system according to the requested list (add, update, and delete).
Synchronization takes department_code as the primary key, and compares it with department_code in the system:
1、The current system does not have it, but it does exist during synchronization: add a department
2、The current system has it, and it exists during synchronization: Update the existing department information. For example, if there is during synchronization, the current system department status is marked as deleted, and after Update, the status changes to normal.
3、If it exists in the current system, but not exists during synchronization: the department marking has been deleted, and you need to manually enter the Moka system to merge the department into others department for deletion.
HTTP request
PUT https://api.mokahr.com/api-platform/v2/departments
> Request example
$ curl 'https://api.mokahr.com/api-platform/v2/departments' \
-u 'your_api-keys:' \
-X PUT \
-d '{
"departments": [
{ "departmentCode": "ididid1", "name": "namenamename1", "parentCode": "ididid1", "sequence": 0 },
{ "departmentCode": "ididid2", "name": "namenamename2", "parentCode": "ididid2" },
{ "departmentCode": "ididid2", "name": "namenamename2", "parentCode": "ididid2", "type": 2 },
{ "departmentCode": "ididid3", "name": "namenamename3", "parentCode": ”0“}
]
}'
> OperationSuccess
{
"code": 0,
"msg": "success",
"data":{
"result": {
"new": 0,
"delete": 0,
"update": 0
}
}
}
> Operation Failure
{
"code": -1,
"msg": "false",
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
departments | Yes | array | Department data |
departments[].name | Yes | string | Department name |
departments[].departmentCode | Yes | string | Department id in client system |
departments[].parentCode | Yes | string | The unique id of parent department, such as pass "0" to tier-1 department |
departments[].type | No | number | Department type:1 : General department (default)2 : Store department |
departments[].sequence | No | number | Specify the department sorting, support 0 to 10000 with two decimal places, if it is empty, it will be sorted at the end by default. Sort from small to large, creation time from first to last |
Response json field
Field | Type | Description |
---|---|---|
code | number | 200 : Success. Others: Error |
msg | string | The error reason of operation failed |
Possible error info
errorMessage | Description |
---|---|
Duplicated department id | There is repeated department_code in request list |
Duplicated department | There is same parent department and name in request list |
Parent department not found | The department's parent department not found in the list |
The department's parent department cannot directly (indirectly) be itself | The department's parent department (the parent department of...) cannot be itself |
... |
Add organization structure
Add organization structure Note: Incremental synchronization of organizational structure must use POST request. If PUT request is used, it is full synchronization. Departments not provided in the request will be marked as deleted.
HTTP request
POST https://api.mokahr.com/api-platform/v2/departments/sync/incremental
>Request example
$ curl 'https://api.mokahr.com/api-platform/v2/departments/sync/incremental' \
-u 'your_api-keys:' \
-X POST \
-d '{
"departments": [
{ "departmentCode": "ididid1", "name": "namenamename1", "parentCode": "ididid1", "sequence": 0 },
{ "departmentCode": "ididid2", "name": "namenamename2", "parentCode": "ididid2" },
{ "departmentCode": "ididid2", "name": "namenamename2", "parentCode": "ididid2", "type": 2 },
{ "departmentCode": "ididid3", "name": "namenamename3", "parentCode": ”0“}
]
}'
>OperationSuccess
{
"code": 0,
"msg": "success",
}
>Operation Failure
{
"code": -1,
"msg": "false",
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
departments | Yes | array | Department data |
departments[].name | Yes | string | Department name |
departments[].departmentCode | Yes | string | Department id in client system |
departments[].parentCode | Yes | string | The unique id of parent department, such as pass "0" to tier-1 department |
departments[].type | No | number | Department type:1 : General department (default)2 :Store department |
departments[].sequence | No | number | Specify the department sorting, support 0 to 10000 with two decimal places, if it is empty, it will be sorted at the end by default. Sort from small to large, creation time from first to last |
ResponseField
Field | Type | Description |
---|---|---|
code | number | 200: Success. Others: Error |
msg | string | The error reason of operation failed |
Possible error info
errorMessage | Description |
---|---|
There are currently unprocessed organizational updates, please try again later | |
Department name: XXX, the department code of XXX is duplicate | Duplicate department data exists in the request list or duplicates exist in the request list for departments that have been synchronized to the system. |
Parent department not found | The department's parent department not found in the list |
The department's parent department cannot directly (indirectly) be itself | The department's parent department (the parent department of...) cannot be itself |
Department name XXX, the department name of parent code XXX has been existed. | Same department name in a certain department |
... |
Update organization structure
Update organization structure information for designated departments Note: Use departmentCode as the primary key to update. If you need to update departmentCode, you need to pass in departmentId, and departmentCode will be updated with departmentId as the primary key.
HTTP request
POST https://api.mokahr.com/api-platform/v2/departments
>Request example
curl 'https://api.mokahr.com/api-platform/v2/departments' \
-X POST \
-u 'your_api_keys' \
-d '{
"departments": [
{
"departmentCode": "ididid111123",
"name": "namenamename1221",
"parentCode": null,
"sequence": 0
},
{
"departmentCode": "ididid211123",
"name": "namenamename21_testhema",
"parentCode": "ididid31112"
},
{
"departmentCode": "ididid311123",
"name": "namenamename222test_hema",
"parentCode": "ididid111123",
"type": 2,
"departmentId": 387
},
{
"departmentCode": "ididid3",
"name": "namenamename3",
"parentCode": ”0“
}
]
}'
>OperationSuccess
{
"code": 0,
"msg": "success",
}
>Operation Failure
{
"code": -1,
"msg": "false",
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
departments | Yes | array | Department data |
departments[].name | Yes | string | Department name |
departments[].departmentCode | Yes | string | Department id in client system |
departments[].parentCode | Yes | string | The unique id of parent department, such as pass "0" to tier-1 department |
departments[].type | No | number | Department type: 1 : General department (default) 2 :Store department |
departments[].departmentId | No | number | The department id in the Moka system. When this parameter exists, the department with this parameter will be matched first. |
departments[].sequence | No | number | Specify the department sorting, support 0 to 10000 with two decimal places, if it is empty, it will be sorted at the end by default. Sort from small to large, creation time from first to last |
Response field in JSON
Field | Type | Description |
---|---|---|
code | number | 200 : Success. Others: Error |
msg | string | The error reason of operation failed |
Possible error info
errorMessage | Description |
---|---|
There are currently unprocessed organizational updates, please try again later | |
Department name: XXX, the department code of XXX is duplicate | Duplicate department data exists in the request list or duplicates exist in the request list for departments that have been synchronized to the system. |
Parent department not found | The department's parent department not found in the list |
The department's parent department cannot directly (indirectly) be itself | The department's parent department (the parent department of...) cannot be itself |
Department name XXX, the department name of parent code XXX has been existed. | Same department name in a certain department |
... |
Delete and merge organization structure
Provide department add delete flag (deleted department is not merged into another department) and delete department (delete department and merge deleted department into other department
1、Change the status of the department to delete: If the target_department_code is not passed, the department is only marked as "deleted" and actually needs to be deleted in the system;
2、Delete department: If target_department_code is passed in, the department data will be merged into the department corresponding to target_department_code, and the original department data will be deleted.
HTTP request
DELETE https://api.mokahr.com/api-platform/v1/departments
>Request example
curl 'https://api.mokahr.com/api-platform/v1/departments' \
-u 'your_api_keys' \
-X DELETE \
-d '
{
"departments": [
{
"department_code": "EN0100321",
"target_department_code": "EN0100322"
},
{
"department_code": "EN0100323"
}
],
"email": "test@test.com"
}'
>OperationSuccess
{
"code": 0,
"msg": "Success",
"success": true,
"errorMessage": "",
"data": {}
}
>Operation Failure
{
"code": 625011,
"msg": "department_code(3213232888)在系统中已存在",
"success": false,
"errorMessage": "department_code(323232888)在系统中已存在",
"data": {}
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
departments[] | Yes | array | Department info |
departments[].department_code | Yes | string | Department id in client system |
departments[].target_department_code | No | string | The unique code of targeted department |
Yes | string | Email has been registered in Moka |
Response field in JSON
Field | Type | Description |
---|---|---|
success | boolean | Whether the operation is successful |
errorMessage | string | The error reason of operation failed |
Possible error info
errorMessage | Description |
---|---|
There are currently unprocessed organizational updates, please try again later | |
Parent department not found | After deleting or merging departments, the parent department of a department cannot be found |
The department's parent department cannot directly (indirectly) be itself | The department's parent department (the parent department of...) cannot be itself after deletion |
Department name XXX, the department name of parent code XXX has been existed. | Same department name in a certain department |
There is no email of user XXX in system | None |
department_code: XXX doesn't exit in system | None |
Get the full organizational structure
Can get the full organization info
HTTP request
GET https://api.mokahr.com/api-platform/v1/departments
> Request example
$ curl 'https://api.mokahr.com/api-platform/v1/departments' \
-u 'your_api_key:' \
-X GET \
> OperationSuccess
{ "success": true,
"departments": [
{
"name": "大数据部",
"type": 2,
"departmentId": 353,
"departmentCode": "big_data"
},
{
"name": "新媒体营销团队",
"type": 1,
"departmentId": 363,
"parentCode": "big_data",
"departmentCode": "new_media_marketing"
}
]
}
> Operation Failure
{
"success": false,
"errorMessage": "Error info "
}
Request parameter
None
ResponseField
Field | Type | Description |
---|---|---|
success | boolean | true :Successfalse : Failure |
errorMessage | string | Error info |
departments | array | Organization info |
departments.name | string | Department name |
departments.departmentId | number | Department id in Moka |
departments.departmentCode | string | Department id in client system |
departments.parentCode | string | The unique id of the department's parent department, if it is null, it is the first-level department |
departments.deletedByApi | number | Whether to delete Optional values are: 0 : Not deleted1 :Identifies as deleted |
departments.type | number | Department type: Optional values are: 1 : General department (default)2 :Store department |
Job titleAPI
Job title API
Sync job title
Moka will sync job title according to the request list (add, update, delete) Synchronization takes positionCode as the primary key, and compares it with positionCode of department in the system: 1、The current system does not have it, but it does exist during synchronization: add a job title 2、The current system has it, and it exists during synchronization: Update the existing job title information. For example, if there is during synchronization, the current system job title status is marked as deleted, and after update, the status changes to normal. 3、If it exists in the current system, but not exists during synchronization: the department marking has been deleted, and you need to manually enter the Moka system to merge the department into others department for deletion. Synchronization takes positionCode as the primary key, and compares it with positionCode of department in the system:
HTTP request
POST https://api.mokahr.com/api-platform/v1/positions/syncInfo
> Request example
$ curl 'https://api.mokahr.com/api-platform/v1/positions/syncInfo' \
-u 'your_api_key:' \
-X POST \
-d '{
"data": [
{
"name": "1234",
"positionCode": "s1234567890123456789012345678901234567890123456789",
"enable": true,
"departmentCodes":[411,"dd"],
"departmentIds": [411],
"allDepartments": true
},
{
"name": "1234567",
"positionCode": "s111",
"enable": true,
"departmentCodes":[411,"dd"],
"departmentIds":[411],
"allDepartments": false
}
]
}'
> Operation result
{
"code": 200,
"msg": "success",
"data": {
"addCount": 0,
"errorList": [
{
"code": {
"explain": "Job title已存在",
"name": "626005"
},
"data": {
"allDepartments": true,
"departmentCodes": [
"411",
"dd"
],
"departmentIds": [
411
],
"enable": true,
"name": "1234",
"positionCode": "s1234567890123456789012345678901234567890123456789"
}
},
{
"code": {
"explain": "Job title已存在",
"name": "626005"
},
"data": {
"allDepartments": false,
"departmentCodes": [
"411",
"dd"
],
"departmentIds": [
411
],
"enable": true,
"name": "1234567",
"positionCode": "s111"
}
}
],
"updateCount": 0
}
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
data | Yes | array | Job title array |
data[].name | Yes | string | Job title |
data[].positionCode | Yes | string | Job title code, the unique identification code, which is used in syncing organization structure, and pass related job title. |
data[].enable | Yes | boolean | Whether to enable job title Optional values are: true :Enablefalse :Disable |
data[].departmentCodes | No | array | Associated department code list, optional, associated in the organizational structure. Matching priority is lower than departmentIds |
data[].departmentIds | No | array | A list of associated department ids, optional, associated in the organizational structure; can be queried through the "Get full organizational structure" interface. Matching priority is greater than departmentCodes |
data[].allDepartments | No | boolean | Whether the job title is related to all departments Optional values are: true :This position is associated with all departments, departmentIds and departmentCodes are invalidfalse :When false, associate the departments corresponding to departmentIds or departmentCodes. |
ResponseField
Field | Type | Description |
---|---|---|
code | number | Returned code: 200 is normal, others are errors |
msg | string | The description of response status |
data | array | response data |
data[].addCount | number | Add job title |
data[].updateCount | number | Update job title |
data[].errorList | array | Sync failed data |
data[].errorList[].positionCode | string | Sync failed job title code |
data[].errorList[].name | string | Sync failed job title name |
data[].errorList[].msg | string | The reason of sync job title failed |
Department binding job title members interface
Binding job title and its member for designated department
HTTP request
POST https://api.mokahr.com/api-platform/v1/position/departmentUser
>Request example
curl 'https://api.mokahr.com/api-platform/v1/position/departmentUser' \
-u 'your_api_keys' \
-X DELETE \
-d '
{
"data": [
{
"departmentId": 410937821,
"departmentCode": "98291011",
"positionUsers": {
"Aa00cebb6d839465880cc8aba7086f02d": [
"375645587@qq.com"
]
},
"userUniqueType": "email"
}
]
}'
>OperationSuccess
{
"code": 200,
"msg": "success",
"data": {
"addCount": 0,
"errorList": [],
"updateCount": 1
}
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
data | Yes | array | |
data[].departmentId | No | number | Department id bound to job title,must fill one from departmentId and departmentCode, if both are passed, the departmentId shall prevail |
data[].departmentCode | No | string | Department id bound to job title id in client system,must fill one from departmentId and departmentCode,,if both are passed, the departmentId shall prevail |
data[].userUniqueType | Yes | string | Specifies a unique token for the associated account Optional values are择Value: email :Email phone : Phone numbernumber :Employee No. |
data[].positionUsers | Yes | object | Job title and its memberskey :Required,pass job title corresponded positionCodevale :Pass member's info according to userUniqueTypeType |
Response field in JSON
Field | Type | Description |
---|---|---|
code | number | 200 :Successnot 200 represents error |
msg | string | The error reason of operation fail or successful notification |
data | object | |
data.addCount | number | The number of successfully added |
data.updateCount | number | The number of successfully updated |
data.errorList | array | The account of operation Failure and its reason |
Query department responsibilities and corresponding binding personnel
The interface allows you to query the department's assigned responsibilities and the corresponding personnel.
> Request example
$ curl --location 'https://api.mokahr.com/api-platform/v1/dept_position_user/search' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Rk55eXA5MkxsTkQya1pQeEV0VU1wNlNheEJqWFJ2eXE6' \
--data '{
"departmentCode":["12348","12349"]
}'
> Response example
{
"code": 0,
"codeType": 0,
"data": [
{
"departmentCode": "12348",
"positionCode": "A06cd633c55d2434597cb1b87075da89e",
"positionName": "职责2"
},
{
"departmentCode": "12348",
"positionCode": "A653b8b1d14b9422ea1b94353d86f2efd",
"positionName": "职责3"
},
{
"departmentCode": "12349",
"positionCode": "A06cd633c55d2434597cb1b87075da89e",
"positionName": "职责2",
"user": {
"email": "grttest15@mokahr.com",
"phone": "",
"userName": "grtTest",
"userNumber": "10000001"
}
},
{
"departmentCode": "12349",
"positionCode": "A653b8b1d14b9422ea1b94353d86f2efd",
"positionName": "职责3",
"user": {
"email": "grttest15@mokahr.com",
"phone": "",
"userName": "grtTest",
"userNumber": "10000001"
}
},
{
"departmentCode": "12349",
"positionCode": "Aec46c5605ee24d58b66cd12852cf6d6a",
"positionName": "新增测试",
"user": {
"email": "grttest15@mokahr.com",
"phone": "",
"userName": "grtTest",
"userNumber": "10000001"
}
},
{
"departmentCode": "12349",
"positionCode": "Aa8e819ce80d6426bb1e030627becd344",
"positionName": "新增测试职责",
"user": {
"email": "grttest15@mokahr.com",
"phone": "",
"userName": "grtTest",
"userNumber": "10000001"
}
}
],
"msg": "成功",
"success": true
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/dept_position_user/search
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
departmentCode | Yes | array | Department Code, which can be passed multiple times, with a maximum of 100 at a time. |
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | |
message | string | |
data | array | |
data[].departmentCode | string | department code |
data[].positionCode | string | positionCode. If there are multiple, return multiple; if there is no binding responsibility, return null. |
data[].positionName | string | position name |
data[].user | object | The personnel corresponding to each responsibility (user email/phone number/employee number/name), if there is no binding user, return null. |
User API
Sync personnel information
HTTP request
POST https://api.mokahr.com/api-platform/v2/users/syncInfo
> Request example (JSON)
> Request example
$ curl https://api.mokahr.com/api-platform/v2/users/syncInfo
-u 'your-api-key:'
-X POST
-H 'Content-Type: application/json'
-d '{
"usersInfo": [
{
"email": "huohuohou2@mokahr.com",
"name": "liu大哥89",
"phone": "15101069886",
"number": "6661889",
"roleId": 60,
"departmentCode": [],
"superiorEmail": "",
"deactivated": 0,
"thirdPartyId": "",
"uniqueType": "number",
"autoActivated": 1,
"locale": "zh-CN"
}
]
}'
> OperationSuccess
{
"code": 200,
"msg": "success",
"data": {
"successCount": 1,
"errorList": []
}
}
> Operation Failure
{
"code": -1,
"msg": "success",
"data": {
"successCount": 0,
"errorList": [
{
"data": {
"email": "huohuohou2@mokahr.com",
"name": "liu大哥89",
"phone": "15101069886",
"number": "6661889",
"roleId": 60,
"departmentCode": [],
"superiorEmail": "",
"deactivated": 0,
"thirdPartyId": "",
"uniqueType": "number",
"locale": "zh-CN"
},
"msg": "Parameter error: roleId",
"code": -1
}
]
}
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
usersInfo | Yes | array | User info array |
usersInfo[].email | No/Required when uniqueType is email | string | |
usersInfo[].name | No | string | Name |
usersInfo[].phone | No/Required when uniqueType is phone | string | Phone |
usersInfo[].number | No/Required when uniqueType is number | string | Employee No. |
usersInfo[].roleId | No/Required for first created user | int | Custom user id |
usersInfo[].departmentCode | Yes | array | Department code list, the departmentCode synced in through the organization structure, is judged to be all departments if an null array is passed. |
usersInfo[].superiorEmail | No | string | For the superior mailbox, passing an empty string will clear the reporting relationship in the moka system. You can choose whether to update the reporting relationship by setting the updateSuperiorEmail parameter |
usersInfo[].deactivated | Yes | int | Whether to disable/initially create a user pass 1, the user will not be created successfully 0-not disabled 1-disabled |
usersInfo[].thirdPartyId | No | string | Functional fieldUsed to SSO Not pass empty string |
usersInfo[].uniqueType | Yes | string | Email or number or phone, the identification used to determine the uniqueness of the account when judging this transmission |
usersInfo[].updateDepartment | No | boolean | !!!Note: the default is true if not passed Whether to update the department true :Updatefalse :Not update |
usersInfo[].updateSuperiorEmail | No | boolean | Whether to update the superior reporter,true Update false Not update |
usersInfo[].autoActivated | No | int | 0-No automatic activation, 1-Automatic activation, pass null string is 0 by default |
usersInfo[].locale | No | string | User language: zh-CN is Chinese; en-US is English. No pass is Chinese by default |
Responsejson
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | Response code, not 200 represents fail |
msg | string | Response info |
data | object | Respond data |
data.successCount | number | Sync data successful. for example:"successCount": 1, // One successful data |
data.errorList | Array | Sync failed data |
data.errorList[].code | int | Response code |
data.errorList[].msg | string | The reason of data failed |
data.errorList[].data | object | Data information |
data.errorList[].data.email | string | |
data.errorList[].data.name | string | Name |
data.errorList[].data.phone | string | Phone |
data.errorList[].data.number | string | Employee No. |
data.errorList[].data.roleId | int | Custom user id |
data.errorList[].data.locale | string | User language: zh-CN is Chinese; en-US is English. No pass is Chinese by default. |
data.errorList[].data.departmentCode | array | Department code list, the departmentCode synced in through the organization structure, is judged to be all departments if an null array is passed. |
data.errorList[].data.superiorEmail | string | Upper class email |
data.errorList[].data.deactivated | int | Whether to disable/initially create a user pass 1, the user will not be created successfully 0-not disabled 1-disabled |
data.errorList[].data.thirdPartyId | string | Functional fieldUsed to SSO Not pass empty string |
data.errorList[].data.uniqueType | string | Email or number or phone, the identification used to determine the uniqueness of the account when judging this transmission |
Get personnel info
HTTP request
POST https://api.mokahr.com/api-platform/v1/users/list
> Request example (JSON)
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/users/list' \
--header 'Authorization: Basic Mm11UnVBQk******zY6' \
--header 'Content-Type: application/json' \
--data-raw '{
"deactivated": 0,
"limit": "20",
"order": "asc"
}'
> Response for example
{
"code": 200,
"message": "success",
"data": [
{
"userId": 200000188,
"email": "test2@sdicfund.com",
"name": "马田",
"phone": "10065761890",
"role": 50,
"roleId": 200000145,
"deactivated": 0,
"thirdPartyId": "",
"locale": "zh-CN",
"department": []
},
{
"userId": 200000307,
"email": "1581904186@qq.com",
"name": "耿凯3",
"phone": "18732837638",
"role": 30,
"roleId": 200000143,
"superiorEmail": "test@sdicfund.com",
"deactivated": 0,
"thirdPartyId": "",
"locale": "zh-CN",
"department": []
}
],
"next": "200000317"
}
Request query parameter
Field | Required | Type | Description |
---|---|---|---|
next | No | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, and the next request only needs to add this next parameter to the query. If there is no next field in the response, it means that there is no more data |
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
roleId | No | integer | Role id |
No | string | ||
phone | No | string | Phone |
number | No | string | Employee No. |
deactivated | No | integer | Whether be disabled Optional values are: 0 :Available1 :Disabled |
departmentIdType | No | string | The department ID type used in this call.Optional values are:DEPARTMENT_ID (Default value):Moka department idDEPARTMENT_CODE :Department id of the third-party |
departmentId | No | string | User belongs to/is responsible for department id |
locale | No | string | User language Optional values are: zh-CN :Chineseen-US :EnglishChinese by default |
limit | No | string | Number of entries per page for paging, default 100, max 500. |
order | No | string | The sorting method of the pulled data, the sorting key is the user creation time. The optional value is: DESC Pulled in order from newest to old, this is the default value DESC. Pull data from old to new. Note: When the sorting method is ASC , no matter whether there is more data, next will be included in the returned body (can be used as incremental pull) |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | 200 :Success not 200 represents failure |
message | string | Notification |
next | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, and the next request only needs to add this next parameter to the query. If there is no next field in the response, it means that there is no more data |
data[].userId | string | User id |
data[].email | string | |
data[].name | string | Name |
data[].phone | string | Phone |
data[].number | stirng | Employee No. |
data[].role | interger | Role0 :Referrer5 : Reception10 :Interviewer20 :Hiring manager25 :Senior hiring manager30 :HR40 :Administrator50 :Super-administrator |
data[].roleId | interger | Custom user id |
data[].superiorEmail | stirng | Upper class email |
data[].deactivated | stirng | Whether be disabled Optional values are: 0 :Available1 :Disabled |
data[].isPending | boolean | Functional field,Used to SSO,Not pass empty string |
data[].thirdPartyId | stirng | Functional field,Used to SSO,Not pass empty string |
data[].locale | string | User language Optional values are: zh-CN :Chineseen-US :EnglishChinese by default |
data[].department | array | User belongs to/is responsible for department |
data[].department[].departmentCode | string | Third-party department id |
data[].department[].departmentId | string | Moka department id |
data[].department[].name | string | Department name |
Check Role Information
The response value is the collection of all roles under this client
> Request example
$ curl https://api.mokahr.com/api-platform/v1/users/roles?type=all \
-u 'your_api_key:' \
-X GET \
> Response example
{
"success": true,
"data": [
{
"id": 44,
"name": "Interviewer",
"role": 10,
"description": "可筛选简历、填写面试反馈"
},
{
"id": 45,
"name": "Hiring manager",
"role": 20,
"description": "可筛选简历、填写面试反馈,查看所有的面试反馈"
},
{
"id": 46,
"name": "HR",
"role": 30,
"description": "可查看部分职位的Candidate info及部分报表"
},
{
"id": 47,
"name": "Administrator",
"role": 40,
"description": "可以创建并管理HR、用人Department经理、Interviewer帐号,拥有所属HR的All权限"
},
{
"id": 48,
"name": "超级Administrator",
"role": 50,
"description": "拥有所有权限,可以查看所有Candidate info"
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/users/roles?type=all
Request url parameter
Field | Type | Description |
---|---|---|
type | string | Query type Optional values are: all :All custom :Custom builtin :Built-in |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Role id |
name | string | Role name |
role | integer | Role value |
description | string | Description |
Update user group
It is accessible to modify user groups. When the user group request parameter is not passed, the user group information will not be updated. When the user group request parameter is empty, the information is updated to be empty.
Request example (JSON)
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/user_group/update' \
--header 'Authorization: Basic Mm11UnVBQk******zY6' \
--header 'Content-Type: application/json' \
--data-raw '{
"userGroupId": 1,
"userGroupName": "用户组1",
"activate": true
}'
Response example
{
"code": 200,
"msg": "success",
"data": null
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/user_group/update
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
userGroupId | yes | integer | User group id |
userGroupName | no | string | User group name |
activate | no | boolean | User group status true: enable false enable |
Response
Response body in JSON:
Field | Type | Description |
---|---|---|
code | number | Return code:0 represents normal, others are error |
message | string | Request responded info |
Update user group member
It is accessible to modify user groups and update the members of the user group. When the user group request parameter is empty, the user members will be cleared. The member information of user groups needs to be synchronized with all members, which can be modified by all. The role type of the user group member must be interviewer and above. If the user group members include roles below the interviewer, the user group member will be updated failed.
Request example (JSON)
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/user_group/update_member' \
--header 'Authorization: Basic Mm11UnVBQk******zY6' \
--header 'Content-Type: application/json' \
--data-raw '{
"userGroupId": 1,
"members": [
{
"uniqueType":"email",
"email":"aaa@aaa.com"
},
{
"uniqueType":"phone",
"email":"12422222222"
},
{
"uniqueType":"number",
"email":"12123"
}
]
}'
Response example
{
"code": 200,
"msg": "success",
"data": {
"errorList":[
{
"uniqueType":"email",
"email":"aaa@aaa.com"
}
]
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/user_group/update_member
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
userGroupId | yes | integer | User group id |
member | no | array | User member info that should be updated The user group is up to 1000 members The role type of the user group member must be interviewer and above. If the user group members include roles below the interviewer, the user group member will be updated failed. |
member[].uniqueType | yes | string | The unique identifier of user info Optional values are: email: Email<>phone: Phone number number: Employee No. |
member[].email | No/required when uniqueType is email | string | User's email |
member[].phone | No/required when uniqueType is phone | string | User's phone number |
member[].number | No/required when uniqueType is number | string | User's employee No. |
Response
Response body in JSON:
Field | Type | Description |
---|---|---|
code | number | Return code:0 represents normal, others are error |
message | string | Request responded info |
data | Object | Respond data |
data.errorList | array | error data info |
Job requisition API
This part of the API is mainly used to obtain the current headcount data, and import headcount in batches, and the frequency of writing interface requests is limited to 30 times per minute.
The value range of each variable
HC status
Value | Description |
---|---|
draft | Draft |
unstart | Unstarted (default) |
ongoing | In process |
complete | Completed |
suspend | Pending |
canceled | Cancelled |
timeout | Expired |
type Requisition type
Value | Description |
---|---|
planned | In plan (default) |
unplanned | Unplanned |
commitment Employment type
Value | Description |
---|---|
parttime | Part-time |
fulltime | Full-time job (default) |
intern | Internship |
other | Other |
hiremode Recruitment mode
Value | Description |
---|---|
1 | experienced hires |
2 | Campus recruitment |
Add job requisition
Synchronization information includes organizational structure and position ID information, which needs to be obtained separately from relevant interfaces
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headcount/\?currentHireMode\=1 \
-u 'your-api-key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '
{
"number": "hc_automan",
"jobName": "hcName",
"needNumber": 1,
"startDate": "2017-10-12T00:00:00.000Z",
"education": "Bachelor degree",
"departmentCode": "8",
"maxSalary": 2,
"minSalary": 1,
"jobPriorityId": 1,
"locationId": 1,
"jobRankIds": [1,3],
"customData": {
"1": "test",
"2": 123,
"3":["1723553256175","1723553256176"]
}
}
'
> Response example
{
"headcount": {
"id": 1,
"number": "hc-automan",
"jobName": "hcname",
"type": "planned",
"needNumber": 10,
"departmentId": 1,
"commitment": "fulltime",
"ownerId": 1,
"managerIds": [2],
"description": null,
"status": "unstart",
"creatorId": 7,
"hireMode": 1,
"orgId": "livingsimple",
"createdAt": "2018-01-09T10:37:32.000Z",
"updatedAt": "2018-01-09T10:37:32.000Z",
"startDate": "2017-10-12",
"completeDate": null,
"connectedJobIds": [],
"connectedJobs": [],
"usedNumber": 0,
"remainNumber": 5,
"ownerEmail": "hr@test.moka",
"managerEmails": ["hr@trymoka.com"],
"managerEmployeeIds": ["0018"],
"departmentCode": "7",
"customData": {
"3": [
{
"localeValues": [
{
"locale": "zh-CN",
"value": "value1"
},{
"locale": "en-US",
"value": "valueA"
}
],
"optionId": "1723553256175"
},
{
"localeValues": [
{
"locale": "zh-CN",
"value": "value2"
},{
"locale": "en-US",
"value": "valueB"
}
],
"optionId": "1723553256176"
}
],
"2": "test",
"1": 123
},
"addressInfo": [
{
"id": 1,
"country": "中国",
"province": "北京City",
"area": "海淀District",
"address": "北京City海淀District海淀西大街"
}
],
"jobPriority": [
{
"id": 14,
"name": "123",
"isBuiltin": 0
}
],
"jobRanks": [
{
"id": 1,
"name": "新人",
"type": "p5",
"level": 1,
"hcId": 8
},
{
"id": 3,
"name": "总裁",
"type": null,
"level": 3,
"hcId": 8
}
]
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/headcount
Request URL parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Request body
Field | Whether it is required | Type | Description |
---|---|---|---|
number | Yes | string | Job requisition code, unique and unmodified. |
jobName | Yes | string | Job requisition name |
type | No | string | Requisition type |
needNumber | Yes | integer | No. of vacancy |
departmentCode | No | string | Department code, organization structure synchronization department_code passed through the interface |
commitment | No | string | Employment type |
ownerEmail | No | string | Recipient email |
ownerEmployeeId | No | string | Recipient employee No. |
managerEmails | No | array | The email of person in charge: need to have the email of the person who have the authority, such as HR or super admin. |
managerEmployeeIds | No | array | The email of person in charge: need to have the email of the person who have the authority, such as hr or super admin. |
description | No | string | Requirement description, html string: |
status | No | string | In process status |
creatorEmail | No | String | The email of job requisition creator can only be added when creating and unmodified when editing. It will not display in sysytem. |
startDate | No | string | Job requisition start time. Date format is: ISO8601 |
completeDate | No | string | Estimated finish time. Date format is: ISO8601 |
connectedJobIds | No | array | The id of associated position |
customData | No | object | Custom data, in the form of key-value pairs. key is the custom field id, and value is the custom field value. If it is a multi-select field, the value is an array of option ID. Custom fields created before November 18, 2024, for social recruitment can have their IDs used to create/edit custom fields for campus recruitment needs (the database stores the actual campus recruitment IDs). Although there is a mapping relationship between social and campus recruitment field IDs, it is still preferable to use the actual mode's field IDs for creating and editing custom field content. The ID in the returned result is always the real mode ID. |
locationId | No | integer | Location id |
jobPriorityId | No | integer | Job priority id |
jobRankIds | No | array | Job level id |
education | No | string | Education requirement Range of values No limit Senior high school and below Technical secondary school Technical secondary school Junior college Bachelor degree Master degree Doctor degree |
sharedUserEmails | No | array | Email of job requisition sharer.Recruiter, job requisition sharer, and job requisition creator cannot be the same person. |
sharedUserEmployeeIds | No | array | Work number of job requisition sharer |
zhinengId | No | integer | Functional ID |
minSalary | No | integer | Salary floor |
maxSalary | No | integer | Salary ceiling |
salaryUnit | No | integer | Salary unit Optional values: 6:Month 7:Week 8:Day 9:Hour 10:Every time |
payPeriod | No | integer | Number of paid months minimum value:12 Maximum value:24 |
paymentMethod | No | integer | Salary payment method Optional values: 0:Daily settlement 1:Weekly settlement 2:Monthly settlement 3:Completion completion |
assignmentFeedbackId | No | integer | Screening Evaluation Form ID The screening evaluation form cannot be linked unless it is activated, and only forms available to the current department can be linked. If no department is specified, only the default screening evaluation form can be linked. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | hc id |
number | string | hc code |
jobName | string | hc name |
type | string | Requisition type |
needNumber | integer | No. of vacancy |
departmentId | integer | Department id |
commitment | string | Employment type Optional values are: Full-time Part-time Internship Others |
ownerId | integer | Recipient id |
ownerEmail | integer | Recipient email |
ownerEmployeeId | integer | Recipient employee No. |
managerIds | array | Person in charge id array |
managerEmails | array | Person in charge email array |
managerEmployeeIds | array | Person in charge employee No. array |
description | string | Requirement description |
status | string | In process status |
creatorId | integer | hc creator id |
creatorEmail | String | hc creator email |
hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
orgId | string | Company id |
createAt | string | Creation timeDate format is: ISO8601 |
updateAt | string | Update timeDate format is: ISO8601 |
startDate | string | Start timeDate format is: ISO8601 |
completeDate | string | End dateDate format is: ISO8601 |
connectedJobIds | array | The id of associated position |
connectedJobs | array | The details of associated position |
usedNumber | integer | Number of used people (same as number of incumbents) that are associated with the job requisition and the number of candidates whose status is employed. If a candidate leaves after being employed, the number of used people will be correspondingly reduced. It is recommended to use "number of incumbents" to be consistent with the job requisition module of the system. |
remainNumber | integer | Remaining number=Recruit number-Number of used people |
currentEnrolledNumber | integer | Number of incumbents who are associated with the job requisition and the number of candidates whose status is employed. If a candidate leaves after being employed, the number of employees will be correspondingly reduced. |
departureNumber | integer | Number of separations, associated with the job requisition, and the number of candidates whose status is separated. |
customData | object | Custom field |
departmentCode | string | The code that used for sync department |
addressInfo | array | Location info |
jobPriority | array | Job priority information |
jobRanks | array | Job level |
education | string | Education requirement |
sharedUserEmails | array | Email of job requisition sharer |
sharedUserEmployeeIds | array | Work number of job requisition sharer |
zhineng | object | Functional information |
zhineng.id | integer | Functional ID |
zhineng.name | string | Functional name |
minSalary | integer | Salary floor |
maxSalary | integer | Salary ceiling |
salaryUnit | integer | Salary unit |
payPeriod | integer | Number of paid months |
paymentMethod | integer | Salary payment method |
Update Job requisition
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headcount/1 \
-u 'your-api-key:' \
-X PUT \
-H 'content-type: application/json' \
-d '
{
"jobName": "hcName",
"needNumber": 10,
"startDate": "2017-10-12T00:00:00.000Z",
"customData": {
"1": "test",
"2": 123,
"3":["1723553256175","1723553256176"]
},
}
'
> Response example
{
"headcount": {
"id": 1,
"number": "hc-automan",
"jobName": "hcname",
"type": "planned",
"needNumber": 10,
"departmentId": 1,
"commitment": "fulltime",
"ownerId": 1,
"managerIds": [2],
"managerEmails": ["hr@trymoka.com"],
"managerEmployeeIds": ["0019"],
"description": null,
"status": "unstart",
"creatorId": 7,
"hireMode": 1,
"orgId": "livingsimple",
"createdAt": "2018-01-09T10:37:32.000Z",
"updatedAt": "2018-01-09T10:37:32.000Z",
"startDate": "2017-10-12",
"completeDate": null,
"connectedJobIds": [],
"connectedJobs": [],
"usedNumber": 0,
"remainNumber": 5,
"education": "Bachelor degree",
"customData": {
"3": [
{
"localeValues": [
{
"locale": "zh-CN",
"value": "value1"
},{
"locale": "en-US",
"value": "valueA"
}
],
"optionId": "1723553256175"
},
{
"localeValues": [
{
"locale": "zh-CN",
"value": "value2"
},{
"locale": "en-US",
"value": "valueB"
}
],
"optionId": "1723553256176"
}
],
"2": "test value1",
"1": "test value2"
}
}
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/headcount/{hcId}
Request URL parameter
Field | Type | Description |
---|---|---|
hcId | integer | Targeted hc id |
Request body
Field | Type | Description |
---|---|---|
jobName | string | hc name |
type | string | Requisition type |
needNumber | integer | No. of vacancy |
departmentCode | string | Department code, organizational structure synchronization department_code passed through the interface |
commitment | string | Employment type |
ownerEmail | integer | Recipient email |
managerEmails | array | Person in charge email |
managerEmployeeIds | array | Person in charge employee No. |
description | string | Requisition description, html string |
status | string | In process status |
creatorId | integer | hc creator id |
startData | string | Start time |
completeDate | string | End time |
connectedJobIds | array | The id of associated position |
customData | object | Custom field, in the form of key-value pairs. key is the custom field id, and value is the custom field value. If it is a multi-select field, the value is an array of option ID. Custom fields created before November 18, 2024, for social recruitment can have their IDs used to create/edit custom fields for campus recruitment needs (the database stores the actual campus recruitment IDs). Although there is a mapping relationship between social and campus recruitment field IDs, it is still preferable to use the actual mode's field IDs for creating and editing custom field content. The ID in the returned result is always the real mode ID. |
locationId | integer | Location id |
jobPriorityId | integer | Job priority id |
jobRankIds | array | Job level id |
education | string | Degree requirement, value range: no limit, senior high school and below, technical secondary school, junior college, bachelor degree, master degree, and doctor degree |
realCompleteDate | string | Actual completion date. This field takes effect when the status is "Completed"; no value is passed to use the update time by default. |
sharedUserEmails | array | Email of job requisition sharer.Recruiter, job requisition sharer, and job requisition creator cannot be the same person. |
sharedUserEmployeeIds | array | Work number of job requisition sharer |
zhinengId | integer | Functional ID |
minSalary | integer | Salary floor |
maxSalary | integer | Salary ceiling |
salaryUnit | integer | Salary unit Optional values: 6:Month 7:Week 8:Day 9:Hour 10:Every time |
payPeriod | integer | Number of paid months minimum value:12 Maximum value:24 |
paymentMethod | integer | Salary payment method Optional values: 0:Daily settlement 1:Weekly settlement 2:Monthly settlement 3:Completion completion |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | hc id |
number | string | hc code |
jobName | string | hc name |
type | string | Requisition type |
needNumber | integer | No. of vacancy |
departmentId | integer | Department id |
commitment | string | Employment type Optional value: Full-time Part-time Internship Others |
ownerId | integer | Recipient id |
ownerEmail | integer | Recipient email |
ownerEmployeeId | integer | Recipient employee No. |
managerIds | array | Person in charge id array |
managerEmails | array | Person in charge email array |
managerEmployeeIds | array | Person in charge employee No. array |
description | string | Requirement description |
status | string | In process status |
creatorId | integer | hc creator id |
hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
orgId | string | Company id |
createAt | string | Creation timeDate format is: ISO8601 |
updateAt | string | Update timeDate format is: ISO8601 |
startData | string | Start timeDate format is: ISO8601 |
completeDate | string | End dateDate format is: ISO8601 |
connectedJobIds | array | The id of associated position |
connectedJobs | array | The details of associated position |
usedNumber | integer | Number of used people (same as number of incumbents) that are associated with the job requisition and the number of candidates whose status is employed. If a candidate leaves after being employed, the number of used people will be correspondingly reduced. It is recommended to use "number of incumbents" to be consistent with the job requisition module of the system. |
remainNumber | integer | Remaining number=Recruit number-Number of used people |
currentEnrolledNumber | integer | Number of incumbents who are associated with the job requisition and the number of candidates whose status is employed. If a candidate leaves after being employed, the |
departureNumber | integer | Number of separations, associated with the job requisition, and the number of candidates whose status is separated. |
customData | object | Custom field |
departmentCode | string | The code that used for sync department |
addressInfo | array | Location info |
jobPriority | array | Job priority information |
jobRanks | array | Job level |
education | string | Education requirement |
realCompleteDate | string | Actual completion date. This field takes effect when the status is "Completed"; no value is passed to use the update time by default. |
sharedUserEmails | array | Email of job requisition sharer |
sharedUserEmployeeIds | array | Work number of job requisition sharer |
zhineng | object | Functional information |
zhineng.id | integer | Functional ID |
zhineng.name | string | Functional name |
minSalary | integer | Salary floor |
maxSalary | integer | Salary ceiling |
salaryUnit | integer | Salary unit |
payPeriod | integer | Number of paid months |
paymentMethod | integer | Salary payment method |
Delete Job requisition
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headcount/1\ \
-u 'your-api_key:' \
-X DELETE
> Response example
ok
HTTP request
DELETE https://api.mokahr.com/api-platform/v1/headcount/{hcId}
Request URL parameter
Field | Type | Description |
---|---|---|
hcId | integer | Targeted hc id |
Get hc basic info list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headcount/minimal_headcounts\?currentHireMode\=1 \
-u 'your_api_key:' \
-X GET
> Response example
{
"headcounts": [
{
"id": 1,
"number": "AoTeMan001",
"status": "unstart",
"jobName": "野生奥特曼",
"needNumber": 5,
"departmentId": 1,
"ownerId": 1,
"orgId": "livingsimple"
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/headcount/minimal_headcounts
Request URL parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
headcounts | array | |
id | integer | hc id |
number | string | hc code |
status | string | In process status |
jobName | string | hc name |
needNumber | integer | No. of vacancy |
departmentId | integer | Department id |
departmentCode | string | The code that used for sync department |
ownerId | integer | Recipient id |
orgId | string | Company id |
Get specific job requisition details
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headcount/10 \
-u 'your-api_key:' \
-X GET
> Response example
{
"headcount": {
"id": 1,
"number": "AoTeMan001",
"jobName": "野生奥特曼",
"type": "planned",
"needNumber": 5,
"departmentId": 1,
"departmentCode": "7",
"commitment": "fulltime",
"ownerId": 1,
"managerIds": [2],
"description": null,
"status": "unstart",
"creatorId": 7,
"hireMode": 1,
"orgId": "livingsimple",
"createdAt": "2018-01-09T10:37:32.000Z",
"updatedAt": "2018-01-09T10:37:32.000Z",
"startDate": null,
"completeDate": null,
"connectedJobIds": [],
"connectedJobs": [],
"usedNumber": 0,
"remainNumber": 5,
"customData": {
"1": "123",
"2": "222"
},
"ownerEmail": "hr@test.moka",
"managerEmails": ["guoxing123@trymoka.com"],
"managerEmployeeIds": ["0019"],
"departmentCode": "7",
"addressInfo": [
{
"id": 1,
"country": "中国",
"province": "北京City",
"area": "海淀District",
"address": "北京City海淀District海淀西大街"
}
],
"jobPriority": [
{
"id": 14,
"name": "123",
"isBuiltin": 0
}
],
"jobRanks": [
{
"id": 1,
"name": "新人",
"type": "p5",
"level": 1,
"hcId": 8
},
{
"id": 3,
"name": "总裁",
"type": null,
"level": 3,
"hcId": 8
}
]
}
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/headcount/{hcId}
Request URL parameter
Field | Type | Description |
---|---|---|
hcId | integer | hc id |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | hc id |
number | string | hc code |
jobName | string | hc name |
type | string | Requisition type |
needNumber | integer | No. of vacancy |
departmentId | integer | Department id |
commitment | string | Employment type Optional value: Full-time Part-time Internship Others |
ownerId | integer | Recipient id |
ownerEmail | string | Recipient email |
ownerEmployeeId | string | Recipient employee No. |
managerIds | array | Person in charge id array |
managerEmails | array | Person in charge email array |
managerEmployeeIds | array | Person in charge employee No. array |
description | string | Requirement description |
status | string | In process status |
creatorId | integer | hc creator id |
creatorEmail | String | hc creator email |
hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
orgId | string | Company id |
createdAt | string | Created time |
updatedAt | string | Update time |
startDate | string | Start time "2022-03-11" |
completeDate | string | End time |
connectedJobIds | array | The id of associated position |
connectedJobs | array | The details of associated position |
usedNumber | integer | Number of people used |
remainNumber | integer | Left people |
customData | object | The value of the custom field |
departmentCode | string | The code that used for sync department |
addressInfo | array | Location info |
jobPriority | array | Job priority information |
jobRanks | array | Job level |
minSalary | integer | Salary floor, unit: thousand (K) |
maxSalary | integer | Salary ceiling, unit: thousand (K) |
education | string | Education requirement,Range of values:No limit Senior high school and below Technical secondary school Technical secondary school Junior college Bachelor degree Master degree Doctor degree |
allCount | integer | Sent offers |
sendCount | integer | Pending offers |
rejectedCount | integer | Rejected offers |
pendingCheckin | integer | To be onboarded (The offer has sent and accepted by the Candidate and the Candidate status is to be onboarded) |
realCompleteDate | string | Actual finish time of job requisition |
approvalStatus | integer | Job requisition approval status 0,to initiate; 1,in process; 3,denied; 4,cancelled; |
isGlobal | integer | Whether to use campus recruitment and experienced hire at the same tiem |
sharedUserEmails | array | Email of job requisition sharer |
sharedUserEmployeeIds | array | Work number of job requisition sharer |
Obtain the details of the specified job requisition
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headcounts\?currentHireMode\=1\&status\=complete&pageNumber=1 \
-u 'your-api_key:' \
-X GET
> Response example
{
"headcount": {
"id": 1,
"number": "AoTeMan001",
"jobName": "野生奥特曼",
"type": "planned",
"needNumber": 5,
"departmentId": 1,
"commitment": "fulltime",
"ownerId": 1,
"description": null,
"managerIds": [2],
"managerEmails": ["hr@trymoka.com"],
"managerEmployeeIds": ["0018"],
"status": "complete",
"creatorId": 7,
"hireMode": 1,
"orgId": "livingsimple",
"createdAt": "2018-01-09T10:37:32.000Z",
"updatedAt": "2018-01-09T10:37:32.000Z",
"startDate": null,
"completeDate": null,
"connectedJobIds": [],
"connectedJobs": [],
"usedNumber": 0,
"remainNumber": 5,
"departmentCode": "7",
"addressInfo": [
{
"id": 1,
"country": "中国",
"province": "北京City",
"area": "海淀District",
"address": "北京City海淀District海淀西大街"
}
],
"jobPriority": [
{
"id": 1,
"name": "Urgent hiring",
"isBuiltin": 1
}
],
"jobRanks": [
{
"id": 1,
"name": "新人",
"type": "p5",
"level": 1,
"hcId": 8
},
{
"id": 3,
"name": "总裁",
"type": null,
"level": 3,
"hcId": 8
}
]
}
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/headcounts
Request URL parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
status | string | Status |
pageNumber | intger | Page tabs, indicating which pages of data to get (20 data responded per page) |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | hc id |
number | string | hc code |
jobName | string | hc name |
type | string | Requisition type |
needNumber | integer | No. of vacancy |
departmentId | integer | Department id |
commitment | string | Employment type, optional values are: Full-time Part-time Internship Others |
ownerId | integer | Recipient id |
managerIds | array | Person in charge id array |
managerEmails | array | Person in charge email array |
managerEmployeeIds | array | Person in charge employee No. array |
description | string | Requirement description |
status | string | In process status |
creatorId | integer | hc creator id |
hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
orgId | string | Company id |
createAt | string | Creation timeDate format is: ISO8601 |
updateAt | string | Update timeDate format is: ISO8601 |
startData | string | Start timeDate format is: ISO8601 |
completeDate | string | End dateDate format is: ISO8601 |
connectedJobIds | array | The id of associated position |
connectedJobs | array | The details of associated position |
usedNumber | integer | Number of people used |
remainNumber | integer | Left people |
departmentCode | string | The code that used for sync department |
addressInfo | array | Location info |
jobPriority | array | Job priority information |
jobRanks | array | Job level |
sharedUserEmails | array | Email of job requisition sharer |
sharedUserEmployeeIds | array | Work number of job requisition sharer |
Get the number of job requisition
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headcount_status/count\?currentHireMode\=1 \
-u 'your-api_key:' \
-X GET
> Response example
{
"statusCount": {
"complete": 1,
"suspend": 1,
"unstart": 22
}
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/headcount_status/count
Request URL parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
complete | integer | The number of complete, if there is no field, it will be 0 |
Get custom field list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/hc_fields \
-u 'your_api_key:' \
-X GET
> Response example
[
{
"id": 1,
"name": "Requisition type",
"type": "select_info",
"detail": null,
"isRequired": 1,
"isVisible": 1,
"isBuiltin": 1
},
{
"id": 2,
"name": "select",
"type": "select_info",
"detail": [
"1",
"2"
],
"isRequired": 0,
"isVisible": 1,
"isBuiltin": 0
},
{
"id": 3,
"name": "test multi select info",
"type": "multi_select_info",
"multiDetail": [
{
"localeValues": [
{
"locale": "zh-CN",
"value": "value1"
},{
"locale": "en-US",
"value": "valueA"
}
],
"optionId": "1723553256175"
},
{
"localeValues": [
{
"locale": "zh-CN",
"value": "value2"
},{
"locale": "en-US",
"value": "valueB"
}
],
"optionId": "1723553256176"
}
],
"isApproval": 1,
"isBuiltin": 0,
"isRequired": 0,
"isVisible": 1
}
]
HTTP request
GET https://api.mokahr.com/api-platform/v1/hc_fields
Request URL parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode,default experienced hires Optional values are: 1 :experienced hires 2 :Campus recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Field id, used to creat and update new custom field |
name | string | The displayed name of field |
type | string | Field typeselect_info : Selection type multi_select_info : Multi-selection type string_info : String typedate_info :Date type |
detail | array | Optional question under select_info |
multiDetail | array | Contains an array of multi-select item details under multi_select_info |
isRequired | integer | Required |
isVisible | integer | Whether to display |
isBuiltin | integer | Whether it is built-in |
Get job requisition info at specific time
> Request example
curl --location --request GET 'https://api.mokahr.com/api-platform/v1/data/headcounts?fromTime=2018-1-1&limit=100' \
--header 'Authorization: Basic aHRuYlJqcGhyRDh***FWR0Q3dUw6'
> Response example
{
"data": [
{
"id": 367824,
"orgId": "orgid-test",
"number": "545454156",
"startDate": "2022-03-24T16:00:00.000Z",
"completeDate": null,
"needNumber": 3232,
"description": "
<p>
荒天帝和火灵儿的招聘Requirement description
</p>
",
"updatedAt": "2022-03-25T06:25:36.000Z",
"connectedJobIds": []
},
{
"id": 180790,
"orgId": "orgid-test",
"number": "001",
"startDate": null,
"completeDate": null,
"needNumber": 1,
"description": null,
"updatedAt": "2022-03-29T09:03:00.000Z",
"connectedJobIds": [
"6179489d-0a******8962db0f7",
"0cd0ed7d-1***********5-7d63a4117f63",
"6d**********9c3891d9c8"
]
}
],
"code": 0,
"msg": "success"
}
Get HeadCount info
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/headcounts
Query
Field | Required | Type | Description |
---|---|---|---|
fromTime | Yes | string | The start time of the data, the fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. |
next | Yes | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, and the next request only needs to add this next parameter to the query. The fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. If there is no next field in the response, it means that there is no more data |
limit | No | string | Number of entries per page for paging, default 100, max 500. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | HC unique id |
number | string | HC code |
startDate | string | HC start time |
completeDate | string | HC goal finish time |
needNumber | string | HC No. of vacancy |
description | strring | HC requirement description |
updatedAt | string | Last update time of this data |
connectedJobIds | array | Position id list associated to hc |
Query the verification status of recruitment needs
Request example
$ curl -X POST \
https://api.mokahr.com/api-platform/v1/headcounts/getHeadcountVerificationInfo \
-u 'your-api-key:' \
-H 'Content-Type: application/json' \
-d '{"id": 100001}'
Response example
{
"data": {
"id": 1234567890,
"number": "A123456",
"needNumber": 5,
"jobName": "软件工程师",
"inProcessOfferApplicationIds": [
1001,
1002,
1003
],
"hireApplicationIds": [
2001,
2002
]
},
"code": 0,
"msg": "success"
}
Obtain the verification status of recruitment needs
HTTP request
POST https://api.mokahr.com/api-platform/v1/headcounts/getHeadcountVerificationInfo
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
id | Yes | integer | HC unique ID |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Recruitment demand ID |
number | string | Recruitment Request Number |
needNumber | integer | No of the Recruited |
jobName | string | Position |
inProcessOfferApplicationIds | array | List of offer application IDs currently being processed in the process |
hireApplicationIds | array | List of IDs for Employment Application |
Candidate API
This part of the API is mainly used to obtain the Candidate custom module and custom field information configured in the system
Get Candidate info v2 interface
HTTP request
POST https://api.mokahr.com/api-platform/v2/data/ehrApplications
> Request example (application/json)
$ curl https://api.mokahr.com/api-platform/v2/data/ehrApplications \
-u 'your_api_key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '{
"applicationIds":[236718928]
}'
> Response示for example
{
"code": 200,
"msg": "success",
"data": [
{
"basicInfo": {
"applicationId": 200012943,
"campusSiteId": 0,
"archived": true,
"invitationUpdateStatus": 0,
"movedAt": "2021-04-22T11:47:05.000Z",
"sourceId": 200000480,
"createdAt": "2021-01-26T10:48:03.000Z",
"updatedAt": "2021-06-09T06:14:38.000Z",
"standardResumeUrl": "https://moka-test-public.oss-cn-beijing.aliyuncs.com/7402a966b65b438db315d9b339143e6d.pdf?Expires=1626266775&OSSAccessKeyId=LTAIoEXIQWCGUAZO&Signature=K1qXMEitIKuPxr1gzxa5%2Bz6Gylc%3D×tamp=1626263175803",
"sourceName": "拉勾",
"ehrCandidateExternalLink": "https://staging003.mokahr.com/forward/Candidate/info?access_token=9676f03ac311426e9ff6f74e9851d312916110d27d064a90aca3dbe9838f2571",
"archivedAt": null,
"archiveReasonId": null,
"referrer": null,
"archiveReasonsDetails": null,
"probation": null,
"headcountId": null,
"headcountNumber": null,
"headcountName": null,
"resumeKey": null,
"resumeUrl": null,
"pipelineId": 410030481,
"stageId": 410040910,
"sourceId": 410040910,
"archiveReasons": null,
"talentPoolsList": [
{
"talentPoolId": 200000140,
"name": "系统公共Talent pool",
"description": "所有HR权限及以上用户可见,用户可浏览公共Talent pool中所有Candidate"
}
],
"hireMode": 1,
"stage": {
"name": "沟通offer",
"id": 200000088,
"type": 101
},
"operationRecord": null,
"sourceList": [
{
"name": "招聘网站",
"isBuiltin": 1,
"id": null
},
{
"id": 200000480,
"name": "拉勾",
"isBuiltin": 1
},
{
"id": null,
"name": null,
"isBuiltin": null
}
],
"attachments": [],
"remarks": [
{
"content": "这Yes个Note",
"created_at": "2021-02-02T06:30:45.000Z",
"creator": {
"name": "简彦明",
"employeeId": "",
"id": 200001549,
"email": "jianyanming@mokahr.com",
"number": null
},
"is_private": false,
"type": "人工填写"
}
],
"owner": {
"name": "简彦明",
"email": "jianyanming@mokahr.com",
"employeeId": "",
"phone": null,
"number": null
},
"assignments": null,
"operator": null,
"birthYear": 1990,
"CandidateId": 200012616,
"sourceType": 2,
"name": "全Field",
"phone": "17787871675",
"email": "17787871675@163.com",
"gender": "Male",
"birthDate": "1990-03-07",
"ethnic": "汉族",
"certificateType": 1,
"citizenId": "110101199003079251",
"nationality": "安哥拉",
"nativePlace": "北京City 西城District",
"experience": 4,
"location": "北京Location",
"lastCompany": "Recent company",
"academicDegree": "Doctor degree",
"lastSpeciality": "计算机软件与理论",
"nativePlaceCode": 110102,
"nationalityCode": 1,
"genderCode": 0,
"academicDegreeCode": 7,
"ethnicCode": 1,
"industry": "Industry",
"forwardIndustry": "期望行业",
"lastUpdate": "2020-02-02",
"startFrom": "2021-02-02",
"skill": "Skill",
"awards": "Awards",
"personalInterests": "Hobby",
"lastWorkedJobTitle": "Job title",
"graduateDate": "2018-06-01T00:00:00.000Z",
"salary": "当前Salary",
"aimSalary": "Preferred salary",
"forwardLocation": "Preferred city",
"personal": "Self- description\n",
"blacklistTags": null,
"blacklistDetail": null,
"personalUrl": null,
"portraitUrl": null,
"married": null,
"customFields": [
{
"name": "Department",
"value": "Department",
"section": "experienceInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "工作City",
"value": "工作City",
"section": "experienceInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "所属行业",
"value": "所属行业",
"section": "experienceInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "Education experienceDescription",
"value": "Education experienceDescription\n",
"section": "educationInfo",
"index": 0,
"type": "text_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "教育月",
"value": "2015-07",
"section": "educationInfo",
"index": 0,
"type": "date_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "Language skill",
"value": "Language skill",
"section": "languageInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "Awards2",
"value": "Awards2",
"section": "awardInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "当前居住地",
"value": "当前居住地",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "当前行业",
"value": "当前行业",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "当前职位",
"value": "当前职位",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "期望职业",
"value": "期望职业",
"section": "jobIntention",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "所获奖励",
"value": "所获奖励",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "所获证书",
"value": "所获证书",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "投递From",
"value": "微信",
"section": "basicInfo",
"index": 0,
"type": "select_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "工作年限",
"value": "工作年限",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "投递 Date",
"value": "2021-01-26",
"section": "basicInfo",
"index": 0,
"type": "day_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "当前Salary",
"value": "当前Salary",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "毕业院校",
"value": "毕业院校",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "Language skill",
"value": "Language skill",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "Nationality",
"value": "中国",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "MajorSkill",
"value": "MajorSkill",
"section": "basicInfo",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "Self- description2",
"value": "Self- description2",
"section": "selfDescription",
"index": 0,
"type": "string_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "测试时间2",
"value": "2017-01",
"section": "测试模块",
"index": 0,
"type": "date_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "测试时间3",
"value": "2021-06-16",
"section": "测试模块",
"index": 0,
"type": "day_info",
"customFieldId": null,
"now": null,
"codes": null,
"code": null
},
{
"name": "测试 Time period",
"value": {
"endDate": "2019-01",
"startDate": "2018-01"
},
"now": false,
"section": "测试模块",
"index": 0,
"type": "date_group_info",
"customFieldId": null,
"codes": null,
"code": null
}
],
"label": null,
"educationInfo": [
{
"id": "200018307",
"startDate": "2014-01",
"endDate": "2018-01",
"now": false,
"school": "北京科技大学",
"speciality": "计算机科学与技术",
"academicDegree": "Master degree"
}
],
"experienceInfo": [
{
"id": "200011041",
"startDate": "2016-01",
"endDate": "2017-01",
"now": false,
"company": "Company name",
"title": "Job title",
"location": "Work location",
"industry": "Industry",
"leader": "汇报Object",
"department": "Department",
"salary": "Salary",
"summary": "Job responsibility\n",
"reasonForLeaving": "Reason for resignation",
"underlingNumber": "6",
"type": "Company type",
"size": "Company size"
}
],
"awardInfo": [
{
"id": "200000781",
"awardDate": "2017-01",
"awardName": "Country奖学金"
}
],
"projectInfo": [
{
"id": "200008354",
"startDate": "2017-01",
"endDate": "2021-07",
"now": true,
"projectName": "Project name",
"title": "Job title",
"projectDescription": "Project description\n",
"responsibilities": "Responsibility in project\n"
}
],
"languageInfo": [
{
"id": "200000866",
"language": "Language type",
"level": "良好",
"listenAndSpeak": "一般",
"readAndWrite": "一般"
}
],
"practiceInfo": [
{
"id": "200001954",
"startDate": "2018-01",
"endDate": "2019-01",
"company": "Company name",
"title": "Job title",
"location": "Work location",
"industry": "Industry",
"leader": "汇报Object",
"department": "Department",
"salary": "Salary",
"summary": "Job responsibility\n",
"size": "Company size"
}
]
},
"offerInfo": {
"applicationId": 200012943,
"status": "pending",
"approvalStatus": "UNINITIATED",
"checkinDate": "2021-06-17T16:00:00.000Z",
"salaryNumber": "11",
"locationString": "上海City 黄浦District 黄浦江",
"jobRankLevel": 2,
"jobRankName": "资深",
"dutyLevelName": "",
"salaryType": 3,
"offerAttachmentUrl": "https://moka-test.oss-cn-beijing.aliyuncs.com/export_files_cache/sdicfund/offers/2dce43984bdf9a77e2e3823b8110672d.pdf?Expires=1626266774&OSSAccessKeyId=LTAIoEXIQWCGUAZO&Signature=3kwpFQImRTRKIPk7bpCaeb4sypo%3D&response-content-disposition=attachment%3B%20filename%3D%25E5%2585%25A8%25E5%25AD%2597%25E6%25AE%25B5_Offer%25E4%25BF%25A1%25E6%2581%25AF.pdf%3B%20×tamp=1626263174601",
"finishedAt": null,
"jobRankType": null,
"creator": {
"name": "简彦明",
"email": "jianyanming@mokahr.com",
"employeeId": "",
"phone": null,
"number": null
},
"hcInfo": {
"id": 200001747,
"name": "hc",
"number": "1111",
"status": "ongoing",
"manager": {
"name": "简彦明",
"employeeId": "",
"id": 200001549,
"email": "jianyanming@mokahr.com"
},
"department": null
},
"department": {
"departmentName": "国投公司",
"departmentPath": "国投公司",
"id": "200031249",
"departmentCode": null,
"parentAPICode": null
},
"offerHistoryList": [
{
"sentAt": "2022-12-28T13:08:51.000Z",
"sentUser": {
"number": "78293365",
"phone": "13311334334",
"name": "刘阳",
"employeeId": "78293365",
"id": 3551342,
"email": "liuceshi@mokahr.com"
},
"status": "pending",
"operationType": null
}
],
"customFields": [
{
"name": "测试Custom field",
"value": "2016-01 2017-01",
"codes": null,
"code": null
},
{
"name": "测试Custom field2",
"value": "2021-01",
"codes": null,
"code": null
},
{
"name": "测试Custom field3",
"value": "2021-06-09",
"codes": null,
"code": null
}
]
},
"interviewInfo": [
{
"noInterview": false,
"applicationId": 200012943,
"groupInterviewId": 200003333,
"groupId": "de1d030ec7394b6eb07f70977f712852a2100b9198754c0b9a14d9ad71ac50f5",
"status": "Finished",
"CandidateAttendStatus": "No feedback",
"interviewType": "On-site interview",
"jobType": "0",
"locationId": 200000071,
"roundId": 1,
"roundName": "1st round",
"roundEnglishName": "1st round",
"createAt": "2021-01-29T09:35:26.000Z",
"startTime": "2021-01-29T10:00:00.000Z",
"duration": 30,
"interviewFeedbackUrl": "https://staging003.mokahr.com/api/outer/ats-interview/interview/interview-applications/exportPdf/withKey?sign=63e0ef16f4e98d56dedca33c83e2cec9&appSecret=dc07abc6-ad14-4fa6-ba4a-51bf83a0e343&applicationId=200012943&userId=&orgId=sdicfund×tamp=1626263174366",
"locationCityId": 110108,
"locationCountry": "中国",
"locationAddress": "北京City 海淀District 国投创新的地址",
"stageId": 200000087,
"cancelReason": null,
"signInStatus": null,
"locationInfo": null,
"meetingRoomId": null,
"meetingRoomName": null,
"interviewArranger": {
"name": "简彦明",
"email": "jianyanming@mokahr.com",
"employeeId": "",
"phone": null,
"number": null
},
"interviewerFeedbacks": [
{
"interviewer": {
"phone": "18734837688",
"name": "耿凯凯",
"employeeId": "",
"id": 200000307,
"email": "1581904186@qq.com"
},
"participated": "未填写反馈",
"resultName": null,
"resultType": null,
"feedback": null,
"feedbackTemplateResult": null,
"items": null
}
]
},
{
"noInterview": false,
"applicationId": 200012943,
"groupInterviewId": 200003334,
"groupId": "d61f4e46171d44c18980a3128bf861033efc8fe67c544c3db0e2c1d10883919c",
"status": "Finished",
"CandidateAttendStatus": "Accepted",
"interviewType": "On-site interview",
"jobType": "0",
"locationId": 200002114,
"roundId": 2,
"roundName": "2nd round",
"roundEnglishName": "2nd round",
"createAt": "2021-01-29T09:35:36.000Z",
"startTime": "2021-01-29T10:00:00.000Z",
"duration": 30,
"interviewFeedbackUrl": "https://staging003.mokahr.com/api/outer/ats-interview/interview/interview-applications/exportPdf/withKey?sign=63e0ef16f4e98d56dedca33c83e2cec9&appSecret=dc07abc6-ad14-4fa6-ba4a-51bf83a0e343&applicationId=200012943&userId=&orgId=sdicfund×tamp=1626263174366",
"locationCityId": 310101,
"locationCountry": "中国",
"locationAddress": "上海City 黄浦District 黄浦江",
"stageId": 200000087,
"cancelReason": null,
"signInStatus": null,
"locationInfo": null,
"meetingRoomId": null,
"meetingRoomName": null,
"interviewArranger": {
"name": "简彦明",
"email": "jianyanming@mokahr.com",
"employeeId": "",
"phone": null,
"number": null
},
"interviewerFeedbacks": [
{
"interviewer": {
"name": "张乔",
"employeeId": "",
"id": 200000317,
"email": "zhangqiao@mokahr.com"
},
"resultName": " Satisfaction",
"resultType": 1,
"feedback": "综合评价",
"participated": "已填写反馈",
"feedbackTemplateResult": null,
"items": null
}
]
},
{
"noInterview": false,
"applicationId": 200012943,
"groupInterviewId": 200003355,
"groupId": "d50dca4d81364ca0a2d3f6a0d91f118a245e3afbe8f74a63bd45493b302f7fb1",
"status": "Cancelled",
"CandidateAttendStatus": "No feedback",
"interviewType": "On-site interview",
"jobType": "0",
"locationId": 200002114,
"roundId": 2,
"roundName": "2nd round",
"roundEnglishName": "2nd round",
"createAt": "2021-02-01T11:33:43.000Z",
"startTime": "2021-02-01T12:00:00.000Z",
"duration": 30,
"interviewFeedbackUrl": "https://staging003.mokahr.com/api/outer/ats-interview/interview/interview-applications/exportPdf/withKey?sign=63e0ef16f4e98d56dedca33c83e2cec9&appSecret=dc07abc6-ad14-4fa6-ba4a-51bf83a0e343&applicationId=200012943&userId=&orgId=sdicfund×tamp=1626263174366",
"locationCityId": 310101,
"locationCountry": "中国",
"locationAddress": "上海City 黄浦District 黄浦江",
"stageId": 200000087,
"cancelReason": null,
"signInStatus": null,
"locationInfo": null,
"meetingRoomId": null,
"meetingRoomName": null,
"interviewArranger": {
"name": "简彦明",
"email": "jianyanming@mokahr.com",
"employeeId": "",
"phone": null,
"number": null
},
"interviewerFeedbacks": [
{
"interviewer": {
"phone": "15565761890",
"name": "马田",
"employeeId": "",
"id": 200000188,
"email": "matian@sdicfund.com"
},
"participated": "未填写反馈",
"resultName": null,
"resultType": null,
"feedback": null,
"feedbackTemplateResult": null,
"items": null
}
]
},
{
"noInterview": true,
"applicationId": 200012943,
"createAt": "2021-02-01T12:23:01.000Z",
"interviewFeedbackUrl": "https://staging003.mokahr.com/api/outer/ats-interview/interview/interview-applications/exportPdf/withKey?sign=63e0ef16f4e98d56dedca33c83e2cec9&appSecret=dc07abc6-ad14-4fa6-ba4a-51bf83a0e343&applicationId=200012943&userId=&orgId=sdicfund×tamp=1626263174366",
"cancelReason": null,
"groupInterviewId": null,
"groupId": null,
"status": null,
"CandidateAttendStatus": null,
"signInStatus": null,
"interviewType": null,
"jobType": null,
"locationId": null,
"locationInfo": null,
"meetingRoomId": null,
"meetingRoomName": null,
"roundId": null,
"roundName": null,
"roundEnglishName": null,
"startTime": null,
"duration": null,
"locationCityId": null,
"locationCountry": null,
"locationAddress": null,
"stageId": null,
"interviewArranger": null,
"interviewerFeedbacks": [
{
"interviewer": {
"phone": "13480783214",
"name": "houlei",
"employeeId": "",
"id": 200012438,
"email": "houlei@mokahr.com"
},
"resultName": " Satisfaction",
"resultType": 1,
"feedback": "None面试反馈",
"feedbackTemplateResult": null,
"items": null,
"participated": null
}
]
},
{
"noInterview": true,
"applicationId": 200012943,
"createAt": "2021-04-19T06:00:13.000Z",
"interviewFeedbackUrl": "https://staging003.mokahr.com/api/outer/ats-interview/interview/interview-applications/exportPdf/withKey?sign=4917ef78e9becbc120cd1a3a9947b554&appSecret=dc07abc6-ad14-4fa6-ba4a-51bf83a0e343&applicationId=200012943&userId=&orgId=sdicfund×tamp=1626263174367",
"cancelReason": null,
"groupInterviewId": null,
"groupId": null,
"status": null,
"CandidateAttendStatus": null,
"signInStatus": null,
"interviewType": null,
"jobType": null,
"locationId": null,
"locationInfo": null,
"meetingRoomId": null,
"meetingRoomName": null,
"roundId": null,
"roundName": null,
"roundEnglishName": null,
"startTime": null,
"duration": null,
"locationCityId": null,
"locationCountry": null,
"locationAddress": null,
"stageId": null,
"interviewArranger": null,
"interviewerFeedbacks": [
{
"interviewer": {
"name": "简彦明",
"employeeId": "",
"id": 200001549,
"email": "jianyanming@mokahr.com"
},
"resultName": " Satisfaction",
"resultType": 1,
"feedback": "",
"feedbackTemplateResult": {
"description": "带系数",
"id": 410004382,
"items": [
{
"calcScoreType": "total",
"description": "",
"resultScore": 2,
"subjects": [
{
"arrangeType": 0,
"description": "",
"isRequired": false,
"needReason": true,
"result": 1,
"scoreType": 5,
"title": "第一个题目",
"type": 1
},
{
"arrangeType": 0,
"description": "",
"isRequired": false,
"needReason": false,
"result": 1,
"scoreType": 5,
"title": "第二个题目",
"type": 1
}
],
"title": "一般"
},
{
"description": "没有系数,不计算得分",
"subjects": [
{
"arrangeType": 0,
"description": "",
"isRequired": false,
"needReason": true,
"reason": "123",
"result": 1,
"scoreType": 5,
"title": "没有系数第一题",
"type": 1
},
{
"arrangeType": 0,
"description": "",
"isRequired": false,
"needReason": false,
"result": 1,
"scoreType": 5,
"title": "第二题",
"type": 1
}
],
"title": "第二个大模块"
},
{
"calcScoreType": "avg",
"description": "Average",
"resultScore": 1,
"subjects": [
{
"arrangeType": 0,
"description": "",
"isRequired": false,
"needReason": false,
"result": 1,
"scoreType": 5,
"title": "平均第一题",
"type": 1
},
{
"arrangeType": 0,
"description": "",
"isRequired": false,
"needReason": false,
"result": 1,
"scoreType": 5,
"title": "平均第二题",
"type": 1
}
],
"title": "第三个大模块"
}
],
"name": " 一般评价表",
"totalWeightScore": 0,
"version": "1.0"
},
"items": null,
"participated": null
}
]
}
],
"shigongInfo": null,
"examInfo": {
"applicationId": 200012943,
"exams": [
{
"applicationId": 200012943,
"createTime": "2021-02-01T03:36:38.000Z",
"examAttachments": [
{
"attachmentName": "创建录用流程并获取url接口Illustration_csx(2)(1).docx",
"attachmentUrl": "https://moka-test.oss-cn-beijing.aliyuncs.com/bf7eba37-760b-4487-954f-9fa5975e272e.docx?Expires=1626266774&OSSAccessKeyId=LTAIoEXIQWCGUAZO&Signature=DZVROJ%2FFDPCfLu1%2FZ3E61PwbTcM%3D&response-content-disposition=attachment%3B%20filename%3D%25E5%2588%259B%25E5%25BB%25BA%25E5%25BD%2595%25E7%2594%25A8%25E6%25B5%2581%25E7%25A8%258B%25E5%25B9%25B6%25E8%258E%25B7%25E5%258F%2596url%25E6%258E%25A5%25E5%258F%25A3%25E8%25AF%25B4%25E6%2598%258E_csx%282%29%281%29.docx%3B%20×tamp=1626263174386",
"jobId": "0978992c-2f09-465f-926d-50c9bc38ec36",
"applicationId": 200012943
}
],
"jobId": "0978992c-2f09-465f-926d-50c9bc38ec36",
"name": "地点",
"result": "33",
"source": "手动上传考试",
"type": "exam"
}
],
"surveys": [
{
"name": "这Yes被调",
"date": "2021-02-01T03:35:43.000Z",
"result": "ok",
"attachmentName": "创建录用流程并获取url接口Illustration_csx(2)(1).docx",
"attachmentUrl": "https://moka-test.oss-cn-beijing.aliyuncs.com/c8d0da08-3ea6-4cf2-a05a-7a18257be4c1.docx?Expires=1626266774&OSSAccessKeyId=LTAIoEXIQWCGUAZO&Signature=ighV1nN%2B3JeS%2BiCiix%2BiqGoAV6k%3D&response-content-disposition=attachment%3B%20filename%3D%25E5%2588%259B%25E5%25BB%25BA%25E5%25BD%2595%25E7%2594%25A8%25E6%25B5%2581%25E7%25A8%258B%25E5%25B9%25B6%25E8%258E%25B7%25E5%258F%2596url%25E6%258E%25A5%25E5%258F%25A3%25E8%25AF%25B4%25E6%2598%258E_csx%282%29%281%29.docx%3B%20×tamp=1626263174386",
"jobId": "0978992c-2f09-465f-926d-50c9bc38ec36",
"applicationId": 200012943,
"source": null
}
]
},
"jobInfo": {
"id": "0978992c-2f09-465f-926d-50c9bc38ec36",
"headcountInfo": [
{
"customFields": [],
"id": 200001747,
"jobId": "0978992c-2f09-465f-926d-50c9bc38ec36",
"name": "hc",
"number": "1111",
"status": "ongoing"
}
],
"mjCode": "MJ000008",
"jobRanksInfo": [
{
"level": 2,
"name": "资深"
}
],
"hireMode": 1,
"title": "测试,etc.,etc.",
"commitment": " Full-time",
"number": null,
"status": "open",
"attributeId": null,
"attributeName": null,
"label": null,
"category": null,
"jobDescription": "
<p>
赛拉开地方啦地方那可能地方
</p>
",
"openedAt": "2020-08-02T16:00:00.000Z",
"campusSiteIds": [],
"campusSites": [],
"finishedAt": null,
"department": {
"info": {
"departmentName": "国投公司",
"departmentPath": "国投公司",
"id": "200031249"
},
"name": "国投公司",
"parentId": null
},
"stores": [],
"customFields": [
{
"name": "Salary",
"value": ""
},
{
"name": "Education",
"value": ""
},
{
"name": "内推金额",
"value": ""
},
{
"name": "job时间2",
"value": "2021-06-09"
},
{
"name": "所属公司",
"value": ""
},
{
"name": "job时间",
"value": "2019-01"
}
],
"jobManager": {
"name": "刘江伟",
"phone": null,
"number": null,
"email": "liujiangwei@mokahr.com",
"employeeId": ""
},
"jobAssistants": [
{
"name": "简彦明",
"phone": null,
"number": null,
"email": "jianyanming@mokahr.com",
"employeeId": ""
}
],
"jobHiringManagers": [],
"jobInterviewers": []
}
}
],
"next": "eyJsaW1pdCI6MSwibmV4dElkIjoyMDAwMjM0ODksIm5leHRVcGRhdGVBdCI6IjIwMjEtMDctMDFUMTc6NDU6NTAiLCJvcmdJZCI6InNkaWNmdW5kIn0="
}
Request body parameter(application/json)
Field | Required | Type | Description |
---|---|---|---|
No | string | Candidate email | |
applicationIds | No | array[integer] | Application id |
invitationUpdateStatus | No | integer | Invitation to update status |
limit | No | integer | Number of entries per page for paging, default 20, max 20. |
next | No | string | Paging parameter, only pass one |
phone | No | string | Candidate phone |
offerAttachment | No | boolean | The offer attachment download link is only responded when true, and is valid for one hour. |
applicationForm | No | boolean | Only respond the Candidate custom registration form if it is true |
pipelineIds | No | array[integer] | Process ids |
stageIds | No | array[integer] | Stage ids |
updateAtStartTime | No | string | Update start time, pass Beijing time in format YYYY-MM-DDTHH:mm:ss.sssZ |
updateAtEndTime | No | string | Update end time, pass Beijing time in format YYYY-MM-DDTHH:mm:ss.sssZ |
needAttachment | No | boolean | Whether to respond attachment, default is true. If true respond attachment, if false not respond attachment. |
archived | No | boolean | Whether to archive application. true/false(true archived,false not archived) |
hireMode | No | integer | Recruitment mode. 1/2 (1 experienced hires, 2 campus recruitment, pass others means not pass) |
applicationCreateStartTime | No | long | Data create begin time (timestamp format, refers to the time when the application was first saved to the database) |
applicationCreateEndTime | No | long | Data create end time(timestamp format, refers to the time when the application was first saved to the database) |
applicationAppliedAtStartTime | No | long | Application create begin time(timestamp format, refers to the application date displayed in the system) |
applicationAppliedAtEndTime | No | long | Application create end time(timestamp format, refers to the application date displayed in the system) |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Return code: non-200 means error |
msg | string | Error info |
next | string | If it returns, it will be automatically paginated next time it is requested |
data | array | Returned data details |
data[].basicInfo | Object | Candidate application info |
data[].basicInfo.CandidateId | integer | The unique id of Candidate in Moka |
data[].basicInfo.pipelineId | long | Recruitment process id of the application |
data[].basicInfo.stageId | long | Stage id of the application |
data[].basicInfo.sourceId | long | Source id of the application |
data[].basicInfo.applicationId | integer | Candidate application ID |
data[].basicInfo.aimWorkCity | string | Candidate preferred city |
data[].basicInfo.name | string | Name |
data[].basicInfo.phone | string | Phone number |
data[].basicInfo.prefixPhone | string | Country calling code |
data[].basicInfo.email | string | |
data[].basicInfo.gender | string | Gender, one of the values: male, female |
data[].basicInfo.birthDate | string | Birthdate |
data[].basicInfo.ethnic | string | Ethnicity |
data[].basicInfo.certificateType | integer | Certificate type Optional values are: 1 : id card 2 : Hong Kong id card3 : Macau id card4 :Taiwan id card 5 : Passport6 : Other identity document7 : Exit-Entry Permit for Travelling to and from Hong Kong and Macau (EEP)8 : The Mainland Travel Permit for Taiwan Residents9 : Foreigners' Work Permit 10`:Residence Permit for Foreigner |
data[].basicInfo.citizenId | string | identification No. |
data[].basicInfo.nationality | string | Country/Region |
data[].basicInfo.nativePlace | string | Birthplace |
data[].basicInfo.experience | integer | Work experienceOptional values are:0 :Graduates-1 :Current studentsOthersNumber:represents specific year |
data[].basicInfo.skill | string | Skill |
data[].basicInfo.awards | string | Awards |
data[].basicInfo.personalInterests | string | Hobby |
data[].basicInfo.lastWorkedJobTitle | string | Current position |
data[].basicInfo.graduateDate | string | Graduation time |
data[].basicInfo.personal | string | Self- description |
data[].basicInfo.location | string | Location,such as Beijing |
data[].basicInfo.academicDegree | string | Highest degree, one of the followings: Bachelor, Master, Doctor, Senior high school, Junior college, Technical secondary school, MBA, Others |
data[].basicInfo.lastCompany | string | Recent company,optional values are:nullno recent company,xxxServed company name |
data[].basicInfo.lastSpeciality | string | Recent graduate major |
data[].basicInfo.industry | string | Industry |
data[].basicInfo.forwardIndustry | string | Preferred industry |
data[].basicInfo.startFrom | string | On-duty time |
data[].basicInfo.salary | string | Current salary |
data[].basicInfo.aimSalary | string | Preferred salary |
data[].basicInfo.forwardLocation | string | Preferred city |
data[].basicInfo.ethnicCode | integer | Ethnicity code(null if Ethnicity is empty, see attachment for code details) |
data[].basicInfo.nativePlaceCode | integer | Birthplace code (null if native place is empty, see attachment for code details) |
data[].basicInfo.nationalityCode | integer | Nationality code(null if nationality is empty, see attachment for code details) |
data[].basicInfo.genderCode | integer | Gender code(null if gender is empty, see attachment for code details) |
data[].basicInfo.academicDegreeCode | integer | Recent graduate major |
data[].basicInfo.lastUpdate | string | Update resume time |
data[].basicInfo.blacklistTags | string | Blacklist tag(only in blacklist talent pool) |
data[].basicInfo.blacklistDetail | string | Blacklist reason(only in blacklist talent pool) |
data[].basicInfo.married | string | Marital status Optional values are:'Married' 'Single' 'Divorced' 'Widowed' 'CIVILUNION' 'COHABITATING' 'MARRIED' 'DIVORCED' 'ENGAGED' 'SEPARATED' 'SINGLE' 'WIDOWED' |
data[].basicInfo.political | string | Political status |
data[].basicInfo.customFields | array | Custom field list |
data[].basicInfo.customFields[].builtinInfoId | Long | Locate the custom information and its module, such as which specific work experience or education experience corresponds to a certain custom information, etc. |
data[].basicInfo.customFields[].customFieldId | Long | Custom fieldID |
data[].basicInfo.customFields[].name | String | Custom field name |
data[].basicInfo.customFields[].value | Booleanor*String* | Custom field value,这个根据Field typeResponse不同Type的Value |
data[].basicInfo.customFields[].now | String | This field exists when the custom field is a time period, indicating whether the end time is "today". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
data[].basicInfo.customFields[].section | String | Field attribution, the declaration is a custom field under which of the followings custom field: basicInfo Basic information jobIntention Preferred jobexperienceInfo Work experience educationInfo Educational background practiceInfo Intern experienceprojectInfo Project experience languageInfo Language skill selfDescription Self- description awardInfo Awards |
data[].basicInfo.customFields[].index | number | Index. For modules with multiple data such as experienceInfo, educationInfo or custom modules (e.g. emergency contacts), index indicates that this field is the custom field information of which piece of data. |
data[].basicInfo.customFields[].codes | array['String'] | The code of options value of choice question |
data[].basicInfo.label | array | Candidate tag |
data[].basicInfo.label[].id | integer | Tag id |
data[].basicInfo.label[].label | string | Tag name |
data[].basicInfo.label[].type | number | TagType Optional values are: 1 :Smart tag2 :Manual tag |
data[].basicInfo.educationInfo[] | array | Education experience |
data[].basicInfo.educationInfo[].id | string | Education experience id |
data[].basicInfo.educationInfo[].startDate | string | School start date,accurate to month. , such as2010-09, 2008 |
data[].basicInfo.educationInfo[].endDate | string | School end date,accurate to month. , such as2010-09, 2008 |
data[].basicInfo.educationInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now,now=true, the value of endDate may be any value at this time, just ignore endDate |
data[].basicInfo.educationInfo[].school | string | School |
data[].basicInfo.educationInfo[].speciality | string | Major |
data[].basicInfo.educationInfo[].academicDegree | string | Degree, one of the followings: Bachelor, Master, Doctor, Senior high school, Junior college, Technical secondary school, MBA, Others |
data[].basicInfo.awardInfo[] | array | Awards |
data[].basicInfo.awardInfo[].id | string | Awards id |
data[].basicInfo.awardInfo[].awardDate | string | Winning date |
data[].basicInfo.awardInfo[].awardName | string | Award name |
data[].basicInfo.projectInfo | array | Project experience |
data[].basicInfo.projectInfo[].id | string | Project experience id |
data[].basicInfo.projectInfo[].startDate | string | Project start date,accurate to month. , such as2010-09, 2008 |
data[].basicInfo.projectInfo[].endDate | string | Project end date,accurate to month. , such as2010-09, 2008 |
data[].basicInfo.projectInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
data[].basicInfo.projectInfo[].projectName | string | Project name |
data[].basicInfo.projectInfo[].title | string | Job title and duty |
data[].basicInfo.projectInfo[].projectDescription | string | Project description |
data[].basicInfo.projectInfo[].responsibilities | string | Responsibility in project |
data[].basicInfo.languageInfo | array | Language skill |
data[].basicInfo.languageInfo[].id | string | Language skill id |
data[].basicInfo.languageInfo[].language | string | Language type |
data[].basicInfo.languageInfo[].level | string | Proficiency |
data[].basicInfo.languageInfo[].listenAndSpeak | string | Listening and speaking |
data[].basicInfo.languageInfo[].readAndWrite | string | Reading and writing |
data[].basicInfo.practiceInfo[] | array | Intern experience |
data[].basicInfo.practiceInfo[].id | string | Intern experience id |
data[].basicInfo.practiceInfo[].startDate | string | Intern start time |
data[].basicInfo.practiceInfo[].endDate | string | Intern end time |
data[].basicInfo.practiceInfo[].company | string | Company name |
data[].basicInfo.practiceInfo[].title | string | Job title |
data[].basicInfo.practiceInfo[].location | string | Work location |
data[].basicInfo.practiceInfo[].industry | string | Industry |
data[].basicInfo.practiceInfo[].leader | string | Report to |
data[].basicInfo.practiceInfo[].department | string | Department |
data[].basicInfo.practiceInfo[].salary | string | Salary |
data[].basicInfo.practiceInfo[].summary | string | Job responsibility |
data[].basicInfo.practiceInfo[].type | string | Company type |
data[].basicInfo.practiceInfo[].size | string | Company size |
data[].basicInfo.interestSource[].id | Ingeger | id |
data[].basicInfo.interestSource[].name | string | name |
data[].basicInfo.interestSource[].email | string | |
data[].basicInfo.experienceInfo[] | array | Work experience |
data[].basicInfo.experienceInfo[].id | string | Work experience id |
data[].basicInfo.experienceInfo[].startDate | string | Work start time,accurate to month. , such as2010-09, 2008 |
data[].basicInfo.experienceInfo[].endDate | string | Work end time,accurate to month. , such as2010-09, 2008 |
data[].basicInfo.experienceInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
data[].basicInfo.experienceInfo[].company | string | Company name |
data[].basicInfo.experienceInfo[].title | string | Job title |
data[].basicInfo.experienceInfo[].location | string | Work location |
data[].basicInfo.experienceInfo[].industry | string | Industry |
data[].basicInfo.experienceInfo[].leader | string | 汇报Object |
data[].basicInfo.experienceInfo[].department | string | Department |
data[].basicInfo.experienceInfo[].salary | string | Salary |
data[].basicInfo.experienceInfo[].summary | string | Job responsibility |
data[].basicInfo.experienceInfo[].reasonForLeaving | string | Reason for resignation |
data[].basicInfo.experienceInfo[].underlingNumber | string | No.of subordinate |
data[].basicInfo.experienceInfo[].type | string | Company type |
data[].basicInfo.experienceInfo[].size | string | Company size |
data[].basicInfo.archived | boolean | Whether to archive the application |
data[].basicInfo.archivedAt | string | Archive application time |
data[].basicInfo.archiveReasonId | integer | Reason for archiveID |
data[].basicInfo.archiveReasons | string | Reason for archive |
data[].basicInfo.archiveReasonsDetails | string | Reason for archive details |
data[].basicInfo.talentPoolsList | Array | Candidate's talent pool |
data[].basicInfo.talentPoolsList[].talentPoolId | integer | Talent pool id |
data[].basicInfo.talentPoolsList[].name | string | Talent pool name |
data[].basicInfo.talentPoolsList[].description | string | Talent pool description |
data[].basicInfo.personalUrl | string | Personal link |
data[].basicInfo.portraitUrl | string | The link of Candidate's portrait is valid for 1 hour |
data[].basicInfo.standardResumeUrl | string | Download link of standard resume |
data[].basicInfo.resumeUrl | string | Download link of original resume |
data[].basicInfo.ehrCandidateExternalLink | string | The link of candidate details can be opened and viewed directly in the browser, and the link is valid for 14 days by default |
data[].basicInfo.invitationUpdateStatus | integer | Invitation to update status Optional values are: 0 :Not invited1 : not update2 : updated |
data[].basicInfo.movedAt | string | Stage moving time |
data[].basicInfo.createdAt | string | Candidate application created time |
data[].basicInfo.updatedAt | string | Candidate application update time |
data[].basicInfo.appliedAt | string | apply time |
data[].basicInfo.campusSiteId | number | application的Campus recruitment station Title,hireMode=2时存在 |
data[].basicInfo.referrer | object | Referrer info |
data[].basicInfo.referrer.name | string | Referrer name |
data[].basicInfo.referrer.email | string | Referrer email |
data[].basicInfo.referrer.phone | string | Referrer phone |
data[].basicInfo.referrer.number | string | Employee No. of referrer,optional values are:null no employee No.,xxxEmployee No. |
data[].basicInfo.referrer.employeeId | string | Employee No. of referrer2 |
data[].basicInfo.assignments[] | array | Referrer info |
data[].basicInfo.assignments[].assigneeId | Long | Referee |
data[].basicInfo.assignments[].assignerId | Long | Referrer |
data[].basicInfo.assignments[].result | string | Referral result |
data[].basicInfo.assignments[].sentAt | date | The time when the notification was sent to the forwarded person |
data[].basicInfo.campusSiteId | integer | application的Campus recruitment station id |
data[].basicInfo.sourceType | integer | From Optional values are: 1 :represents Active search2 :represents Direct delivery3 :represents Talent recommendation. |
data[].basicInfo.sourceList | Array | Source level,the group will in numerical order, such as Tier-1 source, Tier-2 level, Tier-3 level |
data[].basicInfo.sourceList[].id | integer | Source id (Tier-1 level doesn't exist) |
data[].basicInfo.sourceList[].name | string | Source name |
data[].basicInfo.sourceList[].isBuiltin | number | Whether the system has a built-in channel |
data[].basicInfo.hireMode | integer | Recruitment mode Optional value: 1 :experienced hires2 :Campus recruitment |
data[].basicInfo.pipeline | object | application of the process |
data[].basicInfo.pipeline.name | string | Process name |
data[].basicInfo.pipeline.id | integer | Process id |
data[].basicInfo.stage | object | Stage |
data[].basicInfo.stage.id | integer | Stage id |
data[].basicInfo.stage.name | string | Stage name (after archiving is the stage name before archiving) |
data[].basicInfo.stage.type | integer | Current stage type Optional values are: 100 :Initial screen101 :Offer102 :To be onboarded200 :Selected201 :Interview202 :Test205 :No type206 :Work trail |
data[].basicInfo.probation | integer | Probationary period |
data[].basicInfo.headcountId | integer | Onboarding HC ID |
data[].basicInfo.headcountNumber | string | Onboarding HC code |
data[].basicInfo.headcountName | string | Onboarding HC name |
data[].basicInfo.attachments | array | The Candidate's attachment |
data[].basicInfo.attachments[].applicationId | integer | Application id |
data[].basicInfo.attachments[].name | string | The doc. name of Candidate's attachment(with file suffix) |
data[].basicInfo.attachments[].applyFormId | number Registration form template id |
|
data[].basicInfo.attachments[].size | integer | Candidate attachment size |
data[].basicInfo.attachments[].createTime | string | Attachment upload or generation time |
data[].basicInfo.attachments[].url | string | The download url of Candidate attachment |
data[].basicInfo.attachments[].customFieldId | integer | Custom attachment field ID |
data[].basicInfo.attachments[].customFieldName | string | Custom attachment field names |
data[].basicInfo.attachments[].type | string | Candidate attachment type Optional values are: Candidate_UPLOAD_ATTACHMENT Upload by candidateUPLOAD_PORTRAIT Candidate portraitHR_UPLOAD_ATTACHMENT Upload manually by HRHM_UPLOAD_ATTACHMENT Manual upload on the HR sideINTERVIEW_ACCEPT Attachment of the registration form generated by the candidate accepted interviewINTERVIEW_SIGNIN Registration form attachment generated by candidate interview sign-inOFFER_ACCEPT Attachment of the registration form generated by the candidate accepted offerMERGE_APPLICATION_ATTACHMENT Attachments generated by mergering candidatesINVITE_UPDATE_RESUME Invite Candidates to update the registration form for resume generation |
data[].basicInfo.remarks | array | Candidate note |
data[].basicInfo.remarks[].creator | object | The creator info of note |
data[].basicInfo.remarks[].creator.name | string | The creator name of note |
data[].basicInfo.remarks[].creator.phone | string | The creator phone of note |
data[].basicInfo.remarks[].creator.email | string | The creator email of note |
data[].basicInfo.remarks[].creator.number | string | The creator's employee No. of note |
data[].basicInfo.remarks[].creator.employeeId | string | The creator's employee No. of note2 |
data[].basicInfo.remarks[].content | string | Note content |
data[].basicInfo.remarks[].targets | array | The information of the person who mentioned by '@' in the note, which format is the same as the creator' s information |
data[].basicInfo.remarks[].isPrivate | boolean | Whether the not is private |
data[].basicInfo.remarks[].type | string | Note type: manually |
data[].basicInfo.remarks[].createdAt | string | Time for creating note |
data[].basicInfo.owner | object | Candidate owner |
data[].basicInfo.owner.name | string | Candidate owner name |
data[].basicInfo.owner.phone | string | Candidate owner phone |
data[].basicInfo.owner.email | string | Candidate owner email |
data[].basicInfo.owner.number | string | Candidate owner employee No. |
data[].basicInfo.owner.employeeId | string | Candidate owner employee No.2 |
data[].basicInfo.idCardFrontList | string | Upload id card picture (portrait side) |
data[].basicInfo.idCardBackList | string | Upload id card picture (national emblem side) |
data[].basicInfo.idCardSignOrganization | string | Issuing authority of id card |
data[].basicInfo.idCardValidity | string | id card validity period |
customAttachmentList | obj | All attachments of Candidate's standard resume |
customAttachmentList.customUpload+customId | ary | The key of the attachment of the Candidate's standard resume is composed of customUpload (fixed string) + customid |
customAttachmentList.customUpload+customId[].attachmentName | string | Attachment name |
customAttachmentList.customUpload+customId[].attachmentSize | number | Attachment size (byte) |
customAttachmentList.customUpload+customId[].CandidateId | number | Candidate id |
customAttachmentList.customUpload+customId[].customId | number | Custom field id |
customAttachmentList.customUpload+customId[].downloadUrl | string | The download address will invalid in 24 hours |
customAttachmentList.customUpload+customId[].createdAt | string | Created time of attachment (timestamp format) |
data[].offerInfo | object | Offer info |
data[].offerInfo.applicationId | integer | Application id |
data[].offerInfo.approvalStatus | string | Approval status Optional values are: UNINITIATED : UninitiatedINPROGRESS : In processAPPROVED : ApprovedREJECTED : DeniedRECALLED : Withdrawn |
data[].offerInfo.status | string | Optional values are:notCreated : To be createdpending : To be sentsent :Pendingaccepted : Acceptedrejected : Rejected |
data[].offerInfo.finishedAt | string | Accept offer time |
data[].offerInfo.checkinDate | string | Estimated start time |
data[].offerInfo.creator | object | Offer creator info |
data[].offerInfo.creator.name | string | Offer creator name |
data[].offerInfo.creator.email | string | Offer creator email |
data[].offerInfo.creator.phone | string | offer creator phone number |
data[].offerInfo.creator.number | string | offerCreator employee No. |
data[].offerInfo.creator.employeeId | string | offerCreator employee No.2 |
data[].offerInfo.attachment | array | Offer attachment list |
data[].offerInfo.attachment[].name | string | Offer attachment name |
data[].offerInfo.attachment[].size | number | Offer attachment size |
data[].offerInfo.attachment[].downloadUrl | string | The offer attachment download link is valid for one hour. |
data[].offerInfo.attachment[].attachmentType | integer | Offer attachment type Optional values are: 0 :Attachment for Candidate1 :Attachments sent to approvers2 :Offer attachment |
data[].offerInfo.offerHistoryList | array | offer sending record |
data[].offerInfo.offerHistoryList[].sentAt | string | offer sending time |
data[].offerInfo.offerHistoryList[].sentUser | object | offer sender info |
data[].offerInfo.offerHistoryList[].sentUser.name | string | offer sender name |
data[].offerInfo.offerHistoryList[].sentUser.email | string | offer sender email |
data[].offerInfo.offerHistoryList[].sentUser.phone | string | offer sender phone number |
data[].offerInfo.offerHistoryList[].sentUser.number | string | offer sender employee No. |
data[].offerInfo.offerHistoryList[].sentUser.employeeId | string | offer sender employee No.2 |
data[].offerInfo.offerHistoryList[].status | string | Accepted: acceptedRejected: rejected |
data[].offerInfo.offerHistoryList[].operationType | integer | Operation type Optional values are: 1 :Candidate2 :Manual mark by HR3 :API mark |
data[].offerInfo.hcInfo | object | The headcount info selected by offer |
data[].offerInfo.hcInfo.id | integer | The headcount id selected by offer |
data[].offerInfo.hcInfo.number | string | The headcount code selected by offer |
data[].offerInfo.hcInfo.name | string | The headcount name selected by offer |
data[].offerInfo.hcInfo.status | string | The headcount status selected by offer |
data[].offerInfo.hcInfo.ownerEmployeeId | string | The headcount selected by the offer is responsible for the manual number |
data[].offerInfo.hcInfo.department | object | Offer selected Headcount department information |
data[].offerInfo.hcInfo.department.departmentName | string | Department name |
data[].offerInfo.hcInfo.department.departmentCode | string | Department code |
data[].offerInfo.hcInfo.department.departmentPath | string | Department path |
data[].offerInfo.hcInfo.department.parentAPICode | string | Upper-department code |
data[].offerInfo.hcInfo.manager | object | Information about the person in charge of the Headcount selected by the offer |
data[].offerInfo.hcInfo.manager.name | string | Name |
data[].offerInfo.hcInfo.manager.email | string | |
data[].offerInfo.hcInfo.manager.phone | string | Phone number |
data[].offerInfo.hcInfo.manager.number | string | Employee No. |
data[].offerInfo.hcInfo.manager.employeeId | string | Employee No.2 |
data[].offerInfo.locationString | string | Onboard Location |
data[].offerInfo.dutyLevelName | string | Position level name |
data[].offerInfo.createdAt | string | Offer creation time |
data[].offerInfo.finishedAt | string | Offer acceptance time |
data[].offerInfo.jobRankType | string | Job level type |
data[].offerInfo.jobRankLevel | number | Job level |
data[].offerInfo.jobRankName | string | Job level title |
data[].offerInfo.salaryType | integer | Salary type Optional value 1 : Hourly salary2 : Daily salary3 :Hourly salary4 :Annual salary |
data[].offerInfo.salaryNumber | string | Salary value |
data[].offerInfo.department | object | onboarded department info |
data[].offerInfo.department.id | string | onboarded department id |
data[].offerInfo.department.departmentName | string | Onboarding department name |
data[].offerInfo.department.departmentCode | string | onboarded department code |
data[].offerInfo.department.departmentPath | string | The full path of onboarding department |
data[].offerInfo.department.parentAPICode | string | Parent department code |
data[].offerInfo.customFields | array | Offer custom field |
data[].offerInfo.customFields[].name | string | Offer custom field name |
data[].offerInfo.customFields[].value | string | Offer custom field value |
data[].offerInfo.customFields[].codes | string | Custom code for multiple choice questions (valid for multiple choice questions with code) |
data[].offerInfo.attachmentList | array | Offer attachment list |
data[].offerInfo.attachmentList[].name | string | Offer attachment name |
data[].offerInfo.attachmentList[].size | number | Offer attachment size |
data[].offerInfo.attachmentList[].downloadUrl | string | The download link of offer attachment,only valid for 1 hour |
data[].offerInfo.attachmentList[].attachmentType | number | Offer attachment type Optional values are: 0 :Attachment for Candidate1 :Attachment sent to approver2 :Offer attachment |
data[].interviewInfo | array | Interview info |
data[].interviewInfo[].applicationId | number | Application id |
data[].interviewInfo[].groupInterviewId | number | Interview id |
data[].interviewInfo[].groupId | string | Interview group id |
data[].interviewInfo[].noInterview | boolean | Whether there is no interview feedback |
data[].interviewInfo[].status | string | Interview status:Cancelled, unfinished, Finished |
data[].interviewInfo[].attendStatus | string | CandidateInterview status:No feedback, No show, Rejected, Accepted |
data[].interviewInfo[].signInStatus | string | Interview check-in status: signed in, not signed in |
data[].interviewInfo[].jobType | string | Video interview package type eg: 'technical', 'non-technical', etc. |
data[].interviewInfo[].interviewType | integer | Interview type. 1:On-site interview 3:Phone interview 4、Video interview |
data[].interviewInfo[].jobType | string | Video interview package -> When the interview type is video interview, this item may have a value |
data[].interviewInfo[].locationId | integer | Interview location ID |
data[].interviewInfo[].locationCountry | string | Interview location -Country |
data[].interviewInfo[].locationAddress | string | Interview location -Full address |
data[].interviewInfo[].locationCityId | integer | Interview location -CityID |
data[].interviewInfo[].meetingRoomId | integer | Meeting room ID |
data[].interviewInfo[].meetingRoomName | string | Meeting room title |
data[].interviewInfo[].participated | string | Interview Feedback Category -> Interview Not Conducted, Feedback Filled, Feedback Not Filled |
data[].interviewInfo[].roundId | integer | Interview roundsID |
data[].interviewInfo[].roundName | string | Interview rounds title |
data[].interviewInfo[].roundEnglishName | string | Round English title |
data[].interviewInfo[].createAt | string | Time for creating interview |
data[].interviewInfo[].startTime | string | Interview start time |
data[].interviewInfo[].duration | integer | Interview duration |
data[].interviewInfo[].interviewArranger | object | Interview IC |
data[].interviewInfo[].interviewArranger.name | string | Interview IC name |
data[].interviewInfo[].interviewArranger.email | string | Interview IC email |
data[].interviewInfo[].interviewArranger.phone | string | Interview IC phone number |
data[].interviewInfo[].interviewArranger.number | string | Interview IC employee No. |
data[].interviewInfo[].interviewArranger.employeeId | string | Interview IC employee No. 2 |
data[].interviewInfo[].satisfactionRecord | object | Information about interview satisfaction |
data[].interviewInfo[].satisfactionRecord.sendTime | string | The sending time of interview satisfaction evaluation |
data[].interviewInfo[].satisfactionRecord.isAnonymous | Boolean | Whether to anonymously evaluate |
data[].interviewInfo[].satisfactionRecord.content | string | Evaluation content, json format: {"customFields":[{"options":[//options"option 1","option 2","option 3"],"subTitle":"single-choice question description 111", //Subtitle "title": "Multiple-choice question", //Title "type": "single", //Type single multiple-choice question, mutiSelect multiple-response question, describe description question "value": "0"// Single choice value (subscript starts from 0)},{"options":["option 11","option 22","option 33","option 44"],"subTitle":"Multiple response description 333 ","title":"multiple response","type":"mutiSelect",//multiple response "value":"[0,2,1]"//multiple response value (subscript starts from 0, Unordered)},{"subTitle":"Description question description 4444","title":"Description question","type":"describe",//Description question "value":"Description question result"//Description The value of the title}],"essaySectionTitle":"Other evaluations",//Other evaluations (can be displayed through the switch configuration when setting the evaluation table) "essayValue":"Other evaluation results"//The corresponding value of other evaluations} |
data[].interviewInfo[].satisfactionRecord.satisfactionDimensions | array | array of dimensions (interview process) |
data[].interviewInfo[].satisfactionRecord[].name | string | Dimension name |
data[].interviewInfo[].satisfactionRecord[].name | string | Dimension corresponded value |
data[].interviewInfo[].interviewerFeedbacks | array | Interviewer feedback list |
data[].interviewInfo[].interviewerFeedbacks[].interviewer | object | Interviewer info |
data[].interviewInfo[].interviewerFeedbacks[].interviewer.name | string | Interviewer name |
data[].interviewInfo[].interviewerFeedbacks[].interviewer.email | string | Interviewer email |
data[].interviewInfo[].interviewerFeedbacks[].interviewer.phone | string | Interviewer phone |
data[].interviewInfo[].interviewerFeedbacks[].interviewer.employeeId | string | Interviewer employee No.2 |
data[].interviewInfo[].interviewerFeedbacks[].interviewer.number | string | Interviewer employee No. |
data[].interviewInfo[].interviewerFeedbacks[].resultName | string | Interview feedback |
data[].interviewInfo[].interviewerFeedbacks[].resultType | integer | Type of interview feedback result 0: Dissatisfied 1: Satisfaction |
data[].interviewInfo[].interviewerFeedbacks[].feedback | string | Interview feedback content |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTime | string | Interview feedback time |
data[].interviewInfo[].interviewerFeedbacks[].totalWeightScore | string | Weight interview evaluation form total score |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult | array | Information of interview evaluation |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].title | string | Module title |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].description | string | Template description |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].result | string | Module score |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].calcScoreType | string | avg: Average, total: Total score (valid when type=1 ) |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects | array | Information for each sub-question under the module |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].type | integer | Question type Optional value: 1 :Scoring question2 : Multiple choice3 : Description4 : Multiple response |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].title | string | Sub-question title |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].description | string | Sub-question description |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].result | integer | Sub-question results: Scoring title is the value of the selected score; single-choice question is the index value of the option, starting from 0; description title is the string of description; multiple-choice question is an array of index values. type=2 single-choice question, return Value is "result": 0, question type=4 multiple-choice question return value is "result": [1,2] |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].reason | string | Score review |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].options | array | Array of option strings (valid when type is 2) |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].ratio | double | Common evaluation form coefficient |
data[].interviewInfo[].interviewerFeedbacks[].feedbackTemplateResult[].subjects[].weight | integer | Weights |
data[].interviewInfo[].interviewFeedbackUrl | string | The interview feedback summary file (only includes the interview feedback generated by the candidate under this application) download link, HTTP GET request to this URL can download the interview feedback summary file, this link is time-sensitive, the expiration time is 1 hour, and needs to be received Download and save on server as soon as possible after request |
data[].shigongInfo | object | Work trial info |
data[].shigongInfo.applicationId | integer | Application id |
data[].shigongInfo.shigongs | array | Work trial info |
data[].shigongInfo.shigongs[].startTime | string | Work trial start time |
data[].shigongInfo.shigongs[].endTime | string | Work trial end time |
data[].shigongInfo.shigongs[].location | string | Work trial location |
data[].shigongInfo.shigongs[].manager | object | Work trial IC info |
data[].shigongInfo.shigongs[].manager.name | string | Work trial IC name |
data[].shigongInfo.shigongs[].manager.email | string | Work trial IC email |
data[].shigongInfo.shigongs[].manager.phone | string | Work trial IC Phone number |
data[].shigongInfo.shigongs[].manager.number | string | Work trial IC employee No. |
data[].shigongInfo.shigongs[].manager.employeeId | string | Work trial IC employee No. 2 |
data[].shigongInfo.shigongs[].shigongStatus | string | Work trial status Not scheduled Waiting feedback Satisfaction Dissatisfied |
data[].shigongInfo.shigongs[].feedback | string | Work trial feedback info |
data[].shigongInfo.shigongs[].protocolStatus | string | Work trial agreement status |
data[].shigongInfo.shigongs[].signStatus | string | Check-in status |
data[].examInfo | object | Exam info |
data[].examInfo.applicationId | integer | Application id |
data[].examInfo.exams | array | Exam&assessment info |
data[].examInfo.exams[].name | string | Exam&assessment name |
data[].examInfo.exams[].createTime | string | Exam start time |
data[].examInfo.exams[].type | string | Exam&assessment Typeexam evaluation |
data[].examInfo.exams[].source | string | Exam&assessment agency |
data[].examInfo.exams[].result | String | Exam&assessment result |
data[].examInfo.exams[].detailResult | string | Exam&assessment details result |
data[].examInfo.exams[].examAttachments | array | Exam&assessment attachment |
data[].examInfo.exams[].examAttachments[].attachmentName | string | Exam&assessment Attachment name |
data[].examInfo.exams[].examAttachments[].attachmentUrl | string | Exam&assessment attachment link |
data[].examInfo.exams[].examAttachments[].jobId | string | The position id that initiated exam&assessment |
data[].examInfo.exams[].examAttachments[].applicationId | string | The application id that initiated exam&assessment |
data[].examInfo.exams[].examAttachments[].result | string | Exam&assessment result |
data[].examInfo.exams[].examAttachments[].detailResult | string | Exam&assessment details result |
data[].examInfo.exams[].reportLinks | array | Exam&assessment report link |
data[].examInfo.exams[].reportLinks[].applicationId | string | The application id that initiated exam&assessment |
data[].examInfo.exams[].reportLinks[].jobId | string | The position id that initiated exam&assessment |
data[].examInfo.exams[].reportLinks[].name | string | Exam&assessment Title |
data[].examInfo.exams[].reportLinks[].reportLink | string | Exam&assessment report link |
data[].examInfo.exams[].reportLinks[].result | string | Exam&assessment result |
data[].examInfo.exams[].reportLinks[].detailResult | string | Exam&assessment details result |
data[].examInfo.exams[].reportLinks[].type | string | Exam type (Exam or assessment) |
data[].examInfo.surveys | array | Pre-employment screening (PES) info |
data[].examInfo.surveys[].name | string | Pre-employment screening (PES) name |
data[].examInfo.surveys[].date | string | Pre-employment screening (PES) date |
data[].examInfo.surveys[].source | string | Pre-employment screening (PES) agency |
data[].examInfo.surveys[].result | string | Pre-employment screening (PES) result |
data[].examInfo.surveys[].url | string | The link of PES report |
data[].examInfo.surveys[].attachmentName | string | Pre-employment screening (PES) attachment |
data[].examInfo.surveys[].attachments[] | array | PES multiple attachments (the new version of the single attachment and multiple attachments are in this attachment collection. The original single attachment results are only used for historical compatibility) |
data[].examInfo.surveys[].attachments[].url | string | The link of PES report |
data[].examInfo.surveys[].attachments[].attachmentName | string | Attachment name |
data[].jobInfo | object | Position info |
data[].jobInfo.id | string | Position id |
data[].jobInfo.mjCode | string | Position No.,publishing to external systems remains the same |
data[].jobInfo.title | string | Job title |
data[].jobInfo.department | object | Department |
data[].jobInfo.department.info | object | Department details info |
data[].jobInfo.department.info.departmentCode | string | Department code,department id in the client system |
data[].jobInfo.department.info.id | string | DepartmentID,department id in the Moka system |
data[].jobInfo.department.info.departmentName | string | Department name |
data[].jobInfo.department.info.departmentPath | string | The full path of the department where the position is located, from superior to subordinate, separated by / |
data[].jobInfo.department.name | string | Parent department name |
data[].jobInfo.department.parentId | string | Parent department ID,department id in the Moka system |
data[].jobInfo.commitment | string | Employment type Optional value: Full-time Part-time Internship Other |
data[].jobInfo.stores | array | Store name |
data[].jobInfo.number | number | No.of vacancy |
data[].jobInfo.status | string | Position status Optional value open :openclosed :Close |
data[].jobInfo.jobRanksInfo[].name | string | Job level name |
data[].jobInfo.jobRanksInfo[].type | string | Job level type |
data[].jobInfo.jobRanksInfo[].level | number | Job level grade |
data[].jobInfo.priorityId | integer | Job priority id |
data[].jobInfo.priorityName | string | Job priority title |
data[].jobInfo.competencyType | string | Function type |
data[].jobInfo.category | string | Job category |
data[].jobInfo.jobDescription | string | Job description |
data[].jobInfo.customFields | array | job custom field |
data[].jobInfo.customFields[].name | string | job custom field name |
data[].jobInfo.customFields[].value | string | job custom field value |
data[].jobInfo.startTime | string | Start recruitment time |
data[].jobInfo.completeTime | string | Estimated finish time |
data[].jobInfo.jobManager | object | Recruiter |
data[].jobInfo.jobManager.name | string | Recruiter name |
data[].jobInfo.jobManager.phone | string | The phone of position leader |
data[].jobInfo.jobManager.email | string | Position leader email |
data[].jobInfo.jobManager.number | string | Position leader phone employee No. |
data[].jobInfo.jobManager.employeeId | string | Position leader phone employee No.2 |
data[].jobInfo.jobAssistants | array | Position assistant |
data[].jobInfo.jobAssistants[].name | string | Position assistant name |
data[].jobInfo.jobAssistants[].phone | string | Position assistant phone |
data[].jobInfo.jobAssistants[].email | string | Position assistant email |
data[].jobInfo.jobAssistants[].number | string | Position assistant employee No. |
data[].jobInfo.jobAssistants[].employeeId | string | Position assistant employee No.2 |
data[].jobInfo.jobHiringManager | array | Hiring manager |
data[].jobInfo.jobHiringManager[].name | string | Hiring manager name |
data[].jobInfo.jobHiringManager[].email | string | Hiring manager email |
data[].jobInfo.jobHiringManager[].phone | string | Hiring manager phone |
data[].jobInfo.jobHiringManager[].number | string | Hiring manager employee No. |
data[].jobInfo.jobHiringManager[].employeeId | string | Hiring manager employee No.2 |
data[].jobInfo.jobInterviewers | array | Interviewer |
data[].jobInfo.jobInterviewers[].name | string | Interviewer name |
data[].jobInfo.jobInterviewers[].email | string | Interviewer email |
data[].jobInfo.jobInterviewers[].phone | string | Interviewer phone |
data[].jobInfo.jobInterviewers[].number | string | Interviewer employee No. |
data[].jobInfo.jobInterviewers[].employeeId | string | Interviewer employee No.2 |
data[].jobInfo.campusSiteIds | array | Campus recruitment station id |
data[].jobInfo.campusSites | array | Campus recruitment station |
data[].jobInfo.hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
data[].jobInfo.headcountInfo | array | HC information associated with the position |
data[].jobInfo.headcountInfo[].id | number | Headcount ID |
data[].jobInfo.headcountInfo[].number | string | Headcount code |
data[].jobInfo.headcountInfo[].name | string | Headcount name |
data[].jobInfo.headcountInfo[].status | string | Headcount status |
data[].jobInfo.headcountInfo[].customFields[].name | string | HCCustom field name |
data[].jobInfo.headcountInfo[].customFields[].value | string | HCCustom field value |
data[].activities.operator | object | Operator info |
data[].activities.operator.id | integer | Operator id in Moka |
data[].activities.operator.name | string | Operator name |
data[].activities.operator.email | string | Operator infoEmail |
data[].activities.operator.phone | string | Operator info Phone number |
data[].activities.operator.number | string | Operator No.1 |
data[].activities.operator.employeeId | string | Operator No.2 |
data[].activities.type | string | 日志Type Optional values are: ADD_Candidate : Add candidateMOVE_STAGE : Moving stage |
data[].activities.createAt | string | Event start time |
data[].activities.toStageName | string | Stage name after moving |
data[].activities.fromStageName | string | Stage name before moving |
data[].activities.toStageId | integer | Stage id after moving |
data[].activities.fromStageId | integer | Stage id before moving |
data[].activities.source | string | applicationFrom |
data[].customstyleAttachments | object | Custom application registration form |
data[].customstyleAttachments.type | string | attachmentType固定doc |
data[].customstyleAttachments.createTime | string | Time string |
data[].customstyleAttachments.customFieldName | string | CustomAttachment name |
data[].customstyleAttachments.url | string | Download link of attachment |
Get all candidate info of each stages
This interface only returns basic information and does not return attachment links.
> Request example
$ curl https://api.mokahr.com/api-platform/v1/data/moved_applications
> Response example
[
{
"applicationId": 23191,
"CandidateId": 12552,
"moved_at": "2019-01-25T10:25:36.000Z",
"name": "曹大帅",
"phone": "15013186607",
"email": "1170616425@qq.com",
"gender": "Male",
"birthYear": 1991,
"birthDate": "2020-03-17T00:00:00.000Z",
"nationality": null,
"experience": 2,
"ethnic": null,
"citizenId": null,
"nativePlace": "",
"location": "湖北-武汉",
"source": "智联",
"sourceType": 2,
"academicDegree": "Master degree",
"lastSpeciality": "人力资源管理",
"married": "Single",
"jobCommitment": " Full-time",
"hireMode": 1,
"departmentCode": null,
"parentDepartmentCode": null,
"resumeKey": "1f0f3d5f-17d4-4e21-a135-a8dbb8648297.html",
"stageName": "用人Department筛选",
"stageType": 200,
"nativePlaceCode": null,
"nationalityCode": null,
"genderCode": 0,
"academicDegreeCode": 5,
"ethnicCode": null,
"job": {
"title": "5432154321543215432154321v543215432154321",
"department": null,
"departmentCode": null,
"parentDepartmentCode": null,
"competencyType": null,
"jobId": "ea932057-2637-4408-98a2-a3366b4ade14"
},
"jobManager": {
"name": "Moka小助手",
"email": "why947608878@163.com",
"phone": "18610778251",
"employeeId": "01"
},
"resumeUrl": "",
"educationInfo": [
{
"id": 35764,
"startDate": "2014-09",
"endDate": "2017-06",
"school": "长江大学",
"speciality": "农业经济管理",
"academicDegree": "Master degree",
"startTime": 1409500800,
"endTime": 1496246400,
"now": false
},
{
"id": 35765,
"startDate": "2010-09",
"endDate": "2014-06",
"school": "长江大学",
"speciality": "人力资源管理",
"academicDegree": "Bachelor degree",
"startTime": 1283270400,
"endTime": 1401552000,
"now": false
}
],
"experienceInfo": [],
"awardInfo": [],
"customFields": [],
"referrer": null,
"headcountInfo": [],
"jobRanksInfo": [],
"offer": null,
"projectInfo": [
{
"startDate": "2014-06",
"endDate": "2014-09",
"projectName": "土地流转确权工作",
"title": "",
"projectDescript": "1.了解荆州City农村人口占全City的比for example. \r\n2.了解荆州City农村土地流转的面积. \r\n3.了解荆州City土地流转的模式. \r\n4.了解荆州City农村农户进行土体流转出现的问题和法律纠纷. \r\n5.整理相关文献资料,利用搜集到的土地流转资料撰写论文,总结分析出农户土地流转出现的问题,并找到其应对的措施. ",
"responsibilities": "深入到农村基层,通过与农户的交谈和问卷调研方式,了解荆州City农村土地的流转情况,土地流转的面积、模式,考察荆州City农村居民土地流转出现的问题,以及它们的解决方式,另外考察当地政府对土地流转的支持力度. ",
"startTime": 1401552000,
"endTime": 1409500800,
"now": false
}
],
"languageInfo": [],
"invitationUpdateStatus": 1
},
{
"applicationId": 44803,
"CandidateId": 34339,
"moved_at": "2019-01-16T07:56:44.000Z",
"name": "张五",
"phone": "15811077349",
"email": "sgurr@163.com",
"gender": "Male",
"birthYear": 1989,
"nationality": null,
"experience": null,
"ethnic": null,
"citizenId": null,
"nativePlace": "",
"location": null,
"source": "智联",
"sourceType": 1,
"academicDegree": "Bachelor degree",
"lastSpeciality": "人力资源管理",
"married": null,
"jobCommitment": " Full-time",
"hireMode": 1,
"departmentCode": "1",
"parentDepartmentCode": null,
"resumeKey": null,
"stageName": "新增offer型阶段",
"stageType": "101",
"nativePlaceCode": null,
"nationalityCode": null,
"genderCode": 0,
"academicDegreeCode": 4,
"ethnicCode": null,
"job": {
"title": "qa",
"department": "马蜂窝",
"departmentCode": "1",
"parentDepartmentCode": null,
"competencyType": null,
"departmentPath": "马蜂窝",
"jobId": "ea932057-2637-4408-98a2-a3366b4ade14"
},
"jobManager": {
"name": "安涛",
"email": "antao@mokahr.com",
"phone": "15201314595",
"employeeId": "01"
},
"resumeUrl": "",
"educationInfo": [
{
"id": 37153,
"startDate": "",
"endDate": "",
"school": "收到回复看吧",
"speciality": "哈Yes的",
"academicDegree": "Bachelor degree",
"startTime": null,
"endTime": null,
"now": false
}
],
"experienceInfo": [],
"awardInfo": [],
"customFields": [
{
"codes": "",
"name": "EthnicityCustom",
"value": "维吾尔族",
"section": "basicInfo"
}
],
"referrer": null,
"headcountInfo": [
{
"id": 5,
"number": "3",
"name": "测试HCUpdate1"
}
],
"jobRanksInfo": [],
"offer": null,
"projectInfo": [],
"languageInfo": [],
"invitationUpdateStatus": 1
}
]
This interface will return all candidate information in all stages in the specified condition When called for the first time, it will return all candidate information in the specified stage, and then mark the candidate. After marking, the data cannot be obtained through this interface before the candidate moves If the candidate moves during this stage, the data can be retrieved, and a maximum of 100 pieces of data can be returned each time
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/moved_applications
Query
Field | Required | Type | Description |
---|---|---|---|
stage | No | string | The stage name of pre-archiveall :All stages preliminary_filter :Initial screen offer :offerType的阶段pending_checkin :To be onboarded filter :Selected阶段interview :Interview阶段exam :Testnone :none: No typeshigong :Work trail阶段 |
fromTime | No | string | Data start time Such as 2018-1-1 |
Response
Field | Type | Description |
---|---|---|
CandidateId | integer | The unique id of Candidate in Moka |
applicationId | integer | The unique id of Candidate's application in Moka |
name | string | Name |
phone | string | Phone |
string | ||
gender | string | Gender,optional values are:Male ,Female |
birthYear | integer | Birthyear,, such as1990 |
birthDate | string | Birthdate |
ethnic | string | Ethnicity |
certificateType | integer | Certificate type Optional values are: 1 : id card2 : Hong Kong id card3 : Macau id card4 :Taiwan id card 5 : Passport 6 : Other identity document 7 : Exit-Entry Permit for Travelling to and from Hong Kong and Macau (EEP)8 : The Mainland Travel Permit for Taiwan Residents 9 : Foreigners' Work Permit10 :Residence Permit for Foreigner |
citizenId | string | identification No. |
nationality | string | Nationality |
nativePlace | string | Birthplace |
hireMode | integer | Recruitment mode Optional values are: 1 : experienced hires2 : Campus recruitment |
source | string | Source,Such as, 'Lagou' |
sourceType | integer | From Optional values are: 1 : Active search,2 :Direct delivery,3 :Talent recommendation |
stageName | string | Current stage name |
stageType | number | Current stage type Optional values are: 100 :Initial screen101 :Offer102 :To be onboarded200 :Selected201 :Interview202 : Test205 :No type206 :Work trail |
location | string | Location,Such as, 'Beijing'academicDegree |
married | string | Marital status Optional value 'Married', 'Single', 'Divorced', 'Widowed', 'CIVILUNION', 'COHABITATING', 'MARRIED', 'DIVORCED', 'ENGAGED', 'SEPARATED', 'SINGLE', 'WIDOWED' |
nativePlaceCode | integer | Birthplace code(null when Birthplace is empty,Code details refer to attachment) |
nationalityCode | integer | Nationality code(null when Nationality is empty,Code details refer to attachment) |
genderCode | integer | Gender code(null if gender is empty, see attachment for code details) |
academicDegreeCode | integer | Recent graduate major |
ethnicCode | integer | Ethnicity code(null if Ethnicity is empty, see attachment for code details) |
educationInfo[] | array | Education experience |
educationInfo[].startDate | string | School start date,accurate to month. , such as2010-09 , 2008 |
educationInfo[].endDate | string | School end date,accurate to month. , such as2010-09 , 2008 |
educationInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
educationInfo[].school | string | School |
educationInfo[].speciality | string | Major |
educationInfo[].academicDegree | string | Education Optional values are: Bachelor degree ,Master degree ,Doctor degree ,Senior high school ,Junior college ,Technical secondary school ,MBA ,Others |
experienceInfo[] | array | Work experience |
experienceInfo[].startDate | string | Work start time,accurate to month. , such as2010-09 , 2008 |
experienceInfo[].endDate | string | Work end time,accurate to month. , such as2010-09 , 2008 |
experienceInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
experienceInfo[].company | string | Company name |
experienceInfo[].title | string | Job title |
experienceInfo[].summary | string | Job responsibility |
experienceInfo[].reasonForLeaving | string | Reason for resignation |
experienceInfo[].underlingNumber | string | No.of subordinate |
awardInfo[] | array | Awards |
awardInfo[].awardDate | datetime | Winning date |
awardInfo[].awardName | string | Award name |
job | object | Position info |
job.title | string | Job title |
job.department | string | Department |
job.departmentPath | string | The full path of the Department, from the upper level to the lower level, separated by / |
job.departmentCode | string | Department code |
job.parentDepartmentCode | string | Upper-department code |
job.competencyType | string | Function type |
job.customFields | array | job custom field |
job.customFields[].name | string | job custom field name |
job.customFields[].value | string | job custom field value |
ehrCustomFields[] | array | ehr custom exported fields collection |
referrer | object | Referrer info |
referrer.name | string | Referrer name |
referrer.email | string | Referrer email |
referrer.phone | string | Referrer phone |
jobRanksInfo[].name | string | Job level name |
jobRanksInfo[].type | string | Job level type |
jobRanksInfo[].level | string | Job level grade |
headcountInfo[].id | number | Headcount ID |
headcountInfo[].number | string | Headcount code |
headcountInfo[].name | string | Headcount name |
customFields[] | array | Candidate custom fields, containing only the custom fields set in the standard resume |
customFields[].name | string | Custom field name |
customFields[].value | string | Custom field value. For yes or no question type Optional values are: 1 :Yes0 :No. |
customFields[].now | boolean | This field exists when the custom field is a time period, indicating whether the end time is "today". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
customFields[].section | string | Name of the module where the custom field is located, the module can be a built-in module (e.g. experienceInfo) or a custom module (e.g. emergency contact) |
customFields[].index | string | For modules with multiple pieces of data such as experienceInfo, educationInfo, or custom modules (such as emergency contacts), index indicates which field is the custom field information of which piece of data |
customFields[].codes | string | Custom code for multiple choice questions (valid for multiple choice questions with code) |
offer | object | Offer info |
offer.salaryNumber | number | Salary and compensation |
offer.checkinDate | string | Onboarding date |
offer.location | string | Work location after hired |
offer.creator | object | Offer creator info |
offer.creator.name | string | Offer creator name |
offer.creator.email | string | Offer creator email |
offer.finishedAt | string | Accept offer time. Date format is: ISO8601 |
offer.customFields | array | Offer custom field |
offer.customFields[].name | string | Offer custom field name |
offer.customFields[].value | string | Offer custom field value |
offer.departmentName | string | Onboarding department name |
offer.departmentCode | number | Onboarding department code |
offer.parentDepartmentCode | number | The upper department of onboarding department code |
offer.departmentPath | string | The full path of Onboarding department |
offer.offerLastSentAt | string | Last offer time |
projectInfo | array | Project experience |
projectInfo[].startDate | string | Project start date,accurate to month. , such as2010-09 , 2008 |
projectInfo[].endDate | string | Project end date,accurate to month. , such as2010-09 , 2008 |
projectInfo[].projectName | string | Project name |
projectInfo[].title | string | Job title and duty |
projectInfo[].projectDescript | string | Project description |
projectInfo[].responsibilities | string | Responsibility in project |
projectInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
languageInfo | array | Language skill |
languageInfo[].language | string | Language type |
languageInfo[].level | string | Proficiency |
languageInfo[].listenAndSpeak | string | Listening and speaking |
languageInfo[].readAndWrite | string | Reading and writing |
invitationUpdateStatus | integer | Invitation to update status Optional values are: 0 :Not invited1 : not update2 : updated |
GET All stage Candidate info(paging)
> Request example
$ curl https://api.mokahr.com/api-platform/v1/data/movedApplications
> Response example
{
"next":"2019-01-16T07:56:44.000Z_44803",
"data":[
{
"applicationId": 23191,
"CandidateId": 12552,
"moved_at": "2019-01-25T10:25:36.000Z",
"name": "曹大帅",
"phone": "15013186607",
"email": "1170616425@qq.com",
"gender": "Male",
"birthYear": 1991,
"nationality": null,
"experience": 2,
"ethnic": null,
"citizenId": null,
"nativePlace": "",
"location": "湖北-武汉",
"source": "智联",
"sourceType": 2,
"academicDegree": "Master degree",
"lastSpeciality": "人力资源管理",
"married": "Single",
"jobCommitment": " Full-time",
"hireMode": 1,
"departmentCode": null,
"parentDepartmentCode": null,
"resumeKey": "1f0f3d5f-17d4-4e21-a135-a8dbb8648297.html",
"stageName": "用人Department筛选",
"stageType": 200,
"nativePlaceCode": null,
"nationalityCode": null,
"genderCode": 0,
"academicDegreeCode": 5,
"ethnicCode": null,
"job": {
"title": "5432154321543215432154321v543215432154321",
"department": null,
"departmentCode": null,
"parentDepartmentCode": null,
"competencyType": null,
"jobId": "ea932057-2637-4408-98a2-a3366b4ade14"
},
"jobManager": {
"name": "Moka小助手",
"email": "why947608878@163.com",
"phone": "18610778251",
"employeeId": "01"
},
"resumeUrl": "",
"educationInfo": [
{
"id": 35764,
"startDate": "2014-09",
"endDate": "2017-06",
"school": "长江大学",
"speciality": "农业经济管理",
"academicDegree": "Master degree",
"startTime": 1409500800,
"endTime": 1496246400,
"now": false
},
{
"id": 35765,
"startDate": "2010-09",
"endDate": "2014-06",
"school": "长江大学",
"speciality": "人力资源管理",
"academicDegree": "Bachelor degree",
"startTime": 1283270400,
"endTime": 1401552000,
"now": false
}
],
"experienceInfo": [],
"awardInfo": [],
"customFields": [],
"referrer": null,
"headcountInfo": [],
"jobRanksInfo": [],
"offer": null,
"projectInfo": [
{
"startDate": "2014-06",
"endDate": "2014-09",
"projectName": "土地流转确权工作",
"title": "",
"projectDescript": "1.了解荆州City农村人口占全City的比for example. \r\n2.了解荆州City农村土地流转的面积. \r\n3.了解荆州City土地流转的模式. \r\n4.了解荆州City农村农户进行土体流转出现的问题和法律纠纷. \r\n5.整理相关文献资料,利用搜集到的土地流转资料撰写论文,总结分析出农户土地流转出现的问题,并找到其应对的措施. ",
"responsibilities": "深入到农村基层,通过与农户的交谈和问卷调研方式,了解荆州City农村土地的流转情况,土地流转的面积、模式,考察荆州City农村居民土地流转出现的问题,以及它们的解决方式,另外考察当地政府对土地流转的支持力度. ",
"startTime": 1401552000,
"endTime": 1409500800,
"now": false
}
],
"languageInfo": []
},
{
"applicationId": 44803,
"CandidateId": 34339,
"moved_at": "2019-01-16T07:56:44.000Z",
"name": "张五",
"phone": "15811077349",
"email": "sgurr@163.com",
"gender": "Male",
"birthYear": 1989,
"nationality": null,
"experience": null,
"ethnic": null,
"citizenId": null,
"nativePlace": "",
"location": null,
"source": "智联",
"sourceType": 1,
"academicDegree": "Bachelor degree",
"lastSpeciality": "人力资源管理",
"married": null,
"jobCommitment": " Full-time",
"hireMode": 1,
"departmentCode": "1",
"parentDepartmentCode": null,
"resumeKey": null,
"stageName": "新增offer型阶段",
"stageType": "101",
"nativePlaceCode": null,
"nationalityCode": null,
"genderCode": 0,
"academicDegreeCode": 4,
"ethnicCode": null,
"job": {
"title": "qa",
"department": "马蜂窝",
"departmentCode": "1",
"parentDepartmentCode": null,
"competencyType": null,
"departmentPath": "马蜂窝",
"jobId": "ea932057-2637-4408-98a2-a3366b4ade14",
"customFields": [
{
"name": "职位-年月",
"value": "2019-01"
}
]
},
"jobManager": {
"name": "安涛",
"email": "antao@mokahr.com",
"phone": "15201314595",
"employeeId": "01"
},
"resumeUrl": "",
"educationInfo": [
{
"id": 37153,
"startDate": "",
"endDate": "",
"school": "收到回复看吧",
"speciality": "哈Yes的",
"academicDegree": "Bachelor degree",
"startTime": null,
"endTime": null,
"now": false
}
],
"experienceInfo": [],
"awardInfo": [],
"customFields": [
{
"codes": "",
"name": "EthnicityCustom",
"value": "维吾尔族",
"section": "basicInfo"
}
],
"referrer": null,
"headcountInfo": [
{
"id": 5,
"number": "3",
"name": "测试HCUpdate1"
}
],
"jobRanksInfo": [],
"offer": null,
"projectInfo": [],
"languageInfo": []
}
]
}
This interface will respond all candidates info of all stages under specific condition
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/movedApplications
Query
Field | Required | Type | Description |
---|---|---|---|
stage | No | string | The stage name of pre-archiveall :All stagespreliminary_filter :Initial screenoffer :offerpending_checkin :To be onboarded filter :Selectedinterview :Interview exam :Testnone :none: No typeshigong :Work trail |
fromTime | Yes | string | The start time of the data, the fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included.Such as 2018-1-1 ASC Search from this time to new data |
next | Yes | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, and the next request only needs to add this next parameter to the query. The fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. If there is no next field in the response, it means that there is no more data |
reqType | No | string | all: full amount, ignore the mark, and return all to the caller update: update and variable (default), each request will return unmarked data to the caller, and mark the returned data |
limit | No | string | Number of entries per page for paging, default 20, max 20. |
Response
Field | Type | Description |
---|---|---|
CandidateId | integer | The unique id of Candidate in Moka |
applicationId | integer | The unique id of Candidate's application in Moka |
name | string | Name |
phone | string | Phone |
string | ||
gender | string | Gender,optional values are:Male ,Female |
birthYear | integer | Birthyear,, such as1990 |
birthDate | string | Birthdate |
ethnic | string | Ethnicity Optional values are: 1 : id card2 : Hong Kong id card3 : Macau id card4 :Taiwan id card5 : Passport6 : Other identity document7 : Exit-Entry Permit for Travelling to and from Hong Kong and Macau (EEP)8 : The Mainland Travel Permit for Taiwan Residents 9 : Foreigners' Work Permit 10 :Residence Permit for Foreigner |
citizenId | string | identification No. |
nationality | string | Nationality |
nativePlace | string | Birthplace |
hireMode | integer | Recruitment mode Optional value 1 : experienced hires2 : Campus |
recruitmentsource | string | Source,Such as, 'Lagou' |
sourceType | integer | From Optional values are: 1 : Active search,2 :Direct delivery,3 :Talent recommendation |
stageName | string | Current stage name |
stageType | number | Current stage typ Optional values are: 100 :Initial screen101 :Offer102 :To be onboarded200 :Selected201 :Interview202 : Test205 :No type206 :Work trail |
location | string | Location,Such as, 'Beijing' |
academicDegree | string | Highest education Optional values are: Bachelor degree ,Master degree ,Doctor degree ,Senior high school ,Junior college ,Technical secondary school ,MBA ,Others |
married | string | Marital status Optional values are: 'Married', 'Single', 'Divorced', 'Widowed', 'CIVILUNION', 'COHABITATING', 'MARRIED', 'DIVORCED', 'ENGAGED', 'SEPARATED', 'SINGLE', 'WIDOWED' |
nativePlaceCode | integer | Birthplace code(null when birthplace is empty, code details refer to attachment) |
nationalityCode | integer | Nationality code(null when nationality is empty, code details refer to attachment) |
genderCode | integer | Gender code(null if gender is empty, see attachment for code details) |
academicDegreeCode | integer | Recent graduate major |
ethnicCode | integer | Ethnicity code(null if Ethnicity is empty, see attachment for code details) |
educationInfo[] | array | Education experience |
educationInfo[].startDate | string | School start date,accurate to month. , such as2010-09 , 2008 |
educationInfo[].endDate | string | School end date,accurate to month. , such as2010-09 , 2008 |
educationInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
educationInfo[].school | string | School |
educationInfo[].speciality | string | Major |
educationInfo[].academicDegree | string | Education Optional values are: Bachelor degree ,Master degree ,Doctor degree ,Senior high school ,Junior college ,Technical secondary school ,MBA ,Others |
experienceInfo[] | array | Work experience |
experienceInfo[].startDate | string | Work start time,accurate to month. , such as2010-09 , 2008 |
experienceInfo[].endDate | string | Work end time,accurate to month. , such as2010-09 , 2008 |
experienceInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
experienceInfo[].company | string | Company name |
experienceInfo[].title | string | Job title |
experienceInfo[].summary | string | Job responsibility |
experienceInfo[].reasonForLeaving | string | Reason for resignation |
experienceInfo[].underlingNumber | string | No.of subordinate |
awardInfo[] | array | Awards |
awardInfo[].awardDate | datetime | Winning date |
awardInfo[].awardName | string | Award name |
job | object | Position info |
job.title | string | Job title |
job.department | string | Department |
job.departmentPath | string | The full path of the Department, from the upper level to the lower level, separated by / |
job.departmentCode | string | Department code |
job.parentDepartmentCode | string | Upper-department code |
job.competencyType | string | Function type |
job.customFields | array | job custom field |
job.customFields[].name | string | job custom field name |
job.customFields[].value | string | job custom field value |
ehrCustomFields[] | array | ehr custom exported fields collection |
idCardFrontList | array | Upload id card picture (portrait side) |
idCardBackList | string | Upload id card picture (national emblem side) |
idCardSignOrganization | string | Issuing authority of id card |
idCardValidity | string | id card validity period |
customAttachmentList | obj | All attachments of Candidate's standard resume |
customAttachmentList.customUpload+customId | array | The key of the attachment of the Candidate's standard resume is composed of customUpload (fixed string) + customid |
customAttachmentList.customUpload+customId[].attachmentName | string | Attachment name |
customAttachmentList.customUpload+customId[].attachmentSize | number | Attachment size (byte) |
customAttachmentList.customUpload+customId[].CandidateId | number | Candidate id |
customAttachmentList.customUpload+customId[].customId | number | Custom field id |
customAttachmentList.customUpload+customId[].downloadUrl | string | The download address will invalid in 24 hours |
customAttachmentList.customUpload+customId[].createdAt | string | Created time of attachment (timestamp format) |
referrer | object | Referrer info |
referrer.name | string | Referrer name |
referrer.email | string | Referrer email |
referrer.phone | string | Referrer phone |
jobRanksInfo[].name | string | Job level name |
jobRanksInfo[].type | string | Job level type |
jobRanksInfo[].level | string | Job level grade |
headcountInfo[].id | number | Headcount ID |
headcountInfo[].number | string | Headcount code |
headcountInfo[].name | string | Headcount name |
customFields[] | array | Candidate custom fields, containing only the custom fields set in the standard resume |
customFields[].name | string | Custom field name |
customFields[].value | string | Custom field value. For yes or no question type Optional values are: 1 :Yes0 :No. |
customFields[].now | boolean | |
customFields[].section | string | Name of the module where the custom field is located, the module can be a built-in module (e.g. experienceInfo) or a custom module (e.g. emergency contact) |
customFields[].index | string | For modules with multiple pieces of data such as experienceInfo, educationInfo, or custom modules (such as emergency contacts), index indicates which field is the custom field information of which piece of data |
customFields[].codes | string | Custom code for multiple choice questions (valid for multiple choice questions with code) |
offer | object | Offer info |
offer.salaryNumber | number | Salary and compensation |
offer.checkinDate | string | Onboarding date |
offer.location | string | Work location after hired |
offer.creator | object | Offer creator info |
offer.creator.name | string | Offer creator name |
offer.creator.email | string | Offer creator email |
offer.finishedAt | string | Accept offer time. Date format is: ISO8601 |
offer.customFields | array | Offer custom field |
offer.customFields[].name | string | Offer custom field name |
offer.customFields[].value | string | Offer custom field value |
offer.departmentName | string | Onboarding department name |
offer.departmentCode | number | Onboarding department code |
offer.parentDepartmentCode | number | The upper department of onboarding department code |
offer.departmentPath | string | The full path of Onboarding department |
offer.offerLastSentAt | string | Last offer time |
projectInfo | array | Project experience |
projectInfo[].startDate | string | Project start date,accurate to month. , such as2010-09 , 2008 |
projectInfo[].endDate | string | Project end date,accurate to month. , such as2010-09 , 2008 |
projectInfo[].projectName | string | Project name |
projectInfo[].title | string | Job title and duty |
projectInfo[].projectDescript | string | Project description |
projectInfo[].responsibilities | string | Responsibility in project |
projectInfo[].now | boolean | Identifies whether the end time is "to date". When the end time is now, now=true, the value of endDate may be any value at this time, just ignore endDate |
languageInfo | array | Language skill |
languageInfo[].language | string | Language type |
languageInfo[].level | string | Proficiency |
languageInfo[].listenAndSpeak | string | Listening and speaking |
languageInfo[].readAndWrite | string | Reading and writing |
invitationUpdateStatus | integer | Invitation to update status Optional values are: 0 :Not invited1 : not update2 : updated |
Get custom module
> Request example
$ curl https://api.mokahr.com/api-platform/v1/Candidates/custom_blocks
> Response example
[
{
"id": 1,
"title": "Custom模块1"
},
{
"id": 2,
"title": "Custom模块2"
}
]
Get a list of configured custom modules
HTTP request
GET https://api.mokahr.com/api-platform/v1/Candidates/custom_blocks
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Custom field id |
title | string | Custom module name |
Get custom field
> Request example
$ curl https://api.mokahr.com/api-platform/v1/Candidates/custom_fields
> Response example
[
{
"id": 1,
"name": "Custom field1",
"type": "string_info",
"relatedTo": "basicInfo"
},
{
"id": 2,
"name": "Custom field2",
"type": "select_info",
"relatedTo": "1",
"detail": ["选项1", "选项2"]
}
]
Get a list of configured custom modules
HTTP request
GET https://api.mokahr.com/api-platform/v1/Candidates/custom_fields
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Custom field id |
name | string | Custom field name |
type | string | Field typeselect_info Selection typeOptional values are: string_info String typedate_info Date type |
detail | array | If type is select_info , this field represents a list of selections. |
relatedTo | string | The module to which this custom field belongs. If it is a number, it means the id of the custom module. If it is another string, it means the name of the built-in module, such as: basicInfo Basic informationexperienceInfo Work experienceeducationInfo Educational background |
UpdateCandidateCustom field
> Request example
curl --silent --location --request POST 'https://api.mokahr.com/api-platform/v1/Candidate/customField/update' \
--header 'Authorization: Basic xxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"updateCustomFieldsReqDTOList": [
{
"CandidateId": 326567157,
"orgId": "test",
"operatorEmail": "xxxx@qq.com",
"hireMode": 1,
"customIdAndDetailDTOList": [
{
"id": 124106,
"detail": "2022-11-01 00:00:00",
"type": "string_info"
}
]
},
{
"CandidateId": 326563070,
"orgId": "test",
"operatorEmail": "xxxx@qq.com",
"hireMode": 1,
"customIdAndDetailDTOList": [
{
"id": 124106,
"detail": " Single line text",
"type": "string_info"
},
{
"id": 124107,
"detail": "1",
"type": "text_info"
}
]
}
]
}'
> Response example
{
"code": 0,
"msg": "success",
"data": null
}
The number of Fields modified each time does not exceed 300
HTTP request
post https://api.mokahr.com/api-platform/v1/Candidate/customField/update
Query
Field | Required | Type | Description |
---|---|---|---|
updateCustomFieldsReqDTOList | Yes | array | Update data |
updateCustomFieldsReqDTOList[].applicationId | No | integer | application ID If an application ID is provided, first check if the operator has permission to apply.Otherwise, based on the provided candidate ID, check if the operator has permission for all of the candidate's applications. |
updateCustomFieldsReqDTOList[].candidateId | Yes | integer | Candidate id |
updateCustomFieldsReqDTOList[].hireMode | Yes | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
updateCustomFieldsReqDTOList[].operatorEmail | Yes | string | Operator email |
updateCustomFieldsReqDTOList[].jobTemplateId | No | long | Custom Recruitment Settings If not uploaded (left blank), it is allowed to update the fields enabled in the default standard resume settings. If the input fields are not enabled, they will not be processed. If the specific custom recruitment setting ID is passed, it is allowed to update the fields enabled in the custom recruitment setting. If the fields in the input parameter are not enabled, they will not be processed. If sending custom recruitment settings, please ensure that the setting ID is valid (0 or invalid ID will be verified and intercepted) |
updateCustomFieldsReqDTOList[].customIdAndDetailDTOList | Yes | array | Collection of updated custom fields |
updateCustomFieldsReqDTOList[].customIdAndDetailDTOList[].id | Yes | integer | Custom field id |
updateCustomFieldsReqDTOList[].customIdAndDetailDTOList[].detail | Yes | string | The modified value of the custom field |
updateCustomFieldsReqDTOList[].customIdAndDetailDTOList[].type | Yes | string | Custom field type. If the type is date_info or day_info, the detail format must be "2022-11-01 00:00:00". If type is date_group_info, the detail format is {\"startDate\":\"2015-01\",\"endDate\":\"2016-01\"}. |
updateCustomFieldsReqDTOList[].customIdAndDetailDTOList[].attachmentId | 否 | string | The ID returned by the upload attachment interface (obtained through the public API attachment upload interface) has a value only when type = custom_file_upload. If attachmentId is passed, the detail field can be left empty, and the system will prioritize verifying the attachmentId to obtain field information. If the customer passes attachmentName, the passed attachmentName will take precedence; otherwise, the system will verify attachmentName and attachmentSize detail. |
updateCustomFieldsReqDTOList[].customIdAndDetailDTOList[].attachmentName | No | string | file name Only when the type = "custom_file_upload" is it a required field, and for other types it is not required. |
updateCustomFieldsReqDTOList[].customIdAndDetailDTOList[].attachmentSize | No | Integer | file size Only when the type = "custom_file_upload" is it a required field, and for other types it is not required. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | string | 200 :Successnot 200 represents error |
msg | string | Interface return value illustration |
Get candidate application list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/data/applications
> Response example
{
"data": [
{
"id": 1,
"sourceName": "拉勾",
"headhunterCompany": "好Headhunter",
"stageName": "沟通Offer",
"jobId": "123",
"updatedAt": "2017-01-01 10:00:00"
}
],
"next": "8465195468"
}
Get candidate application info
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/applications
Query
Field | Required | Type | Description |
---|---|---|---|
fromTime | No | string | The start time of the data, the fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. |
next | No | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, and the next request only needs to add this next parameter to the query. The fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. If there is no next field in the response, it means that there is no more data |
limit | No | string | Number of entries per page for paging, default 100, max 500. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | applicationId |
sourceName | string | Source name |
headhunterCompany | string | Headhunter agency name |
stageName | string | Current stage name |
updatedAt | string | Last update time of this data |
jobId | string | Position id of the application |
Move the application to any stage under the current position.
Move the application to any stage under the current position.
> Request example
$ curl http://api.mokahr.com/api-platform/v1/applications/move_application_stage?applicationId=96&stageId=4 \
-u 'your_api_key:' \
-X PUT \
> Response example
{
"code": 0,
"msg": "Success"
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/applications/move_application_stage?applicationId={applicationId}&stageId={stageId}
Request parameter
Field | Required | Description |
---|---|---|
applicationId | Yes | Application id |
stageId | Yes | The stage id that moved to |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | 0 :Set successfully1 : Failure |
msg | string | Success |
Black candidate
Black candidate
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/blackCandidate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic ZndyMDAzOg==' \
--data-raw '{
"detail": "不222满足",
"applicationIds": [
411250318
],
"talentPoolIds": [
200003266
],
"hireMode": 2,
"operatorEmail": "fwr003@163.com",
"tags": "态度恶劣"
}'
> Response example
{
"code": 0,
"msg": "Success"
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/blackCandidate
Request parameter
Field | Required | Type | Description |
---|---|---|---|
applicationIds | Yes | array[integer] | Candidate application ids |
talentPoolIds | Yes | array[integer] | Talent pool id |
businessUnitId | No | integer | bu id |
detail | No | string | Blacklist details |
hireMode | Yes | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
operatorEmail | Yes | string | Operator email |
tags | Yes | string | Tag |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | 0 :Set successfully,1 : Failure |
msg | string | Success |
Get recruitment process list
> Request example
$ curl https://api.mokahr.com/api-platform/v2/pipelines/getPipelinesList
-u 'your-api-key:'
> Response example
{
"code": 200,
"msg": "success",
"data": [
{
"id": "485",
"departmentIds": "[3427,15825,47702]",
"disabled": false,
"entryConditions": "{\"29083\":{\"match\":\"and\",\"conditions\":[{\"stageId\":9886,\"type\":17,\"status\":1}]}}",
"hireMode": 1,
"isOptimizedDeptIds": false,
"name": "默认Recruitment process",
"stageIds": "[2601,43451,2602,49375,12983,14827,15794,10784,43651,40780,7164,14826,9276,9240,7278,3407,11049,5890,3385,7642,4008,2603,9886,29083,3460,2604,44665,5544,15360,2605]"
},
{
"id": "632",
"departmentIds": "[47702]",
"disabled": true,
"entryConditions": "",
"hireMode": 1,
"isOptimizedDeptIds": false,
"name": "产品Recruitment process",
"stageIds": "[2601,15794,3459,2602,15698,2604,8396,3462,3385,2605]"
},
{
"id": "657",
"departmentIds": "[]",
"disabled": false,
"entryConditions": "",
"hireMode": 1,
"isOptimizedDeptIds": true,
"name": "商业产品部Recruitment process",
"stageIds": "[2601,4009,43143,5890,3385,2603,2604,3479,15352,2605]"
},
{
"id": "3533",
"departmentIds": "[47702]",
"disabled": false,
"entryConditions": "",
"hireMode": 1,
"isOptimizedDeptIds": false,
"name": "报表统计招聘",
"stageIds": "[2601,3385,4009,4008,7164,9245,2604,6669,2605]"
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v2/pipelines/getPipelinesList
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Returned code: 200 is normal, others are errors |
msg | string | Success response success, failure response false |
data | array or object | If it is a single piece of data, it returns an object and multiple pieces of data return an array |
data.id | integer | Process id |
data.entryConditions | string | Transferring to the current stage requires, default', from the constant STAGE_ENTRY_CONDITIONS, in json format |
data.departmentIds | string | Supported department |
data.disabled | boolean | Whether to disable |
data.hireMode | integer | Recruitment type Optional values are: 1 experienced hires2 Campus recruitment |
data.isOptimizedDeptIds | boolean | Whether to optimize the department |
data.stageIds | string | Stage id list |
data.name | string | Process name |
Get stage info list
> Request example
$ curl https://api.mokahr.com/api-platform/v2/stage/getStagesList
-u 'your-api-key:'
> Response example
{
"code": 200,
"msg": "success",
"data": [
{
"entryConditions": "[]",
"disabled": false,
"operationIds": "[14,1,13,2,11,17]",
"name": "Initial screen",
"type": 100
},
{
"entryConditions": "[]",
"disabled": false,
"operationIds": "[2,14,11,17]",
"name": "用人Department筛选",
"type": 200
},
{
"entryConditions": "[]",
"disabled": false,
"operationIds": "[3,2,9,14,11]",
"name": "面试",
"type": 201
},
{
"entryConditions": "[]",
"disabled": false,
"operationIds": "[11,14,6,8,7]",
"name": "沟通offer",
"type": 101
},
{
"entryConditions": "[]",
"disabled": false,
"operationIds": "[10,11,6,15,14,8]",
"name": "To be onboarded",
"type": 102
},
{
"entryConditions": "[]",
"disabled": true,
"operationIds": "[14,11,5]",
"name": "笔试阶段",
"type": 202
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v2/stage/getStagesList
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Returned code: 200 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | array or object | If it is a single piece of data, it returns an object and multiple pieces of data return an array |
data.id | integer | Stage id |
data.name | string | Stage name |
data.entryConditions | string | Transferring to the current stage requires, default', from the constant STAGE_ENTRY_CONDITIONS, in json format |
data.operationIds | string | Which operations are available under the stage, one operation corresponds to one state type, in json format |
data.disabled | boolean | Whether to disable |
data.type | number | Stage type |
Check application related to candidate
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/Candidate/v1/getApplicationStates' \
--header 'Content-Type: application/json' \
--header 'Authorization: ' \
--data-raw '{
"CandidateId": 201232883
}'
> Response example
{
"code": 0,
"msg": "success",
"data": [
{
"applicationId": 411269930,
"status": "rejected",
"stageName": "Initial screen",
"createdAt": 1662520322000
}
]
}
HTTP request
POST https://api.mokahr.com/api-platform/Candidate/v1/getApplicationStates
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
CandidateId | Yes | long | Candidate id |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | array | Candidate application info |
data[].applicationId | long | Candidate id |
data[].status | string | Application status enumeration value: in_progress : In process rejected :Rejectedhired : Regular employee |
data[].stageName | string | The name of the current stage‘ s stage |
data[].createdAt | string | Application created time (timestamp) |
Remove Blacklist
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/talentPool/blackList/remove' \
--header 'Content-Type: application/json' \
--data-raw '{
"hireMode": 2,
"CandidateIds": [201252027],
"operatorEmail": "zongxinqi@mokahr.com"
}'
> Response example
{
"code": 0,
"msg": "success"
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/talentPool/blackList/remove
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
CandidateIds | No, but one must be passed with applicationIds, and the maximum number does not exceed 200 | *List |
Candidate id |
applicationIds | No | List |
applicationID |
hireMode | Yes | int | Recruitment mode 1 experienced hires 2 Campus recruitment |
operatorEmail | Yes | string | Operator email |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
Get the evaluation conclusion of the hiring department
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/Candidate/v1/get_handle_Result' \
--header 'Content-Type: application/json' \
--data-raw '{
"applicationIdList":[411274410],
"stageIdList":[123]
}'
> Response example
{
"code": 0,
"msg": "success",
"data":{
"applicationId":111,
"CandidateId":2323,
"stageId":3232,
"email":"",
"stageType":100,
"name":"",
"handleResult":"reject",
"handleTime":""
}
}
HTTP request
POST https://api.mokahr.com/api-platform/Candidate/v1/get_handle_Result
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
applicationIdList | Yes | *List |
Application id collection |
stageIdList | No | List |
Stage id collection |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data.applicationId | integer | Application id |
data.CandidateId | integer | Candidate id |
data.stageId | integer | Stage id |
data.email | string | Referral email |
data.stageType | integer | Stage Type 100 = Initial Screening, 200 = Screening, 201 = Interview |
data.name | string | Referral name |
data.handleResult | string | Feedback reject = reject, accept = pass, noReply = no feedback |
data.handleTime | string | Refers to the feedback time yyyy-MM-dd HH:mm:ss |
data.assignerName | string | referrer name |
data.assignerEmail | string | referrer email |
data.recommendedTime | long | referral time |
Check the stage under the candidate's relevant application
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/Candidate/v1/get_Candidate_stage' \
--header 'Content-Type: application/json' \
--data-raw '{
"applicationIdList":[411274410]
}'
> Response example
{
"code": 0,
"msg": "success",
"data":{
"applicationId":111,
"CandidateId":2323,
"stageId":3232,
"enteredAt":"",
"archivedAt":""
}
}
HTTP request
POST https://api.mokahr.com/api-platform/Candidate/v1/get_Candidate_stage
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
applicationIdList | Yes | *List |
Application id collection |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | object | |
data.applicationId | integer | Application id |
data.CandidateId | integer | Candidate id |
data.stageId | integer | Stage id |
data.archivedAt | string | Apply archive time yyyy-MM-dd HH:mm:ss |
data.enteredAt | string | Move to stage time yyyy-MM-dd HH:mm:ss |
Restore to original status
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/candidate/application/revert' \
--header 'Content-Type: application/json' \
--data-raw '{
"applicationId":411274410,
"operatorEmail":"lele@example.com"
}'
> Response example
{
"code": 0,
"msg": "success",
"data": null
}
HTTP request
POST https://api.mokahr.com/api-platform/api-platform/candidate/application/revert
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | Application id |
operatorEmail | Yes | string | Operator email |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | object |
Get Candidate Labels by ApplicationIds
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/candidate/getLabel' \
--header 'Content-Type: application/json' \
--data-raw '{
"applicationIds":[411274410,26761872]
}'
> Response example
{
"code": 200,
"msg": "success",
"data": {
"labelInfoList": [
{
"applicationId": 411344001,
"candidateId": 201308769,
"labelInfoList": [
{
"id": 8,
"label": "空白经历",
"type": 1
},
{
"id": 1565,
"label": "手工标签",
"type": 2
}
]
}
]
}
}
HTTP request
POST https://api.mokahr.com/api-platform/api-platform/candidate/getLabel
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
applicationIds | Yes | integer | Application ids(ApplicationIds of Candidates, Max 20.) |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Return code: non-200 means error |
msg | string | Response info |
data | object | Response data |
data.labelInfoList[].applicationId | integer | The unique id of Candidate's application in Moka |
data.labelInfoList[].candidateId | integer | The unique id of Candidate in Moka |
data.labelInfoList[].labelInfoList[].id | integer | The unique id of label |
data.labelInfoList[].labelInfoList[].label | integer | name of label |
data.labelInfoList[].labelInfoList[].type | integer | label type 1 intelligent label,2 manual label |
Query Screening Evaluation Form
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/pipeline/assignment/get' \
--header 'Content-Type: application/json' \
--data-raw '{
"hireMode":1
}'
> Response example
{
"code": 0,
"msg": "success",
"data": [
{
"feedbackId": 1,
"feedbackResultList": [
{
"nameCn": "通过",
"nameEn": "Advance",
"resultId": 1,
"type": "accept"
},
{
"nameCn": "拒绝",
"nameEn": "Reject",
"resultId": 2,
"type": "reject"
},
{
"nameCn": "待定",
"nameEn": "Pending",
"resultId": 3,
"type": "decided"
}
],
"isDefault": true,
"nameCn": "默认筛选评价表",
"nameEn": "Default evaluation form",
"descCn":"desc",
"descEn":""
}
]
}
HTTP request
POST https://api.mokahr.com/api-platform/pipeline/assignment/get
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
hireMode | Yes | integer | Recruitment mode Optional values: 1: Social recruitment 2: School recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | object[] | |
data[].feedbackId | integer | Screening evaluation form ID |
data[].nameCn | string | Screening Evaluation Form Name (Chinese) |
data[].nameEn | string | Screening Evaluation Form Name (English, if available) |
data[].descCn | string | Screening Evaluation Form Description (Chinese, if available) |
data[].descEn | string | Screening Evaluation Form Description (English, if available) |
data[].isDefault | boolean | Default Screening Evaluation Form Indicator true: Indicates this is the default screening evaluation form |
data[].feedbackResultList[] | object[] | Screening Evaluation Form Options |
data[].feedbackResultList[].resultId | integer | Screening Evaluation Form Option ID |
data[].feedbackResultList[].nameCn | string | Screening Evaluation Form Option Name (Chinese) |
data[].feedbackResultList[].nameEn | string | Screening Evaluation Form Option Name(English, if available) |
data[].feedbackResultList[].type | string | Evaluation Option Type accept:Positive Evaluation reject:Negative Evaluation decided:Neutral Evaluation |
Update Option Value Based on Custom Field ID
Request example
shell curl --location --request POST 'http://api.mokahr.com/api-platform/v2/candidate/customField/updateDetail' \ --header 'Authorization: ••••••' \ --header 'Content-Type: application/json' \ --data-raw '{ "type":2, "detailsList":[{ "id":410059485, "valueList":["88"], "codeList":["88"], "supplementaryLocaleList": {"en-US":["777"]} }] }'
Response example
{
"code": 0,
"msg": "success",
"data": null
}
HTTP request
POST https://api.mokahr.com/api-platform/v2/candidate/customField/updateDetail
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
type | Yes | integer | Operation Type: 1 - Add, 2 - Delete |
detailsList | Yes | array | Set of Custom Field Option Values to be Operated on: Currently only supports adding or deleting options for fields of type multiple-choice. |
detailsList[].id | Yes | integer | Custom Field ID |
detailsList[].codeList | No | array | Code corresponding to the custom option value to be operated on (required if the custom field has a code in the system) |
detailsList[].valueList | Yes | array | Custom Option Value to be Operated on |
detailsList[].supplementaryLocaleList | No | object | Multi-language Enum Values for the Custom Field, format: {"en-US": ["1"]} |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | object |
Get resume analysis content by application ID
Request example
shell curl --location --request POST 'http://api.mokahr.com/api-platform/application/resumeContent/get' \ --header 'Authorization: ••••••' \ --header 'Content-Type: application/json' \ --data-raw '{ "applicationId":228272 }'
Response example
{
"code": 200,
"msg": "success",
"data": {
"resumeKey": "7ce112hrrr-wrra5-4qf5-8qq4-1b633ww0768.pdf",
"resumeContent": "张三\n基本情况: 女 | 0岁 | 2015届毕业生 | 共青团员\n最高学历: 长沙理工大学 · 本科"
}
}
HTTP request
POST https://api.mokahr.com/api-platform/application/resumeContent/get
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | applictaion ID |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:200 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | object | |
data.resumeKey | string | The key of resume |
data.resumeContent | string | The content of resume |
Write candidate operation records
Request example
shell curl --location 'https://api.mokahr.com/api-platform/candidate/v1/create_activities' \ --header 'Authorization: ••••••' \ --header 'Content-Type: application/json' \ --data '{ "operatorId": 210000293, "applicationId": 411192145, "data": "中文内容", "supplementaryLocales": { "en-US": "english content" } }'
Response example
{
"code": 0,
"msg": "success",
"data": null
}
HTTP request
POST https://api.mokahr.com/api-platform/candidate/v1/create_activities
Request parameter (JSON)
Field | Required | Type | Description |
---|---|---|---|
operatorId | No, the operator role should be HR or above | Long | Operator id |
applicationId | No, but it must be passed along with candidateId, and both have values that default to the applicationId dimension | Long | The unique id of Candidate's application in Moka |
candidateId | No | Long | The unique id of Candidate in Moka |
data | Yes | string | Chinese content |
supplementaryLocales | Yes | object | The object format for multiple languages is as follows {"en US": "1"} |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:0 is normal, others are errors |
msg | string | Success respond success, failure respond false or the corresponding error message. |
data | object |
Get Candidate Attachment Information by Application ID
Request example
curl --location 'https://api.mokahr.com/api-platform/v3/attachments/get \
--header 'Authorization: ••••••' \
--header 'Content-Type: application/json' \
--data '{
"applicationId": 5567833
}'
Response example
{
"code": 200,
"msg": "success",
"data": {
"applicationId": 411342864,
"attachments4App": [],
"attachments4Ca": [],
"candidateId": 201307724,
"resumeUrl": "https://moka-test.oss-cn-beijing.aliyuncs.com/livingsimple/dd13ecdc-f835-43b4-9fc7-9ed191670bed.doc?Expires=1743267178&OSSAccessKeyId=LTAI5tKxT6DnN7A5m3fDkCMN&Signature=ED6JnRFJTIcw9%2F6HGRZGhfjEL1o%3D&response-content-disposition=attachmE6%2598%2586%25E4%25BB%259112123123%25E7%259A%2584%25E7%25AE%2580%25E5%258E%2586.doc",
"standardResumeUrl": "https://moka-test.oss-cn-beijing.aliyuncs.com/livingsimple/htmlToPdf-dealer-9f8bb1017c54450da1da5c780291f454.pdf?mlToPdf-dealer-9f8bb1017c54450da1da5c780291f454.pdf%22×tamp=1743151980240"
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v3/attachments/get
Request parameter
Field | Required | Type | Descrption |
---|---|---|---|
applicationId | Yes | integer | Application ID |
Response
Response body in JSON
| Field | Type | Description |
| -------- | ----------- | ------------------------------------------------------------ |
|code | integer | Response code: 200 for success, others indicate errors
|msg | string | Returns "success" for success, or "false"/error message for failure
|data | object |
|data.candidateId | integer |Candidate ID
|data.applicationId | integer |Application ID
|data.standardResumeUrl | string |Standard resume download URL
|data.resumeUrl | string |Original resume download URL
|data.attachments4App[] | object[] |Application attachment list
|data.attachments4App[]. id | integer |Business ID
|data.attachments4App[]. name | integer |Candidate attachment filename (with file extension)
|data.attachments4App[].applyFormId | integer |Application form template ID
|data.attachments4App[].size | integer |Candidate attachment file size
|data.attachments4App[].createdAt | long |Attachment upload/generation time (timestamp)
|data.attachments4App[].url | string |Candidate attachment download URL
|data.attachments4App[].customFieldId | integer |Custom attachment field ID
|data.attachments4App[].customFieldName | string |Custom attachment field name
|data.attachments4App[].type | string |Candidate attachment type:
CANDIDATE_UPLOAD_ATTACHMENT: Candidate upload
UPLOAD_PORTRAIT: Candidate portrait
HR_UPLOAD_ATTACHMENT: HR manual upload
HM_UPLOAD_ATTACHMENT: Hiring manager manual upload
INTERVIEW_ACCEPT: Application form attachment generated when candidate accepts interview
INTERVIEW_SIGNIN: Application form attachment generated when candidate signs in for interview
OFFER_ACCEPT: Application form attachment generated when candidate accepts offer
MERGE_APPLICATION_ATTACHMENT: Attachment generated from candidate merge
INVITE_UPDATE_RESUME: Application form generated when inviting candidate to update resume
ORIGINAL_RESUME: Original resume attachment
ID_CARD_FRONT: ID card front
ID_CARD_BACK: ID card back
|data.attachments4Ca[].id | integer |ID
|data.attachments4Ca[].name | string |Candidate attachment filename (with file extension)
|data.attachments4Ca[].applyFormId | integer |Application form template ID
|data.attachments4Ca[].size | integer |Candidate attachment file size
|data.attachments4Ca[].createdAt | long |Attachment upload/generation time
|data.attachments4Ca[].url | string |Candidate attachment download URL
|data.attachments4Ca[].customFieldId | integer |Custom attachment field ID
|data.attachments4Ca[].customFieldName | string |Custom attachment field name
|data.attachments4Ca[].type | string |Candidate attachment type:
CANDIDATE_UPLOAD_ATTACHMENT: Candidate upload
UPLOAD_PORTRAIT: Candidate portrait
HR_UPLOAD_ATTACHMENT: HR manual upload
HM_UPLOAD_ATTACHMENT: Hiring manager manual upload
INTERVIEW_ACCEPT: Application form attachment generated when candidate accepts interview
INTERVIEW_SIGNIN: Application form attachment generated when candidate signs in for interview
OFFER_ACCEPT: Application form attachment generated when candidate accepts offer
MERGE_APPLICATION_ATTACHMENT: Attachment generated from candidate merge
INVITE_UPDATE_RESUME: Application form generated when inviting candidate to update resume
ORIGINAL_RESUME: Original resume attachment
ID_CARD_FRONT: ID card front
ID_CARD_BACK: ID card back
Get EHR Links for Applications in Batch
Request example
curl --location 'https://api.mokahr.com/api-platform/v3/ehrLinks/get \
--header 'Authorization: ••••••' \
--header 'Content-Type: application/json' \
--data '{
"applicationIds": [411348665]
}'
Response example
{
"code": 200,
"msg": "success",
"data": {
"ehrLinks": [
{
"applicationId": 411348665,
"ehrLink": "https://app.mokahr.com/forward/candidate/info?access_token=f788e21297cb43a0a3467c0261d051e5b9c84b0192994e118e27c1e33d6e0107"
}
]
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v3/ehrLinks/get
Request parameter
Field | Required | Type | Descrption |
---|---|---|---|
applicationIds | Yes | array[integer] | Application IDs |
Response
Response body in JSON |File | Type | Descrption| |--------- | ------------ | --------| |code | integer | Response code: 200 for success, others indicate errors |msg | string | Returns "success" for success, or "false"/error message for failure |data | object | |data.ehrLinks[] | object[] | |data.ehrLinks[].ehrLink | string |Candidate EHR link |data.ehrLinks[].applicationId | integer |Candidate application ID
Query Application Information by Email, Phone, or ID Number(Max 100 Results Returned)
Request example
curl --location 'https://api.mokahr.com/api-platform/v3/applications/list_by_contact_or_id' \
--header 'Authorization: ••••••' \
--header 'Content-Type: application/json' \
--data '{
"emailList": ["123@qq.com"],
"phoneList": ["13211123113"],
"citizenIdList": ["338377211"]
}'
Response example
{
"code": 200,
"msg": "success",
"data": {
"applicationList": [
{
"applicationId": 411336681,
"appliedAt": 1709120057000,
"archiveReasons": {
"archiveReasonType": "SYSTEM",
"archivedAt": 1729962542000,
"id": 1226,
"name": "长时间未处理自动淘汰",
"type": 4
},
"archived": true,
"candidateBaseInfo": {
"activatedAt": 1722233308000,
"age": 0,
"archived": true,
"archivedAt": 1729962542000,
"birthDate": 1733025600000,
"candidateId": 201307334,
"citizen": {
"certificateType": 1,
"citizenId": null,
"idCardSignOrganization": "",
"idCardValidity": "[\"2025-03-05\",\"2025-03-21\"]"
},
"contactInfo": {
"countryCallingCode": "86",
"email": "123@mokahr.com",
"phone": "12345678909"
},
"createdAt": 1722412883000,
"experience": 4,
"gender": 2,
"graduateSchool": {
"academicDegree": 1,
"graduateDate": 1640995200000,
"lastSchool": "河北工业大学",
"lastSpeciality": "西方经济学"
},
"isBlacklist": false,
"name": "四大",
"nationality": ""
},
"createdAt": 1709120057000,
"hireMode": 2,
"job": {
"jobId": "23661249-be3f-47de-8d81-15fa4f894875",
"jobTitle": "职位名称"
},
"movedAt": 1729060403000,
"ownerInfo": {
"ownerId": null,
"ownerName": null
},
"pipeline": {
"name": "默认招聘流程",
"pipelineId": 37
},
"stage": {
"name": "面试",
"stageId": 58,
"stageType": 201
},
"updatedAt": 1743074331000
},
{
"applicationId": 411336911,
"appliedAt": 1709264021000,
"archiveReasons": {
"archiveReasonType": null,
"archivedAt": null,
"id": null,
"name": null,
"type": null
},
"archived": false,
"candidateBaseInfo": {
"activatedAt": 1722233308000,
"age": 0,
"archived": true,
"archivedAt": 1729962542000,
"birthDate": 1733025600000,
"candidateId": 201307334,
"citizen": {
"certificateType": 1,
"citizenId": null,
"idCardSignOrganization": "",
"idCardValidity": "[\"2025-03-05\",\"2025-03-21\"]"
},
"contactInfo": {
"countryCallingCode": "86",
"email": "123@mokahr.com",
"phone": "12345678909"
},
"createdAt": 1722412883000,
"experience": 4,
"gender": 2,
"graduateSchool": {
"academicDegree": 1,
"graduateDate": 1640995200000,
"lastSchool": "河北工业大学",
"lastSpeciality": "西方经济学"
},
"isBlacklist": false,
"name": "四大",
"nationality": ""
},
"createdAt": 1709264021000,
"hireMode": 2,
"job": {
"jobId": "7c8d36c9-3f63-4723-9c20-500a4ac83ea7",
"jobTitle": "职位测试1"
},
"movedAt": 1709264020000,
"ownerInfo": {
"ownerId": null,
"ownerName": null
},
"pipeline": {
"name": "测试",
"pipelineId": 200
},
"stage": {
"name": "初筛",
"stageId": 56,
"stageType": 100
},
"updatedAt": 1743074931000
}
]
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v3/applications/list_by_contact_or_id
Request parameter
Field | Required | Type | Descrption |
---|---|---|---|
emailList | No | array[string] | List of candidate emails (max 20 entries). At least one field must be non-empty. |
phoneList | No | array[string] | List of candidate phone numbers (max 20 entries). |
citizenIdList | No | array[string] | List of candidate ID numbers (max 20 entries). |
Response
Response body in JSON |File | Type | Descrption| |--------- | ------------ | --------| |code | integer | Status code: 200 for success, others indicate errors. |msg | string | success for success; error message otherwise. |data | object | |data.applicationList[]| object[] | |data.applicationList[].applicationId | integer |Unique application ID. |data.applicationList[].candidateBaseInfo | object |Candidate's basic information. |data.applicationList[].candidateBaseInfo.candidateId | integer |Unique candidate ID. |data.applicationList[].candidateBaseInfo .name| string |Candidate's name. |data.applicationList[].candidateBaseInfo.gender| integer |Gender: 1 (Male), 2 (Female) |data.applicationList[].candidateBaseInfo.age|integer |age |data.applicationList[].candidateBaseInfo.birthDate|long|Birthdate (milliseconds). |data.applicationList[].candidateBaseInfo.nationality|string |Nationality. |data.applicationList[].candidateBaseInfo.experience|integer|Years of work experience. |data.applicationList[].candidateBaseInfo.createdAt|long|Candidate creation timestamp (milliseconds). |data.applicationList[].candidateBaseInfo.archived|boolean|Whether any application is archived. |data.applicationList[].candidateBaseInfo.archivedAt|long|Archive timestamp (milliseconds). |data.applicationList[].candidateBaseInfo.activatedAt|long|Ativatedtimestamp (milliseconds). |data.applicationList[].candidateBaseInfo.isBlacklist|boolean|Whether the candidate is in the blacklist. |data.applicationList[].candidateBaseInfo.contactInfo|object| |data.applicationList[].candidateBaseInfo.contactInfo.email|string|Email. |data.applicationList[].candidateBaseInfo.contactInfo.phone|string|Phone number. |data.applicationList[].candidateBaseInfo.contactInfo.countryCallingCode|string|Country calling code (e.g., "86" for China). |data.applicationList[].candidateBaseInfo.graduateSchool|object| |data.applicationList[].candidateBaseInfo.graduateSchool.lastSpeciality|string|Graduated major. |data.applicationList[].candidateBaseInfo.graduateSchool.lastSchool|string|Graduated school. |data.applicationList[].candidateBaseInfo.graduateSchool.graduateDate|long|Graduation date (timestamp). |data.applicationList[].candidateBaseInfo.graduateSchool.academicDegree|integer|Degree: 1 (Other), 2 (Junior High or Below), 3 (High School), 4 (Technical School), 5 (Associate), 6 (Bachelor), 7 (Master), 8 (MBA), 9 (PhD). |data.applicationList[].candidateBaseInfo.citizen|object| |data.applicationList[].candidateBaseInfo.citizen.citizenId|string|ID number. |data.applicationList[].candidateBaseInfo.citizen.certificateType|integer|ID type: 1 (National ID), 2 (Hong Kong ID), 3 (Macau ID), 4 (Taiwan ID), 5 (Passport), 6 (Other). |data.applicationList[].candidateBaseInfo.citizen.idCardSignOrganization|string|Issuing authority. |data.applicationList[].candidateBaseInfo.citizen.idCardValidity|string|ID validity period (format: "[\"start_date\",\"end_date\"]"). |data.applicationList[].job|object|Job details. |data.applicationList[].job.jobId|string|Job ID. |data.applicationList[].job.jobTitle|string|Job title. |data.applicationList[].pipeline|object|Recruitment pipeline details. |data.applicationList[].pipeline.pipelineId|integer|Pipeline ID. |data.applicationList[].pipeline. name|string|Pipeline name. |data.applicationList[].stage|object|Stage details. |data.applicationList[].stage.stageId|integer|Stage ID. |data.applicationList[].stage. name|string|Stage name. |data.applicationList[].stage.stageType|integer|Stage type: 100 (Screening), 101 (Offer), 102 (Pre-onboarding), 200 (Filtering), 201 (Interview), 202 (Test), 205 (No Type), 206 (Trial Work). |data.applicationList[].archived|boolean|Whether archived. |data.applicationList[].archiveReasons|object|Archive reason details. |data.applicationList[].archiveReasons. id|integer|Archive reason ID. |data.applicationList[].archiveReasons.type|integer|Archive type: 1 (Rejected by Candidate), 2 (Rejected by Us), 3 (Hired), 4 (System), 5 (Resigned). |data.applicationList.archiveReasons.archiveReasonType|integer|Archive reason type: REJECTED_BY_CANDIDATES, REJECTED_BY_US, HIRED, SYSTEM, CHECKOUT. |data.applicationList[].archiveReasons. name|string|Archive reason name. |data.applicationList[].archiveReasons.archivedAt|long|Archive timestamp. |data.applicationList[].hireMode|integer|Recruitment mode: 1 (Social Recruitment), 2 (Campus Recruitment). |data.applicationList[].appliedAt|long|Apply timestamp. |data.applicationList[].createdAt|long|Creation timestamp. |data.applicationList[].updatedAt|long|Last update timestamp. |data.applicationList[].movedAt|long|Stage movement timestamp. |data.applicationList[].ownerInfo|object|Application owner details. |data.applicationList[].ownerInfo.ownerId|integer|Owner ID. |data.applicationList[].ownerInfo.ownerName|string|Owner name.
Query Application Information Based on Conditions (Pagination)
Request example
curl --location 'https://api.mokahr.com/api-platform/v3/applications/list_by_condition \
--header 'Authorization: ••••••' \
--header 'Content-Type: application/json' \
--data '{
"pipelineIds": [17,87],
"applicationCreateStartTime": 1722233308000,
"applicationCreateEndTime":1724911708000
}'
Response example
{
"code": 200,
"msg": "success",
"data": {
"applicationList": [
{
"applicationId": 411336681,
"appliedAt": 1709120057000,
"archiveReasons": {
"archiveReasonType": "SYSTEM",
"archivedAt": 1729962542000,
"id": 1226,
"name": "长时间未处理自动淘汰",
"type": 4
},
"archived": true,
"candidateBaseInfo": {
"activatedAt": 1722233308000,
"age": 0,
"archived": true,
"archivedAt": 1729962542000,
"birthDate": 1733025600000,
"candidateId": 201307334,
"citizen": {
"certificateType": 1,
"citizenId": null,
"idCardSignOrganization": "",
"idCardValidity": "[\"2025-03-05\",\"2025-03-21\"]"
},
"contactInfo": {
"countryCallingCode": "86",
"email": "123@mokahr.com",
"phone": "12345678909"
},
"createdAt": 1722412883000,
"experience": 4,
"gender": 2,
"graduateSchool": {
"academicDegree": 1,
"graduateDate": 1640995200000,
"lastSchool": "河北工业大学",
"lastSpeciality": "西方经济学"
},
"isBlacklist": false,
"name": "四大",
"nationality": ""
},
"createdAt": 1709120057000,
"hireMode": 2,
"job": {
"jobId": "23661249-be3f-47de-8d81-15fa4f894875",
"jobTitle": "职位名称"
},
"movedAt": 1729060403000,
"ownerInfo": {
"ownerId": null,
"ownerName": null
},
"pipeline": {
"name": "默认招聘流程",
"pipelineId": 37
},
"stage": {
"name": "面试",
"stageId": 58,
"stageType": 201
},
"updatedAt": 1743074331000
},
{
"applicationId": 411336911,
"appliedAt": 1709264021000,
"archiveReasons": {
"archiveReasonType": null,
"archivedAt": null,
"id": null,
"name": null,
"type": null
},
"archived": false,
"candidateBaseInfo": {
"activatedAt": 1722233308000,
"age": 0,
"archived": true,
"archivedAt": 1729962542000,
"birthDate": 1733025600000,
"candidateId": 201307334,
"citizen": {
"certificateType": 1,
"citizenId": null,
"idCardSignOrganization": "",
"idCardValidity": "[\"2025-03-05\",\"2025-03-21\"]"
},
"contactInfo": {
"countryCallingCode": "86",
"email": "123@mokahr.com",
"phone": "12345678909"
},
"createdAt": 1722412883000,
"experience": 4,
"gender": 2,
"graduateSchool": {
"academicDegree": 1,
"graduateDate": 1640995200000,
"lastSchool": "河北工业大学",
"lastSpeciality": "西方经济学"
},
"isBlacklist": false,
"name": "四大",
"nationality": ""
},
"createdAt": 1709264021000,
"hireMode": 2,
"job": {
"jobId": "7c8d36c9-3f63-4723-9c20-500a4ac83ea7",
"jobTitle": "职位测试1"
},
"movedAt": 1709264020000,
"ownerInfo": {
"ownerId": null,
"ownerName": null
},
"pipeline": {
"name": "测试",
"pipelineId": 200
},
"stage": {
"name": "初筛",
"stageId": 56,
"stageType": 100
},
"updatedAt": 1743074931000
}
],
"next":"eyJuZXh0SWQiOjQxMTM0NTA2MSwibmV4dFVwZGF0ZUF0Ijoi"
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v3/applications/list_by_condition
Request param
Field | Required | Type | Description |
---|---|---|---|
applicationIds | No | array[integer] | Application IDs. Max array length: 20 |
candidateIds | No | array[integer] | Candidate IDs. Max array length: 20 |
jobId | No | string | Job ID |
pipelineIds | No | array[integer] | Pipeline IDs |
stageIds | No | array[integer] | Stage IDs |
hireMode | No | integer | Recruitment mode. Valid values: 1 (Social Recruitment), 2 (Campus Recruitment). Other values will be ignored. |
archived | No | boolean | Archive status of applications. true (Archived), false (Not Archived) |
invitationUpdateStatus | No | integer | Invitation update status. 0: Not invited, 1: Not updated, 2: Updated |
updateAtStartTime | No | long | Start timestamp for update time range (Max time range: 3 months) |
updateAtEndTime | No | long | End timestamp for update time range (Max time range: 3 months) |
applicationCreateStartTime | No | long | Start timestamp for data creation time (Refers to when the application was first saved to the database. Max range: 3 months) |
applicationCreateEndTime | No | long | End timestamp for data creation time (Refers to when the application was first saved to the database. Max range: 3 months) |
applicationAppliedAtStartTime | No | long | Start timestamp for application creation time (Refers to the system-displayed application date. Max range: 3 months) |
applicationAppliedAtEndTime | No | long | End timestamp for application creation time (Refers to the system-displayed application date. Max range: 3 months) |
limit | No | integer | Pagination page size. Default: 20, Max: 20 |
next | No | string | Pagination token (Only this parameter needs to be provided for pagination) |
Response
Response body in JSON |File | Type | Descrption| |--------- | ------------ | --------| |code | integer | Status code: 200 for success, others indicate errors. |msg | string | success for success; error message otherwise. |data | object | |data.next| string |Pagination token (Only this parameter needs to be provided for pagination) |data.applicationList[]| object[] | |data.applicationList[].applicationId | integer |Unique application ID. |data.applicationList[].candidateBaseInfo | object |Candidate's basic information. |data.applicationList[].candidateBaseInfo.candidateId | integer |Unique candidate ID. |data.applicationList[].candidateBaseInfo .name| string |Candidate's name. |data.applicationList[].candidateBaseInfo.gender| integer |Gender: 1 (Male), 2 (Female) |data.applicationList[].candidateBaseInfo.age|integer |age |data.applicationList[].candidateBaseInfo.birthDate|long|Birthdate (milliseconds). |data.applicationList[].candidateBaseInfo.nationality|string |Nationality. |data.applicationList[].candidateBaseInfo.experience|integer|Years of work experience. |data.applicationList[].candidateBaseInfo.createdAt|long|Candidate creation timestamp (milliseconds). |data.applicationList[].candidateBaseInfo.archived|boolean|Whether any application is archived. |data.applicationList[].candidateBaseInfo.archivedAt|long|Archive timestamp (milliseconds). |data.applicationList[].candidateBaseInfo.activatedAt|long|Ativatedtimestamp (milliseconds). |data.applicationList[].candidateBaseInfo.isBlacklist|boolean|Whether the candidate is in the blacklist. |data.applicationList[].candidateBaseInfo.contactInfo|object| |data.applicationList[].candidateBaseInfo.contactInfo.email|string|Email. |data.applicationList[].candidateBaseInfo.contactInfo.phone|string|Phone number. |data.applicationList[].candidateBaseInfo.contactInfo.countryCallingCode|string|Country calling code (e.g., "86" for China). |data.applicationList[].candidateBaseInfo.graduateSchool|object| |data.applicationList[].candidateBaseInfo.graduateSchool.lastSpeciality|string|Graduated major. |data.applicationList[].candidateBaseInfo.graduateSchool.lastSchool|string|Graduated school. |data.applicationList[].candidateBaseInfo.graduateSchool.graduateDate|long|Graduation date (timestamp). |data.applicationList[].candidateBaseInfo.graduateSchool.academicDegree|integer|Degree: 1 (Other), 2 (Junior High or Below), 3 (High School), 4 (Technical School), 5 (Associate), 6 (Bachelor), 7 (Master), 8 (MBA), 9 (PhD). |data.applicationList[].candidateBaseInfo.citizen|object| |data.applicationList[].candidateBaseInfo.citizen.citizenId|string|ID number. |data.applicationList[].candidateBaseInfo.citizen.certificateType|integer|ID type: 1 (National ID), 2 (Hong Kong ID), 3 (Macau ID), 4 (Taiwan ID), 5 (Passport), 6 (Other). |data.applicationList[].candidateBaseInfo.citizen.idCardSignOrganization|string|Issuing authority. |data.applicationList[].candidateBaseInfo.citizen.idCardValidity|string|ID validity period (format: "[\"start_date\",\"end_date\"]"). |data.applicationList[].job|object|Job details. |data.applicationList[].job.jobId|string|Job ID. |data.applicationList[].job.jobTitle|string|Job title. |data.applicationList[].pipeline|object|Recruitment pipeline details. |data.applicationList[].pipeline.pipelineId|integer|Pipeline ID. |data.applicationList[].pipeline. name|string|Pipeline name. |data.applicationList[].stage|object|Stage details. |data.applicationList[].stage.stageId|integer|Stage ID. |data.applicationList[].stage. name|string|Stage name. |data.applicationList.stage.stageType|integer|Stage type: 100 (Screening), 101 (Offer), 102 (Pre-onboarding), 200 (Filtering), 201 (Interview), 202 (Test), 205 (No Type), 206 (Trial Work). |data.applicationList[].archived|boolean|Whether archived. |data.applicationList[].archiveReasons|object|Archive reason details. |data.applicationList[].archiveReasons. id|integer|Archive reason ID. |data.applicationList[].archiveReasons.type|integer|Archive type: 1 (Rejected by Candidate), 2 (Rejected by Us), 3 (Hired), 4 (System), 5 (Resigned). |data.applicationList[].archiveReasons.archiveReasonType|integer|Archive reason type: REJECTED_BY_CANDIDATES, REJECTED_BY_US, HIRED, SYSTEM, CHECKOUT. |data.applicationList[].archiveReasons. name|string|Archive reason name. |data.applicationList[].archiveReasons.archivedAt|long|Archive timestamp. |data.applicationList[].hireMode|integer|Recruitment mode: 1 (Social Recruitment), 2 (Campus Recruitment). |data.applicationList[].appliedAt|long|Apply timestamp. |data.applicationList[].createdAt|long|Creation timestamp. |data.applicationList[].updatedAt|long|Last update timestamp. |data.applicationList[].movedAt|long|Stage movement timestamp. |data.applicationList[].ownerInfo|object|Application owner details. |data.applicationList[].ownerInfo.ownerId|integer|Owner ID. |data.applicationList[].ownerInfo.ownerName|string|Owner name.
Get candidate information in batches based on application Id
Request example
curl --location 'https://api.mokahr.com/api-platform/v3/data/getApplictaions\
--header 'Authorization: ••••••' \
--header 'Content-Type: application/json' \
--data '{
"applicationIds": [411348665]
}'
Response example
{
"code": 200,
"msg": "success",
"data": {
"applicationList": [
{
"aimWorkCity": null,
"applicationId": 411348665,
"appliedAt": 1744702215000,
"archiveReasons": {
"archiveReasonType": null,
"archivedAt": null,
"id": null,
"name": null,
"type": null
},
"archived": false,
"candidateBaseInfo": {
"activatedAt": null,
"age": 23,
"archived": true,
"archivedAt": 1740043077000,
"birthDate": 1004673600000,
"candidateId": 201308793,
"citizen": {
"certificateType": 1,
"citizenId": "513426200111024713",
"idCardSignOrganization": "",
"idCardValidity": ""
},
"contactInfo": {
"countryCallingCode": "86",
"email": "2911890697@qq.com",
"phone": "18228735128"
},
"createdAt": 1731651173000,
"experience": 1,
"gender": 1,
"graduateSchool": {
"academicDegree": 1,
"graduateDate": null,
"lastSchool": "清华大学",
"lastSpeciality": null
},
"isBlacklist": false,
"name": "乔峰",
"nationality": null
},
"candidateInfo": {
"additionalInfo": {
"personalInterests": null,
"personalUrl": null,
"skill": null
},
"awardInfo": [],
"birthYear": 2001,
"candidateId": 201308793,
"customFieldList": [
{
"builtinInfoId": null,
"candidateId": 201308793,
"customFieldId": 225230,
"index": 0,
"name": "自定义字段单选",
"now": null,
"section": "jobIntention",
"value": 110102
}
],
"educationInfo": [
{
"academicDegree": 1,
"endTime": null,
"id": 202305356,
"now": false,
"school": "清华大学",
"speciality": null,
"startTime": null
}
],
"ethnic": 58,
"experienceInfo": [],
"intentionInfo": {
"aimSalary": null,
"forwardIndustry": null,
"forwardLocation": "发"
},
"interestSource": [
{
"id": null,
"level": 1,
"name": "校招门户"
},
{
"id": 410239017,
"level": 2,
"name": "9999"
},
{
"id": 0,
"level": 3,
"name": "自然流量"
}
],
"languageInfo": [],
"nativePlace": null,
"political": null,
"portrait": null,
"portraitUrl": null,
"practiceInfo": [],
"projectInfo": [],
"salary": null,
"switchStatus": null
},
"checkinInfo": {
"correctedAt": null,
"headcountId": null,
"probation": null
},
"createdAt": 1744702215000,
"hireMode": 2,
"invitationUpdateStatus": 0,
"job": {
"jobId": "8ec55ea0-e437-4875-92b2-1fffaef946a8",
"jobTitle": "校招"
},
"lockInfo": {
"lockId": null,
"lockType": null,
"lockedAt": null
},
"movedAt": 1744702214000,
"ownerInfo": {
"ownerId": null,
"ownerName": null
},
"pipeline": {
"name": "默认招聘流程",
"pipelineId": 37
},
"sourceInfo": {
"category": "校招门户",
"recommendReason": null,
"recommenderId": null,
"sourceId": 410239017,
"sourceName": "9999",
"sourceType": 2
},
"stage": {
"name": "初筛",
"stageId": 56,
"stageType": 100
},
"updatedAt": 1744709040000
}
]
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v3/data/getApplictaions
Request parameter
Field | Required | Description |
---|---|---|
applicationIds | Yes | array[integer] |
Response
Response body in JSON
File | Type | Descrption |
---|---|---|
code | integer | Status code (200 = success, others indicate errors) |
msg | string | "success" or error message |
data | object | |
data.applicationList[] | object[] | List of application details |
data.applicationList[].applicationId | integer | Application ID |
data.applicationList[].aimWorkCity | string | Preferred work city |
data.applicationList[].invitationUpdateStatus | integer | Resume update invitation status: 0:Not invited, 1=Not updated, 2:Updated |
data.applicationList[].candidateBaseInfo | object | Basic candidate information |
data.applicationList[].candidateBaseInfo.candidateId | integer | |
data.applicationList[].candidateBaseInfo .name | string | name |
data.applicationList[].candidateBaseInfo.gender | integer | Gender: 1 for Male, 2 for Female |
data.applicationList[].candidateBaseInfo.age | integer | Age |
data.applicationList[].candidateBaseInfo.birthDate | long | Date of birth (timestamp format) |
data.applicationList[].candidateBaseInfo.nationality | string | Nationality |
data.applicationList[].candidateBaseInfo.experience | integer | Work experience (in years) |
data.applicationList[].candidateBaseInfo.createdAt | long | Creation time (timestamp format) |
data.applicationList[].candidateBaseInfo.archived | boolean | if any application archived |
data.applicationList[].candidateBaseInfo.archivedAt | long | Archiving date (timestamp format) |
data.applicationList[].candidateBaseInfo.activatedAt | integer | Last activation time (timestamp format) |
data.applicationList[].candidateBaseInfo.isBlacklist | boolean | Whether the candidate is in the blacklist talent pool |
data.applicationList[].candidateBaseInfo.contactInfo | object | Contact information |
data.applicationList[].candidateBaseInfo.contactInfo.email | string | |
data.applicationList[].candidateBaseInfo.contactInfo.phone | string | Phone number |
data.applicationList[].candidateBaseInfo.contactInfo.countryCallingCode | string | Country calling code |
data.applicationList[].candidateBaseInfo.graduateSchool | object | Graduate school information |
data.applicationList[].candidateBaseInfo.graduateSchool.lastSpeciality | string | Graduated major |
data.applicationList[].candidateBaseInfo.graduateSchool.lastSchool | string | Graduated school |
data.applicationList[].candidateBaseInfo.graduateSchool.graduateDate | long | Graduation date (timestamp format) |
data.applicationList[].candidateBaseInfo.graduateSchool.academicDegree | integer | Academic degree: 1: Other, 2: Junior high school or below, 3: Senior high school, 4: Secondary vocational school, 5: College, 6: Bachelor's degree, 7: Master's degree, 8: MBA, 9: Doctorate |
data.applicationList[].candidateBaseInfo.citizen | object | Citizen information |
data.applicationList[].candidateBaseInfo.citizen.citizenId | string | Certificate number |
data.applicationList[].candidateBaseInfo.citizen.certificateType | integer | Certificate type: 1: ID card, 2: Hong Kong ID card, 3: Macau ID card, 4: Taiwan ID card, 5: Passport, 6: Other certificates |
data.applicationList[].candidateBaseInfo.citizen.idCardSignOrganization | string | Issuing authority |
data.applicationList[].candidateBaseInfo.citizen.idCardValidity | string | Certificate validity period, format: "["2025-03-05","2025-03-21"]" |
data.applicationList[].job | object | Job information |
data.applicationList[].job.jobId | string | Job ID |
data.applicationList[].job.jobTitle | string | Job title |
data.applicationList[].pipeline | object | Pipeline information |
data.applicationList[].pipeline.pipelineId | integer | Pipeline ID |
data.applicationList[].pipeline. name | string | Pipeline name |
data.applicationList[].stage | object | Stage Information |
data.applicationList[].stage.stageId | integer | Stage ID |
data.applicationList[].stage. name | string | Stage name |
data.applicationList[].stage.stageType | integer | Stage type: 100 - Preliminary screening, 101 - Offer stage, 102 - Pending onboarding,200 - Selection, 201 - Interview, 202 - Test, 205 - No type, 206 - Trial work |
data.applicationList[].archived | boolean | If archived |
data.applicationList[].archiveReasons | object | Archiving reason |
data.applicationList[].archiveReasons. id | integer | Archiving reason ID |
data.applicationList[].candidateBaseInfo.contactInfo.countryCallingCode | string | Country calling code |
data.applicationList[].candidateBaseInfo.graduateSchool | object | Graduate school information |
data.applicationList[].candidateBaseInfo.graduateSchool.lastSpeciality | string | Graduated major |
data.applicationList[].candidateBaseInfo.graduateSchool.lastSchool | string | Graduated school |
data.applicationList[].candidateBaseInfo.graduateSchool.graduateDate | long | Graduation date (timestamp format) |
data.applicationList[].candidateBaseInfo.graduateSchool.academicDegree | integer | Academic degree: 1: Other, 2: Junior high school or below, 3: Senior high school, 4: Secondary vocational school, 5: College, 6: Bachelor's degree, 7: Master's degree, 8: MBA, 9: Doctorate |
data.applicationList[].candidateBaseInfo.citizen | object | Citizen information |
data.applicationList[].candidateBaseInfo.citizen.citizenId | string | Certificate number |
data.applicationList[].candidateBaseInfo.citizen.certificateType | integer | Certificate type: 1: ID card, 2: Hong Kong ID card, 3: Macau ID card, 4: Taiwan ID card, 5: Passport, 6: Other certificates |
data.applicationList[].candidateBaseInfo.citizen.idCardSignOrganization | string | Issuing authority |
data.applicationList[].candidateBaseInfo.citizen.idCardValidity | string | Certificate validity period, format: "["2025-03-05","2025-03-21"]" |
data.applicationList[].job | object | Job information |
data.applicationList[].job.jobId | string | Job ID |
data.applicationList[].job.jobTitle | string | Job title |
data.applicationList[].pipeline | object | Pipeline information |
data.applicationList[].pipeline.pipelineId | integer | Pipeline ID |
data.applicationList[].pipeline. name | string | Pipeline name |
data.applicationList[].stage | object | Stage Information |
data.applicationList[].stage.stageId | integer | Stage ID |
data.applicationList[].stage. name | string | Stage name |
data.applicationList[].stage.stageType | integer | Stage type: 100 - Preliminary screening, 101 - Offer stage, 102 - Pending onboarding,200 - Selection, 201 - Interview, 202 - Test, 205 - No type, 206 - Trial work |
data.applicationList[].archived | boolean | If archived |
data.applicationList[].archiveReasons | object | Archiving reason |
data.applicationList[].archiveReasons. id | integer | Archiving reason ID |
data.applicationList[].archiveReasons.type | integer | Archiving type:1 Rejected by candidate,2Rejected by us,3 Hired 4 System reason,5 Resigned |
data.applicationList[].archiveReasons.archiveReasonType | integer | Archiving reason type: REJECTED_BY_CANDIDATES - Rejected by candidate, REJECTED_BY_US - Rejected by us, HIRED - Hired, SYSTEM - System reason, CHECKOUT - Resigned |
data.applicationList[].archiveReasons. name | string | Archiving reason name |
data.applicationList[].archiveReasons.archivedAt | long | Archiving time (timestamp format) |
data.applicationList[].hireMode | integer | 1=Social Recruitment, 2=Campus Recruitment |
data.applicationList[].appliedAt | long | Application timestamp (Unix epoch format) |
data.applicationList[].createdAt | long | Application creation timestamp (Unix epoch format) |
data.applicationList[].updatedAt | long | Last update timestamp (Unix epoch format) |
data.applicationList[].movedAt | long | Stage transition timestamp (Unix epoch format) |
data.applicationList[].ownerInfo | object | Application ownerInfo |
data.applicationList[].ownerInfo.ownerId | integer | OwnerId |
data.applicationList[].ownerInfo.ownerName | string | Owner name |
data.applicationList[].candidateInfo | object | |
data.applicationList[].candidateInfo.candidateId | integer | Candidate Id |
data.applicationList[].candidateInfo.portrait | string | Portrait (photo) key |
data.applicationList[].candidateInfo.portraitUrl | string | Portrait (photo) download UR |
data.applicationList[].candidateInfo.political | integer | Political 1 PARTY_MEMBER 2 PROBATIONARY_PARTY_MEMBER 3 LEAGUE_MEMBER 4 PARTY_MEMBER_OF_THE_DEMOCRATIC_REVOLUTION 5 A_MEMBER_OF_THE_DEMOCRATIC_LEAGUE 6 MEMBER_OF_CIVIL_CONSTRUCTION_CORPORATION 7 CIVIL_PROGRESS_MEMBER 8 MEMBER_OF_THE_PEASANT_LABOR_PARTY 9 A_MEMBER_OF_THE_PUBLIC_PARTY 10 MEMBER_OF_JIUSAN_SOCIETY 11 MEMBER_OF_THE_TAIWAN_UNION 12 PERSONS_WITHOUT_PARTY_AFFILIATION 13 MASS |
data.applicationList[].candidateInfo.birthYear | integer | BirthYear |
data.applicationList[].candidateInfo.ethnic | integer | Ethnic 1:Drung,2:Achang,3:Manchu,4:Dongxiang,5:Dai,6:Korean,7:Gaoshan,8:Lhoba,9:Oroqen,10:Dong,11:Hani,12:She,13:Shui,14:Yao,15:Yi,16:Ewenki,17:Tu,18:Ozbek,19:Pumi,20:Yugur,21:Jing,22:Zhuang,23:Han,24:Bonan,25:Tajik,26:Gelao,27:Bulang,28:Mengol,29:Chuanqing,30:Hui,31:Mulam,32:Salar,33:Kazak,34:Jingpo,35:Tatar,36:Miao,37:Qiang,38:Naxi,39:Li,40:Jino,41:Hezhen,42:Xibe,43:Va,44:Tujia,45:Maonan,46:Kirgiz,47:Deang,48:Tibetan,49:Nu,50:Uygur,51:Lisu,52:Bai,53:Lahu,54:Moinba,55:Russian,56:Tawoer,57:Bouyei,58:UNKNOW |
data.applicationList[].candidateInfo.nativePlace | integer | Native place (National administrative code, 6-digit district code) |
data.applicationList[].candidateInfo.salary | string | Salary |
data.applicationList[].candidateInfo.switchStatus | integer | Employment status (1-Employed, 2-Resigned) |
data.applicationList[].candidateInfo.additionalInfo | ** object ** | Candidate's additional information |
data.applicationList[].candidateInfo.skill | string | Skill |
data.applicationList[].candidateInfo.personalInterests | string | Personal interests |
data.applicationList[].candidateInfo.personalUrl | string | Personal URL |
data.applicationList[].candidateInfo.educationInfo[] | object[] | Candidate's educational background |
data.applicationList[].candidateInfo.educationInfo[].id | integer | Educational record ID |
data.applicationList[].candidateInfo.educationInfo[].school | string | School |
data.applicationList[].candidateInfo.educationInfo[].speciality | string | Major |
data.applicationList[].candidateInfo.educationInfo[].academicDegree | integer | Academic degree (1-Other, 2-Junior high school and below, 3-Senior high school, 4-Vocational secondary school, 5-Junior college, 6-Bachelor's degree, 7-Master's degree, 8-MBA, 9-Doctoral degree) |
data.applicationList[].candidateInfo.educationInfo[].startTime | long | Start time (timestamp format) |
data.applicationList[].candidateInfo.educationInfo[].endTime | long | End time (timestamp format) |
data.applicationList[].candidateInfo.educationInfo[].now | boolean | Indicates whether the end time is "present". When the end time is the present, now=true, in this case, the value of endTime may be arbitrary and can be ignored. |
data.applicationList[].candidateInfo.experienceInfo[] | object[] | Candidate's work experience |
data.applicationList[].candidateInfo.experienceInfo[].id | integer | Work experience ID |
data.applicationList[].candidateInfo.experienceInfo[].company | string | Company |
data.applicationList[].candidateInfo.experienceInfo[].title | string | Position title |
data.applicationList[].candidateInfo.experienceInfo[].summary | string | Job responsibilities |
data.applicationList[].candidateInfo.experienceInfo[].location | string | Workplace location |
data.applicationList[].candidateInfo.experienceInfo[].industry | string | Industry |
data.applicationList[].candidateInfo.experienceInfo[].leader | string | Reporting to |
data.applicationList[].candidateInfo.experienceInfo[].size | string | Company size |
data.applicationList[].candidateInfo.experienceInfo[].type | string | Company nature |
data.applicationList[].candidateInfo.experienceInfo[].department | string | Department |
data.applicationList[].candidateInfo.experienceInfo[].reasonForLeaving | string | Reason for leaving |
data.applicationList[].candidateInfo.experienceInfo[].salary | string | Salary |
data.applicationList[].candidateInfo.experienceInfo[].underlingNumber | string | Number of subordinates |
data.applicationList[].candidateInfo.experienceInfo[].startTime | long | Start time (timestamp format) |
data.applicationList[].candidateInfo.experienceInfo[].endTime | long | End time (timestamp format) |
data.applicationList[].candidateInfo.experienceInfo[].now | boolean | Indicates whether the end time is "present". When the end time is the present, now=true, in this case, the value of endTime may be arbitrary and can be ignored. |
data.applicationList[].candidateInfo.awardInfo[] | object[] | Candidate award information |
data.applicationList[].candidateInfo.awardInfo[].id | integer | Award experience ID |
data.applicationList[].candidateInfo.awardInfo[].awardDate | string | Award date |
data.applicationList[].candidateInfo.awardInfo[].awardName | string | Award name |
data.applicationList[].candidateInfo.customFieldList[] | object[] | Candidate extended information |
data.applicationList[].candidateInfo.customFieldList[].customFieldId | integer | Custom field ID |
data.applicationList[].candidateInfo.customFieldList[].candidateId | integer | Candidate ID |
data.applicationList[].candidateInfo.customFieldList[].name | string | Custom field name |
data.applicationList[].candidateInfo.customFieldList[].value | object | Custom field value, returns different types of values based on the field type |
data.applicationList[].candidateInfo.customFieldList[].section | string | Field module, declares which parent-level custom field it belongs to: basicInfo Personal information, jobIntention Job intention, experienceInfo Work experience, educationInfo Education background, practiceInfo Internship experience, projectInfo Project experience, languageInfo Language ability, selfDescription Self-description, awardInfo Award information |
data.applicationList[].candidateInfo.customFieldList[].now | boolean | Exists for time period fields, indicates whether the end time is "present". When now=true, endTime may have any value and can be ignored. |
data.applicationList[].candidateInfo.customFieldList[].index | integer | Index, for modules with multiple data entries (e.g., work experience or education background), index indicates the order of this custom field information. |
data.applicationList[].candidateInfo.customFieldList[].builtinInfoId | integer | Links custom info to its module (e.g., specific work or education experience) |
data.applicationList[].candidateInfo.projectInfo[] | object[] | Candidate project experience |
data.applicationList[].candidateInfo.projectInfo[].id | integer | Project experience ID |
data.applicationList[].candidateInfo.projectInfo[].candidateId | integer | Candidate ID |
data.applicationList[].candidateInfo.projectInfo[].projectName | string | Project name |
data.applicationList[].candidateInfo.projectInfo[].projectDescription | string | Project description |
data.applicationList[].candidateInfo.projectInfo[].title | string | Role held |
data.applicationList[].candidateInfo.projectInfo[].responsibilities | string | Responsibilities in the project |
data.applicationList[].candidateInfo.projectInfo[].startTime | long | Start time (timestamp) |
data.applicationList[].candidateInfo.projectInfo[].endTime | long | End time (timestamp) |
data.applicationList[].candidateInfo.projectInfo[].now | boolean | Indicates if the end time is "present". If true, ignore endTime. |
data.applicationList[].candidateInfo.languageInfo | object[] | Candidate language information |
data.applicationList[].candidateInfo.languageInfo[].id | integer | Language info ID |
data.applicationList[].candidateInfo.languageInfo[].language | string | Language type |
data.applicationList[].candidateInfo.languageInfo[].level | string | Proficiency level |
data.applicationList[].candidateInfo.languageInfo[].listenAndSpeak | string | Listening and speaking skills |
data.applicationList[].candidateInfo.languageInfo[].readAndWrite | string | Reading and writing skills |
data.applicationList[].candidateInfo.practiceInfo[] | object[] | Candidate internship experience |
data.applicationList[].candidateInfo.practiceInfo[].id | integer | Project experience ID |
data.applicationList[].candidateInfo.practiceInfo[].candidateId | integer | Candidate ID |
data.applicationList[].candidateInfo.practiceInfo[].company | string | Company name |
data.applicationList[].candidateInfo.practiceInfo[].title | string | Job title |
data.applicationList[].candidateInfo.practiceInfo[].summary | string | Job responsibilities |
data.applicationList[].candidateInfo.practiceInfo[].location | string | Job location |
data.applicationList[].candidateInfo.practiceInfo[].industry | string | Industry |
data.applicationList[].candidateInfo.practiceInfo[].leader | string | Reporting to |
data.applicationList[].candidateInfo.practiceInfo[].size | string | Company size |
data.applicationList[].candidateInfo.practiceInfo[].type | string | Company type |
data.applicationList[].candidateInfo.practiceInfo[].department | string | Department |
data.applicationList[].candidateInfo.practiceInfo[].salary | string | Salary |
data.applicationList[].candidateInfo.practiceInfo[].startTime | long | Start time (timestamp) |
data.applicationList[].candidateInfo.practiceInfo[].endTime | long | End time (timestamp) |
data.applicationList[].candidateInfo.practiceInfo[].now | boolean | Indicates if end time is "present". If true, ignore endTime |
data.applicationList[].candidateInfo.interestSource | object[] | Candidate interest source info |
data.applicationList[].candidateInfo.interestSource[].id | integer | Interest source ID |
data.applicationList[].candidateInfo.interestSource[].name | string | Name |
data.applicationList[].candidateInfo.interestSource[].level | integer | Level |
data.applicationList[].candidateInfo.intentionInfo | object | Candidate intention info |
data.applicationList[].candidateInfo.intentionInfo.forwardIndustry | string | Expected industry |
data.applicationList[].candidateInfo.intentionInfo.aimSalary | string | Expected salary |
data.applicationList[].candidateInfo.intentionInfo.forwardLocation | string | Expected city |
data.applicationList[].checkinInfo | object | Onboarding info |
data.applicationList[].checkinInfo.probation | integer | Probation period (months) |
data.applicationList[].checkinInfo.correctedAt | long | Confirmation date (timestamp) |
data.applicationList[].checkinInfo.headcountId | integer | Recruitment demand ID |
data.applicationList[].lockInfo | object | Lock info |
data.applicationList[].lockType | integer | Lock type: 1=Full yellow, 2=Full gray, 3=Project yellow, 4=Project gray, 5=Group yellow, 6=Group gray, 7=Stage yellow, 8=Stage gray |
data.applicationList[].lockedAt | long | Lock time (timestamp) |
data.applicationList[].lockId | integer | Lock ID |
data.applicationList[].sourceInfo | object | Source info |
data.applicationList[].sourceInfo.sourceId | integer | Source ID |
data.applicationList[].sourceInfo.sourceName | string | Source name |
data.applicationList[].sourceInfo.sourceType | integer | Resume source: 1=Active search, 2=Active submission, 3=Internal recommendation, 4=Headhunter recommendation |
data.applicationList[].sourceInfo.recommenderId | integer | Recommender ID (for internal/headhunter recommendation) |
data.applicationList[].sourceInfo.recommendReason | string | Recommendation reason (for internal/headhunter recommendation) |
data.applicationList[].sourceInfo.category | string | Channel category info |
Talent poolAPI
Check Talent pool list
The return value is a list of talent pools set under this customer
> Request example
$ curl https://api.mokahr.com/api-platform/v1/talentPool/list?hireMode=1 \
-u 'your_api_key:' \
-X GET \
>
[
{
"id": 115,
"name": "系统入职Talent pool",
"description": "保存Regular employee的员工,仅对授权用户、Administrator及以上权限用户可见",
"hire_mode": 1,
"isPrivate": 0
},
{
"id": 116,
"name": "系统公共Talent pool",
"description": "所有HR权限及以上用户可见,用户可浏览公共Talent pool中所有Candidate",
"hire_mode": 1,
"isPrivate": 0
},
{
"id": 117,
"name": "系统Blacklist ",
"description": "",
"hire_mode": 1,
"isPrivate": 0
}
]
> 传rangeParameter视为新版本,Response example
{
"success": true,
"msg": "success",
"data": [{
"id": 21,
"name": "系统入职Talent pool",
"description": "所有HR权限及以上用户可见,用户可浏览其相关职位下的Regular employeeCandidate",
"hireMode": 1,
"isPrivate": 0,
"creatorId": null,
"authUsers": []
},
{
"id": 22,
"name": "系统公共Talent pool",
"description": "所有HR权限及以上用户可见,用户可浏览公共Talent pool中所有Candidate",
"hireMode": 1,
"isPrivate": 0,
"creatorId": null,
"authUsers": []
},
{
"id": 36,
"name": "测试111",
"description": "",
"hireMode": 1,
"isPrivate": 1,
"creatorId": 1,
"authUsers": [{
"userId": 1,
"name": "haha",
"email": "haha@trymoka.com",
"phone": "18812345678",
"number": null
},
{
"userId": 16,
"name": "small hr ceshi",
"email": "why_pm@163.com",
"phone": null,
"number": null
}
]
},
{
"id": 203,
"name": "系统Blacklist ",
"description": null,
"hireMode": 1,
"isPrivate": 0,
"creatorId": null,
"authUsers": []
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/talentPool/list?hireMode=1
Request parameter
Field | Required | Description |
---|---|---|
hireMode | No | Optional values are:1 :experienced hires 2 : Campus recruitment Do not pass default all modes |
range | No | open/all The range of talent pool response data (The default is to return the public talent pool except for the regular employee talent pool and the blacklist when passing nothing or open) |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Talent pool id |
name | string | Talent pool name |
description | string | Description |
hire_mode | integer | Optional values are:1 :Experienced hires 2 : Campus recruitment |
isPrivate | integer | Optional values are:0: Private pool1 : Public talent pool |
creatorId | integer | Creator id |
authUsers | Array | Authorized user |
authUsers[].userId | integer | Authorized user id |
authUsers[].name | string | Authorized user name |
authUsers[].email | string | Authorized user email |
authUsers[].phone | string | Authorized user phone |
authUsers[].number | string | Authorized user employee No. |
Check Talent pool下Candidate
Response value为该客户下Talent pool里Candidate相关信息 分页Response一页20条数据
> Request example
$ curl https://api.mokahr.com/api-platform/v1/talentPool/Candidates?archivedAtStart=2019-06-01&archivedAtEnd=2019-11-01&talentPoolIds=[666,888] \
-u 'your_api_key:' \
-X GET \
> Response example
{
"success": true,
"data": {
"Candidates": [{
"id": 4293,
"name": "姜浩",
"email": "82355110791@qq.com",
"phone": "18762604190",
"gender": "Male",
"birthYear": null,
"ethnic": null,
"nationality": null,
"nativePlace": null,
"highestDegree": null,
"certificateType": 1,
"citizenId": null,
"location": null,
"CandidateArchivedAt": "2019-10-30T07:28:26.000Z",
"archiveHistory": [{
"id": 39131,
"stageId": 56,
"stage": "Initial screen",
"archivedAt": "2019-10-30T07:28:26.000Z",
"archiveReasonId": 1113,
"archiveReason": "加入Blacklist ",
"archiveType": "系统原因",
"archiveDetail": null,
"blacklistTags": "态度恶劣,简历造假",
"blacklistDetail": "789"
}],
"talentPools": [{
"talentPoolId": 203,
"talentPoolName": "系统Blacklist "
}]
}, {
"id": 21906,
"name": "fanhaha",
"email": "fanhaha@mokahr.com",
"phone": null,
"gender": null,
"birthYear": null,
"ethnic": null,
"nationality": null,
"nativePlace": null,
"highestDegree": null,
"certificateType": 1,
"CandidateArchivedAt": "2019-10-17T05:26:57.000Z",
"archiveHistory": [{
"id": 39162,
"stageId": 56,
"stage": "Initial screen",
"archivedAt": "2019-10-17T05:26:57.000Z",
"archiveReasonId": 7,
"archiveReason": "胜任力不足",
"archiveType": "我们Reject了Candidate",
"archiveDetail": null
}],
"talentPools": [{
"talentPoolId": 22,
"talentPoolName": "系统公共Talent pool"
}]
},
{
"id": 8805,
"name": "邓婷婷",
"email": "18857886047@163.com",
"phone": "18857886047",
"gender": "Female",
"birthYear": 1990,
"ethnic": null,
"nationality": null,
"nativePlace": null,
"highestDegree": null,
"certificateType": 1,
"CandidateArchivedAt": "2019-10-17T05:26:57.000Z",
"archiveHistory": [{
"id": 15793,
"stageId": 56,
"stage": "Initial screen",
"archivedAt": "2017-08-18T07:51:24.000Z",
"archiveReasonId": 96,
"archiveReason": "淘汰",
"archiveType": "我们Reject了Candidate",
"archiveDetail": null
},
{
"id": 39132,
"stageId": 56,
"stage": "Initial screen",
"archivedAt": "2019-10-17T05:26:57.000Z",
"archiveReasonId": 7,
"archiveReason": "胜任力不足",
"archiveType": "我们Reject了Candidate",
"archiveDetail": null
}
],
"talentPools": [{
"talentPoolId": 37,
"talentPoolName": "中级产品类"
},
{
"talentPoolId": 22,
"talentPoolName": "系统公共Talent pool"
}
]
}
],
"nextCursor": "eyJjYW5kaWRhdGVJZCI6MTQzMzR9"
}
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/talentPool/Candidates?archivedAtStart=2019-06-01&archivedAtEnd=2019-11-01
Request parameter
Field | Required | Type | Description |
---|---|---|---|
archivedAtStart | Yes | string | Minimum archive time |
archivedAtEnd | Yes | string | Maximum archive time |
talentPoolIds | No | Array | Talent pool id list |
nextCursor | No | string | Next page (20 entries per page) paging mark |
Response
The Candidates field information of returned data is as follows:
Field | Type | Description |
---|---|---|
id | integer | Candidate id |
name | string | Name |
string | ||
phone | string | Phone |
gender | string | Gender |
birthYear | string | Birthyear |
ethnic | string | Ethnicity |
nationality | string | Nationality |
nativePlace | string | Birthplace |
highestDegree | string | Highest education |
certificateType | integer | Certificate type Optional values are: 1 : id card2 : Hong Kong id card 3 : Macau id card4 :Taiwan id card5 : Passport6 : Other identity document 7 : Exit-Entry Permit for Travelling to and from Hong Kong and Macau (EEP)8 : The Mainland Travel Permit for Taiwan Residents9 : Foreigners' Work Permit10 :Residence Permit for Foreigner |
citizenId | string | identification No. |
location | string | Location |
CandidateArchivedAt | string | Last archive time of Candidate |
archiveHistory | Array | Application archive record |
archiveHistory[].id | integer | applicationID |
archiveHistory[].stageId | integer | The stage name of pre-archive id |
archiveHistory[].stage | string | The stage name of pre-archive |
archiveHistory[].archivedAt | string | Archive application time |
archiveHistory[].archiveReasonId | integer | Reason for archiveID |
archiveHistory[].archiveReason | string | Reason for archive |
archiveHistory[].archiveType | string | Archive type |
archiveHistory[].archiveDetail | string | Archive details |
archiveHistory[].blacklistTags | string | Blacklist tags (only in blacklist pool) |
archiveHistory[].blacklistDetail | string | Blacklist reason (only in blacklist pool) |
talentPools | Array | The talent pool list that current Candidate in |
talentPools[].talentPoolId | integer | Talent poolID |
talentPools[].talentPoolName | string | Talent pool name |
Check the list of archive reasons for user rejection types
The return value is all rejection reasons set under the customer, including system default and custom
> Request example
$ curl https://api.mokahr.com/api-platform/v1/archiveReasons \
-u 'your_api_key:' \
-X GET \
> Response example
{
"success": true,
"data": [
{
"id": 419,
"name": "福利待遇不满足",
"type": 1
},
{
"id": 420,
"name": "Work location较远",
"type": 1
},
{
"id": 421,
"name": "有更好的机会",
"type": 1
},
{
"id": 422,
"name": "对公司业务不感兴趣",
"type": 1
},
{
"id": 423,
"name": "Others",
"type": 1
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/archiveReasons
Request parameter
None
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Reason for archive id |
name | string | Reason for archive |
type | integer | Type of archive reason Optional values are: 1 : Rejected by Candidate 2 : Rejected by us |
Move/duplicate candidates to specified talent pool
Move/duplicate candidates to specified talent pool
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/reserveOtherTalentPool' \
--header 'Authorization: Basic ZndyMDAzOg==' \
--header 'Content-Type: application/json' \
--data-raw '{
"CandidateIds": [
201214451
],
"hireMode": 2,
"fromTalentPoolId": 200003160,
"toTalentPoolIds": [
200003270
],
"archiveMode": "cut",
"operatorEmail": "liutao1@mokahr.com"
}'
> Response example
{
"code": 0,
"msg": "Success"
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/reserveOtherTalentPool
Request parameter
Field | Required | Type | Description |
---|---|---|---|
archiveMode | Yes | string | Store to other talent pool method cut/copy |
CandidateIds | Yes | array[integer] | Candidate ids |
toTalentPoolIds | Yes | array[integer] | Talent pool id |
fromTalentPoolId | Yes | integer | Current talent pool id |
hireMode | Yes | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
operatorEmail | Yes | string | Operator email |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | 0 :Set successfully 1 : Failure |
msg | string | Success |
Archive application: whether to send rejection letter function
Archive application: whether to send rejection letter function
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/archiveApplicationToTalentPool' \
--header 'Authorization: Basic ZndyMDAzOg==' \
--header 'Content-Type: application/json' \
--data-raw '{
"reasonId": 2455,
"detail": "不满足",
"applicationIds": [
411250317
],
"talentPoolIds": [
200003160
],
"hireMode": 2,
"operatorEmail": "fwr003@163.com"
}'
> Response example
{
"code": 0,
"msg": "Success"
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/archiveApplicationToTalentPool
Request parameter
Field | Required | Type | Description |
---|---|---|---|
applicationIds | Yes | array[integer] | Application ids |
businessUnitId | NO | number | bu id |
detail | No | string | Reason for archive |
hireMode | Yes | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
needRefuse | No | boolean | true will check the settings of the org to send a rejection message. |
operatorEmail | Yes | string | Operator email |
reasonId | No | integer | Reason for archiveID |
talentPoolIds | Yes | array[integer] | Targeted talent pool ids |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | 0 :Set successfully1 : Failure |
msg | string | Success |
Import data to talent pool
HTTP request
POST https://api.mokahr.com/api-platform/v2/syncCandidates
> Request example (application/json)
$ curl https://api.mokahr.com/api-platform/v2/syncCandidates \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '{
"orgId":"livingsimple",
"CandidateName": "test",
"CandidatePhone": "18700998899",
"CandidateEmail": "1234@test.com",
"note": "测试Note",
"talentPoolId": 200000131,
"email": "xiedi@mokahr.com",
"resignDepartment": "Terminated department",
"reason": 1,
"detail": "世界那么大,我想去看看",
"time": "2020-01-01 00:00:00",
"channelType": 5,
"channelName": "Talent pool",
"source": 0,
"jobId": "07af7045-b4e7-43eb-ba64-87128c4df3bf",
"CandidateAge": 18,
"CandidateGender": "Male",
"CandidateLastCompany": "天南",
"CandidateLastSpeciality": "化工",
"CandidateAcademicDegree": "Bachelor degree",
"hiredTime": "2020-01-01 00:00:00",
"educationInfo": [
{
"school": "北京大学",
"startDate": "2014-09",
"endDate": "2017-06",
"speciality": "软件工程",
"academicDegree": "Bachelor degree"
}
],
"experienceInfo": [
{
"company": "百度",
"startDate": "2014-09",
"endDate": "2017-06",
"title": "初级工程师",
"summary": "负责产品功能实现"
},{
"company": "百度",
"startDate": "2014-09",
"endDate": "2017-06",
"title": "初级工程师",
"summary": "负责产品功能实现"
}
],
"projectInfo": [
{
"projectName": "项目1",
"startDate": "2017-01",
"endDate": "2017-11",
"projectDescription": "Project function description",
"title": "后端工程师",
"responsibilities": "项目职责"
},
{
"projectName": "项目2",
"startDate": "2017-01",
"endDate": "2017-11",
"projectDescription": "Project function description",
"title": "后端工程师",
"responsibilities": "项目职责"
}
],
"practiceInfo": [
{
"company": "腾讯",
"title": " Internship工程师",
"startDate": "2017-01",
"endDate": "2017-11",
"summary": "负责简单的功能实现"
},{
"company": "腾讯",
"title": " Internship工程师",
"startDate": "2017-01",
"endDate": "2017-11",
"summary": "负责简单的功能实现"
}
],
"jobIntention": {
"aimSalary": "7000-13000元/月",
"forwardLocation": "北京"
},
"selfDescription": {
"personal": "人经历丰富,在校担任过部长,主持人以及新生教官. "
},
"customFields": [
{
"id": 146,
"value": "22",
"index": 0
},
{
"id": 121,
"value": "22",
"index": 10
},
{
"id": 124,
"value": "bbb",
"index": 0
},
{
"id": 130,
"value": {"endDate":"2020-01","startDate":"2021-01"},
"index": 0
}
],
"isResignWriteJob": true,
"resignJobName": "工程师",
"resignJobType": "技术"
}'
> Request example(multipart/form-data)
$ curl https://api.mokahr.com/api-platform/v2/syncCandidates \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: multipart/form-data' \
-F 'basicInfo={"CandidateName": "王五","age": 20,"gender": "Male","CandidatePhone": "13800000000","CandidateEmail":"test@mokahr.com","jobId":"330fd7e3-45a1-4705-828c-7e1beafad355","talentPoolId":200004785,"email":"test@mokahr.com"}' \
-F 'resume=@/path/to/resume/张三.pdf' \
-F 'attachments=@/path/to/attachments/attach1.txt'
> Response示for example
{
"code": 200,
"msg": "success",
"data": {
"applicationId": 189316652,
"CandidateId": 168776432
}
}
> FailureResponse实for example
{
"code": 40040102,
"msg": "Archive reason cannot be found,归档信息Error"
}
Request body parameter(application/json)
Field | Required | Type | Description |
---|---|---|---|
CandidateName | Yes | string | Candidate name |
CandidatePhone | Yes | string | Candidate phone |
CandidateEmail | Yes | string | Candidate email |
note | No | string | Note |
channelType | No | string | Source type If not match Optional values are: 1 : Recruitment website (the recruitment website that moka has docked)) 2 : Experienced hires portal 3 : Employee referral portal4 :Headhunter5 :Talent pool6 : Other sources 7 : Internally owned8 : Recruitment website (the first custom source by client)9 : Job fair10 :Forum11 :SNS12 :OthersDefault: 5 |
sourceStatistics | No | string | Source effect It is required when the channel_type is 2,3,4. The importing will fail if not fill it. |
channelName | No | string | Source If not matched, default: Talent pool |
source | No | int | From Default source for each channel Optional values are: 1 : Active search2 :Direct delivery3 :Talent recommendation |
appliedAt | No | string | Apply time If it is null, using the system time by default. The format complies with the ISO8061 standard |
jobId | Yes | string | Position id |
CandidateAge | No | integer | Candidate age |
CandidateGender | No | string | Candidate gender |
CandidateLastCompany | No | string | Recent company |
CandidateLastSpeciality | No | string | Recent graduate major |
CandidateAcademicDegree | No | string | Highest education |
educationInfo | No | array | Education experience |
educationInfo[].school | No | string | School |
educationInfo[].startDate | No | Format complies with the ISO8601 standard string | Start time |
educationInfo[].endDate | No | Format complies with the ISO8601 standard string | End time |
educationInfo[].speciality | No | string | Major |
educationInfo[].academicDegree | No | string | Education |
experienceInfo | No | array | Work experience |
experienceInfo[].company | No | string | Company name |
experienceInfo[].startDate | No | Format complies with the ISO8601 standard string | Start time |
experienceInfo[].endDate | No | The format complies with the ISO8061 standard string | End time |
experienceInfo[].title | No | string | position |
experienceInfo[].summary | No | string | Job responsibility |
projectInfo | No | array | Project experience |
projectInfo[].projectName | No | string | Project name |
projectInfo[].startDate | No | Format complies with the ISO8601 standard string | Start time |
projectInfo[].endDate | No | Format complies with the ISO8601 standard string | End time |
projectInfo[].title | No | string | Job title and duty in project |
projectInfo[].projectDescription | No | string | Project function description |
projectInfo[].responsibilities | No | string | Responsibility in project |
practiceInfo | No | array | Intern experience |
practiceInfo[].company | No | string | Company name |
practiceInfo[].title | No | string | Job title |
practiceInfo[].startDate | No | Format complies with the ISO8601 standard string | Start time |
practiceInfo[].endDate | No | Format complies with the ISO8601 standard string | End time |
practiceInfo[].summary | No | string | Job responsibility |
jobIntention | No | object | Preferred job |
jobIntention.aimSalary | No | string | Preferred salary |
jobIntention.forwardLocation | No | string | Preferred city |
selfDescription | No | object | Self- description |
selfDescription.personal | No | object | Self-description |
customFields[].id | No | integer | Custom field id |
customFields[].value | No | string | Custom field value |
customFields[].index | No | number | If the current module data is an array and contains custom fields, the value is required and consistent with the array subscript (Note: custom module data is supported) |
talentPoolId | Yes | int | If it is a recruiting talent pool, you need to fill in: hired_type, hired_time If it is a resigned talent pool, you must fill in: resign_type, resign_detail, resign_time The talent pool id is Blacklist id if you need to import to blacklist. This field is required if you want to import talent pool |
Yes | string | User email The email address of the user with talent pool permissions, this field is required when archiving Candidates |
|
hiredTime | No | string | Onboard time Using request time by default |
isResignWriteJob | No | boolean | Whether to write back the resignation information Optional values are: 0 :Disable1 : Enable, and requires terminated positionDefault: 0 |
resignJobName | No | string | Terminated position |
resignDepartment | No | string | Terminated department |
reason | No | int | Reason for resignation Optional values are: 0 :Terminated employment1 : Resignation2 : Dismission |
detail | No | string | Terminate employment details If terminated employment, this field is required |
time | No | string | Terminate time (Date format: ISO8601) If null, it is the current time |
political | No | string | Political status |
certificateType | No | string | Certificate type Enum value 1 : id card2 : id card(Hong Kong. China3 : id card(Macau, China)4 : id card(Taiwan, China)5 : Passport6 : Other identity document7 :Exit-Entry Permit for Travelling to and from Hong Kong and Macau (EEP)8 : The Mainland Travel Permit for Taiwan Residents9 : Foreigners' Work Permit10 :Residence Permit for Foreigner |
citizenId | No | string | identification No. |
Request body parameter (multipart/form-data)
Field | Type | Description |
---|---|---|
CandidateInfo | string | A string in json format, the field is the same as the body of the json request |
resume | file | resume file |
resume | file | Resume file |
attachments | file | Attachment, which can pass multiple attachments at the same time. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
msg | string | Error info |
code | integer | Response code |
data | object | Respond data |
Possible error info
code | errorMessage | Illustration |
---|---|---|
200 | success | Success |
1240040102 | channel_source.error | Source error |
1240040104 | talent_pool_Id.error | Talent pool error |
1240040105 | userId.error | User id error (a. the user does not exist; b. id error) |
1240040106 | user_permission.error | The user no permission |
Position API
Check position field
> Request example
$ curl https://api.mokahr.com/api-platform/v1/jobs-fields?currentHireMode=1
-u 'your-api_key:' \
The interface for checking job fields mainly allows users to query job fields created in the system, including system default fields and custom fields
> Response example
{
"success": true,
"data": [
{
"id": 432,
"name": "Job category",
"type": "string_info",
"detail": null,
"isRequired": 0,
"isVisiable": 1,
"isBuiltin": 1
},
{
"id": 433,
"name": "Work location",
"type": "select_info",
"detail": null,
"isRequired": 0,
"isVisiable": 1,
"isBuiltin": 1
},
{
"id": 434,
"name": "Work experience",
"type": "string_info",
"detail": null,
"isRequired": 0,
"isVisiable": 1,
"isBuiltin": 1
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/jobs-fields
Request query parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Field ID |
name | string | Field name |
type | string | Field type |
detail | string | Field details |
isRequired | integer | Required |
isVisiable | integer | Whether to hide |
isBuiltin | integer | Whether it is in the system |
Create position
> Request example
$ curl -X POST \
'https://api.mokahr.com/api-platform/v1/jobs?currentHireMode=1' \
-u 'your-api-key:' \
-H 'Content-Type: application/json' \
-d '{
"title": "API测试",
"status": "open",
"commitment": "测试",
"departmentCode": "1111",
"minSalary": 20,
"maxSalary": 50,
"education": "Bachelor degree",
"jobPriorityId": 13,
"managerEmail": "limeng@mokahr.com",
"hrAssistantEmails": [ "zhangsan@mokahr.com" ],
"hiringManagerEmails": [ "lisi@mokahr.com" ],
"interviewerEmails": [ "wangwu@mokahr.com" ],
"interviewerNumbers": [ "1234", "2345" ],
"jobRankIds": [113, 114],
"customData": {
"2": "北京",
"5": "50",
"9":["1723553256175","1723553256176"]
},
"pipelineId": 12,
"headcountIds": [1,2,3],
"finishedAt": "2020-04-15 00:00:00",
"siteIds":[29189,29190],
"storeIds":[1234,4567]
}'
Create position via interface in Moka system;Creating position time is the start recruitment time
> Response example
{
"success": true,
"data": {
"jobId": "d7556714-6de1-4a14-82d8-2a8fc1ac7624",
"mjCode": "MJ001789"
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/jobs?currentHireMode=1
Request query parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
Request body parameter operator number
Field | Whether it is required | Type | Description |
---|---|---|---|
title | Yes | string | Job title |
status | No | string | Position status Optional values are: open :open closed :Closepause :pause |
description | No | string | Employment description |
commitment | Yes | string | Employment type Optional value: Full-time Part-time Internship Other |
departmentCode | No | string | Department code |
number | No | integer | No.of vacancy |
minSalary | No | integer | Salary floor |
maxSalary | No | integer | Salary ceiling |
salaryUnit | No | integer | Salary unit Optional values: 6:Month 7:Week 8:Day 9:Hour 10:Every time |
payPeriod | No | integer | Number of paid months minimum value:12 Maximum value:24 |
paymentMethod | No | integer | Salary payment method Optional values: 0:Daily settlement 1:Weekly settlement 2:Monthly settlement 3:Completion completion |
experience | No | string | Work experience Optional values are: No limit Graduates 1 year and below 1-3 years 3-5 years 5-10 years over 10 years |
education | No | string | Minimum educationNo limit Senior high school Technical secondary school Junior college Bachelor degree Master degree Doctor degree |
jobPriorityId | No | integer | Urgent hiring id |
locationId | No | integer | Work location id |
locationIds | No | array |
Multiple work location id. When both location ids and location id exist, location ids is used first. |
managerEmail | No | string | Person in charge email |
managerNumber | No | string | The number field of the person in charge, if this value exists, the managerEmail field will be ignored (the person in charge will be deleted when the managerNumber is -1) |
hrAssistantEmails | No | Array<string> | Position assistant email |
hrAssistantNumbers | No | Array<string> | Position assistant number field, if this value exists, the hrAssistantEmails field will be ignored (when hrAssistantNumbers is an empty array [], the assistant will be cleared) |
hiringManagerEmails | No | Array<string> | Hiring manager email |
hiringManagerNumbers | No | Array<string> | The hiring manager number field, if this value exists, the hiringManagerEmails field will be ignored (when the hiringManagerNumbers is an empty array [], the hiring manager will be cleared) |
interviewerEmails | No | Array<string> | Interviewer email |
interviewerNumbers | No | Array<string> | Interviewer number field, if this value exists, the interviewerEmails field will be ignored (when interviewerNumbers is an empty array [], the interviewer will be cleared) |
jobRankIds | No | Array<integer> | Job level id list |
zhinengId | No | integer | Job function if |
customData | No | Object | Custom data, in the form of key-value pairs. key is the custom field id, and value is the custom field value. If it is a multi-select field, the value is an array of option ID |
pipelineId | No | integer | Recruitment process |
headcountIds | No | Array<integer> | Associate HC list |
finishedAt | No | string | Recruitment deadline, the format complies with ISO 8601 standard |
siteIds | No | array | Website ids |
storeIds | No | array | Store id array, if opened sync switch of department and store, the corresponding store info will be used first when passing department info |
jobTemplateId | No | number | Custom recruitment search id |
isVirtual | No | boolean | Whether to create job function, true: create, job function by default. |
jobIdsForVirtualJobList | No | array | The job function id that the job family needs to be associated with |
applyForms | No | array | Application form |
applyForms[].applyFormId | Yes | number | Application form id |
applyForms[].type | Yes | string | Application form type: NORMAL_PORTAL: general official website, RECOMMENDATION_PORTAL: referral official |
applyForms[].device | Yes | string | Applicable browser type for application form: pc or mobile |
roundFeedbacks | No | array | Interview evaluation |
roundFeedbacks[].roundId | Yes | number | Interview round id |
roundFeedbacks[].feedbackId | Yes | string | Interview evaluation id |
interviewPlanId | No | string | The array of interview plans, as well as the user groups associated with each round under the interview plan. If the roundFeedback array is passed along with the old interview evaluation form, the interview plan will be prioritized |
roundUserGroups | No | array | UserGroupsArray |
roundUserGroups[].roundId | No | number | Interview round ID, which needs to be associated with the round ID of the user group under the interview plan |
roundUserGroups[].userGroupIds | No | number | Multiple user groups can be transferred, but user groups may not be transferred |
subscribersEmails | No | string[] | The resume automatic recommender email address. Support interviewer, hiring manager and above roles. ["lisi@mokahr.com"] |
subscribersNumbers | No | string[] | The resume automatically recommends a manual number. Support interviewer, hiring manager and above roles. [ "1234", "2345" ] |
jobSettingLocale | No | string | Position setting language Simplified Chinese:zh-CN English:en-US |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
jobId | string | Position id, built-in Moka system |
mjCode | string | Position code, which can ensure the uniqueness when posting to external system |
subscribersEmails | string[] | The resume automatic recommender email address. Support interviewer, hiring manager and above roles. ["lisi@mokahr.com"] |
subscribersNumbers | string[] | The resume automatically recommends a manual number. Support interviewer, hiring manager and above roles. [ "1234", "2345" ] |
Update position
>Request example
$ curl -X PUT \
https://api.mokahr.com/api-platform/v1/jobs/d7556714-6de1-4a14-82d8-2a8fc1ac7624 \
-u 'your-api-key:' \
-H 'Content-Type: application/json' \
-d '{
"title": "34534783478378",
"commitment": "786786786786",
"departmentCode": "1111",
"education": "Doctor degree",
"jobPriorityId": null,
"managerEmail": "limeng@mokahr.com",
"minSalary": "20000",
"jobRankIds": [113, 114],
"customData": {
"2": "北京",
"5": "50",
"9":["1723553256175","1723553256176"]
}
},
"locationIds":[123,3444]
"pipelineId": 12,
"headcountIds": [1,2,3],
"finishedAt": "2020-04-15 00:00:00",
"storeIds":[1234,4567]
'
Update existing position information in the system through the interface
HTTP request
https://api.mokahr.com/api-platform/v1/jobs/{jobId}
Request path parameter
Field | Type | Description |
---|---|---|
jobId | string | Position id |
Request body parameter
Consistent with the body parameter of Create a new position
Fields specific to this interface
Field | Required | Type | Description |
---|---|---|---|
archive | No | boolean | Whether to put in the talent pool Optional values are: true :Yesfalse :Noc: false |
useHeadhunter | No | boolean | Whether to use headhunting(The field has been deprecated,because the system function has been taken offline.) Pass true: will not take effect. Pass false: remove the position from all headhunter channels. Default: false |
tempJobToJob | No | int | Optional values are:0 :Keep connected1 :Cancel associating2 :ReassociateDefault: 0 |
distributeJobId | No | string | Re-associate position id |
displayOnOfficialSite, | No | boolean | Whether to display on career website, Default: false |
displayOnRecommendationSite | No | boolean | Whether to display on referral website, Default: false |
departmentCode | No | string | Department code, the department will be deleted if it is null |
storeIds | No | array | Store id array, if opened sync switch of department and store, the corresponding store info will be used first when passing department info |
publishedAt | No | string | Official website release time, the latest release time of the position on the recruitment website or internal promotion website. If not transmitted, the system will automatically update the time when publishing the position to the official website. If transmitted, the official website publishing time of the position will be updated according to the transmitted value. This time does not need to be modified for non business needs, and the format follows the ISO8601 standard |
> Response example
{
"success": true,
"data": {
"jobId": "d7556714-6de1-4a14-82d8-2a8fc1ac7624"
}
}
Check position
>Request example
$ curl -X "POST" \
"https://api.mokahr.com/api-platform/v1/jobs/getJobs" \
-u 'your-api-key:' \
-H 'Content-Type: application/json' \
-d '{
"zhinengId": 372,
"departmentCodes": [
"1234"
],
"locationIds": [],
"commitment": " Full-time",
"updatedEndAt": "2021-10-10",
"limit": 10,
"offset": 0,
"hireMode": "social",
"updatedFromAt": "2019-08-10",
"storeCodes": [
"123",
"50"
],
"jobId": "",
"status": "open"
}'
Check existing position information in the system through the interface
HTTP request
POST https://api.mokahr.com/api-platform/v1/jobs/getJobs
> Response example
{
"code": 0,
"msg": "success",
"data": {
"total": 1,
"jobs": [
{
"id": "b0a8a988-441d-4fca-a200-b77526ec9ba0",
"orgId": "livingsimple",
"title": "网页设计师",
"status": "open",
"description": "<div><b>我们Yes谁</b><div> ",
"minSalary": 1000,
"maxSalary": 9000,
"minExperience": 3,
"maxExperience": 5,
"number": 10,
"commitment": " Full-time",
"education": "Bachelor degree",
"openedAt": "2017-09-01T21:00:00.000Z",
"closedAt": "2017-10-01T22:00:00.000Z",
"hireMode": 1,
"publishedAt": "2021-03-17T07:10:53.000Z",
"updatedAt": "2021-03-22T07:05:53.000Z",
"finishedAt": "2019-08-23T16:00:00.000Z",
"mjCode": "MJ007995",
"pipelineId": 21,
"pipelineName": "审计部",
"locations": [
{
"id": 1,
"province": "广东",
"city": "深圳City",
"area": "福田District",
"country": "中国",
"address": "车公庙泰然大厦C座22楼"
}
],
"prior": 1,
"stores": [],
"department": {
"id": 3,
"name": "审计部",
"code": "1234"
},
"zhineng": {
"id": 1,
"name": "技术类"
},
"customFields": [
{
"id": 1,
"name": "Salary范围",
"value": "100-200",
"type": "string_info"
}
],
"isRecommendation": false
}
]
}
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
hireMode | Yes | string | Recruitment mode Optional values are: social :experienced hires campus :Campus recruitment |
limit | No | string | Number of entries per page for pagination, default 30 |
offset | No | string | The offset used for paging, the indicated index starts from 0 |
locationIds | No | array | The address id returned by the address list interface, such as [1,2,3] See job address for detailed parameters |
zhinengId | No | number | The address id returned by the function list interface See job function for detailed parameters |
siteId | No | number | Website id |
commitment | No | number | Employment type Optional values are: 1 : Full-time2 : Part-time3 : Internship4 :Others |
updatedFromAt | No | string | The start time of job screening by update time, such as 2020-06-01 |
updatedEndAt | No | string | The end time of job screening by update time, such as 2020-07-01 |
status | No | string | Job status: open, close, pause |
jobId | No | string | Position id |
departmentCodes | No | array | Department code list of the current position |
storeCodes | No | array | Store code list of the current position |
Response body in JSON
Field | Type | Description |
---|---|---|
total | integer | Total positions |
jobs[] | array | Position list |
jobs[].id | string | Position id |
jobs[].title | string | Job title |
jobs[].status | string | Position status Optional values are: open :openclosed :Closepause :pause |
jobs[].description | string | Employment description |
jobs[].mjCode | string | Position No. |
jobs[].minSalary | integer | Salary floor |
jobs[].maxSalary | integer | Salary ceiling |
jobs[].salaryUnit | integer | Salary unit |
jobs[].payPeriod | integer | Number of paid months |
jobs[].paymentMethod | integer | Salary payment method |
jobs[].minExperience | integer | Minimum working years |
jobs[].maxExperience | integer | Maximum working years |
jobs[].number | integer | No.of vacancy |
jobs[].commitment | string | Employment type Optional value: 全职 兼职 实习 其他 |
jobs[].education | string | Education requirement |
jobs[].closedAt | string | Position close time. Date format is: ISO8601 |
jobs[].openedAt | string | Start recruitment time. Date format is: ISO8601 |
jobs[].updatedAt | string | Position update time. Date format is: ISO8601 |
jobs[].prior | integer | Whether in urgent hiring,1 为Urgent hiring |
jobs[].hireMode | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
jobs[].publishedAt | string | Official website release time, the latest release time of the position on the recruitment website or internal promotion website |
jobs[].finishedAt | string | Recruitment goal finish time |
jobs[].isRecommendation | boolean | Whether it is a referral position |
jobs[].department | object | Information about the department where the position is located |
jobs[].department.id | integer | Department id |
jobs[].department.code | integer | Department code |
jobs[].department.name | string | Department name |
jobs[].pipelineId | string | Process id of the position |
jobs[].pipelineName | string | Process name of the position |
jobs[].locations | array | Work location |
jobs[].locations[].id | integer | Address id |
jobs[].locations[].province | string | Province |
jobs[].locations[].city | string | City |
jobs[].locations[].area | string | Region |
jobs[].locations[].country | string | Country of the location |
jobs[].locations[].address | string | Full address of the location |
jobs[].stores | array | Store of the position |
jobs[].stores.id | integer | Store id |
jobs[].stores.apiCode | string | Store code |
jobs[].stores.name | string | Store name |
jobs[].zhineng | object | Job function info |
jobs[].zhineng.id | integer | Job function id |
jobs[].zhineng.name | string | Job title |
jobs[].customFields | array | Job title custom fields list |
jobs[].customFields[].id | integer | Custom field id |
jobs[].customFields[].name | string | Custom field name |
jobs[].customFields[].type | string | Custom field type,optional values are: string_info bool_info |
jobs[].customFields[].value | string | The value of the custom field |
jobs[].jobManager | object | Recruiter (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the synchronization switch of recruiter interface) |
jobs[].jobManager.name | string | Recruiter name |
jobs[].jobManager.email | string | Position leader email |
jobs[].jobManager.phone | string | Recruiter phone |
jobs[].jobManager.number | string | The number field of recruiter |
jobs[].jobHrAssistant | object[] | Position assistant (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the official website position interface responsible person synchronization switch) |
jobs[].jobHrAssistant[].name | string | Position assistant name |
jobs[].jobHrAssistant[].email | string | Position assistant email |
jobs[].jobHrAssistant[].phone | string | Position assistant phone |
jobs[].jobHrAssistant[].number | string | Position assistant number field |
jobs[].jobHiringManager | object[] | Hiring manager (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the official website position interface responsible person synchronization switch) |
jobs[].jobHiringManager[].name | string | Hiring manager name |
jobs[].jobHiringManager[].email | string | Hiring manager email |
jobs[].jobHiringManager[].phone | string | Hiring manager phone |
jobs[].jobHiringManager[].number | string | Employer manager number field |
jobs[].jobInterviewer | object[] | Interviewer (this field is not returned by default, if you want to return it, please contact CSM to configure the function module in the background and open the official website position interface responsible person synchronization switch) |
jobs[].jobInterviewer[].name | string | Interviewer name |
jobs[].jobInterviewer[].email | string | Interviewer email |
jobs[].jobInterviewer[].phone | string | Interviewer phone |
jobs[].jobInterviewer[].number | string | Interviewer number field |
jobs[].jobTemplateId | number | Custom recruitment search id |
jobs[].isVirtual | boolean | true:Job function |
jobs[].applyForms | array | Application form |
jobs[].applyForms[].applyFormId | number | Application form id |
jobs[].applyForms[].type | string | Application type Optional value: NORMAL_PORTAL :General portal RECOMMENDATION_PORTAL : referral website |
jobs[].applyForms[].device | string | Applicable browser type for application form: pc or mobile |
jobs[].roundFeedbacks | array | Interview evaluation |
jobs[].roundFeedbacks[].roundId | number | Interview round id |
jobs[].roundFeedbacks[].feedbackId | string | Interview evaluation id |
interviewPlanId | string | Interview Plan ID |
jobs[].roundFeedbacks[].userGroupsIds | array | User groups id associated with the interview round |
userGroupsId | number | User groups id |
jobs[].jobRankInfo | object | Job rank info |
jobs[].jobRankInfo.id | Integer | Job rank id |
jobs[].jobRankInfo.name | string | Job rank name |
jobs[].jobRankInfo.type | string | Job rank type |
jobs[].jobRankInfo.level | Integer | Job rank level |
jobs[].jobRankInfo.comment | string | Job rank comment |
jobs[].createAt | string | job create time |
jobs[].confidential | Integer | Is the position confidential: 1:yes 0:no |
Get recruitment process list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/pipelines/list?currentHireMode=1
-u 'your-api_key:' \
Get recruitment process list
> Response example
{
"rows": [
{
"id": 1,
"name": "默认流程",
"disabled": false
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/pipelines/list
Request query
Field | Required | Type | Description |
---|---|---|---|
currentHireMode | Yes | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Response data in JSON
Field | Type | Description |
---|---|---|
id | integer | id |
name | string | Process name |
disabled | boolean | Whether to disable |
Get position info
> Request example
$ curl https://api.mokahr.com/api-platform/v1/data/jobs
> Response example
{
"data": [
{
"id": 1,
"title": "blabla"
}
],
"next": "8465195468"
}
Get position info
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/jobs
Query
Field | Required | Type | Description |
---|---|---|---|
fromTime | No | string | The start time of the data, the fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. |
next | No | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, and the next request only needs to add this next parameter to the query. The fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. If there is no next field in the response, it means that there is no more data |
limit | No | string | Number of entries per page for paging, default 100, max 500. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Position id |
title | string | Job title |
Get all movable stage information under the position
> Request example
$ curl https://api.mokahr.com/api-platform/v1/data/job_stages?jobId=xiaozhao3
> Response example
[
{
"id": 1,
"name": "Initial screen"
},
{
"id": 2,
"name": "用人Department筛选"
},
{
"id": 3,
"name": "面试"
},
{
"id": 4,
"name": "沟通offer"
},
{
"id": 5,
"name": "To be onboarded"
}
]
This interface will return all available stage information under the specified position
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/job_stages
Query
Field | Required | Type | Description |
---|---|---|---|
jobId | Yes | string | Position id |
Response
Field | Type | Description |
---|---|---|
id | integer | Stage id |
name | string | Stage name |
Get job priority list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/job_priority \
-u 'your-api_key:' \
-X GET
> Response example
[
{
"id": 488,
"name": "Urgent hiring",
"isBuiltin": 1
},
{
"id": 811,
"name": "特别",
"isBuiltin": 0
}
]
HTTP request
GET https://api.mokahr.com/api-platform/v1/job_priority
Request parameter
None
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Job priority id |
name | string | The displayed name of field |
isBuiltin | integer | Whether it is built-in |
Get company job level
> Request example
$ curl https://api.mokahr.com/api-platform/v1/job_ranks \
-u 'your-api_key:' \
-X GET
> Response example
[
{
"id": 1,
"name": "新人",
"type": "p5",
"level": 1,
"comment": "1111"
},
{
"id": 2,
"name": "中坚",
"type": null,
"level": 2,
"comment": null
},
{
"id": 3,
"name": "总裁",
"type": null,
"level": 3,
"comment": null
}
]
HTTP request
GET https://api.mokahr.com/api-platform/v1/job_ranks
Request parameter
None
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Job level id |
name | string | Title |
type | string | Setting type |
level | integer | Level of setting |
comment | string | Note |
departmentIds | array | Department id |
Create company job level
> Request example
$ curl https://api.mokahr.com/api-platform/v1/job_ranks \
-u 'your-api_key:' \
-X POST \
-H 'content-type: application/json' \
-d '
{
"name": "初级",
"type": "",
"level": 1,
"comment": ""
}
'
> Response example
{
"id": 1,
"name": "初级",
"type": "",
"level": 1,
"comment": ""
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/job_ranks
Request body
Field | Required | Type | Illustration |
---|---|---|---|
name | Yes | string | Level name |
type | No | string | Level type |
level | No | integer | Level |
comment | No | string | Note |
departmentIds | No | array | Department id |
Response JSON
Field | Type | Illustration |
---|---|---|
id | integer | Job level id |
name | string | Level name |
type | string | Level type |
level | integer | Level |
comment | string | Note |
departmentIds | array | Department id |
Update company job levels
> Request example
$ curl https://api.mokahr.com/api-platform/v1/job_ranks/1 \
-u 'your-api_key:' \
-X PUT
-H 'content-type: application/json' \
-d '
{
"name": "hcName",
"type": "",
"level": 1,
"comment": ""
}
'
> Response example
{
"id": 1,
"name": "初级",
"type": "",
"level": 1,
"comment": ""
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/job_ranks/:id
Request Url parameter
Field | Type | Illustration |
---|---|---|
id | integer | id |
Request body
Field | Required | Type | Illustration |
---|---|---|---|
name | No | string | Level name |
type | No | string | Level type |
level | No | integer | Level |
comment | No | string | Note |
departmentIds | No | array | Department id |
Response JSON
Field | Type | Illustration |
---|---|---|
id | integer | Job level id |
name | string | Level name |
type | string | Level type |
level | integer | Level |
comment | string | Note |
departmentIds | array | Department id |
Delete company job level
> Request example
$ curl https://api.mokahr.com/api-platform/v1/job_ranks/1 \
-u 'your-api_key:' \
-X DELETE
-H 'content-type: application/json' \
-d '
{
"mergeToId": 5,
}
'
> Response example
{
"success": true
}
HTTP request
DELETE https://api.mokahr.com/api-platform/v1/job_ranks/:id
Request Url parameter
Field | Type | Illustration |
---|---|---|
id | integer | Delete id |
Request body
Field | Type | Illustration |
---|---|---|
mergeToId | integer | Merge to id |
Response JSON
Field | Type | Illustration |
---|---|---|
success | boolean | Delete successful or failed |
create Custom field
> Request example
$ curl -X POST \
'https://api.mokahr.com/api-platform/v1/jobs/custom_fields?currentHireMode=1' \
-u 'your-api-key:' \
-H 'Content-Type: application/json' \
-d '{
"type": "select_info",
"name": "Work location",
"isRequired": true,
"isVisible": true,
"detail": [
"Work location1",
"Work location2",
"Work location3"
]
}'
Create position via interface in Moka system
> Response example
{
"success": true,
"data": {
"jobFieldId": 603
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/jobs/custom_fields?currentHireMode={currentHireMode}
Request query parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Request body parameter
Field | Type | Description |
---|---|---|
name | string | Field name, required |
type | string | Field type Optional value: string_info select_info bool_info date_info day_info text_info multi_select_info |
isRequired | string | Whether it is a required field |
detail | array | Field details |
isVisible | boolean | Whether it is visible |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
jobFieldId | string | The ID corresponding to the custom field |
UpdateCustom field
> Request example
Case 1:
$ curl -X PUT \
'https://api.mokahr.com/api-platform/v1/jobs/custom_fields/603?currentHireMode=1' \
-u 'your-api-key:' \
-H 'Content-Type: application/json' \
-d '{
"name": "Work location",
"isRequired": true,
"isVisible": true,
"detail": [
"Work location1",
"Work location2",
"Work location3"
]
}'
Case 2:
$ curl -X PUT \
'https://api.mokahr.com/api-platform/v1/jobs/custom_fields/603?currentHireMode=1' \
-u 'your-api-key:' \
-H 'Content-Type: application/json' \
-d '{
"name": "Multiple Choice Fields",
"isRequired": true,
"isVisible": true,
"detail": [
{
"value": "modified value or original value",
"optionId": "multiple-choice id"
},
{
"value": "newly added value after modification"
}
]
}'
Create position via interface in Moka system
> Response example
{
"success": true,
"data": {
"jobFieldId": 603
}
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/jobs/custom_fields/{jobFieldId}?currentHireMode={currentHireMode}
Request path parameter
Field | Type | Description |
---|---|---|
jobFieldId | integer | The ID corresponding to the field |
Request query parameter
Field | Type | Description |
---|---|---|
currentHireMode | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Request body parameter
Field | Type | Description |
---|---|---|
name | string | Field name |
isRequired | string | Whether it is a required field |
detail | array | Field details |
isVisible | boolean | Whether it is visible |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
jobFieldId | string | The ID corresponding to the custom field |
Delete Custom field
> Request example
$ curl -X DELETE \
'https://api.mokahr.com/api-platform/v1/jobs/custom_fields/603?currentHireMode=1' \
-u 'your-api-key:' \
-H 'Content-Type: application/json'
Create position via interface in Moka system
> Response example
{
"success": true,
"data": {
"jobFieldId": "603"
}
}
HTTP request
DELETE https://api.mokahr.com/api-platform/v1/jobs/custom_fields/{jobFieldId}?currentHireMode={currentHireMode}
Request path parameter
Field | Type | Description |
---|---|---|
jobFieldId | The ID corresponding to the custom field |
Request query parameter
Field | Whether it is required | Type | Description |
---|---|---|---|
currentHireMode | Required | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
jobFieldId | string | The ID corresponding to the custom field |
Check Custom Recruitment settings
> Request example
$ curl https://api.mokahr.com/api-platform/v1/job-templates/list
-u 'your-api_key:' \
Check Custom Recruitment settings
> Response example
{
"success": true,
"data": [
{
"id": 100008412,
"name": "标准简历",
"hireMode": 1,
"createdAt": "2020-09-28T06:26:34.000Z"
},
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/job-templates/list
Request query parameter None
Field | Type | Description |
---|
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code, not 200 represents fail |
msg | string | Response info |
data[].id | integer | Unique key |
data[].name | string | Title |
data[].hireMode | number | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
data[].createdAt | string | Whether to hide |
<a name='create new position'></a>
Publish/unpublish positions
Implement job posting or delisting operations on the official website and headhunting platform through interfaces.
> Request example
$ curl -X POST --location "https://api.mokahr.com/api-platform/jobs/v1/display_job_on_websites" \
-H "Content-Type: application/json; charset=utf-8" \
-u 'your-api_key:' \
-d "{
\"orgId\": \"livingsimple\",
\"jobId\": \"c9705c0d-7131-45a9-86d2-be7c6fe3a208\",
\"siteIds\": [
364
],
\"headhunterIds\": \"[200000063,200000094,200000092]\",
\"headhunterContractIds\": \"[137,1,122,116,132]\",
\"displayOnRecommendationSite\": false,
\"displayOnOfficialSite\": true,
\"displayOnHeadhunterSite\": false
}"
> Response example
{
"code": 0,
"success": true,
"data": {
"operateOfficialSiteSuccess": false,
"operateRecommendationSiteSuccess": false,
"operateHeadhunterSiteSuccess": false
}
}
HTTP request
POST https://api.mokahr.com/api-platform/jobs/v1/display_job_on_websites
Request body(JSON)
Field | Required | Type | Description |
---|---|---|---|
jobId | Yes | string | Job id |
siteIds | Yes | array | Website id,It is necessary to specify the website where the positions need to be published or removed. |
displayOnOfficialSite | No | boolean | Whether to display on the website. If no parameter is passed, the job posting status remains unchanged; if false is passed, the job will be removed; if true is passed, the job will be published. |
displayOnRecommendationSite | No | boolean | Whether to display on the referral website. If no parameter is passed, the job posting status remains unchanged; if false is passed, the job will be removed; if true is passed, the job will be published. |
recommendationSiteIds | No | array | Internal referral portal id |
displayOnHeadhunterSite | No | boolean | Is it displayed on the headhunting platform. No reference transmission, the job posting status remains unchanged; Pass false, remove the position; Pass true, publish the position |
headhunterIds | No | array | Headhunting consultant ID, please specify which headhunting consultant to publish the position to or remove it from. |
headhunterContractIds | No | array | Headhunter contract ID, please specify which headhunter contract name to publish or remove the position from. |
Response body(JSON)
Field | Type | Description |
---|---|---|
code | integer | Response code, other than 200 represents failure. |
msg | string | Response message |
data[].id | integer | Unique key |
data[].operateOfficialSiteSuccess | boolean | Whether the operation on the website is successful, it is false if no parameter is passed or the operation fails. |
data[].operateRecommendationSiteSuccess | boolean | Whether the operation on the referral website is successful, it is false if no parameter is passed or the operation fails. |
data[].operateHeadhunterSiteSuccess | boolean | Whether the headhunting operation is successful, whether the parameters are not passed or the operation fails, both are false. |
Obtain functional types
Get all functional types
> Request example
$ curl -X POST --location "https://api.mokahr.com/api-platform/v1/zhineng/getZhineng" \
-u 'your-api_key:' \
> Response example
{
"code": 0,
"msg": "success",
"data": [
{
"children": [
{
"children": [
{
"id": "1111",
"label": "技术1-2",
"orgId": "daibanap",
"parentId": 1112,
"sort": 0,
"supplementaryLocales": {
"en-US": {
"label": "技术1-2英语"
},
"fr-FR": {
"label": "技术1-2法语"
},
"zh-CN": {
"label": "技术1-2"
}
},
"version": "1.0"
}
],
"id": "1112",
"label": "技术1-1",
"orgId": "daibanap",
"parentId": 1113,
"sort": 0,
"supplementaryLocales": {
"zh-CN": {
"label": "技术1-1"
}
},
"version": "1.0"
},
{
"id": "1114",
"label": "技术2-1",
"orgId": "daibanap",
"parentId": 1113,
"sort": 1,
"supplementaryLocales": {
"zh-CN": {
"label": "技术2-1"
}
},
"version": "1.0"
}
],
"id": "1113",
"label": "技术类",
"parentId": 0,
"orgId": "daibanap"
},
{
"id": "1115",
"label": "产品类",
"parentId": 0,
"orgId": "daibanap",
"supplementaryLocales": {
"en-US": {
"label": "产品类-英语"
},
"fr-FR": {
"label": "产品类-法语"
},
"zh-CN": {
"label": "产品类"
}
},
"children": null
},
{
"id": "1116",
"label": "设计类",
"parentId": 0,
"orgId": "daibanap",
"children": null
}
]
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/zhineng/getZhineng
Response body(JSON)
Field | Type | Description |
---|---|---|
code | integer | Response code, other than 200 represents failure. |
msg | string | Response message |
data[].id | string | business id |
data[].label | string | Functional type name |
data[].parentId | long | Parent level business id |
data[].orgId | string | organization id |
data[].supplementaryLocales | map | Multilingual information.The format is as follows {"zh-CN": {"label": "技术2-1"}} |
data[].children[] | array | Child level functional type information (same as parent level content) |
Job V3 API
Get job information based on jobId or mjCode
HTTP request
POST https://api.mokahr.com/api-platform/v3/job/getJobInfo
> Request example
$ curl -X POST --location "https://api.mokahr.com/api-platform/v3/job/getJobInfo" \
-u 'your-api_key:' \
-X POST
-H 'Content-Type: application/json' \
-d '
{
"jobIds": ["111","222"],
"scene": ""
} '
Request body parameters
Field | Required | Type | Description |
---|---|---|---|
jobIds | No | array | Job IDs to query (max 20). At least one of jobIds or mjCodes must have value |
mjCodes | No | array | Job mjcodes to query (max 10). (Recommend using job IDs for better performance. If both job IDs and mjcodes exist, job IDs take precedence) |
scene | No | string | Query scenario. Returns basic job info by default. Contact CSM to get recruiter, assistant, custom fields etc. |
> 请求Respond data样for example:
{
"code": 0,
"codeType": 0,
"data": [
{
"aiEvalAuto": true,
"aiEvalRequirementInfo": null,
"aiEvalRequirementSchema": null,
"aiInfoVersion": 0,
"aiSchemaVersion": 0,
"applicationAiEvalEnable": false,
"applicationAiEvalRequirement": null,
"approvalState": 0,
"attributeId": 111,
"category": null,
"category2Id": null,
"closedAt": null,
"commitment": "全职",
"createdAt": 1653532481000,
"creatorId": 123,
"customFields": [
],
"demographicQuestionId": 0,
"department": {
"code": "110",
"id": 123,
"name": "api测试",
"namePath": "api测试",
"parentId": null,
"path": "api测试"
},
"departmentCode": "110",
"departmentId": 123,
"description": "<p>12312</p>",
"education": "中技",
"enableAiQuestionBank": false,
"enableEeo": false,
"experience": "不限",
"finishedAt": 1654358400000,
"hasRecommendRewardPlan": false,
"hcIds": [
111
],
"hireMode": 1,
"id": "123",
"interviewCityIds": "",
"interviewPlanId": 1530,
"isInteralReferral": false,
"jobApplyFormUseDTOS": [
],
"jobCustomAttribute": {
"id": "123",
"isBuiltin": true,
"name": "优先招聘",
"orgId": "elegrptest"
},
"jobDuty": null,
"jobFamily": false,
"jobHiringManager": [
{
"bindWorkWechat": false,
"email": "xxx",
"employeeId": "",
"employee_id": "",
"fullPhone": null,
"id": 123,
"name": "xxx",
"number": null,
"phone": "12345678910",
"role": 50
}
],
"jobHrAssistant": null,
"jobInterviewer": null,
"jobLocale": "",
"jobNumId": 100001,
"jobRanks": [
{
"apiCode": "",
"campusRecommendRewardRulesId": null,
"comment": null,
"departmentIds": [
0
],
"id": 123,
"level": 5,
"name": "总监",
"orgId": "test",
"recommendRewardRulesId": null,
"status": 0,
"type": null
}
],
"jobTemplateId": 0,
"locations": [
{
"address": "香花桥街道振盈路68号",
"area": "青浦区",
"city": null,
"cityId": 310118,
"country": "中国",
"id": 111,
"province": "上海市"
}
],
"maxExperience": null,
"maxSalary": 14,
"minExperience": null,
"minSalary": 12,
"mjCode": "MJ000001",
"number": 2,
"openedAt": 1653494400000,
"orgId": "test",
"payPeriod": null,
"paymentMethod": null,
"pipelineId": 410021910,
"pipelineName": "aa",
"pointTo": null,
"publishedAt": 1653532481000,
"recruiter": {
"bindWorkWechat": false,
"email": "xxxx",
"employeeId": "",
"employee_id": "",
"fullPhone": null,
"id": 1,
"name": "xxxx",
"number": null,
"phone": "12345678910",
"role": 50
},
"roundToFeedbackTemplateId": {
"1": 0,
"2": 0,
"3": 0
},
"roundToRoundInfo": {
"1": {
"color": "#00D1DB",
"interviewRoundId": 33,
"jobId": "111",
"name": "初试",
"sort": 1,
"supplementaryLocales": "{\"en-US\":{\"name\":\"1st round\"}}",
"visible": 1
},
"2": {
"color": "#5D63DC",
"interviewRoundId": 22,
"jobId": "111",
"name": "复试",
"sort": 2,
"supplementaryLocales": "{\"en-US\":{\"name\":\"2nd round\"}}",
"visible": 1
},
"3": {
"color": "#F3719D",
"interviewRoundId": 11,
"jobId": "111",
"name": "终试",
"sort": 3,
"supplementaryLocales": "{\"en-US\":{\"name\":\"3rd round\"}}",
"visible": 1
}
},
"salaryUnit": 0,
"status": "open",
"stores": null,
"title": "测试岗位",
"updatedAt": 1656346259000,
"zhinengId": null
}
],
"msg": "成功",
"success": true
}
Response
Response body in JSON Here's the English translation of your API documentation while maintaining all formatting:
Field | Type | Description |
---|---|---|
code | Number | Interview ID (MD5 string), unique identifier for an interview |
message | String | Interview start time (ISO8601 format) |
data | Array | Job details data |
data.id | string | Job ID |
data.title | string | Job title |
data.commitment | string | Job type: Full-time/Part-time/Internship/Other |
data.status | string | Job status: open/closed/pause/temp |
data.description | string | Job description |
data.minSalary | integer | Minimum salary (unit: k) |
data.maxSalary | integer | Maximum salary (unit: k) |
data.salaryUnit | integer | Salary unit (default: k/month, enum) |
data.paymentMethod | integer | Payment method |
data.payPeriod | integer | Pay period |
data.orgId | string | Organization ID |
data.pointTo | string | For temporary jobs, points to a permanent job |
data.departmentId | long | Department ID |
data.department | object | Department information |
data.departmentCode | string | Department code |
data.education | string | Education requirement |
data.minExperience | integer | Minimum work experience |
data.maxExperience | integer | Maximum work experience |
data.experience | string | Work experience |
data.number | integer | Hiring quota |
data.category2Id | string | Job category ID |
data.category | string | Job category |
data.creatorId | long | Job creator |
data.zhinengId | long | Functional type ID |
data.jobDuty | object | Job function |
data.jobDuty.id | long | Functional type ID |
data.jobDuty.name | string | Functional name |
data.hireMode | integer | Hiring mode (1: Social recruitment, 2: Campus recruitment) |
data.mjCode | string | Job code (moka_job_code) |
data.attributeId | long | Job priority ID |
data.jobCustomAttribute | object | Job priority |
data.jobCustomAttribute.id | string | Job priority ID |
data.jobCustomAttribute.name | string | Job priority name |
data.jobCustomAttribute.orgId | string | Organization ID |
data.jobCustomAttribute.isBuiltin | boolean | Whether built-in |
data.closedAt | long | Job closing time (timestamp) |
data.openedAt | long | Recruitment start time (timestamp) |
data.updatedAt | long | Job update time (timestamp) |
data.finishedAt | long | Target completion time |
data.publishedAt | long | Publication time on official website (can be manually refreshed) |
data.createdAt | long | Job creation time |
data.jobNumId | long | Auto-increment field, numeric job ID |
data.jobFamily | boolean | Whether virtual job |
data.jobTemplateId | long | Job template ID |
data.approvalState | integer | Approval status |
data.customFields | array | Custom fields |
data.customFields.id | string | Custom field ID |
data.customFields.name | string | Custom field name |
data.customFields.type | string | Custom field type |
data.customFields.value | string | Custom field value |
data.customFields.multiSelectValue | array | Multi-select field values |
data.recruiter | object | Job recruiter (not returned by default - contact CSM to enable) |
data.recruiter.id | long | ID |
data.recruiter.role | integer | Role |
data.recruiter.name | string | Name |
data.recruiter.email | string | |
data.recruiter.phone | string | Phone number |
data.recruiter.fullPhone | string | Full phone number |
data.recruiter.employeeId | string | Employee ID |
data.recruiter.employee_id | string | Employee ID (same as employeeId) |
data.recruiter.number | string | Number |
data.recruiter.isBindWorkWechat | boolean | Whether bound to WeCom |
data.jobHrAssistant | array | HR assistants (not returned by default - contact CSM to enable) |
data.jobHiringManager | array | Hiring managers (not returned by default - contact CSM to enable) |
data.jobInterviewer | array | Interviewers (not returned by default - contact CSM to enable) |
data.jobRanks | array | Job levels |
data.hcIds | array | Associated recruitment demand IDs |
data.locations | array | Job locations |
data.pipelineId | long | Recruitment process ID |
data.pipelineName | string | Recruitment process name |
data.stores | array | Stores |
data.jobApplyFormUseDTOS | array | Application forms |
data.interviewPlanId | long | Interview plan ID |
data.roundToFeedbackTemplateId | object | Interview evaluation form templates (round → template) |
data.roundToRoundInfo | object | Interview round information |
data.interviewCityIds | string | Interview city list |
data.applicationAiEvalEnable | boolean | Whether resume AI evaluation is enabled |
data.applicationAiEvalRequirement | string | Resume AI evaluation requirements |
data.hasRecommendRewardPlan | boolean | Whether has referral reward plan |
data.enableAiQuestionBank | boolean | Whether AI interview questions are enabled |
data.aiEvalRequirementInfo | string | Semi-structured resume evaluation requirements (for frontend) |
data.aiInfoVersion | integer | Version of semi-structured requirements |
data.aiEvalRequirementSchema | string | Structured resume evaluation requirements (for AI) |
data.aiSchemaVersion | integer | Version of structured requirements |
data.aiEvalAuto | boolean | Whether auto AI resume screening is enabled |
data.jobLocale | string | Job language |
data.enableEeo | boolean | Whether EEO is enabled |
data.demographicQuestionId | long | Demographic questionnaire ID |
data.isInteralReferral | boolean | Whether internal referral job |
Interview API
create interview
HTTP request
POST https://api.mokahr.com/api-platform/v1/interview/create
> Request example
$ curl https://api.mokahr.com/api-platform/v1/interview/create \
-u 'your_api_key:' \
-X POST
-H 'Content-Type: application/json' \
-d '
{
"stageId": 1741,
"startTime": "2023-03-09 11:00:00",
"duration": 15,
"typeCode": 1,
"orgId": "nonobank",
"interviewArrangerEmail": "lichaozhen@mokahr.com",
"locationId": 1,
"meetingRoomId": 1,
"round": 1,
"signedInAt": "2023-03-09 12:00:00",
"applicationIds": [425015406],
"interviewerEmails": ["lichaozhen@mokahr.com"]
} '
Request body parameters
Field | Whether it is required | Type | Description |
---|---|---|---|
stageId | Yes | number | Recruitment stage id of the interview; Get it through stage info list interface |
startTime | Yes | string | Interview date, format:"yyyy-MM-dd HH:mm:ss" |
duration | Yes | number | Last minutes, the multiple of 15 |
typeCode | Yes | number | 1 :On-site interview2 : Group interview3 : Phone interview |
orgId | Yes | string | MOKA tenant org id, which is provided by the person in charge of the client |
interviewArrangerEmail | Yes | string | Interview creator email |
locationId | Yes | number | Interview location id, see appendix |
meetingRoomId | No | number | Meeting room id |
round | Yes | number | Need to give data in advance |
signedInAt | Yes | string | Candidate check-in time "yyyy-MM-dd HH:mm:ss" |
applicationIds | Yes | array | The number of applicants for the interview cannot exceed 200, but at least 1. |
interviewerEmails | Yes | array | Interviewers email |
> 请求Respond data样for example:
{
"code": 0,
"message": "Success",
"data": {
"groupInterviewId": 1
}
}
Response body
Field | Type | Description |
---|---|---|
code | Number | Interview id, md5 string, the unique identifiers of the interview |
message | String | Interview start time. Format complies with the ISO8601 standard |
data | Object | Interview type,, for example:On-site interview、Video interview、Phone interview、Group interview |
data.groupInterviewId | Number | Interview duration. Unit: minute, such as: 30 mins |
code illustration
Value | Illustration |
---|---|
-1 | 'Unknown error of the system' |
100 | 'Wrong email of person in charge or interviewer' |
101 | 'Exists position that no permission to create interview' |
102 | 'The duration of the interview needs to be a multiple of 15 and cannot exceed 3 hours' |
103 | On-site interview, only support one Candidate' |
104 | 'Illegal stageId' |
105 | 'Illegal applicationIds' |
106 | 'You cannot update interview feedback since haven't found designated interview' |
400 | 'Check parameter errors' |
Pull interview list
Pull a list of interviews from startDate
(inclusive) to endDate
(inclusive)
The content of the list is readable Chinese description information
HTTP request
GET https://api.mokahr.com/api-platform/v1/interviews?startDate={startDate}&endDate={endDate}&hireMode={hireMode}
> Request example
$ curl https://api.mokahr.com/api-platform/v1/interviews\?startDate\=2018-01-02T00:00:00.000Z\&endDate\=2018-01-04T00:00:00.000Z \
-u 'your_api_key:' \
-X GET
Request query parameter
Field | Required | Description |
---|---|---|
startDate | No | Interview date, format: ISO8601 |
endDate | No | Interview date, format: ISO8601 |
createStartDate | No | Interview creation date, format: ISO8601 |
createEndDate | No | Interview creation date, format: ISO8601 |
hiremode | No | Recruitment mode Optional values: 1: Social recruitment 2: School recruitment |
Note that the date range determined by startDate and endDate, createStartDate and createEndDate must not exceed 31 days, and one of the two pairs of parameters must be required. And we will take the value according to the year, month and day of the time, which can only be accurate to the day.
Respond data
> 请求Respond data example:
{
"data": [
{
"id": "d3d9446802a44259755d38e6d163e820",
"startTime": "2017-01-03T00:00:00.000Z",
"type": "On-site interview",
"duration": 30,
"jobTitle": "Mac开发工程师",
"stageName": "技术面",
"address": "北京City 海淀District 北京City海淀District海淀西大街",
"theme": "Mac开发工程师-On-site interview-2nd round",
"status": "Cancelled",
"createdAt": "2019-06-26 21:37:04",
"hr": {
"name": "李明",
"email": "liming@example.com",
"phone": "+86 1234567890"
},
"Candidates": [
{
"name": "邓新宇",
"email": "dxy@example.com",
"phone": "+86 0123456789",
"status": "No feedback",
"jobTitle": "Mac开发工程师",
"applicationId": 1022,
"groupId": 1
}
],
"interviewers": [
{
"name": "旭东",
"email": "xudong@example.com",
"phone": ""
},
{
"name": "柳丁",
"email": "liuding@example.com",
"phone": "+86 1234567890"
}
]
},
{
"startTime": "2017-01-03T02:00:00.000Z",
"type": "Group interview",
"duration": 60,
"jobTitle": "iOS工程师、PHP工程师,etc.3个职位",
"stageName": "一面",
"address": "北京City 海淀District 北京City海淀District海淀西大街",
"theme": "iOS工程师,etc.3个职位-Group interview-1st round",
"status": "unfinished",
"hr": {
"name": "李明",
"email": "liming@example.com",
"phone": "+86 1234567890"
},
"Candidates": [
{
"name": "邓新宇",
"email": "dxy@example.com",
"phone": "+86 0123456789",
"status": "Rejected",
"jobTitle": "Mac开发工程师",
"applicationId": 1022,
"groupId": 2
},
{
"name": "金清",
"email": "jq@gmail.com",
"phone": "",
"status": "Accepted",
"jobTitle": "Android多媒体软件工程师",
"applicationId": 1432,
"groupId": 3
},
{
"name": "应婉蓉",
"email": "ywr@gmail.com",
"phone": "",
"status": "No feedback",
"jobTitle": "web前端工程师",
"applicationId": 4422,
"groupId": 4
}
],
"interviewers": [
{
"name": "旭东",
"email": "xudong@example.com",
"phone": ""
}
]
}
]
}
data is an array of interviews, sorted by interview start time from early to late. The data structure for each of these is:
Field | Type | Description |
---|---|---|
id | String | Interview id, md5 string, the unique identifiers of the interview |
startTime | String | Interview start time. Format complies with the ISO8601 standard |
type | String | Interview type,, for example:On-site interview、Video interview、Phone interview、Group interview |
duration | Number | Interview duration. Unit: minute, such as: 30 mins |
jobTitle | String | Interview position |
stageName | String | Interview current stage name, such as: interview, technological interview, HR interview, etc. |
address | String | Interview location |
theme | String | Interview subject in the format of {interview position}-{interview type}-{interview round} |
status | String | interview status. For example: Open (the representative interview has not started), Closed (the representative interview has ended), Canceled (the representative interview has been cancelled) |
createdAt | String | Time for creating interview |
hr | Object | HR who assigned interview |
hr.name | String | Name |
hr.email | String | |
hr.phone | String | Phone. The format is: +{area code} {phone number} |
Candidates | Array | Interview Candidate |
canddiates[].name | String | Name |
Candidates[].email | String | |
Candidates[].phone | String | Phone. The format is: +{area code} {phone number} |
Candidates[].status | String | The status of the interview. Example: Candidate No Feedback, Candidate Accepted, Candidate Rejected |
Candidates[].jobTitle | String | Apply position name |
Candidates[].applicationId | Number | Application id, which is the unique identifier of the application of one Candidate |
Candidates[].groupId | Number | Interview id |
interviewers | Array | Interviewer. structure same as HR |
roomId | Long | roomId |
roomName | String | roomName |
jobs | Array | jobs |
jobs[].mjCode | string | Position No |
Note that if the Field is empty, the content will be an empty string
Third-party interview check-in API
Business scene
It is used when the third-party interview check-in system needs to jump to the moka interview check-in page.
HTTP request
GET https://app.mokahr.com/m/interview-signin/{orgId}?phone={Phone}
Request Path parameter
Field | Required | Description |
---|---|---|
orgId | Yes | The client unique id of each company,String |
Request query parameter
Field | Required | Description |
---|---|---|
Phone | No | Candidate's mobile phone number (if the mobile phone number is not filled in, it will jump to the page for filling in the mobile phone number), String |
Respond data
Redirects to the Moka interview sign-in page.
Get interview feedback data
> Request example
$ curl https://api.mokahr.com/api-platform/v1/data/interviewer_feedbacks
> Response example
{
"data": [
{
"applicationId": 1,
"round": 1,
"interviewerName": "张三",
"interviewerEmail": "zhangsan@mokahr.com",
"resultName": " Very dissatisfied",
"resultType": 0,
"feedback": "技术不错",
"feedbackTemplateResult": {
"items":[
{
"type":1,
"key":889274446478.9995,
"title":"个人能力",
"scoreType":5,
"calcScoreType":"total",
"subjects": [
{
"title":"沟通能力",
"description":"",
"result":4,
"key":108456151784.09537
},
{
"title":"Skill经验",
"description":"",
"result":3,
"key": 160786089566.0061
}
]
},
{
"type":2,
"key":986979085907.8695,
"title":"",
"description":"",
"subjects":[
{
"title":"Major技巧",
"key": 54296490060.84821,
"result":0,
"options":[
{
"value":"招聘知识强",
"key":1478619790466.305
},
{
"value":"系统理解强",
"key":772643685729.6316
},
{
"value":"技术能力强",
"key":982210359123.4211
}
]
}
]
},
{
"type":3,
"key":716130309734.7427,
"title":"",
"description":"",
"subjects":[
{
"title":"综合评语",
"key":529722675109.2128,
"result":"不错"
}
]
}
]
}
}
],
"next": "8465195468"
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/interviewer_feedbacks
Query
Field | Required | Type | Description |
---|---|---|---|
fromTime | Required for first request | string | The start time of the data, the fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. |
next | with fromTime has a required | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, and the next request only needs to add this next parameter to the query. The fromTime parameter is only included in the first request, and does not need to be included in subsequent requests, that is, only one of next and fromTime needs to be included. If there is no next field in the response, it means that there is no more data |
limit | No | string | Number of entries per page for paging, default 100, max 500. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
applicationId | integer | applicationId |
interviewerName | string | Interviewer name |
interviewerEmail | string | Interviewer email |
result <span style="color: red;">Deprecated</span> | integer | Interview result Optional values are: 1 : Very dissatisfied2 : Dissatisfied3 ; Satisfaction4 :Very satisfied |
resultName | string | Interview feedback |
resultType | integer | Type of interview feedback result Optional values are: 0 : Dissatisfied 1 : Satisfaction |
interviewType | string | Interview type,optional values are: Phone interview , On-site interview , Group interview , Video interview |
round | number | Interview rounds Optional values are: 1 1st round 2 2nd round 3 Final round |
feedback | string | Interview feedback content |
feedbackTemplateResult | object | Interview evaluation info |
feedbackTemplateResult.items | array | Questions of interview evaluation form |
feedbackTemplateResult.items[].type | number | Question type Optional values are: 1 : Scoring question2 : Multiple choice3 : Description4 : Multiple response |
feedbackTemplateResult.items[].title | string | Question title |
feedbackTemplateResult.items[].description | string | Question description |
feedbackTemplateResult.items[].calcScoreType | string | avg : Average,total : Total score (this field in only valid when 'type'=1) |
feedbackTemplateResult.items[].scoreType | number | 5 means 5 points, 10 means 10 points(this field in only valid when 'type'=1) |
feedbackTemplateResult.items[].needReason | string | Whether need score review(this field in only valid when 'type'=1) |
feedbackTemplateResult.items[].subjects | array | Information about each sub-question |
feedbackTemplateResult.items[].subjects[].title | array | Sub-question title |
feedbackTemplateResult.items[].subjects[].description | array | Sub-question description |
feedbackTemplateResult.items[].subjects[].result | array | Sub-question results: the scoring question is the value of the selected score; the single-choice question is the index value of the option, starting from 0; the description question is the string of the description |
feedbackTemplateResult.items[].subjects[].options | array | Array of option strings(this field in only valid when 'type'=2) |
updatedAt | string | Last update time of this data |
Add interview evaluation
> Request example
$ curl https://api.mokahr.com/api-platform/v1/addFeedbackTemplates \
-X POST
-H 'Content-Type: application/json' \
-d '
{
"name": "Interview evaluation",
"items": "[{\"title\":\"模块1\",\"description\":\"测试\",\"subjects\":[{\"type\":1,\"title\":\"JVM\",\"description\":\"测试\",\"scoreType\":5,\"needReason\":false,\"isRequired\":false,\"id\":\"d694ac72-1e57-4be1-b899-c3ad7f1f9feb\"}]}]",
"isOptimizedDeptIds": true,
"departmentType": 1,
"hireMode": 1,
"email": "linjianjun@mokahr.com",
"description": "这YesDescription",
"departmentIds": ["1","2"],
"linkageRelationship": "[{\"id\":\"523093a1-1727-49f1-80a7-26e6a817e44b\",\"linkages\":[{\"id\":\"1f4a6cf6-b5d6-4341-8187-989343cf98d7\",\"value\":0},{\"id\":\"11b1075c-5993-4338-8961-337747bac351\",\"value\":1}]}]"
}'
> Response example
{
"code": 200,
"message": "success",
"data": {
"id": "3435353"
}
}
Add corresponded interview evaluation
HTTP request
POST https://api.mokahr.com/api-platform/v1/addFeedbackTemplates
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
name | Yes | string | Name of interview evaluation |
items | Yes | string | Interview evaluation form module string (see Item details below for the json of specific Items) |
hireMode | Yes | number | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Yes | string | Operator email | |
isOptimizedDeptIds | Yes | boolean | Interview evaluation department linkage switch |
departmentIds | Yes | array<number> | Department id array |
departmentType | Yes | number | Department type0 :Use Moka system 1 : Use sync department |
description | No | string | Interview evaluation description |
linkageRelationship | No | string | Interview evaluation form linkage relationship |
Item parameter details
Field | Required | Type | Description |
---|---|---|---|
title | Yes | string | Module name |
description | No | string | Template description |
calcScoreType | No | string | Points method 'avg:average score |
subjects[] | Yes | array | Question info array |
subjects[].id | Yes | string | Question id (Question id cannot be duplicated in same evaluation) |
subjects[].type | Yes | integer | Question type Optional values are: 1 :Scoring question2 : Single-choice question 3 :Description4 :Multiple response |
subjects[].title | Yes | string | Question name |
subjects[].description | Yes | string | Question description |
subjects[].scoreType | No | number | Required when type is 1, otherwise not |
subjects[].options[] | No | array | When the title is a multiple-choice question (required when the type is 2 and 4), it contains a json object (eg:[{value:"option 1"}]) |
subjects[].arrangeType | No | number | When type is 2 or 4, it is required at this time (that is, when the title is single-choice or multiple-choice), which means several options per line |
subjects[].needReason | No | boolean | Whether need a score review description |
subjects[].isRequired | No | boolean | Whether it is required |
subjects[].weight | No | number | It will appear when calcScoreType === 'weight' . The weight ratio of 50 means 50%. In addition, only scoring questions will calculate the weight. |
subjects[].ratio | No | number | The coefficient is non-decimal, and will only appear on the scoring questions in the standard interview evaluation form. |
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | not 200 represents error |
message | string | Operation info |
data | object | Response data body |
data.id | number | Interview evaluation id |
UpdateInterview evaluation
> Request example
$ curl https://api.mokahr.com/api-platform/v1/updateFeedbackTemplates \
-X POST
-H 'Content-Type: application/json' \
-d '
{
"id": "123",
"name": "Interview evaluation",
"items": "[{\"title\":\"模块1\",\"description\":\"测试\",\"subjects\":[{\"type\":1,\"title\":\"JVM\",\"description\":\"测试\",\"scoreType\":5,\"needReason\":false,\"isRequired\":false,\"id\":\"d694ac72-1e57-4be1-b899-c3ad7f1f9feb\"}]}]",
"isOptimizedDeptIds": true,
"departmentType": 0,
"hireMode": 1,
"email": "linjianjun@mokahr.com",
"description": "这YesDescription",
"departmentIds": [1,2],
"linkageRelationship": "[{\"id\":\"523093a1-1727-49f1-80a7-26e6a817e44b\",\"linkages\":[{\"id\":\"1f4a6cf6-b5d6-4341-8187-989343cf98d7\",\"value\":0},{\"id\":\"11b1075c-5993-4338-8961-337747bac351\",\"value\":1}]}]"
} '
> Response example
{
"code": 200,
"message": "success",
"data": null
}
Update corresponded interview evaluation
HTTP request
POST https://api.mokahr.com/api-platform/v1/updateFeedbackTemplates
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
id | Yes | number | Interview evaluation id |
name | Yes | string | Name of interview evaluation |
items | Yes | string | Interview evaluation form module string (see Item details below for the json of specific Items) |
hireMode | Yes | number | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Yes | string | Operator email | |
isOptimizedDeptIds | Yes | boolean | Interview evaluation department linkage switch |
departmentIds | Yes | array<number> | Department id array |
departmentType | Yes | number | Department type0 :Use Moka system1 : Use sync department |
description | No | string | Interview evaluation description |
linkageRelationship | No | string | Interview evaluation form linkage relationship |
Item parameter details
Field | Required | Type | Description |
---|---|---|---|
title | Yes | string | Module name |
description | No | string | Template description |
calcScoreType | No | string | Points method 'avg:average score |
subjects[] | Yes | array | Question info array |
subjects[].id | Yes | string | Question id (Question id cannot be duplicated in same evaluation) |
subjects[].type | Yes | integer | Question type Optional values are: 1 :Scoring question2 : Single-choice question 3 :Description4 :Multiple response |
subjects[].title | Yes | string | Question name |
subjects[].description | Yes | string | Question description |
subjects[].scoreType | No | number | Required when type is 1, otherwise not |
subjects[].options[] | No | array | When the title is a multiple-choice question (required when the type is 2 and 4), it contains a json object (eg:[{value:"option 1"}]) |
subjects[].arrangeType | No | number | When type is 2 or 4, it is required at this time (that is, when the title is single-choice or multiple-choice), which means several options per line |
subjects[].needReason | No | boolean | Whether need a score review description |
subjects[].isRequired | No | boolean | Whether it is required |
subjects[].weight | No | number | It will appear when calcScoreType === 'weight' . The weight ratio of 50 means 50%. In addition, only scoring questions will calculate the weight. |
subjects[].ratio | No | number | The coefficient is non-decimal, and will only appear on the scoring questions in the standard interview evaluation form. |
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | not 200 represents error |
message | string | Operation info |
data | object | The responded data body defaults to null |
Delete Interview evaluation
> Request example
$ curl https://api.mokahr.com/api-platform/v1/deleteFeedbackTemplates \
-X POST
-H 'Content-Type: application/json' \
-d '
{
"id": "123"
} '
> Response example
{
"code": 200,
"message": "success",
"data": null
}
Delete corresponded nterview evaluation
HTTP request
POST https://api.mokahr.com/api-platform/v1/deleteFeedbackTemplates
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
id | Yes | number | Interview evaluation id |
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | not 200 represents error |
message | string | Operation info |
data | object | The responded data body defaults to null |
Query interview plan
> Request example
$ curl --location 'https://api.mokahr.com/api-platform/v1/interview-plan/getInterviewPlanConfig' \
--header 'Content-Type: application/json' \
--header 'Cookie: locale=zh-CN' \
--data '{
"ids" : [686]
}'
> Response example
{
"code": 0,
"codeType": 0,
"data": [
{
"interviewPlanConfig": [
{
"feedbackTemplateId": 128,
"interviewConclusionDecideRulesId": 0,
"interviewRoundId": 200000130,
"sort": 1
},
{
"feedbackTemplateId": 129,
"interviewConclusionDecideRulesId": 0,
"interviewRoundId": 200000131,
"sort": 2
},
{
"feedbackTemplateId": 0,
"interviewConclusionDecideRulesId": 0,
"interviewRoundId": 200000132,
"sort": 3
},
{
"feedbackTemplateId": 0,
"interviewConclusionDecideRulesId": 0,
"interviewRoundId": 200000450,
"sort": 4
}
],
"interviewPlanId": 686,
"interviewPlanName": "社招面试方案1",
"version": "1.0"
}
],
"msg": "成功",
"success": true
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/interview-plan/getInterviewPlanConfig
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
interviewPlanIds | No | number | Multiple interview plans can be uploaded. If not uploaded, all interview plans will be queried |
Response body in JSON
Field | Type | Description |
---|---|---|
interviewPlan | array | Interview plan array |
interviewPlanId | string | Interview Plan ID |
interviewPlanName | string | Interview Plan Name |
interviewPlanConfig | array | interview Plan Config |
interviewRoundId | number | Interview round ID |
feedbackTemplateId | number | Interview evaluation form ID |
interviewConclusionDecideRulesId | number | Interview result determination rule ID |
sort | number | sort |
nextCursor | number | Pagination cursor,no need to pass it for the first query.The value of this attribute is taken from the nextCursor value returned by the response parameter on the last call. |
pageSize | number | Number of entries per page for pagination, default 100 |
Retrieve single interview information
> Request example
$ curl -X POST \
https://api.mokahr.com/api-platform/v1/interview/interview-information \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 1234-7d7d-49ee-866d-8fc34567' \
-d '{"applicationIds":[123],"email":"ttt@moka.com"}'
> Response example
{
"code": 0,
"codeType": 0,
"data": [
{
"applicationId": 123,
"createdAt": 1706521302000,
"entities": [
{
"duration": 30,
"id": 123,
"intervieweeVideoUrl": "",
"interviewerFeedbacks": [
{
"feedbackId": 412343,
"interviewer": {
"id": "5234",
"name": "刘"
},
"interviewerId": 5666
}
],
"round": 16,
"roundName": "这是很长的轮次名称啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦",
"startTime": 1706522400000
}
],
"interviewArranger": {
"id": "410105860",
"name": "wangzhuang"
},
"interviewArrangerId": 410105860,
"startDay": 1706522400000,
"typeCode": 1,
"valid": true
},
{
"applicationId": 123,
"createdAt": 1706596988000,
"entities": [
{
"duration": 30,
"id": 411242466,
"interviewerFeedbacks": [
{
"feedbackId": 412343,
"interviewer": {
"id": "5666",
"name": "刘"
},
"interviewerId": 5666
},
{
"feedbackId": 42344,
"interviewer": {
"id": "6592",
"name": "杜"
},
"interviewerId": 6592
},
{
"feedbackId": 41178,
"interviewer": {
"id": "6427",
"name": "高"
},
"interviewerId": 6427
}
],
"round": 17,
"roundName": "这是很长名字",
"startTime": 1706598000000
}
],
"interviewArranger": {
"id": "4101058",
"name": "wang"
},
"interviewArrangerId": 41010560,
"startDay": 1706598000000,
"typeCode": 1,
"valid": true
},
{
"applicationId": 123,
"createdAt": 1706521583000,
"entities": [
{
"duration": 30,
"id": 41124233,
"intervieweeVideoUrl": "",
"interviewerFeedbacks": [
{
"feedbackId": 41173095,
"interviewer": {
"id": "41010560",
"name": "wang"
},
"interviewerId": 41010560
}
],
"round": 17,
"roundName": "这是很长名字",
"startTime": 1706608800000
}
],
"interviewArranger": {
"id": "41010560",
"name": "wangzhuang"
},
"interviewArrangerId": 41010580,
"startDay": 1706608800000,
"typeCode": 1,
"valid": true
},
{
"applicationId": 42537377,
"createdAt": 1711422246000,
"entities": [
{
"duration": 30,
"id": 41124492,
"intervieweeVideoUrl": "https://meeting.tencent.com/dm/E7L4qy7pZm",
"interviewerFeedbacks": [
{
"feedbackId": 411788,
"interviewer": {
"id": "5666",
"name": "刘"
},
"interviewerId": 5666
}
],
"round": 17,
"roundName": "这是很长名字",
"startTime": 1711423800000
},
{
"duration": 30,
"id": 4112443,
"intervieweeVideoUrl": "https://meeting.tencent.com/dm/E7L4qy7p4m",
"interviewerFeedbacks": [
{
"feedbackId": 4117859,
"interviewer": {
"id": "7280",
"name": "胡"
},
"interviewerId": 780
}
],
"round": 17,
"roundName": "这是很长名字",
"startTime": 1711425600000
}
],
"interviewArranger": {
"id": "4105860",
"name": "wang"
},
"interviewArrangerId": 4101860,
"startDay": 1711423800000,
"typeCode": 4,
"valid": true
},
{
"applicationId": 123,
"createdAt": 1711620793000,
"entities": [
{
"duration": 30,
"id": 4112493,
"intervieweeVideoUrl": "",
"interviewerFeedbacks": [
{
"feedbackId": 4117858,
"interviewer": {
"id": "7280",
"name": "胡"
},
"interviewerId": 7280
}
],
"round": 17,
"roundName": "这是很长名字",
"startTime": 1711621800000
}
],
"interviewArranger": {
"id": "410105860",
"name": "wang"
},
"interviewArrangerId": 40105860,
"startDay": 1711621800000,
"typeCode": 1,
"valid": true
},
{
"applicationId": 425347377,
"createdAt": 1711684014000,
"entities": [
{
"duration": 30,
"id": 411244717,
"intervieweeVideoUrl": "",
"interviewerFeedbacks": [
{
"feedbackId": 411785598,
"interviewer": {
"id": "6427",
"name": "高"
},
"interviewerId": 6427
}
],
"round": 4,
"roundName": "初试",
"startTime": 1711684800000
}
],
"interviewArranger": {
"id": "410105860",
"name": "wang"
},
"interviewArrangerId": 410105860,
"startDay": 1711684800000,
"typeCode": 2,
"valid": true
},
{
"applicationId": 425347377,
"createdAt": 1712567677000,
"entities": [
{
"duration": 30,
"id": 411245123,
"intervieweeVideoUrl": "",
"interviewerFeedbacks": [
{
"feedbackId": 411786027,
"interviewer": {
"id": "7280",
"name": "胡"
},
"interviewerId": 7280
},
{
"feedbackId": 411786028,
"interviewer": {
"id": "410105860",
"name": "wang"
},
"interviewerId": 410105860
},
{
"feedbackId": 411786029,
"interviewer": {
"id": "26446",
"name": "Han"
},
"interviewerId": 26446
}
],
"round": 17,
"roundName": "这是很长名字",
"startTime": 1712568600000
}
],
"interviewArranger": {
"id": "410105860",
"name": "wang"
},
"interviewArrangerId": 410105860,
"startDay": 1712568600000,
"typeCode": 1,
"valid": true
}
],
"msg": "成功",
"success": true
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/interview/interview-information
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
applicationIds | Yes | array | applicationIds |
Yes | string |
Response body in JSON
Field | Type | Description |
---|---|---|
typeCode | integer | Interview types: 1. On site interview 2. Group interview 3. Telephone interview 4. Video interview |
valid | boolean | Cancel false: Cancel |
createdAt | date | Creation time |
applicationId | integer | Application ID |
interviewArranger | object | Interview Manager |
interviewArranger.id | string | Interview Manager ID |
interviewArranger.name | string | Interview Manager Name |
entities[] | array | Interview information |
entities[].id | integer | Interview ID |
entities[].duration | integer | Interview time: unit minutes |
entities[].intervieweeVideoUrl | string | Interview link |
entities[].round | integer | Interview round ID |
entities[].roundName | string | Interview rounds |
entities[].startTime | date | Interview start time |
entities[].interviewerFeedbacks[] | array | Interview feedback information |
entities[].interviewerFeedbacks[].feedbackId | integer | Interview evaluation ID |
entities[].interviewerFeedbacks[].interviewer | object | Interviewer Information |
entities[].interviewerFeedbacks[].interviewer.id | string | Interviewer ID |
entities[].interviewerFeedbacks[].interviewer.name | string | Interviewer Name |
Retrieve interview evaluation form configuration and data
> Request example
$ curl -X POST \
https://api.mokahr.com/api-platform/v1/interview/getInterviewFeedbackTpl \
-H 'Content-Type: application/json' \
-H 'Postman-Token: ba847e42-10d2-42fa-9eee-3defd1' \
-d '{"feedbackId":123,"email":"ttt@moka.com"}'
> Response example
{
"code": 0,
"codeType": 0,
"data": {
"applicationId": 42537,
"feedback": "2",
"feedbackId": 123,
"feedbackResultId": 4181,
"feedbackResultList": [
{
"feedbackResultId": 4181,
"feedbackResultName": "非常不满意"
},
{
"feedbackResultId": 4182,
"feedbackResultName": "不满意"
},
{
"feedbackResultId": 4183,
"feedbackResultName": "非常满意"
},
{
"feedbackResultId": 4184,
"feedbackResultName": "满意"
},
{
"feedbackResultId": 410026016,
"feedbackResultName": "待定"
}
],
"feedbackResultName": "非常不满意",
"feedbackTemplateResult": {
"description": "",
"items": [
{
"description": "",
"id": "2a67ba30-39b1-48f0-93f372e70d5b6",
"subjects": [
{
"arrangeType": 0,
"description": "1、的九康京东方就\n2、大师级绝对第三节课\n3、大师空",
"id": "1e3cb4a0-7c3f-481e-8a4abfe5fbf6",
"isFoldDescription": true,
"isRequired": false,
"needReason": true,
"relatedQuestion": true,
"result": 2,
"scoreType": 5,
"title": "11",
"type": 1
},
{
"arrangeType": 0,
"description": "1、大家看见地方接口\n2、杜佳的看速度金卡戴珊就\n3、大师得大师级\n4、大师级绝对是绝是加快速度",
"id": "5bcc1188-da8c-4b13-8f94-919327f2",
"isFoldDescription": false,
"isRequired": false,
"needReason": false,
"relatedQuestion": true,
"scoreType": 5,
"title": "12",
"type": 1
}
],
"title": "这是新建的评价表"
},
{
"description": "",
"id": "55a1c7dc-6af2-49ee-86c1aca40c57",
"subjects": [
{
"arrangeType": 0,
"description": "我认为人人车23场",
"id": "23d04fbd-2333-4f13-9d20-29f65c89cdb7",
"invisible": true,
"isRequired": false,
"needReason": false,
"scoreType": 5,
"title": "万人次",
"type": 3
},
{
"arrangeType": 0,
"description": "a是的",
"id": "e4710ffd-43b8-4142-83d1-899ad5",
"isRequired": false,
"needReason": false,
"scoreType": 5,
"title": "2",
"type": 3
}
],
"title": "仍维持"
},
{
"description": "是的",
"id": "0fee2d7e-fdca-43bc141e9a57",
"subjects": [
{
"arrangeType": 0,
"description": "安德森",
"id": "cce8922c-82c9-4b22-b638-24210c36bd35",
"isRequired": false,
"needReason": false,
"options": [
{
"value": "选项1"
},
{
"value": "选项2"
}
],
"scoreType": 5,
"title": "2阿斯顿",
"type": 2
}
],
"title": "阿斯顿"
}
],
"name": "校招面试评价表111"
},
"interviewId": 411243,
"interviewerId": 4105860
},
"msg": "成功",
"success": true
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/interview/getInterviewFeedbackTpl
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
feedbackId | Yes | Integer | feedbackId |
Yes | string |
Response body in JSON
Field | Type | Description |
---|---|---|
feedbackId | Integer | Interview evaluation ID |
interviewerId | Integer | Interviewer ID |
interviewId | Integer | Interview ID |
applicationId | Integer | Application ID |
feedback | string | Evaluation content |
feedbackResultId | Integer | Evaluation result ID |
feedbackResultName | string | Evaluation results |
feedbackTemplateResult | object | Evaluation details |
feedbackTemplateResult.name | string | Evaluation Name |
feedbackTemplateResult.description | string | Evaluation description |
feedbackTemplateResult.items[] | array | Evaluation details |
feedbackTemplateResult.items[].id | string | Module ID |
feedbackTemplateResult.items[].description | string | Module Description |
feedbackTemplateResult.items[].title | string | Module Title |
feedbackTemplateResult.items[].subjects[] | array | Information for each sub question under the module |
feedbackTemplateResult.items[].subjects[].id | string | Question ID |
feedbackTemplateResult.items[].subjects[].description | string | Question description |
feedbackTemplateResult.items[].subjects[].isRequired | boolean | Is it necessary to |
feedbackTemplateResult.items[].subjects[].needReason | boolean | Do we need a reason |
feedbackTemplateResult.items[].subjects[].arrangeType | integer | Arrangement type |
feedbackTemplateResult.items[].subjects[].scoreType | integer | Question score type |
feedbackTemplateResult.items[].subjects[].title | string | Title of the question |
feedbackTemplateResult.items[].subjects[].type | integer | Question type, optional values: 1: Scoring questions 2: Multiple choice questions 3: Descriptive questions 4: Multiple choice questions |
feedbackTemplateResult.items[].subjects[].options[] | array | Option string array (only valid when type is 2) |
feedbackTemplateResult.items[].subjects[].options[].value | string | Option value |
feedbackResultList[] | array | List of selectable evaluation results |
feedbackResultList[].feedbackResultId | interger | Evaluation result ID |
feedbackResultList[].feedbackResultName | string | Evaluation results |
Fill in interview feedback
> Request example
$ curl -X POST \
https://api.mokahr.com/api-platform/v1/interview/updateInterviewFeedback \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 18cd54dc-89f1-4ee1-9801-340d' \
-d '{
"orgId": "nonobank",
"email": "wang@mokahr.com",
"applicationId": 427,
"feedback": "2",
"feedbackId": 411795,
"feedbackResultId": 4181,
"feedbackResultList": [
{
"feedbackResultId": 4181,
"feedbackResultName": "非常不满意"
},
{
"feedbackResultId": 4182,
"feedbackResultName": "不满意"
},
{
"feedbackResultId": 4183,
"feedbackResultName": "非常满意"
},
{
"feedbackResultId": 4184,
"feedbackResultName": "满意"
},
{
"feedbackResultId": 410026016,
"feedbackResultName": "待定"
}
],
"feedbackResultName": "非常不满意",
"feedbackTemplateResult": {
"description": "",
"items": [
{
"description": "",
"id": "2a67ba30-39b1-48f0-93f3-46672e70d5b6",
"subjects": [
{
"arrangeType": 0,
"description": "1、的九分裤京东方就就\n2、大师级绝对是就大三节课\n3、大师级绝对三节课四大皆空",
"id": "1e3cb4a0-7c3f-481e-ba90-8a4abfe5fbf6",
"isFoldDescription": true,
"isRequired": false,
"needReason": true,
"relatedQuestion": true,
"result": 2,
"scoreType": 5,
"title": "11",
"type": 1
},
{
"arrangeType": 0,
"description": "1、大家减级的尽快答复看见地方接口\n2、杜佳美大师度金卡戴珊就\n3、大师级大师级试看见的都可见觉得大师级\n4、大师级绝对三节课绝对是绝对是加快速度",
"id": "5bcc1188-da8c-4b13-8f94-9954619327f2",
"isFoldDescription": false,
"isRequired": false,
"needReason": false,
"relatedQuestion": true,
"scoreType": 5,
"title": "12",
"type": 1
}
],
"title": "这是新建的评价表"
},
{
"description": "",
"id": "55a1c7dc-6af2-49ee-86c1-c908aca40c57",
"subjects": [
{
"arrangeType": 0,
"description": "我认为人人车23场",
"id": "23d04fbd-2333-4f13-9d20-29f65c89cdb7",
"invisible": true,
"isRequired": false,
"needReason": false,
"scoreType": 5,
"title": "万人次",
"type": 3
},
{
"arrangeType": 0,
"description": "a是的",
"id": "e4710ffd-43b8-4142-83d1-84382e099ad5",
"isRequired": false,
"needReason": false,
"scoreType": 5,
"title": "2",
"type": 3
}
],
"title": "仍维持"
},
{
"description": "是的",
"id": "0fee2d7e-fdca-47ab-a465-53bc141e9a57",
"subjects": [
{
"arrangeType": 0,
"description": "安德森",
"id": "cce8922c-82c9-4b22-b638-24210c36bd35",
"isRequired": false,
"needReason": false,
"options": [
{
"value": "选项1"
},
{
"value": "选项2"
}
],
"scoreType": 5,
"title": "2阿斯顿",
"type": 2
}
],
"title": "阿斯顿"
}
],
"name": "校招面试评价表111"
},
"interviewId": 41123,
"interviewerId": 410105860
}'
> Response example
{
"code": 0,
"codeType": 0,
"msg": "成功",
"success": true
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/interview/updateInterviewFeedback
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
feedbackId | Yes | Integer | Interview evaluation ID |
Yes | String | mailbox | |
feedback | No | string | Evaluation content (only effective after passing feedbackResultId) |
feedbackResultId | No | Integer | Evaluation result ID |
feedbackTemplateResult | No | object | Evaluation details |
feedbackTemplateResult.items[] | No | array | Evaluation details |
feedbackTemplateResult.items[].id | No | string | Module ID |
feedbackTemplateResult.items[].subjects[] | No | array | Information for each sub question under the module |
feedbackTemplateResult.items[].subjects[].id | No | string | Question ID |
feedbackTemplateResult.items[].subjects[].result | No | object | Depending on the type of question: 1: Scoring questions such as 3 (number represents score) 2: Multiple choice questions such as 0 (integer represents subscript, starting from 0) 3: Descriptive questions such as excellent (string represents description) 4: Multiple choice questions, such as 0, 3 |
feedbackTemplateResult.items[].subjects[].reason | No | string | Reason, when a reason needs to be transmitted |
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | code |
msg | string | msg |
success | boolean | success |
Offer API
This part of the API is mainly used to update the status of candidates in the Offer/Onboarding stage. The application scenario is that the candidate is pushed to other systems through webhook, and the information of other systems updates the status of the candidate in Moka synchronously to ensure the accuracy of the data and avoid manual secondary operations.
Create fake offers
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offers \
-u 'your_api_key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '{ "applicationId": 12798, "operator": { "name": "李明", "phone": "18600000001" }}'
> Response example
{
"id": "gesk7uO58DZeThxx"
}
Create a fake offer for the candidate. Fake Offers do not actually generate Offers in the Moka system, but serve as markers so that Offer-related data reports are statistically accurate.
HTTP request
POST https://api.mokahr.com/api-platform/v1/offers
Request body(JSON)
Field | Required | Description |
---|---|---|
applicationId | Yes | integer Candidate application's unique id in Moka |
operator | Yes | object Operator |
operator.name | Yes | string Operator name |
operator.email | No | string Operator email |
operator.phone | No | string Operator phone |
Response
Response body in JSON
Field | Description |
---|---|
id | string Fake offer id |
Delete fake Offer
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offers/delete \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '{ "offerId": 123, "operator": { "name": "李明", "phone": "18600000001" }}'
Delete a fake Offer.
HTTP request
PUT https://api.mokahr.com/api-platform/v1/offers/{offerId}/delete
Request URL parameter
Field | Description |
---|---|
offerId | Fake offer id |
Request body(JSON)
Field | Required | Description |
---|---|---|
operator | Yes | object Operator |
operator.name | Yes | string Operator name |
operator.email | No | string Operator email |
operator.phone | No | string Operator phone |
Response
Response200.
Mark AcceptOffer
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offers/accept \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '{ "offerId": 123, "operator": { "name": "李明", "phone": "18600000001" }}'
Mark a fake Offer as accepted.
HTTP request
PUT https://api.mokahr.com/api-platform/v1/offers/{offerId}/accept
Request URL parameter
Field | Description |
---|---|
offerId | Fake offer id |
Request body(JSON)
Field | Required | Description |
---|---|---|
operator | Yes | object Operator |
operator.name | Yes | string Operator name |
operator.email | No | string Operator email |
operator.phone | No | string Operator phone |
Response
Response200.
Mark regular employee
> Request example
$ curl https://api.mokahr.com/api-platform/v1/Candidates/12798/hired \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '{ "operator": { "name": "李明", "phone": "18600000001" }}'
Update a candidate applicationStatus to "Regular employee", and move to Regular employee talent pool
HTTP request
PUT https://api.mokahr.com/api-platform/v1/Candidates/{applicationId}/hired
Request URL parameter
Field | Description |
---|---|
applicationId | The unique id of candidate application in Moka |
Request body(JSON)
Field | Required | Description |
---|---|---|
operator | Yes | object Operator |
operator.name | Yes | string Operator name |
operator.email | No | string Operator email |
operator.phone | No | string Operator phone |
Response
Response200.
Mark rejecting Offer/Give up onboarding
> Request example
$ curl https://api.mokahr.com/api-platform/v1/Candidates/12798/reject \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '{ "archiveReasonId": 133, "offerId": "gesk7uO58DZeThxx", "operator": { "name": "李明", "phone": "18600000001" }}'
Update a candidate's application status to "Regular employee" and put it into the recruited talent pool.
HTTP request
PUT https://api.mokahr.com/api-platform/v1/Candidates/{applicationId}/reject
Request URL parameter
Field | Description |
---|---|
applicationId | Candidate application's unique id in Moka |
Request body(JSON)
Field | Required | Description |
---|---|---|
archiveReasonId | Yes | integer Reject reason id |
offerId | No | string Fake offerId, if it is not empty, mark the Offer as rejected at the same time |
operator | Yes | object Operator |
operator.name | Yes | string Operator name |
operator.email | No | string Operator email |
operator.phone | No | string Operator phone |
Response
Response200.
Get rejection reason
> Request example
$ curl https://api.mokahr.com/api-platform/v1/archiveReasons \
-u 'your_api_key:' \
-X GET
> Response example
{
"data": [
{
"id": 132,
"name": "福利待遇不满足"
},
{
"id": 133,
"name": "Work location较远"
},
{
"id": 134,
"name": "对公司业务不感兴趣"
}
]
}
Get candidate rejection reason list.
HTTP request
GET https://api.mokahr.com/api-platform/v1/archiveReasons
Response
Returns a JSON object, where the data
field corresponds to a list of rejection reasons. The structure of the rejection reasons is as follows:
Field | Description |
---|---|
id | integer Rejection reason id |
name | string Rejection reason,, such as: Benefits not met |
## Create Offer
> Request example
$ curl https://api.mokahr.com/api-platform/v1/create-offer \
-u 'your_api_key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '
{
"applicationId": 12,
"salaryNumber": 1000,
"salaryType": 1,
"checkinDate": "2018-08-06T16:00:00.000Z",
"contactUserName": "张三",
"contactEmail": "zhangsan@mokahr.com",
"contactPhone": "18612345678",
"locationId": 1,
"customFields": [
{
"name": "Field1",
"value": "value1"
},
{
"name": "Field2",
"value": 2
}
]
} '
> Response example
{
"success": true
}
or
{
"success": false,
"errorMessage": "Error info "
}
Pass offer info to create an offer. This function should be opened by CSM
HTTP request
POST https://api.mokahr.com/api-platform/v1/create-offer
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | The application id should be updated after the offer approval. |
salaryNumber | No | integer | Candidate salary |
salaryType | No | integer | Salary type Optional values are: 1 : Hourly salary 2 : Daily salary 3 : Hourly salary4 :Annual salary |
checkinDate | No | string | Onboard time |
locationId | No | integer | Onboarding location id |
contactUserName | No | string | Contact name |
contactPhone | No | string | Contact phone |
contactEmail | No | string | Contact email |
customFields | No | array | Custom field |
customFields[].id | No | string | Custom field name (Note: Id and name parameters must be passed one) |
customFields[].name | No | string | Custom field name (Note: Id and name parameters must be passed one) |
customFields[].value | No | string | Custom field value |
creatorEmail | No | string | Creator email |
creatorNumber | No | string | Creator employee No. |
toCandidateAttachment | No | array | The attachment key sent to the candidate (obtained through the public API attachment upload interface), the number cannot exceed 5 |
toApproverAttachment | No | array | The attachment key sent to the approver (obtained through the public API attachment upload interface), the number cannot exceed 5 |
hcId | No | integer | Associates headcount id |
jobRankId | No | integer | Position level id |
departmentCode | No | string | Onboarding department code |
isCreateOfferAttachment | No | boolean | false:Do not create offer attachments,true:Create a default offer attachment |
templateId | No | integer | Offer attachment template id |
Update offer
It is used to update the existing offers in the system. After updating the mandatory field of the offer, the original offer approval will become invalid, and the approval needs to be re-initiated
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offers/offerFields/update \
-u 'your_api_key:' \
-X POST \
-d '
{
"applicationId": 1,
"orgId": "test",
"operatorName": "zwj",
"fields": [
{
"name": "Estimated start time",
"value": "2020-09-09"
}
]
} '
> Response example
{
"code": 200,
"msg": "xxx"
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/offers/offerFields/update
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | Long | Application id |
orgId | Yes | String | orgId |
operatorName | Yes | String | Operator |
fields | Yes | array | The field that needs to be updated, there can be multiple elements |
fields[].id | No | string | Custom field name (Note: Id and name parameters must be passed one) |
fields[].name | Yes | String | Field Chinese name |
fields[].value | Yes | String | Corresponding value of name |
Response body in JSON
Field | Type | Description |
---|---|---|
code | string | 200 :Successnot 200 represents error |
msg | string | Interface return value illustration |
Get the list of offer attachment templates
> Request example
$ curl https://api.mokahr.com/api-platform/v1/listOfferTemplateByOrgId \
-u 'your_api_key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '{ "hireMode": 1 }'
> Response example
{
"code": 200,
"msg": "success",
"data": [
{
"id": 410002334,
"templateName": "系统默认Offer attachment模板",
"templateCategory": 1,
"version": "1.0"
}
]
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/listOfferTemplateByOrgId
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
hireMode | Yes | integer | Recruitment mode Optional values are: 1 :experienced hires2 :Campus recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
id | integer | Template id |
templateName | string | Template name |
templateCategory | integer | Template type Optional values are: 1 :Online template 2 : Import template |
Get the offer approval list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offerApprovals?email={email}.={period} \
-u 'your_api_key:' \
-X GET \
> Response example
{
"total": 1,
"offerApprovals": [
{
"CandidateName": "Arturia Pendragon",
"jobTitle": "Saber",
"departmentName": "Servants",
"initiatedAt": "2018-03-16T09:10:26.000Z",
"url": "https://app.mokahr.com/"
}
]
}
According to the user's email and offer approval status, get the offers that need to be approved by the user.
HTTP request
GET https://api.mokahr.com/api-platform/v1/offerApprovals?email={email}.={period}
Request query parameter
Field | Required | Description |
---|---|---|
Yes | The user email in Moka | |
period | Yes | Approval status Optional values are: past : Approved<br/ pending : Pending |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
total | integer | Return the total number of data |
offerApprovals[].CandidateName | string | Candidate name |
offerApprovals[].jobTitle | string | Job title |
offerApprovals[].departmentName | string | Department name |
offerApprovals[].initiatedAt | string | Initiate approval time. Date format is: ISO8601 |
offerApprovals[].url | string | Approval url |
Approve offer
> Request example
$ curl https://api.mokahr.com/api-platform/v1/applications/offerApproval \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '
{
"applicationId": 12,
"status": 1
} '
> Response example
{
"success": true
}
or
{
"success": false,
"errorMessage": "Error info "
}
Update the offer approval result based on the application ID and status, and your csm needs to enable the external approval function
HTTP request
PUT https://api.mokahr.com/api-platform/v1/applications/offerApproval
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | The application id should be updated after the offer approval. |
status | Yes | integer | Update status of approval result Optional values are: 1 : Approved2 : Denied3 : in approval |
Send Offer
> Request example
$ curl https://api.mokahr.com/api-platform/v1/sendOffer \
-u 'your_api_key:' \
-X POST \
-H 'Content-Type: application/json' \
-d '
{
"applicaitonId":1234,
"notifySms":false,
"notifyEmail":true,
"notifyWechat":true
}'
> Response example
{
"success": true
}
or
{
"success": false,
"errorMessage": "Error info "
}
Send Offer according to applicationId
HTTP request
POST https://api.mokahr.com/api-platform/v1/sendOffer
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | applicationId |
hrEmail | Yes | string | Operate HR email |
notifySms | No | boolean | Whether to send SMS to Candidates, the default is No |
notifyEmail | No | boolean | Whether to send emails to Candidates, the default is no |
notifyWechat | No | boolean | Whether to send WeChat to Candidates, the default is no |
ccUserEmails | No | array | CC person (controlled by notifyEmail switch) eg: ["123@mail.com"] |
Receive/Reject Offer
Set the candidate Offer feedback status, and the Moka system will mark the corresponding application as accepted or rejected after receiving it.
> Request example
$ curl http://api.mokahr.com/api-platform/v1/offer/status?applicationId=89&accepted=1&reasonId=1 \
-u 'your_api_key:' \
-X PUT \
> Response example
{
"code": 0
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/offer/status?applicationId={applicationId}&accepted={accepted}&reasonId={reasonId}
Request parameter
Field | Required | Description |
---|---|---|
applicationId | Yes | Apply id |
accepted | Yes | Feedback status Optional values are: 1 : Accept 0 :Reject |
reasonId | No | System filing reason and customer-defined filing reason id, required when the feedback status is rejectedn |
talentPoolId | No | Public talent pool id, if not filled in, it will enter the public talent pool by default, it will take effect when the feedback status is rejected |
fbTime | No | Feedback time |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | 0: Setting successful |
Get Offer custom field list
> Request example
$ curl https://api.mokahr.com/api-platform/v2/offers/custom_fields
-u 'your-api-key:'
-X POST
-H 'Content-Type: application/json'
-d '{
"hireMode": 1
}'
> Response example
{
"code": 0,
"message": "success",
"data": [
{
"id": "7513",
"name": "Estimated start time",
"hireMode": 1,
"type": 4,
"isBuiltin": true,
"isRequired": false,
"isSensitive": false,
"isVisible": true,
"reapprovalRequired": false
},
{
"id": "410000250",
"name": " Multiple-line text-1",
"hireMode": 1,
"type": 1,
"supplementaryLocales": {
"en-US": {
"name": ""
}
},
"isBuiltin": false,
"isRequired": true,
"isSensitive": true,
"isVisible": true,
"reapprovalRequired": true
},
{
"id": "410000251",
"name": "Yes-or-No question",
"hireMode": 1,
"type": 3,
"supplementaryLocales": {
"en-US": {
"name": ""
}
},
"isBuiltin": false,
"isRequired": false,
"isSensitive": false,
"isVisible": true,
"reapprovalRequired": false
}, {
"id": "410002280",
"name": " Choice question",
"hireMode": 1,
"type": 6,
"supplementaryLocales": {
"en-US": {
"name": "",
"detail": []
}
},
"detail": [
"A",
"B",
"C",
"D"
],
"codes": [
"1001",
"1002",
"1003",
"1004"
],
"isBuiltin": false,
"isRequired": false,
"isSensitive": false,
"isVisible": true,
"reapprovalRequired": false
},
{
"id": "410002282",
"name": "年月",
"hireMode": 1,
"type": 4,
"supplementaryLocales": {
"en-US": {
"name": ""
}
},
"isBuiltin": false,
"isRequired": false,
"isSensitive": false,
"isVisible": true,
"reapprovalRequired": false
},
{
"id": "410002283",
"name": "时间年月日----0",
"hireMode": 1,
"type": 9,
"supplementaryLocales": {
"en-US": {
"name": ""
}
},
"isBuiltin": false,
"isRequired": false,
"isSensitive": false,
"isVisible": true,
"reapprovalRequired": false
},
{
"id": "410002292",
"name": " Time period",
"hireMode": 1,
"type": 7,
"supplementaryLocales": {
"en-US": {
"name": ""
}
},
"isBuiltin": false,
"isRequired": false,
"isSensitive": false,
"isVisible": true,
"reapprovalRequired": false
},
{
"id": "410012394",
"name": "测33333试",
"hireMode": 1,
"type": 6,
"supplementaryLocales": {
"en-US": {
"name": "测试- Single line text-EnglishTitle",
"detail": [
"选项1-e",
"选项2-e"
]
}
},
"detail": [
"选项1",
"选项2"
],
"codes": [
"1005",
"1006"
],
"isBuiltin": false,
"isRequired": true,
"isSensitive": true,
"isVisible": false,
"reapprovalRequired": true
}
]
}
HTTP request
POST https://api.mokahr.com/api-platform/v2/offers/custom_fields
Request body
Field | Whether it is required | Type | Description |
---|---|---|---|
hireMode | Yes | integer | Recruitment mode Optional values are: 1 :experienced hires 2 :Campus recruitment |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | integer | Response code:200 normal, others are error |
msg | string | Success response success, failure response false |
data | array or object | If it is a single piece of data, it returns an object and multiple pieces of data return an array |
data.id | integer | Custom field id |
data.name | string | Custom field name |
data.hireMode | integer | Recruitment type Optional values are: 1 : experienced hires2 :Campus recruitment |
data.type | integer | Custom field type Optional values are: 1 : Single line text2 : Multiple-line text3 :Yes-or-No question4 :Select year and month5 : File6 : Choice question7 : Time period8 :HC related to Offer9 : Date |
data.detail | array | Options of custom field |
data.codes | array | The encoding corresponding to the custom field selection |
data.supplementaryLocales | object | Bilingual object |
data.supplementaryLocales.en-US | object | Multilingual English object |
data.supplementaryLocales.en-US.name | string | English name of the custom field |
data.supplementaryLocales.en-US.detail | array | Options of custom field |
data.isBuiltin | boolean | Whether it is in the system |
data.isRequired | boolean | Whether it is required |
data.isSensitive | boolean | Whether it is private |
data.isVisible | boolean | Whether it is visible |
data.reapprovalRequired | boolean | Whether it is reviewed |
Create Offer custom field list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offers/custom_field/create
-u 'your-api-key:'
-X POST
-H 'Content-Type: application/json'
-d '
{
"hireMode": 1,
"detail":["选项1","选项2"],
"codes":["1005","1006"],
"supplementaryLocales":{
"en-US": {
"name":"测试- Single line text-EnglishTitle",
"detail":["选项1-e","选项2-e"]
}
},
"isRequired": true,
"isSensitive": true,
"isVisible": false,
"name": "测33333试",
"reapprovalRequired": true,
"type": 6
}
'
> Response example
{
"code": 200,
"success": true,
"msg": "success",
"data": {
"id": "410012399"
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/offers/custom_field/create
Request body
Field | Required | Type | Description |
---|---|---|---|
name | Yes | string | Custom field name |
hireMode | Yes | integer | Recruitment type Optional values are: 1 : experienced hires2 : Campus recruitment |
type | Yes | integer | Custom field type Optional values are: 1 : Single line text2 : Multiple-line text3 :Yes-or-No question4 :Select year and month6 : Choice question7 : Time period8 :HC related to Offer9 : Date10 :Number |
detail | No | array | Custom field options, optional, when type is 6, add |
data.codes | No | array | The encoding corresponding to the custom field selection |
supplementaryLocales | No | object | multilingual object |
supplementaryLocales.en-US | No | object | Multilingual English object |
supplementaryLocales.en-US.name | No | string | English name of the custom field,optional. |
supplementaryLocales.en-US.detail | No | array | Custom field options, optional |
isRequired | No | boolean | Required, optional default is false |
isSensitive | No | boolean | Whether private, optional is false by default |
isVisible | No | boolean | Whether visible, optional is true by default |
reapprovalRequired | No | boolean | Whether reviewed, optional is false by default |
attributeRule | No | object | The attribute rule when type is 10 |
attributeRule.decimalLength | No | number | The number of decimal places is null by default |
attributeRule.isSupportNegative | No | boolean | Whether to support negative numbers, not supported by default |
attributeRule.numberRange | No | objeact | Number range |
attributeRule.numberRange.min | No | number | Minimum value of number range |
attributeRule.numberRange.max | No | number | Maximum value of number range |
Response
Response body inJSON, as follows
Field | Type | Description |
---|---|---|
code | string | 200 :Successnot 200 represents error |
msg | string | Interface return value illustration |
success | boolean | Deprecated, please use code to judge the call result instead of business logic |
data | object | returned as an object |
data.id | string | Respond the currently created field id |
UpdateOffer custom field list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offers/custom_field/update
-u 'your-api-key:'
-X PUT
-H 'Content-Type: application/json'
-d '
{
"id":"410012399",
"hireMode": 1,
"detail":["选项1","选项2"],
"codes":["1005","1006"],
"supplementaryLocales":{
"en-US": {
"name":"测试- Single line text-EnglishTitle",
"detail":["选项1-e","选项2-e"]
}
},
"isRequired": true,
"isSensitive": true,
"isVisible": false,
"name": "测33333试",
"reapprovalRequired": true,
"type": 6
}
'
> Response example
{
"code": 200,
"success": true,
"msg": "success",
"data": null
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/offers/custom_field/update
Request body
Field | Required | Type | Description |
---|---|---|---|
id | Yes | integer | The custom field id that needs to be modified, required |
name | No | string | Custom field name, optional |
hireMode | No | integer | Recruitment type Optional values are: 1 :experienced hires2 : Campus recruitment |
type | No | integer | Custom field type Optional values are: 1 : Single line text2 : Multiple-line text3 :Yes-or-No question4 :Select year and month6 : Choice question7 : Time period9 : Date10 :Number |
detail | No | array | Custom field options, optional |
data.codes | No | array | The encoding corresponding to the custom field selection |
supplementaryLocales | No | object | Multilingual object, if you set multilingual, you must set the parameters according to the following format, optional |
supplementaryLocales.en-US | No | object | Multilingual English object, optional |
supplementaryLocales.en-US.name | No | string | English name of the custom field,optional |
supplementaryLocales.en-US.detail | No | array | Custom field options, optional |
isRequired | No | boolean | Required,optional. |
isSensitive | No | boolean | Whether private or not, optional |
isVisible | No | boolean | Visible or not, optional |
reapprovalRequired | No | boolean | Whether reviewed or not, optional |
attributeRule | No | object | The attribute rule when type is 10 |
attributeRule.decimalLength | No | number | The number of decimal places is null by default |
attributeRule.isSupportNegative | No | boolean | Whether to support negative numbers, not supported by default |
attributeRule.numberRange | No | objeact | Number range |
attributeRule.numberRange.min | No | number | Minimum value of number range |
attributeRule.numberRange.max | No | number | Maximum value of number range |
Response
Response body inJSON, as follows
Field | Type | Description |
---|---|---|
code | string | 200 :Success not 200 represents error |
msg | string | Interface return value illustration |
success | boolean | Deprecated, please use code to judge the call result instead of business logic |
data | object | Respond null |
Delete Offer custom field list
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offers/custom_field/delete
-u 'your-api-key:'
-X DELETEl
-H 'Content-Type: application/json'
-d '
{
"id":"410012399"
}
'
> Response example
{
"code": 200,
"success": true,
"msg": "success",
"data": null
}
HTTP request
DELETE https://api.mokahr.com/api-platform/v1/offers/custom_field/delete
Request body
Field | Required | Type | Description |
---|---|---|---|
id | Yes | integer | The custom field id to be deleted, required |
Response
Response body in JSON, as follows
Field | Type | Description |
---|---|---|
code | string | 200 :Successnot 200 represents error |
msg | string | Interface return value illustration |
success | boolean | Deprecated, please use code to judge the call result instead of business logic |
data | object | Respond null |
Get Offer attachment
> Request example
$ curl https://api.mokahr.com/api-platform/v1/offer/getOfferAttachment
-u 'your-api-key:'
-X POST
-H 'Content-Type: application/json'
-d '
{
"applicationId":"410012399"
}
'
> Response example
{
"code": 200,
"msg": "success",
"data": {
"downLoadUrl": "https://moka-test.oss-cn-beijing.aliyuncs.com/0d4281d9d86c43d8b0c46f1ad9fc9b0bf06d0e39fe6645e9a20b5171050259d1.pdf?Expires=1605597667&OSSAccessKeyId=LTAIoEXIQWCGUAZO&Signature=gVAYJv7BBCbIQ7fLYx3K%2Fy1FOso%3D×tamp=1605594067646"
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/offer/getOfferAttachment
Request body
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | Current Candidate's application id,required |
Response
Response body inJSON, as follows
Field | Type | Description |
---|---|---|
code | string | 200 :Success not 200 represents error |
msg | string | Interface return value illustration |
data | object | Object |
data.downLoadUrl | string | Link of offer attachment |
Onboarding API
Mark candidate as to be onboarded
> Request example
$ curl https://api.mokahr.com/api-platform/v1/applications/33582/rejected \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
> Response example
{
"success": true
}
or
{
"success": false,
"errorMessage": "该Application has been archived"
}
Archive the application status and move it to the talent pool. Applications must be in the "to be onboarded" stage and not in the talent pool.
HTTP request
PUT https://api.mokahr.com/api-platform/v1/applications/{applicationId}/rejected
Request Path parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | Candidate application id to be marked as hired |
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
archiveReasonId | No | number | Archiving reason id, if not passed, defaults to the built-in welfare benefits not satisfied |
talentPoolId | No | string | Talent pool id, if not passed, defaults to the built-in system public talent pool (first use the query talent pool list interface to query the talent pool id) |
detail | No | string | Archiving details, can be null |
Response
Response body in JSON
Field | Description |
---|---|
success | boolean |
errorMessage | string |
Mark CandidateRegular employee
> Request example
$ curl https://api.mokahr.com/api-platform/v1/applications/33582/hired \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '
{
"hcId": 5,
"hiredAt": "2018-08-06T16:00:00.000Z",
"probation": 3
} '
> Response example
{
"success": true
}
or
{
"success": false,
"errorMessage": "hcId Parameter error"
}
{
"success": false,
"errorMessage": "该Application has been archived"
}
根据CandidateApplication id及对应Job requisition id.
HTTP request
PUT https://api.mokahr.com/api-platform/v1/applications/{applicationId}/hired
Request Path parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | Candidate application id to be marked as hired |
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
hcId | No | integer | 1. When the "isUseOfferHcid" parameter is 1, (1) If "hcId" is not passed as a parameter, it will automatically fill in the recruitment requirement id associated with the offer under the current application; if the recruitment requirement id associated with the offer is empty, then The "hcId" parameter is empty. (2) If "hcId" is passed as a parameter, use the passed value. 2. If the passed value is null, it is not allowed to pass hcId="" or hcId=null, just don't pass this field directly. |
hiredAt | Yes | string | Real start time |
probation | Yes | integer | Probationary period Optional values are: 0-6 0 :No probation 1-6 :Months of probationary period |
isUseOfferHcid | No | integer | Whether to use the job requisition associated with the offer when onboarding. Optional values: Pass 1: If the "hcId" parameter is not passed, it will automatically fill in the job requisition id associated with the offer under the current application. Do not pass parameters: Do not execute the logic of "use the job requisition associated with the offer when you join the job". |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
success | boolean | Whether it is successful |
errorMessage | string | Error info |
Mark CandidateRegular employee Transfer-to-regular
> Request example
$ curl https://api.mokahr.com/api-platform/v1/applications/33582/corrected \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '
{
"status": 1,
"correctedAt": "2018-08-06T16:00:00.000Z"
} '
> Response example
{
"success": true
}
or
{
"success": false,
"errorMessage": " Transfer-to-regularStatusError"
}
According to the candidate application id.
HTTP request
PUT https://api.mokahr.com/api-platform/v1/applications/{applicationId}/corrected
Request Path parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | Candidate application ids identified as hired\not hired; this application must in the regular employee talent pool |
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
status | Yes | integer | Updated transfer-to-regular status Optional value 1 : Transfer-to-regular 0 :Not confirmed |
correctedAt | No | string | Real transfer-to-regular time; pass when status=1, not pass is current time by default. |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
success | boolean | Whether it is successful |
errorMessage | string | Error info |
Mark terminated employment candidate
> Request example
$ curl https://api.mokahr.com/api-platform/v1/applications/35392/resign \
-u 'your_api_key:' \
-X PUT \
-H 'Content-Type: application/json' \
-d '
{
"type": 1,
"detail":"世界那么大,我想去看看",
"time": "2018-08-06T16:00:00.000Z"
}
> Response example
{
"success": true
}
or
{
"success": false,
"errorMessage": "Archive reason cannot be found,归档信息Error",
"code": 40040102
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/applications/{applicationId}/resign
Request Path parameter
Field | Required | Type | Description |
---|---|---|---|
applicationId | Yes | integer | identify the application id of terminated employee |
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
reasonType | No | integer | The archive reason id of the terminated type |
detail | Yes | string | Reason for resignation |
time | No | string | Terminated time (request time by default) |
No | string | Operator email | |
talentPoolId | No | array | The talent pool id with which the operator has permission (first use the query talent pool list interface to query the talent pool id) |
isResignWriteJob | No | boolean | Whether to write back the resignation information Optional values are: 0 :Disable 1 : Enable, and requires terminated position Default: 0 |
resignJobName | No | string | Terminated position |
resignDepartment | No | string | Terminated department |
reason | No | int | Reason for resignation Optional values are: 0 :Terminated employment1 : Resignation2 : Dismission |
resignJobType | No | string | Terminated job classification |
When the passed job category are the same, the system will automatically merge together.
Response
Response body in JSON
Field | Description |
---|---|
success | boolean Deprecated, please use code to judge the call result instead of business logic |
errorMessage | string Error info |
code | string |
not 200 represents error
Possible error info
code | errorMessage | Illustration |
---|---|---|
0 | success | Success |
40040101 | applicationId.error | The candidate application id is wrong (a. the application id does not exist; b. the type is wrong) |
40040102 | reason.error | Wrong reason for leaving (wrong type) |
40040104 | talent_pool_Id.error | Talent pool error (a. not a former talent pool) |
40040105 | email.error | User email error (a. the user does not exist; b. email error) |
40040106 | user_permission.error | The user no permission |
Internal Referral Reward API
Query Internal Referral Reward
Request example
$ curl https://api.mokahr.com/api-platform/v1/recommend/reward/getRecord
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '{operatorEmail: "test@test.com", statusList: ["unconfirmed"], "rewardRecordCreateAtRange": {
"start": "2024-01-01",
"end": "2025-01-01",
}, "pageNum": "1", "pageSize": "30"}'
Response example
{
"code": 0,
"codeType": 0,
"data": {
"list": [
{
"applicationCreatedAt": "2024-10-09",
"candidate": {
"name": "某某某"
},
"job": {
"id": "67f079a1-9372-4f2f-a284-28038b491f57",
"mjCode": "MJ025244",
"title": "咖啡师"
},
"lastChangeInfo": {},
"recommender": {
"email": "testo@mokahr.com",
"id": 355575,
"name": "test",
"number": "355575",
"phone": "11111111111",
"role": 50,
"roleName": "超级管理员"
,
"recordNo": "OD10083726924",
"reward": {
"money": 0,
"score": 333
},
"rewardCreatedAt": "2024-10-09",
"rewardReason": "执行奖励原因",
"status": "unconfirmed",
"statusLastChangeAt": "2024-10-09",
"version": "1.0"
}
],
"pageNum": 1,
"pageSize": 30,
"size": 1,
"total": 1,
"version": "1.0"
},
"msg": "成功",
"success": true
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/recommend/reward/getRecord
Request body(JSON)
Field | Whether it is necessary | Type | Description |
---|---|---|---|
operatorEmail | No | string | Operator's email (If the operator's email is provided, records will be queried based on the permissions of that user) |
operatorNumber | No | string | Operator's employee number (If the operator's employee number is provided, records will be queried based on the permissions of that user) |
statusList | No | array | List of reward statuses to query, default is "unconfirmed" Optional values: unconfirmed : Unconfirmedconfirmed : Confirmedcancel : Cancelled |
applicationCreateAtRange | No | object | Application creation time range |
applicationCreateAtRange.start | No | string | Application creation start time(yyyy-MM-dd) |
applicationCreateAtRange.end | No | string | Application creation end time(yyyy-MM-dd) |
rewardRecordCreateAtRange | No | object | Reward occurrence date range |
rewardRecordCreateAtRange.start | No | string | Reward occurrence start time(yyyy-MM-dd) |
rewardRecordCreateAtRange.end | No | string | Reward occurrence end time(yyyy-MM-dd) |
statusLastChangeAt | No | object | Confirmation/cancellation date range |
statusLastChangeAt.start | No | string | Confirmation/cancellation start time(yyyy-MM-dd) |
statusLastChangeAt.end | No | string | Confirmation/cancellation end time(yyyy-MM-dd) |
pageNum | No | integer | Page number, default value is 1 |
pageSize | No | integer | Page size, default value is 30 |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
total | integer | Total record count |
size | integer | Number of items on the current page |
pageNum | integer | Current page number |
pageSize | integer | Number of items per page |
list[] | array | Reward record collection |
list[].recommender | object | Referrer |
list[].recommender.name | string | Referrer's name |
list[].recommender.id | long | Referrer's ID |
list[].recommender.role | integer | Referrer's role |
list[].recommender.roleName | string | Referrer's role description |
list[].recommender.email | string | Referrer's email |
list[].recommender.phone | string | Referrer's phone number |
list[].recommender.number | string | Referrer's employee number |
list[].candidate | object | Candidate |
list[].candidate.name | string | Candidate's name |
list[].candidate.applicationId | long | Application ID |
list[].job | object | Job information |
list[].job.title | string | Job title |
list[].job.id | string | Job ID |
list[].job.mjCode | string | Job code |
list[].recordNo | string | Reward record number |
list[].status | string | Reward status |
list[].reward | object | Reward content |
list[].reward.score | long | Reward points |
list[].reward.money | long | Reward money |
list[].rewardReason | string | Reason for the reward |
list[].applicationCreatedAt | string | Application creation date(yyyy-MM-dd) |
list[].rewardCreatedAt | string | Reward occurrence date(yyyy-MM-dd) |
list[].statusLastChangeAt | string | Confirmation/cancellation date(yyyy-MM-dd) |
list[].lastChangeInfo | object | Cancellation reason |
list[].lastChangeInfo.reason | string | Cancellation reason description |
Confirm Referral Reward
Request example
$ curl https://api.mokahr.com/api-platform/v1/recommend/reward/confirm
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '{operatorEmail: "test@test.com", recordNoList:["1234567"]}'
Response example
{
"code": 200,
"msg": "success",
"data": null
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/recommend/reward/confirm
Request body(JSON)
Field | Whether it is necessary | Type | Description |
---|---|---|---|
operatorEmail | At least one of email or employee number must be provided | string | Operator's email |
operatorNumber | At least one of email or employee number must be provided | string | Operator's employee number |
recordNoList | Yes | array | Referral reward record numbers |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | 0 : Success Non-zero values represent failure |
message | string | Message |
Cancel Referral Reward
Request example
$ curl https://api.mokahr.com/api-platform/v1/recommend/reward/cancel
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '{operatorEmail: "test@test.com", reason: "取消奖励", recordNoList:["1234567"]}'
Response example
{
"code": 200,
"msg": "success",
"data": null
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/recommend/reward/cancel
Request body(JSON)
Field | Whether it is necessary | Type | Description |
---|---|---|---|
operatorEmail | At least one of email or employee number must be provided | string | Operator's email |
operatorNumber | At least one of email or employee number must be provided | string | Operator's employee number |
reason | Yes | string | Reason for cancelling the reward |
recordNoList | Yes | array | Referral reward record numbers |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | 0 : Success Non-zero values represent failure |
message | string | Message |
Employee referral accountAPI
Check employee referral account
> Request example
$ curl https://api.mokahr.com/api-platform/v1/user/recommend_account/search
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '{ "emails": ["hello@mokahr.com", "admin@mokahr.com"], "phones": ["18600000001"], "employeeIds": ["123456", "32123"]}'
> Response example
[
{
"name": "超级Administrator",
"email": "hello@mokahr.com",
"phone": "18600000002",
"deactivated": 0,
"recommend_score": 0,
"recommend_money": 0,
"employee_id": "123456"
}
]
HTTP request
POST https://api.mokahr.com/api-platform/v1/user/recommend_account/search
Request body(JSON)
A single query is only allowed to query 20 users (the sum of the number of emails + phones does not exceed 20)
Field | Whether it is necessary | Type | Description |
---|---|---|---|
emails | Pass at least one from emails, phones, and employee ids | array | Array of email addresses of referral users to be queried |
phones | Pass at least one from emails, phones, and employee ids | array | Array of phone number of referral users to be queried |
employeeIds | Pass at least one from emails, phones, and employee ids | array | Array of employee number of referral users to be queried |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
name | string | Name |
string | ||
phone | string | Phone number |
employee_id | string | Employee No. |
deactivated | number | Whether be disabled Optional values are: 0 :Available 1 :Disabled |
recommend_score | number | Referral points |
recommend_money | number | Referral cash |
Adding and subtracting the balance of referrals
> Request example
$ curl https://api.mokahr.com/api-platform/v1/user/recommend_account/wallet_balance_changes
-u 'your-api-key:'
-X PUT
-H 'content-type: application/json'
-d '{ "user": { "email": "hello@mokahr.com" }, "currencyChanges": { "SCORE": { "method": 0, "number": 100 }, "MONEY": { "method": 0, "number": 100 } }, "comment": "积分商城兑换 iPhoneX" }'
> Response example
{
"name": "超级Administrator",
"email": "hello@mokahr.com",
"phone": "18600000001",
"employeeId": "123456",
"recommendScore": 10,
"recommendMoney": 800
}
HTTP request
PUT https://api.mokahr.com/api-platform/v1/user/recommend_account/wallet_balance_changes
Request body(JSON)
Field | Whether it is necessary | Type | Description |
---|---|---|---|
user | Yes | object | User of operated referee |
user.email | Pass at least one from user.email, user.phone, and user.employeeid | object | Email of operated referrer |
user.phone | Pass at least one from user.email, user.phone, and user.employeeid | object | Phone of operated referrer |
user.employeeId | Pass at least one from user.email, user.phone, and user.employeeid | object | Employee number of operated referrer |
currencyChanges | Yes | object | Change currency object |
currencyChanges.SCORE | Pass at least one from currencyChanges.SCORE and currencyChanges.MONEY | object | Operate user's points |
currencyChanges.SCORE.method | Yes | 0 or 1 | 0 :Reduce 1 : Increase |
currencyChanges.SCORE.number | Yes | number | The amount to add or subtract, must be a number and can only enter up to 2 decimal places |
currencyChanges.MONEY | Pass at least one from currencyChanges.SCORE and currencyChanges.MONEYPass at least one from currencyChanges.SCORE and currencyChanges.MONEY | object | Operate user's cash |
currencyChanges.MONEY.method | Yes | 0 or 1 | 0 :Reduce1 : Increase |
currencyChanges.MONEY.number | Yes | number | The amount to add or subtract, must be a number and can only enter up to 2 decimal places |
comment | Optional values are | string | Operation note, such as (exchange iPhoneX |
Response value
Introduced user balance after change
Query referral points
> Request example
$ curl https://api.mokahr.com/api-platform/v2/user/recommend_account/search
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '{
"emails":["son@mokahr.com",""],
"phones":["12345678"],
"numbers":["123","234"]
}'
> Response example
{
"code": 0,
"codeType": 0,
"data": [
{
"deactivated": 0,
"email": "son@mokahr.com",
"name": "宋秋晓",
"phone": "",
"recommendMoney": 0.00,
"recommendScore": 45.00,
"version": "1.0"
}
],
"msg": "成功",
"success": true
}
HTTP request
POST https://api.mokahr.com/api-platform/v2/user/recommend_account/search
Request body(JSON)
Field | Whether it is necessary | Type | Description |
---|---|---|---|
emails | At least one of emails、phones and numbers should be passed in. | array | Array of email addresses of referral users to be queried |
phones | At least one of emails、phones and numbers should be passed in. | array | Array of phone number of referral users to be queried |
numbers | At least one of emails、phones and numbers should be passed in. | array | Array of employee number of referral users to be queried |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
name | string | Name |
string | ||
phone | string | Phone |
number | string | employee No. |
deactivated | integer | Whether be disabled Optional values are: 0:Available 1:Disabled |
recommendScore | number | Referral points |
recommendMoney | number | Referral cash |
Headhunter API
Headhunter management has been upgraded to headhunter contract management. Headhunter contract and headhunter company are two concepts, which can meet the scenario of "an enterprise signing multiple contracts with the same headhunter company". The specific changes are as follows:
1.New field [Headhunter Contract Name];
2.The same headhunter consultant can be under different headhunter contracts.
After the upgrade, the impact on the following version 1 headhunter API:
1.Version 1 headhunter API is only applicable to the scenario of "signing one contract with a headhunter company";
2."Add headhunter", "Update headhunter" API actually adds and modifies the headhunter contract. When adding a headhunter company, the system will default to assign the value of the [Headhunter Contract Name] field to the [Headhunter Company Name] field;
3."Get headhunter" and "Get headhunter consultant" API are actually queries the contracts and consultants under the headhunter contract;
4."Add headhunter" and "Update headhunter" API actually add and modify the consultants under the headhunter contract.
In particular, if multiple contracts are manually created for a particular headhunter company in the system, the "Get headhunter" API returns the first created contract under the headhunter company by default.
Add Headhunter
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headhunters/addCompany
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '
{
"activated": true,
"authorizedUserEmails": [
"fengxiang@mokahr.com"
],
"company": "20210917165310",
"contactEmail": "2021091716531012@mokahr.com",
"contactName": " v ",
"contactPhone": "13111111111",
"endDate": "2021-08-22T00:00:00+08:00",
"needPermission": true,
"notifiedUserEmails": [
"fengxiang@mokahr.com"
],
"operatorEmail": "fengxiang@mokahr.com",
"orgId": "bytedance003",
"protectTime": "10005",
"rate": "hahah",
"rpoEnabled": "true",
"rpoProtectTime": "90",
"startDate": "2021-08-20T00:00:00+08:00",
"telephone": "1111111",
"telephonePrefixLocal": "111",
"telephonePrefixInternational": "11"
}
'
> Response example
{
"code": 200,
"msg": "success",
"data": {
"id": 410020302
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/headhunters/addCompany
Request body(JSON)
Field | Required | Type | Description |
---|---|---|---|
activated | Yes | boolean | Headhunter agency status Optional values are: 0 :No 1 :Yes |
authorizedUserEmails | No | array[string] | Authorized user email |
company | Yes | string | Headhunter agency name |
contactEmail | No | string | Headhunter agency contact email |
contactName | No | string | Headhunter agency contact name |
contactPhone | No | string | Headhunter agency contact phone |
endDate | No | string | The end date of headhunter agency contract |
needPermission | No | boolean | whether the agency authorized headhunter? |
notifiedUserEmails | No | array[string] | Headhunter agency interface with |
operatorEmail | Yes | string | Operator email, must be Moka user |
rate | No | string | Headhunter agency fee rate |
headhunterEnabled | 否 | boolean | Whether the agency open headhunter |
protectTime | string | number | Headhunter agency protection (days) |
rpoEnabled | No | boolean | Whether the agency open RPO |
rpoProtectTime | No | number | Headhunter agency bulk import Candidate protection (RPO) |
startDate | No | string | The start date of headhunter agency contract |
telephone | No | string | Headhunter agency contact landline |
telephonePrefixLocal | No | string | Landline area code |
telephonePrefixInternational | No | string | Landline international code |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | Return code: non-200 means error |
msg | number | Error info |
data | object | |
data.id | number | Current data id |
Update Headhunter
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headhunters/updateCompany
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '
{
"activated": "true",
"authorizedUserEmails": [
"fengxiang@mokahr.com"
],
"company": "20210917165739\u66f4\u65b0",
"contactEmail": "20210917165739fengxiang11111@mokahr.com",
"contactName": "\t\r\n\\~!@#$%^&*()_+<>?",
"contactPhone": "13111111111",
"endDate": "2021-08-22T00:00:00+08:00",
"needPermission": true,
"notifiedUserEmails": [
"fengxiang@mokahr.com"
],
"operatorEmail": "fengxiang@mokahr.com",
"orgId": "bytedance003",
"protectTime": "10000",
"rate": "99",
"rpoEnabled": "true",
"rpoProtectTime": "0",
"startDate": "2021-08-31T00:00:00+08:00",
"telephone": "12229211",
"telephonePrefixLocal": "010",
"telephonePrefixInternational": "86",
"id": 410020302
}
'
> Response example
{
"code": 200,
"msg": "success",
"data": {
"id": 410020302
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/headhunters/updateCompany
Request body(JSON)
Field | Required | Type | Description |
---|---|---|---|
id | Yes | number | Headhunter agency id |
activated | Yes | boolean | Headhunter agency status Optional values are: 0 :No 1 :Yes |
authorizedUserEmails | No | array[string] | Authorized user email |
company | Yes | string | Headhunter agency name |
contactEmail | No | string | Headhunter agency contact email |
contactName | No | string | Headhunter agency contact name |
contactPhone | No | string | Headhunter agency contact phone |
endDate | No | string | The end date of headhunter agency contract |
needPermission | No | boolean | whether the agency authorized headhunter? |
notifiedUserEmails | No | array[string] | Headhunter agency interface with |
operatorEmail | Yes | string | Operator email, must be Moka user |
rate | No | string | Headhunter agency fee rate |
protectTime | string | number | Headhunter agency protection (days) |
rpoEnabled | No | boolean | Whether the agency open RPO |
rpoProtectTime | No | number | Headhunter agency bulk import Candidate protection (RPO) |
startDate | No | string | The start date of headhunter agency contract |
telephone | No | string | Headhunter agency contact landline |
telephonePrefixLocal | No | string | Landline area code |
telephonePrefixInternational | No | string | Landline international code |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | Response code:not200 represents Error |
msg | number | Error info |
data | object | |
data.id | number | Current data id |
Get Headhunter
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headhunters/getCompany?orgId=test
-u 'your-api-key:'
-X GET
> Response example
{
"code": 200,
"msg": "success",
"data": [{
"activated": true,
"authorizedUserEmails": [
"fengxiang@mokahr.com"
],
"company": "20210917165739Update",
"contactEmail": "20210917165739fengxiang11111@mokahr.com",
"contactName": "\t\r\n\\~!@#$%^&*()_+<>?",
"contactPhone": "13111111111",
"contacts": [],
"telephone": "12229211",
"endDate": "2021-08-22T00:00",
"id": 410020302,
"needPermission": true,
"notifiedUserEmails": [
"fengxiang@mokahr.com"
],
"protectTime": 10000,
"rate": "99",
"rpoEnabled": true,
"rpoProtectTime": 0,
"startDate": "2021-08-31T00:00"
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/headhunters/getCompany
Request Query (JSON)
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | Current company orgld |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | Response code:not200 represents Error |
msg | number | Error info |
data | array(object) | |
data[].id | boolean | Headhunter agency id |
data[].activated | boolean | Headhunter agency status Optional values are: 0 :No1 :Yes |
data[].authorizedUserEmails | array[string] | Authorized user email |
data[].company | string | Headhunter agency name |
data[].contactEmail | string | Headhunter agency contact email |
data[].contactName | string | Headhunter agency contact name |
data[].contactPhone | string | Headhunter agency contact phone |
data[].contacts | array | Headhunter consultant -todo |
data[].endDate | string | The end date of headhunter agency contract |
data[].needPermission | boolean | whether the agency authorized headhunter? |
data[].notifiedUserEmails | array[string] | Headhunter agency interface with |
data[].operatorEmail | string | Operator email, must be Moka user |
data[].rate | string | Headhunter agency fee rate |
data[].protectTime | number | Headhunter agency protection (days) |
data[].rpoEnabled | boolean | Whether the agency open RPO |
data[].rpoProtectTime | number | Headhunter agency bulk import Candidate protection (RPO) |
data[].startDate | string | The start date of headhunter agency contract |
data[].telephone | string | Headhunter agency contact landline |
data[].telephonePrefixLocal | string | Landline area code |
data[].telephonePrefixInternational | string | Landline international code |
Get Headhunter consultant
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headhunters/getContacts?orgId=test&headhunterCompanyId=1
-u 'your-api-key:'
-X GET
> Response example
{
"code": 200,
"msg": "success",
"data": [{
"activated": 1,
"active": false,
"headHunterId": 410022372,
"headHunterName": "20210917163223",
"headHunterPhone": "13111111111",
"headHunterTelephone": "11111111",
"telephonePrefixLocal": "010",
"telephonePrefixInternational": "89",
"headhunterEmail": "1631867543@qq.com"
}]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/headhunters/getContacts
Request Query (JSON)
Field | Required | Type | Description |
---|---|---|---|
orgId | Yes | string | Current company org id |
headhunterCompanyId | Yes | string | Headhunter agency id |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | Response code:not200 represents Error |
msg | number | Error info |
data | array(object) | |
data[].activated | number | Headhunter consultant status Optional values are: 0 :No 1 :Yes |
data[].active | boolean | Headhunting consultant status: activated or not |
data[].headHunterId | number | Headhunter consultant id |
data[].headHunterName | string | Headhunter consultant name |
data[].headHunterPhone | string | Headhunter consultant phone |
data[].headHunterTelephone | string | Headhunter consultant landline |
data[].telephonePrefixLocal | string | Landline area code |
data[].telephonePrefixInternational | string | Landline international code |
data[].headhunterEmail | string | Headhunter consultant email |
Add Headhunter consultant
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headhunters/addContacts
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '
{
"activated": 1,
"headHunterName": "202101701371",
"headHunterPhone": "13111111311",
"telephonePrefixInternational": "89",
"telephonePrefixLocal": "010",
"headHunterTelephone": "11111111",
"headhunterCompanyId": 410020302,
"headhunterEmail": "16318917@qq.com",
"operatorEmail": "fengxiang@mokahr.com",
"orgId": "bytedance003"
}
'
> Response example
{
"code": 200,
"msg": "success",
"data": {
"headHunterId":3344555
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/headhunters/addContacts
Request body(JSON)
Field | Required | Type | Description |
---|---|---|---|
activated | Yes | number | Whether to enable Optional values are: 0 :No 1 :Yes |
headHunterName | Yes | string | Headhunter consultant name |
headHunterPhone | No | string | Headhunter consultant phone |
headHunterTelephone | No | string | Headhunter consultant landline |
telephonePrefixLocal | No | string | Landline area code |
telephonePrefixInternational | No | string | Landline international code |
headhunterCompanyId | Yes | number | Headhunter agency id |
headhunterEmail | Yes | string | Headhunter consultant email |
operatorEmail | Yes | string | Operator email, must be Moka user |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | Return code: non-200 means error |
msg | number | Error info |
data | object | |
data.headHunterId | number | Headhunter consultant id |
Update headhunter consultant
> Request example
$ curl https://api.mokahr.com/api-platform/v1/headhunters/updateContacts
-u 'your-api-key:'
-X POST
-H 'content-type: application/json'
-d '
{
"activated": "1",
"headHunterName": " d ",
"headHunterPhone": "13111111311",
"telephonePrefixInternational": "88",
"telephonePrefixLocal": "0352",
"headHunterTelephone": "222222",
"headhunterCompanyId": 410020302,
"headHunterId": 410024263,
"headhunterEmail": "fengxiang@mokahr.com",
"operatorEmail": "fengxiang@mokahr.com",
"orgId": "bytedance003"
}
'
> Response example
{
"code": 200,
"msg": "success",
"data": {
"headHunterId": 33444
}
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/headhunters/addContacts
Request body(JSON)
Field | Required | Type | Description |
---|---|---|---|
headerHunterId | Yes | number | Current data id |
activated | Yes | number | Whether to enable Optional values are: 0 :No 1 :Yes |
headHunterName | Yes | string | Headhunter consultant name |
headHunterPhone | No | string | Headhunter consultant phone |
headHunterTelephone | No | string | Headhunter consultant landline |
telephonePrefixLocal | No | string | Landline area code |
telephonePrefixInternational | No | string | Landline international code |
headhunterCompanyId | Yes | number | Headhunter agency id |
headhunterEmail | Yes | string | Headhunter consultant email |
operatorEmail | Yes | string | Operator email, must be Moka user |
Response
Response body in JSON
Field | Type | Description |
---|---|---|
code | number | Return code: non-200 means error |
msg | number | Error info |
data | object | |
data.headHunterId | number | Headhunter consultant id |
BI report API
Get a certain report result data
> Request example
curl --location --request POST 'https://api.mokahr.com/api-platform/v1/getReportData' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic dGVzdDo=' \
--data-raw '{
"reportId": 12318
}'
> Response example
{
"code": 200,
"data": {
"headers": [{
"dataIndex": "c_1",
"title": "Gender",
"type": "HEADER"
}, {
"dataIndex": "c_2",
"title": "Ethnicity",
"type": "HEADER"
}],
"rows": [{
"c_1": "Male性",
"c_2": "汉族"
}],
"size": 1
},
"msg": "Success"
}
HTTP request
POST https://api.mokahr.com/api-platform/v1/getReportData
Request body(JSON)
Field | Required | Type | Description |
---|---|---|---|
reportId | Yes | integer | Report id |
Response
The returned JSON data of the body is as follows. The above returned data has a total of one row and two columns. The first column is gender, and the second column is ethnicity:
Field | Type | Description |
---|---|---|
code | number | Return code: non-200 means error |
msg | number | Error info |
data | object | |
data.headers | object | Header |
data.headers.dataIndex | integer | The mapping relationship between header and result |
data.headers.title | string | Header name |
data.headers.type | string | Header type, only possible as HEADER or DATA |
data.headers.children | object | The element type is the same as data.headers (representing multi-level headers) |
data.rows | array | Result data |
data.rows.c_$ | string | Result data index key:value format |
JD template list API
Get JD template list
> Request example
curl --location 'https://api.mokahr.com/api-platform/v1/job/job_desc_template/list' \
--header 'Accept: */*' \
--header 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/json' \
--data '{
"hireMode":1
}'
> Response example
{
"code": 0,
"codeType": 0,
"data": {
"jobDescTemplateDTOList": [
{
"id": 100000908,
"jobDescription": "<p>一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十.一二三四五六七八九十导入902-描述</p>",
"jobTitle": "导入902-名称1",
"name": "导入9021",
"version": "1.0"
}
],
"total": 1004,
"version": "1.0"
},
"msg": "成功",
"success": true
}
HTTP request
`POST https://api.mokahr.com/api-platform/v1/job/job_desc_template/list
Request body(JSON)
Field | Required | Type | Description |
---|---|---|---|
hireMode | Yes | number | Recruitment mode (social recruitment 1, school recruitment 2) |
pageSize | No | number | Number of entries per page for pagination, default 100 |
nextCursor | No | number | Pagination cursor, no need to pass it for the first query.The value of this attribute is taken from the nextCursor value returned by the response parameter on the last call. |
Response body(JSON)
Field | Type | Description |
---|---|---|
total | integer | Total JDs |
hasMore | boolean | Indicates whether there is a return value on the next page. |
nextCursor | string | Pagination cursor |
jds[] | array | JD list |
jds[].id | integer | JD id |
jds[].title | string | JD title |
jds[].jobTitle | string | Job name |
jds[].jobDescription | string | Job description |
Administrative area code
Administrative area code
> Administrative area code
{
"110000": "北京City",
"110101": "东城District",
"110102": "西城District",
"110105": "朝阳District",
"110106": "丰台District",
"110107": "石景山District",
"110108": "海淀District",
"110109": "门头沟District",
"110111": "房山District",
"110112": "通州District",
"110113": "顺义District",
"110114": "昌平District",
"110115": "大兴District",
"110116": "怀柔District",
"110117": "平谷District",
"110118": "密云District",
"110119": "延庆District",
"120000": "天津City",
"120101": "和平District",
"120102": "河东District",
"120103": "河西District",
"120104": "南开District",
"120105": "河北District",
"120106": "红桥District",
"120110": "东丽District",
"120111": "西青District",
"120112": "津南District",
"120113": "北辰District",
"120114": "武清District",
"120115": "宝坻District",
"120116": "滨海新District",
"120117": "宁河District",
"120118": "静海District",
"120119": "蓟州District",
"130000": "河北",
"130100": "石家庄City",
"130102": "长安District",
"130104": "桥西District",
"130105": "新华District",
"130107": "井陉矿District",
"130108": "裕华District",
"130109": "藁城District",
"130110": "鹿泉District",
"130111": "栾城District",
"130121": "井陉县",
"130123": "正定县",
"130125": "行唐县",
"130126": "灵寿县",
"130127": "高邑县",
"130128": "深泽县",
"130129": "赞皇县",
"130130": "None极县",
"130131": "平山县",
"130132": "元氏县",
"130133": "赵县",
"130171": "石家庄高新技术产业开发District",
"130172": "石家庄循环化工园District",
"130181": "辛集City",
"130183": "晋州City",
"130184": "新乐City",
"130200": "唐山City",
"130202": "路南District",
"130203": "路北District",
"130204": "古冶District",
"130205": "开平District",
"130207": "丰南District",
"130208": "丰润District",
"130209": "曹妃甸District",
"130223": "滦县(旧)",
"130224": "滦南县",
"130225": "乐亭县",
"130227": "迁西县",
"130229": "玉田县",
"130271": "河北唐山芦台经济开发District",
"130272": "唐山City汉沽管理District",
"130273": "唐山高新技术产业开发District",
"130274": "河北唐山海港经济开发District",
"130281": "遵化City",
"130283": "迁安City",
"130284": "滦州City",
"130300": "秦皇岛City",
"130302": "海港District",
"130303": "山海关District",
"130304": "北戴河District",
"130306": "抚宁District",
"130321": "青龙满族自治县",
"130322": "昌黎县",
"130324": "卢龙县",
"130371": "秦皇岛City经济技术开发District",
"130372": "北戴河新District",
"130400": "邯郸City",
"130402": "邯山District",
"130403": "丛台District",
"130404": "复兴District",
"130406": "峰峰矿District",
"130407": "肥乡District",
"130408": "永年District",
"130423": "临漳县",
"130424": "成安县",
"130425": "大名县",
"130426": "涉县",
"130427": "磁县",
"130430": "邱县",
"130431": "鸡泽县",
"130432": "广平县",
"130433": "馆陶县",
"130434": "魏县",
"130435": "曲周县",
"130471": "邯郸经济技术开发District",
"130473": "邯郸冀南新District",
"130481": "武安City",
"130500": "邢台City",
"130502": "襄都District",
"130503": "信都District",
"130505": "任泽District",
"130506": "南和District",
"130521": "邢台县(旧)",
"130522": "临城县",
"130523": "内丘县",
"130524": "柏乡县",
"130525": "隆尧县",
"130526": "任县(旧)",
"130527": "南和县(旧)",
"130528": "宁晋县",
"130529": "巨鹿县",
"130530": "新河县",
"130531": "广宗县",
"130532": "平乡县",
"130533": "威县",
"130534": "清河县",
"130535": "临西县",
"130571": "河北邢台经济开发District",
"130581": "南宫City",
"130582": "沙河City",
"130600": "保定City",
"130602": "竞秀District",
"130604": "南CityDistrict(旧)",
"130606": "莲池District",
"130607": "满城District",
"130608": "清苑District",
"130609": "徐水District",
"130623": "涞水县",
"130624": "阜平县",
"130626": "定兴县",
"130627": "唐县",
"130628": "高阳县",
"130629": "容城县",
"130630": "涞源县",
"130631": "望都县",
"130632": "安新县",
"130633": "易县",
"130634": "曲阳县",
"130635": "蠡县",
"130636": "顺平县",
"130637": "博野县",
"130638": "雄县",
"130671": "保定高新技术产业开发District",
"130672": "保定白沟新城",
"130681": "涿州City",
"130682": "定州City",
"130683": "安国City",
"130684": "高碑店City",
"130700": "张家口City",
"130702": "桥东District",
"130703": "桥西District",
"130705": "宣化District",
"130706": "下花园District",
"130708": "万全District",
"130709": "崇礼District",
"130722": "张北县",
"130723": "康保县",
"130724": "沽源县",
"130725": "尚义县",
"130726": "蔚县",
"130727": "阳原县",
"130728": "怀安县",
"130730": "怀来县",
"130731": "涿鹿县",
"130732": "赤城县",
"130771": "张家口经济开发District",
"130772": "张家口City察北管理District",
"130773": "张家口City塞北管理District",
"130800": "承德City",
"130802": "双桥District",
"130803": "双滦District",
"130804": "鹰手营子矿District",
"130821": "承德县",
"130822": "兴隆县",
"130823": "平泉县(旧)",
"130824": "滦平县",
"130825": "隆化县",
"130826": "丰宁满族自治县",
"130827": "宽城满族自治县",
"130828": "围场满族蒙古族自治县",
"130871": "承德高新技术产业开发District",
"130881": "平泉City",
"130900": "沧州City",
"130902": "新华District",
"130903": "运河District",
"130921": "沧县",
"130922": "青县",
"130923": "东光县",
"130924": "海兴县",
"130925": "盐山县",
"130926": "肃宁县",
"130927": "南皮县",
"130928": "吴桥县",
"130929": "献县",
"130930": "孟村回族自治县",
"130971": "河北沧州经济开发District",
"130972": "沧州高新技术产业开发District",
"130973": "沧州渤海新District",
"130981": "泊头City",
"130982": "任丘City",
"130983": "黄骅City",
"130984": "河间City",
"131000": "廊坊City",
"131002": "安次District",
"131003": "广阳District",
"131022": "固安县",
"131023": "永清县",
"131024": "香河县",
"131025": "大城县",
"131026": "文安县",
"131028": "大厂回族自治县",
"131071": "廊坊经济技术开发District",
"131081": "霸州City",
"131082": "三河City",
"131100": "衡水City",
"131102": "桃城District",
"131103": "冀州District",
"131121": "枣强县",
"131122": "武邑县",
"131123": "武强县",
"131124": "饶阳县",
"131125": "安平县",
"131126": "故城县",
"131127": "景县",
"131128": "阜城县",
"131171": "河北衡水高新技术产业开发District",
"131172": "衡水滨湖新District",
"131182": "深州City",
"140000": "山西",
"140100": "太原City",
"140105": "小店District",
"140106": "迎泽District",
"140107": "杏花岭District",
"140108": "尖草坪District",
"140109": "万柏林District",
"140110": "晋源District",
"140121": "清徐县",
"140122": "阳曲县",
"140123": "娄烦县",
"140171": "山西转型综合改革示范District",
"140181": "古交City",
"140200": "大同City",
"140202": "城District(旧)",
"140203": "矿District(旧)",
"140211": "南郊District(旧)",
"140212": "新荣District",
"140213": "平城District",
"140214": "云冈District",
"140215": "云州District",
"140221": "阳高县",
"140222": "天镇县",
"140223": "广灵县",
"140224": "灵丘县",
"140225": "浑源县",
"140226": "左云县",
"140227": "大同县(旧)",
"140271": "山西大同经济开发District",
"140300": "阳泉City",
"140302": "城District",
"140303": "矿District",
"140311": "郊District",
"140321": "平定县",
"140322": "盂县",
"140400": "长治City",
"140402": "城District(旧)",
"140403": "潞州District",
"140404": "上党District",
"140405": "屯留District",
"140406": "潞城District",
"140411": "郊District(旧)",
"140412": "潞州District(旧)",
"140421": "长治县(旧)",
"140423": "襄垣县",
"140424": "屯留县(旧)",
"140425": "平顺县",
"140426": "黎城县",
"140427": "壶关县",
"140428": "长子县",
"140429": "武乡县",
"140430": "沁县",
"140431": "沁源县",
"140471": "山西长治高新技术产业园District",
"140481": "潞City(旧)",
"140500": "晋City",
"140502": "城District",
"140521": "沁水县",
"140522": "阳城县",
"140524": "陵川县",
"140525": "泽州县",
"140581": "高平City",
"140600": "朔州City",
"140602": "朔城District",
"140603": "平鲁District",
"140621": "山阴县",
"140622": "应县",
"140623": "右玉县",
"140624": "怀仁县(旧)",
"140671": "山西朔州经济开发District",
"140681": "怀仁City",
"140700": "晋中City",
"140702": "榆次District",
"140703": "太谷District",
"140721": "榆社县",
"140722": "左权县",
"140723": "和顺县",
"140724": "昔阳县",
"140725": "寿阳县",
"140726": "太谷县(旧)",
"140727": "祁县",
"140728": "平遥县",
"140729": "灵石县",
"140781": "介休City",
"140800": "运City",
"140802": "盐湖District",
"140821": "临猗县",
"140822": "万荣县",
"140823": "闻喜县",
"140824": "稷山县",
"140825": "新绛县",
"140826": "绛县",
"140827": "垣曲县",
"140828": "夏县",
"140829": "平陆县",
"140830": "芮城县",
"140881": "永济City",
"140882": "河津City",
"140900": "忻州City",
"140902": "忻府District",
"140921": "定襄县",
"140922": "五台县",
"140923": "代县",
"140924": "繁峙县",
"140925": "宁武县",
"140926": "静乐县",
"140927": "神池县",
"140928": "五寨县",
"140929": "岢岚县",
"140930": "河曲县",
"140931": "保德县",
"140932": "偏关县",
"140971": "五台山风景名胜District",
"140981": "原平City",
"141000": "临汾City",
"141002": "尧都District",
"141021": "曲沃县",
"141022": "翼城县",
"141023": "襄汾县",
"141024": "洪洞县",
"141025": "古县",
"141026": "安泽县",
"141027": "浮山县",
"141028": "吉县",
"141029": "乡宁县",
"141030": "大宁县",
"141031": "隰县",
"141032": "永和县",
"141033": "蒲县",
"141034": "汾西县",
"141081": "侯马City",
"141082": "霍州City",
"141100": "吕梁City",
"141102": "离石District",
"141121": "文水县",
"141122": "交城县",
"141123": "兴县",
"141124": "临县",
"141125": "柳林县",
"141126": "石楼县",
"141127": "岚县",
"141128": "方山县",
"141129": "中阳县",
"141130": "交口县",
"141181": "孝义City",
"141182": "汾阳City",
"150000": "内蒙古",
"150100": "呼和浩特City",
"150102": "新城District",
"150103": "回民District",
"150104": "玉泉District",
"150105": "赛罕District",
"150121": "土默特左旗",
"150122": "托克托县",
"150123": "和林格尔县",
"150124": "清水河县",
"150125": "武川县",
"150172": "呼和浩特经济技术开发District",
"150200": "包头City",
"150202": "东河District",
"150203": "昆都仑District",
"150204": "青山District",
"150205": "石拐District",
"150206": "白云鄂博矿District",
"150207": "九原District",
"150221": "土默特右旗",
"150222": "固阳县",
"150223": "达尔罕茂明安联合旗",
"150271": "包头稀土高新技术产业开发District",
"150300": "乌海City",
"150302": "海勃湾District",
"150303": "海南District",
"150304": "乌达District",
"150400": "赤峰City",
"150402": "红山District",
"150403": "元宝山District",
"150404": "松山District",
"150421": "阿鲁科尔沁旗",
"150422": "巴林左旗",
"150423": "巴林右旗",
"150424": "林西县",
"150425": "克什克腾旗",
"150426": "翁牛特旗",
"150428": "喀喇沁旗",
"150429": "宁城县",
"150430": "敖汉旗",
"150500": "通辽City",
"150502": "科尔沁District",
"150521": "科尔沁左翼中旗",
"150522": "科尔沁左翼后旗",
"150523": "开鲁县",
"150524": "库伦旗",
"150525": "奈曼旗",
"150526": "扎鲁特旗",
"150571": "通辽经济技术开发District",
"150581": "霍林郭勒City",
"150600": "鄂尔多斯City",
"150602": "东胜District",
"150603": "康巴什District",
"150621": "达拉特旗",
"150622": "准格尔旗",
"150623": "鄂托克前旗",
"150624": "鄂托克旗",
"150625": "杭锦旗",
"150626": "乌审旗",
"150627": "伊金霍洛旗",
"150700": "呼伦贝尔City",
"150702": "海拉尔District",
"150703": "扎赉诺尔District",
"150721": "阿荣旗",
"150722": "莫力达瓦达斡尔族自治旗",
"150723": "鄂伦春自治旗",
"150724": "鄂温克族自治旗",
"150725": "陈巴尔虎旗",
"150726": "新巴尔虎左旗",
"150727": "新巴尔虎右旗",
"150781": "满洲里City",
"150782": "牙克石City",
"150783": "扎兰屯City",
"150784": "额尔古纳City",
"150785": "根河City",
"150800": "巴彦淖尔City",
"150802": "临河District",
"150821": "五原县",
"150822": "磴口县",
"150823": "乌拉特前旗",
"150824": "乌拉特中旗",
"150825": "乌拉特后旗",
"150826": "杭锦后旗",
"150900": "乌兰察布City",
"150902": "集宁District",
"150921": "卓资县",
"150922": "化德县",
"150923": "商都县",
"150924": "兴和县",
"150925": "凉城县",
"150926": "察哈尔右翼前旗",
"150927": "察哈尔右翼中旗",
"150928": "察哈尔右翼后旗",
"150929": "四子王旗",
"150981": "丰镇City",
"152200": "兴安盟",
"152201": "乌兰浩特City",
"152202": "阿尔山City",
"152221": "科尔沁右翼前旗",
"152222": "科尔沁右翼中旗",
"152223": "扎赉特旗",
"152224": "突泉县",
"152500": "锡林郭勒盟",
"152501": "二连浩特City",
"152502": "锡林浩特City",
"152522": "阿巴嘎旗",
"152523": "苏尼特左旗",
"152524": "苏尼特右旗",
"152525": "东乌珠穆沁旗",
"152526": "西乌珠穆沁旗",
"152527": "太仆寺旗",
"152528": "镶黄旗",
"152529": "正镶白旗",
"152530": "正蓝旗",
"152531": "多伦县",
"152571": "乌拉盖管委会",
"152900": "阿拉善盟",
"152921": "阿拉善左旗",
"152922": "阿拉善右旗",
"152923": "额济纳旗",
"152971": "内蒙古阿拉善高新技术产业开发District",
"210000": "辽宁",
"210100": "沈阳City",
"210102": "和平District",
"210103": "沈河District",
"210104": "大东District",
"210105": "皇姑District",
"210106": "铁西District",
"210111": "苏家屯District",
"210112": "浑南District",
"210113": "沈北新District",
"210114": "于洪District",
"210115": "辽中District",
"210123": "康平县",
"210124": "法库县",
"210181": "新民City",
"210200": "大连City",
"210202": "中山District",
"210203": "西岗District",
"210204": "沙河口District",
"210211": "甘井子District",
"210212": "旅顺口District",
"210213": "金州District",
"210214": "普兰店District",
"210224": "长海县",
"210281": "瓦房店City",
"210283": "庄河City",
"210300": "鞍山City",
"210302": "铁东District",
"210303": "铁西District",
"210304": "立山District",
"210311": "千山District",
"210321": "台安县",
"210323": "岫岩满族自治县",
"210381": "海City",
"210400": "抚顺City",
"210402": "新抚District",
"210403": "东洲District",
"210404": "望花District",
"210411": "顺城District",
"210421": "抚顺县",
"210422": "新宾满族自治县",
"210423": "清原满族自治县",
"210500": "本溪City",
"210502": "平山District",
"210503": "溪湖District",
"210504": "明山District",
"210505": "南芬District",
"210521": "本溪满族自治县",
"210522": "桓仁满族自治县",
"210600": "丹东City",
"210602": "元宝District",
"210603": "振兴District",
"210604": "振安District",
"210624": "宽甸满族自治县",
"210681": "东港City",
"210682": "凤City",
"210700": "锦州City",
"210702": "古塔District",
"210703": "凌河District",
"210711": "太和District",
"210726": "黑山县",
"210727": "义县",
"210781": "凌海City",
"210782": "北镇City",
"210800": "营口City",
"210802": "站前District",
"210803": "西CityDistrict",
"210804": "鲅鱼圈District",
"210811": "老边District",
"210881": "盖州City",
"210882": "大石桥City",
"210900": "阜新City",
"210902": "海州District",
"210903": "新邱District",
"210904": "太平District",
"210905": "清河门District",
"210911": "细河District",
"210921": "阜新蒙古族自治县",
"210922": "彰武县",
"211000": "辽阳City",
"211002": "白塔District",
"211003": "文圣District",
"211004": "宏伟District",
"211005": "弓长岭District",
"211011": "太子河District",
"211021": "辽阳县",
"211081": "灯塔City",
"211100": "盘锦City",
"211102": "双台子District",
"211103": "兴隆台District",
"211104": "大洼District",
"211122": "盘山县",
"211200": "铁岭City",
"211202": "银州District",
"211204": "清河District",
"211221": "铁岭县",
"211223": "西丰县",
"211224": "昌图县",
"211281": "调兵山City",
"211282": "开原City",
"211300": "朝阳City",
"211302": "双塔District",
"211303": "龙城District",
"211321": "朝阳县",
"211322": "建平县",
"211324": "喀喇沁左翼蒙古族自治县",
"211381": "北票City",
"211382": "凌源City",
"211400": "葫芦岛City",
"211402": "连山District",
"211403": "龙港District",
"211404": "南票District",
"211421": "绥中县",
"211422": "建昌县",
"211481": "兴City",
"220000": "吉林",
"220100": "长春City",
"220102": "南关District",
"220103": "宽城District",
"220104": "朝阳District",
"220105": "二道District",
"220106": "绿园District",
"220112": "双阳District",
"220113": "九台District",
"220122": "农安县",
"220171": "长春经济技术开发District",
"220172": "长春净月高新技术产业开发District",
"220173": "长春高新技术产业开发District",
"220174": "长春汽车经济技术开发District",
"220182": "榆树City",
"220183": "德惠City",
"220184": "公主岭City",
"220200": "吉林City",
"220202": "昌邑District",
"220203": "龙潭District",
"220204": "船营District",
"220211": "丰满District",
"220221": "永吉县",
"220271": "吉林经济开发District",
"220272": "吉林高新技术产业开发District",
"220273": "吉林中国新加坡食品District",
"220281": "蛟河City",
"220282": "桦甸City",
"220283": "舒兰City",
"220284": "磐石City",
"220300": "四平City",
"220302": "铁西District",
"220303": "铁东District",
"220322": "梨树县",
"220323": "伊通满族自治县",
"220381": "公主岭City(旧)",
"220382": "双辽City",
"220400": "辽源City",
"220402": "龙山District",
"220403": "西安District",
"220421": "东丰县",
"220422": "东辽县",
"220500": "通化City",
"220502": "东昌District",
"220503": "二道江District",
"220521": "通化县",
"220523": "辉南县",
"220524": "柳河县",
"220581": "梅河口City",
"220582": "集安City",
"220600": "白山City",
"220602": "浑江District",
"220605": "江源District",
"220621": "抚松县",
"220622": "靖宇县",
"220623": "长白朝鲜族自治县",
"220681": "临江City",
"220700": "松原City",
"220702": "宁江District",
"220721": "前郭尔罗斯蒙古族自治县",
"220722": "长岭县",
"220723": "乾安县",
"220771": "吉林松原经济开发District",
"220781": "扶余City",
"220800": "白City",
"220802": "洮北District",
"220821": "镇赉县",
"220822": "通榆县",
"220871": "吉林白城经济开发District",
"220881": "洮南City",
"220882": "大安City",
"222400": "延边朝鲜族自治州",
"222401": "延吉City",
"222402": "图们City",
"222403": "敦化City",
"222404": "珲春City",
"222405": "龙井City",
"222406": "和龙City",
"222424": "汪清县",
"222426": "安图县",
"230000": "黑龙江",
"230100": "哈尔滨City",
"230102": "道里District",
"230103": "南岗District",
"230104": "道外District",
"230108": "平房District",
"230109": "松北District",
"230110": "香坊District",
"230111": "呼兰District",
"230112": "阿城District",
"230113": "双城District",
"230123": "依兰县",
"230124": "方正县",
"230125": "宾县",
"230126": "巴彦县",
"230127": "木兰县",
"230128": "通河县",
"230129": "延寿县",
"230183": "尚志City",
"230184": "五常City",
"230200": "齐齐哈尔City",
"230202": "龙沙District",
"230203": "建华District",
"230204": "铁锋District",
"230205": "昂昂溪District",
"230206": "富拉尔基District",
"230207": "碾子山District",
"230208": "梅里斯达斡尔族District",
"230221": "龙江县",
"230223": "依安县",
"230224": "泰来县",
"230225": "甘南县",
"230227": "富裕县",
"230229": "克山县",
"230230": "克东县",
"230231": "拜泉县",
"230281": "讷河City",
"230300": "鸡西City",
"230302": "鸡冠District",
"230303": "恒山District",
"230304": "滴道District",
"230305": "梨树District",
"230306": "城子河District",
"230307": "麻山District",
"230321": "鸡东县",
"230381": "虎林City",
"230382": "密山City",
"230400": "鹤岗City",
"230402": "向阳District",
"230403": "工农District",
"230404": "南山District",
"230405": "兴安District",
"230406": "东山District",
"230407": "兴山District",
"230421": "萝北县",
"230422": "绥滨县",
"230500": "双鸭山City",
"230502": "尖山District",
"230503": "岭东District",
"230505": "四方台District",
"230506": "宝山District",
"230521": "集贤县",
"230522": "友谊县",
"230523": "宝清县",
"230524": "饶河县",
"230600": "大庆City",
"230602": "萨尔图District",
"230603": "龙凤District",
"230604": "让胡路District",
"230605": "红岗District",
"230606": "大同District",
"230621": "肇州县",
"230622": "肇源县",
"230623": "林甸县",
"230624": "杜尔伯特蒙古族自治县",
"230671": "大庆高新技术产业开发District",
"230700": "伊春City",
"230702": "伊春District(旧)",
"230703": "南岔District(旧)",
"230704": "友好District(旧)",
"230705": "西林District(旧)",
"230706": "翠峦District(旧)",
"230707": "新青District(旧)",
"230708": "美溪District(旧)",
"230709": "金山屯District(旧)",
"230710": "五营District(旧)",
"230711": "乌马河District(旧)",
"230712": "汤旺河District(旧)",
"230713": "带岭District(旧)",
"230714": "乌伊岭District(旧)",
"230715": "红星District(旧)",
"230716": "上甘岭District(旧)",
"230717": "伊美District",
"230718": "乌翠District",
"230719": "友好District",
"230722": "嘉荫县",
"230723": "汤旺县",
"230724": "丰林县",
"230725": "大箐山县",
"230726": "南岔县",
"230751": "金林District",
"230781": "铁力City",
"230800": "佳木斯City",
"230803": "向阳District",
"230804": "前进District",
"230805": "东风District",
"230811": "郊District",
"230822": "桦南县",
"230826": "桦川县",
"230828": "汤原县",
"230881": "同江City",
"230882": "富锦City",
"230883": "抚远City",
"230900": "七台河City",
"230902": "新兴District",
"230903": "桃山District",
"230904": "茄子河District",
"230921": "勃利县",
"231000": "牡丹江City",
"231002": "东安District",
"231003": "阳明District",
"231004": "爱民District",
"231005": "西安District",
"231025": "林口县",
"231071": "牡丹江经济技术开发District",
"231081": "绥芬河City",
"231083": "海林City",
"231084": "宁安City",
"231085": "穆棱City",
"231086": "东宁City",
"231100": "黑河City",
"231102": "爱辉District",
"231121": "嫩江县(旧)",
"231123": "逊克县",
"231124": "孙吴县",
"231181": "北安City",
"231182": "五大连池City",
"231183": "嫩江City",
"231200": "绥化City",
"231202": "北林District",
"231221": "望奎县",
"231222": "兰西县",
"231223": "青冈县",
"231224": "庆安县",
"231225": "明水县",
"231226": "绥棱县",
"231281": "安达City",
"231282": "肇东City",
"231283": "海伦City",
"232700": "大兴安岭Region",
"232701": "漠河City",
"232721": "呼玛县",
"232722": "塔河县",
"232723": "漠河县(旧)",
"232761": "加格达奇District",
"232762": "松岭District",
"232763": "新林District",
"232764": "呼中District",
"310000": "上海City",
"310101": "黄浦District",
"310104": "徐汇District",
"310105": "长宁District",
"310106": "静安District",
"310107": "普陀District",
"310109": "虹口District",
"310110": "杨浦District",
"310112": "闵行District",
"310113": "宝山District",
"310114": "嘉定District",
"310115": "浦东新District",
"310116": "金山District",
"310117": "松江District",
"310118": "青浦District",
"310120": "奉贤District",
"310151": "崇明District",
"320000": "江苏",
"320100": "南京City",
"320102": "玄武District",
"320104": "秦淮District",
"320105": "建邺District",
"320106": "鼓楼District",
"320111": "浦口District",
"320113": "栖霞District",
"320114": "雨花台District",
"320115": "江宁District",
"320116": "六合District",
"320117": "溧水District",
"320118": "高淳District",
"320200": "None锡City",
"320205": "锡山District",
"320206": "惠山District",
"320211": "滨湖District",
"320213": "梁溪District",
"320214": "新吴District",
"320281": "江阴City",
"320282": "宜兴City",
"320300": "徐州City",
"320302": "鼓楼District",
"320303": "云龙District",
"320305": "贾汪District",
"320311": "泉山District",
"320312": "铜山District",
"320321": "丰县",
"320322": "沛县",
"320324": "睢宁县",
"320371": "徐州经济技术开发District",
"320381": "新沂City",
"320382": "邳州City",
"320400": "常州City",
"320402": "天宁District",
"320404": "钟楼District",
"320411": "新北District",
"320412": "武进District",
"320413": "金坛District",
"320481": "溧阳City",
"320500": "苏州City",
"320505": "虎丘District",
"320506": "吴中District",
"320507": "相城District",
"320508": "姑苏District",
"320509": "吴江District",
"320571": "苏州工业园District",
"320581": "常熟City",
"320582": "张家港City",
"320583": "昆山City",
"320585": "太仓City",
"320600": "南通City",
"320602": "崇川District(旧)",
"320611": "港闸District(旧)",
"320612": "通州District",
"320613": "崇川District",
"320614": "海门District",
"320621": "海安县(旧)",
"320623": ", such as东县",
"320671": "南通经济技术开发District",
"320681": "启东City",
"320682": ", such as皋City",
"320684": "海门City(旧)",
"320685": "海安City",
"320700": "连云港City",
"320703": "连云District",
"320706": "海州District",
"320707": "赣榆District",
"320722": "东海县",
"320723": "灌云县",
"320724": "灌南县",
"320771": "连云港经济技术开发District",
"320772": "连云港高新技术产业开发District",
"320800": "淮安City",
"320803": "淮安District",
"320804": "淮阴District",
"320812": "清江浦District",
"320813": "洪泽District",
"320826": "涟水县",
"320830": "盱眙县",
"320831": "金湖县",
"320871": "淮安经济技术开发District",
"320900": "盐City",
"320902": "亭湖District",
"320903": "盐都District",
"320904": "大丰District",
"320921": "响水县",
"320922": "滨海县",
"320923": "阜宁县",
"320924": "射阳县",
"320925": "建湖县",
"320971": "盐城经济技术开发District",
"320981": "东台City",
"321000": "扬州City",
"321002": "广陵District",
"321003": "邗江District",
"321012": "江都District",
"321023": "宝应县",
"321071": "扬州经济技术开发District",
"321081": "仪征City",
"321084": "高邮City",
"321100": "镇江City",
"321102": "京口District",
"321111": "润州District",
"321112": "丹徒District",
"321171": "镇江新District",
"321181": "丹阳City",
"321182": "扬中City",
"321183": "句容City",
"321200": "泰州City",
"321202": "海陵District",
"321203": "高港District",
"321204": "姜堰District",
"321271": "泰州医药高新技术产业开发District",
"321281": "兴化City",
"321282": "靖江City",
"321283": "泰兴City",
"321300": "宿迁City",
"321302": "宿城District",
"321311": "宿豫District",
"321322": "沭阳县",
"321323": "泗阳县",
"321324": "泗洪县",
"321371": "宿迁经济技术开发District",
"330000": "浙江",
"330100": "杭州City",
"330102": "上城District",
"330103": "下城District(旧)",
"330104": "江干District(旧)",
"330105": "拱墅District",
"330106": "西湖District",
"330108": "滨江District",
"330109": "萧山District",
"330110": "余杭District",
"330111": "富阳District",
"330112": "临安District",
"330113": "临平District",
"330114": "钱塘District",
"330122": "桐庐县",
"330127": "淳安县",
"330182": "建德City",
"330185": "临安City(旧)",
"330200": "宁波City",
"330203": "海曙District",
"330205": "江北District",
"330206": "北仑District",
"330211": "镇海District",
"330212": "鄞州District",
"330213": "奉化District",
"330225": "象山县",
"330226": "宁海县",
"330281": "余姚City",
"330282": "慈溪City",
"330300": "温州City",
"330302": "鹿城District",
"330303": "龙湾District",
"330304": "瓯海District",
"330305": "洞头District",
"330324": "永嘉县",
"330326": "平阳县",
"330327": "苍南县",
"330328": "文成县",
"330329": "泰顺县",
"330371": "温州经济技术开发District",
"330381": "瑞安City",
"330382": "乐清City",
"330383": "龙港City",
"330400": "嘉兴City",
"330402": "南湖District",
"330411": "秀洲District",
"330421": "嘉善县",
"330424": "海盐县",
"330481": "海宁City",
"330482": "平湖City",
"330483": "桐乡City",
"330500": "湖州City",
"330502": "吴兴District",
"330503": "南浔District",
"330521": "德清县",
"330522": "长兴县",
"330523": "安吉县",
"330600": "绍兴City",
"330602": "越城District",
"330603": "柯桥District",
"330604": "上虞District",
"330624": "新昌县",
"330681": "诸暨City",
"330683": "嵊州City",
"330700": "金华City",
"330702": "婺城District",
"330703": "金东District",
"330723": "武义县",
"330726": "浦江县",
"330727": "磐安县",
"330781": "兰溪City",
"330782": "义乌City",
"330783": "东阳City",
"330784": "永康City",
"330800": "衢州City",
"330802": "柯城District",
"330803": "衢江District",
"330822": "常山县",
"330824": "开化县",
"330825": "龙游县",
"330881": "江山City",
"330900": "舟山City",
"330902": "定海District",
"330903": "普陀District",
"330921": "岱山县",
"330922": "嵊泗县",
"331000": "台州City",
"331002": "椒江District",
"331003": "黄岩District",
"331004": "路桥District",
"331021": "玉环县(旧)",
"331022": "三门县",
"331023": "天台县",
"331024": "仙居县",
"331081": "温岭City",
"331082": "临海City",
"331083": "玉环City",
"331100": "丽水City",
"331102": "莲都District",
"331121": "青田县",
"331122": "缙云县",
"331123": "遂昌县",
"331124": "松阳县",
"331125": "云和县",
"331126": "庆元县",
"331127": "景宁畲族自治县",
"331181": "龙泉City",
"340000": "安徽",
"340100": "合肥City",
"340102": "瑶海District",
"340103": "庐阳District",
"340104": "蜀山District",
"340111": "包河District",
"340121": "长丰县",
"340122": "肥东县",
"340123": "肥西县",
"340124": "庐江县",
"340171": "合肥高新技术产业开发District",
"340172": "合肥经济技术开发District",
"340173": "合肥新站高新技术产业开发District",
"340181": "巢湖City",
"340200": "芜湖City",
"340202": "镜湖District",
"340203": "弋江District(旧)",
"340207": "鸠江District",
"340208": "三山District(旧)",
"340209": "弋江District",
"340210": "湾沚District",
"340212": "繁昌District",
"340221": "芜湖县(旧)",
"340222": "繁昌县(旧)",
"340223": "南陵县",
"340225": "None为县(旧)",
"340271": "芜湖经济技术开发District",
"340272": "安徽芜湖三山经济开发District",
"340281": "None为City",
"340300": "蚌埠City",
"340302": "龙子湖District",
"340303": "蚌山District",
"340304": "禹会District",
"340311": "淮上District",
"340321": "怀远县",
"340322": "五河县",
"340323": "固镇县",
"340371": "蚌埠City高新技术开发District",
"340372": "蚌埠City经济开发District",
"340400": "淮南City",
"340402": "大通District",
"340403": "田家庵District",
"340404": "谢家集District",
"340405": "八公山District",
"340406": "潘集District",
"340421": "凤台县",
"340422": "寿县",
"340500": "马鞍山City",
"340503": "花山District",
"340504": "雨山District",
"340506": "博望District",
"340521": "当涂县",
"340522": "含山县",
"340523": "和县",
"340600": "淮北City",
"340602": "杜集District",
"340603": "相山District",
"340604": "烈山District",
"340621": "濉溪县",
"340700": "铜陵City",
"340705": "铜官District",
"340706": "义安District",
"340711": "郊District",
"340722": "枞阳县",
"340800": "安庆City",
"340802": "迎江District",
"340803": "大观District",
"340811": "宜秀District",
"340822": "怀宁县",
"340824": "潜山县(旧)",
"340825": "太湖县",
"340826": "宿松县",
"340827": "望江县",
"340828": "岳西县",
"340871": "安徽安庆经济开发District",
"340881": "桐City",
"340882": "潜山City",
"341000": "黄山City",
"341002": "屯溪District",
"341003": "黄山District",
"341004": "徽州District",
"341021": "歙县",
"341022": "休宁县",
"341023": "黟县",
"341024": "祁门县",
"341100": "滁州City",
"341102": "琅琊District",
"341103": "南谯District",
"341122": "来安县",
"341124": "全椒县",
"341125": "定远县",
"341126": "凤阳县",
"341171": "中新苏滁高新技术产业开发District",
"341172": "滁州经济技术开发District",
"341181": "天长City",
"341182": "明光City",
"341200": "阜阳City",
"341202": "颍州District",
"341203": "颍东District",
"341204": "颍泉District",
"341221": "临泉县",
"341222": "太和县",
"341225": "阜南县",
"341226": "颍上县",
"341271": "阜阳合肥现代产业园District",
"341272": "阜阳经济技术开发District",
"341282": "界首City",
"341300": "宿州City",
"341302": "埇桥District",
"341321": "砀山县",
"341322": "萧县",
"341323": "灵璧县",
"341324": "泗县",
"341371": "宿州马鞍山现代产业园District",
"341372": "宿州经济技术开发District",
"341500": "六安City",
"341502": "金安District",
"341503": "裕安District",
"341504": "叶集District",
"341522": "霍邱县",
"341523": "舒城县",
"341524": "金寨县",
"341525": "霍山县",
"341600": "亳州City",
"341602": "谯城District",
"341621": "涡阳县",
"341622": "蒙城县",
"341623": "利辛县",
"341700": "池州City",
"341702": "贵池District",
"341721": "东至县",
"341722": "石台县",
"341723": "青阳县",
"341800": "宣City",
"341802": "宣州District",
"341821": "郎溪县",
"341822": "广德县(旧)",
"341823": "泾县",
"341824": "绩溪县",
"341825": "旌德县",
"341871": "宣City经济开发District",
"341881": "宁国City",
"341882": "广德City",
"350000": "福建",
"350100": "福州City",
"350102": "鼓楼District",
"350103": "台江District",
"350104": "仓山District",
"350105": "马尾District",
"350111": "晋安District",
"350112": "长乐District",
"350121": "闽侯县",
"350122": "连江县",
"350123": "罗源县",
"350124": "闽清县",
"350125": "永泰县",
"350128": "平潭县",
"350181": "福清City",
"350182": "长乐City(旧)",
"350200": "厦门City",
"350203": "思明District",
"350205": "海沧District",
"350206": "湖里District",
"350211": "集美District",
"350212": "同安District",
"350213": "翔安District",
"350300": "莆田City",
"350302": "城厢District",
"350303": "涵江District",
"350304": "荔城District",
"350305": "秀屿District",
"350322": "仙游县",
"350400": "三明City",
"350402": "梅列District(旧)",
"350403": "三元District(旧)",
"350404": "三元District",
"350405": "沙Province",
"350421": "明溪县",
"350423": "清流县",
"350424": "宁化县",
"350425": "大田县",
"350426": "尤溪县",
"350427": "沙县(旧)",
"350428": "将乐县",
"350429": "泰宁县",
"350430": "建宁县",
"350481": "永安City",
"350500": "泉州City",
"350502": "鲤城District",
"350503": "丰泽District",
"350504": "洛江District",
"350505": "泉港District",
"350521": "惠安县",
"350524": "安溪县",
"350525": "永春县",
"350526": "德化县",
"350527": "金门县",
"350581": "石狮City",
"350582": "晋江City",
"350583": "南安City",
"350600": "漳州City",
"350602": "芗城District",
"350603": "龙文District",
"350604": "龙海District",
"350605": "长泰District",
"350622": "云霄县",
"350623": "漳浦县",
"350624": "诏安县",
"350625": "长泰县(旧)",
"350626": "东山县",
"350627": "南靖县",
"350628": "平和县",
"350629": "华安县",
"350681": "龙海City(旧)",
"350700": "南平City",
"350702": "延平District",
"350703": "建阳District",
"350721": "顺昌县",
"350722": "浦城县",
"350723": "光泽县",
"350724": "松溪县",
"350725": "政和县",
"350781": "邵武City",
"350782": "武夷山City",
"350783": "建瓯City",
"350800": "龙岩City",
"350802": "新罗District",
"350803": "永定District",
"350821": "长汀县",
"350823": "上杭县",
"350824": "武平县",
"350825": "连城县",
"350881": "漳平City",
"350900": "宁德City",
"350902": "蕉城District",
"350921": "霞浦县",
"350922": "古田县",
"350923": "屏南县",
"350924": "寿宁县",
"350925": "周宁县",
"350926": "柘荣县",
"350981": "福安City",
"350982": "福鼎City",
"360000": "江西",
"360100": "南昌City",
"360102": "东湖District",
"360103": "西湖District",
"360104": "青云谱District",
"360105": "湾里District(旧)",
"360111": "青山湖District",
"360112": "新建District",
"360113": "红谷滩District",
"360121": "南昌县",
"360123": "安义县",
"360124": "进贤县",
"360200": "景德镇City",
"360202": "昌江District",
"360203": "珠山District",
"360222": "浮梁县",
"360281": "乐平City",
"360300": "萍乡City",
"360302": "安源District",
"360313": "湘东District",
"360321": "莲花县",
"360322": "上栗县",
"360323": "芦溪县",
"360400": "九江City",
"360402": "濂溪District",
"360403": "浔阳District",
"360404": "柴桑District",
"360421": "九江县(旧)",
"360423": "武宁县",
"360424": "修水县",
"360425": "永修县",
"360426": "德安县",
"360427": "庐山City(旧)",
"360428": "都昌县",
"360429": "湖口县",
"360430": "彭泽县",
"360481": "瑞昌City",
"360482": "共青City",
"360483": "庐山City",
"360500": "新余City",
"360502": "渝水District",
"360521": "分宜县",
"360600": "鹰潭City",
"360602": "月湖District",
"360603": "余江District",
"360622": "余江县(旧)",
"360681": "贵溪City",
"360700": "赣州City",
"360702": "章贡District",
"360703": "南康District",
"360704": "赣Province",
"360721": "赣Province(旧)",
"360722": "信丰县",
"360723": "大余县",
"360724": "上犹县",
"360725": "崇义县",
"360726": "安远县",
"360727": "龙南县(旧)",
"360728": "定南县",
"360729": "全南县",
"360730": "宁都县",
"360731": "于都县",
"360732": "兴国县",
"360733": "会昌县",
"360734": "寻乌县",
"360735": "石城县",
"360781": "瑞金City",
"360783": "龙南City",
"360800": "吉安City",
"360802": "吉州District",
"360803": "青原District",
"360821": "吉安县",
"360822": "吉水县",
"360823": "峡江县",
"360824": "新干县",
"360825": "永丰县",
"360826": "泰和县",
"360827": "遂川县",
"360828": "万安县",
"360829": "安福县",
"360830": "永新县",
"360881": "井冈山City",
"360900": "宜春City",
"360902": "袁州District",
"360921": "奉新县",
"360922": "万载县",
"360923": "上高县",
"360924": "宜丰县",
"360925": "靖安县",
"360926": "铜鼓县",
"360981": "丰City",
"360982": "樟树City",
"360983": "高安City",
"361000": "抚州City",
"361002": "临川District",
"361003": "东乡District",
"361021": "南城县",
"361022": "黎川县",
"361023": "南丰县",
"361024": "崇仁县",
"361025": "乐安县",
"361026": "宜黄县",
"361027": "金溪县",
"361028": "资溪县",
"361029": "东乡District(旧)",
"361030": "广昌县",
"361100": "上饶City",
"361102": "信州District",
"361103": "广丰District",
"361104": "广信District",
"361121": "上饶县(旧)",
"361123": "玉山县",
"361124": "铅山县",
"361125": "横峰县",
"361126": "弋阳县",
"361127": "余干县",
"361128": "鄱阳县",
"361129": "万年县",
"361130": "婺源县",
"361181": "德兴City",
"370000": "山东",
"370100": "济南City",
"370102": "历下District",
"370103": "City中District",
"370104": "槐荫District",
"370105": "天桥District",
"370112": "历城District",
"370113": "长清District",
"370114": "章丘District",
"370115": "济阳District",
"370116": "莱芜District",
"370117": "钢城District",
"370124": "平阴县",
"370125": "济阳县(旧)",
"370126": "商河县",
"370171": "济南高新技术产业开发District",
"370181": "章丘District(旧)",
"370200": "青岛City",
"370202": "City南District",
"370203": "City北District",
"370211": "黄岛District",
"370212": "崂山District",
"370213": "李沧District",
"370214": "城阳District",
"370215": "即墨District",
"370271": "青岛高新技术产业开发District",
"370281": "胶州City",
"370282": "即墨City(旧)",
"370283": "平度City",
"370285": "莱西City",
"370300": "淄博City",
"370302": "淄川District",
"370303": "张店District",
"370304": "博山District",
"370305": "临淄District",
"370306": "周村District",
"370321": "桓台县",
"370322": "高青县",
"370323": "沂源县",
"370400": "枣庄City",
"370402": "City中District",
"370403": "薛城District",
"370404": "峄城District",
"370405": "台儿庄District",
"370406": "山亭District",
"370481": "滕州City",
"370500": "东营City",
"370502": "东营District",
"370503": "河口District",
"370505": "垦利District",
"370522": "利津县",
"370523": "广饶县",
"370571": "东营经济技术开发District",
"370572": "东营港经济开发District",
"370600": "烟台City",
"370602": "芝罘District",
"370611": "福山District",
"370612": "牟平District",
"370613": "莱山District",
"370614": "蓬莱District",
"370634": "长岛县(旧)",
"370671": "烟台高新技术产业开发District",
"370672": "烟台经济技术开发District",
"370681": "龙口City",
"370682": "莱阳City",
"370683": "莱州City",
"370684": "蓬莱City(旧)",
"370685": "招远City",
"370686": "栖霞City",
"370687": "海阳City",
"370700": "潍坊City",
"370702": "潍城District",
"370703": "寒亭District",
"370704": "坊子District",
"370705": "奎文District",
"370724": "临朐县",
"370725": "昌乐县",
"370772": "潍坊滨海经济技术开发District",
"370781": "青州City",
"370782": "诸City",
"370783": "寿光City",
"370784": "安丘City",
"370785": "高密City",
"370786": "昌邑City",
"370800": "济宁City",
"370811": "任城District",
"370812": "兖州District",
"370826": "微山县",
"370827": "鱼台县",
"370828": "金乡县",
"370829": "嘉祥县",
"370830": "汶上县",
"370831": "泗水县",
"370832": "梁山县",
"370871": "济宁高新技术产业开发District",
"370881": "曲阜City",
"370883": "邹City",
"370900": "泰安City",
"370902": "泰山District",
"370911": "岱岳District",
"370921": "宁阳县",
"370923": "东平县",
"370982": "新泰City",
"370983": "肥City",
"371000": "威海City",
"371002": "环翠District",
"371003": "文登District",
"371071": "威海火炬高技术产业开发District",
"371072": "威海经济技术开发District",
"371073": "威海临港经济技术开发District",
"371082": "荣成City",
"371083": "乳山City",
"371100": "日照City",
"371102": "东港District",
"371103": "岚山District",
"371121": "五莲县",
"371122": "莒县",
"371171": "日照经济技术开发District",
"371200": "莱芜City(旧)",
"371202": "莱城District(旧)",
"371203": "钢城District(旧)",
"371300": "临沂City",
"371302": "兰山District",
"371311": "罗庄District",
"371312": "河东District",
"371321": "沂南县",
"371322": "郯城县",
"371323": "沂水县",
"371324": "兰陵县",
"371325": "费县",
"371326": "平邑县",
"371327": "莒南县",
"371328": "蒙阴县",
"371329": "临沭县",
"371371": "临沂高新技术产业开发District",
"371400": "德州City",
"371402": "德城District",
"371403": "陵城District",
"371422": "宁津县",
"371423": "庆云县",
"371424": "临邑县",
"371425": "齐河县",
"371426": "平原县",
"371427": "夏津县",
"371428": "武城县",
"371471": "德州经济技术开发District",
"371472": "德州运河经济开发District",
"371481": "乐陵City",
"371482": "禹City",
"371500": "聊City",
"371502": "东昌府District",
"371503": "茌平District",
"371521": "阳谷县",
"371522": "莘县",
"371523": "茌平县(旧)",
"371524": "东阿县",
"371525": "冠县",
"371526": "高唐县",
"371581": "临清City",
"371600": "滨州City",
"371602": "滨城District",
"371603": "沾化District",
"371621": "惠民县",
"371622": "阳信县",
"371623": "None棣县",
"371625": "博兴县",
"371626": "邹平县(旧)",
"371681": "邹平City",
"371700": "菏泽City",
"371702": "牡丹District",
"371703": "定陶District",
"371721": "曹县",
"371722": "单县",
"371723": "成武县",
"371724": "巨野县",
"371725": "郓城县",
"371726": "鄄城县",
"371728": "东明县",
"371771": "菏泽经济技术开发District",
"371772": "菏泽高新技术开发District",
"410000": "河南",
"410100": "郑州City",
"410102": "中原District",
"410103": "二七District",
"410104": "管城回族District",
"410105": "金水District",
"410106": "上街District",
"410108": "惠济District",
"410122": "中牟县",
"410171": "郑州经济技术开发District",
"410172": "郑州高新技术产业开发District",
"410173": "郑州航空港经济综合实验District",
"410181": "巩义City",
"410182": "荥阳City",
"410183": "新密City",
"410184": "新郑City",
"410185": "登封City",
"410186": "郑东新District(旧)",
"410200": "开封City",
"410202": "龙亭District",
"410203": "顺河回族District",
"410204": "鼓楼District",
"410205": "禹王台District",
"410212": "祥符District",
"410221": "杞县",
"410222": "通许县",
"410223": "尉氏县",
"410225": "兰考县",
"410300": "洛阳City",
"410302": "老城District",
"410303": "西工District",
"410304": "瀍河回族District",
"410305": "涧西District",
"410306": "吉利District(旧)",
"410307": "偃师District",
"410308": "孟津District",
"410311": "洛龙District",
"410322": "孟津县(旧)",
"410323": "新安县",
"410324": "栾川县",
"410325": "嵩县",
"410326": "汝阳县",
"410327": "宜阳县",
"410328": "洛宁县",
"410329": "伊川县",
"410371": "洛阳高新技术产业开发District",
"410381": "偃师City(旧)",
"410400": "平顶山City",
"410402": "新华District",
"410403": "卫东District",
"410404": "石龙District",
"410411": "湛河District",
"410421": "宝丰县",
"410422": "叶县",
"410423": "鲁山县",
"410425": "郏县",
"410471": "平顶山高新技术产业开发District",
"410472": "平顶山City城乡一体化示范District",
"410481": "舞钢City",
"410482": "汝州City",
"410500": "安阳City",
"410502": "文峰District",
"410503": "北关District",
"410505": "殷都District",
"410506": "龙安District",
"410522": "安阳县",
"410523": "汤阴县",
"410526": "滑县",
"410527": "内黄县",
"410571": "安阳高新技术产业开发District",
"410581": "林州City",
"410600": "鹤壁City",
"410602": "鹤山District",
"410603": "山城District",
"410611": "淇滨District",
"410621": "浚县",
"410622": "淇县",
"410671": "鹤壁经济技术开发District",
"410700": "新乡City",
"410702": "红旗District",
"410703": "卫滨District",
"410704": "凤泉District",
"410711": "牧野District",
"410721": "新乡县",
"410724": "获嘉县",
"410725": "原阳县",
"410726": "延津县",
"410727": "封丘县",
"410728": "长垣县(旧)",
"410771": "新乡高新技术产业开发District",
"410772": "新乡经济技术开发District",
"410773": "新乡City平原城乡一体化示范District",
"410781": "卫辉City",
"410782": "辉县City",
"410783": "长垣City",
"410800": "焦作City",
"410802": "解放District",
"410803": "中站District",
"410804": "马村District",
"410811": "山阳District",
"410821": "修武县",
"410822": "博爱县",
"410823": "武陟县",
"410825": "温县",
"410871": "焦作城乡一体化示范District",
"410882": "沁阳City",
"410883": "孟州City",
"410900": "濮阳City",
"410902": "华龙District",
"410922": "清丰县",
"410923": "南乐县",
"410926": "范县",
"410927": "台前县",
"410928": "濮阳县",
"410971": "河南濮阳工业园District",
"410972": "濮阳经济技术开发District",
"411000": "许昌City",
"411002": "魏都District",
"411003": "建安District",
"411023": "许昌县(旧)",
"411024": "鄢陵县",
"411025": "襄城县",
"411071": "许昌经济技术开发District",
"411081": "禹州City",
"411082": "长葛City",
"411100": "漯河City",
"411102": "源汇District",
"411103": "郾城District",
"411104": "召陵District",
"411121": "舞阳县",
"411122": "临颍县",
"411171": "漯河经济技术开发District",
"411200": "三门峡City",
"411202": "湖滨District",
"411203": "陕州District",
"411221": "渑池县",
"411224": "卢氏县",
"411271": "河南三门峡经济开发District",
"411281": "义马City",
"411282": "灵宝City",
"411300": "南阳City",
"411302": "宛城District",
"411303": "卧龙District",
"411321": "南召县",
"411322": "方城县",
"411323": "西峡县",
"411324": "镇平县",
"411325": "内乡县",
"411326": "淅川县",
"411327": "社旗县",
"411328": "唐河县",
"411329": "新野县",
"411330": "桐柏县",
"411371": "南阳高新技术产业开发District",
"411372": "南阳City城乡一体化示范District",
"411381": "邓州City",
"411400": "商丘City",
"411402": "梁园District",
"411403": "睢阳District",
"411421": "民权县",
"411422": "睢县",
"411423": "宁陵县",
"411424": "柘城县",
"411425": "虞城县",
"411426": "夏邑县",
"411471": "豫东综合物流产业聚集District",
"411472": "河南商丘经济开发District",
"411481": "永City",
"411500": "信阳City",
"411502": "浉河District",
"411503": "平桥District",
"411521": "罗山县",
"411522": "光山县",
"411523": "新县",
"411524": "商城县",
"411525": "固始县",
"411526": "潢川县",
"411527": "淮滨县",
"411528": "息县",
"411571": "信阳高新技术产业开发District",
"411600": "周口City",
"411602": "川汇District",
"411603": "淮阳District",
"411621": "扶沟县",
"411622": "西华县",
"411623": "商水县",
"411624": "沈丘县",
"411625": "郸城县",
"411626": "淮阳县(旧)",
"411627": "太康县",
"411628": "鹿邑县",
"411671": "河南周口经济开发District",
"411681": "项City",
"411700": "驻马店City",
"411702": "驿城District",
"411721": "西平县",
"411722": "上蔡县",
"411723": "平舆县",
"411724": "正阳县",
"411725": "确山县",
"411726": "泌阳县",
"411727": "汝南县",
"411728": "遂平县",
"411729": "新蔡县",
"411771": "河南驻马店经济开发District",
"419001": "济源City",
"420000": "湖北",
"420100": "武汉City",
"420102": "江岸District",
"420103": "江汉District",
"420104": "硚口District",
"420105": "汉阳District",
"420106": "武昌District",
"420107": "青山District",
"420111": "洪山District",
"420112": "东西湖District",
"420113": "汉南District",
"420114": "蔡甸District",
"420115": "江夏District",
"420116": "黄陂District",
"420117": "新洲District",
"420200": "黄石City",
"420202": "黄石港District",
"420203": "西塞山District",
"420204": "下陆District",
"420205": "铁山District",
"420222": "阳新县",
"420281": "大冶City",
"420300": "十堰City",
"420302": "茅箭District",
"420303": "张湾District",
"420304": "郧阳District",
"420322": "郧西县",
"420323": "竹山县",
"420324": "竹溪县",
"420325": "房县",
"420381": "丹江口City",
"420500": "宜昌City",
"420502": "西陵District",
"420503": "伍家岗District",
"420504": "点军District",
"420505": "猇亭District",
"420506": "夷陵District",
"420525": "远安县",
"420526": "兴山县",
"420527": "秭归县",
"420528": "长阳土家族自治县",
"420529": "五峰土家族自治县",
"420581": "宜都City",
"420582": "当阳City",
"420583": "枝江City",
"420600": "襄阳City",
"420602": "襄城District",
"420606": "樊城District",
"420607": "襄州District",
"420624": "南漳县",
"420625": "谷城县",
"420626": "保康县",
"420682": "老河口City",
"420683": "枣阳City",
"420684": "宜City",
"420700": "鄂州City",
"420702": "梁子湖District",
"420703": "华容District",
"420704": "鄂城District",
"420800": "荆门City",
"420802": "东宝District",
"420804": "掇刀District",
"420821": "京山县(旧)",
"420822": "沙洋县",
"420881": "钟祥City",
"420882": "京山City",
"420900": "孝感City",
"420902": "孝南District",
"420921": "孝昌县",
"420922": "大悟县",
"420923": "云梦县",
"420981": "应City",
"420982": "安陆City",
"420984": "汉川City",
"421000": "荆州City",
"421002": "沙CityDistrict",
"421003": "荆州District",
"421022": "公安县",
"421023": "监利县(旧)",
"421024": "江陵县",
"421071": "荆州经济技术开发District",
"421081": "石首City",
"421083": "洪湖City",
"421087": "松滋City",
"421088": "监利City",
"421100": "黄冈City",
"421102": "黄州District",
"421121": "团风县",
"421122": "红安县",
"421123": "罗田县",
"421124": "英山县",
"421125": "浠水县",
"421126": "蕲春县",
"421127": "黄梅县",
"421171": "龙感湖管理District",
"421181": "麻City",
"421182": "武穴City",
"421200": "咸宁City",
"421202": "咸安District",
"421221": "嘉鱼县",
"421222": "通城县",
"421223": "崇阳县",
"421224": "通山县",
"421281": "赤壁City",
"421300": "随州City",
"421303": "曾都District",
"421321": "随县",
"421381": "广水City",
"422800": "恩施土家族苗族自治州",
"422801": "恩施City",
"422802": "利川City",
"422822": "建始县",
"422823": "巴东县",
"422825": "宣恩县",
"422826": "咸丰县",
"422827": "来凤县",
"422828": "鹤峰县",
"429004": "仙桃City",
"429005": "潜江City",
"429006": "天门City",
"429021": "神农架林District",
"430000": "湖南",
"430100": "长沙City",
"430102": "芙蓉District",
"430103": "天心District",
"430104": "岳麓District",
"430105": "开福District",
"430111": "雨花District",
"430112": "望城District",
"430121": "长沙县",
"430124": "宁乡县(旧)",
"430181": "浏阳City",
"430182": "宁乡City",
"430200": "株洲City",
"430202": "荷塘District",
"430203": "芦淞District",
"430204": "石峰District",
"430211": "天元District",
"430212": "渌口District",
"430221": "株洲县(旧)",
"430223": "攸县",
"430224": "茶陵县",
"430225": "炎陵县",
"430271": "云龙示范District",
"430281": "醴陵City",
"430300": "湘潭City",
"430302": "雨湖District",
"430304": "岳塘District",
"430321": "湘潭县",
"430371": "湖南湘潭高新技术产业园District",
"430372": "湘潭昭山示范District",
"430373": "湘潭九华示范District",
"430381": "湘乡City",
"430382": "韶山City",
"430400": "衡阳City",
"430405": "珠晖District",
"430406": "雁峰District",
"430407": "石鼓District",
"430408": "蒸湘District",
"430412": "南岳District",
"430421": "衡阳县",
"430422": "衡南县",
"430423": "衡山县",
"430424": "衡东县",
"430426": "祁东县",
"430471": "衡阳综合保税District",
"430472": "湖南衡阳高新技术产业园District",
"430473": "湖南衡阳松木经济开发District",
"430481": "耒阳City",
"430482": "常宁City",
"430500": "邵阳City",
"430502": "双清District",
"430503": "大祥District",
"430511": "北塔District",
"430521": "邵东县(旧)",
"430522": "新邵县",
"430523": "邵阳县",
"430524": "隆回县",
"430525": "洞口县",
"430527": "绥宁县",
"430528": "新宁县",
"430529": "城步苗族自治县",
"430581": "武冈City",
"430582": "邵东City",
"430600": "岳阳City",
"430602": "岳阳楼District",
"430603": "云溪District",
"430611": "君山District",
"430621": "岳阳县",
"430623": "华容县",
"430624": "湘阴县",
"430626": "平江县",
"430671": "岳阳City屈原管理District",
"430681": "汨罗City",
"430682": "临湘City",
"430700": "常德City",
"430702": "武陵District",
"430703": "鼎城District",
"430721": "安乡县",
"430722": "汉寿县",
"430723": "澧县",
"430724": "临澧县",
"430725": "桃源县",
"430726": "石门县",
"430771": "常德City西洞庭管理District",
"430781": "津CityCity",
"430800": "张家界City",
"430802": "永定District",
"430811": "武陵源District",
"430821": "慈利县",
"430822": "桑植县",
"430900": "益阳City",
"430902": "资阳District",
"430903": "赫山District",
"430921": "南县",
"430922": "桃江县",
"430923": "安化县",
"430971": "益阳City大通湖管理District",
"430972": "湖南益阳高新技术产业园District",
"430981": "沅江City",
"431000": "郴州City",
"431002": "北湖District",
"431003": "苏仙District",
"431021": "桂阳县",
"431022": "宜章县",
"431023": "永兴县",
"431024": "嘉禾县",
"431025": "临武县",
"431026": "汝城县",
"431027": "桂东县",
"431028": "安仁县",
"431081": "资兴City",
"431100": "永州City",
"431102": "零陵District",
"431103": "冷水滩District",
"431121": "祁阳县(旧)",
"431122": "东安县",
"431123": "双牌县",
"431124": "道县",
"431125": "江永县",
"431126": "宁远县",
"431127": "蓝山县",
"431128": "新田县",
"431129": "江华瑶族自治县",
"431171": "永州经济技术开发District",
"431173": "永州City回龙圩管理District",
"431181": "祁阳City",
"431200": "怀化City",
"431202": "鹤城District",
"431221": "中方县",
"431222": "沅陵县",
"431223": "辰溪县",
"431224": "溆浦县",
"431225": "会同县",
"431226": "麻阳苗族自治县",
"431227": "新晃侗族自治县",
"431228": "芷江侗族自治县",
"431229": "靖州苗族侗族自治县",
"431230": "通道侗族自治县",
"431271": "怀化City洪江管理District",
"431281": "洪江City",
"431300": "娄底City",
"431302": "娄星District",
"431321": "双峰县",
"431322": "新化县",
"431381": "冷水江City",
"431382": "涟源City",
"433100": "湘西土家族苗族自治州",
"433101": "吉首City",
"433122": "泸溪县",
"433123": "凤凰县",
"433124": "花垣县",
"433125": "保靖县",
"433126": "古丈县",
"433127": "永顺县",
"433130": "龙山县",
"440000": "广东",
"440100": "广州City",
"440103": "荔湾District",
"440104": "越秀District",
"440105": "海珠District",
"440106": "天河District",
"440111": "白云District",
"440112": "黄埔District",
"440113": "番禺District",
"440114": "花都District",
"440115": "南沙District",
"440117": "从化District",
"440118": "增城District",
"440200": "韶关City",
"440203": "武江District",
"440204": "浈江District",
"440205": "曲江District",
"440222": "始兴县",
"440224": "仁化县",
"440229": "翁源县",
"440232": "乳源瑶族自治县",
"440233": "新丰县",
"440281": "乐昌City",
"440282": "南雄City",
"440300": "深圳City",
"440303": "罗湖District",
"440304": "福田District",
"440305": "南山District",
"440306": "宝安District",
"440307": "龙岗District",
"440308": "盐田District",
"440309": "龙华District",
"440310": "坪山District",
"440311": "光明District",
"440400": "珠海City",
"440402": "香洲District",
"440403": "斗门District",
"440404": "金湾District",
"440500": "汕头City",
"440507": "龙湖District",
"440511": "金平District",
"440512": "濠江District",
"440513": "潮阳District",
"440514": "潮南District",
"440515": "澄海District",
"440523": "南澳县",
"440600": "佛山City",
"440604": "禅城District",
"440605": "南海District",
"440606": "顺德District",
"440607": "三水District",
"440608": "高明District",
"440700": "江门City",
"440703": "蓬江District",
"440704": "江海District",
"440705": "新会District",
"440781": "台山City",
"440783": "开平City",
"440784": "鹤山City",
"440785": "恩平City",
"440800": "湛江City",
"440802": "赤坎District",
"440803": "霞山District",
"440804": "坡头District",
"440811": "麻章District",
"440823": "遂溪县",
"440825": "徐闻县",
"440881": "廉江City",
"440882": "雷州City",
"440883": "吴川City",
"440900": "茂名City",
"440902": "茂南District",
"440904": "电白District",
"440981": "高州City",
"440982": "化州City",
"440983": "信宜City",
"441200": "肇庆City",
"441202": "端州District",
"441203": "鼎湖District",
"441204": "高要District",
"441223": "广宁县",
"441224": "怀集县",
"441225": "封开县",
"441226": "德庆县",
"441284": "四会City",
"441300": "惠州City",
"441302": "惠城District",
"441303": "惠阳District",
"441322": "博罗县",
"441323": "惠东县",
"441324": "龙门县",
"441400": "梅州City",
"441402": "梅江District",
"441403": "梅Province",
"441422": "大埔县",
"441423": "丰顺县",
"441424": "五华县",
"441426": "平远县",
"441427": "蕉岭县",
"441481": "兴宁City",
"441500": "汕尾City",
"441502": "城District",
"441521": "海丰县",
"441523": "陆河县",
"441581": "陆丰City",
"441600": "河源City",
"441602": "源城District",
"441621": "紫金县",
"441622": "龙川县",
"441623": "连平县",
"441624": "和平县",
"441625": "东源县",
"441700": "阳江City",
"441702": "江城District",
"441704": "阳东District",
"441721": "阳西县",
"441781": "阳春City",
"441800": "清远City",
"441802": "清城District",
"441803": "清新District",
"441821": "佛冈县",
"441823": "阳山县",
"441825": "连山壮族瑶族自治县",
"441826": "连南瑶族自治县",
"441881": "英德City",
"441882": "连州City",
"441900": "东莞City",
"442000": "中山City",
"445100": "潮州City",
"445102": "湘桥District",
"445103": "潮安District",
"445122": "饶平县",
"445200": "揭阳City",
"445202": "榕城District",
"445203": "揭东District",
"445222": "揭西县",
"445224": "惠来县",
"445281": "普宁City",
"445300": "云浮City",
"445302": "云城District",
"445303": "云安District",
"445321": "新兴县",
"445322": "郁南县",
"445381": "罗定City",
"450000": "广西",
"450100": "南宁City",
"450102": "兴宁District",
"450103": "青秀District",
"450105": "江南District",
"450107": "西乡塘District",
"450108": "良庆District",
"450109": "邕宁District",
"450110": "武鸣District",
"450123": "隆安县",
"450124": "马山县",
"450125": "上林县",
"450126": "宾阳县",
"450127": "横县(旧)",
"450181": "横州City",
"450200": "柳州City",
"450202": "城中District",
"450203": "鱼峰District",
"450204": "柳南District",
"450205": "柳北District",
"450206": "柳江District",
"450221": "柳江District(旧)",
"450222": "柳城县",
"450223": "鹿寨县",
"450224": "融安县",
"450225": "融水苗族自治县",
"450226": "三江侗族自治县",
"450300": "桂林City",
"450302": "秀峰District",
"450303": "叠彩District",
"450304": "象山District",
"450305": "七星District",
"450311": "雁山District",
"450312": "临桂District",
"450321": "阳朔县",
"450323": "灵川县",
"450324": "全州县",
"450325": "兴安县",
"450326": "永福县",
"450327": "灌阳县",
"450328": "龙胜各族自治县",
"450329": "资源县",
"450330": "平乐县",
"450331": "荔浦县(旧)",
"450332": "恭城瑶族自治县",
"450381": "荔浦City",
"450400": "梧州City",
"450403": "万秀District",
"450405": "长洲District",
"450406": "龙圩District",
"450421": "苍梧县",
"450422": "藤县",
"450423": "蒙山县",
"450481": "岑溪City",
"450500": "北海City",
"450502": "海城District",
"450503": "银海District",
"450512": "铁山港District",
"450521": "合浦县",
"450600": "防城港City",
"450602": "港口District",
"450603": "防城District",
"450621": "上思县",
"450681": "东兴City",
"450700": "钦州City",
"450702": "钦南District",
"450703": "钦北District",
"450721": "灵山县",
"450722": "浦北县",
"450800": "贵港City",
"450802": "港北District",
"450803": "港南District",
"450804": "覃塘District",
"450821": "平南县",
"450881": "桂平City",
"450900": "玉林City",
"450902": "玉州District",
"450903": "福绵District",
"450921": "容县",
"450922": "陆川县",
"450923": "博白县",
"450924": "兴业县",
"450981": "北流City",
"451000": "百色City",
"451002": "右江District",
"451003": "田阳District",
"451021": "田阳县(旧)",
"451022": "田东县",
"451023": "平果县(旧)",
"451024": "德保县",
"451026": "那坡县",
"451027": "凌云县",
"451028": "乐业县",
"451029": "田林县",
"451030": "西林县",
"451031": "隆林各族自治县",
"451081": "靖西City",
"451082": "平果City",
"451100": "贺州City",
"451102": "八步District",
"451103": "平桂District",
"451121": "昭平县",
"451122": "钟山县",
"451123": "富川瑶族自治县",
"451200": "河池City",
"451202": "金城江District",
"451203": "宜州District",
"451221": "南丹县",
"451222": "天峨县",
"451223": "凤山县",
"451224": "东兰县",
"451225": "罗城仫佬族自治县",
"451226": "环江毛南族自治县",
"451227": "巴马瑶族自治县",
"451228": "都安瑶族自治县",
"451229": "大化瑶族自治县",
"451281": "宜州District(旧)",
"451300": "来宾City",
"451302": "兴宾District",
"451321": "忻城县",
"451322": "象州县",
"451323": "武宣县",
"451324": "金秀瑶族自治县",
"451381": "合山City",
"451400": "崇左City",
"451402": "江州District",
"451421": "扶绥县",
"451422": "宁明县",
"451423": "龙州县",
"451424": "大新县",
"451425": "天,etc.县",
"451481": "凭祥City",
"460000": "海南",
"460100": "海口City",
"460105": "秀英District",
"460106": "龙华District",
"460107": "琼山District",
"460108": "美兰District",
"460200": "三亚City",
"460202": "海棠District",
"460203": "吉阳District",
"460204": "天涯District",
"460205": "崖州District",
"460300": "三沙City",
"460321": "西沙群岛",
"460322": "南沙群岛",
"460323": "中沙群岛",
"460324": "永乐群岛",
"460400": "儋州City",
"469001": "五指山City",
"469002": "琼海City",
"469005": "文昌City",
"469006": "万宁City",
"469007": "东方City",
"469021": "定安县",
"469022": "屯昌县",
"469023": "澄迈县",
"469024": "临高县",
"469025": "白沙黎族自治县",
"469026": "昌江黎族自治县",
"469027": "乐东黎族自治县",
"469028": "陵水黎族自治县",
"469029": "保亭黎族苗族自治县",
"469030": "琼中黎族苗族自治县",
"500000": "重庆City",
"500101": "万州District",
"500102": "涪陵District",
"500103": "渝中District",
"500104": "大渡口District",
"500105": "江北District",
"500106": "沙坪坝District",
"500107": "九龙坡District",
"500108": "南岸District",
"500109": "北碚District",
"500110": "綦江District",
"500111": "大足District",
"500112": "渝北District",
"500113": "巴南District",
"500114": "黔江District",
"500115": "长寿District",
"500116": "江津District",
"500117": "合川District",
"500118": "永川District",
"500119": "南川District",
"500120": "璧山District",
"500151": "铜梁District",
"500152": "潼南District",
"500153": "荣昌District",
"500154": "开州District",
"500155": "梁平District",
"500156": "武隆District",
"500228": "梁平District(旧)",
"500229": "城口县",
"500230": "丰都县",
"500231": "垫江县",
"500232": "武隆District(旧)",
"500233": "忠县",
"500235": "云阳县",
"500236": "奉节县",
"500237": "巫山县",
"500238": "巫溪县",
"500240": "石柱土家族自治县",
"500241": "秀山土家族苗族自治县",
"500242": "酉阳土家族苗族自治县",
"500243": "彭水苗族土家族自治县",
"510000": "四川",
"510100": "成都City",
"510104": "锦江District",
"510105": "青羊District",
"510106": "金牛District",
"510107": "武侯District",
"510108": "成华District",
"510112": "龙泉驿District",
"510113": "青白江District",
"510114": "新都District",
"510115": "温江District",
"510116": "双流District",
"510117": "郫都District",
"510118": "新津District",
"510121": "金堂县",
"510124": "郫都District(旧)",
"510129": "大邑县",
"510131": "蒲江县",
"510132": "新津县(旧)",
"510181": "都江堰City",
"510182": "彭州City",
"510183": "邛崃City",
"510184": "崇州City",
"510185": "简阳City",
"510300": "自贡City",
"510302": "自流井District",
"510303": "贡井District",
"510304": "大安District",
"510311": "沿滩District",
"510321": "荣县",
"510322": "富顺县",
"510400": "攀枝花City",
"510402": "东District",
"510403": "西District",
"510411": "仁和District",
"510421": "米易县",
"510422": "盐边县",
"510500": "泸州City",
"510502": "江阳District",
"510503": "纳溪District",
"510504": "龙马潭District",
"510521": "泸县",
"510522": "合江县",
"510524": "叙永县",
"510525": "古蔺县",
"510600": "德阳City",
"510603": "旌阳District",
"510604": "罗江District",
"510623": "中江县",
"510626": "罗江县(旧)",
"510681": "广汉City",
"510682": "什邡City",
"510683": "绵竹City",
"510700": "绵阳City",
"510703": "涪城District",
"510704": "游仙District",
"510705": "安州District",
"510722": "三台县",
"510723": "盐亭县",
"510725": "梓潼县",
"510726": "北川羌族自治县",
"510727": "平武县",
"510781": "江油City",
"510800": "广元City",
"510802": "利州District",
"510811": "昭化District",
"510812": "朝天District",
"510821": "旺苍县",
"510822": "青川县",
"510823": "剑阁县",
"510824": "苍溪县",
"510900": "遂宁City",
"510903": "船山District",
"510904": "安居District",
"510921": "蓬溪县",
"510922": "射洪县(旧)",
"510923": "大英县",
"510981": "射洪City",
"511000": "内江City",
"511002": "City中District",
"511011": "东兴District",
"511024": "威远县",
"511025": "资中县",
"511028": "隆昌县(旧)",
"511071": "内江经济开发District",
"511083": "隆昌City",
"511100": "乐山City",
"511102": "City中District",
"511111": "沙湾District",
"511112": "五通桥District",
"511113": "金口河District",
"511123": "犍为县",
"511124": "井研县",
"511126": "夹江县",
"511129": "沐川县",
"511132": "峨边彝族自治县",
"511133": "马边彝族自治县",
"511181": "峨眉山City",
"511300": "南充City",
"511302": "顺庆District",
"511303": "高坪District",
"511304": "嘉陵District",
"511321": "南部县",
"511322": "营山县",
"511323": "蓬安县",
"511324": "仪陇县",
"511325": "西充县",
"511381": "阆中City",
"511400": "眉山City",
"511402": "东坡District",
"511403": "彭山District",
"511421": "仁寿县",
"511423": "洪雅县",
"511424": "丹棱县",
"511425": "青神县",
"511500": "宜宾City",
"511502": "翠屏District",
"511503": "南溪District",
"511504": "叙州District",
"511521": "宜宾县(旧)",
"511523": "江安县",
"511524": "长宁县",
"511525": "高县",
"511526": "珙县",
"511527": "筠连县",
"511528": "兴文县",
"511529": "屏山县",
"511600": "广安City",
"511602": "广安District",
"511603": "前锋District",
"511621": "岳池县",
"511622": "武胜县",
"511623": "邻水县",
"511681": "华蓥City",
"511700": "达州City",
"511702": "通川District",
"511703": "达川District",
"511722": "宣汉县",
"511723": "开江县",
"511724": "大竹县",
"511725": "渠县",
"511771": "达州经济开发District",
"511781": "万源City",
"511800": "雅安City",
"511802": "雨城District",
"511803": "名山District",
"511822": "荥经县",
"511823": "汉源县",
"511824": "石棉县",
"511825": "天全县",
"511826": "芦山县",
"511827": "宝兴县",
"511900": "巴中City",
"511902": "巴州District",
"511903": "恩阳District",
"511921": "通江县",
"511922": "南江县",
"511923": "平昌县",
"511971": "巴中经济开发District",
"512000": "资阳City",
"512002": "雁江District",
"512021": "安岳县",
"512022": "乐至县",
"513200": "阿坝藏族羌族自治州",
"513201": "马尔康City",
"513221": "汶川县",
"513222": "理县",
"513223": "茂县",
"513224": "松潘县",
"513225": "九寨沟县",
"513226": "金川县",
"513227": "小金县",
"513228": "黑水县",
"513230": "壤塘县",
"513231": "阿坝县",
"513232": "若尔盖县",
"513233": "红原县",
"513300": "甘孜藏族自治州",
"513301": "康定City",
"513322": "泸定县",
"513323": "丹巴县",
"513324": "九龙县",
"513325": "雅江县",
"513326": "道孚县",
"513327": "炉霍县",
"513328": "甘孜县",
"513329": "新龙县",
"513330": "德格县",
"513331": "白玉县",
"513332": "石渠县",
"513333": "色达县",
"513334": "理塘县",
"513335": "巴塘县",
"513336": "乡城县",
"513337": "稻城县",
"513338": "得荣县",
"513400": "凉山彝族自治州",
"513401": "西昌City",
"513402": "会理City",
"513422": "木里藏族自治县",
"513423": "盐源县",
"513424": "德昌县",
"513425": "会理县(旧)",
"513426": "会东县",
"513427": "宁南县",
"513428": "普格县",
"513429": "布拖县",
"513430": "金阳县",
"513431": "昭觉县",
"513432": "喜德县",
"513433": "冕宁县",
"513434": "越西县",
"513435": "甘洛县",
"513436": "美姑县",
"513437": "雷波县",
"520000": "贵州",
"520100": "贵阳City",
"520102": "南明District",
"520103": "云岩District",
"520111": "花溪District",
"520112": "乌当District",
"520113": "白云District",
"520115": "观山湖District",
"520121": "开阳县",
"520122": "息烽县",
"520123": "修文县",
"520181": "清镇City",
"520200": "六盘水City",
"520201": "钟山District",
"520203": "六枝特District",
"520204": "水城District",
"520221": "水城县(旧)",
"520222": "盘县(旧)",
"520281": "盘州City",
"520300": "遵义City",
"520302": "红花岗District",
"520303": "汇川District",
"520304": "播州District",
"520322": "桐梓县",
"520323": "绥阳县",
"520324": "正安县",
"520325": "道真仡佬族苗族自治县",
"520326": "务川仡佬族苗族自治县",
"520327": "凤冈县",
"520328": "湄潭县",
"520329": "余庆县",
"520330": "习水县",
"520381": "赤水City",
"520382": "仁怀City",
"520400": "安顺City",
"520402": "西秀District",
"520403": "平坝District",
"520422": "普定县",
"520423": "镇宁布依族苗族自治县",
"520424": "关岭布依族苗族自治县",
"520425": "紫云苗族布依族自治县",
"520500": "毕节City",
"520502": "七星关District",
"520521": "大方县",
"520522": "黔西县(旧)",
"520523": "金沙县",
"520524": "织金县",
"520525": "纳雍县",
"520526": "威宁彝族回族苗族自治县",
"520527": "赫章县",
"520581": "黔西City",
"520600": "铜仁City",
"520602": "碧江District",
"520603": "万山District",
"520621": "江口县",
"520622": "玉屏侗族自治县",
"520623": "石阡县",
"520624": "思南县",
"520625": "印江土家族苗族自治县",
"520626": "德江县",
"520627": "沿河土家族自治县",
"520628": "松桃苗族自治县",
"522300": "黔西南布依族苗族自治州",
"522301": "兴义City",
"522302": "兴仁City",
"522322": "兴仁县(旧)",
"522323": "普安县",
"522324": "晴隆县",
"522325": "贞丰县",
"522326": "望谟县",
"522327": "册亨县",
"522328": "安龙县",
"522600": "黔东南苗族侗族自治州",
"522601": "凯里City",
"522622": "黄平县",
"522623": "施秉县",
"522624": "三穗县",
"522625": "镇远县",
"522626": "岑巩县",
"522627": "天柱县",
"522628": "锦屏县",
"522629": "剑河县",
"522630": "台江县",
"522631": "黎平县",
"522632": "榕江县",
"522633": "从江县",
"522634": "雷山县",
"522635": "麻江县",
"522636": "丹寨县",
"522700": "黔南布依族苗族自治州",
"522701": "都匀City",
"522702": "福泉City",
"522722": "荔波县",
"522723": "贵定县",
"522725": "瓮安县",
"522726": "独山县",
"522727": "平塘县",
"522728": "罗甸县",
"522729": "长顺县",
"522730": "龙里县",
"522731": "惠水县",
"522732": "三都水族自治县",
"530000": "云南",
"530100": "昆明City",
"530102": "五华District",
"530103": "盘龙District",
"530111": "官渡District",
"530112": "西山District",
"530113": "东川District",
"530114": "呈贡District",
"530115": "晋宁District",
"530122": "晋宁District(旧)",
"530124": "富民县",
"530125": "宜良县",
"530126": "石林彝族自治县",
"530127": "嵩明县",
"530128": "禄劝彝族苗族自治县",
"530129": "寻甸回族彝族自治县",
"530181": "安宁City",
"530300": "曲靖City",
"530302": "麒麟District",
"530303": "沾益District",
"530304": "马龙District",
"530321": "马龙县(旧)",
"530322": "陆良县",
"530323": "师宗县",
"530324": "罗平县",
"530325": "富源县",
"530326": "会泽县",
"530381": "宣威City",
"530400": "玉溪City",
"530402": "红塔District",
"530403": "江川District",
"530422": "澄江县(旧)",
"530423": "通海县",
"530424": "华宁县",
"530425": "易门县",
"530426": "峨山彝族自治县",
"530427": "新平彝族傣族自治县",
"530428": "元江哈尼族彝族傣族自治县",
"530481": "澄江City",
"530500": "保山City",
"530502": "隆阳District",
"530521": "施甸县",
"530523": "龙陵县",
"530524": "昌宁县",
"530581": "腾冲City",
"530600": "昭通City",
"530602": "昭阳District",
"530621": "鲁甸县",
"530622": "巧家县",
"530623": "盐津县",
"530624": "大关县",
"530625": "永善县",
"530626": "绥江县",
"530627": "镇雄县",
"530628": "彝良县",
"530629": "威信县",
"530630": "水富县(旧)",
"530681": "水富City",
"530700": "丽江City",
"530702": "古城District",
"530721": "玉龙纳西族自治县",
"530722": "永胜县",
"530723": "华坪县",
"530724": "宁蒗彝族自治县",
"530800": "普洱City",
"530802": "思茅District",
"530821": "宁洱哈尼族彝族自治县",
"530822": "墨江哈尼族自治县",
"530823": "景东彝族自治县",
"530824": "景谷傣族彝族自治县",
"530825": "镇沅彝族哈尼族拉祜族自治县",
"530826": "江城哈尼族彝族自治县",
"530827": "孟连傣族拉祜族佤族自治县",
"530828": "澜沧拉祜族自治县",
"530829": "西盟佤族自治县",
"530900": "临沧City",
"530902": "临翔District",
"530921": "凤庆县",
"530922": "云县",
"530923": "永德县",
"530924": "镇康县",
"530925": "双江拉祜族佤族布朗族傣族自治县",
"530926": "耿马傣族佤族自治县",
"530927": "沧源佤族自治县",
"532300": "楚雄彝族自治州",
"532301": "楚雄City",
"532302": "禄丰City",
"532322": "双柏县",
"532323": "牟定县",
"532324": "南华县",
"532325": "姚安县",
"532326": "大姚县",
"532327": "永仁县",
"532328": "元谋县",
"532329": "武定县",
"532331": "禄丰县(旧)",
"532500": "红河哈尼族彝族自治州",
"532501": "个旧City",
"532502": "开远City",
"532503": "蒙自City",
"532504": "弥勒City",
"532523": "屏边苗族自治县",
"532524": "建水县",
"532525": "石屏县",
"532527": "泸西县",
"532528": "元阳县",
"532529": "红河县",
"532530": "金平苗族瑶族傣族自治县",
"532531": "绿春县",
"532532": "河口瑶族自治县",
"532600": "文山壮族苗族自治州",
"532601": "文山City",
"532622": "砚山县",
"532623": "西畴县",
"532624": "麻栗坡县",
"532625": "马关县",
"532626": "丘北县",
"532627": "广南县",
"532628": "富宁县",
"532800": "西双版纳傣族自治州",
"532801": "景洪City",
"532822": "勐海县",
"532823": "勐腊县",
"532900": "大理白族自治州",
"532901": "大理City",
"532922": "漾濞彝族自治县",
"532923": "祥云县",
"532924": "宾川县",
"532925": "弥渡县",
"532926": "南涧彝族自治县",
"532927": "巍山彝族回族自治县",
"532928": "永平县",
"532929": "云龙县",
"532930": "洱源县",
"532931": "剑川县",
"532932": "鹤庆县",
"533100": "德宏傣族景颇族自治州",
"533102": "瑞丽City",
"533103": "芒City",
"533122": "梁河县",
"533123": "盈江县",
"533124": "陇川县",
"533300": "怒江傈僳族自治州",
"533301": "泸水City",
"533323": "福贡县",
"533324": "贡山独龙族怒族自治县",
"533325": "兰坪白族普米族自治县",
"533400": "迪庆藏族自治州",
"533401": "香格里拉City",
"533422": "德钦县",
"533423": "维西傈僳族自治县",
"540000": "西藏",
"540100": "拉萨City",
"540102": "城关District",
"540103": "堆龙德庆District",
"540104": "达孜District",
"540121": "林周县",
"540122": "当雄县",
"540123": "尼木县",
"540124": "曲水县",
"540126": "达孜县(旧)",
"540127": "墨竹工卡县",
"540171": "格尔木藏青工业园District",
"540172": "拉萨经济技术开发District",
"540173": "西藏文化旅游创意园District",
"540174": "达孜工业园District",
"540200": "日喀则City",
"540202": "桑珠孜District",
"540221": "南木林县",
"540222": "江孜县",
"540223": "定日县",
"540224": "萨迦县",
"540225": "拉孜县",
"540226": "昂仁县",
"540227": "谢通门县",
"540228": "白朗县",
"540229": "仁布县",
"540230": "康马县",
"540231": "定结县",
"540232": "仲巴县",
"540233": "亚东县",
"540234": "吉隆县",
"540235": "聂拉木县",
"540236": "萨嘎县",
"540237": "岗巴县",
"540300": "昌都City",
"540302": "卡若District",
"540321": "江达县",
"540322": "贡觉县",
"540323": "类乌齐县",
"540324": "丁青县",
"540325": "察雅县",
"540326": "八宿县",
"540327": "左贡县",
"540328": "芒康县",
"540329": "洛隆县",
"540330": "边坝县",
"540400": "林芝City",
"540402": "巴宜District",
"540421": "工布江达县",
"540422": "米林县",
"540423": "墨脱县",
"540424": "波密县",
"540425": "察隅县",
"540426": "朗县",
"540500": "山南City",
"540502": "乃东District",
"540521": "扎囊县",
"540522": "贡嘎县",
"540523": "桑日县",
"540524": "琼结县",
"540525": "曲松县",
"540526": "措美县",
"540527": "洛扎县",
"540528": "加查县",
"540529": "隆子县",
"540530": "错那县",
"540531": "浪卡子县",
"540600": "那曲City",
"540602": "色尼District",
"540621": "嘉黎县",
"540622": "比, such as县",
"540623": "聂荣县",
"540624": "安多县",
"540625": "申扎县",
"540626": "索县",
"540627": "班戈县",
"540628": "巴青县",
"540629": "尼玛县",
"540630": "双湖县",
"542400": "那曲Region(旧)",
"542421": "那曲县(旧)",
"542422": "嘉黎县(旧)",
"542423": "比, such as县(旧)",
"542424": "聂荣县(旧)",
"542425": "安多县(旧)",
"542426": "申扎县(旧)",
"542427": "索县(旧)",
"542428": "班戈县(旧)",
"542429": "巴青县(旧)",
"542430": "尼玛县(旧)",
"542431": "双湖县(旧)",
"542500": "阿里Region",
"542521": "普兰县",
"542522": "札达县",
"542523": "噶尔县",
"542524": "日土县",
"542525": "革吉县",
"542526": "改则县",
"542527": "措勤县",
"610000": "陕西",
"610100": "西安City",
"610102": "新城District",
"610103": "碑林District",
"610104": "莲湖District",
"610111": "灞桥District",
"610112": "未央District",
"610113": "雁塔District",
"610114": "阎良District",
"610115": "临潼District",
"610116": "长安District",
"610117": "高陵District",
"610118": "鄠邑District",
"610122": "蓝田县",
"610124": "周至县",
"610125": "鄠邑District(旧)",
"610200": "铜川City",
"610202": "王益District",
"610203": "印台District",
"610204": "耀州District",
"610222": "宜君县",
"610300": "宝鸡City",
"610302": "渭滨District",
"610303": "金台District",
"610304": "陈仓District",
"610305": "凤翔District",
"610322": "凤翔县(旧)",
"610323": "岐山县",
"610324": "扶风县",
"610326": "眉县",
"610327": "陇县",
"610328": "千阳县",
"610329": "麟游县",
"610330": "凤县",
"610331": "太白县",
"610400": "咸阳City",
"610402": "秦都District",
"610403": "杨陵District",
"610404": "渭城District",
"610422": "三原县",
"610423": "泾阳县",
"610424": "乾县",
"610425": "礼泉县",
"610426": "永寿县",
"610427": "彬县(旧)",
"610428": "长武县",
"610429": "旬邑县",
"610430": "淳化县",
"610431": "武功县",
"610481": "兴平City",
"610482": "彬州City",
"610500": "渭南City",
"610502": "临渭District",
"610503": "华州District",
"610522": "潼关县",
"610523": "大荔县",
"610524": "合阳县",
"610525": "澄城县",
"610526": "蒲城县",
"610527": "白水县",
"610528": "富平县",
"610581": "韩City",
"610582": "华阴City",
"610600": "延安City",
"610602": "宝塔District",
"610603": "安塞District",
"610621": "延长县",
"610622": "延川县",
"610623": "子长县(旧)",
"610625": "志丹县",
"610626": "吴起县",
"610627": "甘泉县",
"610628": "富县",
"610629": "洛川县",
"610630": "宜川县",
"610631": "黄龙县",
"610632": "黄陵县",
"610681": "子长City",
"610700": "汉中City",
"610702": "汉台District",
"610703": "南郑District",
"610721": "南郑县(旧)",
"610722": "城固县",
"610723": "洋县",
"610724": "西乡县",
"610725": "勉县",
"610726": "宁强县",
"610727": "略阳县",
"610728": "镇巴县",
"610729": "留坝县",
"610730": "佛坪县",
"610800": "榆林City",
"610802": "榆阳District",
"610803": "横山District",
"610821": "神木县(旧)",
"610822": "府谷县",
"610824": "靖边县",
"610825": "定边县",
"610826": "绥德县",
"610827": "米脂县",
"610828": "佳县",
"610829": "吴堡县",
"610830": "清涧县",
"610831": "子洲县",
"610881": "神木City",
"610900": "安康City",
"610902": "汉滨District",
"610921": "汉阴县",
"610922": "石泉县",
"610923": "宁陕县",
"610924": "紫阳县",
"610925": "岚皋县",
"610926": "平利县",
"610927": "镇坪县",
"610928": "旬阳县(旧)",
"610929": "白河县",
"610981": "旬阳City",
"611000": "商洛City",
"611002": "商州District",
"611021": "洛南县",
"611022": "丹凤县",
"611023": "商南县",
"611024": "山阳县",
"611025": "镇安县",
"611026": "柞水县",
"620000": "甘肃",
"620100": "兰州City",
"620102": "城关District",
"620103": "七里河District",
"620104": "西固District",
"620105": "安宁District",
"620111": "红古District",
"620121": "永登县",
"620122": "皋兰县",
"620123": "榆中县",
"620171": "兰州新District",
"620200": "嘉峪关City",
"620300": "金昌City",
"620302": "金川District",
"620321": "永昌县",
"620400": "白银City",
"620402": "白银District",
"620403": "平川District",
"620421": "靖远县",
"620422": "会宁县",
"620423": "景泰县",
"620500": "天水City",
"620502": "秦州District",
"620503": "麦积District",
"620521": "清水县",
"620522": "秦安县",
"620523": "甘谷县",
"620524": "武山县",
"620525": "张家川回族自治县",
"620600": "武威City",
"620602": "凉州District",
"620621": "民勤县",
"620622": "古浪县",
"620623": "天祝藏族自治县",
"620700": "张掖City",
"620702": "甘州District",
"620721": "肃南裕固族自治县",
"620722": "民乐县",
"620723": "临泽县",
"620724": "高台县",
"620725": "山丹县",
"620800": "平凉City",
"620802": "崆峒District",
"620821": "泾川县",
"620822": "灵台县",
"620823": "崇信县",
"620824": "华亭县(旧)",
"620825": "庄浪县",
"620826": "静宁县",
"620881": "华亭City",
"620900": "酒泉City",
"620902": "肃州District",
"620921": "金塔县",
"620922": "瓜州县",
"620923": "肃北蒙古族自治县",
"620924": "阿克塞哈萨克族自治县",
"620981": "玉门City",
"620982": "敦煌City",
"621000": "庆阳City",
"621002": "西峰District",
"621021": "庆城县",
"621022": "环县",
"621023": "华池县",
"621024": "合水县",
"621025": "正宁县",
"621026": "宁县",
"621027": "镇原县",
"621100": "定西City",
"621102": "安定District",
"621121": "通渭县",
"621122": "陇西县",
"621123": "渭源县",
"621124": "临洮县",
"621125": "漳县",
"621126": "岷县",
"621200": "陇南City",
"621202": "武都District",
"621221": "成县",
"621222": "文县",
"621223": "宕昌县",
"621224": "康县",
"621225": "西和县",
"621226": "礼县",
"621227": "徽县",
"621228": "两当县",
"622900": "临夏回族自治州",
"622901": "临夏City",
"622921": "临夏县",
"622922": "康乐县",
"622923": "永靖县",
"622924": "广河县",
"622925": "和政县",
"622926": "东乡族自治县",
"622927": "积石山保安族东乡族撒拉族自治县",
"623000": "甘南藏族自治州",
"623001": "合作City",
"623021": "临潭县",
"623022": "卓尼县",
"623023": "舟曲县",
"623024": "迭部县",
"623025": "玛曲县",
"623026": "碌曲县",
"623027": "夏河县",
"630000": "青海",
"630100": "西宁City",
"630102": "城东District",
"630103": "城中District",
"630104": "城西District",
"630105": "城北District",
"630106": "湟中District",
"630121": "大通回族土族自治县",
"630122": "湟中县(旧)",
"630123": "湟源县",
"630200": "海东City",
"630202": "乐都District",
"630203": "平安District",
"630222": "民和回族土族自治县",
"630223": "互助土族自治县",
"630224": "化隆回族自治县",
"630225": "循化撒拉族自治县",
"632200": "海北藏族自治州",
"632221": "门源回族自治县",
"632222": "祁连县",
"632223": "海晏县",
"632224": "刚察县",
"632300": "黄南藏族自治州",
"632301": "同仁City",
"632321": "同仁县(旧)",
"632322": "尖扎县",
"632323": "泽库县",
"632324": "河南蒙古族自治县",
"632500": "海南藏族自治州",
"632521": "共和县",
"632522": "同德县",
"632523": "贵德县",
"632524": "兴海县",
"632525": "贵南县",
"632600": "果洛藏族自治州",
"632621": "玛沁县",
"632622": "班玛县",
"632623": "甘德县",
"632624": "达日县",
"632625": "久治县",
"632626": "玛多县",
"632700": "玉树藏族自治州",
"632701": "玉树City",
"632722": "杂多县",
"632723": "称多县",
"632724": "治多县",
"632725": "囊谦县",
"632726": "曲麻莱县",
"632800": "海西蒙古族藏族自治州",
"632801": "格尔木City",
"632802": "德令哈City",
"632803": "茫崖City",
"632821": "乌兰县",
"632822": "都兰县",
"632823": "天峻县",
"632857": "大柴旦行政委员会",
"640000": "宁夏",
"640100": "银川City",
"640104": "兴庆District",
"640105": "西夏District",
"640106": "金凤District",
"640121": "永宁县",
"640122": "贺兰县",
"640181": "灵武City",
"640200": "石嘴山City",
"640202": "大武口District",
"640205": "惠农District",
"640221": "平罗县",
"640300": "吴忠City",
"640302": "利通District",
"640303": "红寺堡District",
"640323": "盐池县",
"640324": "同心县",
"640381": "青铜峡City",
"640400": "固原City",
"640402": "原州District",
"640422": "西吉县",
"640423": "隆德县",
"640424": "泾源县",
"640425": "彭阳县",
"640500": "中卫City",
"640502": "沙坡头District",
"640521": "中宁县",
"640522": "海原县",
"650000": "新疆",
"650100": "乌鲁木齐City",
"650102": "天山District",
"650103": "沙依巴克District",
"650104": "新CityDistrict",
"650105": "水磨沟District",
"650106": "头屯河District",
"650107": "达坂城District",
"650109": "米东District",
"650121": "乌鲁木齐县",
"650200": "克拉玛依City",
"650202": "独山子District",
"650203": "克拉玛依District",
"650204": "白碱滩District",
"650205": "乌尔禾District",
"650400": "吐鲁番City",
"650402": "高昌District",
"650421": "鄯善县",
"650422": "托克逊县",
"650500": "哈密City",
"650502": "伊州District",
"650521": "巴里坤哈萨克自治县",
"650522": "伊吾县",
"652300": "昌吉回族自治州",
"652301": "昌吉City",
"652302": "阜康City",
"652323": "呼图壁县",
"652324": "玛纳斯县",
"652325": "奇台县",
"652327": "吉木萨尔县",
"652328": "木垒哈萨克自治县",
"652700": "博尔塔拉蒙古自治州",
"652701": "博乐City",
"652702": "阿拉山口City",
"652722": "精河县",
"652723": "温泉县",
"652800": "巴音郭楞蒙古自治州",
"652801": "库尔勒City",
"652822": "轮台县",
"652823": "尉犁县",
"652824": "若羌县",
"652825": "且末县",
"652826": "焉耆回族自治县",
"652827": "和静县",
"652828": "和硕县",
"652829": "博湖县",
"652871": "库尔勒经济技术开发District",
"652900": "阿克苏Region",
"652901": "阿克苏City",
"652902": "库车City",
"652922": "温宿县",
"652923": "库车县(旧)",
"652924": "沙雅县",
"652925": "新和县",
"652926": "拜城县",
"652927": "乌什县",
"652928": "阿瓦提县",
"652929": "柯坪县",
"653000": "克孜勒苏柯尔克孜自治州",
"653001": "阿图什City",
"653022": "阿克陶县",
"653023": "阿合奇县",
"653024": "乌恰县",
"653100": "喀什Region",
"653101": "喀什City",
"653121": "疏附县",
"653122": "疏勒县",
"653123": "英吉沙县",
"653124": "泽普县",
"653125": "莎车县",
"653126": "叶城县",
"653127": "麦盖提县",
"653128": "岳普湖县",
"653129": "伽师县",
"653130": "巴楚县",
"653131": "塔什库尔干塔吉克自治县",
"653200": "和田Region",
"653201": "和田City",
"653221": "和田县",
"653222": "墨玉县",
"653223": "皮山县",
"653224": "洛浦县",
"653225": "策勒县",
"653226": "于田县",
"653227": "民丰县",
"654000": "伊犁哈萨克自治州",
"654002": "伊宁City",
"654003": "奎屯City",
"654004": "霍尔果斯City",
"654021": "伊宁县",
"654022": "察布查尔锡伯自治县",
"654023": "霍城县",
"654024": "巩留县",
"654025": "新源县",
"654026": "昭苏县",
"654027": "特克斯县",
"654028": "尼勒克县",
"654200": "塔城Region",
"654201": "塔City",
"654202": "乌苏City",
"654203": "沙湾City",
"654221": "额敏县",
"654223": "沙湾县(旧)",
"654224": "托里县",
"654225": "裕民县",
"654226": "和布克赛尔蒙古自治县",
"654300": "阿勒泰Region",
"654301": "阿勒泰City",
"654321": "布尔津县",
"654322": "富蕴县",
"654323": "福海县",
"654324": "哈巴河县",
"654325": "青河县",
"654326": "吉木乃县",
"659001": "石河子City",
"659002": "阿拉尔City",
"659003": "图木舒克City",
"659004": "五家渠City",
"659005": "北屯City",
"659006": "铁门关City",
"659007": "双河City",
"659008": "可克达拉City",
"659009": "昆玉City",
"659010": "胡杨河City",
"659011": "新星City",
"710000": "台湾",
"710100": "台北City",
"710101": "中正District",
"710102": "大同District",
"710103": "中山District",
"710104": "万华District",
"710105": "信义District",
"710106": "松山District",
"710107": "大安District",
"710108": "南港District",
"710109": "北投District",
"710110": "内湖District",
"710111": "士林District",
"710112": "文山District",
"710200": "新北City",
"710201": "板桥District",
"710202": "土城District",
"710203": "新庄District",
"710204": "新店District",
"710205": "深坑District",
"710206": "石碇District",
"710207": "坪林District",
"710208": "乌来District",
"710209": "五股District",
"710210": "八里District",
"710211": "林口District",
"710212": "淡水District",
"710213": "中和District",
"710214": "永和District",
"710215": "三重District",
"710216": "芦洲District",
"710217": "泰山District",
"710218": "树林District",
"710219": "莺歌District",
"710220": "三峡District",
"710221": "汐止District",
"710222": "金山District",
"710223": "万里District",
"710224": "三芝District",
"710225": "石门District",
"710226": "瑞芳District",
"710227": "贡寮District",
"710228": "双溪District",
"710229": "平溪District",
"710300": "桃园City",
"710301": "桃园District",
"710302": "中坜District",
"710303": "平镇District",
"710304": "八德District",
"710305": "杨梅District",
"710306": "芦竹District",
"710307": "大溪District",
"710308": "龙潭District",
"710309": "龟山District",
"710310": "大园District",
"710311": "观音District",
"710312": "新屋District",
"710313": "复兴District",
"710400": "台中City",
"710401": "中District",
"710402": "东District",
"710403": "西District",
"710404": "南District",
"710405": "北District",
"710406": "西屯District",
"710407": "南屯District",
"710408": "北屯District",
"710409": "丰原District",
"710410": "大里District",
"710411": "太平District",
"710412": "东势District",
"710413": "大甲District",
"710414": "清水District",
"710415": "沙鹿District",
"710416": "梧栖District",
"710417": "后里District",
"710418": "神冈District",
"710419": "潭子District",
"710420": "大雅District",
"710421": "新小District",
"710422": "石冈District",
"710423": "外埔District",
"710424": "大安District",
"710425": "乌日District",
"710426": "大肚District",
"710427": "龙井District",
"710428": "雾峰District",
"710429": "和平District",
"710500": "台南City",
"710501": "中西District",
"710502": "东District",
"710503": "南District",
"710504": "北District",
"710505": "安平District",
"710506": "安南District",
"710507": "永康District",
"710508": "归仁District",
"710509": "新化District",
"710510": "左镇District",
"710511": "玉井District",
"710512": "楠西District",
"710513": "南化District",
"710514": "仁德District",
"710515": "关庙District",
"710516": "龙崎District",
"710517": "官田District",
"710518": "麻豆District",
"710519": "佳里District",
"710520": "西港District",
"710521": "七股District",
"710522": "将军District",
"710523": "学甲District",
"710524": "北门District",
"710525": "新营District",
"710526": "后壁District",
"710527": "白河District",
"710528": "东山District",
"710529": "六甲District",
"710530": "下营District",
"710531": "柳营District",
"710532": "盐水District",
"710533": "善化District",
"710534": "大内District",
"710535": "山上District",
"710536": "新CityDistrict",
"710537": "安定District",
"710600": "高雄City",
"710601": "楠梓District",
"710602": "左营District",
"710603": "鼓山District",
"710604": "三民District",
"710605": "盐埕District",
"710606": "前金District",
"710607": "新兴District",
"710608": "苓雅District",
"710609": "前镇District",
"710610": "旗津District",
"710611": "小港District",
"710612": "凤山District",
"710613": "大寮District",
"710614": "鸟松District",
"710615": "林园District",
"710616": "仁武District",
"710617": "大树District",
"710618": "大社District",
"710619": "冈山District",
"710620": "路竹District",
"710621": "桥头District",
"710622": "梓官District",
"710623": "弥陀District",
"710624": "永安District",
"710625": "燕巢District",
"710626": "阿莲District",
"710627": "茄萣District",
"710628": "湖内District",
"710629": "旗山District",
"710630": "美浓District",
"710631": "内门District",
"710632": "杉林District",
"710633": "甲仙District",
"710634": "六龟District",
"710635": "茂林District",
"710636": "桃源District",
"710637": "那玛夏District",
"710700": "基隆City",
"710701": "中正District",
"710702": "七堵District",
"710703": "暖暖District",
"710704": "仁爱District",
"710705": "中山District",
"710706": "安乐District",
"710707": "信义District",
"710800": "新竹City",
"710801": "东District",
"710802": "北District",
"710803": "香山District",
"710900": "嘉义City",
"710901": "东District",
"710902": "西District",
"719001": "宜兰县",
"719002": "新竹县",
"719003": "苗栗县",
"719004": "彰化县",
"719005": "南投县",
"719006": "嘉义县",
"719007": "云林县",
"719008": "屏东县",
"719009": "台东县",
"719010": "花莲县",
"719011": "澎湖县",
"719012": "金门县",
"719013": "连江县",
"810000": "香港",
"810101": "中西District",
"810102": "湾仔District",
"810103": "东District",
"810104": "南District",
"810105": "油尖旺District",
"810106": "深水埗District",
"810107": "九龙城District",
"810108": "黄大仙District",
"810109": "观塘District",
"810110": "北District",
"810111": "大埔District",
"810112": "沙田District",
"810113": "西贡District",
"810114": "荃湾District",
"810115": "屯门District",
"810116": "元朗District",
"810117": "葵青District",
"810118": "离岛District",
"820000": "澳门",
"820101": "花地玛堂District",
"820102": "圣安多尼堂District",
"820103": "大堂District",
"820104": "望德堂District",
"820105": "风顺堂District",
"820106": "嘉模堂District",
"820107": "圣方济各堂District",
"820108": "路氹城",
"820109": "澳门新城"
}
Error code
Response的Error code
code | Description | Note |
---|---|---|
100001 | Operate after sign-in | |
100002 | Sign-in invalid | |
100003 | Can not operate it since the user no permission | |
100004 | Account has expired | |
100005 | Parameter abnormal | Missing required parameter |
201010 | Unable to create sequential interview started in the past | |
201011 | Unable to find available interview application | |
201012 | Unable to change interview start time after the interview started | |
201013 | Unable to change interview start time to past time | |
201014 | Unable to change interview location after the interview started | |
201015 | Unable to delete Candidate | |
201016 | Unable to change interview round after the interview started | |
201017 | The resume type cannot be modified after the interview has started | |
201018 | Unable to delete selected room after the interview started | |
201019 | Please select other locations since it is already deleted. | |
201020 | Temporary room name can not be same with others | |
201021 | You have been check-in in ${room name} | |
201022 | The interviewer is not in the room | |
201023 | The interviewer does not have this round | |
201024 | This room has other interviewers | |
201025 | Unable to move Candidate to the room which is in interviewing | |
201026 | The interviewer can not quited from the room which is in interviewing | |
201030 | The queue does not exist | |
201031 | Candidate in interviewing can not change interviewer | |
201032 | Candidate is not in the queue | |
201033 | Candidates for other sessions or rounds cannot be moved | |
201040 | Feedback failed to create sequential interview | |
201041 | Interview grouping time can not be less than interview start time | |
201042 | The current sequential interview has been invalid | |
201043 | Apply position on site can not be empty | |
201044 | The Candidate can not be empty | |
201045 | The status of sequential interview on site does not match | |
201046 | The application time of sequential interview on site does not match | |
201047 | sequential interview allow the application position on site does not match | |
201048 | There is already an application for the same position in this sequential interview | |
201049 | Check that candidates apply for the position that an application for the same position exists and whose application process is after the first interview process | |
201050 | Candidate has other position is in process | |
201051 | Duplicate interviewer | |
201052 | The number of multi-person interviews is set abnormally | |
201053 | The status modification of multi-person interviews is abnormal and can only be modified before the interview | |
201054 | multi-person interview rounds get abnormal, an interviewer can only exist under one round | |
201055 | Obtaining feedback abnormal, the number of feedback templates for abnormal feedback data cannot be greater than 1 | |
201056 | Get abnormal feedback of data | |
201057 | The Candidate in the interview can not be moved | |
201058 | Candidate or application does not exist | |
201059 | Checked in interviewer can not be deleted | |
201060 | Candidate validation abnormal | |
211010 | Conflict with this interviewer's scheduled interview | |
211011 | Round name cannot be empty | |
211012 | Round name and English name cannot be the same | |
211013 | pdf rendering failed | |
211014 | The weight interview evaluation form module calculation type must all be weight | |
211015 | The sum of weights is not 100 | |
211016 | The weight of the scoring question cannot be empty | |
211017 | Lack position id | |
211018 | The selected interview evaluation form cannot be found, please refresh and try again | |
211019 | Recruitment mode cannot be found | |
211020 | Please ensure that the scoring questions have uniform scores | |
211021 | Cannot find the designated interview feedback | |
211022 | Export up to 7 consecutive days of interviews | |
211030 | No matching interview records found | |
211031 | Interviewer has filled the feedback | |
211032 | The Candidate no-show | |
211033 | Invalid interview feedback | |
211034 | Only interviewer can fill interview feedback | |
211037 | Interview feedback failed | |
211041 | The user has not bound to Feishu | |
211090 | The evaluation template has been modified | |
221001 | Scheduled interview does not exist | |
221002 | Scheduled interview cannot be cancelled | |
221003 | The interview status of unavailable sessions cannot be changed | |
221004 | Please disabled it after moving all Candidates out since this session has Candidate. | |
221005 | The current grid does not exist | |
221006 | Cancelled or locked interview appointments cannot be changed | |
221007 | Only appointment interviews whose status is unscheduled and scheduled can be modified | |
221008 | Interview appointment is closed | |
221009 | Only appointment interviews whose status is in schedule can be modified | |
221010 | No modification times | |
221011 | The status of interview is cannot schedule | |
221012 | The scheduled interview data is abnormal and the necessary fields are missing | |
221013 | Currently no time available | |
221014 | The current group does not exist | |
221015 | The application of scheduling interview does not exist | |
221016 | Unable to move the Candidate to disabled sessions | |
221017 | The targeted session is full | |
221018 | Archive reason cannot be found | |
221019 | Interview appointment is locked | |
221020 | Service calling abnormal | |
221021 | Abnormal data in scheduling interview association table | |
221022 | Modified time is the same as the scheduled time, no modification | |
221023 | Interviewer abnormal | |
221024 | Unable to re-lock the interview appointment in the current status | |
300100 | Template does not exist | |
300101 | Template name cannot be empty | |
300102 | The length of name cannot exceed {} characters | |
300103 | There is already a template with the same name in the system, please rename and try again | |
300104 | Unable to delete since this is a default template | |
300105 | Unknown template type | |
300106 | Office templates do not currently support error snapshots | |
300200 | Field name is empty | |
300201 | Field type is empty | |
300202 | Field type is invalid | |
300203 | Field name is too long | |
300204 | Field names cannot be same | |
300205 | Field name does not exist | |
300206 | Field must review | |
300207 | Wrong salary type | |
300208 | Field value is invalid | |
300300 | Must choose approver at each stage | |
300301 | Duplicate stage approver | |
300302 | Selected user does not exist | |
300303 | The user does not have the permission to operate department | |
300304 | Offer approval process does not exist | |
300305 | Offer approval status is empty | |
300306 | There is no approval node in this approval process | |
300307 | Failed to create approval process diary | |
300308 | Approval process id is empty | |
300309 | Approver list is empty | |
300310 | Unable to modify since Offer approval is in process | |
300311 | Not in offer approval status | |
300312 | Unable to set approval process since the Offer approval is in process | |
300313 | Offer approval process template does not exist | |
300314 | Offer approval process template id is empty | |
300315 | Unable to cancel since Offer approval is in process | |
300316 | There is an illegal offer approval status | |
300317 | accessToken is empty | |
300318 | foraward AccessToken produce failed | |
300319 | Offer approved | |
300320 | Unsupported Offer approval stage | |
300321 | Approval has been approved | |
300322 | This user is not the approver of the offer | |
300323 | Approval has been approved | |
300400 | Parameter error | |
300401 | Role error | |
300402 | User error | |
300500 | Interface return value error | Error calling other services |
300501 | User error | Application does not exists |
300502 | Application has been archived | |
300503 | Invalid address | |
300504 | Invalid job level | |
300505 | Send text processing error | |
300506 | Must pass application id | |
300507 | Position does not exist | |
300508 | Recruitment mode error | |
300509 | Application current stage error | |
300510 | hc cannot be associated | |
300511 | Job family exists | |
300512 | Failed to update onboarding date | |
300513 | Failed to update application | |
300514 | This application has been updated | |
300515 | Candidate does not exist | |
300516 | Candidate email is empty | |
300517 | Candidate phone is empty | |
300518 | Insufficient SMS balance | |
300519 | Failed to create operation record | |
300520 | Archive talent pool cannot be found | |
300600 | Offer does not exist | |
300601 | No approval process in Offer | |
300602 | Offer id is empty | |
300603 | Failed to get Offer attachment URL | |
300604 | Offer creator is empty | |
300605 | The position info in Offer is empty | |
300606 | Offer status error | |
300607 | Offer acceptance status does not exist | |
300608 | Offer has been accepted | |
300609 | Offer sending history has been accepted | |
300610 | Failed to delete Offer, please refresh and try again | |
300611 | Offer cannot be deleted since it's approval is in process | |
300612 | Offer has been existed in application | |
300613 | Offer sending history does not exist | |
300614 | Offer sending history has been processed or expired | |
300615 | Unable to edit Offer details | |
300616 | Failed to create Offer | |
300617 | Unable to send since Offer approval has been denied | |
300618 | The external system is not enabled to create Offer | |
300619 | Offer creator does not exist | |
300620 | This creator does not have the permission to creat offer | |
300621 | This user does not have the permission to send offer | |
300622 | Field cannot be empty | |
300800 | kafka consumption data abnormal | |
400009 | The following operation failed | |
400010 | Select position error | |
400011 | Position does not exist | |
400012 | Failed to read headhunting company settings! | |
400013 | Failed to get configuration info | |
400014 | Failed to get position info | |
400015 | Failed to get source info | |
400016 | Failed to clear Candidate token | |
400017 | The Candidate is in the protection | |
400018 | Position has been closed | |
400019 | Headhunter contract not found or contract invalid/disabled | |
400020 | Failed to get source info of headhunter | |
400021 | Candidate positions are not uniform | |
400022 | Initial screen does not exist | |
500101 | Beisen server abnormal | |
500102 | Beisen returns abnormal data | |
500103 | Unbound Beisen service | |
500301 | Nowcoder server abnormal | |
500302 | Nowcoder returns abnormal data | |
500303 | Unbound Nowcoder service | |
700010 | Failed to check similar Candidate | |
700011 | Failed to get Candidate info | |
700012 | Failed to get configuration info | |
700013 | Select position error | |
700014 | Position does not exist | |
700015 | Headhunter contract not found or contract invalid/disabled | |
700016 | Failed to get the result of checking similar Candidate under the same position |