Developers
API Documentatie
Eén REST API voor alles: formulierresponses ophalen (met antwoorden, score, koppeling aan datatable), datatabellen beheren (CRUD op rijen), e-mailhistorie en events. API-key authenticatie. Geschikt voor Zapier, Make, n8n en eigen apps.
Quick start
- API-sleutel aanmaken — Ga in Feedback Analytics naar je workspace → Instellingen → sectie "API-sleutels" en klik op "Nieuwe sleutel". Bewaar de sleutel (begint met
fa_); hij wordt maar één keer getoond. - Workspace- en tabel-ID vinden — Open je datatable in de app. In de adresbalk zie je:
/…/datatable/[table_id]/table. Het eerste deel van het pad is je workspace-link; deworkspace_idis de interne ID (zie hieronder). - Eerste request — Stuur een GET met header
X-API-Key: fa_...naarhttps://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/tablesom je tabellen op te halen. Gebruik deiduit de response alstable_idvoor de andere endpoints.
Voor Postman of Insomnia: importeer de OpenAPI-specificatie (JSON). Gebruik in Postman/Insomnia de optie "Import" → "Link" en plak: /api/v1/openapi (met hetzelfde domein als deze pagina, bijv. https://feedback-analytics.com/api/v1/openapi).
Base URL
Alle endpoints staan onder het volgende domein. Vervang workspace_id en table_id met de IDs uit je Feedback Analytics workspace.
https://feedback-analytics.com
Waar vind ik workspace_id en table_id?
In de app gebruik je vaak de link van je workspace (bijv. mijn-workspace). De API gebruikt daarentegen de interne workspace_id en table_id (lange CUID-strings).
- workspace_id — Haal hem op via
GET …/workspaces/{workspace_id}/tablesmet een workspace waar je sleutel toegang toe heeft; of vraag je beheerder. In de app staat hij in de URL van sommige pagina's (bijv. instellingen) als je de bron bekijkt. - table_id — Na
GET …/tableskrijg je een lijst metidenname; gebruik deidalstable_id.
Responses (formulierantwoorden)
Haal formulierresponses op: lijst met paginering, filter en sort, of één response op ID. Elke response bevat antwoorden, score, koppeling aan formulier en datatable (row_id). Wanneer iemand het formulier via een e-maillink heeft ingevuld, krijg je respondent_email (het e-mailadres van de respondent) en email_id. Met include_table_data=true krijg je de datatable-rij zoals die was op het moment van invullen. Ideaal voor rapportages, CRM-sync of eigen dashboards.
Lijst responses
/api/v1/workspaces/{workspace_id}/responsesVoor vertaalde formulieren met reporting_label per antwoord: /api/v2/workspaces/{workspace_id}/responses
Eén response ophalen
/api/v1/workspaces/{workspace_id}/responses/{response_id}Optionele queryparams: include_table_data=true, include_actionlist_data=true. Response komt in data (geen paginering).
Queryparameters
page,limit— Paginering (standaard 1, 50; max limit 1000).sort— Bijv.createdAt:descofscore:asc.filter— Filter op velden (form_id, score, etc.), zelfde syntax als bij datatables.start_date,end_date— Datumbereik (ISO 8601) op aanmaakdatum.form_id— Alleen responses van dit formulier.include_table_data=true — Voegttable_datatoe (datatable-rij op moment van invullen).include_actionlist_data=true — Voegtactionlist_datatoe (getriggerde actielijsten).
Response-schema (per response)
{
"id": "response-id",
"score": 42,
"version": 1,
"createdAt": "2025-01-15T10:30:00.000Z",
"form": { "id": "...", "name": "Enquête naam" },
"answers": [
{ "id": "q1", "title": "Vraag 1", "type": "single_choice", "value": { "id": "...", "value": "Optie A" } }
],
"email_id": "..." | null,
"respondent_email": "respondent@voorbeeld.nl" | null,
"row_id": "..." | null,
"table_data": { "row_id": "...", "email": "...", "_captured_at": "..." } | undefined,
"actionlist_data": [{ "actionlist_id": "...", "triggered_score": 3, "triggers": [...] }] | undefined
}respondent_email — E-mailadres van de respondent (ontvanger van de formulierlink). Alleen aanwezig als de response via een e-maillink is gestart. Handig om invullers te koppelen aan je CRM of datatable.
De lijst staat in data; meta (total, page, limit, filtered_total) en links (self, next, prev) voor paginering.
Voorbeelden
Lijst (met respondent- en tabeldata):
curl -H "X-API-Key: fa_xxx" \ "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses?page=1&limit=20&form_id=FORM_ID&include_table_data=true&sort=createdAt:desc"
Eén response op ID:
curl -H "X-API-Key: fa_xxx" \ "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/responses/RESPONSE_ID?include_table_data=true"
E-mail events (historie)
Haal de historie van e-mail-events op: verzendingen, opens, clicks, bounces, etc. gekoppeld aan email_id, row_id, form_id en flow_id. Handig voor rapportages of sync met je CRM.
Endpoint
/api/v1/workspaces/{workspace_id}/emails/eventsQueryparameters
page,limit— Paginering (standaard 1, 50; max limit 1000).sort— Bijv.createdAt:desc.filter— Filter op velden (zelfde syntax als bij responses/datatables).start_date,end_date— Datumbereik (ISO 8601).type— Eventtype (bijv. open, click, bounce).email_id— Alleen events voor deze e-mail.recipient— Filter op ontvanger.
Response-schema (per event)
{
"id": "event-id",
"email_id": "email-id",
"email": "ontvanger@voorbeeld.nl",
"row_id": "datatable-entry-id of leeg",
"form_id": "form-id of leeg",
"flow_id": "flow-id of leeg",
"event_type": "open | click | bounce | ...",
"createdAt": "2025-01-15T10:30:00.000Z"
}De lijst staat in data; meta en links voor paginering.
Voorbeeld
curl -H "X-API-Key: fa_xxx" \ "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/emails/events?page=1&limit=20&sort=createdAt:desc"
Authenticatie
Stuur bij elk request de header X-API-Key met je API-sleutel. Sleutels beginnen met fa_. Je API-sleutel heeft toegang tot één of meerdere workspaces; je mag alleen resources van die workspaces opvragen.
Maak een API-sleutel aan in Workspace instellingen → API-sleutels (na inloggen). Bewaar je sleutel veilig en deel deze nooit in frontend-code of publieke repos.
# Voorbeeld header
X-API-Key: fa_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# cURL voorbeeld
curl -H "X-API-Key: fa_xxx" "https://feedback-analytics.com/api/v1/workspaces/YOUR_WORKSPACE_ID/tables"
Overzicht endpoints
Responses, datatabellen en (waar van toepassing) e-mail events. Alle endpoints vereisen de header X-API-Key.
| Method | Path | Beschrijving |
|---|---|---|
| GET | /api/v1/workspaces/{workspace_id}/responses | Lijst formulierresponses (filter, sort, paginering) |
| GET | /api/v1/workspaces/{workspace_id}/responses/{response_id} | Eén response ophalen op ID (incl. respondent_email, table_data) |
| GET | /api/v2/workspaces/{workspace_id}/responses | Zelfde als v1, met reporting_label voor vertaalde formulieren |
| GET | /api/v1/workspaces/{workspace_id}/emails/events | E-mail delivery events (opens, clicks, bounces) |
| GET | /api/v1/workspaces/{workspace_id}/tables | Lijst van alle datatabellen in de workspace |
| GET | /api/v1/workspaces/{workspace_id}/tables/{table_id}/fields | Lijst van veldnamen (inclusief row_id) |
| GET | /api/v1/workspaces/{workspace_id}/tables/{table_id} | Rijen ophalen met paginering, filter en sortering |
| GET | /api/v1/workspaces/{workspace_id}/tables/{table_id}/entries/{row_id} | Eén rij ophalen op row_id |
| POST | /api/v1/workspaces/{workspace_id}/tables/{table_id}/entries | Eén rij aanmaken of bijwerken (upsert op data.id) |
| POST | /api/v1/workspaces/{workspace_id}/tables/{table_id}/bulk-entries | Meerdere rijen in één keer aanmaken of bijwerken |
| PATCH | /api/v1/workspaces/{workspace_id}/tables/{table_id}/entries/{row_id} | Bestaande rij gedeeltelijk bijwerken |
| DELETE | /api/v1/workspaces/{workspace_id}/tables/{table_id}/entries/{row_id} | Eén rij verwijderen |
Datatabellen
Beheer rijen in je datatabellen: lijst tabellen, velden ophalen, rijen lezen met filter en sort, één rij of meerdere rijen toevoegen/bijwerken (upsert op data.id), of verwijderen.
Queryparameters (GET-rijen)
Bij GET .../tables/{table_id} (rijen ophalen) kun je de volgende queryparameters gebruiken.
page,limit— Paginering (standaard page=1, limit=50, max limit=1000).filter— Filter op velden, bijv.email=test@example.comofrow_id=abc123. Meerdere filters met komma. Ondersteunde operatoren:=,!=,~(bevat),in(bijv. status=[active,pending]).sort— Sortering, bijv.createdAt:descofemail:asc. Meerdere met komma.start_date,end_date— Datumbereik (ISO 8601) opcreatedAt.include_metadata=true — Voegtcreated_atenupdated_attoe aan elke rij.
Voorbeelden (datatables)
Rij toevoegen of bijwerken (upsert)
POST naar .../entries. Het veld data.id is verplicht; als een rij met die id al bestaat, wordt die bijgewerkt.
curl -X POST "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/tables/TABLE_ID/entries" \
-H "X-API-Key: fa_xxx" \
-H "Content-Type: application/json" \
-d '{
"data": {
"id": "klant-001",
"email": "jan@voorbeeld.nl",
"naam": "Jan Jansen"
}
}'Response (201): { "row_id": "...", "data": { ... } }
Rijen ophalen met filter
curl -H "X-API-Key: fa_xxx" \ "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/tables/TABLE_ID/entries?page=1&limit=20&filter=email~@voorbeeld.nl"
Response bevat data, meta (total, page, limit, filtered_total) en links (self, next, prev).
Eén rij bijwerken (PATCH)
curl -X PATCH "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/tables/TABLE_ID/entries/ROW_ID" \
-H "X-API-Key: fa_xxx" \
-H "Content-Type: application/json" \
-d '{ "data": { "naam": "Jan de Vries" } }'Rij verwijderen
curl -X DELETE "https://feedback-analytics.com/api/v1/workspaces/WORKSPACE_ID/tables/TABLE_ID/entries/ROW_ID" \ -H "X-API-Key: fa_xxx"
Response: 204 No Content
Foutcodes
Bij een fout retourneert de API JSON met error, message en optioneel details.
- 401 Unauthorized — Ontbrekende of ongeldige API-key.
- 403 Forbidden — Geen toegang tot deze workspace.
- 404 Not Found — Workspace, tabel, rij of response niet gevonden.
- 400 Bad Request — Ongeldige body of query (bijv. ontbrekende
dataofdata.id). - 429 Too Many Requests — Rate limit overschreden (headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset).
Rate limit
Er geldt een rate limit per API-key (ongeveer 60 requests per minuut). De response-headers X-RateLimit-Limit, X-RateLimit-Remaining en X-RateLimit-Reset geven je huidige gebruik weer.