{
  "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"
  },
  "tool": {
    "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"
      ],
      "breakdown": [
        {
          "key": "reliability",
          "name": "Reliability",
          "weight": 16,
          "effectiveWeight": 20,
          "score": 75,
          "points": 15,
          "reason": "Graded as a hosted API. Status page on Better Stack at status.magicbell.com with four components and daily history (20). In the 90 days to 9 October 2026 the API and dashboard show no downtime. In-app delivery shows about 10 minutes on 13 July, 11 minutes on 31 July and 39 minutes on 26 August, and email delivery 39 minutes on 26 August, with no incident write-up in the feed (20). The limit is published as 500 requests a minute per IP address (15). A 429 is documented with a 60-second block, and an `Idempotency-Key` header caches the first response for 24 hours on some endpoints, but no Retry-After header or backoff guidance was found (10). No SLA found on the pricing page or in the terms (0). API v2 is the current version (10)."
        },
        {
          "key": "performance",
          "name": "Performance",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Latency is measured per call by our probes, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until the first probe window closes."
        },
        {
          "key": "schema",
          "name": "Schema \u0026 documentation",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 68,
          "points": 11.05,
          "reason": "OpenAPI 3.1 file at /docs/api/openapi.json with 84 paths and 144 operations (25). /llms.txt returns 404 and no Markdown docs were found (0). Every operation has a description that states its purpose, many of them templated across the 16 integration types, and none says when not to use it (10). Required fields, patterns, length limits and ten enums are present and unknown query parameters are refused, but `custom_attributes` and workflow `input` are free-form objects and the file declares no security schemes (11). 88 schema examples, but only 200, 201 and 204 responses are described, and the docs show one error example with no list of codes (7). The path carries the version, v1 is marked deprecated and the changelog is public on GitHub Discussions (15)."
        },
        {
          "key": "ergonomics",
          "name": "Agent ergonomics",
          "weight": 13,
          "effectiveWeight": 16.25,
          "score": 63,
          "points": 10.24,
          "reason": "List endpoints take `limit` (default 50) and there is no field selection (12). Cursor pagination with `starting_after` and `ending_before` on 21 endpoints, and notifications filter by status, category and topic (14). Errors return an array of `code` and `message` pairs, with no published list of codes (8). `Idempotency-Key` holds for 24 hours on some endpoints, which the docs don't name, and saves are PUT upserts (14). A broadcast needs only `title` and `recipients`, and official clients exist for JavaScript, Go, Swift and Java, with a CLI (15)."
        },
        {
          "key": "security",
          "name": "Security \u0026 auth",
          "weight": 14,
          "effectiveWeight": 17.5,
          "score": 50,
          "points": 8.75,
          "reason": "Two credentials. A Project JWT is created in the dashboard with a name and an expiry, is shown once and can be discarded. A User JWT is signed by the customer's backend with HS256 and limits calls to one user. Project tokens carry no scopes (22). The User JWT confines a client to one user's inbox, but no read-only project token or confirmation for deletes was found, and `DELETE /users/{user_id}` removes a user and all associated data (6). Responses carry the project's own notifications plus event payloads from connected sources such as Stripe and GitHub, with no guidance on untrusted content (8). An events feed in the API and dashboard records deliveries with the HTTP request and response. No audit log of token or admin actions was found (8). The Trust Centre states GDPR compliance, AES-256 encryption and penetration testing. No SOC 2 or ISO 27001 statement, bug bounty or security.txt was found, and vulnerability reports go through a contact form (6)."
        },
        {
          "key": "payments",
          "name": "Payments \u0026 pricing",
          "weight": 10,
          "effectiveWeight": 12.5,
          "score": 35,
          "points": 4.38,
          "reason": "No x402, MPP or L402 (0). Plans and a unit price are public. Builder is $0 for 1,000 deliveries a month, Startup $249 for 50,000 and $0.0025 for each further delivery (20). The $0 plan needs only a sign-up, but the pricing page doesn't say whether a card is asked for and we did not create an account (15). A person signs up in a browser and creates the token in the dashboard, and the terms forbid accounts registered by automated methods (0)."
        },
        {
          "key": "tasks",
          "name": "Task success",
          "weight": 10,
          "effectiveWeight": 0,
          "pending": true,
          "points": 0,
          "reason": "Pending. Task success needs the category task suites run through each tool, which haven't run yet, so this run doesn't score it. Its weight is shared across the assessed categories until then. A data provider's data-quality score is published on its listing now and becomes half of this category when it's scored."
        },
        {
          "key": "maintenance",
          "name": "Maintenance \u0026 community",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 49,
          "points": 4.29,
          "reason": "The last release is magicbell-js 1.8.0 on 29 July 2026, with a changelog entry the same day, 72 days before this check (20). One release or dated changelog entry since 11 July 2026 (0). A public changelog, GitHub Discussions and a Slack community exist. We did not test how fast questions are answered (8). Official clients are published for JavaScript (1.8.0, July 2026), Go (v0.5.0, March 2026), Swift and Java, and the CLI's last npm release is 1.4.0 of 8 January 2026 (13). The JavaScript repository runs test, lint and release workflows and took automated dependency updates up to 3 August 2026 (8)."
        },
        {
          "key": "transparency",
          "name": "Transparency \u0026 trust",
          "weight": 7,
          "effectiveWeight": 8.75,
          "score": 58,
          "points": 5.08,
          "note": "editorial 30, provenance 86",
          "reason": "Closed service under published terms. The Go client and the CLI are MIT, and the JavaScript client carries MagicBell's own Licence Agreement, which bars benchmarking the software (15). The privacy policy of 2 July 2024 covers visitors and account holders, gives no retention period beyond the time necessary, and does not address notification content or recipients. The Trust Centre says data is never sold or shared with third parties, while the policy marks account data as sold or shared with Google, X, Segment and Mixpanel. The Trust Centre mentions data processing agreements and none is published (6). API v1 and the old `@magicbell/cli` package are marked deprecated, with no policy or dates (5). The status page names Ably for in-app delivery and the policy names four analytics services with their countries. No sub-processor list or hosting region for the service was found (4)."
        }
      ],
      "assessment": {
        "date": "2026-10-09",
        "basis": "public evidence",
        "confidence": "medium",
        "notes": {
          "ergonomics": "List endpoints take `limit` (default 50) and there is no field selection (12). Cursor pagination with `starting_after` and `ending_before` on 21 endpoints, and notifications filter by status, category and topic (14). Errors return an array of `code` and `message` pairs, with no published list of codes (8). `Idempotency-Key` holds for 24 hours on some endpoints, which the docs don't name, and saves are PUT upserts (14). A broadcast needs only `title` and `recipients`, and official clients exist for JavaScript, Go, Swift and Java, with a CLI (15).",
          "maintenance": "The last release is magicbell-js 1.8.0 on 29 July 2026, with a changelog entry the same day, 72 days before this check (20). One release or dated changelog entry since 11 July 2026 (0). A public changelog, GitHub Discussions and a Slack community exist. We did not test how fast questions are answered (8). Official clients are published for JavaScript (1.8.0, July 2026), Go (v0.5.0, March 2026), Swift and Java, and the CLI's last npm release is 1.4.0 of 8 January 2026 (13). The JavaScript repository runs test, lint and release workflows and took automated dependency updates up to 3 August 2026 (8).",
          "payments": "No x402, MPP or L402 (0). Plans and a unit price are public. Builder is $0 for 1,000 deliveries a month, Startup $249 for 50,000 and $0.0025 for each further delivery (20). The $0 plan needs only a sign-up, but the pricing page doesn't say whether a card is asked for and we did not create an account (15). A person signs up in a browser and creates the token in the dashboard, and the terms forbid accounts registered by automated methods (0).",
          "reliability": "Graded as a hosted API. Status page on Better Stack at status.magicbell.com with four components and daily history (20). In the 90 days to 9 October 2026 the API and dashboard show no downtime. In-app delivery shows about 10 minutes on 13 July, 11 minutes on 31 July and 39 minutes on 26 August, and email delivery 39 minutes on 26 August, with no incident write-up in the feed (20). The limit is published as 500 requests a minute per IP address (15). A 429 is documented with a 60-second block, and an `Idempotency-Key` header caches the first response for 24 hours on some endpoints, but no Retry-After header or backoff guidance was found (10). No SLA found on the pricing page or in the terms (0). API v2 is the current version (10).",
          "schema": "OpenAPI 3.1 file at /docs/api/openapi.json with 84 paths and 144 operations (25). /llms.txt returns 404 and no Markdown docs were found (0). Every operation has a description that states its purpose, many of them templated across the 16 integration types, and none says when not to use it (10). Required fields, patterns, length limits and ten enums are present and unknown query parameters are refused, but `custom_attributes` and workflow `input` are free-form objects and the file declares no security schemes (11). 88 schema examples, but only 200, 201 and 204 responses are described, and the docs show one error example with no list of codes (7). The path carries the version, v1 is marked deprecated and the changelog is public on GitHub Discussions (15).",
          "security": "Two credentials. A Project JWT is created in the dashboard with a name and an expiry, is shown once and can be discarded. A User JWT is signed by the customer's backend with HS256 and limits calls to one user. Project tokens carry no scopes (22). The User JWT confines a client to one user's inbox, but no read-only project token or confirmation for deletes was found, and `DELETE /users/{user_id}` removes a user and all associated data (6). Responses carry the project's own notifications plus event payloads from connected sources such as Stripe and GitHub, with no guidance on untrusted content (8). An events feed in the API and dashboard records deliveries with the HTTP request and response. No audit log of token or admin actions was found (8). The Trust Centre states GDPR compliance, AES-256 encryption and penetration testing. No SOC 2 or ISO 27001 statement, bug bounty or security.txt was found, and vulnerability reports go through a contact form (6).",
          "transparency": "Closed service under published terms. The Go client and the CLI are MIT, and the JavaScript client carries MagicBell's own Licence Agreement, which bars benchmarking the software (15). The privacy policy of 2 July 2024 covers visitors and account holders, gives no retention period beyond the time necessary, and does not address notification content or recipients. The Trust Centre says data is never sold or shared with third parties, while the policy marks account data as sold or shared with Google, X, Segment and Mixpanel. The Trust Centre mentions data processing agreements and none is published (6). API v1 and the old `@magicbell/cli` package are marked deprecated, with no policy or dates (5). The status page names Ably for in-app delivery and the policy names four analytics services with their countries. No sub-processor list or hosting region for the service was found (4)."
        },
        "sources": [
          {
            "what": "pricing",
            "url": "https://www.magicbell.com/pricing",
            "seen": "2026-10-09"
          },
          {
            "what": "REST API overview, rate limit, errors and idempotency",
            "url": "https://www.magicbell.com/docs/api",
            "seen": "2026-10-09"
          },
          {
            "what": "OpenAPI 3.1 description",
            "url": "https://www.magicbell.com/docs/api/openapi.json",
            "seen": "2026-10-09"
          },
          {
            "what": "API authentication",
            "url": "https://www.magicbell.com/docs/api/authentication",
            "seen": "2026-10-09"
          },
          {
            "what": "Project JWT",
            "url": "https://www.magicbell.com/docs/api/authentication/project",
            "seen": "2026-10-09"
          },
          {
            "what": "User JWT",
            "url": "https://www.magicbell.com/docs/api/authentication/user",
            "seen": "2026-10-09"
          },
          {
            "what": "CLI docs",
            "url": "https://www.magicbell.com/docs/libraries/magicbell-cli",
            "seen": "2026-10-09"
          },
          {
            "what": "workflows page",
            "url": "https://www.magicbell.com/workflows",
            "seen": "2026-10-09"
          },
          {
            "what": "events",
            "url": "https://www.magicbell.com/docs/dashboard/events",
            "seen": "2026-10-09"
          },
          {
            "what": "terms and conditions",
            "url": "https://www.magicbell.com/terms-and-conditions",
            "seen": "2026-10-09"
          },
          {
            "what": "privacy policy",
            "url": "https://www.magicbell.com/privacy-policy",
            "seen": "2026-10-09"
          },
          {
            "what": "Trust Centre",
            "url": "https://www.magicbell.com/security",
            "seen": "2026-10-09"
          },
          {
            "what": "status page and its JSON feed",
            "url": "https://status.magicbell.com/index.json",
            "seen": "2026-10-09"
          },
          {
            "what": "changelog on GitHub Discussions",
            "url": "https://github.com/orgs/magicbell/discussions/categories/changelog",
            "seen": "2026-10-09"
          },
          {
            "what": "JavaScript client repository, tags, changelog and licence",
            "url": "https://github.com/magicbell/magicbell-js",
            "seen": "2026-10-09"
          },
          {
            "what": "Go client repository and changelog",
            "url": "https://github.com/magicbell/magicbell-go",
            "seen": "2026-10-09"
          },
          {
            "what": "npm registry, magicbell-js",
            "url": "https://registry.npmjs.org/magicbell-js/latest",
            "seen": "2026-10-09"
          },
          {
            "what": "npm registry, magicbell-cli",
            "url": "https://registry.npmjs.org/magicbell-cli",
            "seen": "2026-10-09"
          },
          {
            "what": "domain registration (RDAP)",
            "url": "https://rdap.org/domain/magicbell.com",
            "seen": "2026-10-09"
          }
        ],
        "openQuestions": [
          "unchecked: live error bodies and response headers, because api.magicbell.com/robots.txt disallows every path and no request was sent to the API",
          "unchecked: whether sign-up for the Builder plan asks for a card, since we did not create an account",
          "Which endpoints honour `Idempotency-Key`. The docs say some and name only notification creation as an example",
          "Whether a 429 carries a Retry-After header. The docs state only a 60-second block",
          "Whether a data processing agreement or sub-processor list exists. The Trust Centre mentions agreements and links none",
          "unchecked: the body of the 29 July 2026 changelog entry, which the page did not show our reader, and whether community questions get answers",
          "The status history is in two-day buckets, so the downtime dates are the start of each bucket"
        ]
      },
      "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"
    },
    "notable": [
      "The OpenAPI 3.1 file lists 144 operations on 84 paths, 89 for a Project JWT and 55 for a User JWT, marked by `x-magicbell-auth-jwt-type` (https://www.magicbell.com/docs/api/openapi.json)",
      "The rate limit is 500 requests a minute per IP address, and a 429 blocks the address for 60 seconds (https://www.magicbell.com/docs/api)",
      "An `Idempotency-Key` header caches the first response's status and body for 24 hours on some endpoints (https://www.magicbell.com/docs/api)",
      "api.magicbell.com/robots.txt disallows every path, so we sent the API no request and read its behaviour from the docs only",
      "The terms say accounts registered by bots or other automated methods are not permitted (https://www.magicbell.com/terms-and-conditions)",
      "The JavaScript client's Licence Agreement bars using the software for comparisons or benchmarking (https://github.com/magicbell/magicbell-js)",
      "Workflows run four commands (broadcast, wait, pause, abort) with conditions, and can start from Stripe or GitHub webhooks or `POST /v2/workflows/runs` (https://www.magicbell.com/workflows)"
    ],
    "area": "everyday",
    "details": [
      {
        "label": "API",
        "value": "REST, version v2 at https://api.magicbell.com/v2. OpenAPI 3.1 with 144 operations. v1 is deprecated"
      },
      {
        "label": "Channels",
        "value": "In-app inbox, mobile push (APNs, FCM, Expo), web push, email (Mailgun, SendGrid, Amazon SES, SMTP, Ping Email), SMS (Twilio), Slack and Teams"
      },
      {
        "label": "Credentials",
        "value": "Project JWT from the dashboard, with a name and expiry, discardable. User JWT signed with HS256 by the customer's backend. No scopes"
      },
      {
        "label": "Rate limits",
        "value": "500 requests a minute per IP address. A 429 blocks the address for 60 seconds"
      },
      {
        "label": "Idempotency",
        "value": "`Idempotency-Key` header on some endpoints, first response cached for 24 hours"
      },
      {
        "label": "Pagination",
        "value": "Cursor based, `limit` (default 50), `starting_after` and `ending_before`"
      },
      {
        "label": "Preferences",
        "value": "Per-user channel preferences by category at `/v2/channels/user_preferences`, and a delivery plan of ordered channel steps with delays and conditions"
      },
      {
        "label": "Workflows",
        "value": "Commands broadcast, wait, pause and abort, with conditions and template variables. No batching or digest command found"
      },
      {
        "label": "Clients",
        "value": "magicbell-js 1.8.0 (29 July 2026), magicbell-go v0.5.0 (24 March 2026), Swift and Java user clients, magicbell-cli 1.4.0 (8 January 2026), and React, Preact, Svelte and web components"
      },
      {
        "label": "Free tier",
        "value": "Builder, $0, 1,000 deliveries a month, one project"
      },
      {
        "label": "Billing unit",
        "value": "One delivery is one notification on one channel for one user"
      },
      {
        "label": "Status",
        "value": "status.magicbell.com on Better Stack. Components are API, Dashboard, In-App Delivery (through Ably) and Email Delivery"
      }
    ],
    "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,
      "checks": [
        {
          "check": "Legal entity named",
          "value": "MagicBell, Inc.",
          "points": 20,
          "max": 20,
          "state": "ok"
        },
        {
          "check": "Domain age",
          "value": "magicbell.com, registered 2004-04-17 (22 years)",
          "points": 15,
          "max": 15,
          "state": "ok"
        },
        {
          "check": "Endpoint on the vendor's domain",
          "value": "api.magicbell.com",
          "points": 15,
          "max": 15,
          "state": "ok"
        },
        {
          "check": "Terms of service",
          "value": "read, states 6 of the 7 things a reader expects, and has 1 clause that costs points",
          "points": 7.1,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Privacy policy",
          "value": "read, states 7 of the 8 things a reader expects",
          "points": 9.3,
          "max": 10,
          "state": "part"
        },
        {
          "check": "Status page",
          "value": "status.magicbell.com",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "Changelog",
          "value": "published",
          "points": 10,
          "max": 10,
          "state": "ok"
        },
        {
          "check": "security.txt",
          "value": "not found",
          "points": 0,
          "max": 10,
          "state": "no"
        }
      ],
      "policies": [
        {
          "kind": "terms",
          "url": "https://www.magicbell.com/terms-and-conditions",
          "state": "read",
          "readAt": "2026-10-08",
          "words": 6374,
          "points": 7.1,
          "max": 10,
          "expected": [
            {
              "key": "terms.date",
              "label": "Gives the date it was last updated",
              "found": false
            },
            {
              "key": "terms.law",
              "label": "Names the governing law or courts",
              "found": true,
              "quote": "These Terms are governed by the law of the place where the Owner is based, as disclosed in the relevant section of this document, without regard to conflict of laws principles."
            },
            {
              "key": "terms.liability",
              "label": "States a limit on its liability",
              "found": true,
              "quote": "In any event of liability, the compensation may not exceed the total payments that have been, will be or would be received by the Owner from the User based on the contract over a period of 12 months, or the period of the duration of the Agreement, if shorter.",
              "says": "Capped at the fees paid in the 12 months before the claim"
            },
            {
              "key": "terms.termination",
              "label": "Says how the agreement or account can be ended",
              "found": true,
              "quote": "Users can terminate their account and stop using the Service at any time by doing the following:"
            },
            {
              "key": "terms.changes",
              "label": "Says how changes to the terms are announced",
              "found": true,
              "quote": "If legally required, the Owner will notify Users in advance of when the modified Terms will take effect.",
              "says": "Says it gives notice of a change"
            },
            {
              "key": "terms.use",
              "label": "Lists what users may not do",
              "found": true,
              "quote": "MagicBell and the Service may only be used within the scope of what they are provided for, under these Terms and applicable law."
            },
            {
              "key": "terms.sla",
              "label": "Refers to a service level or uptime commitment",
              "found": true,
              "quote": "To ensure the best possible service level, the Owner reserves the right to interrupt the Service for maintenance, system updates or any other changes, informing the Users appropriately."
            }
          ],
          "toKnow": [
            {
              "key": "terms.automated",
              "label": "Restricts automated access",
              "found": true,
              "quote": "Accounts registered by bots or any other automated methods are not permitted.",
              "costsPoints": true
            },
            {
              "key": "terms.cutoff",
              "label": "Says access can be ended without notice or for any reason",
              "found": true,
              "quote": "The Owner reserves the right, at its sole discretion, to suspend or delete at any time and without notice, User accounts that it deems inappropriate, offensive or in violation of these Terms."
            }
          ],
          "notes": [
            {
              "date": "2026-10-08",
              "text": "MagicBell accepts no liability for damages or losses from use of the API or of third-party products that access data through the API.",
              "quote": "the User expressly understands and agrees that the Owner bears no responsibility and shall not be held liable for any damages or losses resulting from the User’s use of the API or their use of any third-party products/services that access data through the API."
            },
            {
              "date": "2026-10-08",
              "text": "Subscriptions renew automatically through the payment method chosen at purchase.",
              "quote": "Subscriptions are automatically renewed through the payment method that the User chose during purchase."
            },
            {
              "date": "2026-10-08",
              "text": "A user cannot terminate an account until the paid subscription period has expired.",
              "quote": "However, termination of the account will not be possible until the subscription period paid for by the User has expired."
            }
          ]
        },
        {
          "kind": "privacy",
          "url": "https://www.magicbell.com/privacy-policy",
          "state": "read",
          "readAt": "2026-10-08",
          "words": 5165,
          "points": 9.3,
          "max": 10,
          "expected": [
            {
              "key": "privacy.date",
              "label": "Gives the date it was last updated",
              "found": false
            },
            {
              "key": "privacy.collected",
              "label": "Says what personal data is collected",
              "found": true,
              "quote": "What are the sources of the Personal Information we collect?"
            },
            {
              "key": "privacy.retention",
              "label": "Says how long data is kept",
              "found": true,
              "quote": "Unless specified otherwise in this document, Personal Data shall be processed and stored for as long as required by the purpose they have been collected for and may be retained for longer due to applicable legal obligation or based on the Users’ consent.",
              "says": "For as long as needed, with no period named"
            },
            {
              "key": "privacy.processors",
              "label": "Says who else receives the data",
              "found": true,
              "quote": "Any use of Cookies – or of other tracking tools — by MagicBell or by the owners of third-party services used by MagicBell serves the purpose of providing the Service required by the User, in addition to any other purposes described in the present document and in the Cookie Policy."
            },
            {
              "key": "privacy.sale",
              "label": "Says whether personal data is sold or shared for advertising",
              "found": true,
              "quote": "the right to opt out from the Sale of your Personal Information;"
            },
            {
              "key": "privacy.rights",
              "label": "Says what rights people have over their data",
              "found": true,
              "quote": "Therefore, the right of access, the right to erasure, the right to rectification and the right to data portability cannot be enforced after expiration of the retention period."
            },
            {
              "key": "privacy.contact",
              "label": "Gives a privacy contact",
              "found": true,
              "quote": "Among the types of Personal Data that MagicBell collects, by itself or through third parties, there are:"
            },
            {
              "key": "privacy.transfers",
              "label": "Says where data is transferred or stored",
              "found": true,
              "quote": "Cookies are Trackers consisting of small sets of data stored in the User's browser."
            }
          ],
          "toKnow": [
            {
              "key": "privacy.sells",
              "label": "Says it sells personal data or shares it for advertising",
              "found": true,
              "quote": "Google may use the Data collected to contextualize and personalize the ads of its own advertising network."
            }
          ]
        }
      ]
    },
    "pageJsonUrl": "https://www.anchorterminal.com/tools/magicbell.json",
    "live": {
      "slug": "magicbell",
      "probe": {
        "target": "https://api.magicbell.com/v2",
        "method": "get",
        "lastAt": "2026-10-09T10:14:19.706231467Z",
        "lastOk": true,
        "lastStatus": 405,
        "lastMs": 61,
        "authRequired": false,
        "uptime24h": 100,
        "uptime30d": 100,
        "p50ms24h": 72,
        "p95ms24h": 108,
        "samples24h": 28,
        "samples30d": 28,
        "days": [
          {
            "date": "2026-10-09",
            "probes": 28,
            "ok": 28
          }
        ]
      },
      "vendorStatus": {
        "page": "https://status.magicbell.com",
        "indicator": "unknown",
        "summary": "no machine-readable status found",
        "checkedAt": "2026-10-09T07:58:08.412277068Z"
      },
      "updatedAt": "2026-10-09T10:14:19.706231467Z"
    }
  }
}
