Fillioडॉक्स

Webhooks

हर सबमिशन को, आते ही, JSON के रूप में अपने किसी पते पर भेजें।

हर रिस्पॉन्स पर एक POST

जवाब सेव होते ही भेजा जाता है, बिना जवाब देने वाले को इंतज़ार कराए।

एक स्थिर JSON ढाँचा

सार्वजनिक टाइप नाम और स्थायी फ़ील्ड ID, इसलिए सवाल का नाम बदलने से आपका कोड कभी नहीं टूटता।

10 सेकंड, एक ही कोशिश

Fillio आपके एंडपॉइंट का दस सेकंड इंतज़ार करता है और उसके बाद दोबारा कोशिश नहीं करता।

Webhook चालू करना

फ़ॉर्म खोलें, सेटिंग्स टैब पर जाएँ और Webhook चालू करें। वह पता चिपकाएँ जिस पर सबमिशन जाने चाहिए; टाइप करना रुकते ही Fillio उसे सेव कर लेता है और स्क्रीन पर पुष्टि दिखा देता है। हर फ़ॉर्म पर एक पता रहता है, और टॉगल वापस बंद करने पर वह मिट जाता है।

पता HTTPS ही होना चाहिए

Fillio सिर्फ़ उन्हीं पतों को कॉल करता है जो https:// से शुरू होते हैं। http:// वाला पता सेटिंग्स की फ़ील्ड ले तो लेती है, पर उसे कभी कॉल नहीं किया जाता, यानी सेव दिखने वाला webhook चुपचाप कुछ भी नहीं भेजेगा।

प्राइवेट नेटवर्क के अंदर इशारा करने वाले पते भी मना कर दिए जाते हैं: 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 दस सेकंड इंतज़ार करता है। टाइमआउट, कनेक्शन की गड़बड़ी या 2xx से बाहर का कोई भी स्टेटस नाकाम डिलीवरी मानी जाती है, और बात वहीं ख़त्म: न कोई दोबारा कोशिश, न कोई कतार जिससे दोबारा भेजा जा सके।

इससे रिस्पॉन्स पर कोई असर नहीं पड़ता। वह रिक्वेस्ट भेजने से पहले ही सेव हो जाता है और आपके डैशबोर्ड में बना रहता है, आपका एंडपॉइंट चाहे कुछ भी करे। इसलिए कोई डिलीवरी खो भी जाए तो डैशबोर्ड पूरा रिकॉर्ड रहता है।

कोई सिग्नेचर नहीं होता

Fillio रिक्वेस्ट पर हस्ताक्षर नहीं करता और कोई साझा सीक्रेट नहीं भेजता, इसलिए अकेली बॉडी यह साबित नहीं करती कि वह कहाँ से आई है। अगर आपके एंडपॉइंट को पक्का जानना ज़रूरी है, तो उसे ऐसा पता दें जो सिर्फ़ आप जानते हों: लंबा, अंदाज़ा न लगने वाला पाथ या क्वेरी स्ट्रिंग। कहीं और आने वाली हर चीज़ को अविश्वसनीय मानें।

हर डिलीवरी अपनी इवेंट ID साथ लाती है, X-Fillio-Event-Id हेडर में भी और बॉडी में भी। जो ID आप पहले संभाल चुके हैं उन्हें दर्ज रखना ही अपने एंडपॉइंट को दो बार कॉल के लिए सुरक्षित बनाने का सबसे आसान तरीका है।

टिप

webhook को किसी भी रिक्वेस्ट-इंस्पेक्शन एंडपॉइंट पर लगाएँ और अपना फ़ॉर्म एक बार खुद भरें। आपको ठीक वही पेलोड दिखेगा जो आपका फ़ॉर्म बनाता है, आपकी अपनी फ़ील्ड ID के साथ। अपनी तरफ़ की मैपिंग लिखने का यही सबसे तेज़ तरीका है।