Webhooks
API credentials let your system ask Knowspread questions. Webhooks are the other direction: the space tells your system when something happens, without being asked.
Verified: Captured from
#/csPreferences/webhooks on 2026-09-04 with the
event picker open.The screen
Section titled “The screen”
123
- One endpoint receives everything. You give its URL and a secret — Vygenerovat secret produces one for you (1).
- Auth type is separate from the secret and defaults to
none(2). Basic auth credentials appear once you pick it. - Subscriptions are added one event at a time, each with a schema version (3). Nothing is subscribed by default.
The events on offer
Section titled “The events on offer”Fact: The picker offers four events, and they are about assignments and
tests rather than about people or content changing.
| Event | Fires when |
|---|---|
content_assignment_created | Content is assigned to someone |
content_assignment_completed | Someone finishes assigned content |
content_assignment_overdue | An assignment passes its deadline |
test_attempt_completed | Someone finishes a test attempt |
Fact: Each subscription carries a schema version —
v1.0 is what the
version picker offers — so the payload shape is versioned separately from the
event name.The secret is a signature, not a password
Section titled “The secret is a signature, not a password”Assumption: The secret is used to sign the payload so your endpoint can
verify the call really came from Knowspread. The screen offers to generate it
rather than asking you to invent one, which fits that reading, but the screen
does not say so and we have not confirmed it against the code.
Fact: Basic auth is separate and optional — it authenticates the call at
the transport level, where the secret authenticates the payload.
What to watch for
Section titled “What to watch for”Fact: In a personal space this screen draws the form but nothing behind it
is live:
webhooks, webhook_settings and webhooks/pending_requests all
answer 403. The subscription section stays empty because it was refused, not
because nothing is subscribed.Missing: What each payload actually contains is not on this screen. The
Dokumentace link at the top points at the reference; ours is webhook
events.