- How webhooks work
- Webhook request format
- HTTP response code handling
- Retry behavior
- Integration steps
- Partner integration checklist
- 1. Configure HTTPS endpoint with valid SSL certificate
- 2. Implement webhook signature verification
- 3. Process events asynchronously
- 4. Use event IDs for idempotent event processing
- 5. Disable CSRF protection for webhook routes
- 6. Handle errors with appropriate status codes
- 7. Support rate limiting headers
- 8. Monitor and alert on webhook delivery failures
- See also
- Guides
- Support
Webhooks integration guide
Integrate webhooks to deliver events to your endpoints.
How webhooks work
Webhooks send HTTP POST requests to your endpoints. Each request:
- Carries the full event payload as JSON.
- Follows the CloudEvents specification (opens in a new window).
- Includes an Indeed signature that you verify.
Webhook request format
The webhook system implements the CloudEvents specification (opens in a new window):
| Request | Description |
|---|---|
| Method | HTTP POST |
| Content-Type | application/cloudevents+json |
| Headers |
|
| Body | JSON payload with event data in CloudEvents format. |
| Body attributes |
|
HTTP response code handling
| Category | HTTP code | Webhook system actions | Partner actions |
|---|---|---|---|
| Success |
| Marks the delivery complete. Does not retry. | Respond before you process the event. |
| Redirection |
| Treats the response as a client error. | Fix your endpoint configuration. |
| Client errors |
(except | Retries with exponential backoff. | Check your endpoint configuration, then fix the endpoint. |
| Rate limiting error | 429 | Reads your rate-limiting headers and retries after the delay you specify. Sends no alert. | None. |
| Server errors |
| Retries with exponential backoff. | Monitor for |
Retry behavior
The webhook system retries a failed delivery until your endpoint accepts it:
| Characteristic | Value |
|---|---|
| Maximum retry attempts | Effectively unlimited. |
| Initial retry interval | 10 milliseconds |
| Backoff multiplier | 2.0 Doubles the interval after each attempt. |
| Maximum interval | 7,200 seconds (2 hours) |
Retries mean an event can arrive more than once and out of order. To handle this, see Use event IDs for idempotent event processing.
Integration steps
Partner integration checklist
Every step is required except where noted.
- 1.Configure an HTTPS endpoint with a valid SSL certificate.
- 2.Implement webhook signature verification — optional.
- 3.Process events asynchronously, responding with
2xxbefore you process. - 4.Use event IDs for idempotent event processing.
- 5.Disable CSRF protection for webhook routes.
- 6.Handle errors with appropriate status codes.
- 7.Support rate limiting headers, if applicable.
- 8.Monitor and alert on delivery failures.
1. Configure HTTPS endpoint with valid SSL certificate
Create an HTTPS endpoint on your server to receive POST requests. Indeed supports TLS v1.2 and v1.3.
2. Implement webhook signature verification
Validate the X-Indeed-Signature header to confirm that Indeed sent the event.
Signature header format:
X-Indeed-Signature: <signature>3. Process events asynchronously
- Return a
2xxresponse as soon as you receive the request. - Queue the event, and process it after you respond. Otherwise your endpoint can time out.
4. Use event IDs for idempotent event processing
Design your webhook handlers to be idempotent. Indeed can deliver the same event more than once, after a retry or a network problem.
To handle duplicates:
- Use event IDs to track the events you already processed.
- Don't rely on event order.
5. Disable CSRF protection for webhook routes
If your web framework checks CSRF tokens, exempt your webhook route from this protection.
6. Handle errors with appropriate status codes
Return these status codes:
2xx: you received the event.429: you are rate limiting Indeed. Include aRetry-Afterheader.5xx: your server failed, so Indeed retries.
7. Support rate limiting headers
| Header | Description |
|---|---|
Retry-After | The webhook system supports these header formats:
|
X-RateLimit | UNIX timestamp when the rate limit window resets. |
If you rate limit Indeed without sending these headers:
- Default wait time: 3 seconds.
- Subsequent retries: exponential backoff.
8. Monitor and alert on webhook delivery failures
Monitor webhook delivery:
- Log every webhook you receive.
- Track processing success and failure metrics.
- Alert on repeated failures.
See also
Guides
- CloudEvents - Version 1.0.2 (opens in a new window) — A vendor-neutral specification for the format of event data.
- Jobs lifecycle events webhooks guide — Jobs lifecycle status event schema and data schema.
Support
For webhook integration support, contact your Indeed integration team.