Webhooks
Skicka varje inskickat svar till en adress du väljer själv, som JSON, i samma stund det kommer in.
En POST per svar
Skickas så fort svaret har sparats, utan att respondenten behöver vänta.
En stabil JSON-struktur
Publika typnamn och permanenta fält-ID:n, så att en omdöpt fråga aldrig bryter din kod.
10 sekunder, ett försök
Fillio väntar tio sekunder på din endpoint och försöker inte igen efteråt.
Slå på en webhook
Öppna formuläret, gå till fliken Inställningar och slå på Webhook. Klistra in adressen som ska ta emot svaren; Fillio sparar den en stund efter att du slutat skriva och bekräftar den på skärmen. Varje formulär bär en adress, och att slå av reglaget igen rensar den.
Adressen måste vara HTTPS
Fillio anropar bara adresser som börjar med https://. En http://-adress accepteras av inställningsfältet men anropas aldrig, så en webhook som ser ut att vara sparad levererar i tysthet ingenting.
Adresser som pekar in i ett privat nätverk avvisas också: alla värdar på 10.x, 127.x, 169.254.x, 172.16-31.x eller 192.168.x, alla IPv6-adresser, och alla namn som är localhost eller slutar på .local eller .internal. Din endpoint måste vara nåbar från det öppna internet.
Anropet
En POST med en JSON-kropp. Fyra headers följer med.
| Header | Beskrivning |
|---|---|
| Content-Type: application/json | Kroppen är alltid JSON. |
| User-Agent: Fillio Webhooks/1.0 | Identifierar anroparen som Fillio, vilket är användbart när en endpoint lyssnar på flera tjänster. |
| X-Fillio-Event: FORM_RESPONSE | Händelsens namn. FORM_RESPONSE är det enda värde Fillio skickar i dag. |
| X-Fillio-Event-Id | Ett nytt UUID för den här leveransen, upprepat som eventId i kroppen. |
Nyttolasten
Ett kuvert som beskriver händelsen, och ett data-objekt som 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
}
]
}
}| Egenskap | Beskrivning |
|---|---|
| eventId | Ett unikt ID för den här leveransen. |
| eventType | Alltid FORM_RESPONSE. |
| createdAt | När svaret skickades in, som en ISO 8601-tidsstämpel i UTC. |
| data.responseId | ID:t för det sparade svaret. |
| data.formId | Formulärets ID, samma som förekommer i dess publika länk. |
| data.formName | Formulärets titel som ren text, utan formatering. |
| data.fields | En post per besvarad fråga. |
Inuti fields
Varje post bär fyra egenskaper, och en fråga med alternativ bär en femte.
| Egenskap | Beskrivning |
|---|---|
| key | Frågans permanenta ID. Det överlever varje ändring av formuleringen, så matcha på det i stället för på etiketten. |
| label | Frågan så som den är skriven i redigeraren. |
| type | Frågetypen, hämtad från listan nedan. |
| value | Svaret, i den form frågan sparar det. |
| options | Bara på frågor med alternativ: varje alternativs ID och text, så att du kan omvandla ett svar tillbaka till en etikett. |
Bara besvarade frågor kommer med
En fråga respondenten lämnade orörd saknas i listan i stället för att skickas som ett tomt värde, och en fråga som dolts av villkorslogik dyker aldrig upp alls. Slå upp varje svar på dess key i stället för att förlita dig på position eller på ett fast antal poster.
Valsvar bär ID:n, inte etiketter
Ett svar på en rullgardinsmeny eller ett flerval är det valda alternativets ID, och ett svar på kryssrutor, flervalslista eller rangordning är en lista med alternativ-ID:n. Lös upp dem mot options-listan i samma post. Ett rangordningssvar behåller ordningen respondenten satte objekten i.
Alternativet Övrigt
När en respondent skriver i en Övrigt-ruta är värdet inte ett alternativ-ID utan texten __OTHER__: följd av det de skrev. Ta bort det prefixet för att läsa svaret.
"value": "__OTHER__:Heard about it from a friend"Filer och signaturer
Ett svar på en filuppladdning är en nedladdningslänk till filen i Fillios lagring. Ett signatursvar är en base64-PNG som data-URL, som du kan spara eller visa direkt.
Fälttyper
Typen är ett stabilt publikt namn, så en ändring inuti Fillio når aldrig din integration. Allt Fillio inte kan mappa kommer fram som INPUT_TEXT.
| Typ | Fråga | Värde |
|---|---|---|
| INPUT_TEXT | Kort svar | Text |
| TEXTAREA | Långt svar | Text |
| INPUT_EMAIL | E-post | Text |
| INPUT_PHONE_NUMBER | Telefonnummer | Text |
| INPUT_NUMBER | Nummer | Talet som text, exakt som det skrevs |
| INPUT_LINK | Länk | Text |
| INPUT_DATE | Datum | Ett datum, som YYYY-MM-DD |
| INPUT_TIME | Tid | En tid, som HH:MM på en 24-timmarsklocka |
| DROPDOWN | Rullgardinsmeny | Ett alternativ-ID |
| MULTIPLE_CHOICE | Radioknapp | Ett alternativ-ID |
| CHECKBOXES | Kryssruta | En lista med alternativ-ID:n |
| MULTI_SELECT | Flerval | En lista med alternativ-ID:n |
| RATING | Stjärnbetyg | Ett tal |
| LINEAR_SCALE | Linjär skala | Ett tal |
| RANKING | Rangordning | En lista med alternativ-ID:n, i respondentens ordning |
| FILE_UPLOAD | Filuppladdning | En nedladdningslänk |
| SIGNATURE | Signatur | En base64-PNG som data-URL |
Om din endpoint inte svarar
Fillio väntar tio sekunder. En timeout, ett anslutningsfel eller en status utanför 2xx-intervallet räknas som en misslyckad leverans, och där tar det slut: det finns inget nytt försök och ingen kö att spela upp från.
Själva svaret påverkas aldrig. Det sparas innan anropet görs och ligger kvar i din kontrollpanel oavsett vad din endpoint gör, så kontrollpanelen förblir det fullständiga registret även om en leverans går förlorad.
Det finns ingen signatur
Fillio signerar inte anropet och skickar ingen delad hemlighet, så kroppen i sig bevisar inte varifrån den kom. Om din endpoint måste vara säker, ge den en adress bara du känner till: en lång, ogissbar sökväg eller frågesträng. Betrakta allt som kommer in någon annanstans som opålitligt.
Varje leverans bär sitt eget händelse-ID, både i headern X-Fillio-Event-Id och i kroppen. Att anteckna vilka du redan har hanterat är det enklaste sättet att göra din endpoint säker att anropa två gånger.
Peka webhooken mot vilken tjänst som helst som visar inkommande anrop och skicka in ditt eget formulär en gång. Du ser exakt den nyttolast ditt formulär producerar, med dina egna fält-ID:n i. Det är det snabbaste sättet att skriva mappningen på din sida.