Responses API
Retrieve and manage form, poll, and widget responses.
/api/forms/:id/responsesList form responses
Returns paginated responses for a specific form. Requires API key.
Response
{
"responses": [
{
"id": "resp_abc123",
"form_id": "form_xyz789",
"answers": {
"q1": "John Doe",
"q2": "john@example.com",
"q3": "Hello, I have a question..."
},
"submitted_at": "2025-01-15T10:30:00Z",
"metadata": {
"browser": "Chrome",
"browser_version": "120.0",
"device": "Desktop",
"os": "macOS",
"country": "US",
"ip_hash": "a1b2c3..."
}
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 1,
"totalPages": 1
}
}/api/widgets/:id/responsesList widget responses
Returns paginated responses for a specific widget. Requires API key.
Response
{
"responses": [
{
"id": "resp_def456",
"widget_id": "widget_abc123",
"answers": {
"rating": 5,
"comment": "Great experience!"
},
"submitted_at": "2025-01-15T10:30:00Z",
"metadata": {
"page_url": "https://example.com/pricing",
"page_title": "Pricing - Example",
"browser": "Safari",
"device": "Mobile"
}
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 1,
"totalPages": 1
}
}/api/responsesBulk delete responses
Delete multiple responses by ID. Requires ownership of the form, widget, or poll.
Request body
{
"ids": ["resp_abc123", "resp_def456"],
"formId": "form_xyz789"
}Response
{
"success": true,
"deleted": 2
}Response metadata
Every response includes comprehensive metadata captured at submission time. Available fields depend on your plan.
All plans
submitted_atISO 8601 timestampmetadata.browserBrowser name (Chrome, Safari, Firefox...)metadata.browser_versionBrowser version numbermetadata.deviceDevice type (Desktop, Mobile, Tablet)metadata.osOperating system (macOS, Windows, iOS...)metadata.ip_hashSHA-256 hashed IP (privacy-safe)metadata.languageBrowser language preferencemetadata.completion_time_msTime to complete in millisecondsPro and Business
metadata.screen_widthScreen width in pixelsmetadata.screen_heightScreen height in pixelsmetadata.fingerprint_hashBrowser fingerprint hashmetadata.refererReferring page URLmetadata.referer_domainReferring domainBusiness only
metadata.countryCountry code (US, GB, DE...)metadata.regionState/regionmetadata.cityCity namemetadata.timezoneTimezone identifiermetadata.utm_sourceUTM source parametermetadata.utm_mediumUTM medium parametermetadata.utm_campaignUTM campaign parametermetadata.is_proxyWhether request came through proxy/VPNConsent records
When a form includes a consent question, each response includes an immutable consent record:
consent_record.consent_givenWhether consent was given (boolean)consent_record.timestampWhen consent was recordedconsent_record.ip_hashHashed IP at time of consentconsent_record.user_agentFull user agent stringconsent_record.consent_textExact text user agreed toconsent_record.form_versionForm version at time of consentConsent records are designed for GDPR compliance and cannot be modified after creation.
Poll votes
Poll votes are accessed through the results endpoint to protect voter anonymity:
GET /api/polls/:id/resultsIndividual vote records are not exposed via API. Use the dashboard to view vote metadata.
Exporting data
Pro and Business plans can export responses to CSV from the dashboard. For programmatic exports, paginate through the responses endpoint:
# Paginate through responses
GET /api/forms/:id/responses?page=1&limit=100
GET /api/forms/:id/responses?page=2&limit=100