Developer portal
record.created.v1
A record was created in a module.
record.created.v1v1at-least-once deliveryFires when
On successful record creation — via the QEHS UI, REST API, bulk import, or a public intake form submission.
Payload fields
Envelope fields are shared across all event types. Event-specific data is nested under data.
| Field | Type | Required | Description |
|---|---|---|---|
eventId | string (uuid) | required | Unique per delivery attempt. Use for deduplication. |
event | string | required | Fully-qualified event name, e.g. record.created.v1. |
tenantId | string (uuid) | required | Tenant that owns the affected resource. |
firedAt | string (date-time) | required | ISO-8601 UTC timestamp when the event was emitted. |
data.recordId | string (uuid) | required | ID of the newly-created record. |
data.moduleKey | string | required | Composer module key, e.g. incidents. |
data.createdBy.userId | string (uuid) | optional | Omitted when created by an API key or service account. |
data.createdBy.kind | "user" | "external_user" | "api_key" | "service_account" | required | Identifies the actor type. |
Sample payload
{
"eventId": "11111111-2222-3333-4444-555555555555",
"event": "record.created.v1",
"tenantId": "00000000-1111-2222-3333-444444444444",
"firedAt": "2026-04-18T12:34:56.000Z",
"data": {
"recordId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"moduleKey": "incidents",
"createdBy": {
"userId": "99999999-8888-7777-6666-555555555555",
"kind": "user"
}
}
}Verify the signature
Every delivery includes X-QEHS-Signature: sha256=<hex> and X-Job-ID headers. Verify before trusting the body. See the webhooks signature docs for a full verification example.