To give form creators more control over who can respond, we're introducing granular controls for responders. Forms created with the API after January 31, 2026 will have an unpublished state by default. To learn more, see API changes to Google Forms.
Which form responses to return. Currently, the only supported filters are:
timestamp > N
which means to get all form responses submitted after (but not at) timestamp N. *
timestamp >= N
which means to get all form responses submitted at and after timestamp N.
For both supported filters, timestamp must be formatted in RFC3339 UTC "Zulu" format. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
pageSize
integer
The maximum number of responses to return. The service may return fewer than this value. If unspecified or zero, at most 5000 responses are returned.
pageToken
string
A page token returned by a previous list response. If this field is set, the form and the values of the filter must be the same as for the original request.
Request body
The request body must be empty.
Response body
If successful, the response body contains data with the following structure:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-11 UTC."],[],["To list form responses, send a `GET` request to `https://forms.googleapis.com/v1beta/forms/{formId}/responses`, replacing `{formId}` with the relevant ID. Use the `filter` query parameter to specify a timestamp for responses, `pageSize` to limit results, and `pageToken` for pagination. The request body should be empty. A successful response returns a JSON object with an array of `responses` and a `nextPageToken` for subsequent pages. Authorization requires specific OAuth scopes.\n"],null,["- [HTTP request](#body.HTTP_TEMPLATE)\n- [Path parameters](#body.PATH_PARAMETERS)\n- [Query parameters](#body.QUERY_PARAMETERS)\n- [Request body](#body.request_body)\n- [Response body](#body.response_body)\n - [JSON representation](#body.ListFormResponsesResponse.SCHEMA_REPRESENTATION)\n- [Authorization Scopes](#body.aspect)\n\nList a form's responses.\n\nHTTP request\n\n`GET https://forms.googleapis.com/v1beta/forms/{formId}/responses`\n\nThe URL uses [gRPC Transcoding](https://google.aip.dev/127) syntax.\n\nPath parameters\n\n| Parameters ||\n|----------|------------------------------------------------------------|\n| `formId` | `string` Required. ID of the Form whose responses to list. |\n\nQuery parameters\n\n| Parameters ||\n|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `filter` | `string` Which form responses to return. Currently, the only supported filters are: - `timestamp \u003e `*N* which means to get all form responses submitted after (but not at) timestamp *N*. \\* `timestamp \u003e= `*N* which means to get all form responses submitted at and after timestamp *N*. For both supported filters, timestamp must be formatted in RFC3339 UTC \"Zulu\" format. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\". |\n| `pageSize` | `integer` The maximum number of responses to return. The service may return fewer than this value. If unspecified or zero, at most 5000 responses are returned. |\n| `pageToken` | `string` A page token returned by a previous list response. If this field is set, the form and the values of the filter must be the same as for the original request. |\n\nRequest body\n\nThe request body must be empty.\n\nResponse body\n\nIf successful, the response body contains data with the following structure:\nResponse to a ListFormResponsesRequest.\n\n| JSON representation ||\n|----------------------------------------------------------------------------------------------------------------------------------|---|\n| ``` { \"responses\": [ { object (/forms/api/reference/rest/v1beta/forms.responses#FormResponse) } ], \"nextPageToken\": string } ``` |\n\n| Fields ||\n|-----------------|--------------------------------------------------------------------------------------------------------------------------------|\n| `responses[]` | `object (`[FormResponse](/forms/api/reference/rest/v1beta/forms.responses#FormResponse)`)` The returned responses. |\n| `nextPageToken` | `string` If set, there are more responses. To get the next page of responses, provide this as `pageToken` in a future request. |\n\nAuthorization Scopes\n\nRequires one of the following OAuth scopes:\n\n- `https://www.googleapis.com/auth/drive`\n- `\n https://www.googleapis.com/auth/drive.file`\n- `\n https://www.googleapis.com/auth/forms.responses.readonly`\n\nFor more information, see the [Authorization guide](/workspace/guides/configure-oauth-consent)."]]