List form submissions
curl --request GET \
--url https://api.tally.so/forms/{formId}/submissions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tally.so/forms/{formId}/submissions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tally.so/forms/{formId}/submissions', 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.tally.so/forms/{formId}/submissions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tally.so/forms/{formId}/submissions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tally.so/forms/{formId}/submissions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tally.so/forms/{formId}/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"page": 123,
"limit": 123,
"hasMore": true,
"totalNumberOfSubmissionsPerFilter": {
"all": 123,
"completed": 123,
"partial": 123
},
"questions": [
{
"id": "<string>",
"type": "FORM_TITLE",
"title": "<string>",
"isTitleModifiedByUser": true,
"formId": "<string>",
"isDeleted": true,
"numberOfResponses": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"fields": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "FORM_TITLE",
"blockGroupUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
}
]
}
],
"submissions": [
{
"id": "<string>",
"formId": "<string>",
"isCompleted": true,
"submittedAt": "2023-11-07T05:31:56Z",
"previewUrl": "<string>",
"pdfUrl": "<string>",
"responses": [
{
"id": "<string>",
"formId": "<string>",
"questionId": "<string>",
"respondentId": "<string>",
"sessionUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"answer": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"submissionId": "<string>",
"formattedAnswer": "<string>"
}
]
}
]
}Forms
Listing submissions
Returns a paginated list of form submissions with their responses.
GET
/
forms
/
{formId}
/
submissions
List form submissions
curl --request GET \
--url https://api.tally.so/forms/{formId}/submissions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.tally.so/forms/{formId}/submissions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tally.so/forms/{formId}/submissions', 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.tally.so/forms/{formId}/submissions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tally.so/forms/{formId}/submissions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tally.so/forms/{formId}/submissions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tally.so/forms/{formId}/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"page": 123,
"limit": 123,
"hasMore": true,
"totalNumberOfSubmissionsPerFilter": {
"all": 123,
"completed": 123,
"partial": 123
},
"questions": [
{
"id": "<string>",
"type": "FORM_TITLE",
"title": "<string>",
"isTitleModifiedByUser": true,
"formId": "<string>",
"isDeleted": true,
"numberOfResponses": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"fields": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "FORM_TITLE",
"blockGroupUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
}
]
}
],
"submissions": [
{
"id": "<string>",
"formId": "<string>",
"isCompleted": true,
"submittedAt": "2023-11-07T05:31:56Z",
"previewUrl": "<string>",
"pdfUrl": "<string>",
"responses": [
{
"id": "<string>",
"formId": "<string>",
"questionId": "<string>",
"respondentId": "<string>",
"sessionUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"answer": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"submissionId": "<string>",
"formattedAnswer": "<string>"
}
]
}
]
}Looking for real-time submissions? The most efficient way to instantly retrieve new
submissions is by using a webhook. This allows you to receive
data as soon as a form is submitted, without needing to poll the API.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The ID of the form
Query Parameters
Page number for pagination (default: 1)
Filter submissions by status
Available options:
all, completed, partial Filter submissions submitted on or after this date (ISO 8601 format)
Filter submissions submitted on or before this date (ISO 8601 format)
Get submissions that came after a specific submission ID
Number of submissions to return per page (default: 50, max: 500)
Required range:
1 <= x <= 500Response
List of form submissions
Current page number
Number of submissions per page
Whether there are more pages available
Show child attributes
Show child attributes
List of form questions
Show child attributes
Show child attributes
List of form submissions
Show child attributes
Show child attributes
⌘I