Create a screener question
Add a screener question to a project. Supports up to 40 questions per project. Available types: radio, checkbox, singleLineTextbox, multiLineTextbox, numericBox, sliderScale, rank, and matrix.
curl --request POST \
--url https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--header 'x-api-secret: <x-api-secret>' \
--data '
{
"text": "<string>",
"questionType": "radio",
"answers": [
{
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": true
}
]
}
'import requests
url = "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions"
payload = {
"text": "<string>",
"questionType": "radio",
"answers": [
{
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": True
}
]
}
headers = {
"x-api-key": "<x-api-key>",
"x-api-secret": "<x-api-secret>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<x-api-key>',
'x-api-secret': '<x-api-secret>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: '<string>',
questionType: 'radio',
answers: [{text: '<string>', goToQuestionUid: '<string>', isOther: true}]
})
};
fetch('https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => '<string>',
'questionType' => 'radio',
'answers' => [
[
'text' => '<string>',
'goToQuestionUid' => '<string>',
'isOther' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>",
"x-api-secret: <x-api-secret>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions"
payload := strings.NewReader("{\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("x-api-secret", "<x-api-secret>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions")
.header("x-api-key", "<x-api-key>")
.header("x-api-secret", "<x-api-secret>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["x-api-secret"] = '<x-api-secret>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"uid": "<string>",
"text": "<string>",
"isEnd": false,
"answers": [
{
"uid": "<string>",
"answerValue": 123,
"id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": true
}
],
"questionType": "radio",
"id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"isRequired": true,
"skipLogic": true,
"includeOtherOption": true,
"logic": {
"answerUid": "<string>",
"goToQuestionUid": "<string>",
"rowUid": "<string>",
"skipLogicType": {},
"multipleAnswers": [
{
"answer": "<string>",
"logicType": {},
"rowUid": "<string>"
}
],
"multipleAnswersBoolType": {}
},
"order": 123,
"randomizeOrder": true,
"warnings": [
"<string>"
]
}Supported question types
| Type | Description | Requires answers |
|---|---|---|
radio | Single-choice selection | Yes |
checkbox | Multi-choice selection | Yes |
singleLineTextbox | Short text input | No |
multiLineTextbox | Long text input | No |
numericBox | Numeric input | No |
sliderScale | Slider with min/max | No |
rank | Ordered ranking of the provided answers | Yes |
matrix | Grid of rows scored against answers columns; also requires matrixRows | Yes |
rank and matrix are enabled per organization. Creating one without the corresponding feature enabled for your organization returns 403 Forbidden. For matrix, qualifying logic is defined per row via matrixRows (with matrixSelectionMode and matrixMatchType); see the request schema below for the full shape.Path Parameters
Body
- Radio Question
- Checkbox Question
- Textbox Question
- Slider Scale Question
- Rank Question
- Matrix Question
radio Hide child attributes
Hide child attributes
[
QUALIFY: 1
DISQUALIFY: 2
]
1, 2 Required unless isOther, then text will be set to 'Other'
Skip logic for radio questions. Uid of question to skip to.
Is 'Other' answer with comment field
Response
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
Always false on real questions. See EndOfSurveyScreenerQuestion for the auto-generated end-of-screener sentinel.
false The options a participant chooses between. Always present; an empty array for question types that have no options (singleLineTextbox, multiLineTextbox, numericBox, sliderScale).
Hide child attributes
Hide child attributes
CHECKBOX: { id: 3, answerValues: [ { id: 1, text: 'May Select' }, { id: 2, text: 'Must Select' }, { id: 3, text: 'Disqualify' }, ], }, RADIO: { id: 1, answerValues: [ { id: 1, text: 'Qualify' }, { id: 2, text: 'Disqualify' }, ], },
May be absent on answer options created before 2021, which predate timestamps.
Required unless isOther, then text will be set to 'Other'
Skip logic for radio questions. Uid of question to skip to.
Is 'Other' answer with comment field
radio May be absent on questions created before 2021, which predate timestamps.
Hide child attributes
Hide child attributes
Set only for MATRIX questions — the matrix row this criterion applies to.
answerUid holds the column uid.
Hide child attributes
Hide child attributes
Set only for MATRIX questions — the matrix row this criterion applies to.
answer holds the column uid.
Was this page helpful?
curl --request POST \
--url https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--header 'x-api-secret: <x-api-secret>' \
--data '
{
"text": "<string>",
"questionType": "radio",
"answers": [
{
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": true
}
]
}
'import requests
url = "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions"
payload = {
"text": "<string>",
"questionType": "radio",
"answers": [
{
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": True
}
]
}
headers = {
"x-api-key": "<x-api-key>",
"x-api-secret": "<x-api-secret>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<x-api-key>',
'x-api-secret': '<x-api-secret>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: '<string>',
questionType: 'radio',
answers: [{text: '<string>', goToQuestionUid: '<string>', isOther: true}]
})
};
fetch('https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => '<string>',
'questionType' => 'radio',
'answers' => [
[
'text' => '<string>',
'goToQuestionUid' => '<string>',
'isOther' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>",
"x-api-secret: <x-api-secret>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions"
payload := strings.NewReader("{\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("x-api-secret", "<x-api-secret>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions")
.header("x-api-key", "<x-api-key>")
.header("x-api-secret", "<x-api-secret>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["x-api-secret"] = '<x-api-secret>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"uid": "<string>",
"text": "<string>",
"isEnd": false,
"answers": [
{
"uid": "<string>",
"answerValue": 123,
"id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": true
}
],
"questionType": "radio",
"id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"isRequired": true,
"skipLogic": true,
"includeOtherOption": true,
"logic": {
"answerUid": "<string>",
"goToQuestionUid": "<string>",
"rowUid": "<string>",
"skipLogicType": {},
"multipleAnswers": [
{
"answer": "<string>",
"logicType": {},
"rowUid": "<string>"
}
],
"multipleAnswersBoolType": {}
},
"order": 123,
"randomizeOrder": true,
"warnings": [
"<string>"
]
}