Stripe events, verified and deduplicated.
Basalt registers a webhook endpoint and checks every signature. Payments, invoices and subscriptions land as typed rows within a second.
Basalt registers a webhook endpoint and checks every signature. Payments, invoices and subscriptions land as typed rows within a second.
Basalt creates the endpoint through the Stripe API and stores its signing secret. Each event is verified against the Stripe-Signature header, deduplicated by event ID, and acknowledged only after it is written to the log.
Paste a restricted key with webhook write access. Basalt creates the endpoint, subscribes to the events you choose, and backfills 30 days.
# subscribe to billing events from Stripe basalt source add billing --stripe --events charge.*,invoice.*,customer.subscription.*
Write plain SQL over the source. Basalt keeps the view current with every record and tracks lineage back to the topic, partition and offset.
CREATE MATERIALIZED VIEW revenue_by_min AS SELECT date_trunc('minute', ts) AS minute, currency, sum(amount) AS revenue, count(*) AS payments FROM payments WHERE status = 'captured' GROUP BY 1, 2;
Every view is an endpoint the moment it exists. Call it over REST, connect with any Postgres client, or use the SDK from your app.
curl https://api.basalt.dev/v1/views/revenue_by_min?limit=5 \ -H "Authorization: Bearer $BASALT_TOKEN"
Every payload is verified with HMAC-SHA256. Unsigned or stale requests are rejected.
Stripe retries are dropped by event ID, so a charge is counted once.
Charges, invoices and subscriptions get columns that match the pinned API version.
Pull up to 30 days of past events from the Events API when you connect.