type in current_step.fields sets the JSON shape of its answer.
The rules below cover every field type on API contract 2026-08-31, followed
by the failure and correction codes an application can return.
Field shape
field_id, type, label, required, and
requires_answer. options, non-empty constraints, format, and
sensitive: true appear only when they apply; empty metadata and
sensitive: false are omitted. Values already on the ATS form are not
exposed.
required describes the ATS form. requires_answer says whether you must
send a value on this step. Send every field with requires_answer: true, and
optional fields only when the candidate gave a value. Send each field ID once,
and never send unknown IDs or IDs from another application or step.
Scalar answer values
Each answer is{ "field_id": "the-returned-id", "value": ... }. Send JSON
values of the right type, not strings containing JSON.
A typeahead also accepts the provider-native shape
{"query":"MIT","selection":{"value":"...","label":"..."}} when you already
have a valid selection. Do not fabricate native IDs.
Omit unanswered optional fields instead of sending empty strings or null.
false and 0 are real answers, so don’t drop them with a truthiness check.
A required field you can’t answer needs candidate input, not a guess.
File answers
Jobo downloads the file from the URL you supply. The API accepts no local path or multipart upload. The URL must:- Be HTTPS on port 443 and publicly reachable. Localhost and private-network
URLs are rejected with
unsafe_file_url. - Download the file without browser cookies or a login page.
- Stay valid through upload and retries.
- Serve a file within the platform’s 10 MiB download limit, any returned file constraints, and the ATS’s allowed formats. An ATS may set a smaller limit.
Education and work history
A repeated ATS section is onerepeating_group field, not flattened
children:
item_fields[].key.
Typeahead children take the actual answer directly:
item_fields include every key shown; omit any key the actual schema does not
list:
item_fieldsvaries by ATS, which may add children such as country, state, contact permission, graduation status, or hours per week. Unknown item keys are rejected.- The array is the complete desired group state, in order. It is capped by the provider’s limit and a platform maximum of 100 entries.
group_typeis one ofeducation,work_experience,certification,website,language,skill, orother.- When
is_currentis true,end_datemust be null or omitted. - Nested validation errors carry
field_id,item_index,field_key,code, andmessage.
sensitive: true, and Jobo never infers
their answers. Build answers from the displayed label, provider field ID,
type, options, and constraints, not from inferred semantic metadata.
Failure and correction codes
Terminal applications exposefailure: {code, message, retryable}. Stable
failure codes include:
retryable is authoritative for each failure. submission_unconfirmed is not
safely retryable, because the employer may already have the application.
Until the correction limit runs out, file and ATS value problems come back in
command_errors instead, with codes such as unsafe_file_url,
file_upload_failed, invalid_file_type, ats_field_rejected, and
ats_fill_failed. Answer with a complete corrected snapshot for the step.
