אימות חתימה (Signature verification)
סכימת ה-HMAC-SHA256 האמיתית שבה VUZ משתמש — מאומתת מול קוד המשלוח בפועל.
זו לא סכימת t=,v1= בסגנון Stripe שאולי ראיתם מתוארת במקומות אחרים. המימוש
האמיתי חותם רק על ה-payload עצמו — כותרת חותמת הזמן נפרדת ואינה חלק מהחתימה.
הכותרות ש-VUZ שולח
Content-Type: application/json
User-Agent: VUZ-Webhook/1.0
X-Vuz-Signature: 5f3d8a1c9b... (HMAC-SHA256 בקידוד hex)
X-Vuz-Timestamp: 1751371260 (שניות מאז epoch — לא חלק מהחתימה)
X-Vuz-Delivery-Id: 9c2f6b2e-...
X-Vuz-Event: document.finalizedנוסחת החתימה
signature = hex( HMAC_SHA256( endpoint_secret, JSON.stringify(payload) ) )ה-endpoint_secret הוא הסוד שנוצר אקראית בעת יצירת ה-webhook. הקלט ל-HMAC הוא רק
גוף ה-JSON המסודר — X-Vuz-Timestamp אינו חלק מהחתימה.
אמתו מול הבייטים הגולמיים של הבקשה, לא מול ערך שאתם מסדרים מחדש בעצמכם —
JSON.stringify(JSON.parse(body)) עלול לשנות סדר מפתחות ולשבור את ההשוואה בשקט.
דוגמאות קוד מאומתות ל-Node.js, PHP, ו-Python נמצאות בגרסה האנגלית של העמוד: Webhooks → Signature verification — הקוד עצמו זהה בשתי השפות.
בדיקה מול חתימה אמיתית
POST /api/v1/webhooks/{id}/test שולח שליחה אמיתית וחתומה נכון ל-endpoint שלכם —
השתמשו בזה לאימות קוד הבדיקה שלכם מול חתימה אמיתית, ולא בבניית fixture ידני.

