IntegrationsIntegrations

Integrations

Discover the ATS integrations Kini supports and the configuration fields each one needs, so you can build a setup flow that works for every ATS.

The Integrations endpoints describe what Kini can connect to and what each connection needs. Read them before creating a company or configuring its integration — together they let you drive the whole setup from your own UI without hard-coding a single ATS.

Both endpoints require a partner-scoped API key in the Authorization header — see Authentication.

Available endpoints

  • GET /integrations/ — list the ATS integrations Kini offers, each with the slug you pass as ats when creating a company and as integration when configuring one.
  • GET /integrations/{integration}/fields/ — list the configuration fields a single integration needs, including where each value belongs in the config object.

The setup flow

List the integrations

Call GET /integrations/ and let the user pick one. Keep its slug.

Create or look up the company

Pass the slug as ats in Create Company, or reuse an existing company.

Build the form

Call GET /integrations/{integration}/fields/ and render one input per field, ordered by order. Skip everything where is_visible is false — those are filled from their defaults and are not for the customer to see.

Submit the answers

Send the values to Compose Company Integration as config, keyed by each field's config_path.

Common use cases

  • Offer a single "connect your ATS" flow that covers every integration, instead of one hand-built form per system.
  • Show a customer the walkthrough for generating their own credentials, using help_article_url.
  • Filter the choices you present by job_sync_supported and candidate_sync_supported.
  • Hand the setup to the company admin instead: Create Magic Link sends them into Kini's own setup UI, and you skip building the form altogether.

Before you start

  • Neither endpoint is paginated — both return a plain array.
  • Only publicly offered integrations are returned, ordered by name.
  • The field list depends on the partner's entitlements, so two partners can see different forms for the same integration. Do not cache one field list and reuse it across partners.
  • An unknown integration slug returns an empty array, not a 404.

config_path values are dotted paths such as credentials.api_key. You may send them flat or nested — {"credentials.api_key": "…"} and {"credentials": {"api_key": "…"}} are equivalent. Paths that end in a dot, such as channel_mapping., expect a nested object. Anything under credentials. is written to the secret store and never returned by the API.