Feedback Analytics

Developers

Feedback Analytics API

Use the Feedback Analytics API to integrate forms, responses, datatables and events into your own applications, dashboards and automations.

REST APIJSONAPI Key AuthOpenAPIRate Limited

Base URL

https://feedback-analytics.com/api/v1

Intro

One REST API for everything: fetch workspaces and forms (including schema and analytics), get form responses (with answers, score, datatable link), manage datatables (CRUD on rows), email history and events. API key authentication. Suitable for Zapier, Make, n8n and your own apps.

Quick start

Stap 1: maak een API key

Create API key: In Feedback Analytics go to your workspace → Settings → "API keys" section and click "New key". Save the key (starts with fa_); it is only shown once.

Stuur de key mee via de header X-API-Key.

Stap 2: doe je eerste request

bash
curl https://feedback-analytics.com/api/v1/workspaces \
  -H "X-API-Key: YOUR_API_KEY"

Stap 3: begrijp de response

Elke succes-response heeft hetzelfde envelope: data, meta, links, request_id.

json
{
  "data": [
    {
      "id": "ws_123",
      "name": "Main workspace",
      "link": "my-workspace"
    }
  ],
  "meta": {},
  "links": {},
  "request_id": "req_abc123"
}

Authentication

Send the X-API-Key header with your API key with every request. Keys start with fa_. Your API key has access to one or more workspaces; you may only request resources from those workspaces.

Create an API key in Workspace settings → API keys (after login). Keep your key safe and never share it in frontend code or public repos.

bash
curl "https://feedback-analytics.com/api/v1/workspaces" \
  -H "X-API-Key: fa_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Response format

Elke succes-response heeft exact vier top-level velden. Errors hebben error en request_id.

data

De resource of lijst resources.

meta

Extra metadata, o.a. paginering (limit, has_more).

links

Navigatie: self, next, prev (bij lijsten).

request_id

Unieke id voor debugging en support.

json
{
  "data": {},
  "meta": {},
  "links": {},
  "request_id": "req_abc123"
}

Error codes

On error the API returns JSON with error, message and optionally details.

json
{
  "error": {
    "code": "resource_not_found",
    "message": "Resource not found",
    "status": 404
  },
  "request_id": "req_abc123"
}

Error codes

CodeHTTPWanneer
invalid_api_key401Ontbrekende of ongeldige API-key.
api_key_expired401Key ingetrokken of verlopen.
insufficient_scope403Key mist vereiste scope.
workspace_access_denied403Geen toegang tot deze workspace.
resource_not_found404Resource niet gevonden of geen toegang.
validation_error400Ongeldige body/query; zie details.
conflict409Bijv. dubbele unieke waarde.
idempotency_replay409Zelfde Idempotency-Key, andere body.
rate_limit_exceeded429Retry na Retry-After header.
internal_error500Serverfout; retry met backoff.

Pagination

Cursor-based: gebruik limit (standaard 20, max 100) en cursor voor de volgende pagina. Gebruik links.next voor de volgende URL.

bash
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?limit=20&cursor=resp_123" \
  -H "X-API-Key: YOUR_API_KEY"
  • • default limit = 20, max limit = 100
  • • cursor-based; geen page/offset
  • • meta.has_more geeft aan of er meer pagina's zijn

Filtering & sort

Query parameters per resource. Veelvoorkomend: form_id, created_after, created_before, score_gte, score_lte. Sort: sort=veld:richting (asc of desc).

bash
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?form_id=form_123&limit=20" \
  -H "X-API-Key: YOUR_API_KEY"
bash
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?created_after=2026-01-01&score_gte=8" \
  -H "X-API-Key: YOUR_API_KEY"
bash
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?sort=created_at:desc" \
  -H "X-API-Key: YOUR_API_KEY"

Resources

Alle endpoints zijn genest onder /api/v1/workspaces/{workspace_id}. Vervang workspace_id met de id uit GET /workspaces.

Where do I find workspace_id and table_id?

In the app you often use the workspace link. The API uses the internal workspace_id and table_id (long CUID strings) instead.

  • workspace_id: Fetch the list with GET /api/v1/workspaces; the response contains an id (and name, link) for each workspace. Use that id as workspace_id in all other endpoints.
  • table_id or datatable_id: After GET …/tables or …/datatables you get a list with id and name; use the id in …/datatables/{datatable_id}/rows.

Workspaces

Workspaces die de API-key kan benaderen. Gebruik de id als workspace_id in alle andere endpoints.

GET/api/v1/workspaces

Lijst workspaces

GET/api/v1/workspaces/{workspace_id}

Eén workspace ophalen

bash
curl "https://feedback-analytics.com/api/v1/workspaces" -H "X-API-Key: YOUR_API_KEY"

Forms

You can fetch forms in a workspace (list and details), get the form schema (questions, types, options, validation; useful for integrations) and an analytics summary (total responses, average score, last response). The schema endpoint supports If-None-Match / ETag for caching. See the overview below and the OpenAPI specification for all parameters.

GET/api/v1/workspaces/{workspace_id}/forms

Lijst formulieren

GET/api/v1/workspaces/{workspace_id}/forms/{form_id}

Eén formulier, ?include=questions

GET/api/v1/workspaces/{workspace_id}/forms/{form_id}/schema

Formulierschema (ETag)

GET/api/v1/workspaces/{workspace_id}/forms/{form_id}/analytics/summary

Analytics-samenvatting

Questions

Vragen horen bij een formulier. Alleen lezen in v1.

GET/api/v1/workspaces/{workspace_id}/forms/{form_id}/questions

Lijst vragen

GET/api/v1/workspaces/{workspace_id}/forms/{form_id}/questions/{question_id}

Eén vraag

Responses

Fetch form responses: list with pagination, filter and sort, or a single response by ID. Each response includes answers, score, link to form and datatable (row_id). When someone filled the form via an email link, you get respondent_email and email_id. With include_table_data=true you get the datatable row as it was at submit time. Ideal for reporting, CRM sync or your own dashboards.

GET/api/v1/workspaces/{workspace_id}/responses

Lijst responses (alle formulieren)

GET/api/v1/workspaces/{workspace_id}/responses/{response_id}

Eén response

GET/api/v1/workspaces/{workspace_id}/forms/{form_id}/responses

Lijst responses van één formulier

Veelgebruikte filters

form_id, created_after, created_before, score_gte, score_lte

bash
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?form_id=form_123&limit=20" \
  -H "X-API-Key: YOUR_API_KEY"
json
{
  "data": [
    {
      "id": "resp_123",
      "form_id": "form_123",
      "score": 8,
      "created_at": "2026-03-10T12:00:00Z",
      "answers": [],
      "respondent_email": null,
      "row_id": null
    }
  ],
  "meta": { "limit": 20, "has_more": false },
  "links": { "self": "...", "next": null, "prev": null },
  "request_id": "req_abc123"
}

Datatables

Manage rows in your datatables: list tables, fetch fields, read rows with filter and sort, add or update one or more rows (upsert on data.id), or delete.

GET/api/v1/workspaces/{workspace_id}/datatables

Lijst datatables

GET/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}

Eén datatable, ?include=fields

Rows (datatable-rijen)

CRUD op rijen binnen een datatable. Server wijst row_id toe bij POST. PATCH voor partiële update, DELETE voor verwijderen.

GET/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows

Lijst rijen

GET/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows/{row_id}

Eén rij

POST/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows

Rij aanmaken

PATCH/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows/{row_id}

Rij bijwerken

DELETE/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows/{row_id}

Rij verwijderen (204)

bash
curl -X POST "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/datatables/DATATABLE_ID/rows" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data": {"email": "jan@voorbeeld.nl", "naam": "Jan"}}'
json
{
  "data": {
    "row_id": "row_abc",
    "email": "jan@voorbeeld.nl",
    "naam": "Jan",
    "created_at": "2026-03-10T12:00:00Z",
    "updated_at": "2026-03-10T12:00:00Z"
  },
  "meta": {},
  "links": {},
  "request_id": "req_abc123"
}

Email events

Fetch email event history: sends, opens, clicks, bounces, etc. linked to email_id, row_id, form_id and flow_id. Useful for reporting or CRM sync.

GET/api/v1/workspaces/{workspace_id}/email-events

Lijst e-mail events

GET/api/v1/workspaces/{workspace_id}/emails/{email_id}/events

Events voor één e-mail (convenience)

Filters: email_id, type, created_after, created_before, recipient

bash
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/email-events?limit=20&sort=created_at:desc" \
  -H "X-API-Key: YOUR_API_KEY"

Webhook endpoints

Beheer webhook-URLs voor events. POST om aan te maken, DELETE om te verwijderen.

GET/api/v1/workspaces/{workspace_id}/webhook-endpoints

Lijst webhooks

POST/api/v1/workspaces/{workspace_id}/webhook-endpoints

Webhook aanmaken

GET/api/v1/workspaces/{workspace_id}/webhook-endpoints/{endpoint_id}

Eén webhook

DELETE/api/v1/workspaces/{workspace_id}/webhook-endpoints/{endpoint_id}

Webhook verwijderen (204)

API keys

Lijst metadata van API-keys (geen secrets). POST om een key aan te maken; de secret wordt één keer getoond. DELETE om te revoken.

GET/api/v1/workspaces/{workspace_id}/api-keys

Lijst keys (metadata)

POST/api/v1/workspaces/{workspace_id}/api-keys

Key aanmaken (secret 1x in response)

DELETE/api/v1/workspaces/{workspace_id}/api-keys/{key_id}

Key revoken (204)

Rate limit

There is a rate limit per API key (about 60 requests per minute). The response headers X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset show your current usage.

Elke response bevat de headers X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (Unix seconden).

OpenAPI specification

De machine-readable OpenAPI 3.0-spec kun je gebruiken voor client generation, Postman/Insomnia import, tooling en SDK-generation.

OpenAPI spec (JSON)

GET https://feedback-analytics.com/api/v1/openapi

In Postman or Insomnia use "Import" → "Link" and paste: /api/v1/openapi (with the same domain as this page).

This documentation follows the implementation spec docs/API-ARCHITECTURE-DESIGN.md. Endpoint matrix: docs/API-ENDPOINT-MATRIX.md. Gap analysis: docs/API-GAP-ANALYSIS.md. OpenAPI: GET /api/v1/openapi. Pagination: cursor + limit (default 20, max 100).

Need an API key?

Create a key in Workspace → Settings → API keys, or contact us for support.

Geen creditcard · Gratis tot 3 formulieren · Annuleer altijd