Skip to Content

Stripe

Stripe fires dozens of event types; Splashify wires the two that matter for customer messaging out of the box: payment_intent.succeeded and payment_intent.payment_failed. Signatures use Stripe’s standard t=…,v1=… scheme.

What you get

EventTypical template
payment_intent.succeededOrder confirmation with total + id
payment_intent.payment_failedPayment failure + retry nudge

Prerequisites

Setup

1. Copy the Splashify webhook URL

Integrations → Stripe in Splashify → copy URL:

https://apis.splashifypro.com/api/v1/webhooks/integrations/<your-user-id>/stripe

2. Add the endpoint in Stripe

Stripe dashboard → Developers → Webhooks → + Add endpoint.

FieldValue
Endpoint URLURL from step 1
DescriptionSplashify Pro WhatsApp templates
Events to sendpayment_intent.succeeded, payment_intent.payment_failed

Click Add endpoint. On the next screen, click Reveal under Signing secret — it looks like whsec_XXXXXXX.... Copy it.

3. Paste the signing secret in Splashify

Configuration tab → Webhook Secret → paste the whsec_… value. Save.

From now on, any unsigned or wrongly-signed POST to your Stripe webhook URL is rejected with 401. Stripe retries its own webhook for up to 3 days on 5xx; it will stop retrying on a persistent 401.

4. Pick templates + map variables

For each event you care about, in Event Automations:

  1. Pick the approved template.
  2. Set Phone Field — where on the payment_intent is the customer phone?
    • If you collect phone via Stripe Checkout: receipt_email works for email but phone lives on shipping.phone or charges.data[0].billing_details.phone. Splashify only supports simple dot paths — the cleanest pattern is to store the phone in metadata when you create the PaymentIntent:
      await stripe.paymentIntents.create({ amount: 5000, currency: 'usd', metadata: { phone: '919876543210', order_id: 'ORD-123' }, })
      Then set Phone Fieldmetadata.phone.
  3. Variable Mappings:
Template varField pathSample
{{1}}amount5000 (in cents)
{{2}}currencyusd
{{3}}idpi_3N1abc...
{{4}}metadata.order_idORD-123
{{5}}last_payment_error.message(failed events)
  1. Toggle Enabled and Save.

5. Test

Stripe CLI:

stripe trigger payment_intent.succeeded

Or in the dashboard, on the webhook endpoint, click Send test webhook → pick the event.

Then check Integrations → Stripe → Logs in Splashify.

Payload reference

Stripe wraps the event in data.object — Splashify unwraps this so you address the inner fields directly (id, amount, metadata.xxx, etc.).

Key fields on a payment_intent:

  • idpi_...
  • amount — smallest currency unit (cents / paise)
  • currency — lowercase ISO code (usd, inr)
  • statussucceeded / requires_payment_method / etc.
  • metadata.* — whatever you stored at creation
  • receipt_email
  • last_payment_error.{code,message,decline_code} — on failures

Full reference: Stripe PaymentIntent object .

Common gotchas

  • Amounts are in the smallest unit. amount=5000 in USD means $50.00; in INR it means ₹50.00. Put currency formatting in the template text.
  • Phone field is rarely on the root. Use metadata.phone and attach it at PaymentIntent creation — the cleanest long-term pattern.
  • Test-mode webhooks have placeholder data. Use stripe trigger with real metadata, or run an end-to-end real charge in test mode.
  • Signature check fails on 1-char mismatch. Copy the secret with no whitespace. If you rotate the secret in Stripe, update it here too.