formbasedocs
Naar de appApp

Handleidingen · REST API

Een aanvraag versturen met de REST API

Elke tool met een HTTP-stap kan een aanvraag versturen: Pipedream, een serverless functie, een script. Deze handleiding doet het met curl, zodat je elke aanroep ziet voordat je hem in je eigen code overneemt.

Last checked


Je hebt een gepubliceerd formulier nodig. Deze handleiding gebruikt het formulier gebouwd in Een formulier bouwen met een AI-agent: bedrijfsnaam, contact-e-mailadres, btw-nummer, een ja-of-nee-vraag over betalingsvoorwaarden, en een bestandsupload. Elke methode en optie die hier wordt gebruikt, staat beschreven in API-methoden.

1. Maak een API-token aan

Open in formbase OAuth en API-sleutels in de zijbalk van de werkruimte en maak een token aan. De waarde wordt één keer getoond. Bewaar hem in een omgevingsvariabele, niet in je code:

bash
export FORMBASE_TOKEN='fb_...'

Een token bereikt alleen de ene werkruimte waarin hij is aangemaakt. Elke aanroep hieronder is een POST naar dezelfde URL met het token in de Authorization-header; de body noemt de methode en zijn parameters.

2. Zoek het formulier-id

Open het formulier in de editor. Het formulier-id is het deel van het adres na /forms/:

text
https://app.formbase.so/<workspace ID>/forms/jx75hdx8vb5hy1x85gm17nqgkn8f674g/edit

De commando’s hieronder gebruiken het formulier-id van deze handleiding. Vul je eigen id in.

3. Som de veldsleutels op

Een aanvraag vult vragen in, en de antwoorden komen terug, via veldsleutel. Vraag het formulier om zijn sleutels in plaats van ze te raden op basis van de titels:

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer $FORMBASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"method": "fields.list", "params": {"formId": "jx75hdx8vb5hy1x85gm17nqgkn8f674g"}}'

Het antwoord somt elke vraag van het gepubliceerde formulier op. Ingekort:

json
{
  "ok": true,
  "data": {
    "published": true,
    "items": [
      { "key": "company_name", "type": "text", "title": "Company name", "required": true, "prefillable": true },
      { "key": "contact_email", "type": "email", "title": "Contact email", "required": true, "prefillable": true },
      { "key": "vat_number", "type": "text", "title": "VAT number", "required": false, "prefillable": true },
      {
        "key": "do_you_accept_our_30_day_payment_terms", "type": "radio", "title": "Do you accept our 30-day payment terms?", "required": true, "prefillable": true,
        "options": [{ "key": "yes", "label": "Yes" }, { "key": "no", "label": "No" }]
      },
      { "key": "certificate_of_incorporation", "type": "file", "title": "Certificate of incorporation", "required": true, "prefillable": false }
    ],
    "hasMore": false
  }
}

Om een keuzevraag vooraf in te vullen, stuur je de key van de optie, hier “yes”, niet zijn label. Een vraag met prefillable: false, zoals de bestandsupload, kan alleen de ontvanger beantwoorden. De overige vlaggen staan uitgelegd onder fields.list.

4. Maak een testaanvraag aan

Stuur de aanvraag naar Ada Lovelace, met de bedrijfsnaam ingevuld en vergrendeld. test: true maakt er een testaanvraag van: hij mailt nooit iemand en telt nergens mee, dus je kunt deze stap zo vaak herhalen als je wilt, telkens met een nieuwe idempotencyKey.

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer $FORMBASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "method": "requests.create",
    "params": {
      "formId": "jx75hdx8vb5hy1x85gm17nqgkn8f674g",
      "recipient": { "email": "ada@acme.example", "name": "Ada Lovelace" },
      "prefill": { "company_name": "Analytical Engines Ltd" },
      "readonly": ["company_name"],
      "externalId": "supplier-2043",
      "idempotencyKey": "supplier-2043",
      "test": true
    }
  }'
  • prefill vult antwoorden in die de ontvanger nog kan wijzigen. Een sleutel in readonly is dan ook vergrendeld.

  • externalId is je eigen id voor dit stuk werk, zoals een leveranciersnummer. Hij komt terug bij elke uitlezing en callback.

  • idempotencyKey maakt een nieuwe poging veilig. Als je code dezelfde aanroep twee keer stuurt, geeft formbase de eerste aanvraag terug met deduplicated: true in plaats van een tweede aan te maken.

Het antwoord draagt het aanvraag-id en de link voor de ontvanger:

json
{
  "ok": true,
  "data": {
    "id": "m17ayhcnj9xvzkff3atek49bdd8f6872",
    "status": "pending",
    "url": "https://form.formbase.so/r/rq_...",
    "deliveryStatus": "not_requested",
    "externalId": "supplier-2043",
    "deduplicated": false,
    "createdAt": 1790539225370,
    "expiresAt": 1793131225370
  }
}

deliveryStatus: “not_requested” betekent dat formbase geen e-mail heeft verstuurd; je levert de link zelf af. Om formbase de uitnodiging en herinneringen te laten versturen, voeg je “delivery”: “email” toe, wat een Pro- of Business-abonnement vereist. Zie Uitnodigingen, herinneringen & verlopen. Staat Herinneringen versturen aan op het formulier, dan krijgt een echte aanvraag met een e-mailadres van de ontvanger nog steeds de geplande herinneringen; voeg “reminders”: [] toe om er geen te sturen.

Testaanvragen blijven uit het zicht

De pagina Aanvragen toont testaanvragen alleen wanneer je de filter Testaanvragen weergeven aanzet. Open de url zelf om hem af te ronden. Laat test weg wanneer je de echte aanvraag verstuurt.

5. Rond hem af en lees de antwoorden

Open de url in een browser. De bedrijfsnaam is ingevuld en vergrendeld; beantwoord de rest en dien in. Lees de aanvraag dan terug met zijn id:

bash
curl -X POST https://api.formbase.so/api/v1 \
  -H "Authorization: Bearer $FORMBASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"method": "requests.get", "params": {"requestId": "m17ayhcnj9xvzkff3atek49bdd8f6872"}}'

Zodra status op completed staat, bevat het antwoord twee kaarten, geordend op veldsleutel. answers is voor code: een keuzeantwoord is de sleutel van de optie, een bestandsantwoord is een lijst bestanden met downloadlink. display is voor mensen: labels en bestandsnamen.

json
"answers": {
  "company_name": "Analytical Engines Ltd",
  "do_you_accept_our_30_day_payment_terms": "yes",
  "certificate_of_incorporation": [{ "name": "certificate-of-incorporation.pdf", "type": "application/pdf", "size": 635, "url": "https://api.formbase.so/api/storage/..." }]
},
"display": {
  "company_name": "Analytical Engines Ltd",
  "do_you_accept_our_30_day_payment_terms": "Yes",
  "certificate_of_incorporation": "certificate-of-incorporation.pdf"
}

Keer op keer vragen tot de status verandert, werkt voor een test, maar niet in productie. Geef de aanvraag een callbackUrl mee en formbase roept je aan zodra hij eindigt; de volgende handleiding zet dat op.

Vervolgens