# `Chimeway.Webhooks`
[🔗](https://github.com/jonlunsford/chimeway/blob/v1.0.0/lib/chimeway/webhooks.ex#L1)

Pure function boundary for synchronously ingesting and verifying inbound webhooks.

Success returns ONLY when the ingress row and the ProcessFeedbackWorker job
have both committed in a single transaction. Returning `{:ok, ingress}` is
the host's acknowledgment cue — the host MAY return 2xx to the provider
(Phase 33 D-03). Any error tuple means the host MUST return non-2xx so the
provider retries.

Unauthorized signature failures and unparseable bodies do NOT create a
durable ingress row (Phase 33 D-09). Only verified, parsed, normalized
callbacks enter the durable inbound lifecycle.

# `process`

```elixir
@spec process(module(), binary(), list(), keyword()) ::
  {:ok, Chimeway.Webhooks.Ingress.t()}
  | {:error, :unauthorized}
  | {:error, :unparseable_body}
  | {:error, :unresolvable_delivery}
  | {:error, :unnormalizable_feedback}
  | {:error, Ecto.Changeset.t()}
  | {:error, term()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
