Common Integration Errors/Quirks
Teamtailor
Below is a table detailing common error codes returned by the Unified API, their meanings, and common remediation steps:
Error Code | Description | Probable Cause | Remediation Steps |
---|---|---|---|
501 | Bad Request | The API key is missing permissions to access the given endpoint | Ask your customer to re-authenticate following the steps outlined in the relevant documentation |
Hibob
Missing or inaccurate employment information
termination_date
may be missing or null as well asemployment_status
if theView selected employees' Lifecycle sections
is missing from the service user (refer to the Hibob guide for the full permission sets that your customer needs to enable)
Error Code | Description | Probable Cause | Remediation Steps |
---|---|---|---|
403 | Forbidden | If you receive an empty response or error 403, it likely means the permissions do not allow you to access the data you are trying to fetch. | Ask your customer to re-authenticate following the steps outlined in the relevant documentation |
Greenhouse
Error Code | Description | Probable Cause | Remediation Steps |
---|---|---|---|
404 | Not found | Greenhouse may also return 404 if an invalid Greenhouse user ID was provided in the on-behalf-of input in the account linking process. | Ask your customer to re-authenticate following the steps outlined in the relevant documentation |
SmartRecruiters
SmartRecruiters has restrictive rate limits and does not offer the ability of listing applications and interviews. This means a lot of requests need to be made to backfill this behaviour (and allow it in the unified API), combined with the rate limits it can take some time to list / sync applications & interviews.
Due to these behaviours, the interview
endpoint by default has a filter applied to only return interviews for candidates in the following status INTERVIEW
OFFERED
HIRED
TRANSFERRED
, filtering out candidates that are in REJECTED
WITHDRAWN
LEAD
and IN_REVIEW
status.
Lever
Error Code | Description | Probable Cause | Remediation Steps | |
---|---|---|---|---|
400 | Invalid Request | This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again. | Double-check the parameters you are sending (query parameters or body data) | |
401 | Unauthorized | The credentials or scopes provided do not suffice to access this resource. | Verify the lever credentials in the integrations page per therelevant documentation | |
403 | Forbidden | The Lever account settings don't authorize the oauth app to perform the requested operation. | Talk to a Super Admin on your Lever account to update your API settings. | |
429 | Too many requests | Lever imposes a limit of the number of requests a client can make in a short time. Read more about our rate limiting here. | Implement a retry strategy (you can do this easily via retryConfig of the StackOne sdk ) | |
500 | Server Error | There was an error on Lever or StackOne's end. | Contact StackOne via your dedicated slack channel or [email protected] | |
503 | Service Unavailable | Lever is temporarily down for maintenance. Please retry your requests with exponential backoff. | Implement a retry strategy (you can do this easily via retryConfig of the StackOne sdk ) |
Bullhorn (ATS)
Bullhorn's ATS system is a crossover with a traditional CRM based tool. It has relaxed validation rules that means some operations can fail silently or create records with invalid relationships.
It is possible to supply an invalid or missing id
when creating candidates/notes
. When you create a Note with an invalid/missing:
candidate_id
- the note is still created in the BH db with the invalid reference. This means it's successful and retrievable but won't appear anywhere in the UI.author_id
- the author is defaulted to the api userid
Workday(LMS)
Content
Upsert
Workday have 2 unique identifiers per item of content to help dedupe.
One of them is the external_reference
in our model, the other is the content title
.
When creating content, if either one of these identifiers exists in the system already then Workday will not allow the creation of the content.
In the upsert flow we will look to get content by both of the identifiers. If the external_reference
matches an existing piece of content we will update the content by that identifier.
If the external_reference
doesn’t match but the title
matches we will update the existing content using the title
as the identifier.
In this use case, the piece of content would be updated with the content data passed in that request, including the external_reference
.
Content in Workday
Within Workday, a piece of externally hosted content only exists in the context of a course. As a result when we create content we also create a course wrapper which is given the same title and description as the content.
Assumed Values
There are some required values for Workday which don’t correspond to a field in our content model, so we apply these under the hood. They are:
Lesson Order
Within the context of a single piece of content, this is not applicable - so we assume this to be 1 if no value for order is passed in.
Make Lesson Mandatory
It is a requirement of creating a course within Workday that at least one piece of content within the course is mandatory - we apply this to the content by default.
Registrable Status Reference
This is a mandatory field and so we make this value ‘Open’ by default. Note that this is different from making content Active.
Additional Quirks
Workday doesn’t support an externally hosted cover_image
, instead we must provide a base64 image string.
We handle this under the hood by downloading the provided image URL and deriving the image file name from either the metadata or the url string.
If this image download fails, the content create request will also fail.
Rate-Limiting
We haven’t explicitly come across rate limiting with Workday previously but we suggest making create content requests sequentially for better safety.
Categories
Workday content create requires the input of a pre-existing category in the customer Workday system.
In order to make this information available we have exposed a list and get endpoint so you are able to retrieve this information and apply it as necessary.
Completions
For Workday - we allow the creation of using the content_external_reference
that is a required field when you upsert content. This means that you will always have a reference to the content which matches the reference in the LMS system.
content_id
is not a required field for creating a completion.
SAP SuccessFactors (LMS)
Content
Upsert
SAP has upsert behavior as default. We use external_reference
as the only identifier to dedupe content.
Content in SAP
In order to create content in SAP we must also create a course wrapper. This holds some of the content metadata and we apply the same title, description and id to this course wrapper as the content.
Active status on initial create
If content is created initially with the status set to inactive then it will not show in the import menu (even though there is a filter to view ‘not active’ content).
As a result the content won’t be able to be manually imported.
If the content is already imported and the OCN synchronization is set up, and then it is set to inactive - it will show under the ‘not active’ filter and show as inactive in its imported form.
Rate-Limiting
For SAP when using the OCN there is a rate limit of 1 request every 5 minutes
It also has a limit of 1000 content items per request.
Open Content Network
We upload content to SAP via the Open Content Network (OCN) - this has a separate content management flow for content and completions from imported content that appears within the SAP hub.
Part of this flow is that when uploading content it is put into the OCN area of the system where it then needs to be manually imported to appear as available to consume for users.
Once the automatic OCN synchronization system is set up, the imported content will automatically update once updated are made through the api without requiring additional manual processing.
There is also some additional configuration required in order to get the OCN Content create flow working which are outlined in the connector guide docs.
Assumed Values
We make some assumptions on fields when uploading content
Launch Method
This is required as part of the content upload. We set this to browser under the hood as this is consistent with external content launch methods across other LMS platforms.
Languages
SAP allows the ability to upload the content title and description in multiple languages. When viewing the content from the dashboard it will only show the title if it has been added for the specific locale the user is in. So you should ensure you add the languages for all locales you are expected to serve.
Completions
For SAP - we allow the creation of using the content_external_reference
that is a required field when you upsert content. This means that you will always have a reference to the content which matches the reference in the LMS system.
content_id
is not a required field for creating a completion.
Go1 (LMS)
Content
Upsert
We use the external_reference to find content that already exists. If content already exists then we will update using external_reference
as the identifier.
Otherwise we will create a new content item with the external_reference
as the identifier.
Completions
For GO1 - we allow the creation of using the content_external_reference
that is a required field when you upsert content. This means that you will always have a reference to the content which matches the reference in the LMS system.
Result
When passing a source value for the result, the underlying system will only accept a boolean.
content_id
is not a required field for creating a completion.
Updated about 2 months ago