openapi: 3.1.0
info:
title: Kombo AI Apply General 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: General
paths:
/check-api-key:
get:
operationId: GetCheckApiKey
summary: Check API key
description: Check whether your API key is working properly.
tags:
- General
responses:
'200':
description: GET /check-api-key Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetCheckApiKeyPositiveResponse'
examples:
example1:
value:
status: success
data:
environment_id: 2Uev1YUTqLFdvMPD3Jtrg2FX
customer_id: 2Uev1YUTqLFdvMPD3Jtrg2FX
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/force-sync:
post:
operationId: PostForceSync
summary: Trigger sync
description: 'Trigger a sync for a specific integration.
Please note that it is **not** necessary nor recommended to call this endpoint periodically on your side. Kombo already performs periodic syncs for you and you should only trigger syncs yourself in special cases (like when a user clicks on a "Sync" button in your app).'
tags:
- General
parameters:
- in: header
name: X-Integration-Id
schema:
type: string
description: ID of the integration you want to interact with.
example: workday:HWUTwvyx2wLoSUHphiWVrp28
required: true
requestBody:
description: POST /force-sync Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostForceSyncRequestBody'
responses:
'200':
description: POST /force-sync Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostForceSyncPositiveResponse'
examples:
example1:
value:
status: success
data:
already_queued: false
sync_id: 119ihtp91nA3dqRFiV67nXS6
type: DELTA
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/passthrough/{tool}/{api}:
post:
operationId: PostPassthroughToolApi
summary: Send passthrough request
description: 'Send a request to the specified integration''s native API.
At Kombo we put a lot of work into making sure that our unified API covers all our customers'' use cases and that they never have to think about integration-specific logic again. There are cases, however, where our customers want to build features that are very integration-specific. That''s where this endpoint comes in.
Pass in details about the request you want to make to the integration''s API and we''ll forward it for you. We''ll also take care of setting the right base URL and authenticating your requests.
To get started, please pick the relevant API (some tools provide multiple to due different base URLs or authentication schemes) from the table below and pass in the `{tool}/{api}` identifier as part of the path.
|Integration|`{tool}/{api}`|Description|
|---|---|---|
|360Learning|`360learning/v2`|360Learning [API v2](https://360learning.readme.io/docs). We automatically handle authentication and use `https://app.360learning.com/api/v2/` as the base URL.|
|a3innuva Nómina|`a3innuvanomina/laboral`|a3innuva Nómina API [docs](https://a3developers.wolterskluwer.es/). Requests are automatically authenticated using OAuth access tokens (refreshed when needed). Base URL: `https://a3api.wolterskluwer.es/Laboral/api`.|
|Abacus Umantis|`abacusumantis/v1`|[Umantis API v1](https://recruitingapp-91005709.umantis.com/api/v1/swagger-ui). We automatically authenticate all requests and use `https://\{subdomain\}.umantis.com/api/v1` as the base URL.|
|Abacus|`abacus/api`|Abacus [REST API](https://apihub.abacus.ch/). We automatically authenticate all requests and use `https://\{\{abacusUrl\}\}/api/entity/v1/mandants/\{\{mandantId\}\}` as the base URL.|
|Absence.io|`absenceio/v2`|Absence.io [API](https://docs.absence.io/). We automatically authenticate all requests and use `https://app.absence.io/api/v2` as the base URL.|
|ADP Workforce Now|`adpworkforcenow/default`|[ADP Workforce Now API v2](https://developers.adp.com/build/api-explorer/hcm-offrg-wfn). We automatically authenticate all requests and use the correct subdomain.|
|AFAS Software|`afas/api`|AFAS'' [API](https://connect.afas.nl/rest/get). We automatically authenticate all requests and use `https://\{domain\}/ProfitRestServices` as the base URL.|
|AlexisHR|`alexishr/v1`|[AlexisHR''s v1 API](https://docs.alexishr.com/) We automatically authenticate all requests and use `https://\{subdomain\}.alexishr.com` as base URL.|
|ApplicantStack|`applicantstack/api`|ApplicantStack''s [API](https://helpas.payrollservers.info/s/article/API-Integration-Guide). We automatically authenticate all requests and use `https://\{subdomain\}.applicantstack.com/api/` as the base URL.|
|Apploi|`apploi/rest-api`|The [Apploi API](https://integrate.apploi.com/). We automatically authenticate all requests and use `https://partners.apploi.com/` as the base URL.|
|Ashby|`ashby/v1`|Ashby''s [V1 API](https://developers.ashbyhq.com/reference/introduction). We automatically authenticate all requests with the provided credentials and use `https://api.ashbyhq.com` as the base URL. Please note that Ashby uses an RPC-style API. Please check [the Ashby API documentation](https://developers.ashbyhq.com/reference/introduction) for details on how to use it.|
|Asymbl|`asymbl/v63`|We use `https://\{subdomain\}.my.salesforce.com` as the base URL. Find the official docs [here](https://asymblinc.github.io/ats/ats.html).|
|Avature|`avature/custom-api`|Avatures''s Custom API. Call `Get /openapi` to retrieve the specific custom API schema. We automatically authenticate all requests and use the instance specific custom API URL as the base URL.|
|Avionté|`avionte/front-office-v1`|Avionte''s API. We automatically authenticate all requests and use `https://api.avionte.com/front-office/v1` as the base URL. Documentation for the BOLD Front Office API: https://developer.avionte.com/reference/get-all-talent-tags|
|BambooHR|`bamboohr/v1`|BambooHR''s [API](https://documentation.bamboohr.com/reference/get-employee). We automatically authenticate all requests using the customer credentials `https://api.bamboohr.com/api/gateway.php/\{subdomain\}/v1` as the base URL.|
|BITE|`bite/v1`|[Bite''s v1 API](https://api.b-ite.io/docs/#/). We automatically authenticate all requests and use ''https://api.b-ite.io/v1'' as base URL.|
|BoondManager|`boondmanager/api`|BoondManager [REST API](https://ui.boondmanager.com/administrator/developer/apisandbox). We automatically authenticate all requests and use `https://ui.boondmanager.com/api` as the base URL.|
|Breezy HR|`breezyhr/v3`|[BreezyHR''s v3 API](https://developer.breezy.hr/reference/overview). We automatically authenticate all requests and use "https://api.breezy.hr/v3/" as the base URL.|
|Bullhorn|`bullhorn/default`|[Bullhorn''s API](https://bullhorn.github.io/rest-api-docs/index.html). We automatically use the right `https://rest.bullhornstaffing.com/rest-services/\{corpToken\}` base URL.|
|CareerPlug|`careerplug/api`|We use `https://api.careerplug.com` as the base URL. Find the official docs [here](https://api.careerplug.com/docs#api).|
|Carerix|`carerix/api`|Carerix [REST API](https://docs.carerix.io/rest/introduction). We automatically authenticate all requests and use `https://api.carerix.com` as the base URL. Please note that Carerix uses XML for request and response bodies.|
|CEGID TalentSoft Customer|`talentsoftcustomer/v1`|Cegid Talentsoft Recruiting FrontOffice API: [API Documentation](https://developers.cegid.com/api-details#api=cegid-talentsoft-recruiting-frontoffice) We automatically authenticate all requests and use `https://\{customer_subdomain\}.talent-soft.com/api/v1` as the base URL.|
|CEGID TalentSoft FrontOffice|`talentsoft/v2`|Cegid Talentsoft Recruiting FrontOffice [API](https://developers.cegid.com/api-details). We automatically authenticate all requests using the provided credentials and use `https://\{domain\}/api/v2` as the base URL.|
|Ceipal|`ceipal/v1`|We use `https://api.ceipal.com/v1` as the base URL. Find the official docs [here](https://developer.ceipal.com/ceipal-ats-version-one/ceipal-ats-v1-api-reference).|
|Cezanne HR|`cezannehr/dataservice`|[CezanneHR''s v7 dataservice API](https://api.cezannehr.com/).We automatically authenticate all requests and use the base URL `https://subdomain.cezanneondemand.com/cezanneondemand/v7/dataservice.svc`|
|Compleet|`compleetpitcher/pitcher`|Compleet''s Pitcher API. We automatically authenticate all requests and use the configured base URL.|
|Connexys By Bullhorn|`connexys/api`|[Connexy''s API](https://api.conexsys.com/client/v2/docs/#section/Overview). We automatically authenticate all requests and use `https://\{connexys_domain\}/` as the base URL.|
|Cornerstone OnDemand|`cornerstoneondemand/learning`|Cornerstone''s [Learning API](https://csod.dev/reference/learning/). We automatically authenticate all requests using the client ID and secret and use `https://\{your_domain\}.csod.com/services/api` as the base URL.|
|Cornerstone OnDemand|`cornerstoneondemand/recruiting`|Cornerstone''s [Recruiting API](https://csod.dev/reference/recruiting/). We automatically authenticate all requests using the client ID and secret and use `https://\{your_domain\}.csod.com/services/api` as the base URL.|
|Cornerstone TalentLink|`cornerstonetalentlink/apply`|Cornerstone TalentLink''s Apply API. We automatically authenticate all requests using the provided credentials and API key, and use `https://apiproxy.shared.lumessetalentlink.com/apply` as the base URL.|
|Cornerstone TalentLink|`cornerstonetalentlink/rest`|Cornerstone TalentLink''s [REST API](https://developer.lumesse-talenthub.com/rest-api-developers-guide/1.21.33/index.html?page=rest-api&subpage=introduction). We automatically authenticate all requests using the provided credentials and API key, and use `https://apiproxy.shared.lumessetalentlink.com/tlk/rest` as the base URL.|
|Coveto (legacy SOAP API)|`coveto/public`|We automatically use `https://\{subdomain\}.coveto.de` as the base URL.|
|Coveto (REST API)|`covetorest/v1`|We automatically use `https://\{subdomain\}.coveto.de/public/api/v1` as the base URL. https://demo.coveto.de/swagger-ui/index.html#/|
|Crelate|`crelate/api`|Crelate [REST API](https://app.crelate.com/api3/docs/index.html). We automatically authenticate all requests and use `https://app.crelate.com/api3` as the base URL.|
|d.vinci admin|`dvinciadmin/odata-api`|[DVinci ODATA API](https://dvinci.freshdesk.com/en/support/solutions/articles/75000059523-odata-reporting-api).|
|d.vinci admin|`dvinciadmin/rest-api`|[DVinci REST API](https://static.dvinci-easy.com/files/d.vinci%20rest-api.html).|
|d.vinci|`dvinci/apply-api`|The [DVinci Apply API](https://static.dvinci-easy.com/files/d.vinci%20application-apply-api.html). All requests are authenticated by Kombo and use `https://\{dvinci_domain\}/p/\{portal_path\}/` as the base URL.|
|d.vinci|`dvinci/rest-api`|The [DVinci REST API](https://static.dvinci-easy.com/files/d.vinci%20rest-api.html). All requests are authenticated by Kombo and use `https://\{dvinci_domain\}/restApi/` as the base URL.|
|DATEV LAUDS|`datevlauds/lauds`|DATEV''s [hr-exchange](https://developer.datev.de/de/product-detail/hr-exchange/1.0.0/overview). We automatically authenticate all requests and use `https://hr-exchange.api.datev.de/\{platform|platform-sandbox\}/v1/clients/\{client-id\}` as the base URL.|
|DATEV LODAS|`datev/eau`|DATEV''s [eau](https://developer.datev.de/en/product-detail/eau-api/1.0.0/overview) API. We automatically authenticate all requests and use `https://eau.api.datev.de/\{platform|platform-sandbox\}/v1/clients/\{client-id\}/` as the base URL.|
|DATEV|`datevhr/eau`|DATEV''s [eau](https://developer.datev.de/en/product-detail/eau-api/1.0.0/overview) API. We automatically authenticate all requests and use `https://eau.api.datev.de/\{platform|platform-sandbox\}/v1/clients/\{client-id\}/` as the base URL.|
|DATEV|`datevhr/hr-exports`|DATEV''s [hr-exports](https://developer.datev.de/en/product-detail/hr-exports/1.0.0/overview). We automatically authenticate all requests and use `https://hr-exports.api.datev.de/\{platform|platform-sandbox\}/v1/clients/\{client-id\}` as the base URL.|
|DATEV|`datevhr/hr:payrollreports`|DATEV''s [hr:payrollreports](https://developer.datev.de/en/product-detail/hr-payrollreports/2.0.0/overview) API. We automatically authenticate all requests and use `https://hr-payrollreports.api.datev.de/\{platform|platform-sandbox\}/v1/clients/\{client-id\}/` as the base URL.|
|Dayforce|`dayforce/V1`|[Dayforce''s API](https://developers.dayforce.com/Build/Home.aspx). We automatically authenticate all requests and use `\{\{baseUrl\}\}/Api/\{\{clientNamespace\}\}/V1` as the base URL|
|Deel|`deel/api`|Deel''s [API](https://developer.deel.com/reference/). We automatically authenticate all requests using the provided credentials and use `https://\{api_domain\}/rest` as the base URL.|
|Digital Recruiters|`digitalrecruiters/api`|Cegid Digital Recruiters [Talent Acquisition API](https://cegid-hr-developers.talentsoft.net/docs/tutorial-basics/Talent%20Acquisition/Getting%20Started). We automatically authenticate all requests by replacing `:token` in the request URL with your configured access token and use your configured Digital Recruiters domain as the base URL.|
|Eightfold|`eightfold/api`|Eightfold''s [API](https://apidocs.eightfold.ai/). We automatically authenticate all requests and use `https://apiv2.\{region\}/api/v2/core/` as the base URL.|
|Employment Hero|`employmenthero/default`|EmploymentHero [API](https://developer.employmenthero.com/api-references/#icon-book-open-introduction). We automatically authenticate all requests using the credentials supplied by the customer and use `https://api.employmenthero.com/api` as the base URL.|
|Eploy|`eploy/api`|Eploy''s [API](https://www.eploy.com/resources/developers/api-documentation/). We automatically authenticate all requests. The base URL is `https://\{hostname\}/api`, where `\{hostname\}` is either `\{subdomain\}.eploy.net` or your full custom hostname when applicable.|
|eRecruiter|`erecruiter/api`|[eRecruiter''s API](https://api.erecruiter.net/swagger/ui/index). We automatically authenticate all requests and use `https://\{domain\}/Api` as the base URL.|
|Eurécia|`eurecia/api`|Eurécia [REST API](https://api.eurecia.com/eurecia/fw/swagger/index.html#/) We automatically authenticate all requests and use `https://\{domain\}/eurecia/rest` as the base URL.|
|Factorial|`factorial/api`|Factorial''s [API](https://apidoc.factorialhr.com/). We automatically authenticate all requests and use `https://api.factorialhr.com/api` or `https://api.demo.factorial.dev/api` as the base URL, depending on the connected instance.|
|Flatchr|`flatchr/api`|Flatchr''s [API](https://developers.flatchr.io/docs/getting_started). We automatically authenticate all requests and use `https://api.flatchr.io` as the base URL.|
|Flatchr|`flatchr/career`|Flatchr''s [Career API](https://developers.flatchr.io/docs/QuickStart/Candidats/Creer_un_candidat). We automatically authenticate all requests and use `https://career.flatchr.io` as the base URL.|
|Fountain|`fountain/v2`|Fountain''s [Hire API](https://developer.fountain.com/reference/get_v2-applicants). We automatically authenticate all requests and use `https://api.fountain.com/v2` as the base URL.|
|Fourth|`fourth/uk-employee`|Fourth [UK Employee API](https://developer.fourth.com/en-gb/docs/uk-employee-api/reference) We automatically authenticate all requests and use `https://api.fourth.com/hr/organisations/\{organisation_id\}/` as the base URL. We also enforce the required query params for all requests.|
|Gem|`gem/api`|Gem''s [ATS API](https://api.gem.com/ats/v0/reference) We automatically authenticate all requests.|
|Google Workspace|`googleworkspace/admin`|[Googles''s API](https://developers.google.com/admin-sdk/directory/reference/rest). We automatically authenticate all requests and use ''https://admin.googleapis.com'' as the base URL.|
|Google Workspace|`googleworkspace/people`|[Googles''s API](https://developers.google.com/people/api/rest). We automatically authenticate all requests and use ''https://people.googleapis.com'' as the base URL.|
|Greenhouse Job Board|`greenhousejobboard/boards-api`|[Greenhouse Job Board API](https://developers.greenhouse.io/job-board). We automatically authenticate all requests and use ''https://boards-api.greenhouse.io/v1/boards/\{job_board_token\}'' as the base URL. Optionally, you can provide a custom job_board_token to use a different job board.|
|Greenhouse|`greenhouse/harvest-v2`|Greenhouse [Harvest API v2](https://developers.greenhouse.io/harvest.html). We automatically authenticate all requests using the API key and use `https://harvest.greenhouse.io/v2` as the base URL.|
|Greenhouse|`greenhouse/harvest`|Greenhouse [Harvest API v1](https://developers.greenhouse.io/harvest.html). We automatically authenticate all requests using the API key and use `https://harvest.greenhouse.io/v1` as the base URL.|
|GuideCom|`guidecom/api`|GuideCom''s API. We automatically authenticate all requests and use the configured API base URL.|
|Gusto|`gusto/v1`|[Gusto API](https://docs.gusto.com/app-integrations/docs/introduction). We automatically authenticate all requests with OAuth and use `\{api_base_url\}/v1` as the base URL (`https://api.gusto.com/v1` in production, `https://api.gusto-demo.com/v1` in development).|
|Hailey HR|`haileyhr/api`|Hailey HR''s [API](https://api.haileyhr.app/docs/index.html). We automatically authenticate all requests using the provided credentials and use `https://api.haileyhr.app` as the base URL. Connections created against the `DEMO` remote environment are routed to `https://api.demo.haileyhr.app` instead.|
|Hansalog|`hansalog/vision`|Hansalog''s [Vision API](https://hansalog-vision.document360.io/docs/). We automatically authenticate all requests and use `https://\{subdomain\}.hansalog-cloud.de/vision` as the base URL.|
|Haufe Umantis|`umantis/v1`|[Umantis API v1](https://recruitingapp-91005709.umantis.com/api/v1/swagger-ui). We automatically authenticate all requests and use `https://\{subdomain\}.umantis.com/api/v1` as the base URL.|
|HeavenHR|`heavenhr/v2`|[HeavenHR API](https://api.heavenhr.com/). We automatically authenticate all requests using the provided credentials and use `https://api.heavenhr.com/api/v2` as the base URL.|
|Heyrecruit|`heyrecruit/v2`|[Heyrecruit''s v2 API](https://documenter.getpostman.com/view/23241256/2s9YysBLcf#47e271ac-47c8-4c75-9cc6-b8c506e9dad6). We automatically authenticate all requests using the client ID and secret and use `https://app.heyrecruit.de/api/v2` as the base URL.|
|HiBob|`hibob/docs`|This passthrough is only used for fetching employee documents in HiBob. It is present as a workaround while we are working on a new endpoint for fetching documents in HRIS. It should not be used for any other purpose. We automatically authenticate all requests using the service user credentials and use `https://app.hibob.com/api/docs/employees/` as the base URL.|
|HiBob|`hibob/hire`|[HiBob''s Hire API](https://apidocs.hibob.com/docs/how-to-integrate-with-ats-hire-api). We automatically authenticate all requests using the hire service user credentials. The base URL is configured during the integration setup.|
|HiBob|`hibob/v1`|[HiBob''s v1 API](https://apidocs.hibob.com/reference/get_people). We automatically authenticate all requests using the service user credentials (or, for old integrations, the API key) and use `https://api.hibob.com/v1` as the base URL.|
|HoorayHR|`hoorayhr/api`|[HoorayHR API](https://api.hoorayhr.io/documentation/). We automatically authenticate all requests and use `https://api.hoorayhr.io` as the base URL.|
|HR Office|`hroffice/soap`|[HROffice SOAP API](https://api.hroffice.nl/HROfficeCoreService.asmx). We automatically authenticate all requests and wrap them in a SOAP envelope. Build the request `Body` with the raw XML parameters for your operation (e.g., `\1\`). Use `/` as your `path`. Set your `method` to `POST`. You need to specify the `api_options` object and set `operation_name` to the SOAP operation you want to call (e.g., `GetAllJobByLanguage`).|
|HR WORKS|`hrworks/v2`|HRWorks''s v2 [API](https://developers.hrworks.de/2.0/endpoints). We automatically authenticate all requests using the customer credentials.|
|HR4YOU|`hr4you/v2`|[HR4YOU''s v2 API](https://apiprodemo.hr4you.org/api2/docs). We automatically authenticate all requests and use the customers provided base URL (e.g., https://`\{base_url\}`/ or https://`\{subdomain\}.hr4you.org`/).|
|Humaans|`humaans/api`|Humaans'' [API](https://docs.humaans.io/api/). We automatically authenticate all requests using the API key and use `https://app.humaans.io/api` as the base URL.|
|iCIMS|`icims/default`|[iCIMS Default API](https://developer-community.icims.com/). We automatically authenticate all requests and use `https://api.icims.com/customers/\{customer_id\}` as the base url.|
|InRecruiting by Zucchetti|`inrecruiting/default`|[inRecruiting''s v3 API](https://inrecruiting.intervieweb.it/api-docs/). We automatically authenticate all requests and use the customers domain as base URL|
|Insperity|`insperity/api`|Insperity [APIs](https://developer.insperity.com/) We automatically authenticate all requests and use `https://api.insperity.com` as the base URL. For staging environments, we use `https://apistage.insperity.com`. Note that all requests require the company ID to be specified in the path or body.|
|IRIS Cascade|`iriscascade/v2`|IRIS Cascade HR [API](https://swagger.hrapi.co.uk/). We automatically authenticate all requests using the provided credentials and use `https://api.iris.co.uk/hr/v2` as the base URL.|
|JazzHR|`jazzhr/v1`|[JazzHR''s v1 API](https://www.resumatorapi.com/v1/#!`).We automatically authenticate all requests and use "https://api.resumatorapi.com/v1/" as the base URL.|
|JobDiva|`jobdiva/api`|We automatically authenticate all requests and use `https://api.jobdiva.com` as the base URL.|
|Jobvite|`jobvite/api`|We automatically authenticate all requests and use ''https://api.jobvite.com/api/v2'' as the base URL.|
|Jobvite|`jobvite/v2`|We use `https://api.jobvite.com/api/v2` as the base URL. Find the official docs [here](https://help.jobvite.com/hc/en-us/articles/8870636608925-Jobvite-API).|
|Jobylon|`jobylon/feed`|The [Jobylon Feed API](https://developer.jobylon.com/feed-api/). We automatically authenticate all requests and use `https://\{subdomain\}.jobylon.com/feeds/\{job_hash\}` as the base URL.|
|Jobylon|`jobylon/push`|The [Jobylon Push API](https://developer.jobylon.com/push-api-and-webhooks/). We automatically authenticate all requests and use `https://\{subdomain\}.jobylon.com/p1` as the base URL.|
|JOIN|`join/v2`|Join''s [V2 API](https://docs.join.com/reference/getting-started). We automatically authenticate all requests and use `https://api.join.com/v2` as the base URL.|
|Kenjo|`kenjo/api`|Kenjo''s [API](https://kenjo.readme.io/reference/generate-the-api-key). We automatically authenticate all requests using the API key and use `https://api.kenjo.io/` as the base URL.|
|Kula|`kula/v1`|Kula''s [REST API](https://developers.kula.ai/docs/getting-started/overview). We automatically authenticate all requests with the provided credentials and use `https://api.kula.ai/v1` as the base URL.|
|Lattice Talent|`latticetalent/talent`|Lattice''s [Talent API](https://developers.lattice.com/reference/introduction). We automatically authenticate all requests using API key credentials with `https://api.latticehq.com` as the base URL.|
|Lattice|`lattice/passthrough`|Lattice''s [API](https://developers.lattice.com/v2/docs/base-url-1). We automatically authenticate all requests using OAuth credentials with `https://api.latticehq.com` as the base URL.|
|Lattice|`lattice/talent`|Lattice''s [Talent API](https://developers.lattice.com/docs/introduction-1). We automatically authenticate all requests using OAuth credentials with `https://api.latticehq.com` as the base URL.|
|Laura|`laura/api`|We automatically authenticate all requests and use `https://\{subdomain\}.rekrytointi.com/api/v1.2` as the base URL.|
|Leapsome|`leapsome/scim`|Leapsome [SCIM API](https://api.leapsome.com/scim/v1/api-docs/). We automatically authenticate all requests using the credentials supplied by the customer and use `https://api.leapsome.com/scim/v1` as the base URL.|
|Leapsome|`leapsome/v1`|Leapsome [API](https://api.leapsome.com/v1/api-docs/). We automatically authenticate all requests using the credentials supplied by the customer and use `https://api.leapsome.com/v1` as the base URL.|
|Lever|`lever/v1`|[Lever''s v1 API](https://hire.lever.co/developer/documentation). We automatically authenticate all requests using the partner credentials which have been configured in the Lever tool settings (this uses Kombo''s partner credentials by default).|
|LinkedIn Learning|`linkedinlearning/v2`|LinkedIn Learning [API v2](https://learn.microsoft.com/en-us/linkedin/learning/). We automatically handle authentication and use `https://api.linkedin.com/v2` as the base URL.|
|Loket|`loket/api`|[Loket''s REST API](https://developers.loket.nl/). We automatically authenticate all requests and use `https://\{api_domain\}` as the base URL, where `api_domain` is the API domain configured during integration setup (e.g. `api.loket.nl`).|
|Loxo|`loxo/v1`|[Loxo''s API](https://loxo.readme.io/reference/loxo-api). We automatically authenticate all requests and use ''https://app.loxo.co/api/\{agency_slug\}'' as base URL.|
|Lucca|`lucca/api`|[Luccas''s API](https://developers.lucca.fr/api-reference/legacy/introduction). We automatically authenticate all requests and use ''https://\{account\}.\{ilucca|ilucca-demo\}.\{region\}/'' as the base URL.|
|Manatal|`manatal/career-page`|Manatal''s Career Page API. We use `https://api.manatal.com/open/v3/career-page/\{client_slug\}` as the base URL.|
|Manatal|`manatal/open-api-v3`|[Manatal''s Open API v3](https://developers.manatal.com/reference/getting-started). We automatically authenticate all requests and use `https://api.manatal.com/open/v3` as the base URL.|
|Mercury|`mercury/v1`|Mercury''s [V1 API](https://apim-uks-thirdpartyintegration-prod.azure-api.net/swagger/index.html?urls.primaryName=V1). We automatically authenticate all requests with the `subscription-key` and `tenant-id` headers and use the configured server URL with `/api/v1` as the base URL.|
|Mercury|`mercury/v2`|Mercury''s [V2 API](https://apim-uks-thirdpartyintegration-prod.azure-api.net/swagger/index.html?urls.primaryName=V2). We automatically authenticate all requests with the `subscription-key` and `tenant-id` headers and use the configured server URL with `/api/v2` as the base URL.|
|Mercury|`mercury/v3`|Mercury''s [V3 API](https://apim-uks-thirdpartyintegration-prod.azure-api.net/swagger/index.html?urls.primaryName=V3). We automatically authenticate all requests with the `subscription-key` and `tenant-id` headers and use the configured server URL with `/api/v3` as the base URL.|
|MHR People First|`peoplefirst/v1`|MHR People First [v1 API](https://docs.people-first.com/api/api-docs/api-docs.html). We automatically authenticate all requests using the access token and tenant/environment codes. For default environments, we use `https://\{tenant_code\}.people-first.com/api/v1` as the base URL. For non-default environments, we use `https://\{tenant_code\}-\{environment_code\}.people-first.com/api/v1`.|
|Microsoft Azure AD|`azuread/v1`|[AzureAD''s API](https://learn.microsoft.com/en-us/graph/api/resources/identity-network-access-overview?view=graph-rest-1.0). We automatically authenticate all requests.|
|Microsoft Entra ID|`entraid/v1`|[AzureAD''s API](https://learn.microsoft.com/en-us/graph/api/resources/identity-network-access-overview?view=graph-rest-1.0). We automatically authenticate all requests.|
|Moodle|`moodle/rest`|Moodle REST Web Services API. All calls go to `/webservice/rest/server.php` with `wsfunction` and `wstoken` parameters. We automatically handle authentication and use `\{site_url\}/webservice/rest/server.php` as the base URL. |
|Mysolution|`mysolution/default`|[Mysolution''s API](https://swagger.mysolution.nl/). We automatically authenticate all requests and use the customer''s domain as base URL.|
|Nmbrs|`nmbrs/soap`|[Nmbrs SOAP API](https://api.nmbrs.nl/soap/v3/). We automatically authenticate all requests and use `https://api.nmbrs.nl/soap/v3/` as the base URL. Set `data` to your raw XML string (the content that will be placed inside the `\` tag). Use `/` as your `path`, as we will always send requests to `https://api.nmbrs.nl/soap/v3/\{service_name\}.asmx`. Set your `method` to `POST`. You need to specify the `api_options` object and set `service_name` to the name of the service you want to call. Available services include `EmployeeService` and `CompanyService`.|
|Odoo|`odoo/json2`|Odoo''s [JSON-2 API](https://www.odoo.com/documentation/19.0/developer/reference/external_api.html). We automatically authenticate all requests and use `https://\{domain\}.odoo.com/json/2` as the base URL. Odoo JSON-2 requests are always `POST` requests and use paths like `/\{model\}/\{method\}` (e.g. `/res.partner/search_read`).|
|Okta|`okta/v1`|[Okta''s API](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/ApiServiceIntegrations/). We automatically authenticate all request ans use ''https://\/api/v1'' as the base URL.|
|Onlyfy|`onlyfy/v1`|Onlyfy''s [Public v1 REST API](https://onlyfy.io/doc/v1#section/Introduction). We automatically authenticate all requests using the `apikey` header and use `https://api.prescreenapp.io/v1` as the base URL.|
|Oracle HCM|`oraclehcm/api`|Oracle HCM Cloud [REST API](https://docs.oracle.com/en/cloud/saas/human-resources/24d/farws/index.html). We automatically authenticate all requests and use `https://\{domain\}/` as the base URL, where domain is your Oracle Cloud domain.|
|Oracle Recruiting Cloud|`oraclerecruiting/rest`|[Oracle''s REST API](https://docs.oracle.com/en/cloud/saas/human-resources/24d/farws/rest-endpoints.html). We automatically authenticate all requests and use ''https://\{company_url\}'' as the base url.|
|Oracle Recruiting Cloud|`oraclerecruiting/rest`|[Oracles''s REST API](https://docs.oracle.com/en/cloud/saas/human-resources/24d/farws/rest-endpoints.html). We automatically authenticate all requests and use ''https://\{company_url\}'' as the base url.|
|Oracle Taleo|`taleo/soap`|[Taleo''s API](https://docs.oracle.com/en/cloud/saas/taleo-enterprise/23b/otwsu/c-taleoapi.html). We automatically authenticate all requests and use ''https://\{your-subdomain\}.taleo.net/enterprise/soap'' as base URL.|
|OTYS|`otys/json-rpc`|[OTYS JSON-RPC API](https://ows.otys.nl/info/). We authenticate with your stored API key and inject the session token as the first element of the JSON-RPC `params` array on each request (except `loginByUid`, which uses `params` as sent). Requests use `https://ows.otys.nl` as the base URL (for example `POST /jservice.php` with the RPC method in the URL fragment, matching OTYS conventions).|
|Paradox|`paradox/v1`|We use `\{api_url\}/api/v1` as the base URL. Find the official docs [here](https://paradox.readme.io/).|
|Paradox|`paradox/v1public`|We use `\{api_url\}/api/v1/public` as the base URL. Find the official docs [here](https://paradox.readme.io/).|
|Paychex|`paychex/api`|Paychex [REST API](https://developer.paychex.com/documentation). We automatically authenticate all requests and use `https://api.paychex.com` as the base URL.|
|Paycom|`paycom/v1`|Paycom''s REST API. We automatically authenticate all requests using the provided SID and API Token and use `https://api.paycomonline.net/v4/rest/index.php/api/v1` as the base URL.|
|Paycor|`paycor/v1`|[Paycors''s v1 API](https://developers.paycor.com/explore#section/Getting-Started). We automatically authenticate all requests and use ''https://apis.paycor.com''.|
|PayFit|`payfitcustomer/api`|PayFit [Partner API](https://developers.payfit.io/reference). We automatically authenticate all requests using the provided API key and use `https://partner-api.payfit.com` as the base URL.|
|PayFit|`payfitpartner/partner-api`|PayFit [Partner API](https://developers.payfit.io/reference). We automatically authenticate all requests using the OAuth access token and use `https://partner-api.payfit.com` as the base URL.|
|Paylocity|`paylocity/default`|[Paylocity''s Weblink API](https://developer.paylocity.com/integrations/reference/authentication-weblink). We automatically authenticate all requests and use ''https://\{api|dc1demogw\}.paylocity.com/'' as the base URL.|
|Paylocity|`paylocity/next-gen`|[Paylocity''s NextGen API](https://developer.paylocity.com/integrations/reference/authentication). We automatically authenticate all requests and use ''https://dc1prodgwext.paylocity.com/'' as the base URL.|
|PeopleHR|`peoplehr/default`|[PeopleHR''s API](https://apidocs.peoplehr.com/#). We automatically authenticate all request ans use ''https://api.peoplehr.net'' as the base URL.|
|PeopleXD|`peoplexd/b2b`|PeopleXD''s [B2B API](https://documenter.getpostman.com/view/3101638/TzeTHUDu#intro). We automatically authenticate all requests and use `https://api.corehr.com/ws/\{tenant_id\}/corehr` or `https://uatapi.corehr.com/ws/\{tenant_id\}/corehr` as the base URL.|
|Personio|`personio/jobboard`|API endpoints exposed on Personio''s public job board pages ([currently just the XML feed](https://developer.personio.de/reference/get_xml)). We automatically use the right `https://\{company\}.jobs.personio.de` base URL.|
|Personio|`personio/personnel`|Personio''s [Personnel Data API](https://developer.personio.de/reference/get_company-employees). We automatically authenticate all requests using the client ID and secret and use `https://api.personio.de/v1` as the base URL.|
|Personio|`personio/personnelv2`|Personio''s [V2 Personnel Data API](https://developer.personio.de/v2.0/reference/introduction). We automatically authenticate all requests using the client ID and secret and use `https://api.personio.de/v2` as the base URL.|
|Personio|`personio/recruiting`|Personio''s [Recruiting API](https://developer.personio.de/reference/get_company-employees). We automatically authenticate all requests using the Recruiting access token and use `https://api.personio.de/v1/recruiting` as the base URL.|
|Personio|`personio/recruitingV2`|Personio''s [V2 Recruiting API](https://developer.personio.de/reference/get_v2-recruiting-applications). We automatically authenticate all requests using the Recruiting access token, send the `Beta` header and use `https://api.personio.de/v2/recruiting` as the base URL.|
|Phenom|`phenom/rest-api`|The [Phenom API](https://developer.phenom.com/). We automatically authenticate all requests and use `https://api-stg.phenompro.com` as the base URL.|
|Pinpoint|`pinpoint/v1`|Pinpoint''s [JSON:API](https://developers.pinpointhq.com/docs). We automatically authenticate all requests using the `X-API-KEY` header and use `https://\{subdomain\}.pinpointhq.com/api/v1` as the base URL.|
|Planday|`planday/api`|Planday''s [HR API v1.0](https://openapi.planday.com/api/hr?version=v1.0). We automatically authenticate all requests and use `https://openapi.planday.com` as the base URL.|
|Recruit CRM|`recruitcrm/api`|We use `https://api.recruitcrm.io` as the base URL. Find the official docs [here](https://docs.recruitcrm.io/docs/rcrm-api-reference/ZG9jOjMyNzk0NA-getting-started).|
|Recruitee|`recruitee/default`|The [Recruitee API](https://api.recruitee.com/docs/index.html). We automatically authenticate all requests and use `https://api.recruitee.com/c/\{company_id\}` as the base URL.|
|Recruitee|`recruitee/v1`|We use `https://api.recruitee.com/c/\{company_id\}` as the base URL. Find the official docs [here](https://docs.recruitee.com/reference).|
|RecruiterFlow|`recruiterflow/v1`|RecruiterFlow API [docs](https://docs.recruiterflow.com/). We automatically authenticate all requests using the RF-Api-Key header and use `https://api.recruiterflow.com` as the base URL.|
|Remote|`remotecom/default`|Remote''s [API](https://remote.com/resources/api/getting-started). We automatically authenticate all requests using provided credentials.|
|rexx systems|`rexx/default`|Rexx''s HRIS export API. There is only one endpoint: `Get /`|
|Rippling|`rippling/api`|Rippling''s [API](https://developer.rippling.com/documentation). We automatically authenticate all requests and use `https://api.rippling.com/platform/api` or`https://rest.ripplingapis.com` as the base URL.|
|Sage HR|`sagehr/api`|Sage HR''s [API](https://developer.sage.com/hr/reference/api-ref). We automatically authenticate all requests and use `https://\{subdomain\}.sage.hr/api` as the base URL.|
|Sage People|`sagepeople/salesforce-rest-api`|Sage People is built on Salesforce''s [API](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_what_is_rest_api.htm). We automatically authenticate all requests and use `https://\{customer_name\}.my.salesforce.com/` as the base URL.|
|SAP SuccessFactors|`successfactors/lms-odata-v4`|We use `https://\{api_domain\}/learning/odatav4` as the base URL. Find the official docs [here](https://help.sap.com/docs/successfactors-learning/sap-successfactors-learning-odata-apis).|
|SAP SuccessFactors|`successfactors/odata-v2`|[SuccessFactors'' OData V2 API](https://help.sap.com/doc/74597e67f54d4f448252bad4c2b601c9/2211/en-US/SF_HCM_OData_API_REF_en.pdf). We automatically authenticate all requests and use `https://\{api_domain\}\{path?\}/odata/v2` as the base URL (the optional `\{path\}` is used when connecting via proxied/gateway domains).|
|SD Worx|`sdworx/default`|SD Worx''s [OData API](https://apistaging.cobra.sdworx.com/Resources). We automatically authenticate all requests using the client ID and secret and use `\{api_url\}` as the base URL.|
|Silae|`silae/rest`|[Silae''s REST API](https://silae-api.document360.io/docs). We automatically authenticate all requests and use ''https://payroll-api.silae.fr/payroll'' as the base URL.|
|Simployer|`simployer/v1`|[AlexisHR''s v1 API](https://docs.alexishr.com/) We automatically authenticate all requests and use `https://\{subdomain\}.alexishr.com` as base URL.|
|SmartRecruiters|`smartrecruiters/default`|Smartrecruiters [API](https://developers.smartrecruiters.com/reference/apply-api). We automatically authenticate all requests using OAuth and use `https://api.smartrecruiters.com` as the base URL.|
|SmartRecruiters|`smartrecruiters/default`|Smartrecruiters [API](https://developers.smartrecruiters.com/reference/apply-api). We automatically authenticate all requests using the credentials supplied by the customer and use `https://api.smartrecruiters.com` as the base URL.|
|Softgarden|`softgarden/apply-api`|[Softgarden''s Apply API](https://dev.softgarden.de/apply-api/). We automatically authenticate all requests and use ''https://jobdb.softgarden.de/jobdb/public'' as base URL.|
|Softgarden|`softgarden/frontend-v3`|[Softgarden''s Frontend API v3](https://dev.softgarden.de/frontend-v3/. We automatically authenticate all requests and use ''https://api.softgarden.io/api/rest'' as base URL.|
|Spark Hire Recruit|`comeet/api`|[Spark Hire Recruit''s API.](https://developers.comeet.com/reference/recruiting-api-overview)We automatically authenticate all requests and use `https://api.comeet.com` as the base URL.|
|Spott|`spott/protected`|The [Spott API](https://docs.gospott.com). We automatically authenticate all requests and use `https://api.gospott.com` as the base URL.|
|Sympa|`sympa/api`|Sympa''s [API](https://documenter.getpostman.com/view/33639379/2sA3kXG1vX#intro). We automatically authenticate all requests and use `https://api.sympahr.net/api/` as the base URL.|
|Taleez|`taleez/0`|[Taleez''s API](https://api.taleez.com/swagger-ui/index.html). We automatically authenticate all requests and use `https://api.taleez.com/0` as the base URL.|
|Talention|`talention/v1`|Talention''s API. We automatically authenticate all requests and use `https://\{api_domain\}/tms/\{account_id\}/external/api/1.0` as the base URL. Documentation is provided privately by Talention. Contact Kombo support for assistance with specific endpoints.|
|TalentLMS|`talentlms/v2`|We use `https://\{subdomain\}.talentlms.com/api/v2` as the base URL.|
|Teamtailor Job Boards|`teamtailorjobboards/direct-apply`|Teamtailor''s [Job Board Direct Apply API](https://partner.teamtailor.com/job_boards/direct_apply/#direct-apply). We automatically authenticate all requests and use `https://5qbn6o9x4h.execute-api.eu-west-1.amazonaws.com/production` as the base URL. All requests are automatically signed with HMAC-SHA256 signature.|
|Teamtailor|`teamtailor/v1`|We use `https://api.teamtailor.com/v1` as the base URL. Find the official docs [here](https://docs.teamtailor.com/).|
|TRAFFIT|`traffit/v2`|Traffit''s [v2 API](https://api.traffit.com). We authenticate all requests with the Traffit API key and use the base URL `https://yourdomain.traffit.com/api/integration/v2`.|
|TriNet PEO|`trinetpeo/v1`|We use `https://api.trinet.com` as the base URL. Find the official docs [here](https://developers.trinet.com).|
|Ubeeo|`ubeeo/api`|Ubeeo ATS API. We automatically authenticate all requests using OAuth client credentials and use `https://api.ats-platform.com` as the base URL (sandbox: `https://api.acc.ats-platform.com`).|
|Udemy Business|`udemy/learning`|Udemy Business REST API. We automatically handle authentication and use `https://\{account_name\}.udemy.com/api-2.0/organizations/\{account_id\}/` as the base URL.|
|UKG Pro WFM|`ukgprowfm/api`|UKG Pro WFM''s [API](https://developer.ukg.com/wfm/reference/welcome-to-the-ukg-pro-workforce-management-api). We automatically authenticate all requests and use `https://\{hostname\}` as the base URL.|
|UKG Pro|`ukgpro/default`|[UKG Pro''s HRIS API](https://developer.ukg.com/hcm/reference/get_personnel-v1-person-details). We automatically authenticate all requests and use `https://\{hostname\}` as the base URL.|
|UKG Pro|`ukgpro/recruting`|[UKG Pro''s Recruiting API](https://developer.ukg.com/hcm/reference/retrieveapplications). We automatically authenticate all requests and use `https://\{hostname\}/talent/recruiting/v2/\{tenantalias\}/api` as the base URL.|
|UKG Ready|`ukgready/api`|UKG Ready [API](https://secure.saashr.com/ta/docs/rest/public/). We automatically authenticate all requests using the provided credentials and use `https://\{api_domain\}` as the base URL.|
|Visma Peple|`peple/hrm`|[Visma Payroll Reporting API](https://api.analytics1.hrm.visma.net/docs/openapi.html). We automatically authenticate all requests using the client credentials and use ''https://api.analytics1.hrm.visma.net'' as the base URL.|
|Visma Raet - Youforce|`youforce/v1.0`|[Youforce''s basic v1.0 API](https://vr-api-integration.github.io/youforce-api-documentation/postman_collections.html). We automatically authenticate all requests and use ''https://api.youforce.com'' as base URL.|
|Visma YouServe|`youserve/learning`|Visma YouServe [Learning API](https://youserve-domain-api.github.io/SwaggerUI/learning.html). We automatically authenticate all requests using OAuth 2.0 with the provided credentials and use `https://api.youserve.nl/learning/v1.0` as the base URL.|
|Workable|`workable/v1`|**Deprecated: Use `v3` instead.** Workable''s [API](https://workable.readme.io/reference/generate-an-access-token). We automatically authenticate all requests using the client ID and secret and use `https://\{subdomain\}.\{environment\}.com/spi/v3` as the base URL.|
|Workable|`workable/v3`|Workable''s [API](https://workable.readme.io/reference/generate-an-access-token). We automatically authenticate all requests using the client ID and secret and use `https://\{subdomain\}.\{environment\}.com/spi/v3` as the base URL.|
|Workday|`workday/rest`|[Workday''s REST API](https://community.workday.com/sites/default/files/file-hosting/restapi/index.html). We automatically authenticate all requests and use the correct Workday REST base URL for your tenant. The base URL follows the format: https://\{domain\}/api/\{service_name\}/\{version\}/\{tenant\}. You can specify any valid REST endpoint and method. See the Workday REST API documentation for available endpoints. You must specify the `api_options` object and set `service_name` to the name of the service you want to call. You can also specify the `version` (e.g., "v1", "v2"); if omitted, it defaults to "v1".|
|Workday|`workday/soap`|[Workday''s SOAP API](https://community.workday.com/sites/default/files/file-hosting/productionapi/index.html). We automatically authenticate all requests. Set `data` to your raw xml string. Use `/` as your `path`, as we will always send requests to `https://\{domain\}/ccx/service/\{tenant\}/\{service_name\}`. Set your `method` to `POST`. You need to specify the `api_options` object and set `service_name` to the name of the service you want to call. Find all available services [here](https://community.workday.com/sites/default/files/file-hosting/productionapi/versions/v41.0/index.html). The string that you submit as `data` will be the content of the `soapenv:Body` tag in the request. You can set the `service_version` to any valid Workday service version (the default is `38.2`).|
|workforce.com|`workforcecom/api`|Workforce.com [API](https://my.workforce.com/api/v2/documentation). We automatically authenticate all requests using the provided credentials and use `https://my.tanda.co` as the base URL.|
|Zelt|`zelt/partner`|Zelt''s [Partner API](https://go.zelt.app/apiv2/swagger). We automatically authenticate all requests using the connected OAuth credentials and use `https://go.zelt.app/apiv2/partner` as the base URL.|
|Zoho Recruit|`zohorecruit/v2`|Zoho Recruit''s [V2 API](https://www.zoho.com/recruit/developer-guide/apiv2/modules-api.html). We automatically authenticate all requests and use `https://recruit.\{domain\}/recruit/v2` as the base URL.|
|Zvoove Recruit|`zvooverecruit/applicants`|[Zvoove Recruit''s Applicants API](https://api.zvoove.com/docs/). We automatically authenticate all requests using the applicants API key and use ''https://\{domain\}/api/public'' as base URL.|
|Zvoove Recruit|`zvooverecruit/jobs`|[Zvoove Recruit''s Jobs API](https://api.zvoove.com/docs/). We automatically authenticate all requests using the jobs API key and use ''https://\{domain\}/api/public'' as base URL.|
Please note that the passthrough API endpoints are only meant for edge cases. That''s why we only expose them for new integrations after understanding a concrete customer use case. If you have such a use case in mind, please reach out to Kombo.'
tags:
- General
parameters:
- in: header
name: X-Integration-Id
schema:
type: string
description: ID of the integration you want to interact with.
example: greenhouse:HWUTwvyx2wLoSUHphiWVrp28
required: true
- name: tool
in: path
required: true
description: The ID of the tool whose passthrough API you want to call (e.g., `personio`).
schema:
$ref: '#/components/schemas/PostPassthroughToolApiParameterTool'
examples:
example1:
value: personio
- name: api
in: path
required: true
description: The ID of the passthrough API you want to call (some tools provide multiple). Check the endpoint description for a list of all available APIs.
schema:
$ref: '#/components/schemas/PostPassthroughToolApiParameterApi'
examples:
example1:
value: personnel
requestBody:
description: POST /passthrough/:tool/:api Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostPassthroughToolApiRequestBody'
examples:
example1:
value:
method: GET
path: /company/employees
responses:
'200':
description: POST /passthrough/:tool/:api Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostPassthroughToolApiPositiveResponse'
examples:
example1:
value:
status: success
data:
url: https://api.personio.de/v1/company/employees
status: 200
headers:
content-type: application/json
data:
success: true
data:
- id: 123
first_name: John
last_name: Doe
warnings:
- message: This is an example warning!
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}:
delete:
operationId: DeleteIntegrationsIntegrationId
summary: Delete integration
description: 'Delete the specified integration.
**⚠️ This can not be undone!**'
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: DELETE /integrations/:integration_id Parameter
schema:
$ref: '#/components/schemas/DeleteIntegrationsIntegrationIdParameterIntegrationId'
requestBody:
description: DELETE /integrations/:integration_id Request body
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteIntegrationsIntegrationIdRequestBody'
responses:
'200':
description: DELETE /integrations/:integration_id Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteIntegrationsIntegrationIdPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseGeneral'
get:
operationId: GetIntegrationsIntegrationId
summary: Get integration details
description: Get the specified integration with everything you need to display it to your customer.
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: GET /integrations/:integration_id Parameter
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdParameterIntegrationId'
responses:
'200':
description: GET /integrations/:integration_id Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdPositiveResponse'
examples:
example1:
value:
status: success
data:
id: factorial:8d1hpPsbjxUkoCoa1veLZGe5
tool:
id: factorial
label: Factorial
internal_label: null
logo_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/logo.svg
icon_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/icon.svg
category: HRIS
status: ACTIVE
setup_status: COMPLETED
end_user:
organization_name: Acme
creator_email: example-integration-creator@acme.com
origin_id: 2DQJAUtSzzzKP9buDTvUvPk3
scope_config:
id: B1hu5NGyhdjSq5X3hxEz4bAN
name: Anonymous Scopes
data_expired_at: null
created_at: '2022-08-07T14:01:29.196Z'
beta: false
read_models:
- id: hris_employees
label: Employees
is_available: true
coverage_status: SUPPORTED
scope_config_setting: ENABLED
opted_out_by_customer: false
fields:
- id: date_of_birth
is_available: false
coverage_status: SUPPORTED
scope_config_setting: OPTIONAL
opted_out_by_customer: true
write_actions:
- id: hris_create_employee
label: Create employee
is_available: true
coverage_status: SUPPORTED
scope_config_setting: ENABLED
opted_out_by_customer: false
fields:
- id: first_name
is_available: true
coverage_status: SUPPORTED
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}/enabled:
put:
operationId: PutIntegrationsIntegrationIdEnabled
summary: Set integration enabled
description: 'Enable or disable the specified integration. When disabling, all currently running syncs will be cancelled.
All authentication credentials and configuration are preserved. Syncs can be resumed by re-enabling the integration.
You may use this to, for example, pause syncing for customers that are temporarily not using the integration.'
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: PUT /integrations/:integration_id/enabled Parameter
schema:
$ref: '#/components/schemas/PutIntegrationsIntegrationIdEnabledParameterIntegrationId'
requestBody:
description: PUT /integrations/:integration_id/enabled Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PutIntegrationsIntegrationIdEnabledRequestBody'
responses:
'200':
description: PUT /integrations/:integration_id/enabled Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PutIntegrationsIntegrationIdEnabledPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}/relink:
post:
operationId: PostIntegrationsIntegrationIdRelink
summary: Create reconnection link
description: "Create a link that will allow the user to reconnect an integration. This is useful if you want to allow your users to update the credentials if the old ones for example expired.\n\nEmbed this the same way you would [embed the connect link](/connect/embedded-flow). By default, the link will be valid for 1 hour.\n\n### Example Request Body\n\n```json\n{\n \"language\": \"en\",\n \"scope_config_id\": \"9Pv6aCFwNDEzPNmwjSsY9SQx\",\n \"link_type\": \"EMBEDDED\"\n}\n```"
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: POST /integrations/:integration_id/relink Parameter
schema:
$ref: '#/components/schemas/PostIntegrationsIntegrationIdRelinkParameterIntegrationId'
examples:
example1:
value: personio:93fCvorjZ2jas7ZekX1V1n5d
requestBody:
description: POST /integrations/:integration_id/relink Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostIntegrationsIntegrationIdRelinkRequestBody'
examples:
example1:
value:
language: en
scope_config_id: 9Pv6aCFwNDEzPNmwjSsY9SQx
link_type: EMBEDDED
responses:
'200':
description: POST /integrations/:integration_id/relink Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostIntegrationsIntegrationIdRelinkPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}/setup-link:
post:
operationId: PostIntegrationsIntegrationIdSetupLink
summary: Create Setup Flow link
description: 'Create a link that lets your customer run the [Setup Flow](/hris/features/setup-flow/introduction) for an integration. Use this to send customers back into setup steps like field mapping or employee filtering without having to go through the initial connection flow again. Pass the returned URL to `showKomboConnect` from the Kombo Connect SDK, the same way you do with a connection link.
The integration must have at least one Setup Flow step enabled (e.g. field mapping or employee filtering); otherwise this endpoint returns a `PLATFORM.INPUT_INVALID` error. Steps can be enabled from the Integration Settings tab in the dashboard or via the [Create Connection Link endpoint](./post-connect-create-link).'
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: POST /integrations/:integration_id/setup-link Parameter
schema:
$ref: '#/components/schemas/PostIntegrationsIntegrationIdSetupLinkParameterIntegrationId'
examples:
example1:
value: personio:93fCvorjZ2jas7ZekX1V1n5d
requestBody:
description: POST /integrations/:integration_id/setup-link Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostIntegrationsIntegrationIdSetupLinkRequestBody'
examples:
example1:
value:
language: en
link_type: EMBEDDED
responses:
'200':
description: POST /integrations/:integration_id/setup-link Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostIntegrationsIntegrationIdSetupLinkPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}/integration-fields:
get:
operationId: GetIntegrationsIntegrationIdIntegrationFields
summary: Get integration fields
description: 'Get all fields available on the specified integration.
**This includes the mapping to your custom fields**'
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: GET /integrations/:integration_id/integration-fields Parameter
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdIntegrationFieldsParameterIntegrationId'
- 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/GetIntegrationsIntegrationIdIntegrationFieldsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 2000.
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdIntegrationFieldsParameterPageSize'
responses:
'200':
description: GET /integrations/:integration_id/integration-fields Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdIntegrationFieldsPositiveResponse'
examples:
example1:
value:
status: success
data:
results:
- id: FFpTK47GhXnU6QAopPq2bdos
key: tax_id
model: hris_employees
type: DEFAULT
label: Tax ID
is_passthrough_enabled: true
is_writable: false
next_cursor: null
next: null
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}/integration-fields/{integration_field_id}:
patch:
operationId: PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldId
summary: Updates an integration fields passthrough setting
description: When enabled, the integration field will be passed as part of the `integration_fields` array on the specific model endpoint. Providing false will disable the passthrough for the specified field.
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: PATCH /integrations/:integration_id/integration-fields/:integration_field_id Parameter
schema:
$ref: '#/components/schemas/PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdParameterIntegrationId'
examples:
example1:
value: integration_id
- name: integration_field_id
in: path
required: true
description: PATCH /integrations/:integration_id/integration-fields/:integration_field_id Parameter
schema:
$ref: '#/components/schemas/PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdParameterIntegrationFieldId'
examples:
example1:
value: integration_field_id
requestBody:
description: PATCH /integrations/:integration_id/integration-fields/:integration_field_id Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdRequestBody'
examples:
example1:
value:
enable_passthrough: true
responses:
'200':
description: PATCH /integrations/:integration_id/integration-fields/:integration_field_id Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdPositiveResponse'
examples:
example1:
value:
status: success
data:
id: 9suhxJU83Kon4kPTS47837uE
key: tax_id
model: hris_employees
type: DEFAULT
label: Tax ID
is_passthrough_enabled: true
is_writable: false
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}/custom-fields:
get:
operationId: GetIntegrationsIntegrationIdCustomFields
summary: Get custom fields with current mappings
description: 'Get all custom fields available on the specified integration.
**This includes the mapping to the corresponding integration field if applicable*'
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: GET /integrations/:integration_id/custom-fields Parameter
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdCustomFieldsParameterIntegrationId'
- 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/GetIntegrationsIntegrationIdCustomFieldsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdCustomFieldsParameterPageSize'
responses:
'200':
description: GET /integrations/:integration_id/custom-fields Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetIntegrationsIntegrationIdCustomFieldsPositiveResponse'
examples:
example1:
value:
status: success
data:
results:
- id: D9CoSqqun6ix7uKEwb2kHBU1
key: unified_tax_id
integration_field:
id: FFpTK47GhXnU6QAopPq2bdos
key: tax_id
type: DEFAULT
label: The employee's tax ID
model: hris_employees
label: null
description: null
next_cursor: null
next: null
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/integrations/{integration_id}/custom-fields/{custom_field_id}:
put:
operationId: PutIntegrationsIntegrationIdCustomFieldsCustomFieldId
summary: Put custom field mappings
description: Updates the mapping of a given custom field. If the custom field is already mapped, it will be updated.
tags:
- General
parameters:
- name: integration_id
in: path
required: true
description: The unique ID of the integration where the custom field mapping should be updated
schema:
$ref: '#/components/schemas/PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdParameterIntegrationId'
examples:
example1:
value: integration_id
- name: custom_field_id
in: path
required: true
description: The unique ID of the custom field that should be updated
schema:
$ref: '#/components/schemas/PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdParameterCustomFieldId'
examples:
example1:
value: custom_field_id
requestBody:
description: PUT /integrations/:integration_id/custom-fields/:custom_field_id Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdRequestBody'
examples:
example1:
value:
integration_field_id: integration_field_id
responses:
'200':
description: PUT /integrations/:integration_id/custom-fields/:custom_field_id Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdPositiveResponse'
examples:
example1:
value:
status: success
data:
id: EU3Bwa4iDfGspEELW71WDvvu
key: tshirt_size
integration_field:
id: 3n6geaAmKL5tFonXVAtsMDmr
key: custom.tshirt_size
type: CUSTOM
label: T-Shirt Size
model: hris_employees
label: T-Shirt Size
description: Map this to the employee's tshirt size
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/tools/{category}:
get:
operationId: GetToolsCategory
summary: Get tools
description: "Get a list of the tools (i.e., integrations) enabled in your environment.\n This can (in combination with the `integration_tool` parameter of [the \"Create Link\" endpoint](/v1/post-create-link)) be used to, for example, display a custom list or grid of available integrations to your end users instead of exposing Kombo Connect's standard tool selector."
tags:
- General
parameters:
- name: category
in: path
required: true
description: GET /tools/:category Parameter
schema:
$ref: '#/components/schemas/GetToolsCategoryParameterCategory'
responses:
'200':
description: GET /tools/:category Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetToolsCategoryPositiveResponse'
examples:
example1:
value:
status: success
data:
tools:
- id: factorial
label: Factorial
internal_label: null
assets:
logo_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/logo.svg
icon_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/icon.svg
icon_black_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/icon-black.svg
paid_api_details_markdown: null
fast_track_details_markdown: null
partner_only_details_markdown: null
connection_guide_url: https://help.kombo.dev/hc/en-us/articles/18743884123409-Factorial-HR-How-do-I-link-my-account
coverage:
read_models:
- id: hris_employees
label: Employees
coverage_status: SUPPORTED
fields:
- id: date_of_birth
coverage_status: SUPPORTED
- id: hris_teams
label: Groups
coverage_status: UNSUPPORTED
fields:
- id: parent_id
coverage_status: UNSUPPORTED
write_actions:
- id: hris_create_employee
label: Create employee
coverage_status: SUPPORTED
fields:
- id: first_name
coverage_status: SUPPORTED
features:
- id: automatic_source_writing
label: Automatic Source Writing
coverage_status: SUPPORTED
default:
$ref: '#/components/responses/ErrorResponseGeneral'
components:
schemas:
GetToolsCategoryPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
tools:
type: array
items:
type: object
properties:
id:
type: string
label:
type: string
internal_label:
type:
- string
- 'null'
description: Internal label that can help you debug specific variants of the integration. Only show the `label` to your users.
assets:
type: object
properties:
logo_url:
type: string
icon_url:
type: string
icon_black_url:
type: string
required:
- logo_url
- icon_url
- icon_black_url
paid_api_details_markdown:
type:
- string
- 'null'
description: Markdown formatted text that describes details about the paid API. `null` if the tool is not paid.
fast_track_details_markdown:
type:
- string
- 'null'
description: Markdown formatted text that describes details about the fast track process. `null` if the fast track process is not available.
partner_only_details_markdown:
type:
- string
- 'null'
description: Markdown formatted text that describes partnership requirements. `null` if the tool does not require a partnership.
connection_guide_url:
type:
- string
- 'null'
description: URL to the connection guide for this tool. `null` if no connection guide is available.
coverage:
type: object
properties:
read_models:
type: array
items:
type: object
properties:
id:
type: string
description: ID of the model (e.g. hris_employees).
label:
type: string
description: Label of the model (e.g. Employees).
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
fields:
type: array
items:
type: object
properties:
id:
type: string
description: Key of the field in the model (e.g. first_name).
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
required:
- id
- coverage_status
required:
- id
- label
- coverage_status
- fields
description: List of models we can read for this tool.
write_actions:
type: array
items:
type: object
properties:
id:
type: string
label:
type: string
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
fields:
type: array
items:
type: object
properties:
id:
type: string
description: Key of the input field (e.g. `candidate.first_name`).
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
required:
- id
- coverage_status
required:
- id
- label
- coverage_status
- fields
description: List of supported write actions for this tool.
features:
type: array
items:
type: object
properties:
id:
type: string
label:
type: string
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
required:
- id
- label
- coverage_status
required:
- read_models
- write_actions
- features
description: This describes the supported models and actions of this tool.
required:
- id
- label
- internal_label
- assets
- paid_api_details_markdown
- fast_track_details_markdown
- partner_only_details_markdown
- connection_guide_url
- coverage
required:
- tools
examples:
- tools:
- id: factorial
label: Factorial
internal_label: null
assets:
logo_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/logo.svg
icon_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/icon.svg
icon_black_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/icon-black.svg
paid_api_details_markdown: null
fast_track_details_markdown: null
partner_only_details_markdown: null
connection_guide_url: https://help.kombo.dev/hc/en-us/articles/18743884123409-Factorial-HR-How-do-I-link-my-account
coverage:
read_models:
- id: hris_employees
label: Employees
coverage_status: SUPPORTED
fields:
- id: date_of_birth
coverage_status: SUPPORTED
- id: hris_teams
label: Groups
coverage_status: UNSUPPORTED
fields:
- id: parent_id
coverage_status: UNSUPPORTED
write_actions:
- id: hris_create_employee
label: Create employee
coverage_status: SUPPORTED
fields:
- id: first_name
coverage_status: SUPPORTED
features:
- id: automatic_source_writing
label: Automatic Source Writing
coverage_status: SUPPORTED
required:
- status
- data
PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
id:
type: string
description: The unique ID of the field
key:
type: string
description: The key of the custom field as it will be used in the custom_field object of the corresponding model
integration_field:
type:
- object
- 'null'
properties:
id:
type: string
description: The integration field's unique ID
key:
type: string
description: The key of the integration field in the remote system
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: The type of the integration field. There is a type to avoid collisions between DEFAULT fields and CUSTOM fields with the same key.
label:
type:
- string
- 'null'
description: The label of the integration field in the remote system
required:
- id
- key
- type
- label
description: The integration field the custom field is mapped to. Null if not mapped.
model:
type: string
description: The model the field is associated with
label:
type:
- string
- 'null'
description: The label of the custom field
description:
type:
- string
- 'null'
description: The description of the custom field
required:
- id
- key
- integration_field
- model
- label
- description
examples:
- id: EU3Bwa4iDfGspEELW71WDvvu
key: tshirt_size
integration_field:
id: 3n6geaAmKL5tFonXVAtsMDmr
key: custom.tshirt_size
type: CUSTOM
label: T-Shirt Size
model: hris_employees
label: T-Shirt Size
description: Map this to the employee's tshirt size
required:
- status
- data
PostIntegrationsIntegrationIdSetupLinkRequestBody:
type: object
properties:
language:
type:
- string
- 'null'
enum:
- en
- de
- fr
- it
- es
default: en
description: Language of the setup flow UI.
link_type:
type: string
enum:
- EMBEDDED
- MAGIC_LINK
description: The type of link you want to create. `EMBEDDED` is for the [embedded flow](../guides/connect/embedded-flow) using the Kombo Connect SDK (these links are valid for 1 hour) and `MAGIC_LINK` is for [magic links](../guides/connect/magic-links) which you send out manually to customers (these are valid for 1 year).
required:
- link_type
PostIntegrationsIntegrationIdSetupLinkParameterIntegrationId:
type: string
PostIntegrationsIntegrationIdSetupLinkPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
link:
type: string
format: uri
description: The setup link URL to pass to the Kombo Connect SDK.
required:
- link
required:
- status
- data
DeleteIntegrationsIntegrationIdParameterIntegrationId:
type: string
PutIntegrationsIntegrationIdEnabledParameterIntegrationId:
type: string
PostPassthroughToolApiParameterApi:
type: string
description: The ID of the passthrough API you want to call (some tools provide multiple). Check the endpoint description for a list of all available APIs.
PostIntegrationsIntegrationIdRelinkPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
link:
type: string
format: uri
required:
- link
required:
- status
- data
PostPassthroughToolApiPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
url:
type: string
format: uri
description: The full URL of the request that we automatically assemble for you based on the specified `api`, the specified `path`, and the integration's auth credentials. You can use this to debug path-related issues (e.g., the API returning 404 errors).
status:
type: integer
format: int64
description: The HTTP status code returned from the remote system.
headers:
type: object
additionalProperties:
oneOf:
- type: string
- type: array
items:
type: string
description: The HTTP headers returned from the remote system.
data:
description: The HTTP body returned from the remote system. This will either be an array or object (in the case that JSON was returned) or a string (in any other case).
required:
- url
- status
- headers
examples:
- url: https://api.personio.de/v1/company/employees
status: 200
headers:
content-type: application/json
data:
success: true
data:
- id: 123
first_name: John
last_name: Doe
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
GetIntegrationsIntegrationIdIntegrationFieldsParameterPageSize:
type: integer
format: int64
minimum: 1
maximum: 2000
default: 100
description: The number of results to return per page. Maximum is 2000.
GetIntegrationsIntegrationIdParameterIntegrationId:
type: string
GetIntegrationsIntegrationIdIntegrationFieldsPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
results:
type: array
items:
type: object
properties:
id:
type: string
description: The unique ID of the field.
key:
type: string
description: The key of the field in the remote system.
model:
type: string
description: The model the field is associated with.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: The type of the integration field. There is a type to avoid collisions between DEFAULT fields and CUSTOM fields with the same key.
label:
type:
- string
- 'null'
description: The label of the field in the remote system.
is_passthrough_enabled:
type: boolean
description: Whether the field is included in the integrations_fields array of the corresponding model.
is_writable:
type: boolean
const: false
description: This field is related to a deprecated feature and means nothing, but is kept for backwards compatibility.
required:
- id
- key
- model
- type
- label
- is_passthrough_enabled
- is_writable
examples:
- id: 9suhxJU83Kon4kPTS47837uE
key: tax_id
model: hris_employees
type: DEFAULT
label: Tax ID
is_passthrough_enabled: true
is_writable: false
next_cursor:
type:
- string
- 'null'
description: '**(⚠️ Deprecated - Use `next` instead.)** Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.'
next:
type:
- string
- 'null'
description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.
required:
- results
- next_cursor
- next
examples:
- results:
- id: FFpTK47GhXnU6QAopPq2bdos
key: tax_id
model: hris_employees
type: DEFAULT
label: Tax ID
is_passthrough_enabled: true
is_writable: false
next_cursor: null
next: null
required:
- status
- data
GetIntegrationsIntegrationIdCustomFieldsPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
results:
type: array
items:
type: object
properties:
id:
type: string
description: The unique ID of the field
key:
type: string
description: The key of the custom field as it will be used in the custom_field object of the corresponding model
integration_field:
type:
- object
- 'null'
properties:
id:
type: string
description: The integration field's unique ID
key:
type: string
description: The key of the integration field in the remote system
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: The type of the integration field. There is a type to avoid collisions between DEFAULT fields and CUSTOM fields with the same key.
label:
type:
- string
- 'null'
description: The label of the integration field in the remote system
required:
- id
- key
- type
- label
description: The integration field the custom field is mapped to. Null if not mapped.
model:
type: string
description: The model the field is associated with
label:
type:
- string
- 'null'
description: The label of the custom field
description:
type:
- string
- 'null'
description: The description of the custom field
required:
- id
- key
- integration_field
- model
- label
- description
examples:
- id: EU3Bwa4iDfGspEELW71WDvvu
key: tshirt_size
integration_field:
id: 3n6geaAmKL5tFonXVAtsMDmr
key: custom.tshirt_size
type: CUSTOM
label: T-Shirt Size
model: hris_employees
label: T-Shirt Size
description: Map this to the employee's tshirt size
next_cursor:
type:
- string
- 'null'
description: '**(⚠️ Deprecated - Use `next` instead.)** Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.'
next:
type:
- string
- 'null'
description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.
required:
- results
- next_cursor
- next
examples:
- results:
- id: D9CoSqqun6ix7uKEwb2kHBU1
key: unified_tax_id
integration_field:
id: FFpTK47GhXnU6QAopPq2bdos
key: tax_id
type: DEFAULT
label: The employee's tax ID
model: hris_employees
label: null
description: null
next_cursor: null
next: null
required:
- status
- data
GetIntegrationsIntegrationIdCustomFieldsParameterPageSize:
type: integer
format: int64
minimum: 1
maximum: 250
default: 100
description: The number of results to return per page. Maximum is 250.
GetToolsCategoryParameterCategory:
type: string
enum:
- hris
- ats
- assessment
- lms
GetIntegrationsIntegrationIdPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
id:
type: string
tool:
type: object
properties:
id:
type: string
description: The ID of the connected tool in Kombo (e.g. `factorial`).
label:
type: string
internal_label:
type:
- string
- 'null'
description: Internal label that can help you debug specific variants of the integration. Only show the `label` to your users.
logo_url:
type: string
format: uri
description: URL to an SVG logo of the connected tool. The logo usually contains the tool name.
icon_url:
type: string
format: uri
description: URL to a square SVG icon of the connected tool.
required:
- id
- label
- internal_label
- logo_url
- icon_url
category:
type: string
enum:
- HRIS
- ATS
- ASSESSMENT
- LMS
status:
type: string
enum:
- ACTIVE
- INVALID
- INACTIVE
description: 'The current status of the integration.
- `ACTIVE`: The integration is syncing data as expected.
- `INVALID`: The integration has stopped syncing data because of invalid credentials. To fix this, reach out to your customer to [reconnect the integration](../guides/integration-states#credentials-invalid).
- `INACTIVE`: The integration has stopped syncing as it''s been manually set to inactive. You can [enable it again](../guides/integration-states#inactive) in the integration''s page.'
setup_status:
type: string
enum:
- INCOMPLETE
- FINAL_SYNC_PENDING
- COMPLETED
description: 'The setup_status is used in conjunction with the filtering and field mapping features. If these are enabled in the connection flow, the integration will start in an "INCOMPLETE" state and move to "COMPLETE" once all steps are finished.
- `INCOMPLETE`: Setup is still in progress. Some steps aren’t finished, so no data is available yet. Syncs only run as needed for setup.
- `FINAL_SYNC_PENDING`: Setup is complete, and the final sync is running. Data will be available after this sync is done.
- `COMPLETED`: Setup is fully finished, and the integration is ready to use.'
end_user:
type: object
properties:
organization_name:
type: string
creator_email:
type:
- string
- 'null'
pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$
origin_id:
type:
- string
- 'null'
description: The ID you have passed initially to the connection flow to create this integration.
required:
- organization_name
- creator_email
- origin_id
scope_config:
type: object
properties:
id:
type: string
name:
type:
- string
- 'null'
required:
- id
- name
data_expired_at:
description: The date when the integration configuration (e.g. filters, scope config) was changed, invalidating the synced data. It is cleared after a successful sync. If this field is `null` the data you fetch is valid to the state of the last sync or webhook event received. Otherwise it will be set to `null` with the next successful sync.
type:
- string
- 'null'
format: date-time
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
created_at:
description: YYYY-MM-DDTHH:mm:ss.sssZ
type: string
format: date-time
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
beta:
type: boolean
read_models:
type: array
items:
type: object
properties:
id:
type: string
description: ID of the model (e.g. hris_employees).
label:
type: string
description: Label of the model (e.g. Employees).
is_available:
type: boolean
description: Whether the datapoint is available and enabled and not opted out of.
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
scope_config_setting:
type: string
enum:
- ENABLED
- DISABLED
- OPTIONAL
description: The setting of the datapoint in the scope config that you configured in the Kombo dashboard.
opted_out_by_customer:
type: boolean
description: Whether the datapoint is opted out by your customer in the connection flow.
fields:
type: array
items:
type: object
properties:
id:
type: string
description: Key of the field in the API (e.g. first_name).
is_available:
type: boolean
description: Whether the datapoint is available and enabled and not opted out of.
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
scope_config_setting:
type: string
enum:
- ENABLED
- DISABLED
- OPTIONAL
description: The setting of the datapoint in the scope config that you configured in the Kombo dashboard.
opted_out_by_customer:
type: boolean
description: Whether the datapoint is opted out by your customer in the connection flow.
required:
- id
- is_available
- coverage_status
- scope_config_setting
- opted_out_by_customer
required:
- id
- label
- is_available
- coverage_status
- scope_config_setting
- opted_out_by_customer
- fields
write_actions:
type: array
items:
type: object
properties:
id:
type: string
description: ID of the action (e.g. ats_create_candidate).
label:
type: string
description: Label of the action (e.g. Create candidate).
is_available:
type: boolean
description: Whether the datapoint is available and enabled and not opted out of.
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
scope_config_setting:
type: string
enum:
- ENABLED
- DISABLED
- OPTIONAL
description: The setting of the datapoint in the scope config that you configured in the Kombo dashboard.
opted_out_by_customer:
type: boolean
description: Whether the datapoint is opted out by your customer in the connection flow.
fields:
type: array
items:
type: object
properties:
id:
type: string
description: Key of the input field (e.g. candidate.first_name).
is_available:
type: boolean
description: Whether the datapoint is available and enabled and not opted out of.
coverage_status:
type: string
enum:
- SUPPORTED
- UNSUPPORTED
- NOT_IMPLEMENTED
- UNKNOWN
description: 'The status of a datapoint of an integrated tool:
- `SUPPORTED`: the tool supports the datapoint and it can be used through Kombo.
- `UNSUPPORTED`: the tool does not support the datapoint.
- `NOT_IMPLEMENTED`: tool supports the datapoint but it was not integrated by Kombo for a given reason (see coverage grid).
- `UNKNOWN`: the datapoint is not integrated yet and Kombo has no information about it''s availability in the tool.'
required:
- id
- is_available
- coverage_status
description: Field support status for the action. Please note that action fields can't be configured in the scope config or opted out by your customer.
required:
- id
- label
- is_available
- coverage_status
- scope_config_setting
- opted_out_by_customer
- fields
required:
- id
- tool
- category
- status
- setup_status
- end_user
- scope_config
- data_expired_at
- created_at
- beta
- read_models
- write_actions
examples:
- id: factorial:8d1hpPsbjxUkoCoa1veLZGe5
tool:
id: factorial
label: Factorial
internal_label: null
logo_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/logo.svg
icon_url: https://storage.googleapis.com/kombo-assets/integrations/factorial/icon.svg
category: HRIS
status: ACTIVE
setup_status: COMPLETED
end_user:
organization_name: Acme
creator_email: example-integration-creator@acme.com
origin_id: 2DQJAUtSzzzKP9buDTvUvPk3
scope_config:
id: B1hu5NGyhdjSq5X3hxEz4bAN
name: Anonymous Scopes
data_expired_at: null
created_at: '2022-08-07T14:01:29.196Z'
beta: false
read_models:
- id: hris_employees
label: Employees
is_available: true
coverage_status: SUPPORTED
scope_config_setting: ENABLED
opted_out_by_customer: false
fields:
- id: date_of_birth
is_available: false
coverage_status: SUPPORTED
scope_config_setting: OPTIONAL
opted_out_by_customer: true
write_actions:
- id: hris_create_employee
label: Create employee
is_available: true
coverage_status: SUPPORTED
scope_config_setting: ENABLED
opted_out_by_customer: false
fields:
- id: first_name
is_available: true
coverage_status: SUPPORTED
required:
- status
- data
PostForceSyncRequestBody:
type: object
properties:
type:
type: string
enum:
- FULL
- DELTA
default: FULL
description: The type of the triggered sync.
PostForceSyncPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
already_queued:
type: boolean
description: We only allow 1 concurrent sync to be running or queued.
sync_id:
type: string
description: ID of the newly-created or already-queued-or-running sync.
type:
type: string
enum:
- FULL
- DELTA
description: The type of the triggered sync. May differ from request, if the integration does not support delta syncs or if another sync is already running.
required:
- already_queued
- sync_id
- type
examples:
- already_queued: false
sync_id: 119ihtp91nA3dqRFiV67nXS6
type: DELTA
required:
- status
- data
PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdParameterCustomFieldId:
type: string
description: The unique ID of the custom field that should be updated
GetIntegrationsIntegrationIdIntegrationFieldsParameterCursor:
type: string
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdParameterIntegrationId:
type: string
GetCheckApiKeyPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
environment_id:
type: string
customer_id:
type: string
description: '**(⚠️ Deprecated)** Renamed to `environment_id`.'
required:
- environment_id
- customer_id
examples:
- environment_id: 2Uev1YUTqLFdvMPD3Jtrg2FX
customer_id: 2Uev1YUTqLFdvMPD3Jtrg2FX
required:
- status
- data
PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdParameterIntegrationId:
type: string
description: The unique ID of the integration where the custom field mapping should be updated
PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdParameterIntegrationFieldId:
type: string
GetIntegrationsIntegrationIdCustomFieldsParameterIntegrationId:
type: string
PutIntegrationsIntegrationIdEnabledPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
required:
- status
- data
GetIntegrationsIntegrationIdCustomFieldsParameterCursor:
type: string
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
DeleteIntegrationsIntegrationIdRequestBody:
type: object
properties: {}
PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdRequestBody:
type: object
properties:
enable_passthrough:
type:
- boolean
- 'null'
required:
- enable_passthrough
PutIntegrationsIntegrationIdEnabledRequestBody:
type: object
properties:
value:
type: boolean
description: The desired state of the integration (e.g., `true` for enabled, `false` for disabled).
required:
- value
DeleteIntegrationsIntegrationIdPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
required:
- status
- data
PutIntegrationsIntegrationIdCustomFieldsCustomFieldIdRequestBody:
type: object
properties:
integration_field_id:
type:
- string
- 'null'
description: The integration field's unique ID which the custom field should be mapped to. Null to remove a mapping.
required:
- integration_field_id
GetIntegrationsIntegrationIdIntegrationFieldsParameterIntegrationId:
type: string
PostIntegrationsIntegrationIdRelinkParameterIntegrationId:
type: string
PostIntegrationsIntegrationIdRelinkRequestBody:
type: object
properties:
language:
type:
- string
- 'null'
enum:
- en
- de
- fr
- it
- es
default: en
description: Language of the connection flow UI.
scope_config_id:
type:
- string
- 'null'
description: 'Specify a scope config which the integration will start using once the reconnection flow has been completed.
This can be useful if you want to update the permissions of an integration, but only want the change to take effect once the user has updated their API credentials to prevent sync issues.'
link_type:
type: string
enum:
- EMBEDDED
- MAGIC_LINK
default: EMBEDDED
description: 'The type of link you want to create. `EMBEDDED` is for the [embedded flow](../guides/connect/embedded-flow) using the Kombo Connect SDK (these links are valid for 1 hour) and `MAGIC_LINK` is for [magic links](../guides/connect/magic-links) which you send out manually to customers (there are valid for 1 year).
This defaults to `EMBEDDED`, which is our recommended method of implementing the connection flow for a seamless user experience.'
PostPassthroughToolApiRequestBody:
type: object
properties:
method:
type: string
enum:
- GET
- POST
- DELETE
- PUT
- PATCH
description: The HTTP method (e.g., `GET`) of the request.
path:
type: string
description: The path of the endpoint you want to call. We automatically prepend the base URL of the API (all base URLs are documented in the endpoint description).
headers:
type: object
additionalProperties:
type: string
description: The headers to send with the request. Note that we automatically supply any authentication-related headers.
params:
type: object
additionalProperties:
type: string
description: The query parameters to send in addition to the ones in the `path`.
data:
description: The data to submit as part of the request body. This can either be an array or object (in which case we will forward it as JSON) or a string (in which case we will forward it raw).
response_as_base64:
type: boolean
description: If set to `true`, the response will be returned as a base64-encoded string. This is useful for binary data (e.g., PDFs).
multipart_form_data:
type: array
items:
type: object
properties:
name:
type: string
description: The key of the form data
value:
oneOf:
- type: string
description: The value of the form data (Can be an object if the field is of the type file)
- 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
required:
- name
- value
description: The data to submit as part of the request body if the request's `Content-Type` is `multipart/form-data`.
api_options:
type: object
additionalProperties:
type: string
description: Custom options interpreted by the passthrough API adapter you've selected. These options are not documented right now as they're only for very advanced use cases.
required:
- method
- path
PostPassthroughToolApiParameterTool:
type: string
description: The ID of the tool whose passthrough API you want to call (e.g., `personio`).
PatchIntegrationsIntegrationIdIntegrationFieldsIntegrationFieldIdPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
id:
type: string
description: The unique ID of the field.
key:
type: string
description: The key of the field in the remote system.
model:
type: string
description: The model the field is associated with.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: The type of the integration field. There is a type to avoid collisions between DEFAULT fields and CUSTOM fields with the same key.
label:
type:
- string
- 'null'
description: The label of the field in the remote system.
is_passthrough_enabled:
type: boolean
description: Whether the field is included in the integrations_fields array of the corresponding model.
is_writable:
type: boolean
const: false
description: This field is related to a deprecated feature and means nothing, but is kept for backwards compatibility.
required:
- id
- key
- model
- type
- label
- is_passthrough_enabled
- is_writable
examples:
- id: 9suhxJU83Kon4kPTS47837uE
key: tax_id
model: hris_employees
type: DEFAULT
label: Tax ID
is_passthrough_enabled: true
is_writable: false
required:
- status
- data
responses:
ErrorResponseGeneral:
description: The standard error response with just the platform error codes.
content:
application/json:
schema:
type: object
properties:
status:
type: string
enum:
- error
error:
type: object
properties:
code:
type:
- string
- 'null'
enum:
- PLATFORM.RATE_LIMIT_EXCEEDED
- PLATFORM.CONCURRENCY_LIMIT_EXCEEDED
- PLATFORM.INTEGRATION_NOT_FOUND
- PLATFORM.INPUT_INVALID
- PLATFORM.UNKNOWN_ERROR
- PLATFORM.IP_NOT_WHITELISTED
- PLATFORM.AUTHENTICATION_INVALID
- PLATFORM.TASK_TIMED_OUT
example: PLATFORM.RATE_LIMIT_EXCEEDED
description: Some errors include an error code that can be used to identify their cause. See the [Error Handling Docs](https://docs.kombo.dev/guides/errors) for more information. For your error handling logic please use the error `code` instead of other properties (e.g. message, http status code, ...).
title:
type:
- string
- 'null'
description: A static, human-readable label.
message:
type: string
description: A dynamic, detailed description of what went wrong in this specific instance.
log_url:
type:
- string
- 'null'
format: uri
description: The log page in the Kombo UI lists every interaction with full details. If you need assistance, share that link with our support team.
required:
- code
- title
- message
- log_url
description: Error details with structured code for programmatic handling.
required:
- status
- error
examples:
Error Response:
description: When building error handling logic, always use the `code` field to identify specific error types programmatically. See the complete list of error codes in the [docs](https://docs.kombo.dev/guides/errors).
value:
status: error
error:
code: INTEGRATION.MODEL_NOT_AVAILABLE
title: This data model isn't supported for the selected integration.
message: The "employees" model is not yet available for Greenhouse. Please reach out to Kombo if you need this functionality.
log_url: https://app.kombo.dev/my-prod/logs?interactionId=123456
Minimal Error Response:
description: The "message" is always required while other fields can also be `null`. See the [docs](https://docs.kombo.dev/guides/errors) for more information.
value:
status: error
error:
code: null
title: null
message: The message is always in the response.
log_url: null
securitySchemes:
ApiKey:
type: http
scheme: bearer
description: Create an API key on the [Secrets](https://app.kombo.dev/secrets) page in the Kombo dashboard.