Data Platform / Ingestion
Data PlatformIngestionReal-TimeEvent-Driven

Webhooks (Event-Push Ingestion)

Problem

Polling source APIs on a fixed schedule adds latency, wastes bandwidth on empty responses, and cannot keep pace with real-time event streams. Without a push model, ingestion pipelines fall behind, incur rising API costs, and hit rate limits that force teams to choose between freshness and reliability.

Solution

Implement an event-driven Webhook architecture where source systems push event payloads directly to an API Gateway or Event Broker as state changes occur.

Cloud Paradigm

  • Event-Driven Architecture
  • Push-Based Ingestion
  • Decoupled Data Integration (broker-buffered fan-out)
  • Serverless Event Processing
  • Idempotent Consumer (deduplication on event ID)
  • Zero Trust Endpoint Security (signature verification at the edge)

Solution Flow

  1. The source system (SaaS app, payment processor, or partner service) detects a state change and issues an HTTP POST carrying the event payload to a pre-registered callback URL.
  2. The API Gateway terminates TLS, validates the HMAC signature header against a shared secret, checks the request against a per-source rate limit, and rejects malformed or unauthenticated calls before they reach any compute.
  3. A lightweight ingestion function acknowledges the delivery immediately with a 200 response, then writes the raw envelope—headers, body, and a generated event ID—to a durable landing store, decoupling acceptance from processing.
  4. The event broker (a queue or streaming topic) fans the buffered event out to downstream consumers, providing back-pressure and replay so a slow transform cannot drop deliveries.
  5. A stream processor deduplicates on the event ID, applies schema validation, enriches, and lands typed records into the curated serving tier.
  6. Analytics and downstream apps query the curated tables with near-real-time freshness, no polling loop required.

When to Use

  • Sources natively support webhook/callback registration (Stripe, GitHub, Shopify, Twilio).
  • You need sub-minute freshness for events that arrive irregularly and sparsely.
  • Polling cost or API rate limits make scheduled pulls impractical.

When NOT to Use

  • The source cannot push and offers only a pull API or bulk export.
  • You require guaranteed exactly-once ordering across a full historical backfill.
  • The provider gives no delivery retry or signing, making reliability and trust unverifiable.

Trade-offs

  • Low latency and zero wasted polls vs. you must expose and defend a public internet-facing endpoint.
  • Loose coupling via the broker vs. added operational surface (dead-letter queues, replay tooling).
  • Scales with event volume, not schedule vs. unpredictable spikes demand autoscaling and rate limits.
  • Provider owns delivery timing vs. you inherit their retry semantics and at-least-once duplicates.

Real-World Example

An online marketplace registers a webhook with its payment provider so that every charge.succeeded and refund.created event is pushed to its API Gateway the instant it occurs. Previously a five-minute polling job scanned the payments API and returned mostly empty pages; now the gateway verifies the Stripe signature, drops the raw event onto a Kafka topic, and a stream processor reconciles it against open orders within seconds—letting fraud dashboards and settlement reports run on genuinely fresh data while the payments API sees zero polling traffic.

Additional Details

  • At-least-once delivery, dedup by event ID: Providers retry on any non-2xx or timeout, so the same event arrives multiple times; make the event ID persistent and enforce idempotency at the dedup step—collapsing on payload hash alone breaks when providers resend identical-but-reissued events.
  • Ordering is not guaranteed: Webhooks fire per-state-change and can arrive out of sequence (a refund before its charge); carry the source-side timestamp or sequence number and reconcile on that, not on arrival order.
  • Acknowledge fast, process later: Most providers enforce a short delivery timeout (often 3–10s) and disable endpoints after repeated failures. Return 200 only after the raw envelope is durably persisted—never after full transform—or you risk silent endpoint suspension.
  • Secret and signature rotation: HMAC secrets expire and providers rotate signing keys; support overlapping active secrets during rotation and reject on clock skew for timestamp-signed payloads.
  • Schema drift: Providers add fields and version event types without notice; validate loosely on ingest, store the raw envelope for replay, and pin a schema version per event type so downstream transforms fail loudly rather than silently dropping fields.
  • Observability and DLQ hygiene: Track signature-rejection rate, dedup hit rate, broker lag, and DLQ depth; keep a replay path from the landing store, since a provider's retry window (often hours to days) is your only backfill source if a consumer bug corrupts curated data.

Security Controls

  • HMAC signature verification: Validate every payload against the provider's shared-secret signature header and reject any request that fails, blocking spoofed deliveries.
  • Mutual TLS or allow-listed IPs: Restrict the public endpoint to the provider's published source ranges and enforce TLS 1.2+ on all connections.
  • Idempotency keys: Deduplicate on a provider event ID so at-least-once retries never double-count records downstream.
  • Per-source rate limiting: Throttle inbound calls at the gateway to absorb bursts and prevent a compromised source from flooding the pipeline.
  • Raw payload quarantine: Land unvalidated envelopes in a write-once store with restricted read access for audit and replay.
  • Secret rotation: Rotate signing secrets on a schedule and store them in a managed secrets vault, never in code.

Related Patterns