Ontwikkelaars
API-methoden
Volledige referentie voor elke methode die de formbase REST API aanbiedt. Per methode vind je de parameters, voorbeeldverzoeken en de vorm van de response.
Één endpoint, veel methoden
Elke methode is POST https://api.formbase.so/api/v1 met een JSON-body {"method": "...", "params": {...}}
en een Authorization: Bearer fb_…-header. Zie API-overzicht voor authenticatie en
foutafhandeling, en API-tokens voor het token zelf.
Conventies
paramsmag worden weggelaten; het valt terug op{}. Een onbekende methode geeft404 METHOD_NOT_FOUND.Een token is gebonden aan één workspace. Een andere workspace noemen, of een formulier daarin, is
403 FORBIDDEN, zelfs als je tot beide behoort.Paginering. Lijstmethoden geven
{ items, nextCursor, hasMore }terug; de meeste geven ookcanPaginateterug, watfalseis wanneerhasMoretrue is maar geen cursor verder kan (fuzzy search). GeefnextCursorterug alscursor.limitis 1–100, standaard 20 — behalverequests.list, waarvan de standaard 25 is.Rate limits. 120 aanroepen per minuut per token, gedeeld met de MCP-server;
requests.createheeft zijn eigen limiet van 60 per minuut. Mislukte authenticatie wordt apart beperkt, 30 per 15 minuten per IP, waarna foute tokensRATE_LIMITEDzien in plaats vanUNAUTHORIZED.Bodygrootte. 1 MiB. Grotere bodies worden geweigerd met
VALIDATION_ERROR.Versiebeheer. Het pad draagt de versie. Breaking changes verschijnen als
/api/v2; nieuwe methoden en nieuwe responsevelden niet.
Formulieren
forms.list
Geeft een lijst van formulieren in een workspace. Ondersteunt cursorpaginering en optioneel fuzzy zoeken op naam.
workspaceIdstringrequired
workspaceIdstringrequiredWorkspace-ID.
folderIdstring | nulloptional
folderIdstring | nulloptionalFilter op map. Geef null door voor formulieren op rootniveau. Weglaten om alles te tonen.
querystringoptional
querystringoptionalFuzzy zoeken op naam. Resultaten zijn begrensd op limit; geen cursorpaginering.
limitnumberoptionaldefault: 20
limitnumberoptionaldefault: 20Paginagrootte (1–100).
cursorstringoptional
cursorstringoptionalPaginacursor van een vorige response.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "forms.list",
"params": { "workspaceId": "ws_abc123" }
}'{
"ok": true,
"data": {
"items": [
{
"id": "frm_abc123",
"name": "Contact Form",
"folderId": null,
"workspaceId": "ws_abc123",
"isPublished": true,
"publishedAt": 1714041851000,
"unpublishedAt": null,
"createdAt": 1714041800000,
"lastEditedAt": 1714042000000,
"emoji": null
}
],
"nextCursor": null,
"hasMore": false,
"canPaginate": false
}
}forms.get
Haalt volledige details op van een enkel formulier, inclusief vragen, omslag, logo en een voorbeeld-URL.
formIdstringrequired
formIdstringrequiredFormulier-ID.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "forms.get",
"params": { "formId": "frm_abc123" }
}'{
"ok": true,
"data": {
"id": "frm_abc123",
"name": "Event Feedback",
"folderId": null,
"workspaceId": "ws_abc123",
"isPublished": true,
"publishedAt": 1714041851000,
"unpublishedAt": null,
"createdAt": 1714041800000,
"lastEditedAt": 1714042000000,
"emoji": null,
"questions": [
{
"id": "q_1",
"type": "email-input",
"inputType": "email",
"title": "Your email",
"metadata": null
},
{
"id": "q_2",
"type": "rating-input",
"inputType": "rating",
"title": "Overall experience",
"metadata": { "kind": "rating", "maxStars": 5 }
}
],
"hasContent": true,
"cover": null,
"logo": null,
"isDeleted": false,
"trashedAt": null,
"previewUrl": "https://formbase.so/preview/abc..."
}
}forms.create
Maak een nieuw leeg formulier aan. Geeft het formulier en een voorbeeld-URL terug.
namestringrequired
namestringrequiredFormuliernaam (1–255 tekens).
workspaceIdstringrequired
workspaceIdstringrequiredWorkspace-ID.
folderIdstringoptional
folderIdstringoptionalPlaats het formulier in een map. Weglaten om op workspace-rootniveau aan te maken.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "forms.create",
"params": {
"name": "Contact",
"workspaceId": "ws_abc123"
}
}'const res = await fetch('https://api.formbase.so/api/v1', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.FORMBASE_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
method: 'forms.create',
params: { name: 'Contact', workspaceId: 'ws_abc123' },
}),
})
const { ok, data } = await res.json()import os, requests
res = requests.post(
"https://api.formbase.so/api/v1",
headers={"Authorization": f"Bearer {os.environ['FORMBASE_TOKEN']}"},
json={
"method": "forms.create",
"params": {
"name": "Contact",
"workspaceId": "ws_abc123",
},
},
)
data = res.json(){
"ok": true,
"data": {
"id": "frm_new123",
"name": "Contact",
"workspaceId": "ws_abc123",
"folderId": null,
"isPublished": false,
"createdAt": 1714041851000,
"previewUrl": "https://formbase.so/preview/abc..."
}
}forms.update
Werk formuliermetadata bij: naam, map, emoji, omslag of logo. Werkt de formulierinhoud niet bij (gebruik daarvoor de editor-tools).
formIdstringrequired
formIdstringrequiredFormulier-ID.
namestringoptional
namestringoptionalNieuwe formuliernaam (1–255 tekens).
folderIdstring | nulloptional
folderIdstring | nulloptionalVerplaats het formulier naar een map. Geef null door om naar workspace-root te verplaatsen.
emojistring | nulloptional
emojistring | nulloptionalFormulier-emoji (max. 10 tekens). Geef null door om te wissen.
coverobjectoptional
coverobjectoptionalOmslag. {"type": "color", "color": "#ffffff"}, {"type": "image", "url": "https://...", "offsetY": 50}
(offsetY 0–100, standaard 50), of {"type": "none"} om te verwijderen. Afbeelding-URL’s moeten
http(s) zijn of een data:image-URI.
logoobjectoptional
logoobjectoptionalLogo. {"type": "icon", "name": "HeartIcon"}, {"type": "image", "url": "https://..."}, of
{"type": "none"} om te verwijderen. Iconnamen liggen vast: QuestionMarkIcon, ListBulletsIcon,
ChartBarIcon, ClockCountdownIcon, HeartIcon, LightbulbIcon,
CheckCircleIcon, MagnifyingGlassIcon, TrendUpIcon, EnvelopeIcon,
PhoneIcon, CalendarIcon, LinkIcon, UsersIcon.
Geef minstens één van de vijf bij te werken velden mee. Dit wijzigt de formulierinhoud niet — gebruik daarvoor de MCP-editor-tools.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "forms.update",
"params": {
"formId": "frm_abc123",
"name": "Updated Name",
"emoji": "📋"
}
}'{
"ok": true,
"data": {
"id": "frm_abc123",
"name": "Updated Name",
"folderId": null,
"emoji": "📋"
}
}cover en logo komen alleen terug wanneer je ze hebt meegestuurd. Een payload die op elk scalair veld al
overeenkwam met de huidige staat voegt noChange: true toe.
forms.publish
Publiceer een formulier zodat het reacties kan ontvangen, en bevries de veldsleutels ervan in een nieuwe snapshot.
Idempotent: een al gepubliceerd formulier geeft succes terug met alreadyPublished: true, en een gedepubliceerd formulier wordt opnieuw
gepubliceerd vanaf zijn laatste snapshot.
formIdstringrequired
formIdstringrequiredFormulier-ID.
Een formulier met inhoudsblokken maar geen vragen publiceert met een waarschuwing. Een formulier zonder enige inhoud kan niet worden gepubliceerd. Publiceren maakt geen openbare URL aan — roep daarvoor shareLinks.create aan.
forms.unpublish
Haal een formulier offline. Respondenten kunnen het niet meer openen. Idempotent — een formulier dat niet is gepubliceerd geeft
alreadyUnpublished: true terug. Omkeerbaar met forms.publish.
formIdstringrequired
formIdstringrequiredFormulier-ID.
forms.delete
Verplaats een formulier naar de prullenbak. De actieve deellinks ervan worden ingetrokken, zodat hun openbare URL’s stoppen met werken.
formIdstringrequired
formIdstringrequiredFormulier-ID.
Herstellen brengt de links niet terug
forms.restore geeft het formulier terug, maar de deellinks die het introk blijven ingetrokken. Genereer nieuwe met
shareLinks.create. Een formulier dat al in de prullenbak zit geeft alreadyTrashed: true terug en behoudt zijn
oorspronkelijke verwijderdatum.
forms.restore
Herstel een formulier uit de prullenbak.
formIdstringrequired
formIdstringrequiredFormulier-ID.
folderIdstring | nulloptional
folderIdstring | nulloptionalWaar het formulier hersteld wordt. Weglaten voor de oorspronkelijke map, null voor workspace-root, of een map-ID.
Een formulier dat niet in de prullenbak zit geeft alreadyRestored: true terug.
formSettings.get
Lees de gedragsinstellingen van een formulier.
formIdstringrequired
formIdstringrequiredFormulier-ID.
Geeft { settings, isDefault, availableEmailDomains, defaultFromAddress, payment } terug. isDefault is true
wanneer het formulier nog geen opgeslagen instellingenrij heeft en je de standaardwaarden ziet. availableEmailDomains bevat
de geverifieerde domein-ids die je kunt meegeven als emailDomainId, en payment meldt of Stripe is gekoppeld
(koppelen is een stap in het dashboard).
formSettings.update
Werk de gedragsinstellingen van een formulier bij. Een gedeeltelijke update: alleen de velden die je meestuurt worden geschreven.
formIdstringrequired
formIdstringrequiredFormulier-ID.
Accessgroupoptional
Accessgroupoptionallanguage (BCP-47, standaard “en”), requireAuthentication, showBranding,
captchaEnabled, passwordEnabled, password (4 tekens of meer; een string impliceert
passwordEnabled: true, null heft de vergrendeling op).
Owner notificationsgroupoptional
Owner notificationsgroupoptionalnotifyOnSubmission, notificationEmails (array), selfNotificationSubject,
selfNotificationEmailBody, pdfGenerationEnabled, showViewSubmissionButton. E-mails aan de
eigenaar zijn niet vertaalbaar — schrijf ze in de taal die je wilt.
Respondent notificationsgroupoptional
Respondent notificationsgroupoptionalrespondentNotificationEnabled, respondentNotificationTo, het veld-id van een e-mailvraag of null,
respondentNotificationSubject, respondentNotificationBody, respondentNotificationPdfEnabled.
Remindersgroupoptional
RemindersgroupoptionalrespondentReminderEnabled, respondentReminderTo, respondentReminderSubject,
respondentReminderBody, respondentReminderRequiredFieldIds, en reminderSteps —
inactiviteitsstappen zoals [“1d”,“3d”,“1w”], maximaal 5, gesorteerd en ontdubbeld bij opslaan, [] voor geen.
Het schema geldt zowel voor verlaten reacties via een openbare link als voor aanvragen. Pro.
After submitgroupoptional
After submitgroupoptionalredirectUrl (http(s); null of “” wist het), redirectQueryParams (
[{ paramName, fieldId }]), allowAnotherResponse (sluit een omleiding wederzijds uit),
maxSubmissionsPerRespondent (0 = onbeperkt, max. 1000), editAfterSubmit, maxEdits (max. 3; 0
betekent onbeperkt bij Pro en Business, 3 bij Free).
Retentiongroupoptional
RetentiongroupoptionaldraftRetentionDays en submissionRetentionDays (0–36500, null valt terug op de standaardwaarde).
Bewaring van inzendingen is Business, en het instellen ervan wist elke vaste verwijderdatum die in de builder is geconfigureerd.
emailDomainIdstring | nulloptional
emailDomainIdstring | nulloptionalEen geverifieerd e-maildomein-id uit formSettings.get, voor een aangepast afzenderadres. null zet terug naar
de standaardafzender.
Onderwerpen en teksten zijn platte tekst en accepteren {{variable}}-plaatshouders; nieuwe regels worden alinea’s. Een
onderwerp of tekst voor respondenten aanpassen maakt het vertaalbaar, dus de sleutels ervan verschijnen meteen in
translations.listEntries.
Inzendingen
submissions.list
Geeft de inzendingen van een formulier weer, nieuwste pagina eerst, met cursorpaginering.
formIdstringrequired
formIdstringrequiredFormulier-ID.
includeDraftsbooleanoptionaldefault: true
includeDraftsbooleanoptionaldefault: trueReacties meenemen die zijn gestart maar nooit ingediend. Concepten zijn een Pro-functie: op Free worden alleen voltooide inzendingen weergegeven.
translationLanguagestringoptional
translationLanguagestringoptionalVoeg opgeslagen AI-vertalingen van de antwoorden toe onder items[].translation.display, met dezelfde sleutels als
display. items[].answers en items[].display blijven altijd het origineel.
limitnumberoptionaldefault: 20
limitnumberoptionaldefault: 20Paginagrootte (1–100).
cursorstringoptional
cursorstringoptionalPagineringscursor uit een vorige response.
{
"ok": true,
"data": {
"formId": "frm_abc123",
"formName": "Event Feedback",
"items": [
{
"id": "sub_xyz789",
"submittedAt": "2026-05-18 18:02:28",
"isCompleted": true,
"createdAt": "2026-05-18 18:02:19",
"answers": {
"email": "user@example.com",
"plan": "pro",
"contacts": [{ "name": "Ada" }, { "name": "Grace" }]
},
"display": {
"email": "user@example.com",
"plan": "Pro",
"contacts": "Ada, Grace"
}
}
],
"nextCursor": null,
"hasMore": false,
"canPaginate": false
}
}Dezelfde antwoorden als webhooks en callbacks
Elk item draagt answers geordend op veldsleutel en display met dezelfde
sleutels, als leesbare tekst — de vorm die een webhookpayload, een
aanvraagcallback en requests.get dragen. Een keuzeantwoord is zijn optiesleutel, een
herhalende groep een array van instanties. Roep fields.list aan voor de titel en optielabels van elke sleutel. Deze methode
geeft geen totalen terug.
submissions.pdf
Haal een link op naar de PDF van één inzending. Gebouwd voor de Zapier-connector: het geeft alleen een resultaat terug wanneer het formulier een actieve Zapier-integratie heeft die is ingesteld om de PDF mee te sturen, en de PDF is bewaard.
formIdstringrequired
formIdstringrequiredFormulier-ID.
submissionIdstringrequired
submissionIdstringrequiredInzending-ID. Moet bij dat formulier horen en voltooid zijn.
{
"ok": true,
"data": {
"url": "https://api.formbase.so/api/storage/...",
"filename": "formbase-submission-sub_xyz789.pdf",
"contentType": "application/pdf",
"byteLength": 148213
}
}submissions.sample
Bouw een voorbeeld-inzendingspayload voor een formulier, zonder echte data. Het is precies de vorm die een levering van een inzending via
een openbare link draagt, dus connectors gebruiken het voor velddetectie; een inzending die uit een aanvraag voortkomt, bereikt een
abonnement in plaats daarvan als request.completed, en die bouw je met requests.sample.
data.form.snapshotId is de huidige gepubliceerde versie van het formulier, hetzelfde id dat live events dragen, of
null zolang het formulier ongepubliceerd is.
formIdstringrequired
formIdstringrequiredFormulier-ID.
{
"ok": true,
"data": {
"id": "evt_example000000000000",
"type": "submission.completed",
"createdAt": "2026-05-18T19:00:00.000Z",
"apiVersion": "2026-09-24",
"test": true,
"data": {
"form": { "id": "frm_abc123", "name": "Event Feedback", "snapshotId": "js7abc123" },
"submission": {
"id": "sub_example000000000000",
"respondentEmail": "respondent@example.com",
"submittedAt": "2026-05-18T19:00:00.000Z",
"updatedAt": null,
"editCount": 0,
"pdfUrl": null,
"language": "en"
},
"answers": { "your_email": "john@example.com" },
"display": { "your_email": "john@example.com" }
}
}
}Veld- en payloadsemantiek staan één keer gedocumenteerd: de webhooks-referentie beschrijft ze.
Deellinks
Velden
fields.list
Geef elk veld van de huidige gepubliceerde versie van een formulier terug, met de sleutel om het aan te spreken. Roep dit aan vóór
requests.create in plaats van sleutels hard te coderen. Zie Veldsleutels.
formIdstringrequired
formIdstringrequiredFormulier-id. Een formulier dat nog nooit is gepubliceerd, heeft nog geen veldsleutels en geeft published: false terug,
zonder items.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "fields.list",
"params": { "formId": "j57..." }
}'{
"ok": true,
"data": {
"published": true,
"items": [
{ "key": "company_name", "type": "text", "title": "Company", "required": true, "prefillable": true },
{
"key": "company_size", "type": "select", "title": "Company size", "required": false, "prefillable": true,
"options": [
{ "key": "1_50", "label": "1–50" },
{ "key": "51_200", "label": "51–200" }
]
},
{
"key": "satisfaction", "type": "matrix", "title": "How did we do?", "required": false, "prefillable": true,
"rows": [{ "key": "delivery_speed", "label": "Delivery speed" }],
"columns": [{ "key": "very_good", "label": "Very good" }, { "key": "poor", "label": "Poor" }]
},
{ "key": "case_id", "type": "hidden", "title": "Case", "required": false, "prefillable": false, "context": true },
{ "key": "total", "type": "number", "title": "Total", "required": false, "prefillable": false, "calculated": true }
],
"hasMore": false
}
}De vlaggen lezen
context: true is een verborgen veld — de waarde hoort in context, nooit in prefill.
prefillable: false markeert een veld waarvoor niemand een waarde kan opgeven (bestand, handtekening, betaling, afspraak,
documenten). Stuur voor een keuzevraag de sleutel van de optie, niet het label; een matrix somt zijn rows
en columns op dezelfde manier op en neemt { "row_key": "column_key" }. calculated: true is
een berekend veld: het formulier berekent de waarde, je leest die terug in answers, en niets kan het versturen.
Een herhalende groep is type: “group” met repeating: true en een members-array. Een Documentenblok
is type: “documents” en draagt documents: [{ name }], de aangeleverde bestanden die elke respondent al ziet.
Aanvragen
Een aanvraag wijst één gepubliceerd formulier toe aan één persoon en roept je terug wanneer hij eindigt. De conceptuele uitleg staat in Een aanvraag maken; dit is de parameterlijst.
requests.create
Maak een aanvraag aan. Verbruikt één eenheid van het maandelijkse quotum van de werkruimte, of de ontvanger nu antwoordt of niet.
formIdstringrequired
formIdstringrequiredHet gepubliceerde formulier om toe te wijzen.
recipientobjectoptional
recipientobjectoptional{ email?, name? }. Een e-mailadres is verplicht wanneer delivery “email” is; anders
identificeert het alleen de persoon op de pagina Aanvragen en bij hun antwoorden.
prefillobjectoptional
prefillobjectoptionalBeginantwoorden per veldsleutel. De ontvanger ziet ze en kan ze wijzigen.
readonlystring[]optional
readonlystring[]optionalVooraf ingevulde sleutels die de ontvanger niet kan wijzigen. Elke sleutel hier moet ook voorkomen in prefill, en een
vergrendeld verplicht veld moet worden vooraf ingevuld met een niet-lege waarde.
contextobjectoptional
contextobjectoptionalWaarden voor de verborgen velden van het formulier, per veldsleutel. Vertrouwd, niet te wijzigen, en teruggegeven in de callback. Een
onbekende sleutel wordt geweigerd met UNKNOWN_FIELD_KEY.
metadataobjectoptional
metadataobjectoptionalJe eigen administratie. Bereikt het formulier nooit; komt terug in callbacks en uitlezingen.
languagestringoptional
languagestringoptionalEen van de gepubliceerde talen van het formulier. Standaard de eigen standaardtaal van het formulier.
deliverystringoptionaldefault: none
deliverystringoptionaldefault: none“email” om formbase de uitnodiging te laten versturen (vereist een e-mailadres van de ontvanger, en Pro of Business of een
van de 10 gratis uitnodigingen van een Free-account), of “none” om de link zelf af te leveren.
remindersstring[]optional
remindersstring[]optionalOverschrijft het herinneringsschema van het formulier voor deze aanvraag. Een lege array zet herinneringen uit.
expiresAtnumberoptional
expiresAtnumberoptionalEpoch-milliseconden. Standaard 30 dagen; 365 dagen is het maximum.
callbackUrlstringoptional
callbackUrlstringoptionalWaar formbase de callback naartoe post zodra de aanvraag eindigt. Alleen HTTPS, en de host moet naar een openbaar adres wijzen.
externalIdstringoptional
externalIdstringoptionalJe eigen id voor deze aanvraag. Filterbaar in requests.list.
idempotencyKeystringoptional
idempotencyKeystringoptionalHerhalen met dezelfde body geeft de oorspronkelijke aanvraag terug met deduplicated: true. Een andere body wordt geweigerd.
Sleutels blijven 30 dagen geldig.
domainIdstringoptional
domainIdstringoptionalGenereer de link op een van je aangepaste domeinen. Alleen REST API.
documentsobject[]optional
documentsobject[]optional[{ documentId, field?, name? }] — bestanden voor deze ene ontvanger, eerst geüpload met documents.create.
testbooleanoptionaldefault: false
testbooleanoptionaldefault: falseEen droogloop: er wordt niets gemaild, de callback draagt “test”: true, en de inzending telt nergens mee. De link sluit
binnen 24 uur, en op Free mag een workspace 10 testaanvragen per dag aanmaken.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "requests.create",
"params": {
"formId": "j57...",
"recipient": { "email": "ada@acme.com", "name": "Ada" },
"prefill": { "company_name": "Acme" },
"readonly": ["company_name"],
"context": { "case_id": "CASE-9" },
"delivery": "email",
"externalId": "run-42",
"callbackUrl": "https://automation.example/webhook/resume-abc",
"idempotencyKey": "run-42"
}
}'{
"ok": true,
"data": {
"id": "kd7...",
"status": "pending",
"url": "https://form.formbase.so/r/rq_...",
"deliveryStatus": "queued",
"expiresAt": 1794787200000,
"createdAt": 1789379200000,
"externalId": "run-42",
"deduplicated": false
}
}Bewaar de url
url draagt het eenmalige token. requests.get kan hem meestal opnieuw opbouwen, maar hij komt terug als
null voor een aanvraag die is aangemaakt voordat de deployment een aanvraagtoken-sleutel had. Lever je de link zelf af,
bewaar hem dan bij het aanmaken.
deliveryStatus is not_requested tot een uitnodiging in de wachtrij staat, dan queued →
sent of failed, en bounced zodra de mailprovider een harde bounce of een klacht meldt.
requests.get
Haal één aanvraag volledig op: status, uitkomst, wat er vooraf is ingevuld, zijn tijdlijn, en — zodra voltooid — answers en display gesorteerd op veldsleutel, dezelfde twee kaarten die de callback draagt.
requestIdstringrequired
requestIdstringrequiredAanvraag-id.
{
"ok": true,
"data": {
"id": "kd7...",
"formId": "j57...",
"status": "completed",
"outcome": "approve",
"isTest": false,
"recipient": { "email": "ada@acme.com", "name": "Ada" },
"language": "en",
"externalId": "run-42",
"metadata": null,
"context": { "case_id": "CASE-9" },
"prefill": { "company_name": "Acme" },
"readonlyKeys": ["company_name"],
"delivery": "email",
"deliveryStatus": "sent",
"hasCallback": true,
"callbackFailedAt": null,
"submissionId": "kp2...",
"url": "https://form.formbase.so/r/rq_...",
"answers": { "company_name": "Acme", "decision": "approve" },
"display": { "company_name": "Acme", "decision": "Approve" },
"timeline": [
{ "id": "kd7...:created", "type": "created", "at": 1789379200000 },
{ "id": "kd7...:completed", "type": "completed", "at": 1789465600000 }
],
"expiresAt": 1794787200000,
"completedAt": 1789465600000
}
}outcome versus status
status zegt of de aanvraag is afgerond; outcome zegt wat de ontvanger besliste — approve,
decline, changes, of null bij alles behalve een voltooide aanvraag waarvan de ontvanger één van
de drie koos — inclusief een formulier zonder beslissingsvraag. De callback-URL zelf
wordt nooit teruggegeven; hasCallback zegt alleen of er één is ingesteld.
Het bovenstaande voorbeeld is ingekort. Een volledige response draagt ook workspaceId, formSnapshotId,
createdVia, documents, reminderStep, remindersSent, reminderDueAt,
dataPurgedAt, en de rest van de tijdstempels (updatedAt, openedAt, startedAt,
lastActivityAt, expiredAt, canceledAt, canceledBy, cancelReason).
Twee velden vertellen je wanneer de kopie voor je neus de enige kopie is. callbackFailedAt is ingesteld terwijl de callback
van deze aanvraag geen pogingen meer over heeft, en wordt gewist zodra er één doorkomt of je hem opnieuw afspeelt.
dataPurgedAt is ingesteld zodra bewaarbeleid de aanvraag heeft gestript: context, prefill en
metadata komen leeg terug, readonlyKeys en documents zijn [], en
submissionId, answers en display zijn null.
timeline is afgeleid, oudste eerst. Elk item heeft een id, een at, en een type —
created, invitation, reminder, opened, started, completed,
expired, canceled, callback. Bezorgitems voegen deliveryStatus en
attemptCount toe, en callbacks voegen eventType toe. Bezorgrijen worden 30 dagen bewaard, dus oudere tijdlijnen
dunnen uit tot de tijdstempels.
requests.list
Geef aanvragen in een werkruimte of van één formulier terug, nieuwste eerst. Testaanvragen worden weggelaten tenzij je erom vraagt.
workspaceIdstringoptional
workspaceIdstringoptionalBeperk tot een werkruimte. Geef dit of formId mee.
formIdstringoptional
formIdstringoptionalBeperk tot één formulier.
statusstringoptional
statusstringoptionalpending, completed, expired, of canceled.
outcomestringoptional
outcomestringoptionalapprove, decline, of changes. Impliceert alleen voltooide aanvragen.
externalIdstringoptional
externalIdstringoptionalJe eigen id, om de aanvraag te vinden die een run heeft aangemaakt.
includeTestbooleanoptionaldefault: false
includeTestbooleanoptionaldefault: falseNeem aanvragen op die zijn aangemaakt met test: true.
limitnumberoptionaldefault: 25
limitnumberoptionaldefault: 25Paginagrootte (1–100).
cursorstringoptional
cursorstringoptionalPaginatiecursor van een vorige respons.
{
"ok": true,
"data": {
"items": [
{
"id": "kd7...",
"formId": "j57...",
"status": "pending",
"outcome": null,
"recipient": { "email": "ada@acme.com", "name": "Ada" },
"externalId": "run-42",
"deliveryStatus": "sent",
"expiresAt": 1794787200000,
"createdAt": 1789379200000
}
],
"nextCursor": null,
"hasMore": false
}
}Items in de lijst dragen dezelfde velden als requests.get minus url, answers, display,
en timeline, en elk item draagt isTest. Geef workspaceId of formId mee — geen van
beide geeft 400 VALIDATION_ERROR met reden SCOPE_REQUIRED. outcome overschrijft status
omdat alleen een voltooide aanvraag een oordeel heeft.
requests.cancel
Trek een aanvraag in behandeling in. De link stopt met werken, de ontvanger ziet een intrekkingsmelding, en er vuurt een
request.canceled-callback af.
requestIdstringrequired
requestIdstringrequiredAanvraag-id.
reasonstringoptional
reasonstringoptionalJe eigen notitie over waarom, bewaard op de aanvraag en meegestuurd in de callback.
requests.remind
Mail de ontvanger nu, zonder het herinneringsschema aan te raken. Vereist een e-mailadres van de ontvanger en een Pro- of Business-abonnement.
requestIdstringrequired
requestIdstringrequiredAanvraag-id. Moet nog in behandeling zijn, en geen testaanvraag.
Er gelden twee ondergrenzen: minstens 10 minuten tussen handmatige herinneringen, en maximaal 8 herinneringen per aanvraag in totaal,
handmatig en gepland samen. Het automatische schema blijft ongemoeid — reminderStep en reminderDueAt blijven
zoals ze waren.
requests.replayCallback
Stuur de callback die een aanvraag afvuurde bij het eindigen opnieuw — dezelfde payload, hetzelfde gebeurtenis-id, zodat een ontvanger die hem al verwerkte kan dedupliceren. Gebruik dit nadat je een kapot endpoint hebt gerepareerd.
requestIdstringrequired
requestIdstringrequiredAanvraag-id. Moet voltooid, verlopen, of geannuleerd zijn.
{
"ok": true,
"data": { "dispatchId": "kf9...", "eventId": "evt_kf9..." }
}requests.sample
Bouw een voorbeeld van een aanvraag-event voor een formulier, zonder een echte aanvraag. Het is precies de envelop die een
request_*-abonnement, aangemaakt met webhooks.create, ontvangt, dus connectors gebruiken het
voor velddetectie. Een voltooid voorbeeld draagt dezelfde voorbeeldantwoorden die submissions.sample
toont; een verlopen of geannuleerd voorbeeld draagt alleen het aanvraagblok.
formIdstringrequired
formIdstringrequiredFormulier-ID.
eventTypestringrequired
eventTypestringrequiredWelke afloop je als voorbeeld wilt opvragen, in de spelling van webhooks.create. Het type van de envelop is de
vorm met punten.
request_completedrequest_expiredrequest_canceled{
"ok": true,
"data": {
"id": "evt_example000000000000",
"type": "request.completed",
"createdAt": "2026-05-18T19:00:00.000Z",
"apiVersion": "2026-09-24",
"test": true,
"data": {
"request": {
"id": "req_example000000000000",
"externalId": "order-1234",
"status": "completed",
"language": "en",
"recipient": { "email": "recipient@example.com", "name": "Sample Recipient" },
"metadata": { "source": "sample" },
"context": {},
"createdAt": "2026-05-18T18:00:00.000Z",
"completedAt": "2026-05-18T19:00:00.000Z"
},
"form": { "id": "frm_abc123", "name": "Event Feedback", "snapshotId": "js7abc123" },
"submission": {
"id": "sub_example000000000000",
"respondentEmail": "respondent@example.com",
"submittedAt": "2026-05-18T19:00:00.000Z",
"updatedAt": null,
"editCount": 0,
"pdfUrl": null,
"language": "en"
},
"answers": { "your_email": "john@example.com" },
"display": { "your_email": "john@example.com" }
}
}
}Het aanvraagblok en de uitkomst staan gedocumenteerd op de pagina Callbacks; de
inzendingshelft op de webhooks-referentie. Voorbeeld-ids zijn de vaste
placeholders die hierboven getoond worden en test is true, zodat een ontvanger een voorbeeld van een live event
kan onderscheiden.
documents.create
Reserveer een upload voor een bestand dat je aan één ontvanger geeft via het Documentenblok van het
formulier. Bytes reizen nooit via deze API: je krijgt een presigned PUT, je uploadt, en requests.create verifieert het object voordat de
aanvraag bestaat.
formIdstringrequired
formIdstringrequiredHet formulier waarvan het Documentenblok het bestand toont. Scopet de upload naar die workspace.
namestringrequired
namestringrequiredWeergavenaam die de ontvanger ziet (1–200 tekens). Overschrijfbaar per aanvraag.
contentTypestringrequired
contentTypestringrequiredapplication/pdf of een afbeeldingstype: image/png, image/jpeg, image/webp,
image/gif, image/svg+xml, image/avif, image/bmp, image/tiff.
Office-documenten worden niet geaccepteerd.
sizenumberrequired
sizenumberrequiredExacte bytelengte. Maximaal 25 MB (26.214.400).
sha256stringoptional
sha256stringoptionalHex-samenvatting van de bytes. Wordt na upload geverifieerd indien meegegeven.
{
"ok": true,
"data": {
"id": "kn7...",
"name": "Lease contract draft",
"contentType": "application/pdf",
"size": 412000,
"uploadUrl": "https://...",
"expiresAt": 1792198800000
}
}PUT de ruwe bytes naar uploadUrl binnen het uur, met Content-Type ingesteld op het type dat je hebt
opgegeven, en verwijs dan naar het id vanuit requests.create:
{
"method": "requests.create",
"params": {
"formId": "j57...",
"documents": [
{ "documentId": "kn7...", "name": "Your lease contract" },
{ "documentId": "kn8...", "field": "attachments" }
]
}
}fieldis de veldsleutel van het Documentenblok. Optioneel wanneer het formulier precies één blok heeft; verplicht bij twee of meer.- De aangeleverde documenten van het blok blijven staan; die van jou verschijnen eronder, alleen voor deze ene ontvanger.
- Limieten: 25 MB per document, 100 MB aan documenten per aanvraag, 20 documenten getoond per blok inclusief de aangeleverde.
Eén upload kan door elk aantal aanvragen worden gerefereerd. Een upload waarnaar niemand verwijst, vervalt na verloop van tijd. Bytes tellen mee voor de opslag van de werkruimte-eigenaar totdat de laatste aanvraag die ernaar verwijst door bewaarbeleid wordt gestript.
Elke fout hier is 400 VALIDATION_ERROR met een details.reason: DOCUMENT_TYPE_NOT_ALLOWED,
DOCUMENT_TOO_LARGE, INVALID_DOCUMENT_NAME of INVALID_DOCUMENT_SHA256 van deze methode, en
DOCUMENT_NOT_FOUND, DOCUMENT_NOT_UPLOADED (je hebt de PUT overgeslagen),
DOCUMENT_INVALID, INVALID_DOCUMENT_TARGET, DOCUMENTS_TOO_LARGE of DOCUMENTS_TOO_MANY
van requests.create.
Webhooks
webhooks.list
Geeft een lijst van webhook-abonnementen voor een formulier.
formIdstringrequired
formIdstringrequiredFormulier-ID.
{
"ok": true,
"data": {
"items": [
{
"subscriptionId": "int_abc123",
"formId": "frm_abc123",
"provider": "zapier",
"targetUrl": "https://hooks.zapier.com/...",
"eventType": "submission_created",
"status": "active",
"createdAt": 1714041851000
}
],
"hasMore": false
}
}webhooks.create
Abonneer een URL op formuliergebeurtenissen: nieuwe of verlaten inzendingen, of aanvragen op het formulier die eindigen. De URL moet HTTPS gebruiken.
formIdstringrequired
formIdstringrequiredFormulier-ID.
targetUrlstringrequired
targetUrlstringrequiredHTTPS-URL om webhook-payloads naar te sturen.
providerstringrequired
providerstringrequiredBij welke tool het abonnement hoort. Het is een label voor je eigen administratie — er is geen marketplace-app om te installeren, en elke provider gedraagt zich hetzelfde.
zapiermaken8neventTypestringoptionaldefault: submission_created
eventTypestringoptionaldefault: submission_createdGebeurtenistype om op te abonneren. De drie submission_-typen leveren de inzendingspayload:
-typen leveren het bijbehorende
aanvraag-event zodra een aanvraag op het formulier op die manier eindigt, ondertekend met
het geheim van dit abonnement; testaanvragen bereiken geen enkel abonnement.submission_created een eerste inzending, submission_updated een bewerking door de respondent, en
submission_abandoned een inactief concept. De drie request_
submission_createdsubmission_updatedsubmission_abandonedrequest_completedrequest_expiredrequest_canceledidleWindowstringoptional
idleWindowstringoptionalVerplicht wanneer eventType submission_abandoned is; geweigerd voor elk ander type.
12h1d3d1wsigningSecretstringoptional
signingSecretstringoptionalOptioneel HMAC-ondertekeningsgeheim, 32–255 tekens. Indien meegegeven, dragen leveringen X-formbase-Signature. Het geheim
wordt opgeslagen maar nooit teruggegeven door de API.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "webhooks.create",
"params": {
"formId": "frm_abc123",
"targetUrl": "https://hooks.zapier.com/hooks/catch/...",
"provider": "zapier",
"eventType": "submission_created",
"signingSecret": "whsec_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
}
}'{
"ok": true,
"data": {
"subscriptionId": "int_new123",
"formId": "frm_abc123",
"provider": "zapier",
"targetUrl": "https://hooks.zapier.com/hooks/catch/...",
"eventType": "submission_created"
}
}Abonnementen op verlaten inzendingen geven de gekozen idleWindow terug, zowel van webhooks.create als van
webhooks.list. Elk ander abonnement laat dit weg.
Een aanvraagabonnement ontvangt dezelfde events als een callback, maar als een eigen levering: een
eigen event-id, een eigen handtekening, en een eigen budget van vijf pogingen, waarna het abonnement pauzeert. Een aanvraag die aangemaakt
is met een callbackUrl op een formulier met een request_completed-abonnement vuurt daarom twee keer af, één keer
naar elke ontvanger. requests.replayCallback stuurt alleen de callback opnieuw. Gebruik
requests.sample om de payload te zien voordat er een aanvraag is geëindigd.
webhooks.delete
Verwijder een webhook-abonnement.
subscriptionIdstringrequired
subscriptionIdstringrequiredAbonnements-ID uit webhooks.list of webhooks.create.
{
"ok": true,
"data": {
"subscriptionId": "int_abc123",
"deleted": true
}
}Analyses
analytics.get
Haal geaggregeerde analysecijfers op voor een formulier. Ondersteunt filters op datumbereik, apparaat, verkeersbron en land.
Analyses zijn een Pro-functie, en de regel volgt het abonnement van de eigenaar van de workspace, net als het tabblad Analyses in het dashboard. Heeft de eigenaar geen Pro, dan geeft de aanroep UPGRADE_REQUIRED terug — ook voor geschiedenis die is vastgelegd toen dat wel zo was. Een Free-lid in de workspace van een Pro-eigenaar krijgt de gegevens wel.
formIdstringrequired
formIdstringrequiredFormulier-ID.
fromnumberoptional
fromnumberoptionalBegin van het datumbereik als Unix-tijdstempel in milliseconden. Moet kleiner dan of gelijk aan to zijn wanneer beide zijn
ingesteld.
tonumberoptional
tonumberoptionalEinde van het datumbereik als Unix-tijdstempel in milliseconden. Laat beide weg voor de hele periode — period komt dan
terug als { "from": null, "to": null }.
devicestringoptionaldefault: all
devicestringoptionaldefault: allFilter op apparaattype.
alldesktopmobiletablettrafficSourcestringoptional
trafficSourcestringoptionalFilter op verkeersbron (bijv. “Direct”, “Google”).
countrystringoptional
countrystringoptionalFilter op tweeletterige landcode (bijv. “US”, “DE”).
includeEventsbooleanoptionaldefault: false
includeEventsbooleanoptionaldefault: falseGeef ook de geanonimiseerde analyticsgebeurtenissen achter de cijfers terug, voor je eigen analyse. Geen bezoekers-id’s.
Percentages zijn getallen van 0 tot 100, aantallen zijn gehele getallen, en totalEvents is het aantal ruwe gebeurtenisrijen
vóór deduplicatie naar unieke bezoekers.
{
"ok": true,
"data": {
"formId": "frm_abc123",
"period": { "from": null, "to": null },
"totalEvents": 17,
"metrics": {
"views": 7,
"uniqueVisitors": 7,
"engaged": 6,
"submissions": 4,
"engagementRate": 86,
"completionRate": 57,
"bounceRate": 14
},
"breakdown": {
"byBrowser": { "Chrome": 17 },
"byCountry": { "US": 10, "DE": 7 },
"byDevice": { "desktop": 14, "mobile": 3 },
"bySource": { "Direct": 12, "Google": 5 }
}
}
}Workspaces
workspaces.list
Geeft de workspaces weer die jouw token kan bereiken. Geen parameters.
Een API-token is gebonden aan één workspace, dus dit geeft precies die ene terug — ook als je account tot meerdere behoort.
{
"ok": true,
"data": {
"items": [
{
"id": "ws_abc123",
"name": "Acme Inc",
"createdAt": 1714041800000,
"role": "owner"
}
],
"nextCursor": null,
"hasMore": false,
"canPaginate": false
}
}workspaces.createInvite
Maak een uitnodigingslink aan voor een workspace.
workspaceIdstringrequired
workspaceIdstringrequiredWorkspace-ID.
expiresAtnumberoptional
expiresAtnumberoptionalVervaldatum als toekomstig Unix-tijdstempel in milliseconden.
maxUsesnumberoptional
maxUsesnumberoptionalMaximum aantal keren dat de uitnodiging gebruikt kan worden.
{
"ok": true,
"data": {
"id": "inv_abc123",
"workspaceId": "ws_abc123",
"code": "aBcDeFgH",
"expiresAt": null,
"maxUses": null,
"uses": 0,
"createdAt": 1714041851000
}
}workspaces.getInvite
Haal één workspace-uitnodiging op. Geeft dezelfde vorm terug als workspaces.createInvite.
inviteIdstringrequired
inviteIdstringrequiredUitnodigings-ID.
workspaces.updateInvite
Werk een bestaande workspace-uitnodiging bij. Geef minstens expiresAt of maxUses mee, anders wordt de aanroep
geweigerd. Geeft de bijgewerkte uitnodiging terug.
inviteIdstringrequired
inviteIdstringrequiredUitnodigings-ID.
expiresAtnumberoptional
expiresAtnumberoptionalNieuw vervaltijdstempel in milliseconden.
maxUsesnumberoptional
maxUsesnumberoptionalNieuw maximum aantal gebruiken.
workspaces.revokeInvite
Trek een workspace-uitnodiging permanent in.
inviteIdstringrequired
inviteIdstringrequiredUitnodigings-ID.
{
"ok": true,
"data": {
"inviteId": "inv_abc123",
"revoked": true
}
}Mappen
folders.list
Geeft een lijst van mappen in een workspace.
workspaceIdstringrequired
workspaceIdstringrequiredWorkspace-ID.
limitnumberoptionaldefault: 20
limitnumberoptionaldefault: 20Paginagrootte (1–100).
cursorstringoptional
cursorstringoptionalPaginacursor.
{
"ok": true,
"data": {
"items": [
{
"id": "fld_abc123",
"name": "Customer Feedback",
"workspaceId": "ws_abc123",
"parentId": null,
"createdAt": 1714041800000
}
],
"nextCursor": null,
"hasMore": false,
"canPaginate": false
}
}folders.create
Maak een map aan in een workspace. Idempotent — geeft de bestaande map terug als er al een map met dezelfde naam bestaat.
workspaceIdstringrequired
workspaceIdstringrequiredWorkspace-ID.
namestringrequired
namestringrequiredMapnaam (1–255 tekens).
parentIdstring | nulloptional
parentIdstring | nulloptionalBovenliggende map-ID voor nesting. Weglaten voor rootniveau.
{
"ok": true,
"data": {
"id": "fld_new123",
"name": "Customer Feedback",
"workspaceId": "ws_abc123",
"parentId": null,
"createdAt": 1714041851000,
"alreadyExisted": false
}
}folders.update
Hernoem een map of verplaats hem naar een andere bovenliggende map.
folderIdstringrequired
folderIdstringrequiredMap-ID.
namestringoptional
namestringoptionalNieuwe mapnaam (1–255 tekens).
parentIdstring | nulloptional
parentIdstring | nulloptionalNieuwe bovenliggende map. Geef null door om naar root te verplaatsen.
folders.delete
Verwijder een map en alle inhoud permanent (submappen en formulieren).
folderIdstringrequired
folderIdstringrequiredMap-ID.
Destructieve actie
Dit verwijdert alle submappen en formulieren in de map permanent. Deze actie kan niet ongedaan worden gemaakt.
{
"ok": true,
"data": {
"folderId": "fld_abc123",
"deletedFolderIds": ["fld_abc123"],
"deletedFormIds": ["frm_in_folder"],
"message": "Folder and 1 form deleted."
}
}Vertalingen
translations.listLanguages
Geeft een lijst van alle talen die zijn geconfigureerd op een formulier.
formIdstringrequired
formIdstringrequiredFormulier-ID.
{
"ok": true,
"data": {
"formId": "frm_abc123",
"items": [
{
"language": "es",
"completion": { "total": 15, "current": 12, "outdated": 2, "missing": 1, "suggested": 0 },
"lastUpdatedAt": 1714041851000
}
],
"nextCursor": null,
"hasMore": false,
"canPaginate": false
}
}translations.addLanguage
Registreer een taal op een formulier. Elke andere vertaalmethode faalt met 404 NOT_FOUND totdat je dit doet.
formIdstringrequired
formIdstringrequiredFormulier-ID.
languagestringrequired
languagestringrequiredBCP-47 taalcode (bijv. “es”, “pt-BR”).
{
"ok": true,
"data": {
"formId": "frm_abc123",
"language": "es",
"rowId": "tl_new123"
}
}translations.removeLanguage
Verwijder een taal en alle bijbehorende vertalingen van een formulier.
formIdstringrequired
formIdstringrequiredFormulier-ID.
languagestringrequired
languagestringrequiredBCP-47 taalcode.
translations.listEntries
Geeft elke bronsleutel voor één taal op een formulier weer, met zijn huidige status. Zo ontdek je de key-waarden die
translations.setEntry verwacht.
formIdstringrequired
formIdstringrequiredFormulier-ID.
languagestringrequired
languagestringrequiredBCP-47 taalcode. Moet al op het formulier staan.
{
"ok": true,
"data": {
"formId": "frm_abc123",
"language": "es",
"completion": { "total": 15, "current": 12, "outdated": 2, "missing": 1, "suggested": 0 },
"items": [
{
"key": "block_q_1.title",
"status": "current",
"value": "[{\"text\":\"Tu correo electrónico\"}]",
"sourceFragment": "[{\"text\":\"Your email\"}]",
"updatedAt": 1714041851000,
"block": { "id": "q_1", "type": "email-input", "label": "Your email" }
}
],
"hasMore": false
}
}status is missing (niets opgeslagen), outdated (de bron is sindsdien gewijzigd),
current, of suggested (een AI-suggestie klaargezet maar niet geaccepteerd). Sleutels dekken formulierinhoud (
block_<id>.) en, zodra een auteur ze heeft aangepast, de bevestigings- en herinnerings-e-mails voor de respondent (
, email.confirmation.email.reminder.*).
translations.setEntry
Stel een enkel vertaalitem in. De taal moet eerst zijn toegevoegd via translations.addLanguage.
formIdstringrequired
formIdstringrequiredFormulier-ID.
languagestringrequired
languagestringrequiredBCP-47 taalcode.
keystringrequired
keystringrequiredEen sleutel uit translations.listEntries. Bouw er geen zelf op.
valuestringrequired
valuestringrequiredHet vertaalde fragment, als JSON-string. De markstructuur ervan moet overeenkomen met het bronfragment.
curl -X POST https://api.formbase.so/api/v1 \
-H "Authorization: Bearer fb_..." \
-H "Content-Type: application/json" \
-d '{
"method": "translations.setEntry",
"params": {
"formId": "frm_abc123",
"language": "es",
"key": "block_q_1.title",
"value": "[{\"text\":\"Tu correo electrónico\"}]"
}
}'Schrijven hier is live
De API heeft geen concept-dan-publiceer-stap: een setEntry of deleteEntry bereikt respondenten onmiddellijk.
Het dashboard en de MCP-vertaaltools gebruiken wel een concept.
Geeft { formId, language, key } terug.
translations.deleteEntry
Verwijder een enkel vertaalitem, waardoor die sleutel terugvalt op de standaardtaal van het formulier. Idempotent. Verdwijnt het laatste item voor een taal, dan verdwijnt die taal uit de gepubliceerde talen van het formulier.
formIdstringrequired
formIdstringrequiredFormulier-ID.
languagestringrequired
languagestringrequiredBCP-47 taalcode.
keystringrequired
keystringrequiredTe verwijderen vertalingssleutel.
Account
me.get
Haal informatie op over de ingelogde gebruiker.
{
"ok": true,
"data": {
"id": "usr_abc123",
"email": "you@example.com",
"name": "Jane Doe"
}
}Meta
methods.list
Geeft elke methodenaam weer die deze deployment aanbiedt, gesorteerd. Het gezaghebbende antwoord wanneer deze pagina en de server niet overeenkomen.
{
"ok": true,
"data": {
"methods": [
"methods.list",
"analytics.get",
"folders.create",
"folders.delete",
"folders.list",
"folders.update",
"formSettings.get",
"formSettings.update",
"forms.create",
"forms.delete",
"forms.get",
"forms.list",
"..."
]
}
}Foutenoverzicht
Elke foutresponse heeft dezelfde vorm. De set van code-waarden op het hoogste niveau is bewust gesloten: een nieuwe faalwijze voegt nooit
een code toe, maar een reason. Vertak op code voor het HTTP-niveau-resultaat en op details.reason voor de oplossing.
{
"ok": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "No field with key \"company\" on this form.",
"details": { "reason": "UNKNOWN_FIELD_KEY", "field": "prefill.company", "validKeys": ["company_name", "contacts"] }
}
}details is aanwezig wanneer de server de oorzaak kan benoemen. Naast reason kan het ook field (de
betrokken parameter, met punten voor nesting), validKeys, validValues (de optie-waarden die een
keuzevraag accepteert), expectedType, feature (bij UPGRADE_REQUIRED), en retryAfterMs
(bij een gedrosselde aanroep) bevatten. Redenen voor het aanvraagoppervlak staan hierboven bij elke methode vermeld.
Dit zijn alle codes:
VALIDATION_ERROR400optional
VALIDATION_ERROR400optionalOngeldige of ontbrekende parameters in het verzoek.
UNAUTHORIZED401optional
UNAUTHORIZED401optionalOntbrekend of ongeldig API-token.
FORBIDDEN403optional
FORBIDDEN403optionalHet token heeft geen toegang tot de gevraagde resource.
NOT_FOUND404optional
NOT_FOUND404optionalResource bestaat niet.
METHOD_NOT_FOUND404optional
METHOD_NOT_FOUND404optionalOnbekende methodenaam. Gebruik methods.list om beschikbare methoden te bekijken.
CONFLICT409optional
CONFLICT409optionalDe resource verkeert niet in een staat die deze aanroep toelaat — een aanvraag die niet meer in behandeling is, een idempotentiesleutel hergebruikt met een andere body.
RATE_LIMITED429optional
RATE_LIMITED429optionalMeer dan 120 aanroepen per minuut op dit token, meer dan 60 requests.create-aanroepen per minuut, of te veel mislukte
authenticaties vanaf dit IP.
UPGRADE_REQUIRED402optional
UPGRADE_REQUIRED402optionalFunctie vereist een hoger abonnementsniveau, de werkruimte heeft dit maandelijkse quotum verbruikt (reden
MONTHLY_ALLOWANCE_REACHED), of een Free-account heeft zijn 10 gratis uitnodigingen verbruikt (reden
FREE_INVITATIONS_USED).
INTERNAL_ERROR500optional
INTERNAL_ERROR500optionalOnverwachte serverfout. Probeer het later opnieuw.