{
  "data": {
    "a": {
      "slug": "onesignal",
      "name": "OneSignal",
      "vendor": "OneSignal",
      "vendorUrl": "https://onesignal.com",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Messaging platform that sends mobile and web push through its own service and adds email, SMS, RCS, in-app messages, Live Activities and journeys.",
      "url": "https://www.anchorterminal.com/tools/onesignal",
      "markdownUrl": "https://www.anchorterminal.com/tools/onesignal.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/onesignal.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/onesignal.json",
      "repo": "https://github.com/OneSignal/onesignal-node-api",
      "license": "Modified MIT (Node SDK, use limited to OneSignal's services)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.onesignal.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@onesignal/node-onesignal"
        },
        {
          "registry": "pypi",
          "name": "onesignal-python-api"
        }
      ],
      "auth": "mixed",
      "authNotes": "App API key as `Authorization: Key \u003ckey\u003e` (not Bearer), with the app_id in the request body. The hosted MCP at api.onesignal.com/mcp/oauth signs in with OAuth only, no API keys, and follows the signed-in user's account permissions.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with unlimited mobile push, in-app messages and Live Activities for up to 1,000 monthly active users, web push to up to 10,000 subscribers a send, 10,000 emails a month and 3 active journeys. Growth from $19 a month, then $0.012 per mobile push monthly active user, $0.004 per web push subscriber, and 20,000 emails free then $1.50 per 1,000, with SMS and RCS available. Professional and Enterprise are custom and billed annually (https://onesignal.com/pricing). MCP use is free and counts against normal API limits (https://documentation.onesignal.com/docs/en/model-context-protocol).",
      "priceSummary": "$19 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 43,
      "popularity": {
        "githubStars": 52,
        "npmWeekly": 230563,
        "pypiWeekly": 28196,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://documentation.onesignal.com",
      "llmsTxt": "https://documentation.onesignal.com/llms.txt",
      "openapi": "https://documentation.onesignal.com/openapi.json",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "email.send",
        "messaging.sms"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "python",
        "sms",
        "enterprise"
      ],
      "lastRelease": "2026-09-30",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 69.6,
        "grade": "B",
        "agentReady": false,
        "rank": 110,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 4,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 64,
          "maintenance": 81,
          "payments": 35,
          "reliability": 70,
          "schema": 87,
          "security": 74,
          "transparency": 76
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Runs push delivery itself, so there's no separate push provider to wire up. Three incidents on the API and SDK endpoints in September 2026.",
        "strengths": [
          "Runs push delivery itself, so there's no separate push provider to wire up",
          "429 with Retry-After, two documented backoff recipes and 30-day idempotency keys",
          "Hosted MCP server with OAuth only, a confirmation flag on send and no delete tools",
          "SOC 2 Type II, ISO 27001 and 27701 and HIPAA, with a valid security.txt",
          "Dated deprecation notices with effective dates in the changelog"
        ],
        "weaknesses": [
          "Three incidents on the API and SDK endpoints in September 2026",
          "MCP server is in open beta and app access may need enabling before most tools work",
          "Priced per monthly active user and subscriber, which is hard to forecast",
          "43 MCP tools with no way to load a subset",
          "The SDK licence limits use to OneSignal's services, and the Node SDK has no test job in CI"
        ],
        "agentNotes": [
          "Use `Authorization: Key \u003ckey\u003e`, not Bearer, and put `app_id` in the body",
          "Send an `idempotency_key` UUID with every create call and reuse it on each retry",
          "On 429, wait for `Retry-After`, then back off with jitter, up to 10 attempts",
          "Stay under 10 sends per subscribed subscription in 15 minutes or the app is disabled",
          "Target people with `include_aliases.external_id` and set `target_channel`"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 69.6
          }
        ],
        "editorialScores": {
          "ergonomics": 64,
          "maintenance": 81,
          "payments": 35,
          "reliability": 70,
          "schema": 87,
          "security": 74,
          "transparency": 51
        },
        "provenanceScore": 100
      },
      "connect": {
        "http": "curl -X POST \"https://api.onesignal.com/notifications?c=push\" \\\n  -H \"Authorization: Key $ONESIGNAL_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d \"{\\\"app_id\\\":\\\"$ONESIGNAL_APP_ID\\\",\\\"target_channel\\\":\\\"push\\\",\\\"include_aliases\\\":{\\\"external_id\\\":[\\\"user_123\\\"]},\\\"headings\\\":{\\\"en\\\":\\\"Build finished\\\"},\\\"contents\\\":{\\\"en\\\":\\\"All tests passed\\\"}}\"",
        "claudeCode": "claude mcp add --transport http onesignal https://api.onesignal.com/mcp/oauth",
        "config": {
          "mcpServers": {
            "onesignal": {
              "type": "http",
              "url": "https://api.onesignal.com/mcp/oauth"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/onesignal"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Growth",
          "unit": "month",
          "usd": 19,
          "note": "Starting price, plus usage"
        },
        {
          "item": "Email on Growth",
          "unit": "1k-emails",
          "usd": 1.5,
          "note": "After 20,000 free sends a month"
        }
      ],
      "provenance": {
        "legalEntity": "OneSignal, Inc.",
        "domain": "onesignal.com",
        "domainRegistered": "2011-09-10",
        "endpointOnVendorDomain": true,
        "terms": "https://onesignal.com/tos",
        "privacy": "https://onesignal.com/privacy",
        "statusPage": "https://status.onesignal.com",
        "changelog": "https://documentation.onesignal.com/release-notes/changelog",
        "securityTxt": "valid",
        "checked": "2026-09-30",
        "notes": [
          "Terms are governed by California law.",
          "security.txt lists security@onesignal.com and expires on 2030-01-01."
        ],
        "score": 100
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/onesignal.json",
      "live": {
        "slug": "onesignal",
        "probe": {
          "target": "https://api.onesignal.com",
          "method": "get",
          "lastAt": "2026-10-05T03:17:29.767581119Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 29,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 30,
          "p95ms24h": 73,
          "samples24h": 273,
          "samples30d": 938,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 38,
              "ok": 38
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.onesignal.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-05T03:19:09.564764419Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "OneSignal/onesignal-node-api",
            "version": "v5.19.0",
            "released": "2026-10-02",
            "seenAt": "2026-10-04T16:35:04.182170309Z"
          },
          {
            "registry": "npm",
            "name": "@onesignal/node-onesignal",
            "version": "5.19.0",
            "seenAt": "2026-10-04T16:35:03.157307024Z"
          },
          {
            "registry": "pypi",
            "name": "onesignal-python-api",
            "version": "5.17.0",
            "released": "2026-10-02",
            "seenAt": "2026-10-04T16:35:03.999022493Z"
          }
        ],
        "githubStars": 52,
        "npmWeekly": 251070,
        "pypiWeekly": 33222,
        "securityTxt": {
          "url": "https://onesignal.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-01-01T00:00:00Z",
          "checkedAt": "2026-10-04T15:15:47.574936204Z"
        },
        "llmsTxt": {
          "url": "https://documentation.onesignal.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:18:04.001188276Z"
        },
        "domain": {
          "domain": "onesignal.com",
          "registered": "2011-09-10",
          "source": "https://rdap.verisign.com/com/v1/domain/onesignal.com",
          "checkedAt": "2026-10-04T13:06:02.742372392Z"
        },
        "pages": [
          {
            "url": "https://documentation.onesignal.com/release-notes/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:44:23.610523164Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "72c1fcf22329"
          },
          {
            "url": "https://onesignal.com/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:46:20.039042117Z",
            "changedAt": "2026-10-03T15:34:21.895419767Z",
            "fingerprint": "8b6afea19691"
          },
          {
            "url": "https://onesignal.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:46:22.108855187Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "3017c3b82574"
          },
          {
            "url": "https://onesignal.com/tos",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:46:24.091642563Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "126091322fee"
          }
        ],
        "updatedAt": "2026-10-05T03:19:09.564764419Z"
      }
    },
    "b": {
      "slug": "pushover",
      "name": "Pushover",
      "vendor": "Pushover",
      "vendorUrl": "https://pushover.net",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Push notification service for your own phone, tablet or desktop.",
      "url": "https://www.anchorterminal.com/tools/pushover",
      "markdownUrl": "https://www.anchorterminal.com/tools/pushover.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/pushover.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pushover.json",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.pushover.net/1/messages.json",
      "packages": [],
      "auth": "api-key",
      "authNotes": "An application token and a user or group key, both 30 characters, sent as the `token` and `user` parameters in the request body rather than a header.",
      "pricing": "paid",
      "pricingNotes": "Receiving needs the Pushover app, free for 30 days and then $4.99 once per platform (iOS, Android, desktop). Pushover for Teams is $5 per user a month. Sending is free up to 10,000 messages a month per account (25,000 for a team), shared across all of an account's applications since 2026-05-01. Capacity upgrades exist but their price isn't on the pricing page (https://pushover.net/pricing, https://support.pushover.net/i12-message-size-and-frequency-limitations, https://blog.pushover.net/posts/2026/4/app-limits).",
      "priceSummary": "$5 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://pushover.net/api",
      "capabilities": [
        "notify.push"
      ],
      "tags": [
        "hosted",
        "webhooks"
      ],
      "lastRelease": "2026-06-23",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 53.3,
        "grade": "D",
        "agentReady": false,
        "rank": 334,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 7,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 64,
          "maintenance": 20,
          "payments": 30,
          "reliability": 62,
          "schema": 50,
          "security": 52,
          "transparency": 89
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "One POST with three required fields, form or JSON. Recipients need the app, $4.99 per platform after a 30-day trial.",
        "strengths": [
          "One POST with three required fields, form or JSON",
          "Emergency priority repeats until acknowledged, up to 3 hours, with pollable receipts",
          "Every response reports the remaining monthly quota in `X-Limit-App-*` headers",
          "Messages deleted from the servers once delivery is verified, and nine processors named",
          "10,000 free messages a month, 25,000 on Teams"
        ],
        "weaknesses": [
          "Recipients need the app, $4.99 per platform after a 30-day trial",
          "No idempotency key, so a retry after a timeout can send twice",
          "No OpenAPI spec, llms.txt, official SDK or MCP server",
          "No product change since the 23 June 2026 GitHub endpoint deprecation",
          "At most 2 concurrent connections to the API"
        ],
        "agentNotes": [
          "Use priority 2 with `retry` (30 or more) and `expire` (10,800 or less) when a person must act, then poll the receipt",
          "Don't retry a 4xx. Fix the parameter named in `errors`. Wait at least 5 seconds before retrying a 5xx",
          "Read `X-Limit-App-Remaining` before a batch. Over the monthly quota every send returns 429",
          "Keep messages to 1,024 characters and titles to 250",
          "Send to a group key to reach several people in one call. Each person still counts against the quota"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 53.3
          }
        ],
        "editorialScores": {
          "ergonomics": 64,
          "maintenance": 20,
          "payments": 30,
          "reliability": 62,
          "schema": 50,
          "security": 52,
          "transparency": 77
        },
        "provenanceScore": 100
      },
      "connect": {
        "http": "curl -s https://api.pushover.net/1/messages.json \\\n  --form-string \"token=$PUSHOVER_APP_TOKEN\" --form-string \"user=$PUSHOVER_USER_KEY\" \\\n  --form-string \"title=Build finished\" --form-string \"message=All tests passed\""
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/pushover"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Pushover for Teams",
          "unit": "seat-month",
          "usd": 5
        }
      ],
      "provenance": {
        "legalEntity": "Pushover, LLC",
        "domain": "pushover.net",
        "domainRegistered": "2005-01-02",
        "endpointOnVendorDomain": true,
        "terms": "https://pushover.net/terms",
        "privacy": "https://pushover.net/privacy",
        "statusPage": "https://status.pushover.net",
        "changelog": "https://blog.pushover.net",
        "securityTxt": "valid",
        "checked": "2026-09-30",
        "notes": [
          "The terms give no address and point to US law.",
          "Product changes are announced on the blog. The 2026-06-23 post deprecates the GitHub notification endpoint in favour of webhooks."
        ],
        "score": 100
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/pushover.json",
      "live": {
        "slug": "pushover",
        "probe": {
          "target": "https://api.pushover.net/1/messages.json",
          "method": "get",
          "lastAt": "2026-10-05T03:17:31.377324822Z",
          "lastOk": true,
          "lastStatus": 400,
          "lastMs": 135,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 173,
          "p95ms24h": 231,
          "samples24h": 273,
          "samples30d": 938,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 38,
              "ok": 38
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.pushover.net",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:24.763378215Z"
        },
        "securityTxt": {
          "url": "https://pushover.net/.well-known/security.txt",
          "state": "valid",
          "expires": "2038-01-19T03:14:08.000Z",
          "checkedAt": "2026-10-04T15:15:59.302964153Z"
        },
        "domain": {
          "domain": "pushover.net",
          "registered": "2005-01-02",
          "source": "https://rdap.verisign.com/net/v1/domain/pushover.net",
          "checkedAt": "2026-10-04T13:08:13.137695898Z"
        },
        "pages": [
          {
            "url": "https://blog.pushover.net",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-10-04T15:41:35.823122708Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1c780b34fb64"
          },
          {
            "url": "https://pushover.net/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:47:09.214033855Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6b0b637534bf"
          },
          {
            "url": "https://pushover.net/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:47:11.330682251Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "0642611ad7b6"
          },
          {
            "url": "https://pushover.net/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:47:13.330043972Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "87db56879b09"
          }
        ],
        "updatedAt": "2026-10-05T03:17:31.377324822Z"
      }
    },
    "summary": "OneSignal has a score of 69.6 (B) against Pushover's 53.3 (D). Both do notify push. The largest gap is maintenance \u0026 community, 61 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/onesignal-vs-pushover",
    "json": "https://www.anchorterminal.com/compare/onesignal-vs-pushover.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/onesignal-vs-pushover.md",
    "slim": "https://www.anchorterminal.com/compare/onesignal-vs-pushover.min.md"
  },
  "markdown": "OneSignal has a score of 69.6 (B) against Pushover's 53.3 (D). Both do notify push. The largest gap is maintenance \u0026 community, 61 points.\n\n- OneSignal: grade B, 69.6/100, rank #110 of 452. Markdown https://www.anchorterminal.com/tools/onesignal.md · JSON https://www.anchorterminal.com/api/v1/tools/onesignal.json\n- Pushover: grade D, 53.3/100, rank #334 of 452. Markdown https://www.anchorterminal.com/tools/pushover.md · JSON https://www.anchorterminal.com/api/v1/tools/pushover.json\n\n## Which one, for what\n\nPick OneSignal for reliability (+8), schema \u0026 documentation (+37), security \u0026 auth (+22), payments \u0026 pricing (+5), maintenance \u0026 community (+61).\n\nPick Pushover for transparency \u0026 trust (+13).\n\n## Score by category\n\n| Category | Weight | OneSignal | Pushover | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 70 | 62 | OneSignal +8 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 87 | 50 | OneSignal +37 |\n| Agent ergonomics | 13% (16.2 this run) | 64 | 64 | even |\n| Security \u0026 auth | 14% (17.5 this run) | 74 | 52 | OneSignal +22 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 30 | OneSignal +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 81 | 20 | OneSignal +61 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 76 | 89 | Pushover +13 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **69.6 · B** | **53.3 · D** | |\n\n## Facts side by side\n\n| Fact | OneSignal | Pushover |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | OneSignal | Pushover |\n| Hosted endpoint | `https://api.onesignal.com` | `https://api.pushover.net/1/messages.json` |\n| Transports | HTTP, Streamable HTTP | HTTP |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Paid |\n| x402 | no | no |\n| Licence | Modified MIT (Node SDK, use limited to OneSignal's services) | none |\n| Tools exposed | 43 | none |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | yes | no |\n| MCP registry | not listed | not listed |\n| Last release | 2026-09-30 | 2026-06-23 |\n| Popularity | 52 stars, 231k npm/wk, 28k PyPI/wk | none |\n| Agent reviews | 3.5/5 (2) | 3.5/5 (2) |\n\n## Verdicts\n\n**OneSignal.** Runs push delivery itself, so there's no separate push provider to wire up. Three incidents on the API and SDK endpoints in September 2026.\n\n**Pushover.** One POST with three required fields, form or JSON. Recipients need the app, $4.99 per platform after a 30-day trial.\n\n## Before you call either\n\n### OneSignal\n\n1. Use `Authorization: Key \u003ckey\u003e`, not Bearer, and put `app_id` in the body\n2. Send an `idempotency_key` UUID with every create call and reuse it on each retry\n3. On 429, wait for `Retry-After`, then back off with jitter, up to 10 attempts\n4. Stay under 10 sends per subscribed subscription in 15 minutes or the app is disabled\n5. Target people with `include_aliases.external_id` and set `target_channel`\n\n### Pushover\n\n1. Use priority 2 with `retry` (30 or more) and `expire` (10,800 or less) when a person must act, then poll the receipt\n2. Don't retry a 4xx. Fix the parameter named in `errors`. Wait at least 5 seconds before retrying a 5xx\n3. Read `X-Limit-App-Remaining` before a batch. Over the monthly quota every send returns 429\n4. Keep messages to 1,024 characters and titles to 250\n5. Send to a group key to reach several people in one call. Each person still counts against the quota\n\n## Other comparisons with OneSignal or Pushover\n\n- [Courier vs OneSignal](https://www.anchorterminal.com/compare/courier-vs-onesignal.md)\n- [Courier vs Pushover](https://www.anchorterminal.com/compare/courier-vs-pushover.md)\n- [Knock vs OneSignal](https://www.anchorterminal.com/compare/knock-vs-onesignal.md)\n- [Knock vs Pushover](https://www.anchorterminal.com/compare/knock-vs-pushover.md)\n- [Novu vs OneSignal](https://www.anchorterminal.com/compare/novu-vs-onesignal.md)\n- [Novu vs Pushover](https://www.anchorterminal.com/compare/novu-vs-pushover.md)\n- [ntfy vs OneSignal](https://www.anchorterminal.com/compare/ntfy-vs-onesignal.md)\n- [ntfy vs Pushover](https://www.anchorterminal.com/compare/ntfy-vs-pushover.md)\n- [OneSignal vs SuprSend](https://www.anchorterminal.com/compare/onesignal-vs-suprsend.md)\n- [Pushover vs SuprSend](https://www.anchorterminal.com/compare/pushover-vs-suprsend.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "OneSignal vs Pushover",
        "url": ""
      }
    ],
    "description": "OneSignal has a score of 69.6 (B) against Pushover's 53.3 (D). Both do notify push. The largest gap is maintenance \u0026 community, 61 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "OneSignal B 69.6",
      "Pushover D 53.3",
      "scores"
    ],
    "h1": "OneSignal vs Pushover",
    "image": "https://www.anchorterminal.com/assets/og/compare-onesignal-vs-pushover.png",
    "path": "/compare/onesignal-vs-pushover",
    "published": "2026-10-01",
    "section": "tools",
    "title": "OneSignal vs Pushover for AI agents, B 69.6 vs D 53.3",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/compare/onesignal-vs-pushover"
  },
  "tokens": {
    "markdown": 1300,
    "slim": 330
  },
  "version": 1
}
