Skip to main content

Transform Parsers

Builtin payload transformers convert external webhook payloads into standard message structures without you crafting titles/bodies manually.

How It Works

  1. You POST raw JSON to /api/v1/messages/transform?parser=<name>&bucketId=<bucket>
  2. Zentik validates the parser name and payload shape.
  3. The parser returns a CreateMessageDto (title, subtitle, body, deliveryType, etc.).
  4. A message + notifications are created as normal.

Built-in Parsers

ParserQuery NameEnum TypeDescriptionKey Fields Used
AuthentikauthentikZENTIK_AUTHENTIKMaps Authentik event bodies (login/logout/loginFailed + unmapped)body, user_email, user_username, embedded JSON after colon
ServarrservarrZENTIK_SERVARRHandles Radarr/Sonarr/Prowlarr events (download/import/indexer status)eventType, movie / series / episodes / indexer*
RailwayrailwayZENTIK_RAILWAYTransforms Railway.com webhook events (deployments, alerts)type, project.name (required), service.name (optional), status (optional)
GitHubgithubZENTIK_GITHUBHandles GitHub webhook events (push, PR, issues, releases, workflows, checks)repository.name, sender.login, action, event-specific fields
ExpoexpoZENTIK_EXPOHandles Expo Application Services (EAS) build/submit eventsaccountName, projectName, platform, status, metadata
Status.iostatusioZENTIK_STATUS_IOHandles Status.io incidents and scheduled maintenance eventstitle, details, status_page_url, incident_url / maintenance_url
InstatusinstatusZENTIK_INSTATUSHandles Instatus incidents, maintenance, and component updatesmeta, page.url, incident / maintenance / component_update
Atlassian Statuspageatlas-statuspageZENTIK_ATLAS_STATUSPAGEHandles Atlassian Statuspage incidents and component updatesmeta, page.id, incident / component_update

Parser Requirements

Some parsers require additional user settings configuration:

  • GitHub: Requires GithubEventsFilter setting to filter events (optional - can specify comma-separated event types like "push,pull_request" or special filters "all_success" or "all_failure")
  • Expo: Requires ExpoKey setting for webhook signature verification (optional - HMAC-SHA1 signature verification)

Other parsers work without additional configuration.

Delivery Type Mapping

Parsers decide deliveryType based on severity / eventType (implementation may evolve; inspect produced messages if tuning priority is needed).

Example Authentik

curl -X POST \
"http://localhost:3001/api/v1/messages/transform?parser=authentik&bucketId=<bucket-uuid>" \
-H "Authorization: Bearer <jwt-access-token>" \
-H "Content-Type: application/json" \
-d '{"body":"loginSuccess: {...}","severity":"info","user_email":"user@example.com","user_username":"alice"}'

Adding New Parsers

Need another integration? Request it—new built-ins can be added on demand.

You can now create custom parsers directly from the Zentik web app! Visit the Payload Mapper section to upload and edit your own mapping logic, as demonstrated in the video below.

Video: Creating custom parsers in Zentik web app

Validation Failures

ScenarioResponse
Unknown parser404 Not Found
Missing parser param400 Bad Request
Invalid payload shape400 Bad Request

Debugging

If output seems incomplete, log the raw payload you send and compare with parser expectations (see source code for interim logic). For rapid iteration, start with the standard POST /messages endpoint before formalizing a parser request.


Return to main notifications: Notifications Overview