Вебхуки

Надсилайте кожну відповідь на власну адресу у форматі JSON тієї ж миті, коли вона надходить.

Один POST на відповідь

Надсилається щойно відповідь збережено, не змушуючи респондента чекати.

Стабільна структура JSON

Публічні назви типів і незмінні ID полів, тож перейменування запитання ніколи не зламає ваш код.

10 секунд, одна спроба

Fillio чекає на ваш ендпоінт десять секунд і більше спроби не повторює.

Як увімкнути вебхук

Відкрийте форму, перейдіть на вкладку «Налаштування» й увімкніть «Вебхук». Вставте адресу, яка має отримувати відповіді; Fillio збереже її за мить після того, як ви перестанете набирати, і підтвердить це на екрані. Кожна форма має одну адресу, а вимкнення перемикача очищає її.

Адреса має бути HTTPS

Fillio звертається лише до адрес, що починаються з https://. Адресу http:// поле налаштувань прийме, але ніколи не викличе, тож вебхук, який виглядає збереженим, мовчки нічого не доставить.

Адреси, що вказують усередину приватної мережі, теж відхиляються: будь-який хост у 10.x, 127.x, 169.254.x, 172.16-31.x чи 192.168.x, будь-яка IPv6-адреса, а також будь-яке ім’я localhost або таке, що закінчується на .local чи .internal. Ваш ендпоінт має бути доступним із публічного інтернету.

Запит

POST із тілом у форматі JSON. Разом із ним надходять чотири заголовки.

ЗаголовокОпис
Content-Type: application/jsonТіло завжди у форматі JSON.
User-Agent: Fillio Webhooks/1.0Позначає відправника як Fillio. Це корисно, коли один ендпоінт слухає кілька сервісів.
X-Fillio-Event: FORM_RESPONSEНазва події. FORM_RESPONSE залишається єдиним значенням, яке Fillio надсилає сьогодні.
X-Fillio-Event-IdНовий UUID для цієї доставки, що повторюється як eventId у тілі запиту.

Вміст запиту

Конверт, що описує подію, і об’єкт data, що описує відповідь.

{
  "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
      }
    ]
  }
}
ВластивістьОпис
eventIdУнікальний ID цієї доставки.
eventTypeЗавжди FORM_RESPONSE.
createdAtКоли відповідь було надіслано: позначка часу ISO 8601 у UTC.
data.responseIdID збереженої відповіді.
data.formIdID форми, той самий, що й у її публічному посиланні.
data.formNameЗаголовок форми як звичайний текст, без будь-якого форматування.
data.fieldsПо одному запису на кожне запитання, на яке відповіли.

Усередині fields

Кожен запис має чотири властивості, а запитання з варіантами мають п’яту.

ВластивістьОпис
keyНезмінний ID запитання. Він переживає будь-яке редагування формулювання, тож звіряйтеся саме з ним, а не з підписом.
labelЗапитання так, як його написано в редакторі.
typeТип запитання зі списку нижче.
valueВідповідь у тому вигляді, у якому її зберігає це запитання.
optionsЛише для запитань із варіантами: ID і текст кожного варіанта, щоб ви могли перетворити відповідь назад на підпис.

Надходять лише запитання з відповідями

Запитання, якого респондент не торкнувся, у масиві немає взагалі (воно не надсилається як порожнє значення), а запитання, приховане умовною логікою, не з’являється й поготів. Шукайте кожну відповідь за її key, а не покладайтеся на позицію чи фіксовану кількість записів.

Відповіді з варіантами містять ID, а не підписи

Відповідь на випадний список чи вибір одного варіанта містить ID обраного варіанта, а відповідь на прапорці, мультивибір чи ранжування повертає масив ID варіантів. Звіряйте їх зі списком options у тому ж записі. Відповідь на ранжування зберігає порядок, у який респондент розставив елементи.

Варіант «Інше»

Коли респондент пише у поле «Інше», значенням є не ID варіанта, а текст __OTHER__:, за яким іде написане ним. Приберіть цей префікс, щоб прочитати відповідь.

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

Файли та підписи

Відповідь на завантаження файлу містить посилання для завантаження файлу зі сховища Fillio. Відповідь-підпис надходить як data URL у форматі base64 PNG, який можна одразу зберегти або показати.

Типи полів

Тип має стабільну публічну назву, тож зміни всередині Fillio ніколи не доходять до вашої інтеграції. Усе, що Fillio не може зіставити, надходить як INPUT_TEXT.

ТипЗапитанняЗначення
INPUT_TEXTКоротка відповідьТекст
TEXTAREAРозгорнута відповідьТекст
INPUT_EMAILЕлектронна поштаТекст
INPUT_PHONE_NUMBERНомер телефонуТекст
INPUT_NUMBERЧислоЧисло як текст, рівно так, як його ввели
INPUT_LINKПосиланняТекст
INPUT_DATEДатаДата у форматі YYYY-MM-DD
INPUT_TIMEЧасЧас у форматі HH:MM за 24-годинним циферблатом
DROPDOWNВипадаючий списокОдин ID варіанта
MULTIPLE_CHOICEПеремикачОдин ID варіанта
CHECKBOXESПрапорецьМасив ID варіантів
MULTI_SELECTМножинний вибірМасив ID варіантів
RATINGЗірковий рейтингЧисло
LINEAR_SCALEЛінійна шкалаЧисло
RANKINGРанжуванняМасив ID варіантів у порядку, заданому респондентом
FILE_UPLOADЗавантаження файлуПосилання для завантаження
SIGNATUREПідписdata URL у форматі base64 PNG

Якщо ваш ендпоінт не відповідає

Fillio чекає десять секунд. Тайм-аут, помилка з’єднання або будь-який статус поза діапазоном 2xx означають невдалу доставку. І на цьому все: повторної спроби немає, як і черги, з якої можна відтворити запит.

Самої відповіді це ніколи не стосується. Вона зберігається до того, як робиться запит, і лишається у вашій панелі, хоч би що робив ваш ендпоінт, тож панель залишається повним записом навіть тоді, коли якась доставка загубилася.

Підпису немає

Fillio не підписує запит і не надсилає спільного секрету, тож саме лише тіло запиту не доводить, звідки він прийшов. Якщо вашому ендпоінту потрібна певність, дайте йому адресу, відому лише вам: довгий, невгадуваний шлях або рядок запиту. Вважайте недовіреним усе, що надходить деінде.

Кожна доставка має власний ID події як у заголовку X-Fillio-Event-Id, так і в тілі запиту. Записуйте ті, які ви вже обробили: це найпростіший спосіб зробити ваш ендпоінт безпечним до повторного виклику.

Порада

Спрямуйте вебхук на будь-який сервіс для перегляду запитів і надішліть власну форму один раз. Ви побачите точний запит, який надсилає ваша форма, з вашими ж ID полів. Це найшвидший спосіб написати зіставлення на своєму боці.