XING Custom Apply Questions
Overview
This document describes how to use standard questions and custom questions when posting jobs to XING, either via JSON API or XML feed.
It covers:
- Which standard questions are supported
- Which values are supported for each question
- How to configure them in the JSON API
- How to configure them in the XML feed
There are two question categories:
- Custom questions are recruiter-defined questions with configurable wording and type.
- Standard questions are predefined questions with fixed IDs and fixed answer formats. Some of them can also be used as screening criteria to automatically reject applicants who do not meet certain requirements.
A form may contain:
- Only standard questions
- Only custom questions
- Or a mix of both
Important rules:
-
The mandatory
idfield in every question is used as the key when submitting the applicant’s answers to the ATS. -
Make sure each
idis unique and meaningful for downstream processing. -
This allows the client to change the wording of a question while a job is already posted without having to change the
idof the question.
Custom Questions
Custom questions allow the client to define their own questions that will be shown to the applicant during the application process.
These questions are displayed after the default XING Instant Apply questions and the standardized questions.
The order they are shown to the applicant is determined by the order they are defined in the
custom_questions
array.
Each custom question object must include the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
type
|
String | Yes | The type of the question. Must be one of the supported custom question types below. |
id
|
String | Yes | Unique identifier for the question. |
question
|
String | Yes | The question text shown to the applicant. |
required
|
Boolean | No |
Whether answering is mandatory. Defaults to
false.
|
Additional options can or must be provided based on the question type, as described below.
In order to have some data integrity, we enforce the following limits:
- We allow a maximum of 50 custom questions.
- The string for a question can be at maximum 255 characters long.
Text Input
type: "text"
Free text input for applicants to provide their answers. It can be used for single-line or multiline text input, decided via the
multiline
option.
Additional options for text inputs:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
multiline
|
Boolean | No |
false
|
Allows multiline input. |
Returned value:
The value returned for text inputs is a plain string containing the applicant’s response.
Date Input
type: "date"
A date input allows the applicant to select a date.
Returned value:
The value returned for date inputs is the selected date as a string formatted as
YYYY-MM-DD
.
Boolean Input
type: "boolean"
Simple true/false question. It will likely be rendered as a checkbox, switch, or similar.
If the field is not required, the answer can be
null
.
Returned value:
The value returned is a simple boolean
true
or
false
.
Numeric Input
type: "numeric"
Free numeric input for applicants to provide a number. Currently, only integer values are supported.
Default allowed range is
0
to
100000000
. Limits can be adjusted via options.
Additional options for numeric inputs:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
min
|
Integer | No |
0
|
Minimum allowed value. Cannot be lower than
-100000000.
|
max
|
Integer | No |
100000000
|
Maximum allowed value. Cannot be higher than
100000000.
|
Returned value:
The value returned for numeric inputs is an integer representing the applicant’s response.
Select Input
type: "select"
The applicant is presented with a list of options to choose from. They are able to select one or multiple choices.
Additional attributes for select inputs:
| Field | Type | Required | Description |
|---|---|---|---|
options
|
Array | Yes | List of selectable options. See below. |
maximum_choices_allowed
|
Integer |
No, default:
1
|
If set to
1
(default), it is a single-select field.
If set to a value greater than
1
, it uses a multi-select interface.
It can be set to a number equal to or higher than the given options to allow selecting all.
|
Each option in the
options
array should have the following structure:
| Field | Type | Required | Description |
|---|---|---|---|
label
|
String | Yes | Display text for the option. |
value
|
String | Yes | Value submitted when this option is selected. |
We enforce the following limits for select questions:
- We allow a maximum of 270 options.
-
The string for the
labelcan be at maximum 255 characters long. - Shorter strings are strongly encouraged as the UI might only show the first 50 or so characters.
Returned value:
-
If
maximum_choices_allowedis not given ormaximum_choices_allowed == 1, the value returned is the selected option value as a string. -
If
maximum_choices_allowed > 1, the value returned is an array with the values of the selected options.
File Upload
type: "file"
A file upload option allows applicants to upload files. Currently, no custom limitation of file types is supported. Files are checked for viruses on our side.
Returned value:
This returns an object containing the uploaded file’s information.
| Field | Type | Description |
|---|---|---|
content_type
|
String | The MIME type of the uploaded file. |
data
|
String | The base64-encoded content of the file. |
file_name
|
String | The original name of the uploaded file. |
Standard Questions
Standard question IDs use the reserved namespace
xing.standard.*
.
-
Do not use
xing.standard.*for custom question IDs. - Standard questions are localized by XING before they are shown to candidates.
- Standard questions with predefined answer options must use the values defined in this document.
- If you need different wording or a different option set, use a custom question instead.
Supported Questions
| Question | Question Type | Supported Answer Values | Supported Screening Rule | Notes |
|---|---|---|---|---|
Notice period
xing.standard.notice_period
|
Single-select |
immediately
,
2_weeks
,
1_month
,
2_months
,
3_months
,
6_months
,
other
|
None | |
English level
xing.standard.language_skills.english
|
Single-select |
0
,
1
,
2
,
3
,
4
|
must_be_at_least
|
0
= none,
1
= basic,
2
= good,
3
= fluent,
4
= first language
|
German level
xing.standard.language_skills.german
|
Single-select |
0
,
1
,
2
,
3
,
4
|
must_be_at_least
|
0
= none,
1
= basic,
2
= good,
3
= fluent,
4
= first language
|
Salary expectation
xing.standard.salary_expectation
|
Numeric | Integer >= 0 |
must_be_below
|
Salary is yearly in EUR |
Eligibility to work in the EU
xing.standard.eu_work_eligibility
|
Boolean |
true
or
false
|
must_be_true
|
|
Country of residence
xing.standard.country_of_residence
|
Country |
ISO 3166-1 alpha-2 country code, for example
DE
,
ES
,
CH
|
None | Must not be used as a screen-out criterion |
City of residence
xing.standard.city_of_residence
|
Text | String, max 500 characters | None | |
Driving license
xing.standard.driving_license
|
Boolean |
true
or
false
|
must_be_true
|
|
Gender
xing.standard.gender
|
Single-select |
m
,
f
,
o
,
na
|
None | Always optional. This is phrased as “how should we address you?” |
Cover letter
xing.standard.cover_letter
|
File | Uploaded file key | None | |
Work certificate
xing.standard.work_certificate
|
File | Uploaded file key | None | Arbeitszeugnis |
Education certificate
xing.standard.education_certificate
|
File | Uploaded file key | None | Abschlusszeugnis |
Additional comments
xing.standard.additional_comments
|
Text | String, max 500 characters | None | Multiline text. Always optional. Rendered at the end of the application form. |
Screening Rule Semantics
| Rule | Meaning | Example |
|---|---|---|
must_be_at_least
|
The applicant answer must be greater than or equal to the configured value. | If the configured threshold is 3, then 3 and 4 pass, while 0, 1, and 2 fail. |
must_be_below
|
The applicant answer must be strictly lower than the configured value. | If the configured threshold is 90000, then 85000 passes, while 90000 and 95000 fail. |
must_be_true
|
The applicant answer must be
true.
|
If
must_be_true
is configured, then
true
passes and
false fails.
|
Missing Answers And Screening
If a screening rule is configured and the applicant does not provide an answer, the application does not satisfy the screening rule.
Validation And Limitations
-
xing.standard.genderis always optional, even if you send it as required. -
For
xing.standard.gender,therequiredflag is ignored. -
xing.standard.gendermust not be used as a screen-out criterion. -
xing.standard.country_of_residencemust not be used as a screen-out criterion. - Unknown standard question IDs are ignored.
- Blank standard question IDs are ignored.
- Duplicate standard question IDs are de-duplicated. Only the first occurrence is kept.
- Custom question IDs must be unique.
- Do not reuse a standard-question ID as a custom-question ID.
JSON API
This section describes how the questions should be included in the JSON payload when creating job postings via our E-Recruiting JSON API.
JSON Request Structure
| Field | Required | Type | Description |
|---|---|---|---|
standard_questions
|
Yes | Array | List of configured standard questions |
custom_questions
|
Yes | Array | List of configured custom questions |
Notes:
-
standard_questionsandcustom_questionscan be used together. -
If you only use standard questions, send
"custom_questions": []. -
If you only use custom questions, send
"standard_questions": [].
Standard Questions In JSON
Canonical JSON example
{
"standard_questions": [
{
"id": "xing.standard.notice_period",
"required": true
},
{
"id": "xing.standard.language_skills.english",
"required": true,
"must_be_at_least": 3
},
{
"id": "xing.standard.salary_expectation",
"required": true,
"must_be_below": 90000
},
{
"id": "xing.standard.eu_work_eligibility",
"required": true,
"must_be_true": true
},
{
"id": "xing.standard.country_of_residence",
"required": true
},
{
"id": "xing.standard.gender",
"required": false
},
{
"id": "xing.standard.cover_letter",
"required": false
}
],
"custom_questions": []
}
Supported JSON fields for standard questions
| Field | Required | Type | Applies To | Notes |
|---|---|---|---|---|
id
|
Yes | String | All standard questions | Must be one of the supported IDs |
required
|
No | Boolean | All standard questions |
For
xing.standard.gender
, this flag is ignored and the question remains optional.
|
must_be_at_least
|
No | Integer | English and German language skills | Inclusive minimum threshold |
must_be_below
|
No | Integer | Salary expectation | Strict maximum threshold for yearly salary in EUR |
must_be_true
|
No | Boolean | EU work eligibility and driving license |
If set, only
true
passes screening
|
Custom Questions In JSON
Canonical JSON example
{
"standard_questions": [
{
"id": "xing.standard.city_of_residence",
"required": true
}
],
"custom_questions": [
{
"type": "text",
"id": "motivation",
"question": "Why do you want to work with us?",
"multiline": true,
"required": false
},
{
"type": "date",
"id": "starting_date",
"question": "When could you start?",
"required": true
},
{
"type": "select",
"id": "preferred_location",
"question": "Which location do you prefer?",
"required": true,
"options": [
{ "label": "Berlin", "value": "berlin" },
{ "label": "Hamburg", "value": "hamburg" },
{ "label": "Remote", "value": "remote" }
]
},
{
"type": "select",
"id": "preferred_locations",
"question": "Which locations would you accept?",
"required": false,
"maximum_choices_allowed": 2,
"options": [
{ "label": "Berlin", "value": "berlin" },
{ "label": "Hamburg", "value": "hamburg" },
{ "label": "Remote", "value": "remote" }
]
},
{
"type": "numeric",
"id": "years_of_experience",
"question": "How many years of experience do you have?",
"required": false,
"min": 0,
"max": 50
},
{
"type": "boolean",
"id": "willing_to_relocate",
"question": "Are you willing to relocate?",
"required": false
},
{
"type": "file",
"id": "portfolio",
"question": "Upload your portfolio",
"required": false
}
]
}
JSON Answer Examples
Single-value answers
{ "id": "motivation", "value": "I want to join because..." }
{ "id": "starting_date", "value": "2026-05-01" }
{ "id": "preferred_location", "value": "remote" }
{ "id": "years_of_experience", "value": "7" }
{ "id": "willing_to_relocate", "value": "true" }
{ "id": "portfolio", "value": "uploaded-file-key-123" }
{ "id": "xing.standard.country_of_residence", "value": "DE" }
Multi-select answers
{ "id": "preferred_locations", "values": ["berlin", "remote"] }
XML Feed
This section describes how to include standard and custom questions via our E-Recruiting feed.
XML Structure
Naming Convention
In XML, field names use
snake_case
.
Structure
-
Root element:
apply_questions -
Standard questions container:
standard_questions -
Standard question element:
standard_question -
Custom questions container:
custom_questions -
Custom question element:
question
Empty Sections
If a section is empty, you can send an empty container.
Standard Questions In XML
Canonical XML example
<apply_questions>
<standard_questions>
<standard_question>
<id>xing.standard.notice_period</id>
<required>true</required>
</standard_question>
<standard_question>
<id>xing.standard.language_skills.english</id>
<required>true</required>
<must_be_at_least>3</must_be_at_least>
</standard_question>
<standard_question>
<id>xing.standard.salary_expectation</id>
<required>true</required>
<must_be_below>90000</must_be_below>
</standard_question>
<standard_question>
<id>xing.standard.eu_work_eligibility</id>
<required>true</required>
<must_be_true>true</must_be_true>
</standard_question>
<standard_question>
<id>xing.standard.country_of_residence</id>
<required>true</required>
</standard_question>
<standard_question>
<id>xing.standard.gender</id>
<required>false</required>
</standard_question>
<standard_question>
<id>xing.standard.cover_letter</id>
<required>false</required>
</standard_question>
</standard_questions>
<custom_questions />
</apply_questions>
Supported XML fields for standard questions
| Field | Required | Applies To | Notes |
|---|---|---|---|
<id>
|
Yes | All standard questions | Must be one of the supported IDs |
<required>
|
No | All standard questions |
For
xing.standard.gender
, this field is ignored and the question remains optional.
|
<must_be_at_least>
|
No | English and German language skills | Inclusive minimum threshold |
<must_be_below>
|
No | Salary expectation | Strict maximum threshold for yearly salary in EUR |
<must_be_true>
|
No | EU work eligibility and driving license |
If set, only
true
passes screening
|
Custom Questions In XML
Canonical XML example
<apply_questions>
<standard_questions>
<standard_question>
<id>xing.standard.city_of_residence</id>
<required>true</required>
</standard_question>
</standard_questions>
<custom_questions>
<question type="text" id="motivation" multiline="true" required="false">
<text>Why do you want to work with us?</text>
</question>
<question type="date" id="starting_date" required="true">
<text>When could you start?</text>
</question>
<question type="select" id="preferred_location" required="true">
<text>Which location do you prefer?</text>
<options>
<option label="Berlin" value="berlin" />
<option label="Hamburg" value="hamburg" />
<option label="Remote" value="remote" />
</options>
</question>
<question type="select" id="preferred_locations" required="false" maximum_choices_allowed="2">
<text>Which locations would you accept?</text>
<options>
<option label="Berlin" value="berlin" />
<option label="Hamburg" value="hamburg" />
<option label="Remote" value="remote" />
</options>
</question>
<question type="numeric" id="years_of_experience" required="false" min="0" max="50">
<text>How many years of experience do you have?</text>
</question>
<question type="boolean" id="willing_to_relocate" required="false">
<text>Are you willing to relocate?</text>
</question>
<question type="file" id="portfolio" required="false">
<text>Upload your portfolio</text>
</question>
</custom_questions>
</apply_questions>
XML Rules For Custom Questions
| Field | Usage / Meaning |
|---|---|
type
|
Use the
type
attribute to define the question type.
|
id
|
Use the
id
attribute for the unique question ID.
|
<text>
|
Use the
element for the candidate-facing question text.
|
<options>
|
Use
for select questions.
|
required
|
Use the
required
attribute where applicable.
|
multiline
|
Use the
multiline
attribute for text questions.
|
maximum_choices_allowed
|
For multi-select questions, use
type="select"
together with
maximum_choices_allowed
greater than
1
.
|
min
and
max
|
Use the
min
and
max attributes
for numeric questions.
|
label
|
Display text only |
value
|
The contract value that will be returned in the answer |