Blip
← All guides

Get a push notification when a Stripe payment lands

You should not find out about a sale from tomorrow's dashboard check. Two minutes of setup puts every Stripe payment on your lock screen the second it lands.

1

Create a Stripe channel in Blip

Install the Blip iOS app, tap + to create a channel named Stripe, and copy its key (it starts with blip_live_). The key is the only credential you need.

2

Paste your webhook URL into Stripe

In the Stripe Dashboard, open Developers, then Webhooks, then Add endpoint, and paste your channel's URL. Done: Blip turns payments, invoices, subscriptions, refunds, disputes, and payouts into readable pushes. Failed payments arrive with high priority so they cut through. No code on your side at all.

Stripe Dashboard: Developers, Webhooks, Add endpoint
https://blipnotify.com/api/v1/hooks/stripe/blip_live_xxx

The key travels in the URL because webhook senders can't set an Authorization header. Rotate the key in the app anytime to revoke a leaked URL.

3

Send a test event

Trigger a test payment from the Stripe CLI (or use Send test webhook in the Dashboard) and watch your phone.

terminal
stripe trigger payment_intent.succeeded

200 { "ok": true, "delivered": 1, "devices": 1 } · pushed to your iPhone

Prefer your own webhook handler?

If you already verify Stripe signatures yourself (or want custom wording), call Blip from your handler instead. title is the only required field; body, url, priority("default" or "high"), and a free-form data object are optional.

app/api/stripe/webhook/route.ts
import Stripe from "stripe";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);

export async function POST(request: Request) {
  const payload = await request.text();
  const signature = request.headers.get("stripe-signature")!;
  const event = stripe.webhooks.constructEvent(
    payload,
    signature,
    process.env.STRIPE_WEBHOOK_SECRET!
  );

  if (event.type === "payment_intent.succeeded") {
    const payment = event.data.object;
    const amount = (payment.amount_received / 100).toFixed(2);

    // The whole Blip integration is this one HTTP call.
    await fetch("https://blipnotify.com/api/v1/notify", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.BLIP_STRIPE_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        title: "Payment received",
        body: `$${amount} ${payment.currency.toUpperCase()}`,
        url: "https://dashboard.stripe.com/payments",
      }),
    });
  }

  return Response.json({ received: true });
}

That's the whole setup.

Blip is free to try for 14 days, every feature included. After that it is $29.99/yr or $9/mo: see pricing.

Download on the App Store

More guides