Intro
Eine REST-API für alles: Workspaces und Formulare abrufen (inkl. Schema und Analytics), Formularantworten abrufen (mit Antworten, Bewertung, Datentabellen-Verknüpfung), Datentabellen verwalten (CRUD auf Zeilen), E-Mail-Verlauf und Events. API-Key-Authentifizierung. Geeignet für Zapier, Make, n8n und eigene Apps.
Quick start
Stap 1: maak een API key
API-Schlüssel erstellen: In Feedback Analytics zu Workspace → Einstellungen → "API-Schlüssel" und "Neuer Schlüssel" klicken. Schlüssel (beginnt mit fa_) sicher aufbewahren; er wird nur einmal angezeigt.
Stuur de key mee via de header X-API-Key.
Stap 2: doe je eerste request
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.
{
"data": [
{
"id": "ws_123",
"name": "Main workspace",
"link": "my-workspace"
}
],
"meta": {},
"links": {},
"request_id": "req_abc123"
}Authentifizierung
Sende bei jeder Anfrage den Header X-API-Key mit deinem API-Schlüssel. Schlüssel beginnen mit fa_. Dein API-Schlüssel hat Zugriff auf einen oder mehrere Workspaces; du darfst nur Ressourcen dieser Workspaces abfragen.
API-Schlüssel anlegen unter Workspace-Einstellungen → API-Schlüssel (nach Anmeldung). Schlüssel sicher aufbewahren und nie in Frontend-Code oder öffentlichen Repos teilen.
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.
dataDe resource of lijst resources.
metaExtra metadata, o.a. paginering (limit, has_more).
linksNavigatie: self, next, prev (bij lijsten).
request_idUnieke id voor debugging en support.
{
"data": {},
"meta": {},
"links": {},
"request_id": "req_abc123"
}Fehlercodes
Bei einem Fehler liefert die API JSON mit error, message und optional details.
{
"error": {
"code": "resource_not_found",
"message": "Resource not found",
"status": 404
},
"request_id": "req_abc123"
}Error codes
| Code | HTTP | Wanneer |
|---|---|---|
| invalid_api_key | 401 | Ontbrekende of ongeldige API-key. |
| api_key_expired | 401 | Key ingetrokken of verlopen. |
| insufficient_scope | 403 | Key mist vereiste scope. |
| workspace_access_denied | 403 | Geen toegang tot deze workspace. |
| resource_not_found | 404 | Resource niet gevonden of geen toegang. |
| validation_error | 400 | Ongeldige body/query; zie details. |
| conflict | 409 | Bijv. dubbele unieke waarde. |
| idempotency_replay | 409 | Zelfde Idempotency-Key, andere body. |
| rate_limit_exceeded | 429 | Retry na Retry-After header. |
| internal_error | 500 | Serverfout; 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.
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).
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?form_id=form_123&limit=20" \
-H "X-API-Key: YOUR_API_KEY"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"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.
Wo finde ich workspace_id und table_id?
In der App verwendest du oft den Workspace-Link. Die API verwendet stattdessen die interne workspace_id und table_id (lange CUID-Strings).
- • workspace_id: Liste mit GET /api/v1/workspaces abrufen; die Response enthält pro Workspace eine id (und name, link). Diese id als workspace_id in allen anderen Endpoints verwenden.
- • table_id oder datatable_id: Nach GET …/tables oder …/datatables erhältst du eine Liste mit id und name; die id in …/datatables/{datatable_id}/rows verwenden.
Workspaces
Workspaces die de API-key kan benaderen. Gebruik de id als workspace_id in alle andere endpoints.
/api/v1/workspacesLijst workspaces
/api/v1/workspaces/{workspace_id}Eén workspace ophalen
curl "https://feedback-analytics.com/api/v1/workspaces" -H "X-API-Key: YOUR_API_KEY"Forms
Du kannst Formulare in einem Workspace abrufen (Liste und Details), das Formularschema (Fragen, Typen, Optionen, Validierung; nützlich für Integrationen) und eine Analytics-Zusammenfassung (Gesamt-Responses, Durchschnittsbewertung, letzte Response). Der Schema-Endpoint unterstützt If-None-Match / ETag für Caching. Siehe Übersicht unten und die OpenAPI-Spezifikation für alle Parameter.
/api/v1/workspaces/{workspace_id}/formsLijst formulieren
/api/v1/workspaces/{workspace_id}/forms/{form_id}Eén formulier, ?include=questions
/api/v1/workspaces/{workspace_id}/forms/{form_id}/schemaFormulierschema (ETag)
/api/v1/workspaces/{workspace_id}/forms/{form_id}/analytics/summaryAnalytics-samenvatting
Questions
Vragen horen bij een formulier. Alleen lezen in v1.
/api/v1/workspaces/{workspace_id}/forms/{form_id}/questionsLijst vragen
/api/v1/workspaces/{workspace_id}/forms/{form_id}/questions/{question_id}Eén vraag
Responses
Formularantworten abrufen: Liste mit Paginierung, Filter und Sortierung oder eine Response per ID. Jede Response enthält Antworten, Bewertung, Verknüpfung zu Formular und Datentabelle (row_id). Bei Ausfüllen über E-Mail-Link erhältst du respondent_email und email_id. Mit include_table_data=true die Datentabellen-Zeile zum Zeitpunkt des Absendens. Ideal für Berichte, CRM-Sync oder eigene Dashboards.
/api/v1/workspaces/{workspace_id}/responsesLijst responses (alle formulieren)
/api/v1/workspaces/{workspace_id}/responses/{response_id}Eén response
/api/v1/workspaces/{workspace_id}/forms/{form_id}/responsesLijst responses van één formulier
Veelgebruikte filters
form_id, created_after, created_before, score_gte, score_lte
curl "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?form_id=form_123&limit=20" \
-H "X-API-Key: YOUR_API_KEY"{
"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
Zeilen in Datentabellen verwalten: Tabellen auflisten, Felder abrufen, Zeilen mit Filter und Sortierung lesen, eine oder mehrere Zeilen hinzufügen/aktualisieren (Upsert auf data.id) oder löschen.
/api/v1/workspaces/{workspace_id}/datatablesLijst datatables
/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.
/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rowsLijst rijen
/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows/{row_id}Eén rij
/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rowsRij aanmaken
/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows/{row_id}Rij bijwerken
/api/v1/workspaces/{workspace_id}/datatables/{datatable_id}/rows/{row_id}Rij verwijderen (204)
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"}}'{
"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
E-Mail-Event-Verlauf abrufen: Sendungen, Opens, Clicks, Bounces usw., verknüpft mit email_id, row_id, form_id und flow_id. Nützlich für Berichte oder CRM-Sync.
/api/v1/workspaces/{workspace_id}/email-eventsLijst e-mail events
/api/v1/workspaces/{workspace_id}/emails/{email_id}/eventsEvents voor één e-mail (convenience)
Filters: email_id, type, created_after, created_before, recipient
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.
/api/v1/workspaces/{workspace_id}/webhook-endpointsLijst webhooks
/api/v1/workspaces/{workspace_id}/webhook-endpointsWebhook aanmaken
/api/v1/workspaces/{workspace_id}/webhook-endpoints/{endpoint_id}Eén webhook
/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.
/api/v1/workspaces/{workspace_id}/api-keysLijst keys (metadata)
/api/v1/workspaces/{workspace_id}/api-keysKey aanmaken (secret 1x in response)
/api/v1/workspaces/{workspace_id}/api-keys/{key_id}Key revoken (204)
Rate limit
Pro API-Schlüssel gilt ein Rate Limit (ca. 60 Anfragen pro Minute). Die Response-Header X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset zeigen die aktuelle Nutzung.
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/openapiIn Postman oder Insomnia "Import" → "Link" verwenden und einfügen: /api/v1/openapi (gleiche Domain wie diese Seite).
Diese Dokumentation folgt der Implementierungsspezifikation docs/API-ARCHITECTURE-DESIGN.md. Endpoint-Matrix: docs/API-ENDPOINT-MATRIX.md. Gap-Analyse: docs/API-GAP-ANALYSIS.md. OpenAPI: GET /api/v1/openapi. Paginierung: cursor + limit (Standard 20, max 100).