Switch API document version
Apinew interface
Switch toApinew interface
Exam/Assessment、PES(Pre-employment screening)、Video interview interface guidance (platform)
Switch toExam/Assessment、PES(Pre-employment screening)、Video interview interface guidance
Offer API
GetofferCustom field list
Request example
$ curl https://api.mokahr.com/api-platform/v1/offers/custom_fields
Response example
{
"social": [
{
"id": 496,
"name": "dmj-offer",
"type": 1,
"detail": null,
"hire_mode": 1
},
{
"id": 281,
"name": "子公司",
"type": 6,
"detail": [
"子公司1",
"子公司2",
"子公司3"
],
"hire_mode": 2
},
{
"id": 456,
"name": "offer-校-年月日",
"type": 9,
"detail": null,
"hire_mode": 2
}
],
"campus": [
{
"id": 273,
"name": "Time period4",
"type": 7,
"detail": null,
"hire_mode": 2
},
{
"id": 276,
"name": "Single line text",
"type": 1,
"detail": null,
"hire_mode": 2
},
{
"id": 277,
"name": "家庭住址",
"type": 1,
"detail": null,
"hire_mode": 2
}
]
}
HTTP request
GET https://api.mokahr.com/api-platform/v1/offers/custom_fields
Response
Response body in JSON
Field | Type | Description |
---|---|---|
social | array | Custom field for experienced hires |
social[].id | integer | Custom fieldid |
social[].name | string | Custom field name |
social[].type | integer | Custom field type: 1 Single line text,2 Multiple-line text,3 Yes-or-No question,4 Select year and month,6 Choice question,7 Time period,8 Offer associated HC,9 Date,10 Number |
social[].detail | array | Options of custom field |
social[].hire_mode | integer | Recruitment type: 1 experienced hires, 2 Campus recruitment |
campus | array | Custom field for campus recruitment |
campus[].id | integer | Custom fieldid |
campus[].name | string | Custom field name |
campus[].type | integer | Custom field type: 1 Single line text,2 Multiple-line text,3 Yes-or-No question,4 Select year and month,6 Choice question,7 Time period,8 Offer associated HC,9 Date,10 Number |
campus[].detail | array | Options of custom field |
campus[].hire_mode | integer | Recruitment type: 1 experienced hires, 2 Campus recruitment |
UserAPI
Sync personnel info to Moka system
The Moka system will synchronize (add, update, mark and delete) the personnel in the current system according to the requested list. Synchronization uses any one of the user's email, employee number, and phone as the primary key, and compares it with any of the user's email, employee number, and phone in the system: 1、The current system does not have it, but it does exist during synchronization: add a new user 2、The current system has it during synchronization: update the existing user's information. If it exists during synchronization, the current system job status is marked as deleted, and after updating, the status changes to normal.
HTTP request
POST https://api.mokahr.com/api-platform/v1/users/syncInfo
Request example (JSON)
{
"usersInfo": [{
"email": "test@mokahr.com",
"name": "张三",
"phone": "18710000182",
"number": "101",
"role": 10,
"departmentCode": ["888","999"],
"superiorEmail": "superior@mokahr.com",
"deactivated": 0,
"thirdPartyId": "E12345",
"updateDepartment": true,
"updateSuperiorEmail": true,
"autoActivated": 1,
"locale":"en-English"
}]
}
Operation successful
{
"success": true
}
Operation failed
{
"success": false,
"errorMessage": "Error info "
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
Yes | string | ||
name | Yes | string | Name |
phone | Yes | string | Phone |
number | No | string | Employee number |
role | Yes | integer | Role Optional value: 0 :Referrer 5 : Reception 10 :Interviewer 20 :Hiring manager 25 :Senior hiring manager 30 :HR 40 :Administrator 50 :Super-administrator It can be used when the current field is created, and does not support data update. If it is updated, it will go to the corresponding v2 interface.。 |
roleId | No | integer | Custom roleid:It can be used when the current field is created, and does not support data update. If it is updated, it will go to the corresponding v2 interface. |
departmentCode | Yes | array | Department,Pass an empty array for all departments |
superiorEmail | Yes | string | Upper class email,Pass an empty string will*clear*reporting relationship in moka system,You can update the reporting relationship by setting the updateSuperiorEmail parameter |
deactivated | Yes | integer | Whether be disabled Optional value: 0 :Available 1 :Disabled |
thirdPartyId | Yes | string | Functional field,Used to SSO,Not pass empty string |
updateDepartment | No | boolean | !!!Note:The default is true if not pass Whether to update the department true :Updatefalse :Not update |
updateSuperiorEmail | No | boolean | Whether to update the superior reporter Optional value: true :Update false :Not update Default istrue |
autoActivated | No | integer | Whether to auto-activate, senior manager, HR, administrator and supervisor roles need to send emails for account activation by default. Optional value: 0 :Do not activate automatically, send an email to the user for manual activation 1 :Auto-activation, the system generates a default password for auto-activation Passing an empty string defaults to 0 |
locale | No | string | User language Optional value: zh-CN :Chinese en-US :EnglishChinese by default |
Handle
The Moka system will sync (add and update) users in the current system according to the email and employee number of each user in the requested list.
Possible error info
errorMessage | Description |
---|---|
The personnel information synchronization switch is not turned on | |
Parameter format is incorrect | such as:Department must be array |
Sync up to 100 users at a time | |
Email and employee number cannot be empty | |
Role is an integer or an empty string | The empty string default interviewer |
Missing required parameter | All are required parameters No pass |
No corresponding department information found | When organization structure synchronization is enabled No matching departments were found |
The phone number has been used by another account of the company,Please try other phone | |
This email has been used by other user | |
This employee number has been used by other user | |
At least one administrator | |
Insufficient of available senior manager accounts | |
Insufficient of available accounts | |
System error | |
... |
Precautions
For debugging, please contact the relevant IC to open。 Please confirm that the organizational structure synchronization is enabled, and the organizational structure data has been synchronized, otherwise the personnel department information will be processed as the whole department Email and employee number cannot be empty。 Only built-in roles are supported,Role information is empty or 0 default interviewer。 The user information for each synchronization cannot exceed 100. When a user makes an error during synchronization, the synchronization will stop and an error will be reported. The prefix of (email or employee number) will be added before the error message. And the data from before the error is reported has been successfully synchronized.
CandidateAPI
Get candidate info
Request example
curl --location --request GET 'https://api.mokahr.com/api-platform/v1/data/ehrApplications?stage=all&applicationId=333333333' \
--header 'Authorization: Basic TW4xY**********ckpDdnk6' \
--data-raw ''
Response example
{
"data": [{
"applicationId": 47151744,
"candidateId": 28739723,
"name": "张三",
"phone": null,
"email": "yang111@163.com",
"gender": null,
"birthYear": null,
"birthDate": "2020-03-17T00:00:00.000Z",
"nationality": null,
"experience": null,
"ethnic": null,
"certificateType": null,
"citizenId": null,
"nativePlace": "",
"source": "Other source",
"sourceType": 2,
"sourceList": [
{
"name": "Other source",
"isBuiltin": true
}, {
"id": 4,
"name": "Historical source",
"isBuiltin": true
}
],
"academicDegree": null,
"lastSpeciality": "Human resources management",
"married": null,
"jobCommitment": " Full-time",
"hireMode": 1,
"departmentCode": null,
"parentDepartmentCode": null,
"resumeKey": null,
"stageName": "沟通offer",
"nativePlaceCode": null,
"nationalityCode": null,
"genderCode": null,
"academicDegreeCode": null,
"ethnicCode": null,
"lastCompany": "郑州***限公司",
"campus_site_id": 1,
"campus_site_name": "哈尔冰佛学院",
"job": {
"title": "test",
"department": "xinjan2",
"departmentCode": null,
"parentDepartmentCode": null,
"departmentPath": "华北Region/二级财务部/产品部/产研部/xinjan2",
"jobId": "39d3d5c9-949e-40d4-8d4b-5cb247d327a8",
"customFields": [
{
"name": "职位-年月",
"value": "2019-01"
}
]
},
"jobManager": {
"name": "test",
"email": "11q1@qq.com",
"phone": "17611232222",
"employeeId": "01"
},
"officeweb365Url": null,
"officeweb365PrintUrl": null,
"resumePdfMeta": null,
"portraitUrl": null,
"resumeUrl": "",
"educationInfo": [{
"id": 34263162,
"startDate": "",
"endDate": "",
"school": null,
"speciality": null,
"academicDegree": null,
"startTime": null,
"endTime": null,
"now": false
}],
"experienceInfo": [{
"id": 76685202,
"startDate": "",
"endDate": "",
"company": null,
"title": null,
"startTime": null,
"endTime": null,
"now": false,
"underlingNumber": "5"
}],
"awardInfo": [{
"awardDate": null,
"awardName": null
}],
"customFields": [{
"name": "Single line text",
"value": "122",
"section": "题型测试",
"index": 0
}, {
"name": "Field呀",
"value": "1333",
"section": "1测试",
"index": 0
}, {
"name": "我叫何为",
"value": "题型0001",
"section": "测试",
"index": 0
}, {
"codes": "",
"name": "T选择",
"value": "A",
"section": "1测试",
"index": 0
}, {
"name": "Field呀",
"value": "133333333",
"section": "1测试",
"index": 0
}, {
"name": "我叫何为",
"value": "题型0002",
"section": "1测试",
"index": 0
}, {
"codes": "",
"name": "T选择",
"value": "B:4",
"section": "1测试",
"index": 0
}, {
"name": "T多文本 ",
"value": "多文本 Required",
"section": "basicInfo"
}, {
"codes": "",
"name": "T确认型",
"value": "Y",
"section": "basicInfo"
}],
"interviewers": [],
"interviewFeedbackUrl": null,
"referrer": {
"name": "杨",
"email": "11111@mokahr.com",
"phone": "15001802222",
"number": "2019"
},
"headcountInfo": [],
"jobRanksInfo": [],
"offer": {
"approvalStatus": "APPROVED",
"salaryNumber": null,
"checkinDate": "2018-09-20T13:00:07.000Z",
"location": "上海市 普陀区 XXXX大学XXXX教室",
"creator": {
"name": "报表_HR",
"email": "mce35@yuoia.com"
},
"finishedAt": null,
"customFields": [{
"name": "合同 Date",
"value": "2022"
}, {
"name": "转正 Date",
"value": "2018-09-20"
}, {
"name": "自定义 - 据offer后去向",
"value": null
}, {
"name": "测试123",
"value": null
}, {
"name": "自定义offerField",
"value": null
}, {
"name": "多行",
"value": null
}, {
"name": "222按时",
"value": null
}, {
"name": "1212111111",
"value": null
}],
"hcInfo": null,
"jobRankInfo": 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="
}
],
"ehrCandidateExternalLink": "https://cdn.mokahr.com/forward/candidate/info?access_token=93e0eb37-6a5c-4fe4-91db-0579a844fb51"
},
{
"applicationId": 47168265,
"candidateId": 28755998,
"name": "test",
"phone": "17600000000",
"email": "111111@qq.com",
"gender": null,
"birthYear": null,
"nationality": null,
"experience": null,
"ethnic": null,
"citizenId": null,
"nativePlace": "",
"source": "Other",
"sourceType": 2,
"academicDegree": null,
"lastSpeciality": "Human resources management",
"married": null,
"jobCommitment": " Full-time",
"hireMode": 1,
"departmentCode": null,
"parentDepartmentCode": null,
"resumeKey": null,
"stageName": "沟通offer",
"nativePlaceCode": null,
"nationalityCode": null,
"genderCode": null,
"academicDegreeCode": null,
"ethnicCode": null,
"lastCompany": null,
"campus_site_id": 0,
"campus_site_name": null,
"job": {
"title": "test",
"department": "xinjan2",
"departmentCode": null,
"parentDepartmentCode": null,
"departmentPath": "华北Region/二级财务部/产品部/产研部/xinjan2",
"jobId": "ea932057-2637-4408-98a2-a3366b4ade14",
"customFields": [
{
"name": "职位-年月",
"value": "2019-01"
}
]
},
"jobManager": {
"name": "test",
"email": "11q1@qq.com",
"phone": "17611232222",
"employeeId": "01"
},
"officeweb365Url": null,
"officeweb365PrintUrl": null,
"resumePdfMeta": null,
"portraitUrl": null,
"resumeUrl": "",
"educationInfo": [],
"experienceInfo": [],
"awardInfo": [],
"customFields": [],
"interviewers": [],
"interviewFeedbackUrl": null,
"referrer": null,
"headcountInfo": [],
"jobRanksInfo": [],
"offer": {
"salaryNumber": 111,
"checkinDate": "2018-09-20T12:58:17.000Z",
"location": "上海市 普陀区 XXXX大学XXXX教室",
"creator": {
"name": "报表_HR",
"email": "mc435@yuoia.com"
},
"finishedAt": null,
"customFields": [{
"name": "合同 Date",
"value": "2022-03"
}, {
"name": "转正 Date",
"value": "2018-09-20"
}, {
"name": "自定义 - 据offer后去向",
"value": null
}, {
"name": "测试123",
"value": null
}, {
"name": "自定义offerField",
"value": null
}, {
"name": "多行",
"value": null
}, {
"name": "222按时",
"value": null
}, {
"name": "1212111111",
"value": null
}],
"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="
}
],
"examReportLinks": [
{
"name": "Exam结果链接",
"url": "https://t.cn/XXXXXX"
}
],
"exam Attachments": [
{
"name": "Exam结果",
"url": "https://cdn.mokahr.com/1234567-4962-4309-b507-2273bf2499c8.pdf?OSSAccessKeyId=BBc12XXIQWCGUAZO&Expires=1505300229&Signature=Vdw6zpNH8HTUnu1FvhSjdXiqK6Q="
}
],
"ehrCandidateExternalLink": "https://cdn.mokahr.com/forward/candidate/info?access_token=93e0eb37-6a5c-4fe4-91db-0579a844fb51",
"invitationUpdateStatus": 1
}],
"next": "47168265"
}
Get candidate info
HTTP request
GET https://api.mokahr.com/api-platform/v1/data/ehrApplications
Request check
Field | Required | Type | Description |
---|---|---|---|
applicationId | No | string | Candidate application ID Note: 1、If there is this parameter, the following parameters are invalid;To obtain multiple candidate information, separate them with commas (,),, such as:81,82,83 2、The applicationId and stage parameters must be passed one |
stage | No | string | offer(Offer stage) 1、pending_checkin(To be onboarded) 2、all(Offer stage and to be onboarded stage Note::The applicationId and stage parameters must be passed one,If there is no candidate in the current search stage, a server exception will be prompted |
No | string | Candidate email | |
phone | No | string | Candidate phone |
movedAtStartTime | No | string | Start time(Time of moving to this stage) |
movedAtEndTime | No | string | End time(Time of moving to this stage) |
limit | No | string | Number of entries per page for pagination,Default is20,Maximux is 20 |
fromTime | No | No | No this parameter in this interface |
order | No | string | Sort by pulling data,The sort key is the date of entering the current stage.Optional values are DESC Pull in order from newest to oldest,This is default value ASC Pull in order from oldest to newest 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) |
next | No | string | Paging parameter, if there is more data to be pulled, there will be a next field in the response json, you only need to add this next parameter to the query for the next request. If there is no next field in the response, it means that there is no more dataNote: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) |
invitationUpdateStatus | No | integer | Invitation to update status 0、Not invited 1、Not update 2、Updated |
Response data
Field | Type | Description |
---|---|---|
candidateId | integer | The candiate unique id in Moka |
applicationId | integer | The application unique id of candidate in Moka |
name | string | Name |
phone | string | Phone |
string | ||
prefixPhone | string | Country calling code |
gender | string | Gender,one of the following values:Male ,Female |
created_at | string | Resume in-system time |
birthYear | integer | Birthyear,, such as1990 |
birthDate | string | Birthdate |
ethnic | string | Ethnicity |
certificateType | integer | Certificate type 1 : id card,2 : Hong Kong id card,3 : Macau id card,4 :Taiwan id card,5 : Passport,6 : Other identity document |
citizenId | string | identification No. |
nationality | string | Country/Region |
nativePlace | string | Birthplace |
experience | integer | Work experience,0 Graduates,-1 Students,Other numbers indicate specific years |
portraitUrl | string | Image address of the candidate's avatar,The link is valid for1hour |
hireMode | integer | Recruitment mode,1 : experienced hires, 2 : Campus recruitment |
finishedAt | string | Recruitment goal finish time |
source | string | Source,, such asLagou |
sourceList | Array | Source level,The array is arranged in the order of first-level source, second-level source, and the order of third-level source, second-level source, and third-level source. |
sourceList[].id | integer | Sourceid(The id of the first-level source does not existid) |
sourceList[].name | string | Source name |
sourceList[].isBuiltin | boolean | Whether the system has a built-in source |
sourceType | integer | Source,one of the following values:1 ,2 ,3 。1 Active search ,2 Direct delivery ,3 Talent recommendation 。PS:It will not be used from 2020-03-164 Headhunting referral |
location | string | Location,, such asBeijing |
lastCompany | string | Recent company,one of the following values:null no recent company,xxx Served company name |
academicDegree | string | Highest education,one of the following values:Bachelor degree ,Master degree ,Doctor degree ,Senior high school ,Junior college ,Technical secondary school ,MBA ,Other |
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 emptynull,Code details refer to Attachment) |
genderCode | integer | Gender code(null when gender is emptynull,Code details refer to Attachment) |
academicDegreeCode | integer | Education code(null when education is emptynull,Code details refer to Attachment) |
ethnicCode | integer | Ethnicity(null when ethnicity is emptynull,Code details refer to Attachment) |
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 | Whether the end time represents "to date"。, such astrue 。If it is true , the value of endDate may be any value, just ignore endDate at this time |
educationInfo[].school | string | School |
educationInfo[].speciality | string | Major |
educationInfo[].academicDegree | string | Education,one of the following values:Bachelor degree ,Master degree ,Doctor degree ,Senior high school ,Junior college ,Technical secondary school ,MBA ,Other |
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 | Whether the end time represents "to date"。, such asfalse 。If it is true , the value of endDate may be any value, just ignore endDate at this time |
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[].size | string | Company size |
awardInfo[] | array | Awards |
awardInfo[].awardDate | datetime | Winning date |
awardInfo[].awardName | string | Award name |
resumeUrl | string | Resume download link,HTTP GET requests this URL to download the original resume file. This link is time-sensitive, and the expiration time is 1 hour. It needs to be downloaded and saved on the server as soon as possible after receiving the request. |
job | object | Position info |
job.jobId | string | 职位ID |
job.title | string | Job title |
job.department | string | Department |
job.departmentPath | string | The full path of the department, from superior to subordinate, separated by / |
job.departmentCode | string | Departmentcode |
job.parentDepartmentCode | string | Parent departmentcode |
job.competencyType | string | Function type |
job.jobDescription | string | Job description |
job.customFields | array | jobCustom field |
job.customFields[].name | string | jobCustom field name |
job.customFields[].value | string | jobCustom 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 | Interviewid |
interviewers[].groupId | string | Interview groupid |
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 interview not conducted , Feedback filled , Feedback not filled |
interviewers[].status | string | Interview status Cancelled , unfinished , Finished |
interviewers[].round | integer | Interview rounds,1 : 1st round,2 : 2nd round,3 : Final round ,etc. |
interviewers[].roundName | string | Interview round name,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(Cityid) |
interviewers[].locationAddress | string | Interview location(Full address) |
interviewers[].result Deprecated | integer | Interview result 1 : Very dissatisfied, 2 : Dissatisfied, 3 : Satisfaction, 4 : Very satisfied |
interviewers[].resultName | string | Interview feedback |
interviewers[].resultType | integer | Type of interview feedback result 0 : Dissatisfied 1 : Satisfaction |
interviewers[].feedback | string | Interview feedback content |
interviewers[].resultTime | string | Interview feedback filling time |
interviewers[].feedbackTemplateResult | array | Information of interview evaluation |
interviewers[].feedbackTemplateResult[].type | number Question type, 1 : Scoring question, 2 : Multiple choice, 3 : Description, 4 : Multiple response |
|
interviewers[].feedbackTemplateResult[].title | string | Question title |
interviewers[].feedbackTemplateResult[].description | string | Question description |
interviewers[].feedbackTemplateResult[].result | number | Total score |
interviewers[].feedbackTemplateResult[].calcScoreType | string | avg : Average, total : Sum (only valid when type is 1) |
interviewers[].feedbackTemplateResult[].scoreType | number | 5 means total score is 5,10 means total score is 10(only valid when type is 1) |
interviewers[].feedbackTemplateResult[].needReason | string | Whether need score review(only valid when type is 1) |
interviewers[].feedbackTemplateResult[].subjects | array | Information about each sub-question |
interviewers[].feedbackTemplateResult[].subjects[].type | number | Question type, 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: 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 description string question type=2 single-choice question, the return value is "result": 0, Question type=4 multiple choice question return value is "result":[1,2] |
interviewers[].feedbackTemplateResult[].subjects[].reason | string | Score review |
interviewers[].feedbackTemplateResult[].subjects[].options | string | Options string array(only valid when type is 2) |
data[].interviewInfo[].interviewerFeedbacks[].satisfactionRecord | object | Related info of interview satisfaction |
data[].interviewInfo[].interviewerFeedbacks[].satisfactionRecord.sendTime | string | The sending time of interview satisfaction evaluation |
data[].interviewInfo[].interviewerFeedbacks[].satisfactionRecord.isAnonymous | Boolean | Whether to anonymously evaluate |
data[].interviewInfo[].interviewerFeedbacks[].satisfactionRecord.content | string | Evaluate content,jsonFormat: {"customFields":[{"options":[//Options"Options1","Options2","Options3"],"subTitle":"Description of multiple choice questions111",//Sub-title"title":"Multiple choice",//Title"type":"single",//TypesingleMultiple choice,mutiSelectMultiple response,describeDescription"value":"0"//Multiple choice value(Subscripts start from 0)},{"options":["Options11","Options22","Options33","Options44"],"subTitle":"Description of multiple response questions333","title":"Multiple response","type":"mutiSelect",//Multiple response"value":"[0,2,1]"//Multiple response value(Subscripts start from 0,No order)},{"subTitle":"Description4444","title":"Description","type":"describe",//Description"value":"Description question result"//Description question value}],"essaySectionTitle":"Other comment",//Other comment(When setting the evaluation form, you can configure whether to display it through the switch)"essayValue":"Other evaluation result"//Values corresponding to other evaluation} |
data[].interviewInfo[].interviewerFeedbacks[].satisfactionRecord.satisfactionDimensions | array | Dimension array(Interview process |
data[].interviewInfo[].interviewerFeedbacks[].satisfactionRecord[].name | string | Dimension name |
data[].interviewInfo[].interviewerFeedbacks[].satisfactionRecord[].name | string | Dimension corresponding value |
interviewFeedbackUrl | string | Interview feedback summary file download link, HTTP GET requests this URL to download the interview feedback summary file, this link is time-sensitive, the expiration time is 1 hour, it needs to be downloaded and saved on the server as soon as possible after receiving the request |
extendedInterviewers[] | array | Participate in the candidate's application interviewer's no interview feedback information,Specific field referenceinterviewers |
extendedInterviewerFeedbackUrl | string | Interview feedback summary file download link, HTTP GET requests this URL to download the interview feedback summary file, this link is time-sensitive, the expiration time is 1 hour, it needs to be downloaded and saved on the server as soon as possible after receiving the request |
ehrCustomFields[] | array | ehrCustom export field collection |
ehrCustomFields[].name | string | Custom field name |
ehrCustomFields[].value | any | Custom field value |
ehrCandidateExternalLink | string | Link to Candidate Details,Can be opened directly in the browser to view,The link is valid for 14 days by default |
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,one of the following values:null no employee No.,xxx Employee number |
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 Number |
headcountInfo[].name | string | Headcount Title |
headcountInfo[].status | string | Headcount Status |
customFields[] | array | Candidate custom field,Include only 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,1 “Yes”,0 “No”。 |
customFields[].now | boolean | This field exists when the custom field is time,Indicates whether the time (or the end of the time range) is "to date"。, for exampletrue 。, such as果为true ,Then the corresponding time may be any value, please note |
customFields[].section | string | The module name where the custom field is located. The module can be a built-in module (such as experienceInfo) or a custom module (such as 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 the first piece of data |
customFields[].codes | string | Custom code for multiple choice questions (only valid for multiple choice questions with code) |
offer | object | offerInfo |
offer.createdAt | string | offerCreated time。Date format is:ISO8601 |
offer.status | string | offerStatus;To be created:notCreated To be sent: pending Pending:sent Accepted: accepted Rejected: rejected |
offer.approvalStatus | string | Approval status UNINITIATED: // Uninitiated;INPROGRESS: // In process;APPROVED: // Approved;REJECTED: // Denied;RECALLED: // Withdrawn |
offer.salaryNumber | number | Monthly salary |
offer.checkinDate | string | Estimated start time |
offer.location | string | Onboard Location |
offer.creator | object | offerCreator info |
offer.creator.name | string | offerCreator name |
offer.creator.email | string | offerCreator email |
offer.finishedAt | string | offerAccept time。Date format is:ISO8601 |
offer.customFields | array | offerCustom field |
offer.customFields[].name | string | offerCustom field name |
offer.customFields[].value | string | offerCustom field value |
offer.customFields[].codes | string | Custom code for multiple choice questions (only valid for multiple choice questions with code) |
offer.hcInfo | object | HeadCount info selected by offer |
offer.hcInfo.id | number | HeadCount ID selected by offer |
offer.hcInfo.number | string | HeadCount number selected by offer |
offer.hcInfo.name | string | HeadCount name selected by offer |
offer.hcInfo.status | string | HeadCount status selected by offer |
offer.jobRankInfo | object | The job level information selected by the offer |
offer.jobRankInfo.type | string | The job level type selected by the offer |
offer.jobRankInfo.level | string | The job level selected by the offer |
offer.jobRankInfo.name | string | The job level name selected by the offer |
offer.departmentName | string | Onboarding department name |
offer.departmentCode | number | Onboarding department code |
offer.parentDepartmentCode | number | Entry Department Upper Departmentcode |
offer.departmentPath | string | The full path of Onboarding department |
offer.offerLastSentAt | string | Last send offer time |
offer.offer AttachmentDownloadUrl | string | Attachment download URL generated by offer,Valid for 1 hour |
Attachments | array | The candidate's Attachment |
Attachments[].name | string | The doc. name of candidate's Attachment |
Attachments[].applyFormId | number | Registration templateID |
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,Values are:CANDIDATE_UPLOAD_ Attachment Upload by candidateUPLOAD_PORTRAIT Candidate AvatarHR_UPLOAD_ Attachment HRManual uploadHM_UPLOAD_ Attachment Manual upload on the HR sideINTERVIEW_ACCEPT Attachment of the registration form generated by the candidate for the interviewINTERVIEW_SIGNIN Registration form Attachment generated by candidate interview check-inOFFER_ACCEPT Candidates accept the registration form Attachment generated by OFFERMERGE_APPLICATION_ Attachment Attachments generated by candidate mergersINVITE_UPDATE_RESUME Invite candidates to update the registration form for resume generation |
offer Attachment | object | CandidateofferRelevant Attachments No this field by default,Please contact your CMS if necessary, This field will not exist even if the get candidate interface switch is turned on |
offer Attachment.url | string | CandidateofferThe download address of relevant Attachments The link address is valid for1hour |
examReportLinks | array | Candidate exam/Assessment result link |
examReportLinks[].name | string | Candidate exam/Assessment name |
examReportLinks[].url | string | Candidate exam/Assessment result link |
exam Attachments | array | Candidate exam/Relevant Attachment of assessment |
exam Attachments[].name | string | Candidate exam/Assessment related Attachment file name |
exam Attachments[].url | string | Candidate exam/Assessment related Attachment download address The link address is valid for1hour |
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 | Whether the end time represents "to date"。, such asfalse 。If it is true , the value of endDate may be any value, just ignore endDate at this time |
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.employeeId | string | Position leader phone employee No. |
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. |
label | array | Candidate tag |
label[].id | number | Tagid |
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 person information of @ in the comment, the format is the same as the creator information |
remarks[].is_private | number | Whether the not is private,1:Private0:Public |
remarks[].type | string | Note type:Fill in 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[].survey AttachmentsUrl | string | The link of PES report |
survey[].survey AttachmentName | string | The name of PES Attachment |
survey[].survey Attachments[] | array | PES multiple Attachments(The new version of single Attachment and multiple Attachments are in this Attachment collection,The original single- Attachment results are only used for historical compatibility) |
survey[].survey Attachments[].survey AttachmentsUrl | string | The link of PES report |
survey[].survey Attachments[].survey AttachmentName | 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 |
customstyle Attachments | object | Custom registration form info |
customstyle Attachments.type | string | Attachment type fixeddoc |
customstyle Attachments.createTime | string | Created time |
customstyle Attachments.customFieldName | string | Custom Attachment name |
customstyle Attachments.url | string | Attachment download address |
Organizational structureAPI
Organizational structure related API
Organizational structure full synchronization
The Moka system will synchronize the departments in the current system according to the requested list (add, update, mark delete).
The synchronization uses department_code as the primary key, and compares it with the department_code in the system to allow synchronization of organizations with the same name under different department_codes:
1、The current system does not have it, but it does exist during synchronization: add a new department
2、The current system has it, and it also has it during synchronization: update the existing department information. If there is during synchronization, the current system department status is marked as deleted, and after updating, the status changes to normal.
3、If the current system has it, but not during synchronization: the department marking has been deleted, and you need to manually enter the Moka system to merge the department into other departments for deletion。
HTTP request
PUT https://api.mokahr.com/api-platform/v1/departments
Request example
$curl --location --request PUT 'https://api-staging003.mokahr.com/api-platform/v1/departments' \
--header 'Authorization: Basic Vl*********8*888888*' \
--header 'Content-Type: application/json' \
--data-raw '[
{
"sequence": 1.68,
"parent_code": "",
"department_code": "110",
"name": "api测试"
},
{
"sequence": 0.92,
"parent_code": "",
"department_code": "112",
"name": "api测试2",
"type": 1
},
{
"sequence": 0.06,
"department_code": "120",
"name": "技术支持测试",
"parent_code": "110",
"type": 1
}
]'
Operation successful
{
"success": true,
"result": {
"new": 0,
"delete": 0,
"update": 0
}
}
Operation failed
{
"success": false,
"errorMessage": "Error info "
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
name | Yes | string | Department name |
department_code | Yes | string | Department id in client system |
parent_code | Yes | string | The unique id of the department's parent department, if it is null, it is the first-level department |
type | No | number | Department type: Optional value: 1 : General department(Default is)2 :Store department(If the name of the store is the same as the name of the store department in the organizational structure, it will be associated with the corresponding store with the same name) |
sequence | No | number | Specific department sorting Data range:Supports numbers between 0 and 10000, accurate to two decimal places. Rule:The sorting is from small to large numbers, and the same numbers are sorted from first to last according to creation time. If the value is empty, it will be sorted last by default. |
Possible error info
errorMessage | Description |
---|---|
Duplicated department ID | Re-use of department_code in request list |
Duplicated department | There is the same Parent department in the request list,Title的Department |
Parent department not found | The department's parent department not found in the list |
A department's parent department cannot be itself directly (indirectly) | A department's parent department (of parent department...) cannot be itself |
Add organizational structure
Add organization structure, which is not allowed to synchronize any organization with the same name, no matter whether the organization is under the same department_code or not.
Note: Incremental synchronization of organizational structure must use POST request. If PUT request is used, it is full synchronization. If the department is not provided in the request, the department will be marked as deleted.
HTTP request
POST https://api.mokahr.com/api-platform/v1/departments/sync/incremental
Request example
$ curl 'https://api.mokahr.com/api-platform/v1/departments/sync/incremental' \
-u 'your_api-keys:' \
-X POST \
-d '[
{ "department_code": "ididid1", "name": "namenamename1", "parent_code": "ididid1", "sequence": 0 },
{ "department_code": "ididid2", "name": "namenamename2", "parent_code": "ididid2" },
{ "department_code": "ididid2", "name": "Department2", "parent_code": "ididid2", "type": 2 },
]'
Operation successful
{
"success": true
}
Operation failed
{
"success": false,
"errorMessage": "Error info "
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
name | Yes | string | Department name |
department_code | Yes | string | Department id in client system |
parent_code | Yes | string | The unique id of the parent department. If it is null, it is the first-level department |
type | No | number | Department type: Optional value: 1 : General department(Default is)2 :Store department |
sequence | No | number | Specific department sorting Data range:Arrays between 0 and 10000 are supported, accurate to two decimal places. Rule:The sorting is from small to large numbers, and the same numbers are sorted from first to last according to creation time. If the value is empty, it will be sorted last by default. |
response field
Field | Type | Description |
---|---|---|
success | boolean | Whether the operation is successful Optional value: true :Successfulfalse :Failed |
errorMessage | string | The error reason of operation failed |
Possible error info
errorMessage | Description |
---|---|
There are currently pending organizational updates, please try again later | |
Department name: XXX, The department number of number XXX is duplicated | There are duplicate department data in the request list or there are duplicate departments in the request list that have been synchronized to the system |
Parent department not found | The department's parent department not found in the list |
A department's parent department cannot be itself directly (indirectly) | A department's parent department (of parent department...) cannot be itself |
Department name XXX, the department name of parent number XXX already exists | A department with the same name exists under a department |
... |
Update organizational structure
Update organizational structure information for designated departments Note: update with department_code as the primary key. If you need to update department_code, you need to pass in department_id, and department_code will be updated with department_id as the primary key.
HTTP request
POST https://api.mokahr.com/api-platform/v1/departments
Request example
curl 'https://api.mokahr.com/api-platform/v1/departments' \
-X POST \
-u 'your_api_keys' \
-d '[
{
"department_code": "ididid111123",
"name": "namenamename1221",
"parent_code": null,
"sequence": 0
},
{
"department_code": "ididid211123",
"name": "namenamename21_testhema",
"parent_code": "ididid31112"
},
{
"department_code": "ididid311123",
"name": "namenamename222test_hema",
"parent_code": "huangtiandi",
"type": 2,
"department_id": 387
}
]'
Operation successful
{
"code": 0,
"msg": "Successful",
"success": true,
"errorMessage": "",
"data": {}
}
Operation failed
{
"code": 625011,
"msg": "department_code(3213232888)在系统中已存在",
"success": false,
"errorMessage": "department_code(323232888)在系统中已存在",
"data": {}
}
Request body parameter
Field | Required | Type | Description |
---|---|---|---|
name | Yes | string | Department name |
department_code | Yes | string | Department id in client system |
parent_code | Yes | string | The unique id of the parent department. If it is null, it is the first-level department |
type | No | number | Department type: Optional value: 1 :General department(Default is)2 :Store department |
department_id | No | number | The department id in the Moka system. When this parameter exists, the department that matches this parameter will be given priority. |
sequence | No | number | Specific department sorting,Supports two decimal places from 0 to 10000, if empty, it will be sorted last by default. Sort from small to large, creation time from first to last |
Response json field
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 pending organizational updates, please try again later | |
Department name: XXX, The department number of number XXX is duplicated | There are duplicate department data in the request list or there are duplicate departments in the request list that have been synchronized to the system |
Parent department not found | The department's parent department not found in the list |
A department's parent department cannot be itself directly (indirectly) | A department's parent department (of parent department...) cannot be itself |
Department name XXX, the department name of parent number XXX already exists | A department with the same name exists under a department |
... |