Kini AIOverview (Beta)

Kini AI (Beta)

BETA — Let candidates apply to any job directly on your job board. You show the form, Kini delivers the application to the employer.

Beta — subject to change

Kini AI is in closed beta and is switched on per partner by your Kini contact.

What it does

A candidate finds a job on your job board and applies right there — no redirect to the employer's website.

  1. You tell us which job it is (the link to the employer's job ad).
  2. We read the employer's application form and give you its fields.
  3. You show those fields on your site. The candidate fills them in.
  4. You send us the application. We deliver it to the employer.

You do not need to set anything up with the employer. No ATS connection, no employer onboarding.

Two ways to start

However a job reaches us, everything after that works the same way: you fetch the form fields, show them on your site, and send us the application.

Before you start

You need an API key from the Kini App. Send it with every request — see Authentication. You do not need the Company-Id header for Kini AI.

curl 'https://api.getkini.com/jobs/form_fields/?apply_url=https%3A%2F%2Fjobs.example.de%2Fstelle%2F2026-061' \
  --header 'Authorization: Bearer YOUR_API_KEY'

How it works

Send us the job link

POST /jobs/form_fields/ — only needed on the API path. Skip this if the job was added in the Kini App or by your Kini contact.

Get the form fields

GET /jobs/form_fields/?apply_url=... — returns the fields of the employer's application form.

Show the form

Show the fields on your job board. The candidate fills them in.

Send the application

POST /applications/ — we deliver it to the employer and keep you updated.

Only needed on the API path.

curl -X POST 'https://api.getkini.com/jobs/form_fields/' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "apply_url": "https://jobs.example.de/stelle/2026-061",
    "partner_job_id": "your-job-123"
  }'
body
apply_urlstring
Required

The link to the employer's job ad or application form.

body
partner_job_idstring

Your own ID for the job, so you can find it again.

We answer with 202 Accepted and start reading the employer's form. This usually takes a few seconds, sometimes a few minutes.

  • Send it when the job is published on your board, not when a candidate clicks "apply". Then the form is ready in time.
  • Sending the same link twice is fine. Nothing is duplicated.

Step 2: Get the form fields

curl 'https://api.getkini.com/jobs/form_fields/?apply_url=https%3A%2F%2Fjobs.example.de%2Fstelle%2F2026-061' \
  --header 'Authorization: Bearer YOUR_API_KEY'

What status means:

statusWhat to do
readyShow the form on your site
processingWe are still reading the form. Show your normal "apply on the employer's site" button for now
not_supportedWe can't send applications to this employer's website. Show your normal "apply on the employer's site" button
offlineThe job is no longer online

not_supported applies to the employer, not the single job: if we can't handle one of an employer's jobs, we can't handle the others either. This is usually because the employer's website blocks automated applications.

Fetch the form fields each time before you show the form. It is quick, and you always get the latest version if the employer changed something.

What each field type means, and how to show it: Form Fields.

Step 3: Show the form

Show the fields in the given order, with the employer's labels. Four rules:

  1. Show privacy text as it is. Show every info field unchanged, with its links. This is usually the employer's privacy notice.
  2. Never tick consent. The candidate must tick consent boxes themselves. We never tick them either.
  3. Mark required fields. Don't let the candidate send the form without them.
  4. Only offer the given options. For choice fields, show exactly the options we give you.

Step 4: Send the application

Use the normal POST /applications/ endpoint.

{
  "job": 48211,
  "partner_application_id": "your-application-456",
  "candidate": {
    "first_name": "Maria",
    "last_name": "Schneider",
    "email": "maria.schneider@example.com"
  },
  "screening_questions": [
    { "id": "anrede", "answer": "Frau" },
    { "id": "vorname", "answer": "Maria" },
    { "id": "email", "answer": "maria.schneider@example.com" },
    { "id": "datenschutz", "answer": true }
  ],
  "attachments": [
    { "id": "lebenslauf", "name": "lebenslauf.pdf", "content_type": "application/pdf", "data": "JVBERi0xLjQK..." }
  ]
}
body
jobinteger
Required

The job_id from Step 2.

body
partner_application_idstring
Required

Your own ID for the application. With it, an application is never created twice — see Duplicate Applications.

body
candidateobject
Required

The candidate's name and email address.

body
screening_questionsarray
Required

One entry per answer. Use the id of the form field as id, and put the answer into answer.

body
attachmentsarray

Files such as the CV, as Base64. Use the id of the file field, and respect its size limit.

That's it. We deliver the application to the employer in the background.

Checking the status

Choose what suits you — you can use all three:

We email you about applications, for example when one could not be delivered. Tell your Kini contact which address to use.

sync_statusMeaning
NOTSENTNot delivered yet — we are still working on it
SUCCESSDelivered to the employer
SUCCESS_FALLBACKDelivered to the employer another way, for example by email
EXPECTED_FAILURECould not be delivered for a known reason, for example the job is closed or the candidate already applied
FAILURECould not be delivered — our team is looking into it

When something goes wrong

In the rare case that an application can't be delivered automatically:

  • Our team checks it and fixes it — usually on the same working day. You don't need to send it again.
  • If it still can't be delivered, we email you automatically so you can let the candidate know.

Questions? Write to tech@getkini.com.