Candidate SyncApplication Flow

Application Flow

The end-to-end flow for submitting candidates through the Kini API: fetch jobs and their application questions, collect answers in your application form, submit the application, and track its delivery to the company's ATS.

Overview

A typical integration submits candidates in four steps:

  1. Fetch jobs — including their application form fields and screening questions.
  2. Collect the application — display the questions in your own application flow.
  3. Submit the application — including answers and attachments.
  4. Track delivery — via webhook or by polling the sync status.

All requests require the Authorization and Company-Id headers described in the Authentication guide.


Step 1: Fetch Jobs and Their Questions

Retrieve the jobs of a connected company via GET /jobs. Two fields on the job describe what the application form must collect:

FieldDescription
application_form_fieldsThe fields of the company's application form, in display order — including type, required, and options for select-style fields.
screening_questionsJob-specific screening questions, each with an id, the question text, and an answer_type.

Supported screening question answer types are boolean, text, textarea, select, and multiselect.

Application questions can change after a job is published. Kini communicates changes through the Job Updates webhook — a job updated event means you should re-fetch the job and refresh your cached form fields and questions.

Step 2: Collect the Application

Render the form fields and screening questions in your application flow. Respect the required flags and, for select/multiselect questions, restrict answers to the provided options.

Step 3: Submit the Application

Create the application via POST /applications. The key parts of the payload:

Payload partNotes
candidateRequired. At minimum email and first_name.
job or external_job_idOne of the two is required to link the application to a job.
screening_questionsThe candidate's answers. Each entry must reference the question id from the job and match the question's answer_type.
attachmentsCVs, cover letters, photos. Files are sent inline as Base64-encoded data with a name, type, and content_type.
partner_application_idYour own ID for the application — include it so both sides can reference the same record. See Duplicate Applications.

See the API Reference for a complete request example with all supported fields.

Attachment Size Limit

The total request body must stay below 27.5 MB. Base64 encoding adds roughly 37% overhead, so plan for about 20 MB of raw attachment files per application. Larger requests are rejected with a 400 error — if a candidate uploads more, compress the files or drop the least important attachment.

Step 4: Track Delivery

Kini forwards the application to the company's ATS asynchronously. Two ways to follow along:

  • Push: subscribe to the Application Sync Status Update webhook to be notified when the application reaches the ATS (or fails to).
  • Pull: poll GET /applications and read the sync_status field (SUCCESS, SUCCESS_FALLBACK, FAILURE, EXPECTED_FAILURE, NOTSENT). You can filter by sync_status — see Filtering.

Once synced, the external_id field carries the application's ID in the company's ATS.