Trigger Stripe Workflow from Webhook endpoints
A signed, deduplicated HTTPS POST from any external system kicks off a Stripe Workflow. The generic Inbound trigger, for everything not yet on the integration list.
Inbound is in early access — join the waitlist for early invites.
The problem
There will always be one service that doesn't have a named Inbound integration. An internal admin tool, a vendor's webhook, a friend's side project, a CRON job somewhere. To trigger stripe workflow from webhook today, you stand up a webhook receiver, verify the signature, dedupe on something, and fire a Stripe action via the API — all hosted and monitored by you.
The generic Inbound webhook trigger does it natively. You get a signed URL scoped to your Stripe account. External systems POST JSON to it with an HMAC signature header. Inbound verifies the signature against a shared secret you configure, dedupes on a JSONata-extractable id from the body, surfaces the full payload to the workflow, and fires the matched workflow. Retries follow Stripe Workflows' own semantics — exactly-once delivery from the workflow's perspective. Inbound is pre-launch. Waitlist signups get sandbox access first.
How trigger stripe workflow from webhook works
- 1
Provision an inbound endpoint
When Inbound ships, you'll click New Inbound Trigger in the dashboard. We mint a unique HTTPS URL scoped to your Stripe account, generate a shared secret, and show you both. Configure the source system to POST to that URL with the secret as an HMAC signature. - 2
Configure dedup + signature
Pick the signature scheme (HMAC-SHA256 over the raw body, or matching Stripe's signature shape if the source already speaks that). Set the dedup key as a JSONata expression against the payload — usually an event id field. Same id twice in a window means one trigger. - 3
Match payloads to workflows
Inbound surfaces the full payload to the Stripe Workflow context. The workflow's filter step decides whether to fire — by event type, by tenant, by amount. Multiple workflows can match a single inbound event if you want a fan-out. - 4
Audit everything
Every inbound POST shows in the execution log: signature pass/fail, dedup result, matched workflows, the downstream actions and their outcomes. Failures are loud — the log shows exactly why something didn't fire.
# External system POSTs to your Inbound URL
curl -X POST https://inbound.outboundforworkflows.com/v1/in/acme_abc123 \
-H "Content-Type: application/json" \
-H "X-Inbound-Timestamp: $(date +%s)" \
-H "X-Inbound-Signature: $(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -binary | xxd -p -c 256)" \
-d '{
"event_id": "evt_847",
"type": "refund.requested",
"customer_email": "a@acme.com",
"amount": 4900,
"reason": "product defect"
}'Example workflow configuration
Mock-up of the generic Inbound webhook config inside the Stripe Dashboard. Shows a newly-minted signed webhook URL with a copy button, a shared-secret field with reveal toggle, a signature-scheme selector, a JSONata input for the dedup key, and a live deliveries table with signature-status, dedup-status, and matched-workflow columns.
Outbound vs custom webhook handler
| Outbound | custom webhook handler | |
|---|---|---|
| Hosted infrastructure to maintain | — | |
| Signature verification built-in | you build it | |
| Idempotent + dedup window | you build it | |
| Setup time | ≈5 minutes (when live) | Half a day to a week |
| Direct chaining into Stripe + Outbound actions | you build it | |
| Pricing model | Bundled with Outbound | Hosting + dev time |
| Available today | Pre-launch — join waitlist | true |
Frequently asked questions
What signature schemes are supported?+
How does the dedup window work?+
What if my external system can't sign requests?+
How is this different from Stripe's native webhook endpoints?+
Is there a rate limit?+
Related integrations
Trigger Stripe from Linear
The named Linear integration handles signature and dedup with no config — use it when you can.
Stripe webhook to any URL
The mirror image, available today: outbound HTTPS requests from Stripe events to any URL.
Write Stripe events to Postgres
Pair with an inbound webhook: external system POSTs, workflow writes to your own database.