{
  "data": {
    "category": {
      "area": "everyday",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "notify.preferences",
        "notify.digest"
      ],
      "description": "APIs that send one message to a person across push, in-app, email, SMS and chat, with preferences, batching and delivery tracking. Compared on channels, workflow logic, user preferences and price per notification.",
      "indexed": [
        {
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dinglebear-apprise-rmcp.json",
          "kind": "mcp",
          "name": "Apprise RMCP",
          "slug": "dinglebear-apprise-rmcp",
          "url": "https://www.anchorterminal.com/tools/dinglebear-apprise-rmcp"
        },
        {
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dinglebear-rapprise.json",
          "kind": "mcp",
          "name": "Apprise RMCP",
          "slug": "dinglebear-rapprise",
          "url": "https://www.anchorterminal.com/tools/dinglebear-rapprise"
        },
        {
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/elaan-mcp.json",
          "kind": "mcp",
          "name": "elaan.io MCP server",
          "slug": "elaan-mcp",
          "url": "https://www.anchorterminal.com/tools/elaan-mcp"
        },
        {
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/gaijin-go-gerrit-mcp.json",
          "kind": "mcp",
          "name": "Gerrit Code Review",
          "slug": "gaijin-go-gerrit-mcp",
          "url": "https://www.anchorterminal.com/tools/gaijin-go-gerrit-mcp"
        },
        {
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dinglebear-gotify-rmcp.json",
          "kind": "mcp",
          "name": "Gotify RMCP",
          "slug": "dinglebear-gotify-rmcp",
          "url": "https://www.anchorterminal.com/tools/dinglebear-gotify-rmcp"
        },
        {
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dinglebear-rgotify.json",
          "kind": "mcp",
          "name": "Gotify RMCP",
          "slug": "dinglebear-rgotify",
          "url": "https://www.anchorterminal.com/tools/dinglebear-rgotify"
        },
        {
          "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/simplepu-mcp.json",
          "kind": "mcp",
          "name": "Simplepush",
          "slug": "simplepu-mcp",
          "url": "https://www.anchorterminal.com/tools/simplepu-mcp"
        }
      ],
      "indexedCount": 7,
      "json": "https://www.anchorterminal.com/categories/notifications.json",
      "name": "Notifications",
      "slug": "notifications",
      "test": "One event sent to a user across in-app, push and email, with a digest and a preference opt-out. We check what arrives where, the batching, the opt-out and the delivery log.",
      "title": "Notification APIs for AI agents",
      "toolCount": 7,
      "tools": [
        "novu",
        "suprsend",
        "courier",
        "onesignal",
        "knock",
        "ntfy",
        "pushover"
      ],
      "url": "https://www.anchorterminal.com/categories/notifications"
    },
    "tools": [
      {
        "slug": "novu",
        "name": "Novu",
        "vendor": "Novu",
        "vendorUrl": "https://novu.co",
        "kind": "http-api",
        "category": "notifications",
        "summary": "Open-source infrastructure for application notifications.",
        "url": "https://www.anchorterminal.com/tools/novu",
        "markdownUrl": "https://www.anchorterminal.com/tools/novu.md",
        "slimMarkdownUrl": "https://www.anchorterminal.com/tools/novu.min.md",
        "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/novu.json",
        "repo": "https://github.com/novuhq/novu",
        "license": "MIT (core), commercial licence for the enterprise directories",
        "transports": [
          "http",
          "streamable-http"
        ],
        "remoteUrl": "https://api.novu.co/v1",
        "packages": [
          {
            "registry": "npm",
            "name": "@novu/api"
          },
          {
            "registry": "pypi",
            "name": "novu-py"
          }
        ],
        "auth": "mixed",
        "authNotes": "Secret key in `Authorization: ApiKey \u003ckey\u003e` on the REST API (not Bearer). The hosted MCP at mcp.novu.co (EU at eu.mcp.novu.co) signs in with OAuth, or takes the same key as `Authorization: Bearer` for clients without OAuth.",
        "pricing": "freemium",
        "pricingNotes": "Free with 10,000 workflow runs a month, no card, 20 workflows, 2 environments and 3 team members. Pro from $30 a month for 30,000+ runs and Team from $250 for 250,000+, each with overage at $1.20 per 1,000 runs. Enterprise is custom from 10M+ runs. The pricing page lists a 99.9% uptime SLA on Free, Pro and Team. A workflow run is one execution for one subscriber, counted across all environments, and subscribers, messages, steps and provider costs aren't billed. Over the limit Novu keeps sending and bills the overage (https://novu.co/pricing, https://docs.novu.co/platform/account/billing, https://docs.novu.co/platform/developer/limits). The MIT core can be self-hosted (https://github.com/novuhq/novu).",
        "priceSummary": "$30 / mo",
        "where": "hosted",
        "x402": {
          "level": "no",
          "endpoints": []
        },
        "toolCount": 30,
        "popularity": {
          "githubStars": 39700,
          "npmWeekly": 134757,
          "pypiWeekly": 25498,
          "asOf": "2026-09-30"
        },
        "docsUrl": "https://docs.novu.co",
        "llmsTxt": "https://novu.co/llms.txt",
        "openapi": "https://api.novu.co/openapi.json",
        "capabilities": [
          "notify.push",
          "notify.in-app",
          "notify.multichannel",
          "notify.preferences",
          "notify.digest"
        ],
        "tags": [
          "hosted",
          "freemium",
          "open-source",
          "self-hosted",
          "mcp",
          "llms-txt",
          "openapi",
          "typescript",
          "python",
          "eu"
        ],
        "lastRelease": "2026-09-28",
        "graded": true,
        "anchor": {
          "graded": true,
          "score": 77.4,
          "grade": "BB",
          "agentReady": true,
          "rank": 19,
          "ranked": true,
          "rankOf": 452,
          "categoryRank": 1,
          "methodology": "0.3",
          "run": "2026-10-01",
          "scores": {
            "ergonomics": 84,
            "maintenance": 92,
            "payments": 40,
            "reliability": 93,
            "schema": 92,
            "security": 63,
            "transparency": 70
          },
          "pending": [
            "performance",
            "tasks"
          ],
          "assessment": {
            "confidence": "high",
            "date": "2026-10-01"
          },
          "negative": 0,
          "verdict": "MIT-licensed core, self-hostable, with server and package releases every few weeks (latest 28 September 2026). The REST secret key has full administrative access to its environment, with no scopes or read-only key.",
          "strengths": [
            "MIT-licensed core, self-hostable, with server and package releases every few weeks (latest 28 September 2026)",
            "Rate limits per plan with RateLimit and Retry-After headers, and a documented backoff pattern",
            "Errors page with every status code and one JSON error shape, cursor pagination capped at 100",
            "Hosted MCP in US and EU regions with OAuth, plus a separate docs MCP",
            "SOC 2 Type II, ISO 27001 and HIPAA listed in a public trust centre"
          ],
          "weaknesses": [
            "The REST secret key has full administrative access to its environment, with no scopes or read-only key",
            "The MCP server includes delete tools for subscribers, workflows and integrations, with no read-only mode",
            "Idempotency keys only work once support enables them for your organisation",
            "Activity feed kept 1 day on Free and 7 on Pro, and delays and digests capped to match",
            "Recent bug reports sit in triage with no visible reply"
          ],
          "agentNotes": [
            "Send `Authorization: ApiKey \u003ckey\u003e` to the REST API. Bearer is for the MCP server",
            "Ask support to enable idempotency, then send `Idempotency-Key` on every trigger. A 409 means the first call is still running",
            "Use eu.api.novu.co and eu.mcp.novu.co for an EU account. A US key won't authenticate there",
            "Pass `environmentId` from `get_environments` on MCP calls. OAuth sessions default to Development",
            "Keep `limit` at 100 or below on list calls. Higher values return 422"
          ],
          "metrics": {
            "kind": "remote",
            "measured": false
          },
          "reviewCount": 8,
          "avgRating": 3.4,
          "history": [
            {
              "basis": "public evidence",
              "confidence": "high",
              "grade": "BB",
              "methodology": "0.3",
              "pending": [
                "performance",
                "tasks"
              ],
              "run": "2026-10-01",
              "runLabel": "October 2026 research run",
              "score": 77.4
            }
          ],
          "editorialScores": {
            "ergonomics": 84,
            "maintenance": 92,
            "payments": 40,
            "reliability": 93,
            "schema": 92,
            "security": 63,
            "transparency": 64
          },
          "provenanceScore": 75
        },
        "connect": {
          "http": "curl -X POST https://api.novu.co/v1/events/trigger \\\n  -H \"Authorization: ApiKey $NOVU_SECRET_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"build-finished\",\"to\":\"subscriber-123\",\"payload\":{\"status\":\"passed\"}}'",
          "claudeCode": "claude mcp add --transport http novu https://mcp.novu.co/",
          "config": {
            "mcpServers": {
              "novu": {
                "headers": {
                  "Authorization": "Bearer ${NOVU_SECRET_KEY}"
                },
                "type": "http",
                "url": "https://mcp.novu.co/"
              }
            }
          }
        },
        "letme": {
          "capability": "https://letme.dev/notify.push",
          "tool": "https://letme.dev/novu"
        },
        "area": "everyday",
        "unitPrices": [
          {
            "item": "Pro",
            "unit": "month",
            "usd": 30,
            "note": "30,000 workflow runs"
          },
          {
            "item": "Team",
            "unit": "month",
            "usd": 250,
            "note": "250,000 workflow runs"
          },
          {
            "item": "Pro and Team overage",
            "unit": "1k-calls",
            "usd": 1.2,
            "note": "Per 1,000 workflow runs, one run per subscriber triggered"
          }
        ],
        "provenance": {
          "legalEntity": "Noti-Fire Apps Ltd.",
          "domain": "novu.co",
          "domainRegistered": "",
          "domainNote": "The .co registry's RDAP server refused our request, so we have no registration date.",
          "endpointOnVendorDomain": true,
          "terms": "https://novu.co/terms/",
          "privacy": "https://novu.co/privacy/",
          "statusPage": "https://novustatus.com",
          "changelog": "https://novu.co/changelog/",
          "securityTxt": "none",
          "checked": "2026-09-30",
          "notes": [
            "Terms are governed by Israeli law, with courts in Tel Aviv-Jaffa. A DPA is published at novu.co/dpa.",
            "The status page is on a separate domain, novustatus.com, and listed no incidents for July to September 2026."
          ],
          "score": 75
        },
        "pageJsonUrl": "https://www.anchorterminal.com/tools/novu.json",
        "live": {
          "slug": "novu",
          "probe": {
            "target": "https://api.novu.co/v1",
            "method": "get",
            "lastAt": "2026-10-05T00:15:27.038604771Z",
            "lastOk": true,
            "lastStatus": 404,
            "lastMs": 120,
            "authRequired": false,
            "uptime24h": 100,
            "uptime30d": 100,
            "p50ms24h": 124,
            "p95ms24h": 301,
            "samples24h": 272,
            "samples30d": 903,
            "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": 3,
                "ok": 3
              }
            ]
          },
          "vendorStatus": {
            "page": "https://novustatus.com",
            "indicator": "unknown",
            "summary": "no machine-readable status found",
            "checkedAt": "2026-10-04T21:40:16.646752199Z"
          },
          "versions": [
            {
              "registry": "github",
              "name": "novuhq/novu",
              "version": "@novu/framework@v2.14.0",
              "released": "2026-09-28",
              "seenAt": "2026-10-04T16:34:39.740183609Z"
            },
            {
              "registry": "npm",
              "name": "@novu/api",
              "version": "3.19.1",
              "seenAt": "2026-10-04T16:34:38.653549514Z"
            },
            {
              "registry": "pypi",
              "name": "novu-py",
              "version": "3.19.0",
              "released": "2026-08-07",
              "seenAt": "2026-10-04T16:34:39.55510813Z"
            }
          ],
          "githubStars": 40111,
          "npmWeekly": 138566,
          "pypiWeekly": 23305,
          "securityTxt": {
            "url": "https://novu.co/.well-known/security.txt",
            "state": "none",
            "checkedAt": "2026-10-04T15:15:44.558338465Z"
          },
          "llmsTxt": {
            "url": "https://novu.co/llms.txt",
            "ok": true,
            "status": 200,
            "checkedAt": "2026-10-04T15:18:03.629783744Z"
          },
          "domain": {
            "domain": "novu.co",
            "checkedAt": "2026-10-04T13:04:50.095029778Z"
          },
          "pages": [
            {
              "url": "https://novu.co/changelog/",
              "kind": "changelog",
              "status": 200,
              "checkedAt": "2026-10-04T15:46:14.166796214Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "3f7f7cbc7d82"
            },
            {
              "url": "https://novu.co/pricing",
              "kind": "pricing",
              "status": 200,
              "checkedAt": "2026-10-04T15:46:17.089134241Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "fd92fb83afe6"
            },
            {
              "url": "https://novu.co/privacy/",
              "kind": "privacy",
              "status": 200,
              "checkedAt": "2026-10-04T15:46:18.427655417Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "a697c8c9f855"
            },
            {
              "url": "https://novu.co/terms/",
              "kind": "terms",
              "status": 200,
              "checkedAt": "2026-10-04T15:46:20.394503285Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "82ee799d3214"
            }
          ],
          "updatedAt": "2026-10-05T00:15:27.038604771Z"
        }
      },
      {
        "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-05T00:15:30.961976933Z",
            "lastOk": true,
            "lastStatus": 200,
            "lastMs": 78,
            "authRequired": false,
            "uptime24h": 100,
            "uptime30d": 100,
            "p50ms24h": 79,
            "p95ms24h": 164,
            "samples24h": 272,
            "samples30d": 903,
            "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": 3,
                "ok": 3
              }
            ]
          },
          "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-04T23:42:40.113054682Z"
            },
            {
              "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-05T00:15:30.961976933Z"
        }
      },
      {
        "slug": "courier",
        "name": "Courier",
        "vendor": "Courier",
        "vendorUrl": "https://www.courier.com",
        "kind": "http-api",
        "category": "notifications",
        "summary": "Notification API that routes one message to email, SMS, push, an in-app Inbox, Slack, Microsoft Teams and WhatsApp through your own providers, with templates, digests, preferences and journeys.",
        "url": "https://www.anchorterminal.com/tools/courier",
        "markdownUrl": "https://www.anchorterminal.com/tools/courier.md",
        "slimMarkdownUrl": "https://www.anchorterminal.com/tools/courier.min.md",
        "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/courier.json",
        "repo": "https://github.com/trycourier/courier-node",
        "license": "Apache-2.0 (Node SDK)",
        "transports": [
          "http",
          "streamable-http"
        ],
        "remoteUrl": "https://api.courier.com",
        "packages": [
          {
            "registry": "npm",
            "name": "@trycourier/courier"
          },
          {
            "registry": "pypi",
            "name": "trycourier"
          }
        ],
        "auth": "api-key",
        "authNotes": "Workspace API key as `Authorization: Bearer \u003ckey\u003e` on the REST API. The hosted MCP at mcp.courier.com takes the key in an `api_key` header, with no OAuth. A JWT endpoint issues tokens for client SDKs such as the Inbox.",
        "pricing": "freemium",
        "pricingNotes": "Developer plan free for up to 10,000 sends a month. Business is pay as you go at $0.005 a send. Enterprise is custom with volume discounts. Billing counts notifications sent, not seats or channels (https://www.courier.com/docs/overview.md). Support is email on Developer, adds chat on Business, and Enterprise adds a shared Slack channel and an SLA (https://www.courier.com/docs/resources/help.md).",
        "priceSummary": "Freemium",
        "where": "hosted",
        "x402": {
          "level": "no",
          "endpoints": []
        },
        "toolCount": 170,
        "popularity": {
          "githubStars": 63,
          "npmWeekly": 189029,
          "pypiWeekly": 35385,
          "asOf": "2026-09-30"
        },
        "docsUrl": "https://www.courier.com/docs",
        "llmsTxt": "https://www.courier.com/docs/llms.txt",
        "openapi": "https://www.courier.com/docs/openapi-specs/openapi.documented.yml",
        "registryName": "io.github.trycourier/courier",
        "capabilities": [
          "notify.push",
          "notify.in-app",
          "notify.multichannel",
          "notify.preferences",
          "notify.digest"
        ],
        "tags": [
          "hosted",
          "freemium",
          "mcp",
          "llms-txt",
          "openapi",
          "typescript",
          "python",
          "enterprise"
        ],
        "lastRelease": "2026-09-24",
        "graded": true,
        "anchor": {
          "graded": true,
          "score": 70.5,
          "grade": "BB",
          "agentReady": true,
          "rank": 96,
          "ranked": true,
          "rankOf": 452,
          "categoryRank": 3,
          "methodology": "0.3",
          "run": "2026-10-01",
          "scores": {
            "ergonomics": 68,
            "maintenance": 86,
            "payments": 35,
            "reliability": 92,
            "schema": 84,
            "security": 56,
            "transparency": 65
          },
          "pending": [
            "performance",
            "tasks"
          ],
          "assessment": {
            "confidence": "medium",
            "date": "2026-10-01"
          },
          "negative": 0,
          "verdict": "Free for 10,000 sends a month, then $0.005 a send with no platform fee. 170 MCP tools with no toolsets, filtering or read-only mode.",
          "strengths": [
            "Free for 10,000 sends a month, then $0.005 a send with no platform fee",
            "`POST /send` has no request-count rate limit, and the limited endpoints publish their numbers",
            "Idempotency keys replay for 25 hours by default and up to a year",
            "Public OpenAPI file, llms.txt with about 230 Markdown pages, and an agent skill",
            "Status page with no incidents posted since 18 June 2026"
          ],
          "weaknesses": [
            "170 MCP tools with no toolsets, filtering or read-only mode",
            "MCP authentication is a raw API key header with no OAuth or scopes",
            "Error responses documented only as `message` and `type`, with no list of codes",
            "Audit trail of key and template changes is Enterprise only",
            "No subprocessor list, data regions or retention periods in the privacy policy"
          ],
          "agentNotes": [
            "Send an `Idempotency-Key` header on every send so a retry doesn't notify twice",
            "Set `routing.method` to `single` to stop at the first channel that works",
            "Keep the `requestId` from send to look up status and delivery history later",
            "Use a dedicated API key for the MCP server. Every one of the 170 tools runs with that key's full rights",
            "Space resends at least 2 seconds apart per message or you get a 429"
          ],
          "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": 70.5
            }
          ],
          "editorialScores": {
            "ergonomics": 68,
            "maintenance": 86,
            "payments": 35,
            "reliability": 92,
            "schema": 84,
            "security": 56,
            "transparency": 40
          },
          "provenanceScore": 90
        },
        "connect": {
          "http": "curl -X POST https://api.courier.com/send \\\n  -H \"Authorization: Bearer $COURIER_API_KEY\" -H \"Content-Type: application/json\" \\\n  -H \"Idempotency-Key: build-42\" \\\n  -d '{\"message\":{\"to\":{\"user_id\":\"user_123\"},\"content\":{\"title\":\"Build finished\",\"body\":\"All tests passed\"},\"routing\":{\"method\":\"single\",\"channels\":[\"push\",\"email\"]}}}'",
          "claudeCode": "claude mcp add --transport http courier https://mcp.courier.com --header \"api_key: $COURIER_API_KEY\"",
          "config": {
            "mcpServers": {
              "courier": {
                "headers": {
                  "api_key": "${COURIER_API_KEY}"
                },
                "type": "http",
                "url": "https://mcp.courier.com"
              }
            }
          }
        },
        "letme": {
          "capability": "https://letme.dev/notify.push",
          "tool": "https://letme.dev/courier"
        },
        "area": "everyday",
        "unitPrices": [
          {
            "item": "Business send",
            "unit": "message",
            "usd": 0.005,
            "note": "Pay as you go after 10,000 free sends"
          }
        ],
        "provenance": {
          "legalEntity": "trycourier.com, Inc.",
          "domain": "courier.com",
          "domainRegistered": "1993-09-09",
          "domainNote": "courier.com was registered in 1993, long before Courier launched, so the domain was bought later.",
          "endpointOnVendorDomain": true,
          "terms": "https://www.courier.com/terms",
          "privacy": "https://www.courier.com/privacy-policy",
          "statusPage": "https://status.courier.com",
          "changelog": "https://www.courier.com/changelog/",
          "securityTxt": "none",
          "checked": "2026-09-30",
          "notes": [
            "Terms are governed by California law and give 143 2nd St, San Francisco, as the address.",
            "Certifications and data handling are published separately at security.courier.com."
          ],
          "score": 90
        },
        "pageJsonUrl": "https://www.anchorterminal.com/tools/courier.json",
        "live": {
          "slug": "courier",
          "probe": {
            "target": "https://api.courier.com",
            "method": "get",
            "lastAt": "2026-10-05T00:15:21.942627447Z",
            "lastOk": true,
            "lastStatus": 403,
            "lastMs": 383,
            "lastNote": "asks for credentials",
            "authRequired": true,
            "uptime24h": 100,
            "uptime30d": 100,
            "p50ms24h": 134,
            "p95ms24h": 394,
            "samples24h": 272,
            "samples30d": 903,
            "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": 3,
                "ok": 3
              }
            ]
          },
          "vendorStatus": {
            "page": "https://status.courier.com",
            "indicator": "none",
            "summary": "All Systems Operational",
            "checkedAt": "2026-10-05T00:11:15.066028629Z"
          },
          "versions": [
            {
              "registry": "github",
              "name": "trycourier/courier-node",
              "version": "v9.11.0",
              "released": "2026-09-24",
              "seenAt": "2026-10-04T16:24:41.682946743Z"
            },
            {
              "registry": "mcp-registry",
              "name": "io.github.trycourier/courier",
              "version": "1.3.7",
              "seenAt": "2026-10-04T23:42:40.113054682Z"
            },
            {
              "registry": "npm",
              "name": "@trycourier/courier",
              "version": "9.11.0",
              "seenAt": "2026-10-04T16:24:41.01851751Z"
            },
            {
              "registry": "pypi",
              "name": "trycourier",
              "version": "9.11.0",
              "released": "2026-09-24",
              "seenAt": "2026-10-04T16:24:41.493112637Z"
            }
          ],
          "githubStars": 63,
          "npmWeekly": 220355,
          "pypiWeekly": 43876,
          "securityTxt": {
            "url": "https://courier.com/.well-known/security.txt",
            "state": "none",
            "checkedAt": "2026-10-04T15:15:36.911141403Z"
          },
          "llmsTxt": {
            "url": "https://www.courier.com/docs/llms.txt",
            "ok": true,
            "status": 200,
            "checkedAt": "2026-10-04T15:17:28.596906373Z"
          },
          "domain": {
            "domain": "courier.com",
            "registered": "1993-09-09",
            "source": "https://rdap.verisign.com/com/v1/domain/courier.com",
            "checkedAt": "2026-10-04T13:09:59.714592295Z"
          },
          "pages": [
            {
              "url": "https://www.courier.com/changelog/",
              "kind": "changelog",
              "status": 304,
              "checkedAt": "2026-10-04T15:49:55.731304641Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "cda43798db5a"
            },
            {
              "url": "https://www.courier.com/privacy-policy",
              "kind": "privacy",
              "status": 304,
              "checkedAt": "2026-10-04T15:49:58.086522562Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "e9b84df4985f"
            },
            {
              "url": "https://www.courier.com/terms",
              "kind": "terms",
              "status": 304,
              "checkedAt": "2026-10-04T15:49:59.807103351Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "15732fe78cb9"
            }
          ],
          "updatedAt": "2026-10-05T00:15:21.942627447Z"
        }
      },
      {
        "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-05T00:15:27.238594271Z",
            "lastOk": true,
            "lastStatus": 403,
            "lastMs": 26,
            "lastNote": "asks for credentials",
            "authRequired": true,
            "uptime24h": 100,
            "uptime30d": 100,
            "p50ms24h": 30,
            "p95ms24h": 69,
            "samples24h": 272,
            "samples30d": 903,
            "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": 3,
                "ok": 3
              }
            ]
          },
          "vendorStatus": {
            "page": "https://status.onesignal.com",
            "indicator": "none",
            "summary": "All Systems Operational",
            "checkedAt": "2026-10-05T00:11:25.950120771Z"
          },
          "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-05T00:15:27.238594271Z"
        }
      },
      {
        "slug": "knock",
        "name": "Knock",
        "vendor": "Knock",
        "vendorUrl": "https://knock.app",
        "kind": "http-api",
        "category": "notifications",
        "summary": "Notification workflow API.",
        "url": "https://www.anchorterminal.com/tools/knock",
        "markdownUrl": "https://www.anchorterminal.com/tools/knock.md",
        "slimMarkdownUrl": "https://www.anchorterminal.com/tools/knock.min.md",
        "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/knock.json",
        "repo": "https://github.com/knocklabs/knock-node",
        "license": "Apache-2.0 (Node SDK)",
        "transports": [
          "http",
          "streamable-http"
        ],
        "remoteUrl": "https://api.knock.app/v1",
        "packages": [
          {
            "registry": "npm",
            "name": "@knocklabs/node"
          },
          {
            "registry": "pypi",
            "name": "knockapi"
          }
        ],
        "auth": "mixed",
        "authNotes": "Secret API key per environment as a Bearer token for server calls, and a public key plus signed user tokens for client feeds. The hosted MCP signs in with OAuth or takes a service token (`knock_st_...`) as a Bearer credential for headless use.",
        "pricing": "freemium",
        "pricingNotes": "Developer plan free with 10,000 messages a month, 500 guide active users and 500 AI agent credits. Starter $250 a month with 50,000 messages prepaid, then $0.005 a message, 2,500 guide active users ($0.05 each after) and 2,000 agent credits ($0.01 each after). Enterprise is priced by volume or by notified users. A message is one delivery to one user on one channel, and bounced or failed messages aren't billed. No setup fee, billed monthly in arrears (https://knock.app/pricing).",
        "priceSummary": "$250 / mo",
        "where": "hosted",
        "x402": {
          "level": "no",
          "endpoints": []
        },
        "toolCount": null,
        "popularity": {
          "githubStars": 50,
          "npmWeekly": 926382,
          "pypiWeekly": 233669,
          "asOf": "2026-09-30"
        },
        "docsUrl": "https://docs.knock.app",
        "llmsTxt": "https://docs.knock.app/llms.txt",
        "openapi": "https://docs.knock.app/openapi.json",
        "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-29",
        "graded": true,
        "anchor": {
          "graded": true,
          "score": 66.8,
          "grade": "B",
          "agentReady": false,
          "rank": 155,
          "ranked": true,
          "rankOf": 452,
          "categoryRank": 5,
          "methodology": "0.3",
          "run": "2026-10-01",
          "scores": {
            "ergonomics": 64,
            "maintenance": 86,
            "payments": 40,
            "reliability": 58,
            "schema": 88,
            "security": 71,
            "transparency": 63
          },
          "pending": [
            "performance",
            "tasks"
          ],
          "assessment": {
            "confidence": "medium",
            "date": "2026-10-01"
          },
          "negative": 0,
          "verdict": "Hosted MCP server with OAuth, six capability toggles and no delete tools. Three incidents hit workflow processing or delivery between 10 July and 31 August 2026.",
          "strengths": [
            "Hosted MCP server with OAuth, six capability toggles and no delete tools",
            "Idempotency keys on trigger for 24 hours, plus cancellation keys for delayed runs",
            "Rate limits published in five tiers from 1 to 1,000 requests a second",
            "Audit logs attribute management API changes to the service token that made them",
            "Free plan with 10,000 messages a month and no card"
          ],
          "weaknesses": [
            "Three incidents hit workflow processing or delivery between 10 July and 31 August 2026",
            "No SLA, Retry-After header or backoff guidance found",
            "Service tokens carry the creator's full privileges with no expiry, and skip MCP consent",
            "Starter jumps from free to $250 a month",
            "Email, SMS and push go through providers you configure and pay for separately"
          ],
          "agentNotes": [
            "Create the workflow in the dashboard or through the MCP server before you trigger it. Triggers reference it by key",
            "Send an `Idempotency-Key` on every trigger. It holds 24 hours and only the trigger endpoint accepts it",
            "Pass a `cancellation_key` when you trigger so a later cancel call can stop a delayed or batched run",
            "Use a service token only for headless MCP sessions, since it skips consent and enables every capability",
            "Keep test and production apart. Rate limits and keys are scoped to an environment"
          ],
          "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": 66.8
            }
          ],
          "editorialScores": {
            "ergonomics": 64,
            "maintenance": 86,
            "payments": 40,
            "reliability": 58,
            "schema": 88,
            "security": 71,
            "transparency": 39
          },
          "provenanceScore": 86
        },
        "connect": {
          "http": "curl -X POST https://api.knock.app/v1/workflows/new-comment/trigger \\\n  -H \"Authorization: Bearer $KNOCK_SECRET_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"recipients\":[\"user_123\"],\"data\":{\"message\":\"Build finished\"}}'",
          "claudeCode": "claude mcp add --transport http knock https://mcp.knock.app/mcp",
          "config": {
            "mcpServers": {
              "knock": {
                "headers": {
                  "Authorization": "Bearer ${KNOCK_SERVICE_TOKEN}"
                },
                "type": "http",
                "url": "https://mcp.knock.app/mcp"
              }
            }
          }
        },
        "letme": {
          "capability": "https://letme.dev/notify.push",
          "tool": "https://letme.dev/knock"
        },
        "area": "everyday",
        "unitPrices": [
          {
            "item": "Starter",
            "unit": "month",
            "usd": 250,
            "note": "50,000 messages included"
          },
          {
            "item": "Starter overage",
            "unit": "message",
            "usd": 0.005
          },
          {
            "item": "AI agent credit overage",
            "unit": "credit",
            "usd": 0.01
          }
        ],
        "provenance": {
          "legalEntity": "Knock Labs, Inc.",
          "domain": "knock.app",
          "domainRegistered": "2020-08-28",
          "endpointOnVendorDomain": true,
          "terms": "https://knock.app/terms",
          "privacy": "https://knock.app/legal/privacy-policy",
          "statusPage": "https://status.knock.app",
          "changelog": "https://knock.app/changelog",
          "securityTxt": "none",
          "checked": "2026-09-30",
          "notes": [
            "Terms are governed by New York law. A separate data processing addendum is published at knock.app/legal/data-processing-addendum.",
            "The status page tracks the in-dashboard agent as its own component."
          ],
          "score": 86
        },
        "pageJsonUrl": "https://www.anchorterminal.com/tools/knock.json",
        "live": {
          "slug": "knock",
          "probe": {
            "target": "https://api.knock.app/v1",
            "method": "get",
            "lastAt": "2026-10-05T00:15:25.304617296Z",
            "lastOk": true,
            "lastStatus": 404,
            "lastMs": 291,
            "authRequired": false,
            "uptime24h": 100,
            "uptime30d": 100,
            "p50ms24h": 293,
            "p95ms24h": 344,
            "samples24h": 272,
            "samples30d": 903,
            "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": 3,
                "ok": 3
              }
            ]
          },
          "vendorStatus": {
            "page": "https://status.knock.app",
            "indicator": "none",
            "summary": "All Systems Operational",
            "checkedAt": "2026-10-05T00:11:24.299356064Z"
          },
          "versions": [
            {
              "registry": "github",
              "name": "knocklabs/knock-node",
              "version": "v1.36.0",
              "released": "2026-09-30",
              "seenAt": "2026-10-04T16:30:56.82123424Z"
            },
            {
              "registry": "npm",
              "name": "@knocklabs/node",
              "version": "1.36.0",
              "seenAt": "2026-10-04T16:30:55.666092589Z"
            },
            {
              "registry": "pypi",
              "name": "knockapi",
              "version": "1.31.0",
              "released": "2026-09-30",
              "seenAt": "2026-10-04T16:30:56.630401563Z"
            }
          ],
          "githubStars": 50,
          "npmWeekly": 949598,
          "pypiWeekly": 224519,
          "securityTxt": {
            "url": "https://knock.app/.well-known/security.txt",
            "state": "none",
            "checkedAt": "2026-10-04T15:15:50.36077856Z"
          },
          "llmsTxt": {
            "url": "https://docs.knock.app/llms.txt",
            "ok": true,
            "status": 200,
            "checkedAt": "2026-10-04T15:17:55.693090609Z"
          },
          "domain": {
            "domain": "knock.app",
            "registered": "2020-08-28",
            "source": "https://pubapi.registry.google/rdap/domain/knock.app",
            "checkedAt": "2026-10-04T13:04:01.050922733Z"
          },
          "pages": [
            {
              "url": "https://knock.app/changelog",
              "kind": "changelog",
              "status": 200,
              "checkedAt": "2026-10-04T15:45:14.239300597Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "5fea3b2edd33"
            },
            {
              "url": "https://knock.app/pricing",
              "kind": "pricing",
              "status": 304,
              "checkedAt": "2026-10-04T15:45:18.436788381Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "fd0ac3be243e"
            },
            {
              "url": "https://knock.app/legal/privacy-policy",
              "kind": "privacy",
              "status": 200,
              "checkedAt": "2026-10-04T15:45:16.503972023Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "b126a2e6a38d"
            },
            {
              "url": "https://knock.app/terms",
              "kind": "terms",
              "status": 200,
              "checkedAt": "2026-10-04T15:45:20.266105197Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "6e48468a84af"
            }
          ],
          "updatedAt": "2026-10-05T00:15:25.304617296Z"
        }
      },
      {
        "slug": "ntfy",
        "name": "ntfy",
        "vendor": "ntfy",
        "vendorUrl": "https://ntfy.sh",
        "kind": "http-api",
        "category": "notifications",
        "summary": "Open-source publish-subscribe service for push notifications.",
        "url": "https://www.anchorterminal.com/tools/ntfy",
        "markdownUrl": "https://www.anchorterminal.com/tools/ntfy.md",
        "slimMarkdownUrl": "https://www.anchorterminal.com/tools/ntfy.min.md",
        "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/ntfy.json",
        "repo": "https://github.com/binwiederhier/ntfy",
        "license": "Apache-2.0 and GPL-2.0 (dual)",
        "transports": [
          "http"
        ],
        "remoteUrl": "https://ntfy.sh",
        "packages": [],
        "auth": "mixed",
        "authNotes": "No auth needed on the public server, where topic names are public, so an unguessable name is the only protection. Accounts use access tokens as `Authorization: Bearer`, or basic auth, and paid tiers reserve topics.",
        "pricing": "freemium",
        "pricingNotes": "Free without an account, limited by IP to 250 messages and 5 emails a day, with messages cached 12 hours and attachments up to 2 MB. Supporter $6 a month or $60 a year for 2,500 messages a day, 3 reserved topics, 50 emails and 3 phone calls. Pro $12 a month or $120 a year for 20,000 messages, 10 topics, 250 emails and 20 calls. Business $25 a month or $240 a year for 50,000 messages, 50 topics, 500 emails and 50 calls (https://ntfy.sh/v1/tiers, https://ntfy.sh). Self-hosting is free (https://github.com/binwiederhier/ntfy).",
        "priceSummary": "$6 / mo",
        "where": "hosted",
        "x402": {
          "level": "no",
          "endpoints": []
        },
        "toolCount": null,
        "popularity": {
          "githubStars": 33500,
          "npmWeekly": null,
          "pypiWeekly": null,
          "asOf": "2026-09-30"
        },
        "docsUrl": "https://docs.ntfy.sh",
        "capabilities": [
          "notify.push"
        ],
        "tags": [
          "hosted",
          "freemium",
          "free-tier",
          "no-key",
          "open-source",
          "self-hosted"
        ],
        "lastRelease": "2026-08-27",
        "graded": true,
        "anchor": {
          "graded": true,
          "score": 61.6,
          "grade": "C",
          "agentReady": false,
          "rank": 226,
          "ranked": true,
          "rankOf": 452,
          "categoryRank": 6,
          "methodology": "0.3",
          "run": "2026-10-01",
          "scores": {
            "ergonomics": 66,
            "maintenance": 67,
            "payments": 50,
            "reliability": 83,
            "schema": 53,
            "security": 38,
            "transparency": 79
          },
          "pending": [
            "performance",
            "tasks"
          ],
          "assessment": {
            "confidence": "medium",
            "date": "2026-10-01"
          },
          "negative": 0,
          "verdict": "Publish with one HTTP POST and no account, up to 250 messages a day per IP on ntfy.sh. Unreserved topics on ntfy.sh can be read and written by anyone who knows the name.",
          "strengths": [
            "Publish with one HTTP POST and no account, up to 250 messages a day per IP on ntfy.sh",
            "Apache-2.0 and GPL-2.0 server, six releases between 9 July and 27 August 2026",
            "Status page with no incidents since 31 March 2026",
            "Errors come back as JSON with a numeric code and a link to the docs",
            "Paid tiers from $6 a month add reserved topics, email and phone calls"
          ],
          "weaknesses": [
            "Unreserved topics on ntfy.sh can be read and written by anyone who knows the name",
            "No idempotency key, so a retried publish arrives twice",
            "No OpenAPI spec, llms.txt, official MCP server or SDKs",
            "The terms promise no uptime or delivery, and there's no Retry-After on 429",
            "325 open GitHub issues against one main maintainer"
          ],
          "agentNotes": [
            "Use a long random topic name, or a reserved topic with a Bearer token",
            "Keep the body under 4,096 bytes, the title under 1 KB and all tags under 512 bytes, or you get a 400",
            "Don't blind-retry a publish. There's no idempotency key, so the person gets it twice",
            "Send the token in the Authorization header, not the `auth` query parameter, so it stays out of logs",
            "Poll with `since=\u003cid\u003e` rather than `poll=1` alone, which replays the whole cache and counts against the bandwidth limit"
          ],
          "metrics": {
            "kind": "remote",
            "measured": false
          },
          "reviewCount": 2,
          "avgRating": 4,
          "history": [
            {
              "basis": "public evidence",
              "confidence": "medium",
              "grade": "C",
              "methodology": "0.3",
              "pending": [
                "performance",
                "tasks"
              ],
              "run": "2026-10-01",
              "runLabel": "October 2026 research run",
              "score": 61.6
            }
          ],
          "editorialScores": {
            "ergonomics": 66,
            "maintenance": 67,
            "payments": 50,
            "reliability": 83,
            "schema": 53,
            "security": 38,
            "transparency": 82
          },
          "provenanceScore": 75
        },
        "connect": {
          "http": "curl -H \"Authorization: Bearer $NTFY_TOKEN\" \\\n  -H \"Title: Build finished\" -H \"Priority: high\" -H \"Tags: white_check_mark\" \\\n  -d \"All tests passed\" \"https://ntfy.sh/$NTFY_TOPIC\""
        },
        "letme": {
          "capability": "https://letme.dev/notify.push",
          "tool": "https://letme.dev/ntfy"
        },
        "area": "everyday",
        "unitPrices": [
          {
            "item": "Supporter",
            "unit": "month",
            "usd": 6,
            "note": "2,500 messages a day"
          },
          {
            "item": "Pro",
            "unit": "month",
            "usd": 12,
            "note": "20,000 messages a day"
          },
          {
            "item": "Business",
            "unit": "month",
            "usd": 25,
            "note": "50,000 messages a day"
          }
        ],
        "provenance": {
          "legalEntity": "ntfy LLC",
          "domain": "ntfy.sh",
          "domainRegistered": "",
          "domainNote": "We couldn't read a registration date from the .sh registry's RDAP server.",
          "endpointOnVendorDomain": true,
          "terms": "https://docs.ntfy.sh/terms/",
          "privacy": "https://docs.ntfy.sh/privacy/",
          "statusPage": "https://ntfy.statuspage.io",
          "changelog": "https://docs.ntfy.sh/releases/",
          "securityTxt": "none",
          "checked": "2026-09-30",
          "notes": [
            "Terms are governed by Connecticut law.",
            "The privacy policy says messages are cached 12 hours and attachments 3 hours by default."
          ],
          "score": 75
        },
        "pageJsonUrl": "https://www.anchorterminal.com/tools/ntfy.json",
        "live": {
          "slug": "ntfy",
          "probe": {
            "target": "https://ntfy.sh",
            "method": "get",
            "lastAt": "2026-10-05T00:15:27.043686687Z",
            "lastOk": true,
            "lastStatus": 200,
            "lastMs": 236,
            "authRequired": false,
            "uptime24h": 100,
            "uptime30d": 100,
            "p50ms24h": 245,
            "p95ms24h": 308,
            "samples24h": 272,
            "samples30d": 903,
            "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": 3,
                "ok": 3
              }
            ]
          },
          "vendorStatus": {
            "page": "https://ntfy.statuspage.io",
            "indicator": "none",
            "summary": "All Systems Operational",
            "checkedAt": "2026-10-05T00:11:25.861115752Z"
          },
          "versions": [
            {
              "registry": "github",
              "name": "binwiederhier/ntfy",
              "version": "v2.28.0",
              "released": "2026-08-27",
              "seenAt": "2026-10-04T16:34:42.599762308Z"
            }
          ],
          "githubStars": 34620,
          "securityTxt": {
            "url": "https://ntfy.sh/.well-known/security.txt",
            "state": "none",
            "checkedAt": "2026-10-04T15:15:56.181795167Z"
          },
          "domain": {
            "domain": "ntfy.sh",
            "checkedAt": "2026-10-04T13:08:41.08288357Z"
          },
          "pages": [
            {
              "url": "https://docs.ntfy.sh/releases/",
              "kind": "changelog",
              "status": 200,
              "checkedAt": "2026-10-04T15:43:52.329185938Z",
              "changedAt": "2026-10-04T15:43:52.329185938Z",
              "fingerprint": "68ece810e5e5"
            },
            {
              "url": "https://docs.ntfy.sh/privacy/",
              "kind": "privacy",
              "status": 200,
              "checkedAt": "2026-10-04T15:43:50.195547148Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "c956c27ca8f1"
            },
            {
              "url": "https://docs.ntfy.sh/terms/",
              "kind": "terms",
              "status": 200,
              "checkedAt": "2026-10-04T15:43:54.348128214Z",
              "changedAt": "0001-01-01T00:00:00Z",
              "fingerprint": "c6bc41ff43a5"
            }
          ],
          "updatedAt": "2026-10-05T00:15:27.043686687Z"
        }
      },
      {
        "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-05T00:15:28.692963341Z",
            "lastOk": true,
            "lastStatus": 400,
            "lastMs": 171,
            "authRequired": false,
            "uptime24h": 100,
            "uptime30d": 100,
            "p50ms24h": 177,
            "p95ms24h": 231,
            "samples24h": 272,
            "samples30d": 903,
            "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": 3,
                "ok": 3
              }
            ]
          },
          "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-05T00:15:28.692963341Z"
        }
      }
    ]
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/categories/notifications",
    "json": "https://www.anchorterminal.com/categories/notifications.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/categories/notifications.md",
    "slim": "https://www.anchorterminal.com/categories/notifications.min.md"
  },
  "markdown": "APIs that send one message to a person across push, in-app, email, SMS and chat, with preferences, batching and delivery tracking. Compared on channels, workflow logic, user preferences and price per notification.\n\n- Tools ranked: 7 · agent-ready (BB or better): 3 · accept x402: 0 · hosted endpoints: 7 · desk reviews by the panel: 20\n- JSON: https://www.anchorterminal.com/api/v1/tools.json (list) · https://www.anchorterminal.com/api/v1/rankings.json (ranked) · https://www.anchorterminal.com/api/v1/x402.json (payable) · https://www.anchorterminal.com/api/v1/capabilities.json (by capability)\n- Grades run AA, A, BB, B, C, D, E, F · methodology: https://www.anchorterminal.com/benchmark/\n\n- Capabilities in this category: notify.push, notify.in-app, notify.multichannel, notify.preferences, notify.digest\n- https://letme.dev/notify.push picks the top-graded tool in this list and says how to call it direct; calling through letme comes later (https://www.anchorterminal.com/letme/index.md)\n\n## Ranking\n\n| # | Tool | Vendor | Kind | Category | Grade | Score | Confidence | x402 | Auth | Where | Reviews | Page |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| 19 | Novu | Novu | HTTP API | Notifications | BB | 77.4 | high | no | OAuth or key | hosted | 3.4/5 (8) | https://www.anchorterminal.com/tools/novu.md |\n| 65 | SuprSend | SuprSend | HTTP API | Notifications | BB | 72.9 | medium | no | API key | hosted + local | 3/5 (2) | https://www.anchorterminal.com/tools/suprsend.md |\n| 96 | Courier | Courier | HTTP API | Notifications | BB | 70.5 | medium | no | API key | hosted | 3/5 (2) | https://www.anchorterminal.com/tools/courier.md |\n| 110 | OneSignal | OneSignal | HTTP API | Notifications | B | 69.6 | medium | no | OAuth or key | hosted | 3.5/5 (2) | https://www.anchorterminal.com/tools/onesignal.md |\n| 155 | Knock | Knock | HTTP API | Notifications | B | 66.8 | medium | no | OAuth or key | hosted | 3.5/5 (2) | https://www.anchorterminal.com/tools/knock.md |\n| 226 | ntfy | ntfy | HTTP API | Notifications | C | 61.6 | medium | no | OAuth or key | hosted | 4/5 (2) | https://www.anchorterminal.com/tools/ntfy.md |\n| 334 | Pushover | Pushover | HTTP API | Notifications | D | 53.3 | medium | no | API key | hosted | 3.5/5 (2) | https://www.anchorterminal.com/tools/pushover.md |\n\nScores are from public evidence against the published checklist (https://www.anchorterminal.com/benchmark/), with Performance and Task success pending. p95 latency and context cost come from our probes, which haven't run yet.\n\n## Summaries\n\n### 19. Novu, BB (77.4)\n\nOpen-source infrastructure for application notifications. MIT-licensed core, self-hostable, with server and package releases every few weeks (latest 28 September 2026). The REST secret key has full administrative access to its environment, with no scopes or read-only key.\n\n- Page: https://www.anchorterminal.com/tools/novu · Markdown: https://www.anchorterminal.com/tools/novu.md · JSON: https://www.anchorterminal.com/api/v1/tools/novu.json\n- Capabilities: notify.push, notify.in-app, notify.multichannel, notify.preferences, notify.digest · endpoint: `https://api.novu.co/v1`\n\n### 65. SuprSend, BB (72.9)\n\nNotification 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. 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- Page: https://www.anchorterminal.com/tools/suprsend · Markdown: https://www.anchorterminal.com/tools/suprsend.md · JSON: https://www.anchorterminal.com/api/v1/tools/suprsend.json\n- Capabilities: notify.push, notify.in-app, notify.multichannel, notify.preferences, notify.digest · endpoint: `https://hub.suprsend.com`\n\n### 96. Courier, BB (70.5)\n\nNotification API that routes one message to email, SMS, push, an in-app Inbox, Slack, Microsoft Teams and WhatsApp through your own providers, with templates, digests, preferences and journeys. Free for 10,000 sends a month, then $0.005 a send with no platform fee. 170 MCP tools with no toolsets, filtering or read-only mode.\n\n- Page: https://www.anchorterminal.com/tools/courier · Markdown: https://www.anchorterminal.com/tools/courier.md · JSON: https://www.anchorterminal.com/api/v1/tools/courier.json\n- Capabilities: notify.push, notify.in-app, notify.multichannel, notify.preferences, notify.digest · endpoint: `https://api.courier.com`\n\n### 110. OneSignal, B (69.6)\n\nMessaging platform that sends mobile and web push through its own service and adds email, SMS, RCS, in-app messages, Live Activities and journeys. 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- Page: https://www.anchorterminal.com/tools/onesignal · Markdown: https://www.anchorterminal.com/tools/onesignal.md · JSON: https://www.anchorterminal.com/api/v1/tools/onesignal.json\n- Capabilities: notify.push, notify.in-app, notify.multichannel, email.send, messaging.sms · endpoint: `https://api.onesignal.com`\n\n### 155. Knock, B (66.8)\n\nNotification workflow API. Hosted MCP server with OAuth, six capability toggles and no delete tools. Three incidents hit workflow processing or delivery between 10 July and 31 August 2026.\n\n- Page: https://www.anchorterminal.com/tools/knock · Markdown: https://www.anchorterminal.com/tools/knock.md · JSON: https://www.anchorterminal.com/api/v1/tools/knock.json\n- Capabilities: notify.push, notify.in-app, notify.multichannel, notify.preferences, notify.digest · endpoint: `https://api.knock.app/v1`\n\n### 226. ntfy, C (61.6)\n\nOpen-source publish-subscribe service for push notifications. Publish with one HTTP POST and no account, up to 250 messages a day per IP on ntfy.sh. Unreserved topics on ntfy.sh can be read and written by anyone who knows the name.\n\n- Page: https://www.anchorterminal.com/tools/ntfy · Markdown: https://www.anchorterminal.com/tools/ntfy.md · JSON: https://www.anchorterminal.com/api/v1/tools/ntfy.json\n- Capabilities: notify.push · endpoint: `https://ntfy.sh`\n\n### 334. Pushover, D (53.3)\n\nPush notification service for your own phone, tablet or desktop. One POST with three required fields, form or JSON. Recipients need the app, $4.99 per platform after a 30-day trial.\n\n- Page: https://www.anchorterminal.com/tools/pushover · Markdown: https://www.anchorterminal.com/tools/pushover.md · JSON: https://www.anchorterminal.com/api/v1/tools/pushover.json\n- Capabilities: notify.push · endpoint: `https://api.pushover.net/1/messages.json`\n\n## How we test this category\n\nOne event sent to a user across in-app, push and email, with a digest and a preference opt-out. We check what arrives where, the batching, the opt-out and the delivery log. This test hasn't run yet, so Task success is pending and the grades here come from the categories assessed from public evidence.\n\n## Indexed, not reviewed (7)\n\nSorted into this category from public catalogues, with facts and our own checks but no score, grade or rank (https://www.anchorterminal.com/indexed/index.md).\n\n| Listing | Kind | What it does | Why it's here |\n| --- | --- | --- | --- |\n| [Apprise RMCP](https://www.anchorterminal.com/tools/dinglebear-apprise-rmcp.md) | MCP server | Rust MCP server and CLI for Apprise notification fan-out across dozens of delivery backends. | vendor's own |\n| [Apprise RMCP](https://www.anchorterminal.com/tools/dinglebear-rapprise.md) | MCP server | Apprise notifications over MCP and CLI with authenticated stdio and HTTP transports. | vendor's own |\n| [elaan.io MCP server](https://www.anchorterminal.com/tools/elaan-mcp.md) | MCP server | Create Elaan notification types, templates and brands, trigger sends, and debug delivery. | vendor's own |\n| [Gerrit Code Review](https://www.anchorterminal.com/tools/gaijin-go-gerrit-mcp.md) | MCP server | Capability-gated Gerrit code review tools with opt-in review notifications pushed into the session | vendor's own |\n| [Gotify RMCP](https://www.anchorterminal.com/tools/dinglebear-gotify-rmcp.md) | MCP server | Rust MCP server and CLI for Gotify push notifications and message management. | vendor's own |\n| [Gotify RMCP](https://www.anchorterminal.com/tools/dinglebear-rgotify.md) | MCP server | Gotify notifications and app, client, and message management over MCP and CLI. | vendor's own |\n| [Simplepush](https://www.anchorterminal.com/tools/simplepu-mcp.md) | MCP server | Send tasks and notifications to people's phones. Answers build a queryable knowledge base. | vendor's own |\n\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": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Notifications",
        "url": ""
      }
    ],
    "description": "7 notifications ranked by the Anchor benchmark. Leader Novu (BB). APIs that send one message to a person across push, in-app, email, SMS and chat, with preferences, batching and delivery tracking. Compared on channels, workflow logic, user preferences and price per notification.",
    "facts": [
      "Novu BB",
      "SuprSend BB",
      "Courier BB"
    ],
    "h1": "Notification APIs for AI agents",
    "image": "https://www.anchorterminal.com/assets/og/categories-notifications.png",
    "path": "/categories/notifications",
    "published": "",
    "section": "tools",
    "title": "Notification APIs for AI agents, ranked | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/categories/notifications"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 430
  },
  "version": 1
}
