प्लैटफ़ॉर्म
कॉलबैक (वेबहुक)
पोलिंग करने के बजाय, इमेज या वीडियो के अनुरोध में callback_url दें. तैयार होने या विफल होने पर Zurelay नतीजे को उस URL पर POST करता है, साथ में सिग्नेचर भी भेजता है ताकि आप पुष्टि कर सकें कि यह हमने भेजा है.
कॉलबैक का अनुरोध करें
इनमें से किसी भी अनुरोध में callback_url जोड़ें. यह सार्वजनिक इंटरनेट पर उपलब्ध https URL होना चाहिए.
curl https://api.zurelay.com/v1/videos \ -H "Authorization: Bearer $ZURELAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2.0", "prompt": "A fox running through fresh snow at dawn", "seconds": 5, "callback_url": "https://example.com/hooks/zurelay" }'कॉलबैक वाले इमेज अनुरोध
callback_url के बिना, इमेज अनुरोध इंतज़ार करता है और जवाब में इमेज लौटाता है, जैसे OpenAI का API करता है. इसे जोड़ने पर अनुरोध तुरंत स्वीकार होता है और जवाब में जॉब मिलता है. शुल्क तभी लगता है जब इमेज बनती हैं:
HTTP/1.1 202 Acceptedx-request-id: req_6fJd0kQ3pW9xT2mB7cZ1hR4u{ "id": "req_6fJd0kQ3pW9xT2mB7cZ1hR4u", "object": "image.generation", "model": "nano-banana-pro", "status": "in_progress", "created_at": 1791000000, "completed_at": null, "data": [], "url_expires_at": null, "cost": null, "error": null, "callback_url": "https://example.com/hooks/zurelay"}/v1/images/{id}आप इसकी पोलिंग भी कर सकते हैं: GET /v1/images/{id} वही ऑब्जेक्ट लौटाता है, और उसका status जब completed हो जाता है, तो data में नए लिंक मिलते हैं. कॉलबैक में हमेशा लिंक होते हैं, base64 नहीं, चाहे response_format कुछ भी हो.
हम क्या भेजते हैं
हर इवेंट के लिए एक POST, जिसकी JSON बॉडी में होते हैं: type, timestamp और data, यानी जॉब ठीक उसी रूप में जैसा API लौटाता है (वीडियो ऑब्जेक्ट, या ऊपर दिया गया इमेज अनुरोध), साथ में 24 घंटे तक काम करने वाले डाउनलोड लिंक.
POST /hooks/zurelay HTTP/1.1content-type: application/jsonuser-agent: Zurelay-Webhooks/1.0 (+https://zurelay.com/docs/webhooks)webhook-id: msg_2c1f9e0b7a4d4f6e8b3a91c05d7e6f42webhook-timestamp: 1791000094webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4={ "type": "video.completed", "timestamp": "2026-10-03T03:21:34.000Z", "data": { "id": "video_Qm3v8Rk2Lx7Pa1Zt9Ws4Yn6B", "object": "video", "model": "seedance-2.0", "status": "completed", "progress": 100, "created_at": 1791000000, "completed_at": 1791000093, "expires_at": 1793592000, "seconds": 5, "resolution": "720p", "aspect_ratio": "16:9", "size": "1280x720", "generate_audio": true, "url": "https://…/video_Qm3v8Rk2Lx7Pa1Zt9Ws4Yn6B.mp4?token=…", "url_expires_at": 1791086494, "cost": 0.45, "error": null, "callback_url": "https://example.com/hooks/zurelay" }}{ "type": "image.completed", "timestamp": "2026-10-03T03:20:41.000Z", "data": { "id": "req_6fJd0kQ3pW9xT2mB7cZ1hR4u", "object": "image.generation", "model": "nano-banana-pro", "status": "completed", "created_at": 1791000000, "completed_at": 1791000041, "data": [{ "url": "https://…/req_6fJd0kQ3pW9xT2mB7cZ1hR4u-1.png?token=…" }], "url_expires_at": 1791086441, "cost": 0.07, "error": null, "callback_url": "https://example.com/hooks/zurelay" }}सिग्नेचर की पुष्टि करें
कॉलबैक Standard Webhooks फ़ॉर्मैट का पालन करते हैं, जिसका इस्तेमाल OpenAI के वेबहुक भी करते हैं. सिग्नेचर, <webhook-id>.<webhook-timestamp>.<body> का HMAC-SHA256 है, जो आपके वर्कस्पेस के साइनिंग सीक्रेट को कुंजी बनाकर तैयार किया जाता है और base64 में होता है. सीक्रेट (जो whsec_ से शुरू होता है) डैशबोर्ड के API कुंजियां पेज पर मिलेगा. इसे सिर्फ़ अपने सर्वर पर रखें.
import osfrom fastapi import FastAPI, HTTPException, Requestfrom standardwebhooks.webhooks import Webhook # pip install standardwebhookswebhook = Webhook(os.environ["ZURELAY_WEBHOOK_SECRET"]) # whsec_…app = FastAPI()@app.post("/hooks/zurelay")async def zurelay_hook(request: Request): body = await request.body() # the raw bytes: the signature covers exactly these try: event = webhook.verify(body, dict(request.headers)) except Exception: raise HTTPException(status_code=400) handle(event) # event["type"], event["data"]; keep it quick, or queue it return {"ok": True}- मूल बॉडी की जांच करें: JSON को पार्स करके दोबारा सीरियलाइज़ करने से बाइट बदल जाते हैं, और उनके साथ सिग्नेचर भी.
- पांच मिनट से पुराने
webhook-timestampको अस्वीकार करें: इससे कोई भी इंटरसेप्ट किए गए कॉलबैक को दोबारा नहीं चला सकेगा. लाइब्रेरी यह जांच आपके लिए करती हैं. - सीक्रेट बदलने पर तुरंत नया सीक्रेट मिल जाता है (मालिक और एडमिन इसे API कुंजियां पेज पर बदल सकते हैं). पुराना सीक्रेट भी 24 घंटे तक नए के साथ साइन करता रहता है, इसलिए एक दिन के भीतर अपने सर्वर को नए सीक्रेट पर स्विच कर दें.
पहले जवाब दें, फिर काम करें
15 सेकंड के भीतर कोई भी 2xx लौटाएं और कॉलबैक डिलीवर हुआ माना जाएगा. पहले इवेंट सहेजें और जवाब दें; वीडियो या इमेज बाद में डाउनलोड करें. कॉलबैक एक से ज़्यादा बार आ सकता है (मिसाल के लिए, अगर आपका जवाब रास्ते में खो गया हो), इसलिए हर कॉलबैक को सिर्फ़ एक बार प्रोसेस करने के लिए webhook-id का इस्तेमाल करें.
दोबारा कोशिशें
इसके अलावा कुछ भी होने पर (गड़बड़ी वाला स्टेटस, रीडायरेक्ट, 15 सेकंड में जवाब न मिलना, या सर्वर तक न पहुंच पाना) दोबारा कोशिश होती है, कुल छह बार:
हर कॉलबैक डैशबोर्ड के अनुरोध में अपने अनुरोध के साथ दिखता है: वह कहाँ भेजा गया, हर कोशिश में क्या जवाब मिला और अगली कोशिश कब होगी। वहाँ कॉलबैक फिर भेजें से उसे तुरंत दोबारा भेजा जाता है, चाहे वह पहले पहुँच चुका हो या नहीं। हर कोशिश में उसके अंदर के लिंक नए होते हैं।
कोई सवाल है, या कुछ छूट गया है? हमारी सहायता टीम से पूछें और हम ईमेल से जवाब देंगे, आम तौर पर एक मिनट के भीतर.