Every library event (BookAdded, SeriesAdded, BookImported, ReadProgressChanged, …) can be POSTed as {event, timestamp, data} JSON to configured URLs ([webhooks] in config.toml, env KOMGA_WEBHOOKS_URLS / KOMGA_WEBHOOKS_EVENTS / KOMGA_WEBHOOKS_TIMEOUT / KOMGA_WEBHOOKS_SECRET).
Event names and data shapes match the SSE stream, plus full series/book DTOs mirroring the REST API on upsert events (series on SeriesAdded/SeriesUpdated, book on BookAdded/BookUpdated, null when the row is gone; everything else stays id-only), and carried-over libraryName/readListName/collectionName/userEmail on Library/ReadList/Collection/User events.
Delivery is fire-and-forget through a bounded in-memory queue: 429/5xx and transport errors are retried up to 3 times with 1s/2s/4s backoff honoring Retry-After, other 4xx are dropped, and nothing is persisted.
Every request carries X-Kmrs-Event; with secret set it is HMAC-SHA256 signed via X-Kmrs-Signature: t=<timestamp>,v1=<hex> over <timestamp>.<body>.
The Java version has no webhook support at all.