Overview
Kombo’s parsing process extracts the screening questions and additional form metadata for a job posting. This page describes the API response structure and provides advice on displaying the form in your product.Block structure
The application form is composed of an array of blocks. Each block’sblock_type tells you how to render it:
Every job’s application form is different and dynamically parsed by Kombo. Ensure you handle the block structure by rendering all blocks in the order provided, including nested sections.
Sections
A section has alabel and a children array. Its children can be questions, information blocks, or further sections.
h6. For example, if your page title uses h1, start the form’s sections at h2 and increment by one per nested heading.
Sections have no display_when property of their own. Display a section and its heading only when at least one question or information block within it is visible, including through nested sections. See Conditional rendering.
Questions
Every question includesquestion_id, label, description, required, category, question_type, unified_key, options, and display_when.
Use question_type to choose how to render the input and question_id to identify its answer. Show the label, mark required questions, and display the description as helper text when it is not null.
The options array is present for SINGLE_SELECT and MULTI_SELECT questions and is null for other types. Each option has an id, a label, and a nullable unified_key.
Information blocks
An information block contains instructions or other content in itstext property. It has no question_id and does not collect an answer.
display_when rules as questions, so explanations can appear alongside the questions they relate to.
HTML within labels, descriptions, and information block text
Question labels, descriptions, and information block text can contain HTML links, such as a link to a privacy policy.Example
Categories
Questions and information blocks include acategory value. "EEO" identifies Equal Employment Opportunity content, and null means uncategorized.
The category describes the content. required and display_when still determine whether an answer is required.
Example
Question type details
The examples below pair each question type with a matching answer.Text (TEXT)
Text (TEXT)
A
TEXT question accepts a non-empty string.Question
Answer
Numbers (NUMBER)
Numbers (NUMBER)
A
NUMBER question accepts a number.Question
Answer
Booleans (BOOLEAN)
Booleans (BOOLEAN)
A
BOOLEAN question accepts true or false.Question
Answer
Dates (DATE)
Dates (DATE)
A
DATE question accepts an ISO 8601 date string.Question
Answer
Single select (SINGLE_SELECT)
Single select (SINGLE_SELECT)
A
SINGLE_SELECT question accepts the id of one option from its options array.Question
Answer
Multi-select (MULTI_SELECT)
Multi-select (MULTI_SELECT)
A
MULTI_SELECT question accepts an array of option IDs from its options array.Question
Answer
Files (FILE)
Files (FILE)
A
FILE question accepts one file as an object containing:name: the filename, including its extension.content_type: the file’s MIME type.data: the base64-encoded file contents.
Question
Answer
Storing candidate answers
Your application can reuse the same answer format to drive the whole apply flow. Keep a map ofquestion_id to answer for each candidate’s application session. Using the same values when evaluating display_when conditions and building the application payload ensures these steps stay consistent.
When building screening_question_answers, turn the map into an array of { question_id, answer } entries using those stored values.
Omit unanswered optional questions from the submission.
Conditional rendering
Questions and information blocks have a nullabledisplay_when property. When it is null, the block is always visible. Otherwise, display the block only when the referenced question’s current answer matches answer_equals.
The condition refers to a question through question_id. Match against the answer you store for that question:
If the referenced question has no answer yet, the condition is not met. For multi-selects, the arrays do not need to be identical: a condition containing English and German is met if the candidate selects either language, or both.
Re-evaluate conditions whenever an answer changes. A conditional question can reveal further questions, so follow the chain of conditions recursively. When a question’s condition is no longer met, remove its answer from storage. This prevents an old answer from keeping further questions visible or being included in the submission.
Complete application form example
Below you’ll find a sample application form to use as test data for your form renderer. This example combines all block types and all question types. It includes nested sections, required and optional questions, HTML links, EEO content, and unified keys on questions and options.Show the complete JSON
Show the complete JSON
Check these behaviors:
- Initial state (no answers): hide all conditional blocks and empty sections.
- Select Remote as the working location: show the Remote Work section.
- Try both computer answers: show the matching conditional equipment questions.
- Deselect Remote as the working location: hide its sections and clear their answers.
- Select Hybrid: show its information block and heading.
- Languages: show Language Experience only for English or German.
- Gender: show the follow-up only for Prefer to self-describe.