Kombo Unified ATS (Assessment & Background Check) API API
Unified endpoints to operate Assessments and Background Checks for many applicant tracking systems.
Unified endpoints to operate Assessments and Background Checks for many applicant tracking systems.
openapi: 3.1.0
info:
title: Kombo AI Apply Unified ATS (Assessment & Background Check) API API
version: 1.0.0
description: Endpoints for AI-powered job application features.
servers:
- url: https://api.kombo.dev/v1
description: Kombo EU API
- url: https://api.us.kombo.dev/v1
description: Kombo US API
security:
- ApiKey: []
tags:
- name: Unified ATS (Assessment & Background Check) API
description: Unified endpoints to operate Assessments and Background Checks for many applicant tracking systems.
paths:
/assessment/packages:
get:
operationId: GetAssessmentPackages
summary: Get packages
description: 'Get all available assessment and background check packages for an integration.
This is mainly intended for debugging. As you always need to submit the full list of available packages when using ["set packages"](/assessment/v1/put-packages), there shouldn''t ever be a need to call this endpoint in production.'
tags:
- Unified ATS (Assessment & Background Check) API
parameters:
- in: header
name: X-Integration-Id
schema:
type: string
description: ID of the integration you want to interact with.
example: recruitee:HWUTwvyx2wLoSUHphiWVrp28
required: true
responses:
'200':
description: GET /assessment/packages Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAssessmentPackagesPositiveResponse'
examples:
example1:
value:
status: success
data:
packages:
- id: '1001'
name: TypeScript
description: TypeScript coding skills assessments
updated_at: '2023-06-29T18:47:40.890Z'
type: SKILLS_TEST
default:
$ref: '#/components/responses/ErrorResponseATS'
put:
operationId: PutAssessmentPackages
summary: Set packages
description: "Set packages\n\nReplaces the list of available assessment and or background check packages.\n\nPackages that have been previously submitted through this endpoint but aren't included again will be marked as deleted.\n\n### Example Request Body\n\n```json\n{\n \"packages\": [\n {\n \"id\": \"1001\",\n \"type\": \"SKILLS_TEST\",\n \"name\": \"TypeScript\",\n \"description\": \"TypeScript coding skills assessments\"\n },\n {\n \"id\": \"1002\",\n \"type\": \"VIDEO_INTERVIEW\",\n \"name\": \"Video Interview\",\n \"description\": \"Video interview to assess communication skills\"\n }\n ]\n}\n```"
tags:
- Unified ATS (Assessment & Background Check) API
parameters:
- in: header
name: X-Integration-Id
schema:
type: string
description: ID of the integration you want to interact with.
example: recruitee:HWUTwvyx2wLoSUHphiWVrp28
required: true
requestBody:
description: PUT /assessment/packages Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PutAssessmentPackagesRequestBody'
examples:
example1:
value:
packages:
- id: '1001'
type: SKILLS_TEST
name: TypeScript
description: TypeScript coding skills assessments
- id: '1002'
type: VIDEO_INTERVIEW
name: Video Interview
description: Video interview to assess communication skills
responses:
'200':
description: PUT /assessment/packages Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PutAssessmentPackagesPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseATS'
/assessment/orders:
get:
operationId: GetAssessmentOrders
summary: Get orders
description: Get all assessment and background check orders of an integration.
tags:
- Unified ATS (Assessment & Background Check) API
parameters:
- in: header
name: X-Integration-Id
schema:
type: string
description: ID of the integration you want to interact with.
example: recruitee:HWUTwvyx2wLoSUHphiWVrp28
required: true
- name: cursor
in: query
required: false
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
schema:
$ref: '#/components/schemas/GetAssessmentOrdersParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetAssessmentOrdersParameterPageSize'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetAssessmentOrdersParameterIds'
- name: statuses
in: query
required: false
description: 'Filter by a comma-separated list of `OPEN`, `COMPLETED`, `CANCELLED`, `REJECTED`.
Leave this blank to get results matching all values.'
schema:
$ref: '#/components/schemas/GetAssessmentOrdersParameterStatuses'
- name: created_after
in: query
required: false
description: 'Filter orders by their creation date-timestamp in the format: `YYYY-MM-DDTHH:mm:ss.sssZ`. Only orders created on or after this date-timestamp will be returned.'
schema:
$ref: '#/components/schemas/GetAssessmentOrdersParameterCreatedAfter'
responses:
'200':
description: GET /assessment/orders Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAssessmentOrdersPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseATS'
/assessment/orders/open:
get:
operationId: GetAssessmentOrdersOpen
summary: Get open orders (deprecated)
description: '**(⚠️ Deprecated - Use [Get orders](/assessment/v1/get-orders) instead)** Get all open assessment and background check orders of an integration.'
tags:
- Unified ATS (Assessment & Background Check) API
parameters:
- in: header
name: X-Integration-Id
schema:
type: string
description: ID of the integration you want to interact with.
example: recruitee:HWUTwvyx2wLoSUHphiWVrp28
required: true
- name: cursor
in: query
required: false
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
schema:
$ref: '#/components/schemas/GetAssessmentOrdersOpenParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetAssessmentOrdersOpenParameterPageSize'
responses:
'200':
description: GET /assessment/orders/open Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAssessmentOrdersOpenPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseATS'
/assessment/orders/{assessment_order_id}/result:
put:
operationId: PutAssessmentOrdersAssessmentOrderIdResult
summary: Update order result
description: "Updates an assessment or a background check order result.\n\n### Example Request Body\n\n```json\n{\n \"status\": \"COMPLETED\",\n \"score\": 90,\n \"max_score\": 100,\n \"result_url\": \"https://example.com\",\n \"completed_at\": \"2023-04-04T00:00:00.000Z\",\n \"attributes\": [\n {\n \"type\": \"TEXT\",\n \"label\": \"Role fit\",\n \"value\": \"Excellent\"\n },\n {\n \"type\": \"SUB_RESULT\",\n \"id\": \"<YOUR_INTERNAL_ID_OF_THE_TEST>\",\n \"label\": \"Personality test\",\n \"score\": {\n \"value\": 97,\n \"max\": 100\n },\n \"status\": \"COMPLETED\"\n }\n ],\n \"attachments\": [\n {\n \"name\": \"Assessment Report.pdf\",\n \"data\": \"SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=\",\n \"content_type\": \"application/pdf\"\n }\n ]\n}\n```"
tags:
- Unified ATS (Assessment & Background Check) API
parameters:
- in: header
name: X-Integration-Id
schema:
type: string
description: ID of the integration you want to interact with.
example: recruitee:HWUTwvyx2wLoSUHphiWVrp28
required: true
- name: assessment_order_id
in: path
required: true
description: PUT /assessment/orders/:assessment_order_id/result Parameter
schema:
$ref: '#/components/schemas/PutAssessmentOrdersAssessmentOrderIdResultParameterAssessmentOrderId'
examples:
example1:
value: GRKdd9dibYKKCrmGRSMJf3wu
requestBody:
description: PUT /assessment/orders/:assessment_order_id/result Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PutAssessmentOrdersAssessmentOrderIdResultRequestBody'
examples:
example1:
value:
status: COMPLETED
score: 90
max_score: 100
result_url: https://example.com
completed_at: '2023-04-04T00:00:00.000Z'
attributes:
- type: TEXT
label: Role fit
value: Excellent
- type: SUB_RESULT
id: <YOUR_INTERNAL_ID_OF_THE_TEST>
label: Personality test
score:
value: 97
max: 100
status: COMPLETED
attachments:
- name: Assessment Report.pdf
data: SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=
content_type: application/pdf
responses:
'200':
description: PUT /assessment/orders/:assessment_order_id/result Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PutAssessmentOrdersAssessmentOrderIdResultPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseATS'
components:
schemas:
PutAssessmentOrdersAssessmentOrderIdResultRequestBody:
type: object
properties:
status:
type: string
enum:
- COMPLETED
- CANCELLED
- OPEN
description: 'Status of the assessment.
**Please note the `status` can only be updated to a different value if its current value is `OPEN`.**'
result_url:
type: string
format: uri
completed_at:
description: 'YYYY-MM-DDTHH:mm:ss.sssZ
**Please make sure this value is provided when the `status` is of the type `COMPLETED` or `CANCELLED`.**'
type: string
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
score:
type: number
format: double
minimum: -1.7976931348623157e+308
max_score:
type: number
format: double
minimum: -1.7976931348623157e+308
attributes:
type: array
items:
anyOf:
- type: object
properties:
type:
type: string
const: TEXT
label:
type: string
value:
type: string
required:
- type
- label
- value
- type: object
properties:
type:
type: string
const: SUB_RESULT
id:
type: string
label:
type: string
score:
type: object
properties:
value:
type: number
format: double
minimum: -1.7976931348623157e+308
max:
type: number
format: double
minimum: 1
required:
- value
- max
status:
type: string
enum:
- COMPLETED
- CANCELLED
required:
- type
- id
- label
- score
- status
default: []
description: 'An array of additional attributes that you would like to submit as a part of the assessment result.
- If an ATS only supports writing text attributes, we will transform non `TEXT` attributes into formatted plain text values.'
attachments:
type: array
items:
type: object
properties:
name:
type: string
description: File name of the file you want to upload. We recommend providing something human-readable with a valid file extension (like `Resume.pdf`), as this might be shown in your customer's system.
content_type:
type: string
pattern: ^[\w.-]+\/[\w.-]+$
description: 'Content/MIME type of the file (e.g., `application/pdf`).
If you provide `data`, this is required. If you provide `data_url`, this is optional and we''ll attempt to use the `Content-Type` header of the response.
**Note:** Please validate that the content type you provide is actually meaningful (and not something generic like [`application/octet-stream`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types#applicationoctet-stream)). Especially when using object storage (like AWS S3), it''s easy to accidentally discard the content types of user-provided files, so make sure to explicitly persist them when processing uploads from your users (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#SysMetadata), [Google Cloud](https://cloud.google.com/storage/docs/metadata#content-type), and [Azure](https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types)).'
data_url:
type: string
format: uri
description: 'URL to the file you want to upload that can be accessed without authentication headers. We will download the content immediately when receiving the request, so the URL can be short-lived.
If you''re using an object storage provider (like AWS S3), we strongly recommend providing a signed URL for secure access (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html), [Google Cloud](https://cloud.google.com/storage/docs/access-control/signed-urls), and [Azure](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)).
**Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.'
data:
type: string
description: 'Base64-encoded contents of the file you want to upload.
**Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.'
required:
- name
maxItems: 5
default: []
description: An array of attachments containing the assessment result.
remote_fields:
type: object
properties:
smartrecruiters:
type: object
properties:
scoreLabel:
type: string
description: Value that we will pass through to SmartRecruiters' `scoreLabel` field.
recruitee:
type: object
properties:
subtitle:
type: string
description: Value that we will pass through to Recruitee's `subtitle` field on the assessment report.
description: Additional fields that we will pass through to specific ATS systems.
required:
- status
- result_url
PutAssessmentPackagesPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
warnings:
type: array
items:
type: object
properties:
message:
type: string
required:
- message
description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console.
required:
- status
- data
- warnings
GetAssessmentPackagesPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
packages:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
updated_at:
description: YYYY-MM-DDTHH:mm:ss.sssZ
type:
- string
- 'null'
format: date-time
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
type:
type:
- string
- 'null'
enum:
- BEHAVIORAL
- VIDEO_INTERVIEW
- SKILLS_TEST
- BACKGROUND_CHECK
- REFERENCE_CHECK
required:
- id
- name
- description
- updated_at
- type
required:
- packages
examples:
- packages:
- id: '1001'
name: TypeScript
description: TypeScript coding skills assessments
updated_at: '2023-06-29T18:47:40.890Z'
type: SKILLS_TEST
required:
- status
- data
PutAssessmentPackagesRequestBody:
type: object
properties:
packages:
type: array
items:
type: object
properties:
id:
type: string
description: A unique identifier for the assessment package.
type:
type: string
enum:
- BEHAVIORAL
- VIDEO_INTERVIEW
- SKILLS_TEST
- BACKGROUND_CHECK
- REFERENCE_CHECK
name:
type: string
description: The name of the assessment package.
description:
type: string
description: Description about the package. Some ATSs will display this in their UI.
required:
- id
- type
- name
- description
required:
- packages
GetAssessmentOrdersParameterCreatedAfter:
description: 'Filter orders by their creation date-timestamp in the format: `YYYY-MM-DDTHH:mm:ss.sssZ`. Only orders created on or after this date-timestamp will be returned.'
type: string
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
PutAssessmentOrdersAssessmentOrderIdResultParameterAssessmentOrderId:
type: string
GetAssessmentOrdersOpenPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
next:
type:
- string
- 'null'
results:
type: array
items:
type: object
properties:
id:
type: string
description: The unique identifier of the assessment order.
examples:
- B5KQKhAgTv6ZwzrfAbqbhipd
package_id:
type: string
description: The identifier of the assessment package.
examples:
- typescript_test
candidate:
type: object
properties:
remote_id:
type:
- string
- 'null'
description: The candidate's identifier in the integrated system.
examples:
- '12345'
email:
type: string
description: The candidate's email address.
examples:
- john.doe@gmail.com
format: email
first_name:
type:
- string
- 'null'
description: The candidate's first name.
examples:
- John
last_name:
type:
- string
- 'null'
description: The candidate's last name.
examples:
- Doe
phone:
type:
- string
- 'null'
description: The candidate's phone number.
examples:
- +1 123 456 7890
required:
- remote_id
- email
- first_name
- last_name
- phone
description: Information about the candidate taking the assessment.
application:
type: object
properties:
remote_id:
type:
- string
- 'null'
description: The application's identifier in the integrated system.
examples:
- '54321'
required:
- remote_id
description: Information about the job application.
job:
type: object
properties:
remote_id:
type:
- string
- 'null'
description: The job's identifier in the integrated system.
examples:
- '67890'
name:
type:
- string
- 'null'
description: The job title.
examples:
- Bottle Opener
job_code:
type:
- string
- 'null'
description: The human readable job code. Some systems expose this as the Requisition Code/ID.
examples:
- BO-2024-01
description:
type:
- string
- 'null'
description: Description of the job. This field is usually returned as HTML.
examples:
- <p>We are looking for a skilled and energetic individual to join our team as the chief bottle open officer. This unique role requires precision, attention to detail, and the ability to handle a high volume of beverage bottles in a fast-paced environment. The ideal candidate will ensure bottles are opened swiftly and safely while maintaining hygiene standards.</p>
location:
type:
- object
- 'null'
properties:
street_1:
type:
- string
- 'null'
description: If we can parse the address data, this field contains the first part of the street information.
street_2:
type:
- string
- 'null'
city:
type:
- string
- 'null'
state:
type:
- string
- 'null'
zip_code:
type:
- string
- 'null'
country:
type:
- string
- 'null'
description: Contains the ISO2 country code if possible. If not, it contains the original value.
raw:
type:
- string
- 'null'
description: If we have address data, this is filled with the raw address string.
description: The job location information.
hiring_team:
type: array
items:
type: object
properties:
remote_id:
type:
- string
- 'null'
description: The team member's identifier in the integrated system.
examples:
- '78901'
email:
type:
- string
- 'null'
description: The team member's email address.
examples:
- jane.doe@gmail.com
first_name:
type:
- string
- 'null'
description: The team member's first name.
examples:
- Jane
last_name:
type:
- string
- 'null'
description: The team member's last name.
examples:
- Doe
hiring_team_roles:
type: array
items:
type: string
enum:
- RECRUITER
- HIRING_MANAGER
examples:
- RECRUITER
description: Array of the roles of the user for this specific job.
examples:
- - RECRUITER
required:
- remote_id
- email
- first_name
- last_name
- hiring_team_roles
description: A member of the hiring team.
description: The hiring team allows you to provision users into your system who can access the job and its applications.
required:
- remote_id
- name
- job_code
- description
- location
- hiring_team
description: Information about the job posting.
required:
- id
- package_id
- candidate
- application
- job
examples:
- id: B5KQKhAgTv6ZwzrfAbqbhipd
package_id: typescript_test
candidate:
remote_id: '12345'
email: john.doe@gmail.com
first_name: John
last_name: Doe
phone: +1 123 456 7890
application:
remote_id: '54321'
job:
remote_id: '67890'
name: Bottle Opener
job_code: BO-2024-01
description: <p>We are looking for a skilled and energetic individual to join our team as the chief bottle open officer. This unique role requires precision, attention to detail, and the ability to handle a high volume of beverage bottles in a fast-paced environment. The ideal candidate will ensure bottles are opened swiftly and safely while maintaining hygiene standards.</p>
location:
street_1: Lohmühlenstraße 65
street_2: null
city: Berlin
state: Berlin
zip_code: '12435'
country: DE
raw: Berlin, Germany
hiring_team:
- remote_id: '78901'
email: jane.doe@gmail.com
first_name: Jane
last_name: Doe
hiring_team_roles:
- RECRUITER
required:
- next
- results
required:
- status
- data
PutAssessmentOrdersAssessmentOrderIdResultPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
warnings:
type: array
items:
type: object
properties:
message:
type: string
required:
- message
description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console.
required:
- status
- data
# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kombo/refs/heads/main/openapi/kombo-unified-ats-assessment-background-check-api-api-openapi.yml