Magento invoice paid notifications on your phone.

Get a push notification when the money for a Magento order is captured, the moment you know you've actually been paid.

invoice.paidE-commercePayments
How it works

Three steps to your first push

STEP 01

Install the recipe

One click in Studio gives you a personal webhook URL.

STEP 02

Paste your URL into Magento

Add it as a webhook for Invoice paid.

STEP 03

Get a push on your phone

With the text, sound and buttons from the recipe.

Setup

How to set up the Magento invoice paid webhook

  1. Click Install in Studio and sign in. The recipe is added to your account and you get a personal webhook URL.
  2. Install the JustPush module in your shop: composer require justpush/magento-module-notify, then bin/magento setup:upgrade.
  3. In the Magento admin, open Stores > Configuration > Services > JustPush and set Enabled to Yes.
  4. Paste your webhook URL into the Invoice paid field, click Save Config, then click Send test.https://••••••••/•••••••• your personal URL, shown after install
  5. Magento has no outgoing webhooks, so this recipe needs the free **JustPush module** in your shop ([source](https://github.com/JustPush-io/justpush-magento)). Install it once; it serves every Magento recipe:
  6. ```bash
  7. composer require justpush/magento-module-notify
  8. bin/magento setup:upgrade
  9. bin/magento cache:flush
  10. ```
  11. Then open **Stores → Configuration → Services → JustPush** in the Magento admin, set **Enabled** to **Yes**, paste the URL above into the **Invoice paid** field and click **Save Config**. Click **Send test**: this recipe answers with a quiet "🔔 Magento connected".
  12. For online payment methods Magento usually captures the payment and creates the invoice automatically. For bank transfer, check/money order and other offline methods, the push comes when you create the invoice yourself.
  13. The module sends from Magento's message queue, so Magento cron has to run (it usually does). Without cron, set **Send immediately (no cron)** to **Yes**.
  14. The **Open invoice** button opens the Magento admin. With Magento's default **Add Secret Key to URLs** setting, it lands on the dashboard rather than the page itself.
  15. Requests aren't signed, so keep the URL private.
The code

What runs when the webhook arrives

Studio calls handleRequest(request) with the incoming webhook and sends the message it returns. It's yours after install; change anything.

transform.js
1// Magento → invoice paid
2// Fires when the JustPush module (justpush/magento-module-notify) reports an "invoice.paid" event:
3// the money for an invoice was captured. For bank transfer and other offline methods that's
4// when you create the invoice.
5// Docs: https://github.com/JustPush-io/justpush-magento
6
7// The module sends plain strings; treat blanks and nulls as missing.
8function text(value) {
9 return typeof value === "string" && value.trim() ? value.trim() : null
10}
11
12// Only link to real http(s) URLs.
13function link(url, cta) {
14 return typeof url === "string" && /^https?:\/\//.test(url) ? [{ cta, url }] : []
15}
16
17// Which shop sent it, so owners of several websites can tell them apart.
18function shop(store) {
19 if (!store || typeof store !== "object") return null
20 const url = text(store.url)
21 const host = url && /^https?:\/\//.test(url) ? url.replace(/^https?:\/\//, "").replace(/\/.*$/, "") : null
22 return text(store.website) ?? text(store.store_view) ?? host
23}
24
25// The module's "Send test" button; every Magento recipe answers it.
26function testPing(body) {
27 const from = shop(body.store)
28 return {
29 title: "🔔 Magento connected",
30 message: from ? `${from} is sending to this recipe` : "Your shop is sending to this recipe",
31 topic: "Magento",
32 priority: -1, // Low — you just clicked the button
33 }
34}
35
36// Magento sends money as decimal strings ("49.00"). Returns null when there's no amount.
37function money(amount, currency) {
38 const value = Number(amount)
39 if (amount == null || amount === "" || !Number.isFinite(value) || !text(currency)) return null
40
41 try {
42 return new Intl.NumberFormat("en-GB", { style: "currency", currency: currency.trim() }).format(value)
43 } catch {
44 return `${amount} ${currency}`
45 }
46}
47
48function handleRequest(request) {
49 const body = request.body && typeof request.body === "object" ? request.body : {}
50
51 if (body.event === "test.ping") return testPing(body)
52
53 // Guard: only handle this recipe's event, so other Magento events on this integration stay quiet.
54 const invoice = body.invoice
55 if (body.event !== "invoice.paid" || !invoice || typeof invoice !== "object") {
56 console.log(`Ignoring Magento event "${body.event ?? "unknown"}"`)
57 return null
58 }
59
60 const order = text(invoice.order_increment_id)
61 const number = text(invoice.increment_id)
62 const total = money(invoice.grand_total, invoice.currency)
63 const customer = text(invoice.customer_name)
64
65 return {
66 title: order ? `💰 Order #${order} paid` : "💰 Invoice paid",
67 message: [
68 `${total ?? "A payment"}${customer ? ` from ${customer}` : " received"}`,
69 number ? `invoice #${number}` : null,
70 shop(body.store),
71 ]
72 .filter(Boolean)
73 .join(" · "),
74 topic: "Magento",
75 priority: 0, // Normal — money in, nothing to do
76 sound: "cashregister",
77 buttons: link(invoice.admin_url, "Open invoice"),
78 }
79}
Payload

The Magento invoice.paid webhook

This is what Magento sends to your URL for invoice paid. It is a sample, trimmed to the fields recipes use.

invoice.paid · sample.json
1{
2 "event": "invoice.paid",
3 "store": {
4 "url": "https://shop.example.com/",
5 "website": "Main Website",
6 "store_view": "Default Store View"
7 },
8 "invoice": {
9 "currency": "EUR",
10 "admin_url": "https://shop.example.com/admin/sales/invoice/view/invoice_id/3/",
11 "grand_total": "108.00",
12 "increment_id": "000000003",
13 "customer_name": "Jane Doe",
14 "order_increment_id": "000000012"
15 },
16 "sent_at": "2026-09-30T14:29:28Z",
17 "version": 1
18}
FAQ

Magento invoice paid notifications: questions

Does this work on iPhone and Android?

Yes. Install the JustPush app from the App Store or Google Play and sign in. Every phone signed in to your account gets the notification.

Do I need to write code?

No. Install the recipe in Studio, paste your webhook URL into Magento and you are done. The code is there if you want to change the text, the sound or the buttons.

Can I change what the notification says?

Yes. After install the recipe's code is yours. Edit it in Studio and test it against the sample payload before you save.

What does it cost?

JustPush is free for 30 days. After that it's $19.99 a year, or $39.99 once. There is no extra charge for recipes.

Ready when you are

Magento on your phone in two minutes.

Install the recipe, paste one URL, done. Free for 30 days, no credit card required.