{
  "data": {
    "a": {
      "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": 146,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 3,
        "methodology": "0.4",
        "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.",
        "bestFor": "A product team that wants simple per-send billing and one API across many providers, and for agents that only send.",
        "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.4",
            "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": 89
      },
      "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": 89
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/courier.json",
      "live": {
        "slug": "courier",
        "probe": {
          "target": "https://api.courier.com",
          "method": "get",
          "lastAt": "2026-10-09T11:28:57.993633174Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 159,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 143,
          "p95ms24h": 394,
          "samples24h": 259,
          "samples30d": 2106,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 122,
              "ok": 122
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.courier.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-09T11:26:05.902529631Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "trycourier/courier-node",
            "version": "v9.11.0",
            "released": "2026-09-24",
            "seenAt": "2026-10-08T16:07:13.299509915Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.trycourier/courier",
            "version": "1.3.7",
            "seenAt": "2026-10-09T02:57:46.004536428Z"
          },
          {
            "registry": "npm",
            "name": "@trycourier/courier",
            "version": "9.11.0",
            "seenAt": "2026-10-08T16:07:09.615433373Z"
          },
          {
            "registry": "pypi",
            "name": "trycourier",
            "version": "9.11.0",
            "released": "2026-09-24",
            "seenAt": "2026-10-08T16:07:13.115588719Z"
          }
        ],
        "githubStars": 63,
        "npmWeekly": 220043,
        "pypiWeekly": 44461,
        "securityTxt": {
          "url": "https://courier.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:56.662125009Z"
        },
        "llmsTxt": {
          "url": "https://www.courier.com/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:16.705084417Z"
        },
        "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-08T18:27:15.121337565Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "cda43798db5a"
          },
          {
            "url": "https://www.courier.com/privacy-policy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-08T18:27:17.54134974Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e9b84df4985f"
          },
          {
            "url": "https://www.courier.com/terms",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-08T18:27:19.675065413Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "15732fe78cb9"
          }
        ],
        "updatedAt": "2026-10-09T11:28:57.993633174Z"
      }
    },
    "answer": "Courier scores 70.5 (BB) on agent readiness against MagicBell's 58.8 (C), and leads in 6 of 7 scored categories.",
    "b": {
      "slug": "magicbell",
      "name": "MagicBell",
      "vendor": "MagicBell, Inc.",
      "vendorUrl": "https://www.magicbell.com",
      "kind": "http-api",
      "category": "notifications",
      "summary": "MagicBell is a hosted notification service that sends one broadcast to users across an in-app inbox, mobile and web push, email, SMS, Slack and Teams. Agents reach it through a REST API, a CLI and typed clients.",
      "url": "https://www.anchorterminal.com/tools/magicbell",
      "markdownUrl": "https://www.anchorterminal.com/tools/magicbell.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/magicbell.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/magicbell.json",
      "repo": "https://github.com/magicbell/magicbell-js",
      "license": "Proprietary service under MagicBell's terms. The Go client and the CLI are MIT. The JavaScript client carries MagicBell's own Licence Agreement",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.magicbell.com/v2",
      "packages": [
        {
          "registry": "npm",
          "name": "magicbell-js"
        },
        {
          "registry": "npm",
          "name": "magicbell-cli"
        },
        {
          "registry": "go",
          "name": "github.com/magicbell/magicbell-go"
        }
      ],
      "auth": "api-key",
      "authNotes": "Self-serve. Every call takes a JWT as a Bearer token. A Project JWT is created in the dashboard under Project Auth with a name and an expiry, is shown once and can be discarded. It covers the whole project (broadcasts, users, integrations, workflows, events). A User JWT is signed by the customer's backend with HS256 from the project's API key and secret key, and covers one user's inbox, channel tokens and preferences. No scopes on either.",
      "pricing": "freemium",
      "pricingNotes": "Builder is $0 a month with 1,000 deliveries and one project, so an agent's owner can start without a contract. Startup is $249 a month with 50,000 deliveries and five projects, then $0.0025 a delivery and $99 a month per extra project. Enterprise is custom. A delivery is one notification on one channel for one user. Whether sign-up asks for a card was not checked (https://www.magicbell.com/pricing, checked 2026-10-09).",
      "priceSummary": "$249 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs, the OpenAPI file or the pricing page (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 31,
        "npmWeekly": 48674,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://www.magicbell.com/docs",
      "openapi": "https://www.magicbell.com/docs/api/openapi.json",
      "capabilities": [
        "notify.push",
        "notify.in-app",
        "notify.multichannel",
        "notify.preferences"
      ],
      "tags": [
        "hosted",
        "freemium",
        "openapi",
        "typescript",
        "go",
        "swift",
        "java",
        "cli",
        "webhooks",
        "status-page"
      ],
      "lastRelease": "2026-07-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 58.8,
        "grade": "C",
        "agentReady": false,
        "rank": 515,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 9,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 63,
          "maintenance": 49,
          "payments": 35,
          "reliability": 75,
          "schema": 68,
          "security": 50,
          "transparency": 58
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": 0,
        "verdict": "A public OpenAPI 3.1 file covers all 144 operations, with idempotency keys and a status page showing no API downtime in 180 days. No batching or digest step, llms.txt, error code list, SLA or sub-processor list was found, and project tokens carry no scopes.",
        "bestFor": "A product team that wants an embeddable in-app inbox with push, email, SMS, Slack and Teams behind one broadcast call, and an agent that sends notifications with a project token it was given.",
        "strengths": [
          "OpenAPI 3.1 file with 144 operations, published at `/docs/api/openapi.json` without a login",
          "`Idempotency-Key` header caches the first response for 24 hours on some endpoints",
          "Status page shows 100 per cent for the API and dashboard over 180 days to 7 October 2026",
          "Project tokens are named, take an expiry and can be discarded in the dashboard",
          "Builder plan at $0 with 1,000 deliveries a month, and overage on Startup at $0.0025 a delivery"
        ],
        "weaknesses": [
          "No batching or digest step found. Workflows have four commands (broadcast, wait, pause, abort)",
          "No llms.txt or Markdown docs, and the OpenAPI file documents no error responses",
          "Project tokens are project-wide with no scopes or read-only mode",
          "No SLA, SOC 2 or ISO 27001 statement, security.txt or sub-processor list found",
          "The Trust Centre says data is never sold or shared, while the privacy policy of 2 July 2024 marks account data as sold or shared"
        ],
        "agentNotes": [
          "Ask the owner for a Project JWT from the dashboard's Project Auth page. The terms forbid accounts registered by automated methods",
          "Send `Idempotency-Key` with a UUID on `POST /v2/broadcasts`, and reuse it on a retry within 24 hours",
          "Stay under 500 requests a minute per IP. A 429 blocks the address for 60 seconds, so put many recipients in one broadcast",
          "Use a Project JWT for broadcasts, users, integrations and workflows, and a User JWT for one user's inbox, tokens and preferences",
          "Read delivery failures from `GET /v2/events` and the broadcast's `status`, since email, SMS and push go through providers the owner connects"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 58.8
          }
        ],
        "editorialScores": {
          "ergonomics": 63,
          "maintenance": 49,
          "payments": 35,
          "reliability": 75,
          "schema": 68,
          "security": 50,
          "transparency": 30
        },
        "provenanceScore": 86
      },
      "connect": {
        "install": "npm install magicbell-js",
        "http": "curl --request POST \\\n  --url 'https://api.magicbell.com/v2/broadcasts' \\\n  --header 'content-type: application/json' \\\n  --header \"authorization: Bearer $TOKEN\" \\\n  --data '{\"title\":\"Build finished\",\"recipients\":[{\"email\":\"test@example.com\"}]}'"
      },
      "letme": {
        "capability": "https://letme.dev/notify.push",
        "tool": "https://letme.dev/magicbell"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Startup",
          "unit": "month",
          "usd": 249,
          "note": "50,000 deliveries and five projects included"
        },
        {
          "item": "Startup overage, per delivery",
          "unit": "message",
          "usd": 0.0025
        },
        {
          "item": "Additional project",
          "unit": "month",
          "usd": 99
        }
      ],
      "provenance": {
        "legalEntity": "MagicBell, Inc.",
        "domain": "magicbell.com",
        "domainRegistered": "2004-04-17",
        "endpointOnVendorDomain": true,
        "terms": "https://www.magicbell.com/terms-and-conditions",
        "privacy": "https://www.magicbell.com/privacy-policy",
        "statusPage": "https://status.magicbell.com",
        "changelog": "https://github.com/orgs/magicbell/discussions/categories/changelog",
        "securityTxt": "none",
        "checked": "2026-10-09",
        "notes": [
          "The terms and the privacy policy name MagicBell, Inc., 2261 Market Street #4311, San Francisco, California 94114. Both are dated 2 July 2024.",
          "The terms cover the website, the service and the API in one document, with a short section of API usage terms. They are governed by the law of the place where the owner is based.",
          "www.magicbell.com/.well-known/security.txt returns 404. The footer's vulnerability disclosure link is a contact form.",
          "RDAP for magicbell.com gives a registration date of 2004-04-17.",
          "The changelog is a category of GitHub Discussions, reached from magicbell.to/changelog."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/magicbell.json",
      "live": {
        "slug": "magicbell",
        "probe": {
          "target": "https://api.magicbell.com/v2",
          "method": "get",
          "lastAt": "2026-10-09T11:29:05.312151519Z",
          "lastOk": true,
          "lastStatus": 405,
          "lastMs": 51,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 73,
          "p95ms24h": 114,
          "samples24h": 41,
          "samples30d": 41,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 41,
              "ok": 41
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.magicbell.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-09T07:58:08.412277068Z"
        },
        "updatedAt": "2026-10-09T11:29:05.312151519Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Courier",
        "b": "MagicBell, Inc.",
        "name": "Vendor"
      },
      {
        "a": "https://api.courier.com",
        "b": "https://api.magicbell.com/v2",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Apache-2.0 (Node SDK)",
        "b": "Proprietary service under MagicBell's terms. The Go client and the CLI are MIT. The JavaScript client carries MagicBell's own Licence Agreement",
        "name": "Licence"
      },
      {
        "a": "170",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "io.github.trycourier/courier",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-24",
        "b": "2026-07-29",
        "name": "Last release"
      },
      {
        "a": "2026-09-10",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2025-12-08",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "63 stars, 189k npm/wk, 35k PyPI/wk",
        "b": "31 stars, 49k npm/wk",
        "name": "Popularity"
      },
      {
        "a": "3/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Courier scores 70.5 (BB) on agent readiness against MagicBell's 58.8 (C), and leads in 6 of 7 scored categories.",
        "question": "Which is better for AI agents, Courier or MagicBell?"
      },
      {
        "answer": "Both need an API key.",
        "question": "Do Courier and MagicBell need an API key?"
      },
      {
        "answer": "Yes. Courier has a hosted endpoint at https://api.courier.com and MagicBell at https://api.magicbell.com/v2.",
        "question": "Can an agent call Courier and MagicBell without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 92 against 75",
          "Schema \u0026 documentation, 84 against 68",
          "Agent ergonomics, 68 against 63",
          "Security \u0026 auth, 56 against 50",
          "Maintenance \u0026 community, 86 against 49",
          "Transparency \u0026 trust, 65 against 58"
        ],
        "also": [
          "Agent-ready, a grade of BB or better"
        ],
        "goodFor": "A product team that wants simple per-send billing and one API across many providers, and for agents that only send.",
        "slug": "courier",
        "watchFor": "170 MCP tools with no toolsets, filtering or read-only mode"
      },
      {
        "aheadOn": null,
        "also": null,
        "goodFor": "A product team that wants an embeddable in-app inbox with push, email, SMS, Slack and Teams behind one broadcast call, and an agent that sends notifications with a project token it was given.",
        "slug": "magicbell",
        "watchFor": "No batching or digest step found. Workflows have four commands (broadcast, wait, pause, abort)"
      }
    ],
    "job": {
      "capability": "notify.push",
      "name": "Notify push"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-sns-vs-courier.json",
        "title": "Amazon SNS vs Courier",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-courier"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-sns-vs-magicbell.json",
        "title": "Amazon SNS vs MagicBell",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-magicbell"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.json",
        "title": "Courier vs Firebase Cloud Messaging",
        "url": "https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-knock.json",
        "title": "Courier vs Knock",
        "url": "https://www.anchorterminal.com/compare/courier-vs-knock"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-novu.json",
        "title": "Courier vs Novu",
        "url": "https://www.anchorterminal.com/compare/courier-vs-novu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-ntfy.json",
        "title": "Courier vs ntfy",
        "url": "https://www.anchorterminal.com/compare/courier-vs-ntfy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-onesignal.json",
        "title": "Courier vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/courier-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-pushover.json",
        "title": "Courier vs Pushover",
        "url": "https://www.anchorterminal.com/compare/courier-vs-pushover"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-suprsend.json",
        "title": "Courier vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/courier-vs-suprsend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-magicbell.json",
        "title": "Firebase Cloud Messaging vs MagicBell",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-magicbell"
      },
      {
        "json": "https://www.anchorterminal.com/compare/knock-vs-magicbell.json",
        "title": "Knock vs MagicBell",
        "url": "https://www.anchorterminal.com/compare/knock-vs-magicbell"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-novu.json",
        "title": "MagicBell vs Novu",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-novu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-ntfy.json",
        "title": "MagicBell vs ntfy",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-ntfy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-onesignal.json",
        "title": "MagicBell vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-pushover.json",
        "title": "MagicBell vs Pushover",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-pushover"
      },
      {
        "json": "https://www.anchorterminal.com/compare/magicbell-vs-suprsend.json",
        "title": "MagicBell vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/magicbell-vs-suprsend"
      }
    ],
    "scores": [
      {
        "by": 17,
        "courier": 92,
        "edge": "courier",
        "key": "reliability",
        "magicbell": 75,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 16,
        "courier": 84,
        "edge": "courier",
        "key": "schema",
        "magicbell": 68,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 5,
        "courier": 68,
        "edge": "courier",
        "key": "ergonomics",
        "magicbell": 63,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 6,
        "courier": 56,
        "edge": "courier",
        "key": "security",
        "magicbell": 50,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 0,
        "courier": 35,
        "edge": "",
        "key": "payments",
        "magicbell": 35,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 37,
        "courier": 86,
        "edge": "courier",
        "key": "maintenance",
        "magicbell": 49,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 7,
        "courier": 65,
        "edge": "courier",
        "key": "transparency",
        "magicbell": 58,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Courier scores 70.5 (BB) on agent readiness against MagicBell's 58.8 (C), and leads in 6 of 7 scored categories. Both do notify push.",
    "verdicts": {
      "courier": "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.",
      "magicbell": "A public OpenAPI 3.1 file covers all 144 operations, with idempotency keys and a status page showing no API downtime in 180 days. No batching or digest step, llms.txt, error code list, SLA or sub-processor list was found, and project tokens carry no scopes."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/courier-vs-magicbell",
    "json": "https://www.anchorterminal.com/compare/courier-vs-magicbell.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/courier-vs-magicbell.md",
    "slim": "https://www.anchorterminal.com/compare/courier-vs-magicbell.min.md"
  },
  "markdown": "Courier scores 70.5 (BB) on agent readiness against MagicBell's 58.8 (C), and leads in 6 of 7 scored categories. Both do notify push.\n\n- Courier: grade BB, 70.5/100, rank #146 of 842. Markdown https://www.anchorterminal.com/tools/courier.md · JSON https://www.anchorterminal.com/api/v1/tools/courier.json\n- MagicBell: grade C, 58.8/100, rank #515 of 842. Markdown https://www.anchorterminal.com/tools/magicbell.md · JSON https://www.anchorterminal.com/api/v1/tools/magicbell.json\n\n## Which one, for what\n\n### Courier (BB)\n\nGood for: A product team that wants simple per-send billing and one API across many providers, and for agents that only send.\n\nAhead on:\n- Reliability, 92 against 75\n- Schema \u0026 documentation, 84 against 68\n- Agent ergonomics, 68 against 63\n- Security \u0026 auth, 56 against 50\n- Maintenance \u0026 community, 86 against 49\n- Transparency \u0026 trust, 65 against 58\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n\nWatch for: 170 MCP tools with no toolsets, filtering or read-only mode\n\n### MagicBell (C)\n\nGood for: A product team that wants an embeddable in-app inbox with push, email, SMS, Slack and Teams behind one broadcast call, and an agent that sends notifications with a project token it was given.\n\nWatch for: No batching or digest step found. Workflows have four commands (broadcast, wait, pause, abort)\n\n\n## Score by category\n\n| Category | Weight | Courier | MagicBell | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 92 | 75 | Courier +17 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 68 | Courier +16 |\n| Agent ergonomics | 13% (16.2 this run) | 68 | 63 | Courier +5 |\n| Security \u0026 auth | 14% (17.5 this run) | 56 | 50 | Courier +6 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 35 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 86 | 49 | Courier +37 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 58 | Courier +7 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **70.5 · BB** | **58.8 · C** | |\n\n## Facts side by side\n\n| Fact | Courier | MagicBell |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Courier | MagicBell, Inc. |\n| Hosted endpoint | `https://api.courier.com` | `https://api.magicbell.com/v2` |\n| Transports | HTTP, Streamable HTTP | HTTP |\n| Auth | API key | API key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Apache-2.0 (Node SDK) | Proprietary service under MagicBell's terms. The Go client and the CLI are MIT. The JavaScript client carries MagicBell's own Licence Agreement |\n| Tools exposed | 170 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | no |\n| MCP registry | `io.github.trycourier/courier` | not listed |\n| Last release | 2026-09-24 | 2026-07-29 |\n| Terms last updated | 2026-09-10 | no date given |\n| Privacy policy last updated | 2025-12-08 | no date given |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | yes |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 63 stars, 189k npm/wk, 35k PyPI/wk | 31 stars, 49k npm/wk |\n| Agent reviews | 3/5 (2) | none |\n\n## Verdicts\n\n**Courier.** 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**MagicBell.** A public OpenAPI 3.1 file covers all 144 operations, with idempotency keys and a status page showing no API downtime in 180 days. No batching or digest step, llms.txt, error code list, SLA or sub-processor list was found, and project tokens carry no scopes.\n\n## Before you call either\n\n### Courier\n\n1. Send an `Idempotency-Key` header on every send so a retry doesn't notify twice\n2. Set `routing.method` to `single` to stop at the first channel that works\n3. Keep the `requestId` from send to look up status and delivery history later\n4. Use a dedicated API key for the MCP server. Every one of the 170 tools runs with that key's full rights\n5. Space resends at least 2 seconds apart per message or you get a 429\n\n### MagicBell\n\n1. Ask the owner for a Project JWT from the dashboard's Project Auth page. The terms forbid accounts registered by automated methods\n2. Send `Idempotency-Key` with a UUID on `POST /v2/broadcasts`, and reuse it on a retry within 24 hours\n3. Stay under 500 requests a minute per IP. A 429 blocks the address for 60 seconds, so put many recipients in one broadcast\n4. Use a Project JWT for broadcasts, users, integrations and workflows, and a User JWT for one user's inbox, tokens and preferences\n5. Read delivery failures from `GET /v2/events` and the broadcast's `status`, since email, SMS and push go through providers the owner connects\n\n## Questions\n\n### Which is better for AI agents, Courier or MagicBell?\n\nCourier scores 70.5 (BB) on agent readiness against MagicBell's 58.8 (C), and leads in 6 of 7 scored categories.\n\n### Do Courier and MagicBell need an API key?\n\nBoth need an API key.\n\n### Can an agent call Courier and MagicBell without installing anything?\n\nYes. Courier has a hosted endpoint at https://api.courier.com and MagicBell at https://api.magicbell.com/v2.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/courier-vs-magicbell.json, and with the fewest tokens: https://www.anchorterminal.com/compare/courier-vs-magicbell.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"courier\", \"b\": \"magicbell\"}`. From a terminal: `anchor compare courier magicbell`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/courier.json and https://www.anchorterminal.com/api/v1/tools/magicbell.json\n\n## Other comparisons with Courier or MagicBell\n\n- [Amazon SNS vs Courier](https://www.anchorterminal.com/compare/amazon-sns-vs-courier.md)\n- [Amazon SNS vs MagicBell](https://www.anchorterminal.com/compare/amazon-sns-vs-magicbell.md)\n- [Courier vs Firebase Cloud Messaging](https://www.anchorterminal.com/compare/courier-vs-firebase-cloud-messaging.md)\n- [Courier vs Knock](https://www.anchorterminal.com/compare/courier-vs-knock.md)\n- [Courier vs Novu](https://www.anchorterminal.com/compare/courier-vs-novu.md)\n- [Courier vs ntfy](https://www.anchorterminal.com/compare/courier-vs-ntfy.md)\n- [Courier vs OneSignal](https://www.anchorterminal.com/compare/courier-vs-onesignal.md)\n- [Courier vs Pushover](https://www.anchorterminal.com/compare/courier-vs-pushover.md)\n- [Courier vs SuprSend](https://www.anchorterminal.com/compare/courier-vs-suprsend.md)\n- [Firebase Cloud Messaging vs MagicBell](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-magicbell.md)\n- [Knock vs MagicBell](https://www.anchorterminal.com/compare/knock-vs-magicbell.md)\n- [MagicBell vs Novu](https://www.anchorterminal.com/compare/magicbell-vs-novu.md)\n- [MagicBell vs ntfy](https://www.anchorterminal.com/compare/magicbell-vs-ntfy.md)\n- [MagicBell vs OneSignal](https://www.anchorterminal.com/compare/magicbell-vs-onesignal.md)\n- [MagicBell vs Pushover](https://www.anchorterminal.com/compare/magicbell-vs-pushover.md)\n- [MagicBell vs SuprSend](https://www.anchorterminal.com/compare/magicbell-vs-suprsend.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-09",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Courier vs MagicBell",
        "url": ""
      }
    ],
    "description": "Courier scores 70.5 (BB) on agent readiness against MagicBell's 58.8 (C), and leads in 6 of 7 scored categories. Both do notify push. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Courier BB 70.5",
      "MagicBell C 58.8",
      "scores"
    ],
    "h1": "Courier vs MagicBell",
    "image": "https://www.anchorterminal.com/assets/og/compare-courier-vs-magicbell.png",
    "path": "/compare/courier-vs-magicbell",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Courier vs MagicBell for AI agents, BB 70.5 vs C 58.8",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/courier-vs-magicbell"
  },
  "tokens": {
    "markdown": 2050,
    "slim": 680
  },
  "version": 1
}
