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.

HeaderBeskrivelse
Content-Type: application/jsonBodyen er altid JSON.
User-Agent: Fillio Webhooks/1.0Identificerer afsenderen som Fillio, hvilket er nyttigt, når ét endpoint lytter til flere tjenester.
X-Fillio-Event: FORM_RESPONSENavnet på hændelsen. FORM_RESPONSE er den eneste værdi, Fillio sender i dag.
X-Fillio-Event-IdEn 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
      }
    ]
  }
}
EgenskabBeskrivelse
eventIdEt unikt ID for denne levering.
eventTypeAltid FORM_RESPONSE.
createdAtHvornår svaret blev indsendt, som et ISO 8601-tidsstempel i UTC.
data.responseIdID'et på det gemte svar.
data.formIdFormularens ID, det samme, som optræder i dens offentlige link.
data.formNameFormularens 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.

EgenskabBeskrivelse
keySpørgsmålets permanente ID. Det overlever enhver ændring af ordlyden, så match på det frem for på etiketten.
labelSpørgsmålet, som det er skrevet i editoren.
typeSpørgsmålstypen, taget fra listen herunder.
valueSvaret, i den form det pågældende spørgsmål gemmer det.
optionsKun 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.

TypeSpørgsmålVærdi
INPUT_TEXTKort svarTekst
TEXTAREALangt svarTekst
INPUT_EMAILE-mailTekst
INPUT_PHONE_NUMBERTelefonnummerTekst
INPUT_NUMBERTalTallet som tekst, præcis som det blev skrevet
INPUT_LINKLinkTekst
INPUT_DATEDatoEn dato, som YYYY-MM-DD
INPUT_TIMETidEt klokkeslæt, som HH:MM på et 24-timers ur
DROPDOWNRullemenuÉt muligheds-ID
MULTIPLE_CHOICERadioknapÉt muligheds-ID
CHECKBOXESAfkrydsningsfeltEt array af muligheds-ID'er
MULTI_SELECTFlervalgEt array af muligheds-ID'er
RATINGStjernebedømmelseEt tal
LINEAR_SCALELineær skalaEt tal
RANKINGRangordningEt array af muligheds-ID'er, i respondentens rækkefølge
FILE_UPLOADFiluploadEt downloadlink
SIGNATUREUnderskriftEn 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.

Tip

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.