Вебхуки
Надсилайте кожну відповідь на власну адресу у форматі 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.responseId | ID збереженої відповіді. |
| data.formId | ID форми, той самий, що й у її публічному посиланні. |
| 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 полів. Це найшвидший спосіб написати зіставлення на своєму боці.