Webhook endpoint registration and delivery management.
Register HTTPS endpoints to receive real-time event push notifications. Column retries failed deliveries with exponential backoff. All deliveries are logged and queryable.
Registering a webhook
{:ok, wh} = Column.Webhooks.create(%{
url: "https://your-app.com/webhooks/column",
description: "Production event sink",
enabled_events: ["transfer.ach.settled", "transfer.wire.settled"]
})
# Verify ownership (Column sends a challenge to your endpoint)
{:ok, _} = Column.Webhooks.verify(wh["id"])Verifying webhook signatures
Column signs every delivery with HMAC-SHA256. Use verify_signature/3 to
validate incoming webhook payloads in your endpoint handler.
def handle_webhook(conn) do
sig = List.first(get_req_header(conn, "column-signature"))
raw_body = conn.assigns[:raw_body]
secret = System.get_env("COLUMN_WEBHOOK_SECRET")
case Column.Webhooks.verify_signature(raw_body, sig, secret) do
:ok -> process(conn)
:error -> send_resp(conn, 401, "Invalid signature")
end
end
Summary
Functions
Create a webhook endpoint.
Delete a webhook endpoint.
Get a webhook endpoint by ID.
List all webhook endpoints.
List all deliveries for a webhook endpoint.
List webhook deliveries grouped by event.
Update a webhook endpoint.
Trigger endpoint verification (Column sends a challenge request to your URL).
Verify a webhook signature from an incoming delivery.
Types
@type id() :: String.t()
@type opts() :: keyword()
@type params() :: map()
@type result() :: {:ok, map()} | {:error, Column.Error.t()}
Functions
Create a webhook endpoint.
Delete a webhook endpoint.
Get a webhook endpoint by ID.
List all webhook endpoints.
List all deliveries for a webhook endpoint.
List webhook deliveries grouped by event.
Update a webhook endpoint.
Trigger endpoint verification (Column sends a challenge request to your URL).
Verify a webhook signature from an incoming delivery.
Column signs each delivery with HMAC-SHA256 using your webhook secret. Always validate signatures before processing webhook payloads.
Returns :ok if valid, :error if invalid or missing.