Create multiple screener questions
Add up to 40 screener questions in a single request. This replaces any existing questions — use it for initial screener setup rather than incremental additions.
curl --request PUT \
--url https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk \
--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,
"id": "<string>",
"uid": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"isRequired": true,
"skipLogic": true,
"includeOtherOption": true,
"id": "<string>",
"uid": "<string>",
"isEnd": false,
"warnings": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z"
}
]
'import requests
url = "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk"
payload = [
{
"text": "<string>",
"questionType": "radio",
"answers": [
{
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": True,
"id": "<string>",
"uid": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"isRequired": True,
"skipLogic": True,
"includeOtherOption": True,
"id": "<string>",
"uid": "<string>",
"isEnd": False,
"warnings": ["<string>"],
"createdAt": "2023-11-07T05:31:56Z"
}
]
headers = {
"x-api-key": "<x-api-key>",
"x-api-secret": "<x-api-secret>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
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,
id: '<string>',
uid: '<string>',
createdAt: '2023-11-07T05:31:56Z'
}
],
isRequired: true,
skipLogic: true,
includeOtherOption: true,
id: '<string>',
uid: '<string>',
isEnd: false,
warnings: ['<string>'],
createdAt: '2023-11-07T05:31:56Z'
}
])
};
fetch('https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk', 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/bulk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
[
'text' => '<string>',
'questionType' => 'radio',
'answers' => [
[
'text' => '<string>',
'goToQuestionUid' => '<string>',
'isOther' => true,
'id' => '<string>',
'uid' => '<string>',
'createdAt' => '2023-11-07T05:31:56Z'
]
],
'isRequired' => true,
'skipLogic' => true,
'includeOtherOption' => true,
'id' => '<string>',
'uid' => '<string>',
'isEnd' => false,
'warnings' => [
'<string>'
],
'createdAt' => '2023-11-07T05:31:56Z'
]
]),
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/bulk"
payload := strings.NewReader("[\n {\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"isRequired\": true,\n \"skipLogic\": true,\n \"includeOtherOption\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"isEnd\": false,\n \"warnings\": [\n \"<string>\"\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n]")
req, _ := http.NewRequest("PUT", 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.put("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk")
.header("x-api-key", "<x-api-key>")
.header("x-api-secret", "<x-api-secret>")
.header("Content-Type", "application/json")
.body("[\n {\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"isRequired\": true,\n \"skipLogic\": true,\n \"includeOtherOption\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"isEnd\": false,\n \"warnings\": [\n \"<string>\"\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<x-api-key>'
request["x-api-secret"] = '<x-api-secret>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"isRequired\": true,\n \"skipLogic\": true,\n \"includeOtherOption\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"isEnd\": false,\n \"warnings\": [\n \"<string>\"\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\"\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>"
]
}
]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 PUT \
--url https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk \
--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,
"id": "<string>",
"uid": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"isRequired": true,
"skipLogic": true,
"includeOtherOption": true,
"id": "<string>",
"uid": "<string>",
"isEnd": false,
"warnings": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z"
}
]
'import requests
url = "https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk"
payload = [
{
"text": "<string>",
"questionType": "radio",
"answers": [
{
"text": "<string>",
"goToQuestionUid": "<string>",
"isOther": True,
"id": "<string>",
"uid": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"isRequired": True,
"skipLogic": True,
"includeOtherOption": True,
"id": "<string>",
"uid": "<string>",
"isEnd": False,
"warnings": ["<string>"],
"createdAt": "2023-11-07T05:31:56Z"
}
]
headers = {
"x-api-key": "<x-api-key>",
"x-api-secret": "<x-api-secret>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
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,
id: '<string>',
uid: '<string>',
createdAt: '2023-11-07T05:31:56Z'
}
],
isRequired: true,
skipLogic: true,
includeOtherOption: true,
id: '<string>',
uid: '<string>',
isEnd: false,
warnings: ['<string>'],
createdAt: '2023-11-07T05:31:56Z'
}
])
};
fetch('https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk', 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/bulk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
[
'text' => '<string>',
'questionType' => 'radio',
'answers' => [
[
'text' => '<string>',
'goToQuestionUid' => '<string>',
'isOther' => true,
'id' => '<string>',
'uid' => '<string>',
'createdAt' => '2023-11-07T05:31:56Z'
]
],
'isRequired' => true,
'skipLogic' => true,
'includeOtherOption' => true,
'id' => '<string>',
'uid' => '<string>',
'isEnd' => false,
'warnings' => [
'<string>'
],
'createdAt' => '2023-11-07T05:31:56Z'
]
]),
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/bulk"
payload := strings.NewReader("[\n {\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"isRequired\": true,\n \"skipLogic\": true,\n \"includeOtherOption\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"isEnd\": false,\n \"warnings\": [\n \"<string>\"\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n]")
req, _ := http.NewRequest("PUT", 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.put("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk")
.header("x-api-key", "<x-api-key>")
.header("x-api-secret", "<x-api-secret>")
.header("Content-Type", "application/json")
.body("[\n {\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"isRequired\": true,\n \"skipLogic\": true,\n \"includeOtherOption\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"isEnd\": false,\n \"warnings\": [\n \"<string>\"\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.respondent.io/v1/projects/{projectId}/screener-questions/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<x-api-key>'
request["x-api-secret"] = '<x-api-secret>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"text\": \"<string>\",\n \"questionType\": \"radio\",\n \"answers\": [\n {\n \"text\": \"<string>\",\n \"goToQuestionUid\": \"<string>\",\n \"isOther\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"createdAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"isRequired\": true,\n \"skipLogic\": true,\n \"includeOtherOption\": true,\n \"id\": \"<string>\",\n \"uid\": \"<string>\",\n \"isEnd\": false,\n \"warnings\": [\n \"<string>\"\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\"\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>"
]
}
]