Node (Express)
Node.js + Express
Python (FastAPI)
Python + FastAPI
Go (net/http)
Go
bash (manual verify of a captured request)
Useful for debugging. Replay the raw body and signature you captured:Testing your endpoint without writing code
Trigger a test delivery:render.completed to your URL. Use this to confirm your signature verification path works end-to-end before going live.
Common mistakes
| Symptom | Cause |
|---|---|
signature mismatch on every request | You’re hashing the parsed-and-restringified body, not the raw bytes. JSON formatting differences break HMAC. |
| Works locally, fails in prod | A proxy/CDN in front of your server is re-encoding the body (e.g., adding a trailing newline). Bypass or configure pass-through. |
| Only works some of the time | Constant-time comparison missing → you’re getting false rejects from string equality on near-misses. Use timingSafeEqual / compare_digest. |
| Works in dev, fails after rotation | You updated the secret in only one place. Verify against both old and new during the 24h rotation grace. |