Webhook signatures
Status: detailed reference content coming soon. The summary below
describes the scheme; verification code examples per language will
land in the next iteration.
/execute calls, partner async callbacks, Task Poster webhooks — is
signed with HMAC-SHA256 using a shared secret you control. Your job is
to verify that signature on receipt and reject anything that doesn’t
match.
The scheme
Verifying
In pseudo-code:hmac.compare_digest (or your language’s equivalent) is important —
a string equality check is vulnerable to timing attacks.
Timestamp tolerance
The platform won’t send requests with timestamps more than a few minutes off the current time. Reject requests with timestamps outside that window to prevent replay attacks if a signature ever leaks.Rotating the shared secret
You can rotate your shared secret at any time:- Issue a new secret from the developer dashboard. The dashboard marks it “pending” — both the old and the new secret are valid for incoming signatures.
- Confirm your endpoint validates against the new secret as expected.
- Promote the new secret to “current” and the old one to “revoked.”
What this page will cover
- Verification code examples in Python, Node, Go, and Ruby
- Framework-specific notes (raw body access in Express, FastAPI, Flask, Sinatra, etc.)
- Timestamp validation specifics: the exact window the platform uses
- Rotation procedure with exact dashboard steps
- Debugging signature mismatches: how to read the dashboard’s per-call signature log
- Multi-environment scenarios: separate secrets per environment or one shared, trade-offs of each