Skip to main content
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 the X-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.