KarmaCheck · AsyncAPI Specification
Karmacheck Webhooks
Version
View Spec
View on GitHub
Background ChecksEmployment ScreeningIdentity VerificationCredential VerificationMotor Vehicle RecordsOccupational Health ScreeningDrug ScreeningHR TechStaffingHealthcareComplianceFCRAAdjudicationWebhookMCP Serveragent-nativeAsyncAPIEvents
AsyncAPI Specification
generated: '2026-08-23'
method: searched
source: https://developer.karmacheck.com/background-check-api/reference/webhooks/webhooks-overview
type: webhook-catalog
summary: >-
KarmaCheck publishes a documented, signed webhook surface but does NOT publish an AsyncAPI
document — no /asyncapi.yaml, no event catalog file and no GitHub organization exists (probed
2026-08-23, api.github.com/orgs/karmacheck 404). This is the webhook catalog captured from
KarmaCheck's own reference; nothing has been fabricated into AsyncAPI form.
transport: https
delivery:
provider: Svix
provider_docs: https://docs.svix.com/receiving/introduction
method: POST
content_type: application/json
subscription_ui: https://app-stage.karmacheck.com/company-settings/webhooks
subscription_scope: >-
A subscription can be configured at company level (delivers events for every group) or at group
level. When a group-level webhook exists, that group's events go only to the group subscription
and not to the company subscription.
security:
signing: HMAC-SHA256
secret: per-endpoint signing secret, prefixed whsec_
headers:
- name: webhook-id
purpose: Unique message identifier; the same ID is reused when a message is retried.
- name: webhook-timestamp
purpose: Seconds since the Unix epoch.
- name: webhook-signature
purpose: 'Space-delimited list of versioned signatures, e.g. v1,<base64-encoded-hmac>'
verification: >-
Concatenate id, timestamp and the RAW request body with "." separators, HMAC-SHA256 that string
with the base64-decoded portion of the signing secret (the part after whsec_), base64-encode the
result and compare in constant time against each signature in the header after stripping the
"v1," prefix. Reject when no signature matches or the timestamp is outside tolerance;
KarmaCheck recommends 5 minutes.
rotation: >-
During a rotation window KarmaCheck signs with both the old and new secret simultaneously, so a
verifier that accepts any matching signature keeps working across a rotation.
caveat: >-
Verify against the raw body bytes. JSON middleware that parses before verification can reorder
keys or change whitespace and break the signature.
envelope:
properties:
- name: messageId
type: string
description: Unique identifier of the event notification.
- name: event
type: string
description: The webhook event being delivered.
- name: apiTrackingCode
type: string | null
description: An identifier for tracking a case.
- name: apiTrackingUser
type: string | null
description: An identifier for tracking a case.
- name: eventObject
type: object
description: Event-specific properties.
events:
- name: case.statuschange
description: The status of a case has changed.
payload_schema: CaseEvent
docs: https://developer.karmacheck.com/background-check-api/reference/webhooks/events/case-status-change
recommended_follow_up: 'GET /case/id/{caseId}'
key_fields:
- id
- caseStatusId
- caseStatus
- secondaryCaseStatusId
- secondaryStatus
- resultType
- candidateId
- packageId
- adverseActionStatusId
- modStamp
- name: casedata.statuschange
description: The status of a service (case data) has changed.
payload_schema: CaseDataEvent
docs: https://developer.karmacheck.com/background-check-api/reference/webhooks/events/case-data-status-change
recommended_follow_up: 'GET /case/id/{caseId}/data/{serviceTypeId}'
delivery_semantics:
ack: >-
The receiver must return a 2xx status as quickly as possible. Anything outside 2xx, INCLUDING
3xx, is treated as a failed delivery.
timeout_seconds: 15
retries:
total_attempts: 8
schedule:
- attempt: 1
delay: initial delivery
- attempt: 2
delay: 5 seconds
- attempt: 3
delay: 5 minutes
- attempt: 4
delay: 30 minutes
- attempt: 5
delay: 2 hours
- attempt: 6
delay: 5 hours
- attempt: 7
delay: 10 hours
- attempt: 8
delay: 10 hours
after_exhaustion: retries stop
ordering: >-
NOT guaranteed. KarmaCheck states delivery order may differ from event order and that receivers
must not rely on it; the documented pattern is to treat every notification as a signal to fetch
current state.
duplicates: >-
Possible. KarmaCheck recommends de-duplicating on the case id plus caseStatusId,
secondaryCaseStatusId and modStamp.
missed_events: >-
KarmaCheck recommends a watchdog that detects when an expected event type has not arrived within
an expected window and then polls for the latest data.
asyncapi_published: false
Work with this as data
Every AsyncAPI spec 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 asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec 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 AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/karmacheck-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?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.