formbasedocs
Naar de appApp

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

  • params mag worden weggelaten; het valt terug op {}. Een onbekende methode geeft 404 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 ook canPaginate terug, wat false is wanneer hasMore true is maar geen cursor verder kan (fuzzy search). Geef nextCursor terug als cursor. limit is 1–100, standaard 20 — behalve requests.list, waarvan de standaard 25 is.

  • Rate limits. 120 aanroepen per minuut per token, gedeeld met de MCP-server; requests.create heeft zijn eigen limiet van 60 per minuut. Mislukte authenticatie wordt apart beperkt, 30 per 15 minuten per IP, waarna foute tokens RATE_LIMITED zien in plaats van UNAUTHORIZED.

  • 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.

POSThttps://api.formbase.so/api/v1
Parameters5
workspaceIdstringrequired

Workspace-ID.

folderIdstring | nulloptional

Filter op map. Geef null door voor formulieren op rootniveau. Weglaten om alles te tonen.

querystringoptional

Fuzzy zoeken op naam. Resultaten zijn begrensd op limit; geen cursorpaginering.

limitnumberoptionaldefault: 20

Paginagrootte (1–100).

cursorstringoptional

Paginacursor van een vorige response.

bash
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" }
  }'
200Geslaagd
json
{
  "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
  }
}
400Ontbrekende workspaceId
401Ongeldig of ontbrekend API-token
429Limiet voor aanvragen overschreden

forms.get

Haalt volledige details op van een enkel formulier, inclusief vragen, omslag, logo en een voorbeeld-URL.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-ID.

bash
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" }
  }'
200Geslaagd
json
{
  "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..."
  }
}
400Ontbrekende formId
404Formulier niet gevonden

forms.create

Maak een nieuw leeg formulier aan. Geeft het formulier en een voorbeeld-URL terug.

POSThttps://api.formbase.so/api/v1
Parameters3
namestringrequired

Formuliernaam (1–255 tekens).

workspaceIdstringrequired

Workspace-ID.

folderIdstringoptional

Plaats het formulier in een map. Weglaten om op workspace-rootniveau aan te maken.

200Formulier aangemaakt
json
{
  "ok": true,
  "data": {
    "id": "frm_new123",
    "name": "Contact",
    "workspaceId": "ws_abc123",
    "folderId": null,
    "isPublished": false,
    "createdAt": 1714041851000,
    "previewUrl": "https://formbase.so/preview/abc..."
  }
}
400Ontbrekende naam of workspaceId
401Ongeldig of ontbrekend API-token

forms.update

Werk formuliermetadata bij: naam, map, emoji, omslag of logo. Werkt de formulierinhoud niet bij (gebruik daarvoor de editor-tools).

POSThttps://api.formbase.so/api/v1
Parameters6
formIdstringrequired

Formulier-ID.

namestringoptional

Nieuwe formuliernaam (1–255 tekens).

folderIdstring | nulloptional

Verplaats het formulier naar een map. Geef null door om naar workspace-root te verplaatsen.

emojistring | nulloptional

Formulier-emoji (max. 10 tekens). Geef null door om te wissen.

coverobjectoptional

Omslag. {"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

Logo. {"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.

bash
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": "📋"
    }
  }'
200Formulier bijgewerkt
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-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.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-ID.

forms.delete

Verplaats een formulier naar de prullenbak. De actieve deellinks ervan worden ingetrokken, zodat hun openbare URL’s stoppen met werken.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-ID.

forms.restore

Herstel een formulier uit de prullenbak.

POSThttps://api.formbase.so/api/v1
Parameters2
formIdstringrequired

Formulier-ID.

folderIdstring | nulloptional

Waar 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.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-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.

POSThttps://api.formbase.so/api/v1
Parameters8
formIdstringrequired

Formulier-ID.

Accessgroupoptional

language (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

notifyOnSubmission, notificationEmails (array), selfNotificationSubject, selfNotificationEmailBody, pdfGenerationEnabled, showViewSubmissionButton. E-mails aan de eigenaar zijn niet vertaalbaar — schrijf ze in de taal die je wilt.

Respondent notificationsgroupoptional

respondentNotificationEnabled, respondentNotificationTo, het veld-id van een e-mailvraag of null, respondentNotificationSubject, respondentNotificationBody, respondentNotificationPdfEnabled.

Remindersgroupoptional

respondentReminderEnabled, 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

redirectUrl (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

draftRetentionDays 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

Een 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.

POSThttps://api.formbase.so/api/v1
Parameters5
formIdstringrequired

Formulier-ID.

includeDraftsbooleanoptionaldefault: true

Reacties meenemen die zijn gestart maar nooit ingediend. Concepten zijn een Pro-functie: op Free worden alleen voltooide inzendingen weergegeven.

translationLanguagestringoptional

Voeg 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

Paginagrootte (1–100).

cursorstringoptional

Pagineringscursor uit een vorige response.

200Succes
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters2
formIdstringrequired

Formulier-ID.

submissionIdstringrequired

Inzending-ID. Moet bij dat formulier horen en voltooid zijn.

200Succes
json
{
  "ok": true,
  "data": {
    "url": "https://api.formbase.so/api/storage/...",
    "filename": "formbase-submission-sub_xyz789.pdf",
    "contentType": "application/pdf",
    "byteLength": 148213
  }
}
404Geen bewaarde PDF voor een Zapier-integratie op deze inzending

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.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-ID.

200Voorbeeld gegenereerd
json
{
  "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.

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.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-id. Een formulier dat nog nooit is gepubliceerd, heeft nog geen veldsleutels en geeft published: false terug, zonder items.

bash
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..." }
  }'
200Succes
json
{
  "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.

400Ontbrekende formId
404Formulier niet gevonden

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.

POSThttps://api.formbase.so/api/v1
Parameters16
formIdstringrequired

Het gepubliceerde formulier om toe te wijzen.

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

Beginantwoorden per veldsleutel. De ontvanger ziet ze en kan ze wijzigen.

readonlystring[]optional

Vooraf 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

Waarden 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

Je eigen administratie. Bereikt het formulier nooit; komt terug in callbacks en uitlezingen.

languagestringoptional

Een van de gepubliceerde talen van het formulier. Standaard de eigen standaardtaal van het formulier.

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

Overschrijft het herinneringsschema van het formulier voor deze aanvraag. Een lege array zet herinneringen uit.

expiresAtnumberoptional

Epoch-milliseconden. Standaard 30 dagen; 365 dagen is het maximum.

callbackUrlstringoptional

Waar formbase de callback naartoe post zodra de aanvraag eindigt. Alleen HTTPS, en de host moet naar een openbaar adres wijzen.

externalIdstringoptional

Je eigen id voor deze aanvraag. Filterbaar in requests.list.

idempotencyKeystringoptional

Herhalen met dezelfde body geeft de oorspronkelijke aanvraag terug met deduplicated: true. Een andere body wordt geweigerd. Sleutels blijven 30 dagen geldig.

domainIdstringoptional

Genereer de link op een van je aangepaste domeinen. Alleen REST API.

documentsobject[]optional

[{ documentId, field?, name? }] — bestanden voor deze ene ontvanger, eerst geüpload met documents.create.

testbooleanoptionaldefault: false

Een 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.

bash
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"
    }
  }'
200Succes
json
{
  "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
  }
}

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.

400Onbekende veldsleutel, verkeerde waardevorm, of een vergrendelde sleutel die niet vooraf is ingevuld
400Formulier niet gepubliceerd (FORM_NOT_PUBLISHED), of callbackUrl niet toegestaan (CALLBACK_URL_NOT_ALLOWED)
402Maandelijks quotum op (MONTHLY_ALLOWANCE_REACHED), gratis uitnodigingen op (FREE_INVITATIONS_USED), of herinneringen onder Pro
404Formulier niet gevonden
409Idempotentiesleutel hergebruikt met een andere body (IDEMPOTENCY_CONFLICT)
429Meer dan 60 requests.create-aanroepen per minuut op dit token, of de 11e testaanvraag van een dag voor een Free-workspace (TEST_REQUEST_LIMIT_REACHED)

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.

POSThttps://api.formbase.so/api/v1
Parameters1
requestIdstringrequired

Aanvraag-id.

200Succes
json
{
  "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.

404Aanvraag niet gevonden (REQUEST_NOT_FOUND)

requests.list

Geef aanvragen in een werkruimte of van één formulier terug, nieuwste eerst. Testaanvragen worden weggelaten tenzij je erom vraagt.

POSThttps://api.formbase.so/api/v1
Parameters8
workspaceIdstringoptional

Beperk tot een werkruimte. Geef dit of formId mee.

formIdstringoptional

Beperk tot één formulier.

statusstringoptional

pending, completed, expired, of canceled.

outcomestringoptional

approve, decline, of changes. Impliceert alleen voltooide aanvragen.

externalIdstringoptional

Je eigen id, om de aanvraag te vinden die een run heeft aangemaakt.

includeTestbooleanoptionaldefault: false

Neem aanvragen op die zijn aangemaakt met test: true.

limitnumberoptionaldefault: 25

Paginagrootte (1–100).

cursorstringoptional

Paginatiecursor van een vorige respons.

200Succes
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters2
requestIdstringrequired

Aanvraag-id.

reasonstringoptional

Je eigen notitie over waarom, bewaard op de aanvraag en meegestuurd in de callback.

200De geannuleerde aanvraag
409Al voltooid, verlopen, of geannuleerd (REQUEST_NOT_PENDING)

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.

POSThttps://api.formbase.so/api/v1
Parameters1
requestIdstringrequired

Aanvraag-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.

200De aanvraag, met remindersSent opgehoogd
400Geen e-mailadres van de ontvanger op de aanvraag (RECIPIENT_EMAIL_REQUIRED)
402Herinneringen voor aanvragen vereisen Pro of Business (UPGRADE_REQUIRED)
409Niet in behandeling (REQUEST_NOT_PENDING), te vroeg (REMINDER_TOO_SOON, met details.retryAfterMs), limiet bereikt (REMINDER_CAP_REACHED), of een testaanvraag (TEST_REQUEST)

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.

POSThttps://api.formbase.so/api/v1
Parameters1
requestIdstringrequired

Aanvraag-id. Moet voltooid, verlopen, of geannuleerd zijn.

200Succes
json
{
  "ok": true,
  "data": { "dispatchId": "kf9...", "eventId": "evt_kf9..." }
}
409Nog in behandeling, dus er is geen definitieve callback om opnieuw te versturen (REQUEST_NOT_TERMINAL)
409De aanvraag is aangemaakt zonder callbackUrl (NO_CALLBACK_TO_REPLAY)

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.

POSThttps://api.formbase.so/api/v1
Parameters2
formIdstringrequired

Formulier-ID.

eventTypestringrequired

Welke 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
200Voorbeeld gegenereerd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters5
formIdstringrequired

Het formulier waarvan het Documentenblok het bestand toont. Scopet de upload naar die workspace.

namestringrequired

Weergavenaam die de ontvanger ziet (1–200 tekens). Overschrijfbaar per aanvraag.

contentTypestringrequired

application/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

Exacte bytelengte. Maximaal 25 MB (26.214.400).

sha256stringoptional

Hex-samenvatting van de bytes. Wordt na upload geverifieerd indien meegegeven.

200Upload gereserveerd
json
{
  "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:

json
{
  "method": "requests.create",
  "params": {
    "formId": "j57...",
    "documents": [
      { "documentId": "kn7...", "name": "Your lease contract" },
      { "documentId": "kn8...", "field": "attachments" }
    ]
  }
}
  • field is 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.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-ID.

200Geslaagd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters6
formIdstringrequired

Formulier-ID.

targetUrlstringrequired

HTTPS-URL om webhook-payloads naar te sturen.

providerstringrequired

Bij 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.

zapiermaken8n
eventTypestringoptionaldefault: submission_created

Gebeurtenistype om op te abonneren. De drie submission_-typen leveren de inzendingspayload: submission_created een eerste inzending, submission_updated een bewerking door de respondent, en submission_abandoned een inactief concept. De drie request_-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_createdsubmission_updatedsubmission_abandonedrequest_completedrequest_expiredrequest_canceled
idleWindowstringoptional

Verplicht wanneer eventType submission_abandoned is; geweigerd voor elk ander type.

12h1d3d1w
signingSecretstringoptional

Optioneel HMAC-ondertekeningsgeheim, 32–255 tekens. Indien meegegeven, dragen leveringen X-formbase-Signature. Het geheim wordt opgeslagen maar nooit teruggegeven door de API.

bash
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"
    }
  }'
200Webhook aangemaakt
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters1
subscriptionIdstringrequired

Abonnements-ID uit webhooks.list of webhooks.create.

200Webhook verwijderd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters7
formIdstringrequired

Formulier-ID.

fromnumberoptional

Begin van het datumbereik als Unix-tijdstempel in milliseconden. Moet kleiner dan of gelijk aan to zijn wanneer beide zijn ingesteld.

tonumberoptional

Einde 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

Filter op apparaattype.

alldesktopmobiletablet
trafficSourcestringoptional

Filter op verkeersbron (bijv. “Direct”, “Google”).

countrystringoptional

Filter op tweeletterige landcode (bijv. “US”, “DE”).

includeEventsbooleanoptionaldefault: false

Geef 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.

200Geslaagd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters0
200Geslaagd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters3
workspaceIdstringrequired

Workspace-ID.

expiresAtnumberoptional

Vervaldatum als toekomstig Unix-tijdstempel in milliseconden.

maxUsesnumberoptional

Maximum aantal keren dat de uitnodiging gebruikt kan worden.

200Uitnodiging aangemaakt
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters1
inviteIdstringrequired

Uitnodigings-ID.

404Uitnodiging niet gevonden

workspaces.updateInvite

Werk een bestaande workspace-uitnodiging bij. Geef minstens expiresAt of maxUses mee, anders wordt de aanroep geweigerd. Geeft de bijgewerkte uitnodiging terug.

POSThttps://api.formbase.so/api/v1
Parameters3
inviteIdstringrequired

Uitnodigings-ID.

expiresAtnumberoptional

Nieuw vervaltijdstempel in milliseconden.

maxUsesnumberoptional

Nieuw maximum aantal gebruiken.

workspaces.revokeInvite

Trek een workspace-uitnodiging permanent in.

POSThttps://api.formbase.so/api/v1
Parameters1
inviteIdstringrequired

Uitnodigings-ID.

200Uitnodiging ingetrokken
json
{
  "ok": true,
  "data": {
    "inviteId": "inv_abc123",
    "revoked": true
  }
}

Mappen

folders.list

Geeft een lijst van mappen in een workspace.

POSThttps://api.formbase.so/api/v1
Parameters3
workspaceIdstringrequired

Workspace-ID.

limitnumberoptionaldefault: 20

Paginagrootte (1–100).

cursorstringoptional

Paginacursor.

200Geslaagd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters3
workspaceIdstringrequired

Workspace-ID.

namestringrequired

Mapnaam (1–255 tekens).

parentIdstring | nulloptional

Bovenliggende map-ID voor nesting. Weglaten voor rootniveau.

200Map aangemaakt
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters3
folderIdstringrequired

Map-ID.

namestringoptional

Nieuwe mapnaam (1–255 tekens).

parentIdstring | nulloptional

Nieuwe bovenliggende map. Geef null door om naar root te verplaatsen.

folders.delete

Verwijder een map en alle inhoud permanent (submappen en formulieren).

POSThttps://api.formbase.so/api/v1
Parameters1
folderIdstringrequired

Map-ID.

200Map verwijderd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters1
formIdstringrequired

Formulier-ID.

200Geslaagd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters2
formIdstringrequired

Formulier-ID.

languagestringrequired

BCP-47 taalcode (bijv. “es”, “pt-BR”).

200Taal toegevoegd
json
{
  "ok": true,
  "data": {
    "formId": "frm_abc123",
    "language": "es",
    "rowId": "tl_new123"
  }
}

translations.removeLanguage

Verwijder een taal en alle bijbehorende vertalingen van een formulier.

POSThttps://api.formbase.so/api/v1
Parameters2
formIdstringrequired

Formulier-ID.

languagestringrequired

BCP-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.

POSThttps://api.formbase.so/api/v1
Parameters2
formIdstringrequired

Formulier-ID.

languagestringrequired

BCP-47 taalcode. Moet al op het formulier staan.

200Succes
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters4
formIdstringrequired

Formulier-ID.

languagestringrequired

BCP-47 taalcode.

keystringrequired

Een sleutel uit translations.listEntries. Bouw er geen zelf op.

valuestringrequired

Het vertaalde fragment, als JSON-string. De markstructuur ervan moet overeenkomen met het bronfragment.

bash
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\"}]"
    }
  }'

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.

POSThttps://api.formbase.so/api/v1
Parameters3
formIdstringrequired

Formulier-ID.

languagestringrequired

BCP-47 taalcode.

keystringrequired

Te verwijderen vertalingssleutel.

Account

me.get

Haal informatie op over de ingelogde gebruiker.

POSThttps://api.formbase.so/api/v1
Parameters0
200Geslaagd
json
{
  "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.

POSThttps://api.formbase.so/api/v1
Parameters0
200Geslaagd
json
{
  "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.

error response
json
{
  "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:

Foutcodes
VALIDATION_ERROR400optional

Ongeldige of ontbrekende parameters in het verzoek.

UNAUTHORIZED401optional

Ontbrekend of ongeldig API-token.

FORBIDDEN403optional

Het token heeft geen toegang tot de gevraagde resource.

NOT_FOUND404optional

Resource bestaat niet.

METHOD_NOT_FOUND404optional

Onbekende methodenaam. Gebruik methods.list om beschikbare methoden te bekijken.

CONFLICT409optional

De 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

Meer 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

Functie 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

Onverwachte serverfout. Probeer het later opnieuw.

Volgende stappen