# Linq vs Photon

> Linq scores 71.7 (BB) to Photon's 53.2 (D) for sms. Prices, MCP, x402, uptime and agent notes side by side.

- Canonical: https://www.anchorterminal.com/compare/linq-vs-photon
- Markdown: https://www.anchorterminal.com/compare/linq-vs-photon.md (~5,500 tokens)
- Site index for agents: https://www.anchorterminal.com/llms.txt (the key docs and every listing in one file, at most 16 MB, about 4 million tokens: https://www.anchorterminal.com/llms-full.txt)
- API: https://www.anchorterminal.com/api/v1/index.json
- MCP: https://www.anchorterminal.com/mcp (the whole catalogue as tools, no key)
- DNS: dig +short TXT <slug>.grade.anchorterminal.com (the grade as a DNS TXT record, for a sandbox with no HTTP where names still resolve; also top., best.<category>. and <a>.vs.<b>. under the zone, and the same under grade.letme.dev)
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)
- Updated: 2026-11-07

Linq scores 71.7 (BB) on agent readiness against Photon's 53.2 (D), and leads in every scored category. Both do sms.

- Linq: grade BB, 71.7/100, rank #151 of 1510. Markdown https://www.anchorterminal.com/tools/linq.md · JSON https://www.anchorterminal.com/api/v1/tools/linq.json
- Photon: grade D, 53.2/100, rank #956 of 1510. Markdown https://www.anchorterminal.com/tools/photon.md · JSON https://www.anchorterminal.com/api/v1/tools/photon.json
- Best SMS, WhatsApp and messaging APIs for AI agents: https://www.anchorterminal.com/best/messaging/index.md
- All 190 messaging comparisons: https://www.anchorterminal.com/compare/messaging/index.md

## Which one, for what

### Linq (BB)

Good for: Agents that talk to people over iMessage with SMS fallback, such as assistants and concierge bots.

Ahead on:
- Reliability, 83 against 67
- Schema & documentation, 93 against 75
- Agent ergonomics, 90 against 63
- Security & auth, 50 against 29
- Payments & pricing, 40 against 20
- Maintenance & community, 83 against 78
- Transparency & trust, 72 against 57

Also in its favour:
- Agent-ready, a grade of BB or better
- Runs on your own machine
- Free to start without a card

Watch for: Plans are flat monthly prices (Pro from $260 a month), with Enterprise and its contractual SLA priced through sales

### Photon (D)

Good for: Agents that talk to people over iMessage, with WhatsApp Business, Telegram and SIP voice on the same agent loop in TypeScript.

Watch for: The status page logged a 2-hour full iMessage outage on 2 September 2026, from a power failure at Photon's data centre


## Why the edge

### Agent ergonomics: Linq +27

- Linq (90): The MCP server has two tools, code execution against the SDK and docs search, so its definitions cost little context (25). Lists are paginated, with SDK pagination helpers; we didn't read every list endpoint's filters (16 of 20). Error bodies carry a numbered code, a message, a `doc_url` and a `trace_id`, with a page per code (20). `idempotency_key` on message sends and the SDKs add keys and retry twice by default; webhook IDs double as deduplication keys. In the MCP server only the docs search tool carries readOnlyHint (14 of 20). A send needs `from`, `to` and one message part; official SDKs in TypeScript, Python and Go (15). 25 + 16 + 20 + 14 + 15 = 90.
- Photon (63): Read for the TypeScript SDK an agent server runs. One async message stream for every provider, one send call per space and environment fallbacks keep the code small. Management responses can't be sized beyond list limits (17 of 25). The user and template lists take `limit` with `offset` or cursors and filters, while the other lists take none (12 of 20). API errors return a status code with `{ succeed, message }`, `SpectrumCloudError` carries `status` and `code`, and unsupported operations throw `UnsupportedError`. No error-code catalogue for Stable was found (13 of 20). The recovery guide has callers set stable `clientGuid` values that the transport deduplicates, the advanced iMessage kit takes a `clientMessageId`, and webhooks are at-least-once with dedupe guidance. Spectrum API writes take no idempotency key (13 of 20). `imessage.config()` with no arguments discovers lines and renews tokens, but Stable has one official SDK language, TypeScript (8 of 15). 17 + 12 + 13 + 13 + 8 = 63.

### Security & auth: Linq +21

- Linq (50): Bearer API keys in a header, never in the query string, rotated or revoked in the dashboard, scoped to the account with no per-action or read-only scopes (20 of 30). Sandbox keys reach only verified handles, and the MCP server's `--code-allow-http-gets` and method allow and block lists limit its code tool; no approval step for sends (10 of 20). Inbound iMessage and SMS text reaches the agent, and no prompt-injection guidance was found in the docs or the MCP instructions (0 of 15). Every response carries a `trace_id`; no operator request log was found in the docs (5 of 15). SOC 2 Type II reports for 2024, 2025 and 2026 and a 2026 penetration test on request, a vulnerability disclosure policy open on the trust centre and SECURITY.md in the SDK repository; no security.txt or bug bounty (15 of 20). 20 + 10 + 0 + 5 + 15 = 50.
- Photon (29): Project ID and secret over HTTP Basic for the Spectrum API. The secret grants full management access to the project, doesn't expire on its own and is rotated with `photon projects regenerate-secret`. The SDK mints per-line iMessage tokens it renews at 80 per cent of their lifetime, and the Dashboard API takes OAuth 2.1 with PKCE and consented scopes. No secret in a URL is documented (17 of 30). No read-only project credential. The CLI asks before removing a user (3 of 20). Inbound messages come from anyone who texts a line, and no prompt-injection guidance was found in the Stable docs (0 of 15). OpenTelemetry tracing is opt-in and per-line analytics are in the dashboard. API logs and traces arrive with Photon 2.0, not Stable (4 of 15). No security.txt on photon.codes. The Beta API clients' repository has a SECURITY.md with private vulnerability reporting and no acknowledgement time, while spectrum-ts has none, and the privacy policy mentions regular penetration testing. No bug bounty or certification was found, and osv.dev lists nothing for spectrum-ts, @photon-ai or photonhq-api on 4 November. The policy covers only the Beta clients, so the line keeps its partial 5 of 20 rather than the settled 7. 17 + 3 + 0 + 4 + 5 = 29.

### Payments & pricing: Linq +20

- Linq (40): No x402, MPP or L402 (0). Public plan prices only, Hobby $0 and Pro from $260 a month, with no per-message fee (10 of 20). Hobby is free with no card, and the Pro trial needs no card (20). `linq signup` creates an account, an API key and a number from a terminal, but a person has to read back the emailed code, so half (10 of 20). 0 + 10 + 20 + 10 = 40.
- Photon (20): No x402, MPP or L402 (0). Plan prices are public. Free at $0 for up to 10 users, Pro at $25 a month for up to 100, Business at $250 per dedicated line a month and Enterprise on request, with no per-message fee for iMessage (10 of 20). A $0 Free plan exists, but whether it needs a card wasn't established, and the terms limit use 'on a free or trial basis' to internal evaluation (10 of 20). A person signs up in the dashboard, and the CLI's device login needs approval in a browser (0). 0 + 10 + 10 + 0 = 20.

### Schema & documentation: Linq +18

- Linq (93): OpenAPI 3.1 file for the Partner API and another for WhatsApp, both public (25). llms.txt, llms-full.txt and Markdown for every page (10). Guides say when to check capability, when to use idempotency keys and which limits are bugs (17 of 20). 93 enums in the spec and typed parts for messages (14 of 15). Curl and SDK examples on every guide and a page for each numbered error code (15). Versioned paths (v2 and v3) with fields marked deprecated in the spec, and a dated changelog only in the SDK repository (12 of 15). 25 + 10 + 17 + 14 + 15 + 12 = 93.
- Photon (75): Read for the Stable surface. Public OpenAPI 3.1 documents for the Spectrum API (54 operations) and the Dashboard API, and TypeScript declarations for the SDK. Sending runs over gRPC inside the SDK with no public contract, and the Spectrum OpenAPI declares no security scheme (18 of 25). llms.txt, llms-full.txt, a Markdown twin of every page and a documentation MCP server (10). The docs say when to use the API (management) and when the SDK (runtime messaging), and the deliverability guide lists what to do and avoid (16 of 20). Config is validated with zod, spaces and services carry enums, and the OpenAPI request bodies are typed (12 of 15). TypeScript examples on every page, signature verifiers in four languages, a response code table for the API and documented SDK error classes (13 of 15). spectrum-ts follows semver and reached 12.14.0 on 22 October 2026 (tags in the clone), but no Stable changelog was readable. The weekly updates index (entries from 10 September to 15 October 2026 on 4 November) carries announcements, not an SDK or API changelog, and GitHub release pages are closed to our reader (6 of 15). 18 + 10 + 16 + 12 + 13 + 6 = 75.

### Reliability: Linq +16

- Linq (83): Read with the hosted lines. status.linqapp.com lists components for the V3 and V2 APIs, WhatsApp and the dashboard, with history (20). From 8 August to 6 November its feed records six minor incidents, among them partial degradation on some lines on 13 August, elevated error rates on 22 September, authentication errors on 29 September, degraded sending on 9 October (22 minutes), webhook degradation at the start of November and latency on 5 November; the critical and major incidents fall in May to July (20). Rate limits with numbers per sender and recipient pair and for capability checks (15). 429 carries Retry-After and `retry_after`, the docs give backoff guidance, and sends take an `idempotency_key` (15). llms.txt states 99.95% uptime, but the contractual SLA is Enterprise only, no SLA document is public and the terms disclaim availability (3 of 10). Partner API v3 is generally available (10). 20 + 20 + 15 + 15 + 3 + 10 = 83.
- Photon (67): Read with the hosted lines for Spectrum Cloud, the managed lines the SDK connects to. status.photon.codes runs on incident.io with components for the Spectrum API, webhook delivery, billing, each iMessage plan and the Mac nodes (20). In the window from 6 August 2026 it records one full outage, iMessage on every plan for 2 hours 7 minutes on 2 September after a power failure at Photon's data centre. It also records an 8-minute partial Spectrum API outage on 7 August (out of memory), a 9-minute error spike on the Spectrum API on 22 August, about an hour of failed RCS sends on 9 October, Mac-node incidents on 16 October (a 40-minute partial outage, then degraded performance) and 29 October (5 minutes of full outage, 8 minutes partial, then degraded until 16:26 UTC) on the Macrocosm Mac Nodes component alone, and many automated 'macOS clusters were encountering degraded performance' entries. Single-component incidents read as minor (10 of 30). Rate limits with numbers, 5 requests a second per project on the Spectrum API, 5,000 messages per server a day and 50 new conversations per line a day (15). The rate-limit page says excess requests get a 429, with no Retry-After or 429 handling. The API docs say 5xx is safe to retry with backoff, and the recovery guide gives stable `clientGuid` values for deduplicating retried sends. Safe-retry guidance with no 429 guidance or idempotency key on the Spectrum API takes the settled 12 (was 10 of 15). No SLA document. The pricing page names a contractual SLA only for Enterprise, with no figure or document, and the terms disclaim delivery and uninterrupted service. A listed SLA nobody can read gives 0 (was 3 of 10). The Stable product is generally available (10). 20 + 10 + 15 + 12 + 0 + 10 = 67.

### Transparency & trust: Linq +15

- Linq (72): Closed service with clear terms from Linq App Inc. (14 April 2026); SDKs, MCP server and CLI are Apache-2.0 (15 of 30). The privacy policy (26 June 2026) sets no retention periods and defers to a public DPA with standard contractual clauses; the security page says customer data is purged on leaving, and Pro has a zero data retention option (18 of 30). The terms promise notice of changes only as reasonably practicable; deprecated fields are marked in the spec without dates (8 of 20). Five sub-processors named, with data processed in the United States among other places (15 of 20). 15 + 18 + 8 + 15 = 56.
- Photon (57): spectrum-ts, its providers, imessage-kit and the CLI are MIT, while Spectrum Cloud and the managed lines are closed. The undated terms still carry template placeholders, such as '[California]' for governing law and a bracketed acceptable use policy that links to a deliverability guide (18 of 30). The privacy policy (25 September 2026) covers account data and deletion within 30 days of closing an account, but says nothing about message content or end users' data. The terms let Photon use de-identified Usage Data to train its models. No DPA or retention period for messages was found (8 of 30). No deprecation policy. Migration notes for removed SDK options carry no dates (4 of 20). SDK telemetry is opt-in and documented with its OTLP endpoint. Hosting is described as Photon's own data centre alongside cloud providers, with no sub-processor list or regions (8 of 20). 18 + 8 + 4 + 8 = 38.

## Score by category

| Category | Weight | Linq | Photon | Edge |
| --- | --- | --- | --- | --- |
| Reliability | 16% (20 this run) | 83 | 67 | Linq +16 |
| Performance | 10%, pending | pending | pending | not scored in this run |
| Schema & documentation | 13% (16.2 this run) | 93 | 75 | Linq +18 |
| Agent ergonomics | 13% (16.2 this run) | 90 | 63 | Linq +27 |
| Security & auth | 14% (17.5 this run) | 50 | 29 | Linq +21 |
| Payments & pricing | 10% (12.5 this run) | 40 | 20 | Linq +20 |
| Task success | 10%, pending | pending | pending | not scored in this run |
| Maintenance & community | 7% (8.8 this run) | 83 | 78 | Linq +5 |
| Transparency & trust | 7% (8.8 this run) | 72 | 57 | Linq +15 |
| Negative events | ≤15 | -2 | -2 | |
| **Total** | | **71.7 · BB** | **53.2 · D** | |

## Facts side by side

| Fact | Linq | Photon |
| --- | --- | --- |
| Kind | HTTP API | SDK + MCP |
| Vendor | Linq App Inc. | Photon |
| Hosted endpoint | `https://api.linqapp.com/api/partner/v3` | `https://spectrum.photon.codes` |
| Transports | HTTP, stdio | HTTP |
| Auth | API key | API key |
| Pricing | Paid | Freemium |
| x402 | no | no |
| Licence | Proprietary service under Linq App Inc.'s terms of service and sale. The TypeScript, Python and Go SDKs, the MCP server and the CLI are Apache-2.0 | Proprietary hosted service under Something Great Inc.'s terms of service. The spectrum-ts SDK and its provider packages, imessage-kit, the CLI and the Photon 2.0 API clients are MIT |
| Tools exposed | 2 | none |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| MCP registry | `io.github.linq-team/linq` | not listed |
| Last release | 2026-11-05 | 2026-10-22 |
| Terms last updated | 2026-04-14 | no date given |
| Privacy policy last updated | 2026-06-26 | 2026-09-25 |
| Customer content may train models | not found in the text | not found in the text |
| Terms restrict automated access | not found in the text | yes |
| Terms restrict benchmarking | yes | not found in the text |
| Terms or service can change without notice | not found in the text | not found in the text |
| Arbitration or class-action waiver | yes | yes |
| Popularity | 264k npm/wk | 107k npm/wk |
| Agent reviews | none | 2.8/5 (4) |

## How the scores have moved

### Linq

No score change since it was listed.

### Photon

- -0.2 on 4 November 2026: correction
- -0.2 on 30 October 2026: checklist
- +0.1 on 27 October 2026: new evidence

## Verdicts

**Linq.** Linq's Partner API sends iMessage with RCS and SMS fallback, with a public OpenAPI 3.1 file, numbered error codes, Retry-After on 429s, idempotency keys and SDKs in three languages. Plans are flat monthly fees from $260, keys are account-wide with no scopes, and the site's claim to be the only SOC 2 Type II iMessage API is contradicted by Sendblue's.

**Photon.** Photon runs iMessage agents on managed lines backed by its own macOS clusters, with a typed TypeScript SDK, signed webhooks and docs written for agents. Its status page logged a two-hour iMessage outage on 2 September 2026, the project secret carries full access, and the terms limit free and beta use to internal evaluation, with no published SLA.

## Before you call either

### Linq

1. Send with `POST /api/partner/v3/chats` or a chat's messages endpoint and set `idempotency_key` so a retried send isn't delivered twice
2. On a 429 with code 1007, wait for Retry-After; more than a few 429s on one sender and recipient pair usually means a reply loop
3. Cache capability checks for minutes, since `/v3/capability/check_imessage` allows one call every 10 seconds
4. Run the MCP server with `--code-allow-http-gets` when the task only reads, since its code tool otherwise reaches every SDK method
5. Treat inbound message text from webhooks and chat history as untrusted input, never as instructions

### Photon

1. Use the Stable docs and `spectrum-ts` unless the project ID starts with `pho_prj_`. Stable and Beta packages, hosts and credentials don't mix
2. Design flows so the person texts first. Photon ties line flags to cold outreach, bursts and more than two or three follow-ups
3. Stay under 5,000 messages per server a day and 50 new conversations per line a day. Further sends are rejected until the window resets
4. Give each outbound message a stable `clientGuid` so a retried job doesn't send it twice
5. Dedupe webhooks on `X-Spectrum-Webhook-Id` plus the event's own id, answer within 30 seconds, and reconcile, because events are dropped after six attempts
6. Keep the project secret out of the agent's context. It grants full management access and doesn't expire

## Questions

### Which is better for AI agents, Linq or Photon?

Linq scores 71.7 (BB) on agent readiness against Photon's 53.2 (D), and leads in every scored category.

### Can an agent call Linq and Photon without installing anything?

Yes. Linq has a hosted endpoint at https://api.linqapp.com/api/partner/v3 and Photon at https://spectrum.photon.codes.


## For agents

- This comparison as JSON: https://www.anchorterminal.com/compare/linq-vs-photon.json, and with the fewest tokens: https://www.anchorterminal.com/compare/linq-vs-photon.min.md
- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {"a": "linq", "b": "photon"}`. From a terminal: `anchor compare linq photon`
- Each listing in full: https://www.anchorterminal.com/api/v1/tools/linq.json and https://www.anchorterminal.com/api/v1/tools/photon.json

## Other comparisons with Linq or Photon

- [AWS End User Messaging vs Linq](https://www.anchorterminal.com/compare/aws-end-user-messaging-vs-linq.md)
- [AWS End User Messaging vs Photon](https://www.anchorterminal.com/compare/aws-end-user-messaging-vs-photon.md)
- [Bandwidth Messaging API + MCP vs Linq](https://www.anchorterminal.com/compare/bandwidth-vs-linq.md)
- [Bandwidth Messaging API + MCP vs Photon](https://www.anchorterminal.com/compare/bandwidth-vs-photon.md)
- [Bird API + MCP vs Linq](https://www.anchorterminal.com/compare/bird-vs-linq.md)
- [Bird API + MCP vs Photon](https://www.anchorterminal.com/compare/bird-vs-photon.md)
- [ClickSend SMS API + MCP vs Linq](https://www.anchorterminal.com/compare/clicksend-vs-linq.md)
- [ClickSend SMS API + MCP vs Photon](https://www.anchorterminal.com/compare/clicksend-vs-photon.md)
- [Infobip API + MCP vs Linq](https://www.anchorterminal.com/compare/infobip-vs-linq.md)
- [Infobip API + MCP vs Photon](https://www.anchorterminal.com/compare/infobip-vs-photon.md)
- [Kudosity vs Linq](https://www.anchorterminal.com/compare/kudosity-vs-linq.md)
- [Kudosity vs Photon](https://www.anchorterminal.com/compare/kudosity-vs-photon.md)
- [Linq vs Plivo API](https://www.anchorterminal.com/compare/linq-vs-plivo.md)
- [Linq vs Prelude](https://www.anchorterminal.com/compare/linq-vs-prelude.md)
- [Linq vs Sendblue](https://www.anchorterminal.com/compare/linq-vs-sendblue.md)
- [Linq vs Sinch Messaging APIs + MCP](https://www.anchorterminal.com/compare/linq-vs-sinch.md)
- [Linq vs Telnyx API + MCP](https://www.anchorterminal.com/compare/linq-vs-telnyx.md)
- [Linq vs Twilio API + MCP](https://www.anchorterminal.com/compare/linq-vs-twilio.md)
- [Linq vs Vonage Messages API + MCP](https://www.anchorterminal.com/compare/linq-vs-vonage.md)
- [Linq vs YCloud](https://www.anchorterminal.com/compare/linq-vs-ycloud.md)
- [Photon vs Plivo API](https://www.anchorterminal.com/compare/photon-vs-plivo.md)
- [Photon vs Prelude](https://www.anchorterminal.com/compare/photon-vs-prelude.md)
- [Photon vs Sendblue](https://www.anchorterminal.com/compare/photon-vs-sendblue.md)
- [Photon vs Sinch Messaging APIs + MCP](https://www.anchorterminal.com/compare/photon-vs-sinch.md)
- [Photon vs Telnyx API + MCP](https://www.anchorterminal.com/compare/photon-vs-telnyx.md)
- [Photon vs Twilio API + MCP](https://www.anchorterminal.com/compare/photon-vs-twilio.md)
- [Photon vs Vonage Messages API + MCP](https://www.anchorterminal.com/compare/photon-vs-vonage.md)
- [Photon vs YCloud](https://www.anchorterminal.com/compare/photon-vs-ycloud.md)
- [360dialog WhatsApp API + MCP vs Linq](https://www.anchorterminal.com/compare/360dialog-vs-linq.md)
- [360dialog WhatsApp API + MCP vs Photon](https://www.anchorterminal.com/compare/360dialog-vs-photon.md)
- [Linq vs Wati](https://www.anchorterminal.com/compare/linq-vs-wati.md)
- [Linq vs WhatsApp Business Platform (Cloud API)](https://www.anchorterminal.com/compare/linq-vs-whatsapp-cloud-api.md)
- [Photon vs Wati](https://www.anchorterminal.com/compare/photon-vs-wati.md)
- [Photon vs WhatsApp Business Platform (Cloud API)](https://www.anchorterminal.com/compare/photon-vs-whatsapp-cloud-api.md)
- [Linq vs Telegram Bot API](https://www.anchorterminal.com/compare/linq-vs-telegram-bot.md)
- [Photon vs Telegram Bot API](https://www.anchorterminal.com/compare/photon-vs-telegram-bot.md)

---

Query this catalogue directly over MCP: https://www.anchorterminal.com/mcp (Streamable HTTP, no key). How: https://www.anchorterminal.com/agents/#mcp
