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.