Responses API

Retrieve and manage form, poll, and widget responses.

GET/api/forms/:id/responses

List form responses

Returns all responses for a specific form.

Response

JSON
{
  "responses": [
    {
      "id": "resp_abc123",
      "form_id": "form_xyz789",
      "answers": {
        "name": "John Doe",
        "email": "john@example.com",
        "message": "Hello!"
      },
      "submitted_at": "2025-01-15T10:30:00Z",
      "metadata": {
        "browser": "Chrome",
        "device": "Desktop"
      }
    }
  ],
  "total": 1
}
GET/api/forms/:id/responses/count

Get response count

Returns the total number of responses for a form.

Response

JSON
{ "count": 42 }
DELETE/api/responses

Delete responses

Bulk delete responses by ID. Requires form or widget ownership.

Request body

JSON
{
  "ids": ["resp_abc123", "resp_def456"],
  "formId": "form_xyz789"
}

Response

JSON
{
  "success": true,
  "deleted": 2
}

Response metadata

Each response includes metadata captured at submission time:

submitted_atISO 8601 timestamp
respondent_fingerprintAnonymous device identifier
metadata.browserBrowser user agent
metadata.deviceDevice type (Desktop/Mobile/Tablet)
metadata.page_urlURL where form was submitted (embeds)
metadata.referrerReferring page URL
metadata.ip_hashHashed IP address (privacy-safe)

Widget responses

Widget responses follow the same pattern but use widget-specific endpoints:

Text
GET /api/widgets/:id/responses
DELETE /api/responses (with widgetId instead of formId)

Poll votes

Poll votes are accessed through the poll results endpoint:

Text
GET /api/polls/:id/results

Individual vote records are not exposed to protect voter anonymity.