Login

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 CodeDescriptionProbable CauseRemediation Steps
501Bad RequestThe API key is missing permissions to access the given endpointAsk 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 as employment_status if the View 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)

Greenhouse

Error CodeDescriptionProbable CauseRemediation Steps
404Not foundGreenhouse 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 CodeDescriptionProbable CauseRemediation Steps
400Invalid RequestThis 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)
401UnauthorizedThe credentials or scopes provided do not suffice to access this resource.Verify the lever credentials in the integrations page per therelevant documentation
403ForbiddenThe 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.
429Too many requestsLever 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)
500Server ErrorThere was an error on Lever or StackOne's end.Contact StackOne via your dedicated slack channel or [email protected]
503Service UnavailableLever 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:

  1. 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.
  2. author_id - the author is defaulted to the api user id

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.

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.

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.