See how copy works in NotiFixed

Send in-app feeds, mobile push and web push
from one
notification API.

NotiFixed is a notification API for B2B SaaS. One call sends to an in-app feed, mobile push and web push, in 19 languages. Each customer's push uses their own Apple and Google credentials. NotiFixed stores no names, emails or phone numbers. It does not do campaigns, email or SMS.

We set up Apple and Google push with you. Nobody needs to know what Firebase is. Built for multi-tenant SaaS →

EnglishPolskiDeutschFrançaisEspañolItalianoPortuguêsNederlandsSvenskaDanskNorskSuomiČeštinaSlovenčinaMagyarRomânăTürkçe日本語العربية

1API call

puts a notification in the feed, on the phone and in the browser.

19languages

one row each, with proper plural rules.

0personal fields

no names, no email addresses, no phone numbers.

Why we built it

We picked a notification vendor and needed nineteen languages. They ended up in one template as a forty-line switch statement, in the vendor's web UI, where nobody could review it, a translator couldn't touch it, and one typo broke all nineteen at once.

Copy is data, not code. One row per language.

Send it once. Land it everywhere. Own everything in between.

Send

One API call reaches one person or a whole company. A retry can't send the same thing twice.

Embed

REST and a live socket, plus a JavaScript SDK. You get the finished text and the raw data.

Write

Nineteen languages, one row each, with a live preview and proper plural rules.

Deliver

In-app feed plus push to phones and browsers. It turns up as your app, with your icon and name.

Operate

A console your customers run themselves: types, templates, broadcasts and a delivery log.

Prove

A permanent record of what was sent, to who, in which language. The exact sentence, a year later.

Copy as data

Nineteen languages.
One row each.

Most vendors give every language one template and a forty-line switch statement. One typo breaks all nineteen. We store copy as data instead.

  • One row per language, with a live preview.
  • Proper plural rules. Polish has four forms, Arabic has six.
  • A grid shows exactly what's missing or stale.
  • Translators edit copy without a developer, a release, or a ticket.
See how templates work

The usual vendor template

{{#switch user.locale}}

{{#case "en"}} … {{/case}}

{{#case "pl"}} … {{/cas}}

… 16 more branches

invoice.approved17 of 19 up to date
EN{actor} approved invoice {invoice}✓
PLFaktura {invoice} została zatwierdzona✓
DERechnung {invoice} wurde freigegeben✓
FRLa facture {invoice} a été approuvée✓
SKNo copy yetMissing
TR{invoice} numaralı fatura onaylandıStale
JA請求書{invoice}が承認されました✓

Your brand

It turns up as your app,
not ours.

A push lands with your icon, your name and your wording. Each of your customers sends through their own Apple and Google accounts, so it really is their app talking.

  • Your icon and app name on every push.
  • Each customer's push setup kept separate.
  • We set it up with you when you join.
  • Nobody on your team needs to know what Firebase is.

Monday 19 October

9:41

AAcmenow

Anna approved invoice #4821

AAcmenow

Masz 5 nowych zadań w projekcie Q4

A

Acme · app.acme.com

Anna approved invoice #4821

Your UI

You build the feed.
We hand you the data.

Your designers build a feed that matches your product. You're not dropping in someone else's component and fighting its CSS.

  • A REST API and a live socket.
  • An optional JavaScript SDK.
  • The finished text plus the raw data behind it.
  • Read it once and it clears on every device.
Read the docs
GET/v1/feed
{
  "unread": 2,
  "items": [{
    "type": "invoice.approved",
    "text": "Anna approved invoice #4821",
    "data": { "invoice": "#4821" },
    "read": false
  }, …]
}
Your feed, your design2
Anna approved invoice #4821
Ben mentioned you in Roadmap

Delivery log

Know what was sent,
and what went wrong.

Your customers run their own console: types, templates, broadcasts, and a delivery log that explains failures in plain words.

  • A retry can't send the same thing twice.
  • Failures explained, not just error codes.
  • A permanent record of what was sent, kept for a year.
  • The exact sentence, in the language it went out in.
Delivery loguser_8f2c · invoice.approved
14:02feedDelivered
14:02webDelivered
14:02iosToken expired. The user reinstalled the app.
14:03iosSkipped. Already sent on the first attempt.
Sent in pl: “Faktura #4821 została zatwierdzona”

Privacy

No names. No emails.
No phone numbers.

Just an id you already use, a language, and the labels you choose. There's very little for a privacy review to even look at.

  • Your own user ids.
  • One language per user.
  • Labels you define, like plan or region.
  • Nothing else, by design.
The whole user record3 fields
{
  "id": "user_8f2c",
  "locale": "pl",
  "labels": { "plan": "pro", "region": "eu" }
}
nameemailphonetimezone

Small on purpose

Few features.
Lots of options.

Notification tools grow by piling on features most teams never use. We do the bits you actually use, each one properly configurable. You define the types, the data, the inboxes, the template fields and the user labels.

We left the rest out so it stays simple.

No campaign builders

Different product, different buyer. Your marketing team already has one.

No analytics dashboards

Your product already has analytics. We'd be building a worse version of it.

No per-user preferences

The type decides which channels fire. One place to look instead of two that can disagree.

No quiet hours

That needs everyone's timezone, and we don't hold personal data.

Digests, later

Genuinely on the roadmap. We'd rather build it when someone needs it than guess the rules now.

No email or SMS

Push and in-app only. Email means addresses, bounces and deliverability. That's a whole product.

Frequently
asked questions

How it works, who it's for, and what we deliberately left out.

Read the docs
What is NotiFixed?+

NotiFixed is a notification API for B2B SaaS. One call sends to an in-app feed, mobile push and web push, in 19 languages. Each customer's push uses their own Apple and Google credentials. NotiFixed stores no names, emails or phone numbers. It does not do campaigns, email or SMS.

Who is it for?+

Product and platform engineers at B2B SaaS companies whose customers are companies. If each of your customers wants their own branding, push setup and settings, that's where we fit best. If you sell to consumers, your needs are simpler and there are cheaper options.

Can each of my customers have their own push icon?+

Yes, on every plan. Each customer sends through their own Apple and Google accounts, so a push turns up with their name and icon. We set that up with you when you join.

Do we need to set up Firebase ourselves?+

No. We do it with you. Nobody on your team needs to know what Firebase is.

Which languages do you support?+

Nineteen, each stored as its own row with proper plural rules. A grid shows which languages are missing or out of date.

What do you store about our users?+

An id you already use, a language, and the labels you choose. No names, no email addresses, no phone numbers.

How does NotiFixed compare with Knock, Novu and the others?+

We put 19 languages and push under each customer's own name and icon on every plan, and the first paid plan is $50 a month. Each comparison is checked against the other product's own pricing page, and says when the other one is the better pick. See the comparisons →

Do you send email or SMS?+

No. Push and in-app only. Email is a whole product of its own, with addresses, bounces, unsubscribes and deliverability. If you need it, forward a NotiFixed event to Resend or Postmark.

Send it once.
Land it everywhere.