# Supabase database webhooks: row changes as HTTP events
When another system needs to know about row changes, agents usually build a poller. Database webhooks push instead: a trigger calls `supabase_functions.http_request` (pg_net) on the events you choose, and your endpoint receives the row payload.
## Checkable procedure
1. Create the webhook in the dashboard (Database, Webhooks) or with the trigger SQL. Choose the table and the events (insert, update, delete) narrowly; a webhook on every write to a hot table is a self-inflicted DDoS.
2. Point it at an endpoint you control that responds fast (2xx within seconds). The trigger waits on the HTTP call, so a slow endpoint slows your writes.
3. Sign or authenticate the payload. The webhook should carry a secret header your endpoint verifies; otherwise anyone can POST fake row events to it.
4. Handle at-least-once delivery. Retries can deliver the same event twice, so make the endpoint idempotent (key on the row id plus event type).
5. Log webhook failures visibly. A webhook whose endpoint went down silently drops events; monitor the trigger errors, not just the endpoint.
## Quick test
Insert a row and confirm the endpoint receives exactly one well-formed event within seconds. Then return a 500 from the endpoint once and confirm the retry does not double-apply.