SkillhabitDocs

Delivery Envelope

JSON shape, headers, and receiver checklist for every Skillhabit webhook delivery.

What This Is For

Every Skillhabit webhook delivery uses the same JSON envelope. Your receiver should parse the envelope first, then branch on eventType before reading data.

The full data object for each eventType is documented in the Event Catalog—field tables and example JSON for every event Skillhabit delivers today.

Who This Is For

Developers implementing or hardening the HTTPS endpoint configured under Configure → Connections → Webhooks.

Envelope Fields

FieldDescription
idUnique id for this webhook delivery—use as an idempotency key
createdAtDelivery creation timestamp in epoch milliseconds (UTC)
workspaceCustomer / workspace id
eventTypeLogical event name (also sent in the Event-Type HTTP header)
dataEvent-specific JSON object—see Event Catalog

Headers

  • Event-Type — same value as eventType in the body
  • Any custom headers you configured on the webhook in Configure (for example a shared secret your side checks)

Content type is JSON. Treat unknown fields in data conservatively: ignore what you do not need, and fail closed only when a field you require is missing.

Receiver Checklist

  1. Respond quickly with 2xx so Skillhabit can treat the delivery as accepted
  2. Deduplicate on id if you may receive retries
  3. Branch on eventType before parsing data
  4. Keep endpoint URLs on HTTPS and rotate any shared secrets you put in custom headers
  5. Log workspace, eventType, and id together so support can correlate a delivery

Example Delivery

{
  "id": "delivery-uuid",
  "createdAt": 1717200000000,
  "workspace": "acme",
  "eventType": "progress.course.evaluated",
  "data": {
    "userId": "user-1",
    "contentId": "course-1",
    "approved": true
  }
}

Every other eventType uses this same envelope; only eventType and data change. Complete data examples: Event Catalog.