Webhooks
Send hver indsendelse videre til din egen adresse som JSON i samme øjeblik, den ankommer.
Én POST per svar
Sendes, så snart svaret er gemt, uden at lade respondenten vente.
En stabil JSON-form
Offentlige typenavne og permanente felt-ID'er, så en omdøbning af et spørgsmål aldrig ødelægger din kode.
10 sekunder, ét forsøg
Fillio venter ti sekunder på dit endpoint og prøver ikke igen bagefter.
Sådan slår du en webhook til
Åbn formularen, gå til fanen Indstillinger og slå Webhook til. Indsæt den adresse, der skal modtage indsendelserne; Fillio gemmer den et øjeblik efter, du holder op med at skrive, og bekræfter det på skærmen. Hver formular har én adresse, og slår du kontakten fra igen, ryddes den.
Adressen skal være HTTPS
Fillio kalder kun adresser, der begynder med https://. En http://-adresse accepteres af indstillingsfeltet, men bliver aldrig kaldt, så en webhook, der ser ud til at være gemt, leverer i stilhed ingenting.
Adresser, der peger ind i et privat netværk, afvises også: enhver vært på 10.x, 127.x, 169.254.x, 172.16-31.x eller 192.168.x, enhver IPv6-adresse og ethvert navn, der er localhost eller ender på .local eller .internal. Dit endpoint skal kunne nås fra det offentlige internet.
Forespørgslen
En POST med en JSON-body. Fire headers følger med.
| Header | Beskrivelse |
|---|---|
| Content-Type: application/json | Bodyen er altid JSON. |
| User-Agent: Fillio Webhooks/1.0 | Identificerer afsenderen som Fillio, hvilket er nyttigt, når ét endpoint lytter til flere tjenester. |
| X-Fillio-Event: FORM_RESPONSE | Navnet på hændelsen. FORM_RESPONSE er den eneste værdi, Fillio sender i dag. |
| X-Fillio-Event-Id | En ny UUID for denne levering, gentaget som eventId i bodyen. |
Payloaden
En konvolut, der beskriver hændelsen, og et data-objekt, der beskriver svaret.
{
"eventId": "8f2c1d7a-4b09-4e5c-9a13-6d0f8b2e77c4",
"eventType": "FORM_RESPONSE",
"createdAt": "2026-08-26T09:14:22.481Z",
"data": {
"responseId": "Qh3Rk9wZm1sVtY7cN2xP",
"formId": "7bTn4Kq2Wx",
"formName": "Workshop signup",
"createdAt": "2026-08-26T09:14:22.481Z",
"fields": [
{
"key": "V1StGXR8_Z5jdHi6B-myT",
"label": "Full name",
"type": "INPUT_TEXT",
"value": "Mira Kaya"
},
{
"key": "kM4pQz7LxAe2Rn0BsTvUw",
"label": "Which session?",
"type": "MULTIPLE_CHOICE",
"value": "c9XbNf3JdQ",
"options": [
{ "id": "c9XbNf3JdQ", "text": "Morning" },
{ "id": "eR2mYt8KpL", "text": "Afternoon" }
]
},
{
"key": "zA6cWn1FyH4tXd9QrLbEs",
"label": "How likely are you to recommend us?",
"type": "LINEAR_SCALE",
"value": 9
}
]
}
}| Egenskab | Beskrivelse |
|---|---|
| eventId | Et unikt ID for denne levering. |
| eventType | Altid FORM_RESPONSE. |
| createdAt | Hvornår svaret blev indsendt, som et ISO 8601-tidsstempel i UTC. |
| data.responseId | ID'et på det gemte svar. |
| data.formId | Formularens ID, det samme, som optræder i dens offentlige link. |
| data.formName | Formularens titel som ren tekst, uden formatering. |
| data.fields | Én post per besvaret spørgsmål. |
Inde i fields
Hver post har fire egenskaber, og et spørgsmål med muligheder har en femte.
| Egenskab | Beskrivelse |
|---|---|
| key | Spørgsmålets permanente ID. Det overlever enhver ændring af ordlyden, så match på det frem for på etiketten. |
| label | Spørgsmålet, som det er skrevet i editoren. |
| type | Spørgsmålstypen, taget fra listen herunder. |
| value | Svaret, i den form det pågældende spørgsmål gemmer det. |
| options | Kun på spørgsmål med muligheder: hver muligheds ID og tekst, så du kan oversætte et svar tilbage til en etiket. |
Kun besvarede spørgsmål kommer med
Et spørgsmål, respondenten ikke rørte, mangler helt i arrayet frem for at blive sendt som en tom værdi, og et spørgsmål, der er skjult af betinget logik, optræder slet ikke. Slå hvert svar op på dets key i stedet for at stole på placering eller på et fast antal poster.
Valgsvar indeholder ID'er, ikke etiketter
Et svar fra en rullemenu eller en radioknap er den valgte muligheds ID, og et svar fra afkrydsningsfelter, flervalg eller rangordning er et array af muligheds-ID'er. Slå dem op i options-listen på den samme post. Et rangordningssvar bevarer den rækkefølge, respondenten satte elementerne i.
Muligheden Andet
Når en respondent skriver i et Andet-felt, er værdien ikke et muligheds-ID, men teksten __OTHER__: efterfulgt af det, de skrev. Fjern det præfiks for at læse svaret.
"value": "__OTHER__:Heard about it from a friend"Filer og underskrifter
Et filupload-svar er et downloadlink til filen i Fillios lager. Et underskriftssvar er en base64-PNG som data-URL, som du kan gemme eller vise direkte.
Felttyper
Typen er et stabilt offentligt navn, så en ændring inde i Fillio aldrig når din integration. Alt, Fillio ikke kan mappe, ankommer som INPUT_TEXT.
| Type | Spørgsmål | Værdi |
|---|---|---|
| INPUT_TEXT | Kort svar | Tekst |
| TEXTAREA | Langt svar | Tekst |
| INPUT_EMAIL | Tekst | |
| INPUT_PHONE_NUMBER | Telefonnummer | Tekst |
| INPUT_NUMBER | Tal | Tallet som tekst, præcis som det blev skrevet |
| INPUT_LINK | Link | Tekst |
| INPUT_DATE | Dato | En dato, som YYYY-MM-DD |
| INPUT_TIME | Tid | Et klokkeslæt, som HH:MM på et 24-timers ur |
| DROPDOWN | Rullemenu | Ét muligheds-ID |
| MULTIPLE_CHOICE | Radioknap | Ét muligheds-ID |
| CHECKBOXES | Afkrydsningsfelt | Et array af muligheds-ID'er |
| MULTI_SELECT | Flervalg | Et array af muligheds-ID'er |
| RATING | Stjernebedømmelse | Et tal |
| LINEAR_SCALE | Lineær skala | Et tal |
| RANKING | Rangordning | Et array af muligheds-ID'er, i respondentens rækkefølge |
| FILE_UPLOAD | Filupload | Et downloadlink |
| SIGNATURE | Underskrift | En base64-PNG som data-URL |
Hvis dit endpoint ikke svarer
Fillio venter ti sekunder. En timeout, en forbindelsesfejl eller enhver status uden for 2xx-området tæller som en mislykket levering, og dermed er det slut: der er intet nyt forsøg og ingen kø at afspille fra.
Selve svaret påvirkes aldrig. Det gemmes, før forespørgslen sendes, og bliver i dit dashboard, uanset hvad dit endpoint gør, så dashboardet forbliver den fuldstændige optegnelse, selv hvis en levering går tabt.
Der er ingen signatur
Fillio signerer ikke forespørgslen og sender ingen delt hemmelighed, så bodyen alene beviser ikke, hvor den kommer fra. Skal dit endpoint være sikkert på det, så giv det en adresse, kun du kender: en lang sti eller query-streng, ingen kan gætte. Behandl alt, der ankommer andre steder, som utroværdigt.
Hver levering har sit eget hændelses-ID, både i headeren X-Fillio-Event-Id og i bodyen. At notere dem, du allerede har håndteret, er den enkleste måde at gøre dit endpoint sikkert at kalde to gange.
Peg webhooken mod et vilkårligt endpoint, der viser forespørgsler, og indsend din egen formular én gang. Så ser du præcis den payload, din formular producerer, med dine egne felt-ID'er i. Det er den hurtigste vej til at skrive mapningen i din ende.