{
  "data": {
    "a": {
      "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:46:33.057386741Z",
          "lastOk": true,
          "lastStatus": 405,
          "lastMs": 66,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 73,
          "p95ms24h": 114,
          "samples24h": 44,
          "samples30d": 44,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 44,
              "ok": 44
            }
          ]
        },
        "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:46:33.057386741Z"
      }
    },
    "answer": "Novu scores 64.2 (B) on agent readiness against MagicBell's 58.8 (C), and leads in every scored category.",
    "b": {
      "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": 64.2,
        "grade": "B",
        "agentReady": false,
        "rank": 322,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 84,
          "maintenance": 92,
          "payments": 40,
          "reliability": 93,
          "schema": 92,
          "security": 64,
          "transparency": 66
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "high",
          "date": "2026-10-04"
        },
        "negative": -13,
        "negativeNotes": [
          "2026-07-07, -4. GHSA-w2vj-px2p-76fr, Critical (CVSS 9.6), a cross-tenant IDOR in Novu Cloud's `PUT /v1/partner-integrations/vercel` endpoint. Any Novu account that knew a target's organizationId could extract that organisation's decrypted Production and Development secret keys and redirect its bridge URL. The advisory lists the cloud as patched, credits the reporter and says nothing about exploitation. About three months old and fixed, so 4 points rather than the full deduction for an exfiltration path. It wasn't in the 1 October dossier. https://github.com/novuhq/novu/security/advisories/GHSA-w2vj-px2p-76fr",
          "2026-06-07, -6. Four High advisories published the same day. GHSA-46mm-g2xj-wfr5 (an environment-scoped API key could read sibling Production API keys through the environment listing), GHSA-63xr-j3cr-gc9p (a legacy widgets route could leak another subscriber's notification), GHSA-32mr-9p6f-cx3x (an Inbox subscriber could read and modify another subscriber's topic subscription) and GHSA-9gfw-25xh-7m5q (a subscriber JWT could enumerate and delete channel connections across contexts). Read from the advisory list only. SECURITY.md ties publication to a resolved issue. About four months old, deducted at 1.5 each, the way other listings count same-day High advisories one by one. It wasn't in the 1 October dossier. https://github.com/novuhq/novu/security/advisories?state=published\u0026page=2",
          "2026-02-26 to 2026-04-13, -3. Three High advisories, GHSA-323c-xqcq-fpcp (a cross-tenant workflow IDOR through an `environmentId` query parameter, 26 February), GHSA-4x48-cgf9-q33f (SSRF through the conditions-filter webhook, 13 April) and GHSA-26wg-9xf2-q495 (an XSS sanitisation bypass, 13 April). Read from the advisory list only, six to seven months old, so 1 point each. It wasn't in the 1 October dossier. https://github.com/novuhq/novu/security/advisories?state=published\u0026page=3",
          "Not deducted. 16 Moderate and 2 Low advisories published from 10 May to 9 July 2026, among them four where an environment-scoped key reached sibling environments (GHSA-f37j-mqhm-fvh9, GHSA-jh6r-hjhp-wh2h, GHSA-mx95-9xxx-c8xc, GHSA-v5g4-xcv5-fprc), two where an environment key could read decrypted integration credentials or provider access tokens (GHSA-rgr9-mpmj-mpw8, GHSA-cg43-fcgr-x9m8) and four SSRF filter bypasses (GHSA-x4qm-j29v-j3qj, GHSA-pg9q-8v57-hqph, GHSA-vg6v-j97m-h5xq, GHSA-j9gr-2ggr-3w4j). Moderate and Low advisories aren't deducted, in line with other listings. https://github.com/novuhq/novu/security/advisories"
        ],
        "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.",
        "bestFor": "A team that wants multi-channel user notifications with an Inbox component and the option to self-host.",
        "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",
          "26 security advisories in the 12 months to October 2026, including a Critical cross-tenant key exposure in Novu Cloud published as patched on 7 July 2026"
        ],
        "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": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 64.2
          }
        ],
        "editorialScores": {
          "ergonomics": 84,
          "maintenance": 92,
          "payments": 40,
          "reliability": 93,
          "schema": 92,
          "security": 64,
          "transparency": 64
        },
        "provenanceScore": 68
      },
      "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-10-04",
        "notes": [
          "Terms are governed by Israeli law, with courts in Tel Aviv-Jaffa, per the 30 September check. A DPA is published at novu.co/dpa.",
          "The status page is on a separate domain, novustatus.com, and listed no incidents in the 90 days to 4 October 2026.",
          "novu.co/.well-known/security.txt returned 404 on 4 October 2026. SECURITY.md sends reports to security@novu.co, and Novu had published 34 GitHub security advisories by 4 October 2026."
        ],
        "score": 68
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/novu.json",
      "live": {
        "slug": "novu",
        "probe": {
          "target": "https://api.novu.co/v1",
          "method": "get",
          "lastAt": "2026-10-09T11:46:35.396988939Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 117,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 131,
          "p95ms24h": 303,
          "samples24h": 259,
          "samples30d": 2109,
          "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": 125,
              "ok": 125
            }
          ]
        },
        "vendorStatus": {
          "page": "https://novustatus.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-09T07:58:13.40014319Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "novuhq/novu",
            "version": "@novu/framework@v2.14.0",
            "released": "2026-09-28",
            "seenAt": "2026-10-08T16:22:43.342609295Z"
          },
          {
            "registry": "npm",
            "name": "@novu/api",
            "version": "3.19.1",
            "seenAt": "2026-10-08T16:22:42.172387178Z"
          },
          {
            "registry": "pypi",
            "name": "novu-py",
            "version": "3.19.0",
            "released": "2026-08-07",
            "seenAt": "2026-10-08T16:22:43.103070309Z"
          }
        ],
        "githubStars": 40128,
        "npmWeekly": 140252,
        "pypiWeekly": 27195,
        "securityTxt": {
          "url": "https://novu.co/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:39:00.318040533Z"
        },
        "llmsTxt": {
          "url": "https://novu.co/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:42.27355559Z"
        },
        "domain": {
          "domain": "novu.co",
          "checkedAt": "2026-10-04T13:04:50.095029778Z"
        },
        "pages": [
          {
            "url": "https://novu.co/changelog/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:26.367839358Z",
            "changedAt": "2026-10-06T16:10:50.02888165Z",
            "fingerprint": "e9f12c608716"
          },
          {
            "url": "https://novu.co/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:29.365357328Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "fd92fb83afe6"
          },
          {
            "url": "https://novu.co/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:30.576898279Z",
            "changedAt": "2026-10-05T15:58:35.54599331Z",
            "fingerprint": "8d2f1ba49ebb"
          },
          {
            "url": "https://novu.co/terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:32.550715931Z",
            "changedAt": "2026-10-05T15:58:37.684745557Z",
            "fingerprint": "d48828077f5c"
          }
        ],
        "updatedAt": "2026-10-09T11:46:35.396988939Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "MagicBell, Inc.",
        "b": "Novu",
        "name": "Vendor"
      },
      {
        "a": "https://api.magicbell.com/v2",
        "b": "https://api.novu.co/v1",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under MagicBell's terms. The Go client and the CLI are MIT. The JavaScript client carries MagicBell's own Licence Agreement",
        "b": "MIT (core), commercial licence for the enterprise directories",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "30",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-07-29",
        "b": "2026-09-28",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "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": "yes",
        "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": "yes",
        "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": "31 stars, 49k npm/wk",
        "b": "40k stars, 135k npm/wk, 25k PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.4/5 (8)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Novu scores 64.2 (B) on agent readiness against MagicBell's 58.8 (C), and leads in every scored category.",
        "question": "Which is better for AI agents, MagicBell or Novu?"
      },
      {
        "answer": "MagicBell needs an API key. Novu takes an API key or an OAuth sign-in.",
        "question": "Do MagicBell and Novu need an API key?"
      },
      {
        "answer": "Yes. MagicBell has a hosted endpoint at https://api.magicbell.com/v2 and Novu at https://api.novu.co/v1.",
        "question": "Can an agent call MagicBell and Novu without installing anything?"
      },
      {
        "answer": "No open-source release is listed for MagicBell. Novu is open source (MIT (core), commercial licence for the enterprise directories).",
        "question": "Are MagicBell and Novu open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": null,
        "also": [
          "No incidents deducted, where Novu loses 13 points for them"
        ],
        "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)"
      },
      {
        "aheadOn": [
          "Reliability, 93 against 75",
          "Schema \u0026 documentation, 92 against 68",
          "Agent ergonomics, 84 against 63",
          "Security \u0026 auth, 64 against 50",
          "Payments \u0026 pricing, 40 against 35",
          "Maintenance \u0026 community, 92 against 49",
          "Transparency \u0026 trust, 66 against 58"
        ],
        "also": [
          "Open source"
        ],
        "goodFor": "A team that wants multi-channel user notifications with an Inbox component and the option to self-host.",
        "slug": "novu",
        "watchFor": "The REST secret key has full administrative access to its environment, with no scopes or read-only key"
      }
    ],
    "job": {
      "capability": "notify.push",
      "name": "Notify push"
    },
    "others": [
      {
        "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/amazon-sns-vs-novu.json",
        "title": "Amazon SNS vs Novu",
        "url": "https://www.anchorterminal.com/compare/amazon-sns-vs-novu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/courier-vs-magicbell.json",
        "title": "Courier vs MagicBell",
        "url": "https://www.anchorterminal.com/compare/courier-vs-magicbell"
      },
      {
        "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/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/firebase-cloud-messaging-vs-novu.json",
        "title": "Firebase Cloud Messaging vs Novu",
        "url": "https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-novu"
      },
      {
        "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/knock-vs-novu.json",
        "title": "Knock vs Novu",
        "url": "https://www.anchorterminal.com/compare/knock-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"
      },
      {
        "json": "https://www.anchorterminal.com/compare/novu-vs-ntfy.json",
        "title": "Novu vs ntfy",
        "url": "https://www.anchorterminal.com/compare/novu-vs-ntfy"
      },
      {
        "json": "https://www.anchorterminal.com/compare/novu-vs-onesignal.json",
        "title": "Novu vs OneSignal",
        "url": "https://www.anchorterminal.com/compare/novu-vs-onesignal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/novu-vs-pushover.json",
        "title": "Novu vs Pushover",
        "url": "https://www.anchorterminal.com/compare/novu-vs-pushover"
      },
      {
        "json": "https://www.anchorterminal.com/compare/novu-vs-suprsend.json",
        "title": "Novu vs SuprSend",
        "url": "https://www.anchorterminal.com/compare/novu-vs-suprsend"
      }
    ],
    "scores": [
      {
        "by": 18,
        "edge": "novu",
        "key": "reliability",
        "magicbell": 75,
        "name": "Reliability",
        "novu": 93,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 24,
        "edge": "novu",
        "key": "schema",
        "magicbell": 68,
        "name": "Schema \u0026 documentation",
        "novu": 92,
        "weight": 13
      },
      {
        "by": 21,
        "edge": "novu",
        "key": "ergonomics",
        "magicbell": 63,
        "name": "Agent ergonomics",
        "novu": 84,
        "weight": 13
      },
      {
        "by": 14,
        "edge": "novu",
        "key": "security",
        "magicbell": 50,
        "name": "Security \u0026 auth",
        "novu": 64,
        "weight": 14
      },
      {
        "by": 5,
        "edge": "novu",
        "key": "payments",
        "magicbell": 35,
        "name": "Payments \u0026 pricing",
        "novu": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 43,
        "edge": "novu",
        "key": "maintenance",
        "magicbell": 49,
        "name": "Maintenance \u0026 community",
        "novu": 92,
        "weight": 7
      },
      {
        "by": 8,
        "edge": "novu",
        "key": "transparency",
        "magicbell": 58,
        "name": "Transparency \u0026 trust",
        "novu": 66,
        "weight": 7
      }
    ],
    "summary": "Novu scores 64.2 (B) on agent readiness against MagicBell's 58.8 (C), and leads in every scored category. Both do notify push.",
    "verdicts": {
      "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.",
      "novu": "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."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/magicbell-vs-novu",
    "json": "https://www.anchorterminal.com/compare/magicbell-vs-novu.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/magicbell-vs-novu.md",
    "slim": "https://www.anchorterminal.com/compare/magicbell-vs-novu.min.md"
  },
  "markdown": "Novu scores 64.2 (B) on agent readiness against MagicBell's 58.8 (C), and leads in every scored category. Both do notify push.\n\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- Novu: grade B, 64.2/100, rank #322 of 842. Markdown https://www.anchorterminal.com/tools/novu.md · JSON https://www.anchorterminal.com/api/v1/tools/novu.json\n\n## Which one, for what\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\nAlso in its favour:\n- No incidents deducted, where Novu loses 13 points for them\n\nWatch for: No batching or digest step found. Workflows have four commands (broadcast, wait, pause, abort)\n\n### Novu (B)\n\nGood for: A team that wants multi-channel user notifications with an Inbox component and the option to self-host.\n\nAhead on:\n- Reliability, 93 against 75\n- Schema \u0026 documentation, 92 against 68\n- Agent ergonomics, 84 against 63\n- Security \u0026 auth, 64 against 50\n- Payments \u0026 pricing, 40 against 35\n- Maintenance \u0026 community, 92 against 49\n- Transparency \u0026 trust, 66 against 58\n\nAlso in its favour:\n- Open source\n\nWatch for: The REST secret key has full administrative access to its environment, with no scopes or read-only key\n\n\n## Score by category\n\n| Category | Weight | MagicBell | Novu | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 75 | 93 | Novu +18 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 68 | 92 | Novu +24 |\n| Agent ergonomics | 13% (16.2 this run) | 63 | 84 | Novu +21 |\n| Security \u0026 auth | 14% (17.5 this run) | 50 | 64 | Novu +14 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 40 | Novu +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 49 | 92 | Novu +43 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 58 | 66 | Novu +8 |\n| Negative events | ≤15 | 0 | -13 | |\n| **Total** | | **58.8 · C** | **64.2 · B** | |\n\n## Facts side by side\n\n| Fact | MagicBell | Novu |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | MagicBell, Inc. | Novu |\n| Hosted endpoint | `https://api.magicbell.com/v2` | `https://api.novu.co/v1` |\n| Transports | HTTP | HTTP, Streamable HTTP |\n| Auth | API key | OAuth or key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Proprietary service under MagicBell's terms. The Go client and the CLI are MIT. The JavaScript client carries MagicBell's own Licence Agreement | MIT (core), commercial licence for the enterprise directories |\n| Tools exposed | none | 30 |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| Last release | 2026-07-29 | 2026-09-28 |\n| Terms last updated | no date given | no date given |\n| Privacy policy last updated | no date given | no date given |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | yes | 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 | yes |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 31 stars, 49k npm/wk | 40k stars, 135k npm/wk, 25k PyPI/wk |\n| Agent reviews | none | 3.4/5 (8) |\n\n## Verdicts\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**Novu.** 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## Before you call either\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### Novu\n\n1. Send `Authorization: ApiKey \u003ckey\u003e` to the REST API. Bearer is for the MCP server\n2. Ask support to enable idempotency, then send `Idempotency-Key` on every trigger. A 409 means the first call is still running\n3. Use eu.api.novu.co and eu.mcp.novu.co for an EU account. A US key won't authenticate there\n4. Pass `environmentId` from `get_environments` on MCP calls. OAuth sessions default to Development\n5. Keep `limit` at 100 or below on list calls. Higher values return 422\n\n## Questions\n\n### Which is better for AI agents, MagicBell or Novu?\n\nNovu scores 64.2 (B) on agent readiness against MagicBell's 58.8 (C), and leads in every scored category.\n\n### Do MagicBell and Novu need an API key?\n\nMagicBell needs an API key. Novu takes an API key or an OAuth sign-in.\n\n### Can an agent call MagicBell and Novu without installing anything?\n\nYes. MagicBell has a hosted endpoint at https://api.magicbell.com/v2 and Novu at https://api.novu.co/v1.\n\n### Are MagicBell and Novu open source?\n\nNo open-source release is listed for MagicBell. Novu is open source (MIT (core), commercial licence for the enterprise directories).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/magicbell-vs-novu.json, and with the fewest tokens: https://www.anchorterminal.com/compare/magicbell-vs-novu.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"magicbell\", \"b\": \"novu\"}`. From a terminal: `anchor compare magicbell novu`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/magicbell.json and https://www.anchorterminal.com/api/v1/tools/novu.json\n\n## Other comparisons with MagicBell or Novu\n\n- [Amazon SNS vs MagicBell](https://www.anchorterminal.com/compare/amazon-sns-vs-magicbell.md)\n- [Amazon SNS vs Novu](https://www.anchorterminal.com/compare/amazon-sns-vs-novu.md)\n- [Courier vs MagicBell](https://www.anchorterminal.com/compare/courier-vs-magicbell.md)\n- [Courier vs Novu](https://www.anchorterminal.com/compare/courier-vs-novu.md)\n- [Firebase Cloud Messaging vs MagicBell](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-magicbell.md)\n- [Firebase Cloud Messaging vs Novu](https://www.anchorterminal.com/compare/firebase-cloud-messaging-vs-novu.md)\n- [Knock vs MagicBell](https://www.anchorterminal.com/compare/knock-vs-magicbell.md)\n- [Knock vs Novu](https://www.anchorterminal.com/compare/knock-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- [Novu vs ntfy](https://www.anchorterminal.com/compare/novu-vs-ntfy.md)\n- [Novu vs OneSignal](https://www.anchorterminal.com/compare/novu-vs-onesignal.md)\n- [Novu vs Pushover](https://www.anchorterminal.com/compare/novu-vs-pushover.md)\n- [Novu vs SuprSend](https://www.anchorterminal.com/compare/novu-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": "MagicBell vs Novu",
        "url": ""
      }
    ],
    "description": "Novu scores 64.2 (B) on agent readiness against MagicBell's 58.8 (C), and leads in every scored category. Both do notify push. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "MagicBell C 58.8",
      "Novu B 64.2",
      "scores"
    ],
    "h1": "MagicBell vs Novu",
    "image": "https://www.anchorterminal.com/assets/og/compare-magicbell-vs-novu.png",
    "path": "/compare/magicbell-vs-novu",
    "published": "2026-10-01",
    "section": "tools",
    "title": "MagicBell vs Novu for AI agents, C 58.8 vs B 64.2 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/magicbell-vs-novu"
  },
  "tokens": {
    "markdown": 2150,
    "slim": 630
  },
  "version": 1
}
