Support

Help for NTFY me, the iOS client, and ntfy-me.com, its free public server.

Get help

Private security, privacy and abuse reports

Contact support@ntfy-me.com privately. Include the UTC time, the type of problem and a request/message ID if available. Send a topic name only privately when it is needed to investigate; do not send credentials or publish message contents in Discord. We may ask for enough information to verify a removal request. No fixed response time is promised.

Free public server: acceptable use and limits

ntfy-me.com is a free community service operated by Legitimate LLC, independent of ntfy.sh. There is no SLA or guaranteed delivery. Keep another path for urgent, medical, security or other critical alerts. Ordinary messages expire after 12 hours and attachments after 3 hours, with periodic cleanup; scheduled messages can remain until delivery and subsequent expiry. We do not back up that ephemeral data.

Use long random topic names. Anyone who knows a public topic can read, publish and issue clear/delete controls; a topic name does not reserve ownership. Do not use the service for unlawful content, harassment, unsolicited bulk messaging, credential theft or attempts to disrupt others. We may restrict abusive clients or remove content to operate the service, investigate reports or comply with legal obligations.

Current anonymous limits include 2,000 published messages per day per IP, a 120-request burst replenished at one request per 3 seconds, 60 simultaneous subscriptions per IP, 15 MiB per attachment, 100 MiB stored attachments per IP and 500 MiB attachment transfer per day per IP. Shared networks share IP-based limits. The total attachment cache is 2 GiB. Limits may change to protect availability. Retry HTTP 429 with backoff; do not retry an entire burst immediately. See the Privacy Policy for metadata logging and HTTPS guidance.

Servers and instant push

End-to-end encrypted topics

A topic can have a password. Messages sent with it are encrypted in transit and on the server; the server stores ciphertext, while Google (Firebase) and Apple push carries no message text. Once messages arrive they are stored readable on this device, like any other notification (Notification Center, the app, device backups).

  1. Open the topic, tap •••, then End-to-end encryption.
  2. Tap Generate strong password (or type one) and Save password. Copy it to whatever will send messages.
  3. Send with the snippet under How to send encrypted messages. It is filled in with the topic's address; it includes the password only if you switch that on.

The Node.js version (Node 18 or later, no packages needed):

// Send an end-to-end encrypted message. Node 18+, no dependencies.
    // Usage: node send.js "Backup finished" "Optional title"
    const crypto = require("node:crypto");
    const topicUrl = "https://ntfy-me.com/YOUR_TOPIC";
    const password = process.env.NTFY_TOPIC_PASSWORD || "YOUR_TOPIC_PASSWORD";
    const payload = JSON.stringify({ message: process.argv[2] || "Hello", title: process.argv[3] });

    const b64url = (b) => Buffer.from(b).toString("base64url");
    const salt = crypto.createHash("sha256").update(topicUrl).digest();
    const key = crypto.pbkdf2Sync(password, salt, 50000, 32, "sha256");
    const header = b64url('{"alg":"dir","enc":"A256GCM"}');
    const iv = crypto.randomBytes(12);
    const cipher = crypto.createCipheriv("aes-256-gcm", key, iv);
    cipher.setAAD(Buffer.from(header, "ascii"));
    const ct = Buffer.concat([cipher.update(payload, "utf8"), cipher.final()]);
    const body = [header, "", b64url(iv), b64url(ct), b64url(cipher.getAuthTag())].join(".");
    if (body.length > 4096) throw new Error(`Encrypted message is ${body.length} bytes; the limit is 4096`);

    fetch(topicUrl, { method: "POST", body, headers: { "X-Encoding": "jwe" } })
      .then((r) => { if (!r.ok) throw new Error(`HTTP ${r.status}`); console.log("Sent"); })
      .catch((e) => { console.error(e.message); process.exit(1); });

Run it with NTFY_TOPIC_PASSWORD='your password' node send.js "Backup finished" "nas01".

Reporting a bug

Please include, in #bug-reports:

Notification problems are the most common report, so also say whether the message arrived in the app's topic list but not as a banner, or not at all. The troubleshooting checklist covers the usual causes on a self-hosted server.

About this app

NTFY me is a fork of binwiederhier/ntfy-ios (MIT), and is not affiliated with or endorsed by the ntfy project. Please do not send reports about this app to the upstream project; they cannot act on them.