Webhook-uri

Trimiteți fiecare răspuns la o adresă a dvs., ca JSON, în clipa în care sosește.

Un POST pentru fiecare răspuns

Trimis imediat ce răspunsul este stocat, fără să îl țină pe respondent în așteptare.

O structură JSON stabilă

Nume publice de tipuri și ID-uri permanente de câmpuri, așa că redenumirea unei întrebări nu vă strică niciodată codul.

10 secunde, o singură încercare

Fillio așteaptă zece secunde răspunsul endpointului dvs. și nu mai încearcă a doua oară.

Activarea unui webhook

Deschideți formularul, mergeți la fila Setări și porniți Webhook. Lipiți adresa care ar trebui să primească trimiterile; Fillio o salvează la scurt timp după ce vă opriți din scris și v-o confirmă pe ecran. Fiecare formular poartă o singură adresă, iar oprirea comutatorului o șterge.

Adresa trebuie să fie HTTPS

Fillio apelează numai adrese care încep cu https://. O adresă http:// este acceptată de câmpul din setări, dar nu este apelată niciodată, așa că un webhook care pare salvat nu va livra nimic, în tăcere.

Sunt refuzate și adresele care duc într-o rețea privată: orice gazdă din 10.x, 127.x, 169.254.x, 172.16-31.x sau 192.168.x, orice adresă IPv6 și orice nume care este localhost sau se termină în .local ori .internal. Endpointul dvs. trebuie să fie accesibil din internetul public.

Cererea

Un POST cu corp JSON. Îl însoțesc patru anteturi.

AntetDescriere
Content-Type: application/jsonCorpul este întotdeauna JSON.
User-Agent: Fillio Webhooks/1.0Identifică apelantul ca fiind Fillio, ceea ce ajută atunci când un singur endpoint ascultă mai multe servicii.
X-Fillio-Event: FORM_RESPONSENumele evenimentului. FORM_RESPONSE este singura valoare pe care Fillio o trimite astăzi.
X-Fillio-Event-IdUn UUID nou pentru această livrare, repetat ca eventId în corp.

Payloadul

Un plic care descrie evenimentul și un obiect data care descrie răspunsul.

{
  "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
      }
    ]
  }
}
ProprietateDescriere
eventIdUn ID unic pentru această livrare.
eventTypeÎntotdeauna FORM_RESPONSE.
createdAtMomentul trimiterii răspunsului, ca marcaj temporal ISO 8601 în UTC.
data.responseIdID-ul răspunsului stocat.
data.formIdID-ul formularului, același care apare în linkul lui public.
data.formNameTitlul formularului ca text simplu, fără formatare.
data.fieldsCâte o intrare pentru fiecare întrebare la care s-a răspuns.

În interiorul fields

Fiecare intrare poartă patru proprietăți, iar o întrebare cu opțiuni poartă și o a cincea.

ProprietateDescriere
keyID-ul permanent al întrebării. Supraviețuiește oricărei modificări a textului, așa că potriviți-vă după el, nu după etichetă.
labelÎntrebarea, așa cum este scrisă în editor.
typeTipul întrebării, luat din lista de mai jos.
valueRăspunsul, în forma în care îl stochează acea întrebare.
optionsDoar la întrebările cu opțiuni: ID-ul și textul fiecărei opțiuni, ca să puteți transforma un răspuns înapoi într-o etichetă.

Sosesc doar întrebările la care s-a răspuns

O întrebare pe care respondentul nu a atins-o lipsește din listă, în loc să fie trimisă ca valoare goală, iar o întrebare ascunsă de logica condițională nu apare deloc. Căutați fiecare răspuns după key, în loc să vă bazați pe poziție sau pe un număr fix de intrări.

Răspunsurile de tip alegere poartă ID-uri, nu etichete

Răspunsul la o listă derulantă sau la un radio este ID-ul opțiunii alese, iar răspunsul la o casetă de bifat, la o selecție multiplă sau la un clasament este o listă de ID-uri de opțiuni. Rezolvați-le prin lista options din aceeași intrare. Un răspuns de tip clasament păstrează ordinea în care respondentul a așezat elementele.

Opțiunea Altele

Când un respondent scrie într-o casetă Altele, valoarea nu este un ID de opțiune, ci textul __OTHER__: urmat de ce a scris. Îndepărtați acest prefix ca să citiți răspunsul.

"value": "__OTHER__:Heard about it from a friend"

Fișiere și semnături

Răspunsul la o încărcare de fișier este un link de descărcare către fișierul din spațiul de stocare al Fillio. Un răspuns de tip semnătură este un data URL PNG în base64, pe care îl puteți salva sau afișa direct.

Tipuri de câmpuri

Tipul este un nume public stabil, așa că o schimbare din interiorul Fillio nu ajunge niciodată la integrarea dvs. Orice nu poate fi mapat de Fillio sosește ca INPUT_TEXT.

TipÎntrebareValoare
INPUT_TEXTRăspuns scurtText
TEXTAREARăspuns lungText
INPUT_EMAILEmailText
INPUT_PHONE_NUMBERNumăr de telefonText
INPUT_NUMBERNumărNumărul ca text, exact așa cum a fost scris
INPUT_LINKLinkText
INPUT_DATEDatăO dată, ca YYYY-MM-DD
INPUT_TIMEOrăO oră, ca HH:MM, pe ceas de 24 de ore
DROPDOWNListă derulantăUn ID de opțiune
MULTIPLE_CHOICERadioUn ID de opțiune
CHECKBOXESCasetă de bifatO listă de ID-uri de opțiuni
MULTI_SELECTSelecție multiplăO listă de ID-uri de opțiuni
RATINGEvaluare cu steleUn număr
LINEAR_SCALEScală liniarăUn număr
RANKINGClasamentO listă de ID-uri de opțiuni, în ordinea respondentului
FILE_UPLOADÎncărcare fișierUn link de descărcare
SIGNATURESemnăturăUn data URL PNG în base64

Dacă endpointul dvs. nu răspunde

Fillio așteaptă zece secunde. O expirare, o eroare de conexiune sau orice status din afara intervalului 2xx contează ca livrare eșuată, și cu asta se încheie: nu există nicio reîncercare și nicio coadă din care să reluați.

Răspunsul în sine nu este afectat niciodată. Este stocat înainte ca cererea să fie făcută și rămâne în tabloul dvs. de bord orice ar face endpointul, așa că tabloul de bord rămâne evidența completă chiar dacă o livrare se pierde.

Nu există semnătură

Fillio nu semnează cererea și nu trimite niciun secret comun, așa că, de una singură, cererea nu dovedește de unde vine. Dacă endpointul dvs. trebuie să fie sigur, dați-i o adresă pe care numai dvs. o știți: o cale sau un șir de interogare lung, imposibil de ghicit. Tratați ca nesigur orice ajunge altundeva.

Fiecare livrare poartă propriul ID de eveniment, atât în antetul X-Fillio-Event-Id, cât și în corp. Să rețineți ID-urile pe care le-ați tratat deja este cel mai simplu mod de a face endpointul sigur la un apel repetat.

Sfat

Îndreptați webhook-ul spre orice endpoint de inspectat cereri și trimiteți-vă o dată propriul formular. Veți vedea exact payloadul pe care îl produce formularul dvs., cu propriile ID-uri de câmpuri. Este cel mai rapid mod de a scrie maparea de partea dvs.