List form submissions
curl --request GET \
--url https://api.hellotracks.com/v1/forms/submissions \
--header 'API-Key: <api-key>'import requests
url = "https://api.hellotracks.com/v1/forms/submissions"
headers = {"API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-Key': '<api-key>'}};
fetch('https://api.hellotracks.com/v1/forms/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.hellotracks.com/v1/forms/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 => [
"API-Key: <api-key>"
],
]);
$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.hellotracks.com/v1/forms/submissions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
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.hellotracks.com/v1/forms/submissions")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hellotracks.com/v1/forms/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"items": [
{
"id": "1761901234567",
"submissionId": 1761901234567,
"submissionUid": "1761901234567",
"templateId": "3f2b8c1e-0000-4000-8000-000000000001",
"title": "Site check",
"createdAt": 1761901234567,
"createdTs": 1761901234567,
"submittedBy": "Driver 1",
"creatorUid": "a1b2c3",
"jobId": "650000000000000000000001",
"placeId": "d4e5f6",
"location": {
"lat": 37.7749,
"lng": -122.4194
},
"content": {
"id": "3f2b8c1e-0000-4000-8000-000000000001",
"title": "Site check",
"description": "",
"timestamp": 1761901234000,
"content": [
{
"type": "section",
"name": "Arrival",
"options": [],
"value": "",
"required": false,
"conditionals": []
},
{
"type": "radio",
"name": "Site clean",
"options": [
"Yes",
"No"
],
"value": "",
"required": true,
"conditionals": [
{
"equalsTo": "No",
"content": [
{
"type": "paragraph",
"name": "What was wrong",
"options": [],
"value": "",
"required": true
}
]
}
]
},
{
"type": "image",
"name": "Photo",
"options": [],
"value": "",
"required": false,
"conditionals": []
}
]
},
"answers": {
"Arrival.Site clean": "Yes",
"Arrival.Photo": ""
},
"completion": {
"answered": 1,
"total": 2
}
}
]
},
"error": null,
"meta": {
"path": "/v1/forms/submissions",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "invalid_request",
"message": "date must be YYYY-MM-DD"
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "invalid_api_key",
"message": "Invalid Hellotracks API key."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "forbidden",
"message": "No permission."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "throttled",
"message": "Too many requests."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "internal_error",
"message": "Hellotracks API is temporarily unavailable."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}Forms
List form submissions
Lists submitted forms, newest first. limit is applied before the templateId, jobId and placeId filters, so fewer items than limit may come back even when more match. Admins, operators and the company key only; workers get 403 permission_denied.
GET
/
forms
/
submissions
List form submissions
curl --request GET \
--url https://api.hellotracks.com/v1/forms/submissions \
--header 'API-Key: <api-key>'import requests
url = "https://api.hellotracks.com/v1/forms/submissions"
headers = {"API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-Key': '<api-key>'}};
fetch('https://api.hellotracks.com/v1/forms/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.hellotracks.com/v1/forms/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 => [
"API-Key: <api-key>"
],
]);
$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.hellotracks.com/v1/forms/submissions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
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.hellotracks.com/v1/forms/submissions")
.header("API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hellotracks.com/v1/forms/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"items": [
{
"id": "1761901234567",
"submissionId": 1761901234567,
"submissionUid": "1761901234567",
"templateId": "3f2b8c1e-0000-4000-8000-000000000001",
"title": "Site check",
"createdAt": 1761901234567,
"createdTs": 1761901234567,
"submittedBy": "Driver 1",
"creatorUid": "a1b2c3",
"jobId": "650000000000000000000001",
"placeId": "d4e5f6",
"location": {
"lat": 37.7749,
"lng": -122.4194
},
"content": {
"id": "3f2b8c1e-0000-4000-8000-000000000001",
"title": "Site check",
"description": "",
"timestamp": 1761901234000,
"content": [
{
"type": "section",
"name": "Arrival",
"options": [],
"value": "",
"required": false,
"conditionals": []
},
{
"type": "radio",
"name": "Site clean",
"options": [
"Yes",
"No"
],
"value": "",
"required": true,
"conditionals": [
{
"equalsTo": "No",
"content": [
{
"type": "paragraph",
"name": "What was wrong",
"options": [],
"value": "",
"required": true
}
]
}
]
},
{
"type": "image",
"name": "Photo",
"options": [],
"value": "",
"required": false,
"conditionals": []
}
]
},
"answers": {
"Arrival.Site clean": "Yes",
"Arrival.Photo": ""
},
"completion": {
"answered": 1,
"total": 2
}
}
]
},
"error": null,
"meta": {
"path": "/v1/forms/submissions",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "invalid_request",
"message": "date must be YYYY-MM-DD"
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "invalid_api_key",
"message": "Invalid Hellotracks API key."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "forbidden",
"message": "No permission."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "throttled",
"message": "Too many requests."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "internal_error",
"message": "Hellotracks API is temporarily unavailable."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}Authorizations
Your API key, from More → API & Integrations in the dashboard, or from ht signup / ht auth login.
Query Parameters
From: ms timestamp, or YYYY-MM-DD (start of that day, caller's time zone).
Until: ms timestamp, or YYYY-MM-DD (end of that day).
Maximum number read.
Required range:
1 <= x <= 1000Comma-separated numeric submission ids.
Only this template.
Only submissions by this member.
Only submissions for this job.
Only submissions at this place.