{
  "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-04T23:32:51.440511282Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 33,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 30,
          "p95ms24h": 69,
          "samples24h": 272,
          "samples30d": 895,
          "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": 267,
              "ok": 267
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.onesignal.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-04T23:27:54.367113783Z"
        },
        "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-04T23:32:51.440511282Z"
      }
    },
    "b": {
      "slug": "suprsend",
      "name": "SuprSend",
      "vendor": "SuprSend",
      "vendorUrl": "https://www.suprsend.com",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Notification workflow API for email, SMS, push, an in-app Inbox, Slack, Microsoft Teams and webhooks, with digests, batching and preferences per user and per tenant.",
      "url": "https://www.anchorterminal.com/tools/suprsend",
      "markdownUrl": "https://www.anchorterminal.com/tools/suprsend.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/suprsend.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/suprsend.json",
      "repo": "https://github.com/suprsend/cli",
      "license": "MIT (CLI and MCP server)",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://hub.suprsend.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@suprsend/node-sdk"
        },
        {
          "registry": "pypi",
          "name": "suprsend-py-sdk"
        },
        {
          "registry": "npm",
          "name": "suprsend"
        }
      ],
      "auth": "api-key",
      "authNotes": "API key as `Authorization: Bearer` on the trigger API. Workspace key and secret pairs can be issued and rotated per service through the management API since 2026-09-22. The MCP server reads a service token from `SUPRSEND_SERVICE_TOKEN`, and a service token grants full workspace access.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with 10,000 notifications a month, no card, unlimited team members and 30-day log retention. Essentials $110 a month ($100 billed yearly, $1,200 a year) for 50,000, then $2 per 1,000, with 30-day logs. Business $275 a month ($250 billed yearly, $3,000 a year) for 50,000, then $5 per 1,000, with 90-day logs and an audit trail. Paid plans list 99.9% uptime. Enterprise is custom. A notification is one message to one user or object on one channel, a digest or batch counts once, and sends SuprSend drops for opt-outs aren't billed, though provider failures are (https://www.suprsend.com/pricing).",
      "priceSummary": "$110 / mo",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 12,
        "npmWeekly": 13318,
        "pypiWeekly": 1099,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.suprsend.com",
      "llmsTxt": "https://docs.suprsend.com/llms.txt",
      "openapi": "https://docs.suprsend.com/openapi.yaml",
      "registryName": "io.github.suprsend/cli",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "notify.preferences",
        "notify.digest"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "python",
        "webhooks",
        "enterprise"
      ],
      "lastRelease": "2026-09-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 72.9,
        "grade": "BB",
        "agentReady": true,
        "rank": 65,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 2,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 87,
          "maintenance": 81,
          "payments": 40,
          "reliability": 69,
          "schema": 94,
          "security": 66,
          "transparency": 69
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "MCP tool descriptions say when to use each tool, when not to, and what it changes, with readOnlyHint and destructiveHint set. No rate-limit page or 429 guidance.",
        "strengths": [
          "MCP tool descriptions say when to use each tool, when not to, and what it changes, with readOnlyHint and destructiveHint set",
          "`--tools` loads a subset of the 22 built-in tools, and trigger tools register only for the workflows you name",
          "Free plan with 10,000 notifications, no card and unlimited seats",
          "Digests and batches bill as one notification, and opt-out drops aren't billed",
          "99.9% uptime listed on every paid plan, SOC 2 Type II and ISO 27001"
        ],
        "weaknesses": [
          "No rate-limit page or 429 guidance",
          "No hosted MCP server, only the local CLI",
          "Workspace secrets come back in plain text on every management API response",
          "A 20-minute platform outage on 20 August 2026 and repeated short API blips",
          "Audit trail on Business and Enterprise only, RBAC on Enterprise only"
        ],
        "agentNotes": [
          "Pass an idempotency key on each trigger. It holds for 24 hours",
          "Start the MCP server with `--tools` set to read-only groups for production workspaces",
          "Register trigger tools with `--workflows=\u003cslug\u003e` for only the workflows you need. The default registers none",
          "Count each bulk record against the rate limit, and keep bulk calls to 100 records and 800 KB",
          "Treat management API responses as secrets. They include the workspace secret in plain text"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 72.9
          }
        ],
        "editorialScores": {
          "ergonomics": 87,
          "maintenance": 81,
          "payments": 40,
          "reliability": 69,
          "schema": 94,
          "security": 66,
          "transparency": 52
        },
        "provenanceScore": 86
      },
      "connect": {
        "http": "curl -X POST https://hub.suprsend.com/trigger/ \\\n  -H \"Authorization: Bearer $SUPRSEND_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"workflow\":\"build-finished\",\"recipients\":[{\"distinct_id\":\"user_123\",\"$email\":[\"user@example.com\"]}],\"data\":{\"status\":\"passed\"}}'",
        "claudeCode": "claude mcp add suprsend --scope user --env SUPRSEND_SERVICE_TOKEN=$SUPRSEND_SERVICE_TOKEN -- npx -y suprsend start-mcp-server",
        "config": {
          "mcpServers": {
            "suprsend": {
              "args": [
                "-y",
                "suprsend",
                "start-mcp-server"
              ],
              "command": "npx",
              "env": {
                "SUPRSEND_SERVICE_TOKEN": "${SUPRSEND_SERVICE_TOKEN}"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/suprsend"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Essentials",
          "unit": "month",
          "usd": 110,
          "note": "50,000 notifications, $100 billed yearly"
        },
        {
          "item": "Essentials overage",
          "unit": "message",
          "usd": 0.002
        },
        {
          "item": "Business",
          "unit": "month",
          "usd": 275,
          "note": "50,000 notifications, $250 billed yearly"
        },
        {
          "item": "Business overage",
          "unit": "message",
          "usd": 0.005
        }
      ],
      "provenance": {
        "legalEntity": "SuprStack Inc",
        "domain": "suprsend.com",
        "domainRegistered": "2020-12-27",
        "endpointOnVendorDomain": true,
        "terms": "https://www.suprsend.com/terms",
        "privacy": "https://www.suprsend.com/privacy",
        "statusPage": "https://status.suprsend.com",
        "changelog": "https://docs.suprsend.com/changelog/overview",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "Terms are governed by Delaware law and give only a support email, no postal address.",
          "The status page showed Third Party Dependencies as degraded (a Cloudflare Workers issue) when we checked."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/suprsend.json",
      "live": {
        "slug": "suprsend",
        "probe": {
          "target": "https://hub.suprsend.com",
          "method": "get",
          "lastAt": "2026-10-04T23:32:55.045670768Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 69,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 79,
          "p95ms24h": 164,
          "samples24h": 272,
          "samples30d": 895,
          "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": 267,
              "ok": 267
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.suprsend.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:30.40729232Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "suprsend/cli",
            "version": "1.0.1",
            "released": "2026-07-10",
            "seenAt": "2026-10-04T16:41:11.848846833Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.suprsend/cli",
            "version": "1.0.1",
            "seenAt": "2026-10-03T23:29:28.630222764Z"
          },
          {
            "registry": "npm",
            "name": "@suprsend/node-sdk",
            "version": "1.15.1",
            "seenAt": "2026-10-04T16:41:09.61896764Z"
          },
          {
            "registry": "npm",
            "name": "suprsend",
            "version": "1.0.1",
            "seenAt": "2026-10-04T16:41:10.296582788Z"
          },
          {
            "registry": "pypi",
            "name": "suprsend-py-sdk",
            "version": "0.20.0",
            "released": "2026-09-04",
            "seenAt": "2026-10-04T16:41:10.111791733Z"
          }
        ],
        "githubStars": 12,
        "npmWeekly": 11125,
        "pypiWeekly": 1074,
        "securityTxt": {
          "url": "https://suprsend.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:47.168187763Z"
        },
        "llmsTxt": {
          "url": "https://docs.suprsend.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:18:16.733762415Z"
        },
        "domain": {
          "domain": "suprsend.com",
          "registered": "2020-12-27",
          "source": "https://rdap.verisign.com/com/v1/domain/suprsend.com",
          "checkedAt": "2026-10-04T13:10:03.719103966Z"
        },
        "pages": [
          {
            "url": "https://docs.suprsend.com/changelog/overview",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:44:04.269843354Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "a51b9d1cfccd"
          },
          {
            "url": "https://www.suprsend.com/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-04T15:52:20.807951625Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "9b909a363f19"
          },
          {
            "url": "https://www.suprsend.com/privacy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-04T15:52:22.910384524Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "73c6e3ac26d2"
          },
          {
            "url": "https://www.suprsend.com/terms",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-04T15:52:24.877528099Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "97053f0651bd"
          }
        ],
        "updatedAt": "2026-10-04T23:32:55.045670768Z"
      }
    },
    "summary": "SuprSend has a score of 72.9 (BB) against OneSignal's 69.6 (B). Both do notify push. The largest gap is agent ergonomics, 23 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend",
    "json": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend.md",
    "slim": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend.min.md"
  },
  "markdown": "SuprSend has a score of 72.9 (BB) against OneSignal's 69.6 (B). Both do notify push. The largest gap is agent ergonomics, 23 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- SuprSend: grade BB, 72.9/100, rank #65 of 452. Markdown https://www.anchorterminal.com/tools/suprsend.md · JSON https://www.anchorterminal.com/api/v1/tools/suprsend.json\n\n## Which one, for what\n\nPick OneSignal for security \u0026 auth (+8), transparency \u0026 trust (+7).\n\nPick SuprSend for schema \u0026 documentation (+7), agent ergonomics (+23), payments \u0026 pricing (+5).\n\n## Score by category\n\n| Category | Weight | OneSignal | SuprSend | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 70 | 69 | OneSignal +1 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 87 | 94 | SuprSend +7 |\n| Agent ergonomics | 13% (16.2 this run) | 64 | 87 | SuprSend +23 |\n| Security \u0026 auth | 14% (17.5 this run) | 74 | 66 | OneSignal +8 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 40 | SuprSend +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 81 | 81 | even |\n| Transparency \u0026 trust | 7% (8.8 this run) | 76 | 69 | OneSignal +7 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **69.6 · B** | **72.9 · BB** | |\n\n## Facts side by side\n\n| Fact | OneSignal | SuprSend |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | OneSignal | SuprSend |\n| Hosted endpoint | `https://api.onesignal.com` | `https://hub.suprsend.com` |\n| Transports | HTTP, Streamable HTTP | HTTP, stdio |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Modified MIT (Node SDK, use limited to OneSignal's services) | MIT (CLI and MCP server) |\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 | yes |\n| llms.txt | yes | yes |\n| MCP registry | not listed | `io.github.suprsend/cli` |\n| Last release | 2026-09-30 | 2026-09-28 |\n| Popularity | 52 stars, 231k npm/wk, 28k PyPI/wk | 12 stars, 13k npm/wk, 1.1k PyPI/wk |\n| Agent reviews | 3.5/5 (2) | 3/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**SuprSend.** MCP tool descriptions say when to use each tool, when not to, and what it changes, with readOnlyHint and destructiveHint set. No rate-limit page or 429 guidance.\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### SuprSend\n\n1. Pass an idempotency key on each trigger. It holds for 24 hours\n2. Start the MCP server with `--tools` set to read-only groups for production workspaces\n3. Register trigger tools with `--workflows=\u003cslug\u003e` for only the workflows you need. The default registers none\n4. Count each bulk record against the rate limit, and keep bulk calls to 100 records and 800 KB\n5. Treat management API responses as secrets. They include the workspace secret in plain text\n\n## Other comparisons with OneSignal or SuprSend\n\n- [Courier vs OneSignal](https://www.anchorterminal.com/compare/courier-vs-onesignal.md)\n- [Courier vs SuprSend](https://www.anchorterminal.com/compare/courier-vs-suprsend.md)\n- [Knock vs OneSignal](https://www.anchorterminal.com/compare/knock-vs-onesignal.md)\n- [Knock vs SuprSend](https://www.anchorterminal.com/compare/knock-vs-suprsend.md)\n- [Novu vs OneSignal](https://www.anchorterminal.com/compare/novu-vs-onesignal.md)\n- [Novu vs SuprSend](https://www.anchorterminal.com/compare/novu-vs-suprsend.md)\n- [ntfy vs OneSignal](https://www.anchorterminal.com/compare/ntfy-vs-onesignal.md)\n- [ntfy vs SuprSend](https://www.anchorterminal.com/compare/ntfy-vs-suprsend.md)\n- [OneSignal vs Pushover](https://www.anchorterminal.com/compare/onesignal-vs-pushover.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-04",
    "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 SuprSend",
        "url": ""
      }
    ],
    "description": "SuprSend has a score of 72.9 (BB) against OneSignal's 69.6 (B). Both do notify push. The largest gap is agent ergonomics, 23 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "OneSignal B 69.6",
      "SuprSend BB 72.9",
      "scores"
    ],
    "h1": "OneSignal vs SuprSend",
    "image": "https://www.anchorterminal.com/assets/og/compare-onesignal-vs-suprsend.png",
    "path": "/compare/onesignal-vs-suprsend",
    "published": "2026-10-01",
    "section": "tools",
    "title": "OneSignal vs SuprSend for AI agents, B 69.6 vs BB 72.9",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend"
  },
  "tokens": {
    "markdown": 1350,
    "slim": 330
  },
  "version": 1
}
