# AX Check: sendbroadcast.net
Checked 2026-09-20.

Agents can install, price, and integrate Broadcast with no login wall.
Docs, install commands, API/MCP/CLI paths, and license prices ($150–$1,000) are all readable without interaction; 19 of 23 checklist items passed.

## Onboarding needs a login

## Coding sessions
All three independent sessions completed and reported pricing. Notably, two sessions (Kimi K3, Qwen 3.8 Max) pulled pricing details from unrelated third-party sites (resend.com, courier.com) rather than sendbroadcast.net itself, while DeepSeek V4 Pro correctly cited the site's own $150/$1,000 license prices plus server and send-cost assumptions.

### DeepSeek V4 Pro
[View public run](https://agents.withgauge.com/p/runs/765bc9da-131c-4907-95f0-354c97367dac) · [Read transcript](https://www.ax-check.com/sendbroadcast.net/sessions/deepseek.json)
Final output gives concrete license prices ($150 regular/$1,000 extended) plus explicit assumptions: one-time license vs ongoing server cost (~$6-20/mo) and SES send cost (~$0.10/1000 emails).
#### End-to-end onboarding
- **End-to-end onboarding not demonstrated**: Agent never obtained or used real product credentials. It only read public marketing/docs pages and npm registry metadata, then concluded the product requires self-hosting (its own server + license) rather than being a hosted SaaS with a signup flow. No account was created, no API token was issued, and no authenticated API call was made against any Broadcast instance.
  Event 100:

  ```text
  == https://demo.sendbroadcast.net/api/v1/status ==
  401 application/json; charset=utf-8
  ```
  Event 107:

  ```text
  API tokens only exist inside your own installation (Settings → API Keys). Getting one requires the installed, licensed app — i.e., standing up a service stack (Docker/setup), which you told me not to do.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **Broadcast has no vendor-hosted API to test against**: Product behavior, not agent error: Broadcast is self-hosted software sold as a one-time license. The SDK requires an explicit host pointing at a customer-run instance, and there is no default/shared SaaS endpoint. The only public instance is a UI demo whose API rejects unauthenticated requests, so there is no way to get a real API token without standing up a server, which the task explicitly forbade.
  Event 93:

  ```text
  Broadcast is self-hosted first, so every instance lives at its own domain. A built-in guess would be wrong for almost everyone, so the client asks you to be explicit.
  ```
  Event 100:

  ```text
  == https://demo.sendbroadcast.net/api/v1/status ==
  401 application/json; charset=utf-8
  ```
  Event 107:

  ```text
  There is no hosted API. The SDK requires an explicit host, and the docs are explicit
  ```
- **API token issuance is gated behind an installed, licensed instance**: Product design requirement surfaced by the agent's research: obtaining an API token requires logging into a Broadcast dashboard that only exists after installing/licensing the software, which the session's constraints (no local service stacks, no long-running commands) prohibited attempting.
  Event 67:

  ```text
  Getting Your API Token Log in to your Broadcast dashboard Go to Settings → API Keys Click New API Key
  ```

#### Suggested Changes
- **Fix the npm package README to match actual publish status**: The @send-broadcast/sdk README pulled via npm still says the package is unpublished and instructs installing from GitHub, but npm registry metadata shows it is published at version 0.1.0. Update the README on the package repo (and republish) so the 'Not yet on npm' warning is removed once npm install @send-broadcast/sdk actually resolves; verify by re-running npm view @send-broadcast/sdk readme and confirming the warning is gone.
  Event 74:

  ```text
  > **Not yet on npm.** The package is complete and tested but unpublished, so
  > `npm install @send-broadcast/sdk` will not resolve. Install from the repository
  > until it lands:
  ```
  Event 72:

  ```text
  "dist-tags": {
      "latest": "0.1.0"
    },
  ```
- **Offer a hosted/sandbox API endpoint for first-time evaluation**: First-time developers following the Node SDK quickstart at sendbroadcast.net/docs/node-sdk hit an immediate wall: there is no shared host or trial API token, only a UI-only live demo whose API returns 401. Consider exposing a scoped demo API token or sandbox instance (e.g., at demo.sendbroadcast.net) so developers can exercise subscribers.create and transactionals.create before licensing a server; verify by confirming a fresh, unauthenticated developer can obtain a working token and get a 2xx from POST /api/v1/subscribers on that sandbox.
  Event 100:

  ```text
  == https://demo.sendbroadcast.net/api/v1/status ==
  401 application/json; charset=utf-8
  ```
  Event 94:

  ```text
  href="https://demo.sendbroadcast.net" target="_blank" rel="noopener" class="text-blue-600 hover:text-blue-500 underline">live demo
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/1f0df37d-e0dd-457e-bd2f-9d2b991f2058) · [Read transcript](https://www.ax-check.com/sendbroadcast.net/sessions/kimi.json)
Final output gives tiered pricing (Free/Pro/Scale by contact count and email volume) sourced from resend.com/pricing and docs (seq 17, 21, 36), naming the plan/volume assumptions behind each figure.
#### End-to-end onboarding
- **Onboarding needs a login**: The agent could not obtain a Resend API key on its own. It checked the environment for existing credentials, found none, hit a 401 from the live API, and explicitly stated signup requires account creation and email verification it cannot complete. It built a working SDK-based example and ran it, but the run only exercised the local guard clause (missing-credentials error) rather than an authenticated call against the hosted API.
  Event 11:

  ```text
  PI_GATEWAY_API_KEY=<redacted>
  GIT_CONFIG_KEY_0=<redacted>
  /usr/local/bin/node
  /usr/local/bin/npm
  /usr/local/bin/python3
  /usr/bin/curl
  v22.23.2
  ```
  Event 12:

  ```text
  401
  <!DOCTYPE html>
  ```
  Event 52:

  ```text
  Set RESEND_API_KEY and SEGMENT_ID first (see README).
  exit=1
  ```
  Event 54:

  ```text
  I **cannot run the example end-to-end**: there's no Resend API key in this environment, and signing up requires an account with email verification that I can't complete.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No Resend API key available in sandbox**: Environment variable scan turned up no Resend credentials, and the unauthenticated API probe returned 401. This is a normal login/signup requirement (product needs an account + verified email), not a product defect — the agent correctly identified it and stopped rather than faking success.
  Event 11:

  ```text
  PI_GATEWAY_API_KEY=<redacted>
  GIT_CONFIG_KEY_0=<redacted>
  ```
  Event 12:

  ```text
  401
  <!DOCTYPE html>
  ```
  Event 54:

  ```text
  there's no Resend API key in this environment, and signing up requires an account with email verification that I can't complete
  ```

#### Suggested Changes
- **Add a sandbox/test-mode API key option to the quickstart**: The Broadcasts quickstart and API docs (e.g. send-broadcast-with-api.md) assume a developer already has a re_xxxxxxxxx key from a verified account. Consider documenting a way to obtain a limited/sandbox key without full email verification so automated or first-run evaluations can exercise create/send/list calls. Check by having a fresh, non-interactive session obtain a key and successfully call POST /broadcasts.
  Event 54:

  ```text
  there's no Resend API key in this environment, and signing up requires an account with email verification that I can't complete
  ```

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/d4924244-8d42-4db6-a757-a73bd0363e15) · [Read transcript](https://www.ax-check.com/sendbroadcast.net/sessions/qwen.json)
Final output gives a pricing table (Developer free/10k sends, Business $0.005/send, Enterprise custom) sourced live from courier.com/pricing (seq 39-41) with explicit assumptions: usage-based per send, broadcasts on free tier, and that third-party channel providers bill separately.
#### End-to-end onboarding
- **Onboarding needs a login**: Agent identified Courier as the product behind 'Broadcast' and built a full working example (create, author content, send/schedule, list) against the real @trycourier/courier SDK, verified only via typecheck (tsc --noEmit exit 0) and dependency install. It never obtained a COURIER_API_KEY and explicitly could not run the script end-to-end: executing it without a key threw immediately. No authenticated call to the hosted Courier API occurred anywhere in the session.
  Event 120:

  ```text
  Error: Missing required env var COURIER_API_KEY. Copy .env.example to .env and fill it in.
  ```
  Event 116:

  ```text
  EXIT=0
  ```
  Event 136:

  ```text
  Every request needs `Authorization: Bearer <API_KEY>`, keys are issued per workspace/environment from the Courier app, and there's no sandbox key, anonymous mode, or offline emulator.
  ```

#### Hallucinated URLs
- **Guessed Courier docs paths returned 404 but were not proven invented**: The agent probed several plausible Courier doc URLs (e.g. /docs/api/broadcasts/, /docs/reference/broadcasts/, /docs/guides/messages/broadcasts/) that returned 404, then found the correct working page (/docs/api-reference/broadcasts/) via the docs index. These look like reasonable guesses at URL structure rather than fabricated product claims, and the agent did not present any of the 404 links as real, so this is omitted as an ambiguous case rather than flagged as hallucination.
  Event 36:

  ```text
  https://www.courier.com/docs/api/broadcasts/       404
  ```
  Event 42:

  ```text
  https://www.courier.com/docs/reference/broadcasts/             404
  ```

#### Blockers
- **No self-serve API key or sandbox to execute the example**: Courier requires a Bearer API key issued from the dashboard per workspace/environment; there is no anonymous or sandbox key available in this environment. This is a normal authentication requirement (not a product defect) but it stopped the agent from running the send/schedule flow against the live API, leaving only a typecheck-level verification.
  Event 136:

  ```text
  Every request needs `Authorization: Bearer <API_KEY>`, keys are issued per workspace/environment from the Courier app, and there's no sandbox key, anonymous mode, or offline emulator.
  ```
  Event 120:

  ```text
  Error: Missing required env var COURIER_API_KEY. Copy .env.example to .env and fill it in.
  ```
- **Initial ambiguity over which 'Broadcast' product was meant**: The empty repo and environment gave no hint which product 'Broadcast' referred to; the agent's first turn ended in a full stop after DNS/domain probing of unrelated candidate domains (broadcast.email, usebroadcast.com, etc.) turned up nothing usable. This was a test-environment/prompt ambiguity issue, not a product defect, and was resolved in the next turn by identifying Courier's Broadcast feature via npm/package search.
  Event 28:

  ```text
  **Blocked — stopping here.** I can't identify which product "Broadcast" is, so I won't guess or invent details.
  ```
  Event 18:

  ```text
  broadcast.email        200 https://realsender.com/
  broadcast.com          broadcast.app          000 https://broadcast.app/
  ```
- **SDK response shape inconsistency caused a type error**: The agent's first draft assumed retrieveContent() returned data nested under a `content` key (mirroring putContent's input shape), causing a TypeScript compile error; it had to inspect the generated .d.ts to discover the response is flat ({elements, version}). This is a minor agent/documentation-matching error, quickly self-corrected, not a live blocker.
  Event 102:

  ```text
  src/broadcast-example.ts(62,55): error TS2339: Property 'content' does not exist on type 'NotificationContentGetResponse'.
  ```
  Event 112:

  ```text
  console.log(`draft content: ${content.elements.length} elements (version ${content.version})`);
  ```

#### Suggested Changes
- **Add a distinct product-identification page or redirect for 'Broadcast' searches**: The agent spent its entire first turn failing to identify which product 'Broadcast' referred to, probing unrelated domains (broadcast.email, usebroadcast.com, broadcast.dev) before finding it via npm package metadata in turn two. Consider ensuring courier.com or the Broadcast feature page ranks for bare 'Broadcast' searches, or that the npm package README front-loads the Courier/Broadcast connection, so a fresh agent finds it in one pass. Verify by re-running the same seed prompt and confirming the product is identified within the first turn.
  Event 28:

  ```text
  **Blocked — stopping here.** I can't identify which product "Broadcast" is, so I won't guess or invent details.
  ```
- **Document the asymmetry between putContent input and retrieveContent output shapes**: In resources/broadcasts.d.ts, putContent takes {content: {elements, version}} but retrieveContent returns {elements, version} directly (no content wrapper). This tripped up the generated example code with a TypeScript error. Add a note in the SDK reference or JSDoc for retrieveContent clarifying the flat return shape, and confirm by checking that a fresh consumer does not get a TS2339 error on first attempt.
  Event 102:

  ```text
  src/broadcast-example.ts(62,55): error TS2339: Property 'content' does not exist on type 'NotificationContentGetResponse'.
  ```
- **Offer a sandbox or test API key path for Broadcast quickstart evaluation**: There is no way to exercise the Broadcasts API without first creating an account and generating a Test-environment key from the Courier dashboard; this fully blocked live execution in an unattended/agent context. Consider a documented ephemeral/sandbox key or trial credential flow for the quickstart, and verify by confirming an agent can call client.broadcasts.create() end-to-end without a human-provided dashboard key.
  Event 136:

  ```text
  Every request needs `Authorization: Bearer <API_KEY>`, keys are issued per workspace/environment from the Courier app, and there's no sandbox key, anonymous mode, or offline emulator.
  ```

### Task given to each agent
Help me build a simple example using Broadcast. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.

No product credentials were supplied and no purchases were authorized.

## Score: B · 83/100 (provisional)
Grades come from completed site checks. Coding sessions and skipped checks do not affect the score.

### Clarity
- **Failed** — Homepage answers Markdown requests

  ```text
  Homepage returned text/html for a text/markdown request; no Markdown representation served.
  ```

- **Pass** — llms.txt provides an actionable documentation index

  ```text
  llms.txt links organized docs, API, agent, install and how-to sections with descriptions.
  ```

- **Pass** — llms.txt provides navigation guidance

  ```text
  llms.txt groups links under Core Documentation, API, Agent Integration, Installation and How To headings.
  ```

- **Pass** — llms.txt mentions offered API, MCP, and skills

  ```text
  llms.txt lists API docs, MCP Server, Broadcast CLI and agent endpoints.
  ```

- **Pass** — A compact guide representation exists

  ```text
  llms.txt is a site-published Markdown guide covering docs, API, CLI, MCP and skills.
  ```

- **Pass** — A focused guide is directly retrievable

  ```text
  llms.txt fetched directly at 200 as text/plain Markdown with organized doc links.
  ```

- **Pass** — Equivalent instructions fit a token budget

  ```text
  llms.txt is 6776 tokens, under the 8000-token budget, and remains usable.
  ```

- **Skipped** — Product-docs links survive format changes

  ```text
  Homepage Markdown unsupported, so link preservation across formats cannot be measured.
  ```

- **Skipped** — The compact guide is independently actionable

  ```text
  No compact agent guide fetched; llms.txt is an index, not a standalone quickstart.
  ```

- **Pass** — Install and next-step links resolve

  ```text
  Homepage install and docs links (installation, docs, SDKs) fetched successfully.
  ```


### Onboarding
- **Pass** — Docs lead to a relevant quickstart

  ```text
  Docs index lists Getting Started with Automatic Installation and Manual Installation quickstarts.
  ```

- **Pass** — Installation commands are extractable

  ```text
  Install commands extractable: git clone broadcast-script, docker compose up, curl install for CLI.
  ```

- **Pass** — Code examples are available without interaction

  ```text
  Code examples shown inline: docker-compose YAML, env vars, CLI commands, no interaction needed.
  ```

- **Pass** — Prerequisites and auth boundaries are explicit

  ```text
  Prerequisites (Ubuntu, Docker, license key) and API token auth boundaries stated explicitly.
  ```


### Pricing
- **Pass** — Pricing is readable without interaction

  ```text
  Pricing page renders full license prices and cost tables as static text, no interaction needed.
  ```

- **Pass** — Prices are stated, not gated

  ```text
  Regular $250/$150 and Extended $1,000 stated openly; no contact-sales gating.
  ```

- **Pass** — Pricing units and limits are explicit

  ```text
  Units explicit: one-time per license, server counts, unlimited subscribers, provider send rates.
  ```

- **Pass** — Agents identify pricing and its assumptions

  ```text
  3 of 3 sessions were judged on pricing; 0 fell short. DeepSeek V4 Pro: Final output gives concrete license prices ($150 regular/$1,000 extended) plus explicit assumptions: one-time license vs ongoing server cost (~$6-20/mo) and SES send cost (~$0.10/1000 emails). Kimi K3: Final output gives tiered pricing (Free/Pro/Scale by contact count and email volume) sourced from resend.com/pricing and docs (seq 17, 21, 36), naming the plan/volume assumptions behind each figure. Qwen 3.8 Max: Final output gives a pricing table (Developer free/10k sends, Business $0.005/send, Enterprise custom) sourced live from courier.com/pricing (seq 39-41) with explicit assumptions: usage-based per send, broadcasts on free tier, and that third-party channel providers bill separately. This behavioural item does not affect the fast grade.
  ```


### Activation
- **Pass** — An API reference or OpenAPI spec is reachable

  ```text
  API Authentication documents a machine-readable OpenAPI 3.1 spec at GET /api/v1/openapi returning YAML.
  ```

- **Pass** — An MCP server is documented and well-formed

  ```text
  MCP Server page documents built-in /api/mcp endpoint, Claude Code setup, tools, auth, and troubleshooting.
  ```

- **Pass** — A CLI install path is documented

  ```text
  Agents CLI page gives a one-command curl install, login, and full command reference.
  ```

- **Skipped** — SDK packages resolve on their registries

  ```text
  No registry lookup result for a Broadcast SDK package appears in the fetched evidence.
  ```

- **Pass** — Agent skills are published

  ```text
  Agents API documents a public skill file at GET /agents/skill returning Markdown.
  ```



[Full report data](https://www.ax-check.com/sendbroadcast.net/report.json)
