Insert or Update (upsert)
Purpose
To insert or update a record. The system checks for duplicate records based on the duplicate check field's values. If the record is already present, it gets updated. If not, the record is inserted.
Request URL
https://recruit.zoho.com/recruit/v2/{module_api_name}/upsert
module_api_name - The API name of the module
Modules supported in Get List of Records are supported here.
Request Method
POST
Scope
scope=ZohoRecruit.modules.all
(or)
scope=ZohoRecruit.modules.{module_name}.{operation_type}
Possible module names | Possible operation types |
---|---|
candidates, client, contact, jobopening, campaign, task, event, call, assessment, interview, vendor, note, and custommodule | ALL - Full access to all the records in the module WRITE - Edit records in the module CREATE - Create records in the module |
Note:
- In addition to the "data" JSON array in the input, include duplicate_check_fields as a JSON array of field API names. You can only use system-defined duplicate check fields and the unique fields you have configured for that module to perform duplicate checks.
- Example for the Candidates module:
"duplicate_check_fields": [
"Email",
"Phone",
"Fax"
] - Here, "Email" is the system-defined duplicate check field, and "Phone" and "Fax" are the user-defined unique fields for the Candidates module.
- If you do not specify the duplicate_check_fields, the system-defined duplicate check fields followed by unique fields, are used by default.
How does the duplicate check work?
Consider a case where the user has configured two unique fields unique1 and unique2 for a module.
The following table explains how the duplicate check happens for different user inputs to the duplicate_check_fields array.
User Input to the "duplicate_check_fields" Array | Duplicate Check Pattern |
---|---|
unique1 | unique1, unique2 |
unique2 | unique2, unique1 |
unique1, unique2 | unique1, unique2 |
Email, unique1, unique2 | |
No input | System-defined duplicate check field for that module followed by unique fields |
Possible Errors
HTTP Status | Error Code | Message | Reason |
---|---|---|---|
400 | INVALID_MODULE | The module name given seems to be invalid | Invalid module name or no tab permission, or the module could have been removed from the organized module |
400 | INVALID_MODULE | The given module is not supported in API | The modules such as Documents and Projects are not supported in the current API. (This error will not be shown, once these modules are supported.) |
Note:
- The system throws an error if the field value length exceeds the maximum length defined for that field.
- If an API is used inside a Function and the field value length exceeds the limit, then that function receives an error response from the API. For ex: If the max length for a "Text field" is defined as 10, then value given for it in API cannot be "12345678901", since it has 11 characters.
- Duplicates are checked for every insert record API call based on unique fields.
- A maximum of 100 records can be inserted/updated per API call.
- You must use only Field API names in the input. You can obtain the field API names from
- Fields metadata API (the value for the key “api_name” for every field). (Or)
- Setup > Developer Space > APIs > API Names > {{Module}}. Choose “Fields” from the “Filter By” drop-down.
- The trigger input can be workflow, approval, or blueprint. If the trigger is not mentioned, the workflows, approvals and blueprints related to the API will get executed. Enter the trigger value as [] to not execute the workflows.
- Records with Subform details can also be upserted to Zoho Recruit using the Records API.
System-defined Duplicate Check Fields
- Following are the default duplicate check fields for different modules.
Candidates - Email, Clients - Client_Name, Contacts - Email, Job_Openings - Posting_Title, Campaigns - Campaign_Name, Interviews - Interview_Name, Vendors - Vendor_Name, Custom Modules - CustomModule1_Name, CustomModule2_Name.
Sample Attributes
The following table gives you specific details about each field type in Zoho Recruit and their limitations.
The JSON type and the data type of the field-types are extracted from fields meta data API.
JSON type - Represents the format in which the field should be passed in the request-body or will be received in the response.
Data type - Represents the type of data that can be stored in the corresponding field-type. It is mentioned below each Attribute
Attribute | JSON Type | Limitations | Sample |
---|---|---|---|
Single Line Text | String | Accepts up to 255 characters. Accepts alphanumeric and special characters. | "Last_Name": "Mike O'Leary" |
Multi Line Textarea | String | Small - accepts up to 2000 characters. Large - accepts up to 32000 characters. You will not be able to use this field to create custom views, reports or other filters. Accepts alphanumeric and special characters. | "Multi_Line_1": "This is the first line \n Now for the second Line" |
Email | String | Accepts valid email IDs. | "Email_1": "p.boyle@zylker.com" |
Phone Phone | String | Accepts up to 30 characters. This limit may vary based on the value configured in 'Number of characters allowed' in the properties pop-up of the field, in UI. Accepts only numeric characters and '+' (to add extensions). The regex pattern in Zoho Recruit to validate this field's value is "[0-9a-zA-Z!#;%\\*\\^\\(\\)=\\{\\}\\[\\]\\?`~_\\-\\.\\$@\\?\\,\\:\\'\\/\\!\\P{InBasicLatin}\\|\\\\\\s\\+]+" | "Phone_1": "9900000000" |
Picklist Picklist | String | You can either pass an existing pick list value or add a new one. The pick list value accepts all alphanumeric and special characters. | "Industry": "automobile" |
Multi-Select Picklist Multi-select Picklist | JSON array | You can either pass existing pick list values or add a new one. The pick list value accepts all alphanumeric and special characters. | "Courses_Opted": [ "Analytics", "Big data" ] |
Date Date in ISO 8601 format | String | Accepts date in yyyy-MM-dd format | "Date_1": "2017-08-16" |
Date/time DateTime in ISO 8601 format | String | Accepts date and time in yyyy-MM-ddTHH:mm:ss±HH:mm ISO 8601 format | "Date_Time": "2017-08-16T14:32:23+05:30" Date_Time is in ISO8601 format and the time zone is the current user's time zone. |
Number Integer | Integer | Accepts numbers up to 9 digits. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI. Accepts only numeric values. | "No_of_Employees": 350 |
Currency Currency | Double | Before decimal point - accepts numbers up to 16 digits. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI. After decimal point - accepts precision up to 9 digits. This limit may vary based on the value configured in 'Number of decimal places' in the properties pop-up of the field, in UI. Accepts only numeric values. | "Annual_Revenue": 250000.90 |
Decimal Double | Double | Before decimal point - accepts numbers up to 16 digits. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI. After decimal point - accepts precision up to 9 digits. This limit may vary based on the value configured in 'Number of decimal places' in the properties pop-up of the field, in UI. Accepts only numeric values. | "Decimal_1": 250000.50 |
Percent Double | Double | Accepts numbers up to 5 digits. Accepts only numeric values. | "Percentage": 25 |
Long Integer BigInt | String | Accepts numbers up to 18 digits. This limit may vary based on the value configured in 'Maximum digits allowed' in the properties pop-up of the field, in UI. Accepts only numeric values. | "EAN_Code":"0012345600012" |
Checkbox Boolean | Boolean | Accepts only Boolean values(true,false). | "Email_Opt_Out": true |
URL Website | String | Accepts valid URLs. The regex pattern in Zoho Recruit to validate this field's value is "^(http:\\/\\/www.|https:\\/\\/www.|ftp:\\/\\/www.|www.|http:\\/\\/|https:\\/\\/|ftp:\\/\\/|){1}[^\\x00-\\x19\\x22-\\x27\\x2A-\\x2C\\x2E-\\x2F\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B\\x7D-\\x7F]+(\\.[^\\x00-\\x19\\x22\\x24-\\x2C\\x2E-\\x2F\\x3C\\x3E\\x40\\x5B-\\x5E\\x60\\x7B\\x7D-\\x7F]+)+(\\/[^\\x00-\\x19\\x22\\x3C\\x3E\\x5E\\x7B\\x7D-\\x7D\\x7F]*)*$" | "URL": "https://www.zylker.com" |
Lookup Lookup | JSON object | Accepts valid name and unique ID of the record, which you can get through meta data API. | "Lookup" : { "name" : "James", "id" : "425248000000104001" } |
Multi-select lookup Multi-Select Lookup | JSON array | Accepts valid record names and unique IDs. | "Accounts":[ { "Account_Name":"Zylker1", "id":"4150868000000420069" }, { "Account_Name":"Zylker", "id":"4150868000000420046" } ] |
User User Lookup | JSON object | This is a default look-up field to users in Zoho Recruit. | "User": { "name":"Patricia Boyle", "id":"4150868000000623001" } |
Sample Request
Copiedcurl "https://recruit.zoho.com/recruit/v2/Candidates/upsert"
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-d "@upsertlead.json"
-X POST
In the request, "@upsertlead.json" contains the sample input data.