Responses Read
responses_readRead survey responses as JSON so YOUR model can analyze, summarize or code them itself (no QuestionPunk AI credits are used). Returns { survey, questions: [{id, index, label, text, answer_type}], conditions?: [{key, label, arms}], responses: [{id, status, startedAt, completedAt, responseType, language, conditions?: {: arm}, answers: {: answer}}], page: {limit, cursor, nextCursor, total} }. conditions appears only when the survey randomly assigns respondents to A/B arms (e.g. two wordings of a question): the top-level list names each condition and its arms, and each response's conditions gives the arm it was in per key (null if none was assigned; a value not in arms is an arm renamed or removed since). To compare arms, group responses by that value. No other URL parameters are returned. Answers are rendered exactly as in the CSV export (choice labels by default; matrix = list of "Row: value"; AI interviews = list of {question, answer} turns); unanswered questions are omitted and answers over 4,000 characters are truncated with a marker. Page through with cursor = the previous page.nextCursor until it is null (up to 200 responses per page, default 50; a page may end early to stay small). To code one open-text question across many responses, pass questionIds: [thatQuestionId] (only responses that answered it are returned). For counts only, use responses_get_counts instead.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"surveyId": "<surveyId>"
},
"name": "responses_read"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Responses per page (default 50, max 200) | |
| cursor | No | page.nextCursor from the previous call; omit for the first page | |
| status | No | completed, abandoned (left before the end) or in_progress. Omit for all. | |
| dateEnd | No | Only responses started at/before this time, as Unix milliseconds (13 digits) | |
| surveyId | Yes | Survey ID (from survey_list) | |
| dateStart | No | Only responses started at/after this time, as Unix milliseconds (13 digits; 2025-01-01T00:00Z is 1735689600000) | |
| questionIds | No | Only these questions (and only responses that answered at least one of them). Omit for every question. | |
| studyWaveId | No | Only responses from this diary-study wave | |
| answerFormat | No | Choice answers as labels (default), 1-based numbers, or both | |
| responseType | No | Real respondents or synthetic (AI) responses. Omit for both. | |
| suspiciousLevel | No | Fraud-check filter. 'clean' excludes suspicious responses; 'flagged' is high + medium. | |
| surveyRevisionId | No | Only responses collected on this published revision |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |