Webhooks
Requidex webhooks provide push-based notifications for near real-time integration workflows.
Webhooks can be scoped to a hiring company or an agency. requisition_created and
requisition_approved are company-only events. requisition_received is agency-only and is sent
when a requisition is released to that agency manually, after final approval, or by a scheduled
tier transition. Merely selecting an agency on a draft or internally pending requisition does not
send an event. Assignment and timesheet events are available in both scopes, with agency delivery
limited to work supplied by that agency. Requisition cancellation and filled events are available
to company webhooks and to relevant agencies that received, responded to, or supplied the
requisition, as applicable. Worker submitted is a company-only event. Worker rejected and assigned
events are delivered only to the affected worker's agency when the webhook is agency-scoped.
Set Up and Manage Webhooks
Webhooks are configured in the Requidex application. Open the relevant hiring company or agency, select Integrations, and then open the Webhooks tab. Company webhooks are available to users who can manage that company's integrations. For agencies, agency webhook access must be enabled before the Integrations section is available to agency administrators.
To create a webhook, choose New Webhook, enter its name and receiving endpoint URL, select the event types, and save it. You can also add a description or custom headers and choose whether the webhook is active immediately. Requidex generates the signing secret automatically; store it securely and use it to verify delivery signatures.
Each webhook belongs to exactly one hiring company or agency. From the Webhooks tab you can edit or activate/deactivate it, change its subscribed events, send a test event, inspect or export delivery logs, reveal the signing secret, or delete the webhook. Agency webhook delivery remains restricted to requisitions and workers relevant to that agency.
Supported Domain
Webhooks are available for requisitions, assignments, and selected timesheet lifecycle events.
Event Types
requisition_createdrequisition_approvedrequisition_receivedrequisition_cancelledrequisition_filledrequisition_worker_submittedrequisition_worker_rejectedrequisition_assignedassignment_createdassignment_confirmedassignment_cancelledassignment_reinstatedassignment_endedassignment_dates_updatedassignment_rates_updatedassignment_shift_updatedassignment_trade_updatedtimesheet_approval_requestedtimesheet_approved
Detailed event reference pages (payload fields and examples) are generated from the OpenAPI x-webhooks contract and appear under this section in the sidebar.
Delivery Model
POSTrequest is sent to your configured webhook URL for each event.- Payload is JSON.
- Events are delivered at-least-once; consumers must handle duplicates safely.
Headers
| Header | Description |
|---|---|
Content-Type | Always application/json. |
X-Requidex-Event | Event type (for example requisition_created). |
X-Requidex-Event-Id | Unique event delivery id. |
X-Requidex-Signature | HMAC SHA-256 signature of raw request body. |
X-Requidex-Timestamp | UTC timestamp when event was signed. |
Signature Verification
Use the webhook signing secret provided during onboarding.
- Read the raw request body bytes.
- Build signed payload as:
timestamp + '.' + rawBody. - Compute HMAC SHA-256 using the signing secret.
- Compare the computed digest with
X-Requidex-Signature. - Reject if timestamp is too old (recommended: 5 minutes).
Event Envelope
{
"id": "evt_01HYZ4KQJ4A9H2J7QZ8A4R7X9M",
"type": "requisition_created",
"createdAt": "2026-02-24T15:05:43.455Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
Event Payloads
requisition_created
Company-only. Triggered when a new requisition is created.
The payload includes only the requisition's full object ID. Fetch full details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01HYZ4KQJ4A9H2J7QZ8A4R7X9M",
"type": "requisition_created",
"createdAt": "2026-02-24T15:05:43.455Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
requisition_approved
Company-only. Triggered whenever an approval stage is completed.
The payload includes only the requisition's full object ID. Fetch full details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01HYZ4KXQ45Y8RD6MKJJ6RRA5S",
"type": "requisition_approved",
"createdAt": "2026-02-24T16:11:02.003Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
requisition_received
Agency-only. Triggered when a requisition is released to the agency, whether manually, after final approval, or through a scheduled tier transition.
The payload includes only the requisition's full object ID. Fetch full details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01K1RECEIVED7R6Q5P4N3M2L1",
"type": "requisition_received",
"createdAt": "2026-07-28T10:30:00.000Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
requisition_cancelled
Triggered when a requisition is cancelled. Company webhooks receive the event for their requisitions. Agency webhooks receive it only if the requisition was released to or responded to by that agency.
The payload includes only the requisition's full object ID. Fetch the latest details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01K1REQCANCELLED8Q7R6S5T4",
"type": "requisition_cancelled",
"createdAt": "2026-08-10T09:15:00.000Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
requisition_filled
Triggered when a requisition becomes filled. Company webhooks receive the event for their requisitions. Agency webhooks receive it only if the requisition was released to, responded to, or supplied by that agency.
The payload includes only the requisition's full object ID. Fetch the latest details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01K1REQFILLED9Q8R7S6T5U4",
"type": "requisition_filled",
"createdAt": "2026-08-10T09:30:00.000Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
requisition_worker_submitted
Company-only. Triggered when an agency submits one or more new workers to a requisition, either in its initial response or a later amendment.
The payload includes only the requisition's full object ID. Fetch the latest details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01K1REQSUBMITTED0R9S8T7U6",
"type": "requisition_worker_submitted",
"createdAt": "2026-08-17T09:45:00.000Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
requisition_worker_rejected
Triggered when a submitted worker is rejected. For an agency-scoped webhook, delivery is limited
to the agency that submitted the rejected worker. The agency's submission and rejection reason are
available in agencies[].submissions when fetching the requisition.
The payload includes only the requisition's full object ID. Fetch the latest details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01K1REQREJECTED0R9S8T7U6",
"type": "requisition_worker_rejected",
"createdAt": "2026-08-10T09:45:00.000Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
requisition_assigned
Triggered when one or more workers are assigned to a requisition. For an agency-scoped webhook, delivery is limited to the agency supplying the affected workers.
The payload includes only the requisition's full object ID. Fetch the latest details from:
GET /api/open/v1/requisitions/{id}
{
"id": "evt_01K1REQASSIGNED1S0T9U8V7",
"type": "requisition_assigned",
"createdAt": "2026-08-10T10:00:00.000Z",
"data": {
"requisition": {
"id": "507f1f77bcf86cd799439011"
}
}
}
assignment_created
Triggered when an assignment is created.
The payload includes only the assignment's full object ID. Fetch full details from:
GET /api/open/v1/assignments/{id}
{
"id": "evt_01J0BB2DD7L3T0X9UM5Z6N8R9S",
"type": "assignment_created",
"createdAt": "2026-04-16T14:00:00.000Z",
"data": {
"assignment": {
"id": "507f1f77bcf86cd799439012"
}
}
}
assignment_confirmed
Triggered when an assignment is confirmed.
The payload includes only the assignment's full object ID. Fetch full details from:
GET /api/open/v1/assignments/{id}
{
"id": "evt_01HZAZ8AA4H9P7T6QJ2W3K4M5N",
"type": "assignment_confirmed",
"createdAt": "2026-03-09T10:15:00.000Z",
"data": {
"assignment": {
"id": "507f1f77bcf86cd799439012"
}
}
}
timesheet_approval_requested
Triggered when a timesheet is submitted for approval.
The payload includes only the timesheet's full object ID. Fetch full details from:
GET /api/open/v1/timesheets/{id}
{
"id": "evt_01J0AA1CC6K2S9W8TL4Y5M7Q8R",
"type": "timesheet_approval_requested",
"createdAt": "2026-04-16T12:00:00.000Z",
"data": {
"timesheet": {
"id": "507f1f77bcf86cd799439013"
}
}
}
timesheet_approved
Triggered when a timesheet is approved.
The payload includes only the timesheet's full object ID.
{
"id": "evt_01HZAZ9BB5J1R8V7SK3X4L6P7Q",
"type": "timesheet_approved",
"createdAt": "2026-03-09T10:45:00.000Z",
"data": {
"timesheet": {
"id": "507f1f77bcf86cd799439013"
}
}
}
Retry and Failure Behavior
- 2xx response: delivery is marked successful.
- Non-2xx or timeout: delivery is retried with exponential backoff.
- Recommended consumer timeout: respond within 10 seconds.
- Deduplicate events using
X-Requidex-Event-Id.
Idempotency Guidance
Your webhook handler should be idempotent by event id:
- Store processed event ids.
- Ignore already-processed ids.
- Treat out-of-order arrival as expected.