Response formatting
When collecting screener responses there may be one or multiple responses but generally the content of each response has a predictable set of information returnedBasic Screener response
GET: /v1/projects/{projectId}/screener-responses The example below shows ascreener-questions POST and subsequent screener-responses GET. The response itself has information relating to the answered questions themselves as well as the participant. Most of the participant information can be found via a second call using the profile ID.
Answer shapes by question type
Each item inresponses[] has an answers field that is always an array. The type of the array’s elements depends on questionType:
Responses recorded before 2024 may contain bare numbers instead of strings for
numericBox/sliderScale answers. Parsers should accept both.
When displaying the responses section of the screener-response it is recommended to share:
- Time the participant took to complete the screener
-
"totalTime": -
The incentive the participant took the screener at
"project.incentive":
-
Time screener was completed
"createdAt":
-
Question, response, and qualify status
"questionText":"text":"qualify":
Viewing the profile
/v1/profiles/{profileId}Understanding qualified responses
"qualified": true, implies:
- NDA is agree to if present
- 100% percentage on screener questions
- Matched on location, age, gender, education, and ethnicity
The “End Of Survey” sentinel
Every screener’s question list ends with an auto-generated sentinel entry markedisEnd: true:
screenerQuestions on the project payload and on the screener-questions endpoints. It is always present and always last, but it is not a real question: it has no questionType, its uid and order are null or absent, participants never answer it, and it never appears in screener-response responses[] — every item there corresponds to a question the participant actually answered (or, with the skipped-questions option below, explicitly skipped). Skip the sentinel when rendering or counting questions.
isEnd is present on every screener question — false on real questions, true on this sentinel — so you can discriminate on it directly rather than treating an absent field as false. Note that the sentinel’s answers field, unlike a real question’s, is sometimes absent rather than an empty array, so do not call .length on it without checking.
Older versions of this API also appended an “End Of Survey” trailer entry to responses[] itself (with null values for order and answers), and earlier versions of this guide showed it in the example payload. The current API never does; no special handling is required in response parsing.
Skipped questions in responses[]
By default, questions that a participant did not answer (because they were skipped over by skip logic, or because the participant chose to skip an optional question) are omitted from the responses[] array.
Organizations that opt in to including skipped questions in screener responses (contact Respondent to enable) receive an entry for every screener question, with skipped questions marked explicitly. Each item in responses[] then includes:
Example skipped entries:
answers, as an empty array — the field is present on every item in responses[].