웹훅

모든 응답을 도착하는 순간 직접 지정한 주소로 JSON으로 보냅니다.

응답 하나당 POST 한 번

답변이 저장되자마자 전송되며, 응답자를 기다리게 하지 않습니다.

변하지 않는 JSON 형태

공개된 유형 이름과 영구적인 필드 ID를 쓰므로, 질문 문구를 바꿔도 코드가 깨지지 않습니다.

10초, 단 한 번

Fillio는 엔드포인트를 10초 기다리고, 그 뒤에는 다시 시도하지 않습니다.

웹훅 켜기

폼을 열고 설정 탭으로 가서 웹훅을 켜세요. 응답을 받을 주소를 붙여 넣으면, 입력을 멈춘 잠시 뒤 Fillio가 저장하고 화면에서 확인해 줍니다. 폼마다 주소는 하나이며, 스위치를 다시 끄면 주소가 지워집니다.

주소는 HTTPS여야 합니다

Fillio는 https://로 시작하는 주소만 호출합니다. http:// 주소도 설정 필드에는 입력되지만 결코 호출되지 않으므로, 저장된 것처럼 보이는 웹훅이 아무것도 전달하지 않고 조용히 넘어갑니다.

사설망을 가리키는 주소도 거부됩니다. 10.x, 127.x, 169.254.x, 172.16-31.x, 192.168.x 대역의 호스트, 모든 IPv6 주소, localhost이거나 .local 또는 .internal로 끝나는 이름이 여기에 해당합니다. 엔드포인트는 공개 인터넷에서 닿을 수 있어야 합니다.

요청

JSON 본문이 담긴 POST입니다. 헤더 네 개가 함께 갑니다.

헤더설명
Content-Type: application/json본문은 언제나 JSON입니다.
User-Agent: Fillio Webhooks/1.0호출자가 Fillio임을 알려 줍니다. 엔드포인트 하나가 여러 서비스를 함께 받을 때 유용합니다.
X-Fillio-Event: FORM_RESPONSE이벤트 이름입니다. 오늘 Fillio가 보내는 값은 FORM_RESPONSE 하나뿐입니다.
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응답이 제출된 시각. UTC 기준 ISO 8601 타임스탬프.
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 스토리지에 있는 파일의 다운로드 링크입니다. 서명 답변은 base64 PNG 데이터 URL이라 그대로 저장하거나 표시할 수 있습니다.

필드 유형

유형은 변하지 않는 공개 이름이므로 Fillio 내부의 변경이 연동에 닿는 일은 없습니다. Fillio가 매핑하지 못하는 것은 INPUT_TEXT로 도착합니다.

유형질문
INPUT_TEXT단답형텍스트
TEXTAREA장문형텍스트
INPUT_EMAIL이메일텍스트
INPUT_PHONE_NUMBER전화번호텍스트
INPUT_NUMBER숫자입력한 그대로의 숫자, 텍스트 형태
INPUT_LINK링크텍스트
INPUT_DATE날짜YYYY-MM-DD 형식의 날짜
INPUT_TIME시간24시간제 HH:MM 형식의 시간
DROPDOWN드롭다운옵션 ID 하나
MULTIPLE_CHOICE라디오옵션 ID 하나
CHECKBOXES체크박스옵션 ID의 배열
MULTI_SELECT다중 선택옵션 ID의 배열
RATING별점숫자
LINEAR_SCALE선형 척도숫자
RANKING순위응답자가 매긴 순서대로의 옵션 ID 배열
FILE_UPLOAD파일 업로드다운로드 링크
SIGNATURE서명base64 PNG 데이터 URL

엔드포인트가 응답하지 않으면

Fillio는 10초를 기다립니다. 타임아웃, 연결 오류, 2xx 범위를 벗어난 모든 상태 코드는 전송 실패로 처리되고 거기서 끝입니다. 재시도도 없고, 다시 흘려보낼 큐도 없습니다.

응답 자체는 전혀 영향을 받지 않습니다. 요청을 보내기 전에 이미 저장되고 엔드포인트가 어떻게 되든 대시보드에 남으므로, 전송 하나를 잃어도 대시보드는 온전한 기록으로 남습니다.

서명은 없습니다

Fillio는 요청에 서명하지 않고 공유 비밀값도 보내지 않으므로, 본문만으로는 출처를 증명할 수 없습니다. 엔드포인트가 확신해야 한다면 나만 아는 주소를 주세요. 길고 알아맞히기 어려운 경로나 쿼리 문자열을 쓰고, 그 밖의 경로로 들어오는 것은 신뢰하지 마세요.

전송마다 고유한 이벤트 ID가 X-Fillio-Event-Id 헤더와 본문 양쪽에 담깁니다. 이미 처리한 ID를 기록해 두는 것이, 엔드포인트를 두 번 호출해도 안전하게 만드는 가장 간단한 방법입니다.

웹훅을 아무 요청 확인용 엔드포인트로 향하게 하고 자기 폼을 한 번 제출해 보세요. 내 필드 ID가 그대로 담긴, 이 폼이 실제로 만들어 내는 페이로드를 볼 수 있습니다. 매핑을 짜는 가장 빠른 길입니다.