- Integration overview
- Webhook request format
- HTTP response code handling
- Retry behavior
- Integration steps
- Partner integration checklist
- 1. Configure an HTTPS endpoint with a 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.
Integration overview
#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
#Each webhook request has this format:
| 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 | What Indeed does | What you do |
|---|---|---|---|
| Success |
| Marks the delivery complete and doesn't 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. | Fix your endpoint or its configuration. |
| Rate limiting error | 429 | Retries after the delay in your rate-limiting headers. Doesn't send you an 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). |
Because of retries, an event can arrive more than once or out of order.
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 an HTTPS endpoint with a valid SSL certificate
#Create an HTTPS endpoint on your server to receive POST requests. Indeed supports TLS 1.2 and 1.3.
2. Implement webhook signature verification
#Verify the X-Indeed-Signature header to confirm that Indeed sent the event.
Signature header format:
X-Indeed-Signature: <signature>3. Process events asynchronously
#- 1.Queue the event durably.
- 2.Return a
2xxresponse as soon as you receive the request. - 3.Process it after you respond, so that your endpoint doesn't time out.
4. Use event IDs for idempotent event processing
#Make your webhook handlers idempotent, so that processing the same event twice has the same result as processing it once. Indeed can deliver an event more than once after a retry or a network problem.
To handle duplicates:
- Use
idempotencykeyevent 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're rate limiting Indeed. Include aRetry-Afterheader.5xx: your server failed, so Indeed retries.
7. Support rate limiting headers
#| Header | Description |
|---|---|
Retry-After | Use either format:
|
X-RateLimit-Reset | Unix timestamp for 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
#To monitor webhook delivery:
- 1.Log every webhook you receive.
- 2.Track how many events succeed and fail.
- 3.Set up alerts for repeated failures.
See also
#Guides
#- CloudEvents - Version 1.0.2 (opens in a new window) — Defines a vendor-neutral format for event data.
- Jobs lifecycle events webhooks guide — Describes the event and data schemas for jobs lifecycle status events.
Support
#For webhook integration support, contact your Indeed integration team.