There’s a really big button in your SETTINGS page marked “TEST WEBHOOK.” You don’t need to read this page. Just add your URL and click that a few times.
How Webhooks Work
When a candidate finishes their assessment, we POST a JSON payload to your webhook URL. This is basic HTTP stuff that’s been working since 1999.Example HTTP Request
Here’s exactly what we send to your endpoint:Building Webhook Endpoints
Here’s how to build an endpoint that receives our webhooks in languages people actually use:Node (Express)
Python (Flask)
Go (Gin, what we use)
Security
We sign every webhook with HMAC-SHA256. The signature is in theX-ErrorGolf-Signature header as sha256=hex.
Here’s how to verify it in various languages that people actually use:
Node
Python
Go
PHP
Ruby
Retry Logic
- If your webhook endpoint returns anything other than 2xx, we’ll retry up to 10 times with exponential backoff.
- Don’t return 4xx errors unless you actually want us to stop trying. If your server is temporarily down, return 5xx so we keep retrying.
Testing Your Webhook
- Hit that “TEST WEBHOOK” button in your settings. We’ll send a fake payload so you can make sure your endpoint works before real assessments start flowing through.
- The test payload is marked with “test”: 1 so you don’t accidentally process it as a real submission.
Common Mistakes
- Wrong Content-Type: We send application/json. If you’re expecting form data, you’re doing it wrong.
- Ignoring the signature: Verify our HMAC signature or anyone can spam your webhook endpoint.
- Returning 200 for errors: If something breaks on your end, return 5xx so we retry. Don’t return 200 and then ignore the data.
- Hardcoding test data: Check the test field. Test webhooks shouldn’t create real candidate records in your system.

