1. Webhooks
Backoffice API
  • Welcome to Omerlo CMS backoffice API
  • AdOps
    • Advertisers
      • Paginated Advertisers
      • Create Advertiser
      • Advertiser by id
      • Update Advertiser by id
    • Ads
      • Paginated Ads in Advertiser
      • Create Ad in Advertiser
      • Ad by id
      • Update Ad by id
      • Place an Ad in Issue or Media
    • Creatives
      • All creatives in Ad
      • Create Creative in Ad
      • Creative by id
      • Update Creative by id
      • Upload Creative image by id
      • Remove Creative by id
    • Categories
      • Paginated Categories
      • Create Category
      • Category by id
      • Update Category by id
      • Delete Category by id
  • Assets
    • How to upload an image and use it
    • Upload Asset Image
      POST
    • Get Asset Image by key
      GET
  • Community
    • Events
      • Blocks
        • Event blocks by id
        • Manage Event blocks by id
        • Event Block entries by ids
        • Manage Event Block entries by ids
      • Sessions
        • Event sessions by event_id
        • Create Event session
        • Event session by id
        • Update Event session by id
        • Remove Event session by id
      • Metadata
        • All Event Metadata
        • Update all Event Metadata
      • List events
      • Create Event
      • Event by id
      • Update Event by id
      • Remove Event by id
      • Event occurrences by id
      • Update Event Block by ids
      • Switch Profile Type by Event id
      • Change event's workspace
    • Organizations
      • Blocks
        • Organization blocks by id
        • Manage Organization blocks by id
        • Organization Block entries by ids
        • Manage Organization Block entries by ids
      • Metadata
        • All Organization Metadata
        • Update all Organization Metadata
      • List organizations
      • Create Organization
      • Organization by id
      • Update Organization by id
      • Remove Organization by id
      • Update Organization Block by ids
      • Switch Profile Type by Organization id
      • Change organization's workspace
    • People
      • Blocks
        • Person blocks by id
        • Manage Person blocks by id
        • Person Block entries by ids
        • Manage Person Block entries by ids
      • Metadata
        • All Person Metadata
        • Update all Person Metadata
      • List people
      • Create Person
      • Person by id
      • Update Person by id
      • Remove Person by id
      • Update Person Block by ids
      • Switch Profile Type by Person id
      • Change person's workspace
    • Projects
      • Blocks
        • Project blocks by id
        • Manage Project blocks by id
        • Project Block entries by ids Copy
        • Manage Project Block entries by ids
      • Metadata
        • All Project Metadata
        • Update all Project Metadata
      • List projects
      • Create Project
      • Project by id
      • Update Project by id
      • Remove Project by id
      • Update Project Block by ids
      • Switch Profile Type by Project id
      • Change project's workspace
  • Composer
    • Workspaces
      • Paginated workspaces
      • Get workspace by id
  • Core
    • Assets
      • Images
        • Create Asset Image
        • Asset Image by id
        • Asset Image by key
        • Asset Image by hash
        • Delete Asset Image by id
        • Restore soft deleted Asset image by id
    • Categories
      • Paginated Categories
      • Create Category
      • Category by id
      • Update Category by id
      • Delete Category by id
      • Restore soft deleted Category by id
    • References
      • Create Reference
      • Reference by ref
      • Remove Reference by ref
      • Lookup References
  • Docs
    • ContentTypes
      • Paginated ContentTypes
      • Create ContentType
      • ContentType by id
      • Update ContentType by id
      • Remove ContentType by id
    • Templates
      • Paginated Templates
      • Create Template
      • Template by id
      • Update Template by id
      • Remove Template by id
    • Contents
      • Paginated Contents
      • Create Content
      • Content by id
      • Update Content by id
      • Delete Content by id
      • Restore soft deleted Content by id
      • Switch Content Template by id
      • Change Content's Workspace
    • Metadata
      • All Content Metadata
      • Update all Content Metadata
    • Blocks
      • All blocks by Content id
      • Create Block in a Content Locale
      • Update Block by id
      • Remove Block by id
  • Magazines
    • Issues
      • List Issues by Workspace id
      • Create Issue in Workspace
      • Issue by id
      • Update Issue by id
      • Delete Issue by id
      • Restore soft deleted Issue by id
    • Sections
      • All sections by Issue id
      • Create Section in Issue
      • Section by id
      • Update Section by id
      • Remove Section by id
      • Section contents by Section id
    • Blocks
      • All blocks by Section id
      • Bulk update blocks by Section id
      • Block by id
      • Update Block by id
    • Slots
      • All slots by Block id
      • Bulk update slots by Block id
    • SectionContents
      • List SectionContents by Issue id
      • Search SectionContents by Issue id
      • Create SectionContent in Section
      • Remove SectionContent by id
  • Messenger
    • SES
      • SES Webhook for mail events
    • Mailinglists
      • Paginated subscriptions by mailinglist id
  • Publisher
    • BlockConfigs
      • All Block Configurations
      • Create Block Configuration
      • Get Block Configuration by id
      • Update Block Configuration by id
    • Blocks
      • Create Media Block HTML
      • Media Block by id
      • Update Media Block HTML by id
    • Publications
      • Create Publication
      • Publication by id
      • Remove Publication by id
  • ReaderHub
    • Readers
      • Create Reader entitlement
    • SES
      • SES Webhook for mail events
    • Mailinglists
      • Paginated subscriptions by mailinglist id
      • Subscribe by mailinglist id
  • Webhooks
    • Webhook Security
    • Events
      • Event Invitation Created
      • Participant Created
      • Participant Removed
  • Schemas
    • AdOps
      • Ad
      • Advertiser
      • Advertiser (summary)
      • Category
      • Creative
    • Community
      • Event
      • Event (summary)
      • Event Schedule
      • Event Session
      • Event Session (summary)
      • Organization
      • Organization (summary)
      • Person
      • Person (summary)
      • Project
      • Project (summary)
      • Profile
      • Profile (summary)
      • Profile Address
      • Profile Block
      • Profile Block (summary)
      • Profile BlockEntry
      • Profile BlockEntry (summary)
      • Profile Contact
      • Profile Description
      • Profile Metadata
    • Composer
      • Workspace
      • Workspace (summary)
      • Status (summary)
    • Core
      • Visual
        • Image
        • Slideshow
        • Video
        • Visual Image
        • Visual Slideshow
        • Visual Video
        • Visual None
      • Asset
      • Category
      • Reference
      • Paging Metadata
      • Visual
    • Docs
      • Content
        • Content
        • Content (summary)
        • Content Metadata
        • Content Block
      • Blocks
        • Quote Block
        • Question Block
        • Data Block
        • HTML Block
        • Image Block
        • Related Content Block
        • Profiles Block
        • Richtext Block
        • Slideshow Block
        • Video Block
      • ContentType
        • ContentType
        • ContentTemplate (summary)
        • ContentTemplate
    • Magazines
      • Issue
      • Issue (summary)
      • Section
      • Section Block
      • Section Block (summary)
      • Block Slot
      • SectionContent
    • Publisher
      • Publication
      • Reader subscription (summary)
      • Media Block Configuration (summary)
      • Media Block Configuration
    • ReaderHub
      • Entitlement
  1. Webhooks

Webhook Security

Webhooks#

Omerlo CMS delivers events (participant created, event deleted, …) to external
endpoints registered via the backoffice. Every delivery is signed with Ed25519
so consumers can confirm the request originated from the CMS and was not
tampered with in transit.

Delivery format#

Every webhook is a POST with a JSON body and two custom headers:
FieldTypeDescription
idUUID v4Unique delivery id. Stable across Oban retries — use it for idempotency.
event_namestringEvent identifier (e.g. participant_created).
sent_atISO 8601 UTCMoment the CMS enqueued the delivery. Use it for replay protection.
dataobjectEvent payload. Shape depends on event_name.
HeaderDescription
x-omerlo-webhook-signatureBase64-encoded Ed25519 signature over the raw request body.
x-omerlo-webhook-key-idIdentifier of the signing key (currently v1). Lets the CMS rotate keys without breaking consumers.

Public key distribution#

The active public key is served as JSON at:
GET https://<cms-host>/.well-known/omerlo-webhook-public-key
{
  "algorithm": "ed25519",
  "keys": [
    { "id": "v1", "public_key": "<base64-encoded 32-byte Ed25519 public key>" }
  ]
}
Cache it locally (5 minutes is fine) and refresh on a 401 response. The
keys array is plural so additional keys can appear during a rotation window.

Verifying a delivery#

A consumer MUST:
1.
Capture the raw request body (bytes received on the wire). Do not
re-serialize a parsed JSON object — key ordering and whitespace would
differ and the signature would no longer match.
2.
Look up the public key matching the x-omerlo-webhook-key-id header.
3.
Base64-decode the x-omerlo-webhook-signature header.
4.
Run Ed25519 verification over (public_key, raw_body, signature).
5.
Reject if sent_at is older than 5 minutes (replay protection).
6.
Skip work if id was already processed (idempotency).
7.
Respond with 2xx once the event is safely persisted; any other status
triggers an Oban retry.
Modified at 2026-06-29 05:25:01
Previous
Subscribe by mailinglist id
Next
Event Invitation Created
Built with