wiki/knowledge/integrations/stripe-webhooks.md · 678 words · 2026-04-05

Stripe Webhooks & Payment Automation

Stripe webhooks provide a reliable mechanism for triggering downstream automation the moment a payment is confirmed. Rather than polling for payment status or relying on manual follow-up, a webhook listener receives an event from Stripe and fires off whatever logic needs to happen next — emails, database writes, fulfillment triggers, etc.

Core Pattern

The general pattern is:

  1. Customer completes payment via a Stripe payment link, checkout session, or embedded form
  2. Stripe emits a webhook event (e.g., payment_intent.succeeded, checkout.session.completed) to a configured endpoint
  3. Your endpoint receives the event, verifies the Stripe signature, and executes the appropriate workflow steps

This decouples payment confirmation from fulfillment logic, making each step independently reliable and auditable.

Common Trigger Events

Event When to Use
payment_intent.succeeded Payment fully captured; safe to fulfill
checkout.session.completed Checkout flow finished (covers both card and ACH)
charge.succeeded Lower-level charge confirmation
invoice.paid Subscription or invoice-based billing

For one-time grant or purchase flows, checkout.session.completed or payment_intent.succeeded are typically the right hooks.

ACH / Bank Transfer Timing

ACH payments introduce a delay between initiation and confirmation. Stripe reports ACH transfers as taking 2–14 business days to settle. This means:

Practical Workflow: Grant or Purchase Fulfillment

A pattern that works well for organizations managing restricted-access purchasing (e.g., member-only grant programs):

Application submitted
  → Eligibility check (API call to internal database)
  → Approval decision
  → Stripe payment link sent to applicant
  → Applicant pays
  → Stripe webhook fires on payment_intent.succeeded
      → Email to fulfillment contact (e.g., vendor/shipper) with order details
      → Email to finance staff for recordkeeping
      → Email to applicant confirming completion
      → Write-back to internal database (e.g., update balance/status)

This pattern was directly discussed for [1]'s matching grant program, where payment confirmation would trigger emails to Rick at Fire Expression Solutions (for physical item shipment), Erica and Christina (for financial tracking), and the applying lodge.

See: [2]

Stripe Payment Links are a lightweight way to collect payment without building a full checkout UI. They work well when:

Limitations:
- Less flexible for variable amounts (though Stripe does support customer-specified quantities)
- No native way to pass arbitrary metadata through the link without custom checkout sessions

For more complex flows — such as dynamically setting the amount based on an eligibility check — a programmatically created Checkout Session gives more control and allows metadata to be attached to the payment for use in the webhook handler.

Integration with Other Systems

Webhooks become most powerful when chained to other system APIs:

Security Considerations

Sources

  1. Index|Wi Masonic Foundation
  2. 2026 04 05 Wmf Grant Automation Discovery|Wmf Grant Automation Discovery Call
  3. Ninox Api|Ninox Api Integration