563848e0ecc0
Trigger manual webhook event to registered subscriptions
Triggers a manual webhook event for the specified event type. Publishes a lightweight event message to Pub/Sub. The consumer will look up active webhooks for the tenant and deliver the event to them asynchronously.
Schema Validation:
Each event type has a corresponding JSON Schema that defines the required structure for eventData. The eventData payload is validated against the schema for the specified eventType. Invalid payloads will return a 400 Bad Request with detailed validation error messages.
Supported Event Types and Schemas:
-
credential_workflow.status.changed → https://schemas.certifyos.com/webhook-events/credential-workflow-status-changed.schema.json
-
facility_credential_workflow.status.changed → https://schemas.certifyos.com/webhook-events/facility-credential-workflow-status-changed.schema.json
-
form.submission.submitted → data: { form: { id, versionId, label }, submissionId } (published by POST /forms/submissions; not schema-validated on this path yet)
What the webhook receiver will receive:
HTTP Headers:
-
Content-Type: application/json
-
User-Agent: CertifyOS-Webhook-Delivery/1.0
-
Idempotency-Key: <SHA-256 hash> - A unique key for deduplication (same key across retries)
-
Any custom headers configured in the webhook subscription
Request Body (JSON):
{
"eventType": "credential_workflow.status.changed",
"timestamp": "2024-01-20T09:15:00Z",
"data": { /* your eventData payload */ }
}
The data field contains the eventData from your request payload. The timestamp is automatically set to the current time when the event is delivered.
Example delivered body — form.submission.submitted:
{
"eventType": "form.submission.submitted",
"timestamp": "2026-04-21T06:25:51Z",
"data": {
"form": { "id": "...", "versionId": "...", "label": "practitioner" },
"submissionId": "..."
}
}
Headers
Tenant ID
Request body
Response
Successfully published webhook event to Pub/Sub