Webhook

回答が届いた瞬間に、その内容を JSON で自分のアドレスへ送信します。

回答1件につき1回の POST

回答が保存され次第すぐに送信され、回答者を待たせることはありません。

安定した JSON の形

公開されたタイプ名と不変のフィールド ID を使うため、質問名を変えてもコードが壊れません。

10秒、1回だけ

Fillio はエンドポイントの応答を10秒待ち、その後の再送は行いません。

Webhook を有効にする

フォームを開き、「設定」タブで Webhook をオンにします。回答を受け取るアドレスを貼り付けると、Fillio は入力が止まった少しあとに保存し、画面上で確認できます。1つのフォームにつきアドレスは1つで、トグルをオフに戻すとアドレスは消去されます。

アドレスは HTTPS である必要があります

Fillio が呼び出すのは https:// で始まるアドレスだけです。http:// のアドレスは設定欄では受け付けられますが呼び出されることはなく、保存されたように見えて実際には何も届きません。

プライベートネットワーク内を指すアドレスも拒否されます。10.x、127.x、169.254.x、172.16〜31.x、192.168.x のホスト、すべての IPv6 アドレス、localhost という名前、および .local や .internal で終わる名前が対象です。エンドポイントは公開インターネットから到達できる必要があります。

リクエスト

JSON のボディを持つ POST です。4つのヘッダーが付随します。

ヘッダー説明
Content-Type: application/jsonボディは常に JSON です。
User-Agent: Fillio Webhooks/1.0呼び出し元が Fillio であることを示します。1つのエンドポイントで複数のサービスを受けている場合に役立ちます。
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回答された質問1件につき1エントリーです。

fields の中身

各エントリーは4つのプロパティを持ち、選択肢のある質問はさらにもう1つ持ちます。

プロパティ説明
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 1件
MULTIPLE_CHOICEラジオ選択肢 ID 1件
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 を記録しておくのが、二重に呼び出されても安全なエンドポイントを作るいちばん簡単な方法です。

ヒント

リクエストを確認できるエンドポイントに Webhook を向けて、自分のフォームを一度送信してみてください。自分のフィールド ID が入った実際のペイロードがそのまま見られます。手元のマッピングを書くいちばん速い方法です。