nomiDocumentation
SupportBack to site
  • Getting started

    • Introduction
    • What is Nomi?
    • Quick start
    • Concepts
    • Authentication
  • Credentials

    • Create a credential
    • Issue a credential
    • Credential lifecycle
    • Revoke a credential
    • Verify a credential
    • QR verification
  • Distribution

    • Apple Wallet
    • Google Wallet
    • Email
    • Credential delivery
    • Bulk issuance
  • API

    • API overview
    • Authentication
    • Credentials API
    • Recipients
    • Verification
    • Revocation
    • Webhooks
    • Errors
  • Integrations

    • Moodle
    • WordPress
    • REST API
    • Webhooks
  • Security

    • Authentication
    • API keys
    • Webhook security
    • Data protection
    • Best practices
  • Resources

    • FAQ
    • Glossary
    • Changelog
  1. Documentation
  2. /
  3. Security
  4. /
  5. Webhook security

Webhook security

Verifying a delivery, refusing a replay, and why your listener should do almost nothing.

A webhook endpoint is a URL on your infrastructure that anyone on the internet can POST to. The signature is what turns it into something only Nomi can drive.

  1. 1

    Read the raw body

    Before any JSON parsing. The signature covers the exact bytes sent.

  2. 2

    Recompute the HMAC

    HMAC-SHA256 over ${t}.${rawBody} with the endpoint's secret, compared with a timing-safe comparison.

  3. 3

    Check freshness

    Refuse a t older than about five minutes. The signature proves origin; the timestamp proves it is not a replay.

  4. 4

    Answer quickly, work later

    Acknowledge with a 2xx and do the real work on a queue. A listener that calls three internal services before answering is a listener that times out.

The code is in Webhooks, and it verifies exactly what the platform signs.

Handle duplicates

Deliveries are retried, so your listener will eventually see the same event twice. Key your processing on the event's id and make the handler idempotent — that is cheaper than making delivery exactly-once, which nobody can.

Do not use the payload as authority for something expensive without re-reading the resource. An event says what happened; the API says what is true now.

If the secret leaks

Rotate it. Whoever administers the organisation does that from the console, the new secret is shown once, and deliveries are signed with it from then on — so a secret that ended up in a log, a screenshot or a repository stops being able to forge anything.

Webhooks

The reference.

Data protection

What we hold.

PreviousAPI keysNextData protection

Still stuck?

If this page did not answer it, the Help Center has the operational side of the same question — and a person reads what you send.

Go to the Help Center →

On this page

  • Handle duplicates
  • If the secret leaks
nomi

Digital credential infrastructure. Create, issue and manage credentials from the systems you already use.

Operated by

Country and currency

Platform

  • How it works
  • Templates
  • Lifecycle
  • Developers
  • Pricing
  • FAQ
  • Nomi Academic

Credentials

  • Memberships
  • Employee IDs
  • Student IDs
  • Events & loyalty

Developers

  • Documentation
  • Quick start
  • API reference
  • Webhooks
  • Integrations

Support

  • Help Center
  • Apple & Google Wallet
  • Verification
  • Contact support

Company

  • Request a demo
  • Talk to Nomi
  • Legal
  • Codingraph
PrivacyTermsCookiesSecurityContact

© 2026 Codingraph S.A. All rights reserved.

Nomi is a registered trademark used by Codingraph S.A. under licence.

Billed in USD

Apple Wallet and Google Wallet are trademarks of their respective owners.