{
  "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.3,
        "grade": "B",
        "agentReady": false,
        "rank": 189,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 5,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 64,
          "maintenance": 81,
          "payments": 35,
          "reliability": 70,
          "schema": 87,
          "security": 74,
          "transparency": 72
        },
        "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.",
        "bestFor": "A team whose main channel is push to its own mobile or web app and who wants delivery handled without a separate push provider.",
        "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.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 69.3
          }
        ],
        "editorialScores": {
          "ergonomics": 64,
          "maintenance": 81,
          "payments": 35,
          "reliability": 70,
          "schema": 87,
          "security": 74,
          "transparency": 51
        },
        "provenanceScore": 93
      },
      "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": 93
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/onesignal.json",
      "live": {
        "slug": "onesignal",
        "probe": {
          "target": "https://api.onesignal.com",
          "method": "get",
          "lastAt": "2026-10-10T02:07:18.619459141Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 35,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 32,
          "p95ms24h": 83,
          "samples24h": 250,
          "samples30d": 2256,
          "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": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 22,
              "ok": 22
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.onesignal.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T02:06:10.843958758Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "OneSignal/onesignal-node-api",
            "version": "v5.19.0",
            "released": "2026-10-02",
            "seenAt": "2026-10-09T17:09:40.228674211Z"
          },
          {
            "registry": "npm",
            "name": "@onesignal/node-onesignal",
            "version": "5.19.0",
            "seenAt": "2026-10-09T17:09:39.134859976Z"
          },
          {
            "registry": "pypi",
            "name": "onesignal-python-api",
            "version": "5.17.0",
            "released": "2026-10-02",
            "seenAt": "2026-10-09T17:09:40.041031164Z"
          }
        ],
        "githubStars": 52,
        "npmWeekly": 186734,
        "pypiWeekly": 34446,
        "securityTxt": {
          "url": "https://onesignal.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-01-01T00:00:00Z",
          "checkedAt": "2026-10-09T15:39:22.868190629Z"
        },
        "llmsTxt": {
          "url": "https://documentation.onesignal.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-09T14:02:28.911078653Z"
        },
        "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-09T18:38:56.966610228Z",
            "changedAt": "2026-10-06T16:08:56.646152433Z",
            "fingerprint": "11ec774768cf"
          },
          {
            "url": "https://onesignal.com/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-09T18:42:35.340059547Z",
            "changedAt": "2026-10-03T15:34:21.895419767Z",
            "fingerprint": "8b6afea19691"
          },
          {
            "url": "https://onesignal.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:42:37.387839111Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "3017c3b82574"
          },
          {
            "url": "https://onesignal.com/tos",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:42:39.372015281Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "126091322fee"
          }
        ],
        "updatedAt": "2026-10-10T02:07:18.619459141Z"
      }
    },
    "answer": "OneSignal scores 69.3 (B) on agent readiness against Pingram's 57.4 (C), and leads in 4 of 7 scored categories. Pingram leads on payments \u0026 pricing.",
    "b": {
      "slug": "pingram",
      "name": "Pingram",
      "vendor": "Pingram",
      "vendorUrl": "https://www.pingram.io",
      "kind": "http-api",
      "category": "notifications",
      "summary": "Pingram, formerly NotificationAPI, is a hosted messaging API that sends email and SMS and receives replies by webhook. Agents reach it through a REST API, seven server SDKs, a CLI and a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/pingram",
      "markdownUrl": "https://www.anchorterminal.com/tools/pingram.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/pingram.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pingram.json",
      "repo": "https://github.com/pingram-io/pingram-go",
      "license": "Proprietary service under Pingram's terms of service. The Node.js SDK and CLI are MIT on npm. The Go SDK repository has no licence file",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://mcp.pingram.io",
      "packages": [
        {
          "registry": "npm",
          "name": "pingram"
        },
        {
          "registry": "npm",
          "name": "pingram-cli"
        },
        {
          "registry": "go",
          "name": "github.com/pingram-io/pingram-go"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve. REST calls to `https://api.pingram.io` take an API key as `Authorization: Bearer`. Keys are created in the dashboard or through `POST /keys`, are secret or public, can be tied to one environment and can be revoked. The API reference also lists Basic schemes for client credentials and end users. The hosted MCP server uses OAuth sign-in with the dashboard account (email, Google or Microsoft) and has that user's access on every account they belong to. No scopes were found.",
      "pricing": "freemium",
      "pricingNotes": "Free tier of 3,000 emails and 100 SMS a month with one local number, no card, so an agent's owner can start without a contract. Paid plans are monthly budgets from $20 to $1,000 drawn down at per-message rates, $0.0005 an email and SMS by country ($0.0100 a segment to the United States). Unused balance does not roll over. Enterprise add-on from $800 a month (https://www.pingram.io/pricing).",
      "priceSummary": "$20 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs, the pricing page, llms.txt or the API reference (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 1,
        "npmWeekly": 12699,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://www.pingram.io/docs",
      "llmsTxt": "https://www.pingram.io/llms.txt",
      "registryName": "io.pingram/mcp",
      "capabilities": [
        "notify.multichannel",
        "notify.push",
        "notify.in-app",
        "email.send",
        "email.inbound",
        "email.domains",
        "messaging.sms",
        "messaging.mms",
        "messaging.inbound"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "oauth",
        "llms-txt",
        "typescript",
        "python",
        "go",
        "webhooks",
        "status-page",
        "soc2"
      ],
      "lastRelease": "2026-10-08",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 57.4,
        "grade": "C",
        "agentReady": false,
        "rank": 611,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 11,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 81,
          "payments": 40,
          "reliability": 58,
          "schema": 69,
          "security": 51,
          "transparency": 54
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": -2,
        "negativeNotes": [
          "2026-10-09. `llms.txt` and `llms-full.txt`, the files Pingram publishes for AI systems, give the paid plan as from $9 a month, while the pricing page's lowest paid budget is $20. `llms.txt` also links the API reference at an address that answers 403 (https://www.pingram.io/llms.txt, https://www.pingram.io/pricing). 2 points."
        ],
        "verdict": "Email and SMS go out through one REST call with built-in delivery, per-message prices are public and the free tier needs no card. No rate limits or idempotency keys were found in the reviewed documentation, and the MCP connector acts with the signed-in user's whole account.",
        "bestFor": "An agent that needs to send transactional email and SMS and read replies through one account without separate carrier or SMTP providers.",
        "strengths": [
          "Email costs $0.0005 a message and SMS is priced per country on a public page, with a free tier of 3,000 emails and 100 SMS a month and no card",
          "Hosted MCP server at `https://mcp.pingram.io` with OAuth sign-in and regional hosts for Canada and the EU, listed in the official MCP registry",
          "Error responses carry a `trackingId` and an `error` object with `code`, `message` and an optional `fix` hint",
          "A dated changelog with a JSON feed shows more than 25 entries between 16 September and 7 October 2026",
          "security.txt valid to 13 September 2027 and a vulnerability disclosure policy with safe harbour, dated 14 September 2026"
        ],
        "weaknesses": [
          "The terms of service forbid using the service for benchmarking. This matters before any probe is run",
          "No request rate limits, 429 handling or idempotency key for sends were found in the reviewed documentation",
          "The MCP connector has the signed-in user's access across every account they belong to, with no scopes or read-only mode found",
          "`llms.txt` gives a paid plan from $9 a month and links an API reference address that answers 403. The pricing page starts paid plans at $20",
          "RBAC, SAML and internal audit logs are sold only in the Enterprise add-on, which starts at $800 a month"
        ],
        "agentNotes": [
          "Use the API host for the account's region. The key and region (`us`, `eu` or `ca`) come from the API Keys page in the dashboard",
          "Keep the `trackingId` from each send and check Logs before retrying. No idempotency key was found, so a blind retry can send twice",
          "Pass `accountId` on MCP tools when the user belongs to several accounts. Without it the tools use the earliest account joined",
          "Create broadcasts as drafts only. Pingram's own skill says a person must send a broadcast from the dashboard",
          "Expect 402 when the monthly budget is spent. Unused balance does not roll over"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 57.4
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 81,
          "payments": 40,
          "reliability": 58,
          "schema": 69,
          "security": 51,
          "transparency": 47
        },
        "provenanceScore": 60
      },
      "connect": {
        "install": "npm install pingram",
        "http": "curl -X POST https://api.pingram.io/email \\\n  -H \"Authorization: Bearer $PINGRAM_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"type\":\"welcome\",\"to\":\"user@example.com\",\"subject\":\"Welcome\",\"html\":\"\u003cp\u003eHello\u003c/p\u003e\"}'",
        "config": {
          "mcpServers": {
            "pingram": {
              "url": "https://mcp.pingram.io"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/notify.multichannel",
        "tool": "https://letme.dev/pingram"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Email",
          "unit": "1k-emails",
          "usd": 0.5
        },
        {
          "item": "SMS to the United States",
          "unit": "message",
          "usd": 0.01,
          "note": "per segment, carrier fee included"
        },
        {
          "item": "SMS to Canada",
          "unit": "message",
          "usd": 0.015,
          "note": "per segment, carrier fee included"
        },
        {
          "item": "Lowest paid budget",
          "unit": "month",
          "usd": 20,
          "note": "about 2,000 US SMS or 40,000 emails"
        },
        {
          "item": "Extra local phone number",
          "unit": "month",
          "usd": 0.5
        },
        {
          "item": "Enterprise add-on",
          "unit": "month",
          "usd": 800,
          "note": "starting price, on top of a paid budget"
        }
      ],
      "provenance": {
        "legalEntity": "",
        "domain": "pingram.io",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://www.pingram.io/terms-of-service",
        "privacy": "https://www.pingram.io/privacy-policy",
        "statusPage": "https://status.pingram.io",
        "changelog": "https://www.pingram.io/changelog",
        "securityTxt": "valid",
        "checked": "2026-10-09",
        "notes": [
          "No legal entity is named. The terms, privacy policy and footer say Pingram or Pingram™, at 170 Water St., #0200, St. John's, Newfoundland and Labrador, Canada.",
          "The terms (last updated 16 April 2025) cover the website, APIs and related services, and are governed by the law of Newfoundland and Labrador.",
          "The API answers at api.pingram.io and the MCP server at mcp.pingram.io, both on the vendor's domain.",
          "security.txt names security@pingram.io and expires on 13 September 2027.",
          "RDAP for pingram.io answered 404 through rdap.org, so no registration date is recorded."
        ],
        "score": 60
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/pingram.json",
      "live": {
        "slug": "pingram",
        "probe": {
          "target": "https://mcp.pingram.io",
          "method": "get",
          "lastAt": "2026-10-10T02:07:20.310675584Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 306,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 305,
          "p95ms24h": 483,
          "samples24h": 107,
          "samples30d": 107,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 85
            },
            {
              "date": "2026-10-10",
              "probes": 22,
              "ok": 22
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.pingram.io",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T02:06:23.501559278Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "pingram",
            "version": "1.0.38",
            "seenAt": "2026-10-09T17:13:00.934046118Z"
          },
          {
            "registry": "npm",
            "name": "pingram-cli",
            "version": "1.0.20",
            "seenAt": "2026-10-09T17:13:01.370409108Z"
          }
        ],
        "githubStars": 1,
        "npmWeekly": 12699,
        "pages": [
          {
            "url": "https://www.pingram.io/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:53:04.217531365Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "3ff49dfdb708"
          },
          {
            "url": "https://www.pingram.io/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-09T18:53:06.703182666Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "c41e8c804eec"
          },
          {
            "url": "https://www.pingram.io/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:53:08.791743628Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "253bc47822ca"
          },
          {
            "url": "https://www.pingram.io/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:53:10.238064171Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "bf1565dd261f"
          }
        ],
        "updatedAt": "2026-10-10T02:07:20.310675584Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "OneSignal",
        "b": "Pingram",
        "name": "Vendor"
      },
      {
        "a": "https://api.onesignal.com",
        "b": "https://mcp.pingram.io",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Modified MIT (Node SDK, use limited to OneSignal's services)",
        "b": "Proprietary service under Pingram's terms of service. The Node.js SDK and CLI are MIT on npm. The Go SDK repository has no licence file",
        "name": "Licence"
      },
      {
        "a": "43",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.pingram/mcp",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-30",
        "b": "2026-10-08",
        "name": "Last release"
      },
      {
        "a": "2024-06-12",
        "b": "2025-04-16",
        "name": "Terms last updated"
      },
      {
        "a": "couldn't be read",
        "b": "2025-04-16",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "52 stars, 231k npm/wk, 28k PyPI/wk",
        "b": "1 stars, 13k npm/wk",
        "name": "Popularity"
      },
      {
        "a": "3.5/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "OneSignal scores 69.3 (B) on agent readiness against Pingram's 57.4 (C), and leads in 4 of 7 scored categories. Pingram leads on payments \u0026 pricing.",
        "question": "Which is better for AI agents, OneSignal or Pingram?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do OneSignal and Pingram need an API key?"
      },
      {
        "answer": "Yes. OneSignal has a hosted endpoint at https://api.onesignal.com and Pingram at https://mcp.pingram.io.",
        "question": "Can an agent call OneSignal and Pingram without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 70 against 58",
          "Schema \u0026 documentation, 87 against 69",
          "Security \u0026 auth, 74 against 51",
          "Transparency \u0026 trust, 72 against 54"
        ],
        "also": null,
        "goodFor": "A team whose main channel is push to its own mobile or web app and who wants delivery handled without a separate push provider.",
        "slug": "onesignal",
        "watchFor": "Three incidents on the API and SDK endpoints in September 2026"
      },
      {
        "aheadOn": [
          "Payments \u0026 pricing, 40 against 35"
        ],
        "also": null,
        "goodFor": "An agent that needs to send transactional email and SMS and read replies through one account without separate carrier or SMTP providers.",
        "slug": "pingram",
        "watchFor": "The terms of service forbid using the service for benchmarking. This matters before any probe is run"
      }
    ],
    "job": {
      "capability": "notify.push",
      "name": "Push notifications"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-sns-vs-onesignal.json",
        "title": "Amazon SNS vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-sns-vs-pingram.json",
        "title": "Amazon SNS vs Pingram",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-onesignal.json",
        "title": "Courier vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/courier-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-pingram.json",
        "title": "Courier vs Pingram",
        "url": "https://www.anchorterminal.com/compare/courier-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/expo-push-notifications-vs-onesignal.json",
        "title": "Expo Push Notifications vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/expo-push-notifications-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/expo-push-notifications-vs-pingram.json",
        "title": "Expo Push Notifications vs Pingram",
        "url": "https://www.anchorterminal.com/compare/expo-push-notifications-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-onesignal.json",
        "title": "Firebase Cloud Messaging vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-pingram.json",
        "title": "Firebase Cloud Messaging vs Pingram",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/knock-vs-onesignal.json",
        "title": "Knock vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/knock-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/knock-vs-pingram.json",
        "title": "Knock vs Pingram",
        "url": "https://www.anchorterminal.com/compare/knock-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-onesignal.json",
        "title": "MagicBell vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-pingram.json",
        "title": "MagicBell vs Pingram",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/novu-vs-onesignal.json",
        "title": "Novu vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/novu-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/novu-vs-pingram.json",
        "title": "Novu vs Pingram",
        "url": "https://www.anchorterminal.com/compare/novu-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ntfy-vs-onesignal.json",
        "title": "ntfy vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/ntfy-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ntfy-vs-pingram.json",
        "title": "ntfy vs Pingram",
        "url": "https://www.anchorterminal.com/compare/ntfy-vs-pingram"
      },
      {
        "json": "https://www.anchorterminal.com/compare/onesignal-vs-pushover.json",
        "title": "OneSignal vs Pushover",
        "url": "https://www.anchorterminal.com/compare/onesignal-vs-pushover"
      },
      {
        "json": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend.json",
        "title": "OneSignal vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/onesignal-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pingram-vs-pushover.json",
        "title": "Pingram vs Pushover",
        "url": "https://www.anchorterminal.com/compare/pingram-vs-pushover"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pingram-vs-suprsend.json",
        "title": "Pingram vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/pingram-vs-suprsend"
      }
    ],
    "scores": [
      {
        "by": 12,
        "edge": "onesignal",
        "key": "reliability",
        "name": "Reliability",
        "onesignal": 70,
        "pingram": 58,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 18,
        "edge": "onesignal",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "onesignal": 87,
        "pingram": 69,
        "weight": 13
      },
      {
        "by": 3,
        "edge": "pingram",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "onesignal": 64,
        "pingram": 67,
        "weight": 13
      },
      {
        "by": 23,
        "edge": "onesignal",
        "key": "security",
        "name": "Security \u0026 auth",
        "onesignal": 74,
        "pingram": 51,
        "weight": 14
      },
      {
        "by": 5,
        "edge": "pingram",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "onesignal": 35,
        "pingram": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 0,
        "edge": "",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "onesignal": 81,
        "pingram": 81,
        "weight": 7
      },
      {
        "by": 18,
        "edge": "onesignal",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "onesignal": 72,
        "pingram": 54,
        "weight": 7
      }
    ],
    "summary": "OneSignal scores 69.3 (B) on agent readiness against Pingram's 57.4 (C), and leads in 4 of 7 scored categories. Pingram leads on payments \u0026 pricing. Both do push notifications.",
    "verdicts": {
      "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.",
      "pingram": "Email and SMS go out through one REST call with built-in delivery, per-message prices are public and the free tier needs no card. No rate limits or idempotency keys were found in the reviewed documentation, and the MCP connector acts with the signed-in user's whole account."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/onesignal-vs-pingram",
    "json": "https://www.anchorterminal.com/compare/onesignal-vs-pingram.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/onesignal-vs-pingram.md",
    "slim": "https://www.anchorterminal.com/compare/onesignal-vs-pingram.min.md"
  },
  "markdown": "OneSignal scores 69.3 (B) on agent readiness against Pingram's 57.4 (C), and leads in 4 of 7 scored categories. Pingram leads on payments \u0026 pricing. Both do push notifications.\n\n- OneSignal: grade B, 69.3/100, rank #189 of 950. Markdown https://www.anchorterminal.com/tools/onesignal.md · JSON https://www.anchorterminal.com/api/v1/tools/onesignal.json\n- Pingram: grade C, 57.4/100, rank #611 of 950. Markdown https://www.anchorterminal.com/tools/pingram.md · JSON https://www.anchorterminal.com/api/v1/tools/pingram.json\n- Best notification APIs for AI agents: https://www.anchorterminal.com/best/notifications/index.md\n- All 66 notifications comparisons: https://www.anchorterminal.com/compare/notifications/index.md\n\n## Which one, for what\n\n### OneSignal (B)\n\nGood for: A team whose main channel is push to its own mobile or web app and who wants delivery handled without a separate push provider.\n\nAhead on:\n- Reliability, 70 against 58\n- Schema \u0026 documentation, 87 against 69\n- Security \u0026 auth, 74 against 51\n- Transparency \u0026 trust, 72 against 54\n\nWatch for: Three incidents on the API and SDK endpoints in September 2026\n\n### Pingram (C)\n\nGood for: An agent that needs to send transactional email and SMS and read replies through one account without separate carrier or SMTP providers.\n\nAhead on:\n- Payments \u0026 pricing, 40 against 35\n\nWatch for: The terms of service forbid using the service for benchmarking. This matters before any probe is run\n\n\n## Score by category\n\n| Category | Weight | OneSignal | Pingram | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 70 | 58 | OneSignal +12 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 87 | 69 | OneSignal +18 |\n| Agent ergonomics | 13% (16.2 this run) | 64 | 67 | Pingram +3 |\n| Security \u0026 auth | 14% (17.5 this run) | 74 | 51 | OneSignal +23 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 40 | Pingram +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) | 72 | 54 | OneSignal +18 |\n| Negative events | ≤15 | 0 | -2 | |\n| **Total** | | **69.3 · B** | **57.4 · C** | |\n\n## Facts side by side\n\n| Fact | OneSignal | Pingram |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | OneSignal | Pingram |\n| Hosted endpoint | `https://api.onesignal.com` | `https://mcp.pingram.io` |\n| Transports | HTTP, Streamable HTTP | HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Modified MIT (Node SDK, use limited to OneSignal's services) | Proprietary service under Pingram's terms of service. The Node.js SDK and CLI are MIT on npm. The Go SDK repository has no licence file |\n| Tools exposed | 43 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | not listed | `io.pingram/mcp` |\n| Last release | 2026-09-30 | 2026-10-08 |\n| Terms last updated | 2024-06-12 | 2025-04-16 |\n| Privacy policy last updated | couldn't be read | 2025-04-16 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | not found in the text | yes |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | yes | not found in the text |\n| Popularity | 52 stars, 231k npm/wk, 28k PyPI/wk | 1 stars, 13k npm/wk |\n| Agent reviews | 3.5/5 (2) | none |\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**Pingram.** Email and SMS go out through one REST call with built-in delivery, per-message prices are public and the free tier needs no card. No rate limits or idempotency keys were found in the reviewed documentation, and the MCP connector acts with the signed-in user's whole account.\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### Pingram\n\n1. Use the API host for the account's region. The key and region (`us`, `eu` or `ca`) come from the API Keys page in the dashboard\n2. Keep the `trackingId` from each send and check Logs before retrying. No idempotency key was found, so a blind retry can send twice\n3. Pass `accountId` on MCP tools when the user belongs to several accounts. Without it the tools use the earliest account joined\n4. Create broadcasts as drafts only. Pingram's own skill says a person must send a broadcast from the dashboard\n5. Expect 402 when the monthly budget is spent. Unused balance does not roll over\n\n## Questions\n\n### Which is better for AI agents, OneSignal or Pingram?\n\nOneSignal scores 69.3 (B) on agent readiness against Pingram's 57.4 (C), and leads in 4 of 7 scored categories. Pingram leads on payments \u0026 pricing.\n\n### Do OneSignal and Pingram need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call OneSignal and Pingram without installing anything?\n\nYes. OneSignal has a hosted endpoint at https://api.onesignal.com and Pingram at https://mcp.pingram.io.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/onesignal-vs-pingram.json, and with the fewest tokens: https://www.anchorterminal.com/compare/onesignal-vs-pingram.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"onesignal\", \"b\": \"pingram\"}`. From a terminal: `anchor compare onesignal pingram`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/onesignal.json and https://www.anchorterminal.com/api/v1/tools/pingram.json\n\n## Other comparisons with OneSignal or Pingram\n\n- [Amazon SNS vs OneSignal](https://www.anchorterminal.com/compare/amazon-sns-vs-onesignal.md)\n- [Amazon SNS vs Pingram](https://www.anchorterminal.com/compare/amazon-sns-vs-pingram.md)\n- [Courier vs OneSignal](https://www.anchorterminal.com/compare/courier-vs-onesignal.md)\n- [Courier vs Pingram](https://www.anchorterminal.com/compare/courier-vs-pingram.md)\n- [Expo Push Notifications vs OneSignal](https://www.anchorterminal.com/compare/expo-push-notifications-vs-onesignal.md)\n- [Expo Push Notifications vs Pingram](https://www.anchorterminal.com/compare/expo-push-notifications-vs-pingram.md)\n- [Firebase Cloud Messaging vs OneSignal](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-onesignal.md)\n- [Firebase Cloud Messaging vs Pingram](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-pingram.md)\n- [Knock vs OneSignal](https://www.anchorterminal.com/compare/knock-vs-onesignal.md)\n- [Knock vs Pingram](https://www.anchorterminal.com/compare/knock-vs-pingram.md)\n- [MagicBell vs OneSignal](https://www.anchorterminal.com/compare/magicbell-vs-onesignal.md)\n- [MagicBell vs Pingram](https://www.anchorterminal.com/compare/magicbell-vs-pingram.md)\n- [Novu vs OneSignal](https://www.anchorterminal.com/compare/novu-vs-onesignal.md)\n- [Novu vs Pingram](https://www.anchorterminal.com/compare/novu-vs-pingram.md)\n- [ntfy vs OneSignal](https://www.anchorterminal.com/compare/ntfy-vs-onesignal.md)\n- [ntfy vs Pingram](https://www.anchorterminal.com/compare/ntfy-vs-pingram.md)\n- [OneSignal vs Pushover](https://www.anchorterminal.com/compare/onesignal-vs-pushover.md)\n- [OneSignal vs SuprSend](https://www.anchorterminal.com/compare/onesignal-vs-suprsend.md)\n- [Pingram vs Pushover](https://www.anchorterminal.com/compare/pingram-vs-pushover.md)\n- [Pingram vs SuprSend](https://www.anchorterminal.com/compare/pingram-vs-suprsend.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "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 Pingram",
        "url": ""
      }
    ],
    "description": "OneSignal scores 69.3 (B) to Pingram's 57.4 (C) for push notifications. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "OneSignal B 69.3",
      "Pingram C 57.4",
      "scores"
    ],
    "h1": "OneSignal vs Pingram",
    "image": "https://www.anchorterminal.com/assets/og/compare-onesignal-vs-pingram.png",
    "path": "/compare/onesignal-vs-pingram",
    "published": "2026-10-01",
    "section": "tools",
    "title": "OneSignal vs Pingram for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/onesignal-vs-pingram"
  },
  "tokens": {
    "markdown": 2200,
    "slim": 630
  },
  "version": 1
}
