List Routing Form Submissions
List routing form submissions with the Zeeg API, filtering one flat feed by form, creation time, and destination type, with each answer in both display and raw form.
curl --request GET \
--url https://api.zeeg.me/v2/routing-form-submissions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-submissions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/routing-form-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{
"success": true,
"status": 200,
"data": {
"pagination": {
"totalItems": 1,
"perPage": 20,
"currentPage": 1,
"lastPage": 1,
"hasPreviousPage": false,
"hasNextPage": false
},
"submissions": [
{
"id": "71621fb7-30b0-4d91-9f2e-a3e009cc6853",
"createdAt": "2026-04-10T08:30:00+00:00",
"routingForm": {
"id": "f1cbafc4-b646-4cf9-af29-193491b555d9",
"name": "Inbound Lead Qualification",
"slug": "inbound-lead-qual"
},
"route": {
"type": "EVENT_TYPE",
"isFallback": false,
"customUrl": null,
"headline": null,
"eventType": {
"id": "80f46bf5-eb01-4c07-960e-a9a3e18aae5e",
"title": "30-Minute Discovery Call",
"slug": "30min-discovery-call",
"uri": "https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e"
},
"team": null
},
"answers": [
{
"inputId": "f7c82298-6dd9-43bd-98e4-c437b5c0ae47",
"order": 1,
"question": "What is your company size?",
"type": "text",
"answer": "50-200 employees",
"rawAnswer": "50-200 employees",
"crmAttribute": null
}
],
"questionsAndAnswers": {
"What is your company size?": "50-200 employees"
},
"utm": {
"campaign": "spring_launch",
"source": "linkedin"
},
"adAttribution": null
}
]
}
}routingFormId filters that feed rather than addressing a sub-resource. Narrow the feed further by creation time with minCreatedAt and maxCreatedAt, and by destination with routeType.
Results are newest first. Set sort to asc to read the oldest submission first.
Each entry carries the same payload as Get a Routing Form Submission.
answer for anything a person sees, and rawAnswer to map the answer into a CRM. The overview explains why.Authorizations
Query Parameters
Return only the submissions of this routing form. A routing form outside your workspace answers 404.
Return only the submissions that were created at or after this time.
Return only the submissions that were created at or before this time. It must not precede minCreatedAt.
Return only the submissions that the given kind of route took.
EVENT_TYPE, URL, CUSTOM_PAGE, TEAM_PAGE Sort direction on createdAt.
asc, desc Page number.
x >= 1Number of submissions per page.
1 <= x <= 100Response
OK
true
200
Hide child attributes
Hide child attributes
The page counters that a paginated list response carries.
Hide child attributes
Hide child attributes
Number of items that match the request across every page.
42
Number of items on one page.
20
Number of the page in this response.
1
Number of the last page.
3
True when a page comes before this one.
false
True when a page comes after this one.
true
Hide child attributes
Hide child attributes
"71621fb7-30b0-4d91-9f2e-a3e009cc6853"
Time at which the invitee sent the submission, in UTC.
"2026-04-10T08:30:00+00:00"
The route that the answers selected, as it stood at the time of the submission.
Hide child attributes
Hide child attributes
EVENT_TYPE, URL, CUSTOM_PAGE, TEAM_PAGE "EVENT_TYPE"
True when the answers matched no route and the fallback route took the submission.
false
Destination address of a URL route.
null
The headline that the invitee saw, with the HTML tags removed.
null
The event type that a route or a submission points at. It is null when no event type is set.
Hide child attributes
Hide child attributes
"80f46bf5-eb01-4c07-960e-a9a3e18aae5e"
"30-Minute Discovery Call"
"30min-discovery-call"
Address of the event type in this API.
"https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e"
The team that a route or a submission points at. It is null when no team is set.
The answers of the submission, in the order of the questions.
Hide child attributes
Hide child attributes
Id of the question that the invitee answered.
"f7c82298-6dd9-43bd-98e4-c437b5c0ae47"
Position of the question in the routing form at the time of the submission. The first question carries 1, so this counter starts one higher than order on the question itself.
1
The question text at the time of the submission.
"What is your company size?"
The stored type of the answer, for example text. A question that maps onto a CRM select attribute carries object.
"object"
The display value of the answer. Show this value to a person.
"50-200 employees"
The stored value of the answer. A question that maps onto a CRM select attribute carries the canonical {"id","value","color"} JSON that identifies the option. Map into a CRM by this value.
"{\"id\":\"size-50-200\",\"value\":\"50-200 employees\",\"color\":\"blue\"}"
The CRM attribute that a question maps onto. It is null when the question maps onto no attribute.
The UTM parameters that the page carried when the invitee sent the submission. A parameter that carries no value is absent.
The advertisement click identifiers that the page carried when the invitee sent the submission. It is null when the page carried none.
Hide child attributes
Hide child attributes
Google Ads click identifier.
Meta click identifier.
Meta browser identifier.
Meta click cookie value.
The address at which the visit started.
{ "gclid": "Cj0KCQjw_pO_BhDgARIsAOgg" }
curl --request GET \
--url https://api.zeeg.me/v2/routing-form-submissions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-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.zeeg.me/v2/routing-form-submissions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/routing-form-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{
"success": true,
"status": 200,
"data": {
"pagination": {
"totalItems": 1,
"perPage": 20,
"currentPage": 1,
"lastPage": 1,
"hasPreviousPage": false,
"hasNextPage": false
},
"submissions": [
{
"id": "71621fb7-30b0-4d91-9f2e-a3e009cc6853",
"createdAt": "2026-04-10T08:30:00+00:00",
"routingForm": {
"id": "f1cbafc4-b646-4cf9-af29-193491b555d9",
"name": "Inbound Lead Qualification",
"slug": "inbound-lead-qual"
},
"route": {
"type": "EVENT_TYPE",
"isFallback": false,
"customUrl": null,
"headline": null,
"eventType": {
"id": "80f46bf5-eb01-4c07-960e-a9a3e18aae5e",
"title": "30-Minute Discovery Call",
"slug": "30min-discovery-call",
"uri": "https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e"
},
"team": null
},
"answers": [
{
"inputId": "f7c82298-6dd9-43bd-98e4-c437b5c0ae47",
"order": 1,
"question": "What is your company size?",
"type": "text",
"answer": "50-200 employees",
"rawAnswer": "50-200 employees",
"crmAttribute": null
}
],
"questionsAndAnswers": {
"What is your company size?": "50-200 employees"
},
"utm": {
"campaign": "spring_launch",
"source": "linkedin"
},
"adAttribution": null
}
]
}
}