A tax document must be issued within 15 days of the taxable supply. The 4notify trigger guarantees issuance within 30 s of payment.
Fakturoid + Stripe + 4notify: invoice, notification and reconciliation with no glue code
Fakturoid is the most-used Czech invoicing SaaS for SMBs; Stripe owns the majority of online payments. 4notify sits between as orchestrator: Stripe sends payment_intent.succeeded webhook, 4notify validates the signature, calls Fakturoid API to issue the invoice (with CZ VAT rules), returns the PDF URL and simultaneously emails the customer and SMSes the accountant.
Teams usually write a Node.js middleman — 200 lines that break every Thursday on a new Stripe API version. Or they use Zapier (expensive) or Make.com (slow, 30s latency). 4notify holds the link natively, with signatures and retries.
Document retention minimum 5 years; 4notify keeps the document hash and metadata for audit, the PDF itself remains in Fakturoid.
Repealed for online payments as of 1 Jan 2023; kept as a configurable mode for firms voluntarily on it.
Stripe signature validation
Stripe HMAC-SHA256 signs the webhook; 4notify validates with the current webhook secret before any action, otherwise returns 400.
Fakturoid invoice issuance API
POST /api/v3/accounts/{slug}/invoices.json with mapped line items, business ID, VAT ID, VAT rate and payment method „transfer“/„card“.
Three-way output: email, SMS, ERP webhook
Customer gets email with PDF, accountant gets SMS with invoice number, internal signed webhook hits your ERP — all in parallel with exponential-backoff retries.
Idempotency and deduplication
Stripe sometimes replays the same webhook; 4notify uses stripe_event_id as an idempotency key, so duplicate invoices don't happen.
json
// Webhook flow Stripe → 4notify → Fakturoid:
// 1. Stripe POST /webhooks/stripe-cz
{
"id": "evt_3OmZk2",
"type": "payment_intent.succeeded",
"data": { "object": {
"id": "pi_3OmZk2", "amount": 124800, "currency": "czk",
"metadata": { "order_id": "2026-CZ-0481", "ico": "26168685" }
}}
}
// 2. 4notify → Fakturoid POST /api/v3/accounts/eshop/invoices.json
{
"subject_id": "lookup:26168685",
"lines": [{ "name": "Severin SM 4810", "quantity": 1, "unit_price": "1031.40", "vat_rate": 21 }],
"payment_method": "card",
"variable_symbol": "20260481"
}Hello, thank you for the payment. The invoice 2026-CZ-0481 is attached. Download also here: fakturoid.cz/i/abc123. For accounting purposes please retain for 5 years.
- Stripe webhook secret pasted into 4notify
- Fakturoid API token (personal, not shared)
- Mapping of Stripe catalog items → Fakturoid
- Customer email template with {{invoice_pdf_url}}
- SMS template for accountant (invoice number, amount, due date)
- Test 1 CZK payment end-to-end before go-live
Stripe webhook idempotency plus credit-note and reverse-charge VAT support — without your own Node.js middleman.
Does it work with Superfaktura or iDoklad?
Yes, we have connectors for Fakturoid, Superfaktura, iDoklad and Money S3. Multiple in parallel is supported (one primary + backup).
What about credit notes (storno invoices)?
When Stripe sends charge.refunded, 4notify calls Fakturoid POST /invoices/{id}/storno.json, emails the customer the credit note and updates the ERP.
How do you handle reverse-charge VAT (RPDP)?
If the client has a valid EU VAT ID outside CZ (VIES-checked), 4notify sets vat_rate to 0 and adds the note „Customer pays VAT“ — Fakturoid prints the statutory wording.
Start free
14 days, no card. Czech-language support.