Certifyos · Schema
WebhookRequest
Request to create a new webhook
CompanyHealthcareProvider DataCredentialingLicensingPayer EnrollmentPrimary Source VerificationProvider Network ManagementRoster ManagementCompliance MonitoringHealthcare APIWebhook
Properties
| Name | Type | Description |
|---|---|---|
| webhookUrl | string | The URL where webhook events will be sent |
| eventTypes | array | Event types this webhook should receive. A webhook receives an event if, and only if, the event type matches one of these strings **exactly** (case-sensitive). **Open namespace.** Any lowercase `domai |
| headers | object | Custom headers to include in webhook requests |
| isActive | boolean | Whether the webhook is active. Defaults to true if not provided |
| oauthConfiguration | object | Optional OAuth client-credentials configuration. When provided, a token is minted before each delivery and sent as Authorization: Bearer |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/certifyos/main/json-schema/certifyos-webhook-request-schema.json",
"title": "WebhookRequest",
"description": "Request to create a new webhook",
"x-generated": "2026-10-20",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/certifyos-webhook-api-openapi.yml#/components/schemas/WebhookRequest",
"type": "object",
"required": [
"webhookUrl",
"eventTypes"
],
"properties": {
"webhookUrl": {
"type": "string",
"pattern": "^https?://[^\\s]+$",
"description": "The URL where webhook events will be sent"
},
"eventTypes": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"maxLength": 100,
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*){1,3}$"
},
"description": "Event types this webhook should receive. A webhook receives an event if, and only if, the event type matches one of these strings **exactly** (case-sensitive).\n\n\n**Open namespace.** Any lowercase `domain.entity.action` value of 2-4 dot-separated segments is accepted, so you can subscribe to your own events and publish them via POST /webhooks/events without a change to this service.\n\n\n**Event types published by CertifyOS:**\n\n- `credential_workflow.status.changed` - Triggered automatically when a credentialing workflow status changes (timeline event is created). See webhook-api-credential-workflow-events.md for detailed payload structure and documentation.\n\n- `facility_credential_workflow.status.changed` - Triggered automatically when a facility credentialing workflow status changes.\n\n- `form.submission.submitted` - Triggered when a form submission is received by POST /forms/submissions.\n\n- `roster_job.status.changed` - Triggered when a roster job reaches a client-facing status (PENDING_CORRECTION, PENDING_APPROVAL, IMPORTED, FAILED).\n\n- `facility.global_termination.completed` - Triggered once per facility when a facility global termination (POST /facilities/terminate) completes. Payload: `certifyFacilityId`, `facilityName`, `npi`, `tin`, `terminationDate`, `terminationReason`, `status`. A global termination ends everything the facility has, so there is no per-location detail. `facilityName`, `npi` and `tin` are read from the facility and are `null` when unavailable. \n\n- `practitioner.terminated` - Triggered when a practitioner is terminated via PUT /practitioners/terminate (any of the 9 `terminationType` values, including `FULL_EXIT`) or by a roster STOP row. Payload: `certifyPractitionerId`, `npi`, `terminationType`, `terminationDate`, `terminationReason`. Keys are always present; a value that is unknown or not applicable is sent as an explicit `null`."
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Custom headers to include in webhook requests"
},
"isActive": {
"type": "boolean",
"description": "Whether the webhook is active. Defaults to true if not provided"
},
"oauthConfiguration": {
"$ref": "#/$defs/WebhookOauthConfiguration",
"type": "object",
"description": "Optional OAuth client-credentials configuration. When provided, a token is minted before each delivery and sent as Authorization: Bearer <token>."
}
},
"$defs": {
"WebhookOauthConfiguration": {
"type": "object",
"required": [
"tokenUrl",
"clientId",
"clientSecret"
],
"description": "OAuth client-credentials configuration. When present, a token is fetched before each delivery and injected as Authorization: Bearer <token>.",
"properties": {
"tokenUrl": {
"type": "string",
"pattern": "",
"description": "OAuth token endpoint URL"
},
"clientId": {
"type": "string",
"pattern": "\\S",
"description": "OAuth client ID"
},
"clientSecret": {
"type": "string",
"pattern": "\\S",
"description": "OAuth client secret"
},
"scope": {
"type": "string",
"description": "OAuth scope(s) to request, space-separated"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Additional headers to send with the token request"
},
"resource": {
"type": "string",
"description": "Resource to request"
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/certifyos-webhook-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.