# Webhook ingester

> Build a small, reliable receiver that accepts events before processing them.

## Receive and verify

Expose a public HTTPS endpoint that accepts `POST` requests. Capture raw body bytes and [verify the request](/docs/webhooks/verify-webhooks-requests) with the Node.js or PHP SDK before using the event. Place a request body limit on your receiver and reject malformed envelopes.

## Persist before acknowledging

Store the event in a durable inbox with a unique constraint on its `id`. Commit the record before returning `204 No Content` or another `2xx` response. If storage is unavailable, return a failure response so Nexiom Connect can retry.

For an event already present in your inbox, acknowledge it successfully without repeating the side effect. An in-memory set is not sufficient because it disappears on restart.

## Process asynchronously

Have a worker read pending inbox records and route by the signed `type`. Commit the business change and the inbox completion together where possible. If the work calls an external service, pass a stable idempotency key there too.

```text
HTTPS request
  → Verify timestamp and signature
  → Validate event envelope
  → Commit to durable inbox (unique event ID)
  → Respond 204

Background worker
  → Claim pending event
  → Apply idempotent business change
  → Mark event processed
```

## Recover safely

Record event ID, type, attempt outcome, and processing status without logging secrets. Retry your own failed processing independently from delivery acceptance. A delivery can succeed while your background processing still needs attention.

This guide describes a receiver you build in your application. Nexiom Connect does not currently ship a separate webhook ingester package.

---

Source: https://connect.nxiom.com/docs/webhooks/ingester
