> ## Documentation Index
> Fetch the complete documentation index at: https://docs.photon.codes/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use Stable documentation by default. Honor an explicit Beta request or a URL under /docs/beta/. If the requested version conflicts with the installed CLI package or API origin, clarify the target before writing integration code.
> Pages under /docs/beta/ document Beta; other product pages document Stable. Keep the CLI package, commands, API origin, and credentials within the selected version. State the documentation version in your answer.
> For MCP search, always pass version: Stable or version: Beta. Unfiltered search mixes both versions. For filesystem reads, keep Beta queries under /beta/ and exclude /beta/ from Stable queries; discover paths before reading them.
> The public docs base is https://photon.codes/docs. Convert MCP page paths to public URLs under that base, preserving /beta/ when present. Read https://photon.codes/docs/skill.md for version selection and https://photon.codes/docs/llms.txt for the version indexes.

# Product updates

> New features, improvements, and fixes to the Photon 2.0 platform, published every week.

**October 24, 2026**

## Messaging

* **iMessage replies:** Send a message with `parentMessageId` and it arrives as a native iMessage reply to that message. Replies work in direct and group conversations, on dedicated and shared lines, and for text, single attachments, and attachment groups. Before, these sends failed with `409 SPACE_NOT_SENDABLE`. See [Send a message](https://docs.photon.codes/docs/beta/api-reference/messages/send-a-message.md).
* **Telegram files, video, audio, and voice notes:** `POST /v1/projects/{id}/messages` to a Telegram Space accepts any single attachment and `voice` content. Telegram shows each in its native form: JPEG and PNG images up to 10 MB as photos, GIFs as animations, MP4 as inline video, MP3 and M4A in the music player, and any other file as a file card. Voice content in OGG Opus, MP3, or M4A arrives as a voice note. Set `telegram.sendAs` to `"file"` to send an attachment as a file card, unchanged. See [Send a message](https://docs.photon.codes/docs/beta/api-reference/messages/send-a-message.md).
* **SMS number purchases with no number in stock:** A purchase that finds no number fails with `NUMBER_INVENTORY_UNAVAILABLE` one minute after you request it, instead of searching indefinitely, so you can try another area code or leave the area code out. When a purchase fails, your organization's Owners and Admins get an email that says what to do next. See [Purchase SMS number](https://docs.photon.codes/docs/beta/api-reference/sms-numbers/purchase-sms-number.md).
* **iMessage lines without iMessage on their number:** When Apple hasn't registered a dedicated iMessage line's phone number for iMessage, the line's iMessage health reads unavailable instead of degraded, and so do new conversations, SMS, and MMS, because nothing can fall back for that number. Sends from the line fail right away with `409 SENDER_NOT_SENDABLE` instead of being accepted.
* **Dedicated iMessage and WhatsApp line limit:** A project on the Business plan holds up to 50 dedicated iMessage lines and 50 dedicated WhatsApp lines. A request for one more is refused with a `402` `ENTERPRISE_PLAN_REQUIRED` problem, and a request accepted earlier that reaches the limit fails its operation with the same code. To hold more lines, contact us about an Enterprise plan. When you reach the limit, the dashboard offers a way to contact us. See [Provision dedicated iMessage line](https://docs.photon.codes/docs/beta/api-reference/dedicated-imessage-lines/provision-dedicated-imessage-line.md) and [Plans and billing](https://docs.photon.codes/docs/beta/plans-and-billing.md).

## Dashboard

* **Telegram inbox:** A Telegram bot's page shows its activity and recent messages, and **Inbox** opens the bot's conversations. Reply with text or with up to 10 JPEG or PNG photos, 10 MB in total.
* **iMessage first text:** On a shared iMessage line, a person you add shows **Waiting for first text** until they text the line. The agent can reply and start conversations only after that text. The person's assignment page shows a code to scan with their iPhone to send it.
* **iMessage on phone number:** A line's iMessage health shows whether iMessage works on the line's phone number.
* **SMS number purchases:** Select **Cancel purchase** to stop an SMS number purchase that is still searching for a number. A purchase that fails shows on the SMS page with what to do next.
* **Mobile numbers for phone verification:** Account phone verification accepts only mobile numbers. A landline or VoIP number is refused with `phone-number-type-unsupported`, and the dashboard asks for a mobile number. See [Problem catalog](https://docs.photon.codes/docs/beta/problems/catalog.md).

## API and SDKs

* **Organizations in the SDKs:** Version 0.6.0 of the TypeScript, Python, Rust, and Go clients adds 43 operations for organizations and members, invitations, OAuth clients, service identities and their credentials, avatars, and SSO subscriptions. See [Organizations](https://docs.photon.codes/docs/beta/api-client/sdk/organizations) and [List organizations](https://docs.photon.codes/docs/beta/api-reference/organizations/list-organizations.md).
* **MCP server and accepted writes:** When the API accepts a write with `202`, such as sending a message or provisioning a line, the [MCP server](https://docs.photon.codes/docs/beta/ai-tools/mcp.md) returns the result instead of failing with "Request could not be completed". The hosted server and `@photon-ai/mcp` 0.1.5 include this.
* **MCP server errors:** Tool errors from the hosted MCP server include the problem's `code`, `status`, and `title` in their text, so clients that read only text see why a call failed.
* **Failed operations return their problem:** When an operation fails, its `error` is the full problem for its code, the same object the endpoint returns when it rejects a request: `type`, `title`, `status`, `code`, and `detail`, plus `remediation` when there's a next step and typed fields such as `reason` on `ENTITLEMENT_REQUIRED`. `code` keeps its value, so code that branches on it keeps working. Each endpoint that starts an operation lists the codes it can fail with. See [Get operation](https://docs.photon.codes/docs/beta/api-reference/operations/get-operation.md).
* **Larger telemetry queries:** `POST /v1/projects/{projectId}/metrics/query` and the dashboard's activity views read up to twice as much data per query, so queries on busy projects return `query-resource-limit` less often.

### Breaking changes

* **Dashboard-only operations removed from the SDKs:** Version 0.6.0 of the clients removes `getAccountOnboarding`, `updateAccountOnboarding`, `completeAccountOnboarding`, `createOrganizationSetupIntent`, `startAccountPhoneVerification`, `confirmAccountPhoneVerification`, `beginOrganizationSsoAdmission`, `beginOrganizationAuthentication`, `beginOrganizationClosureAuthentication`, `beginInvitationSso`, `connectWhatsappBusiness`, and `getWhatsappSignupConfig`. Their endpoints, such as `GET /v1/account/onboarding` and `PUT /v1/account/phone`, also left the [API reference](https://docs.photon.codes/docs/beta/api-reference/index.md). These operations accept only a dashboard session and have refused API credentials since October 17, so remove any calls to them before you upgrade.
* **SMS removed from filtered verification codes:** The filtered verification code endpoints, such as `GET /v1/projects/{id}/platforms/filtered-otp`, accept `platform=imessage` or `platform=whatsapp`. `platform=sms` returns `422`, and lists and counts no longer include codes from SMS numbers, so remove `platform=sms` from your requests. The dashboard no longer shows filtered codes on SMS number pages. See [List filtered verification codes](https://docs.photon.codes/docs/beta/api-reference/verification-codes/list-filtered-verification-codes.md).

## Webhooks and events

* **Email sending paused and resumed:** Subscribe a webhook destination to `platform.sending.paused` and `platform.sending.resumed` to learn when email sending for your project pauses or resumes. The event's `reason` is `reputation_policy` or `operator_action`. See [List webhook event types](https://docs.photon.codes/docs/beta/api-reference/webhook-event-catalog/list-webhook-event-types.md) and [Create webhook destination](https://docs.photon.codes/docs/beta/api-reference/webhook-destinations/create-webhook-destination.md).

## Billing

* **Pending payments:** When your bank asks you to confirm a payment, such as a 3D Secure check, the payment shows under **Pending payments** on your organization's billing and invoices pages and on the project's billing page. Select **Confirm** to complete it. What the payment is for stays pending until you do. `GET /v1/organizations/{organizationId}/billing/payment-actions` lists the same payments. See [List payments to confirm](https://docs.photon.codes/docs/beta/api-reference/organization-billing/list-payments-to-confirm.md) and [Invoices and payments](https://docs.photon.codes/docs/beta/invoices-and-payments.md).
* **Promotion codes:** Pass `promotionCode` to `POST /v1/organizations/{organizationId}/billing/projects/{projectId}/purchase` to redeem a code with an upgrade or a first plan. A refused code fails the operation with `promotion_code_rejected` and changes nothing. Coupons the project already has stay and stack. See [Change plan](https://docs.photon.codes/docs/beta/api-reference/project-billing/change-plan.md).
* **Plan charges:** In a project's billing, **Compare plans** in **Messaging Plans** opens a page that lists each plan's price, fixed charges, and usage charges.
* **Credit balance:** Owners and admins see the organization's credit balance on its project picker, with a link to the Credit page.

## Docs

* **10DLC campaign review guides:** New guides cover brand verification, opt-in, privacy policy and terms, prohibited content, sample messages, use cases, and carrier rejection codes. Help links in 10DLC campaign feedback now point to these guides. See [10DLC](https://docs.photon.codes/docs/beta/messaging/sms/10dlc).
* **SMS best practices:** [SMS best practices](https://docs.photon.codes/docs/beta/best-practices/sms.md) covers short codes, verification-code filtering by line type, and using Photon numbers with third-party services.
* **MCP server:** [Photon MCP server](https://docs.photon.codes/docs/beta/ai-tools/mcp.md) shows how to connect Claude Code, Cursor, VS Code, Codex, Claude, ChatGPT, and other clients, and how to run the server locally.
* **Enterprise plan:** [Plans and billing](https://docs.photon.codes/docs/beta/plans-and-billing.md) describes the Enterprise plan for projects that need more than 50 dedicated lines.

## Bug fixes

* **Voice:** When an AI agent on ElevenLabs or Retell ends an inbound call over TLS, the caller's side of the call ends too. Before, the caller stayed connected until they hung up.
* **Billing:** Invoice lists that include a usage threshold invoice load again instead of failing with `502`. When your bank declines the payment for a plan change or purchase, the operation fails within about 30 seconds instead of up to 5 minutes.
* **Phone verification:** A correct code is accepted after your first code expired and you asked for a new one.
* **Dashboard:** Clicking the **Requested permissions** title on New app, New service identity, or Create API key no longer selects or clears every permission. The project picker dialog's settings action reads **Settings**, so it fits. The line Support dialog is titled "Contact Photon support", and its Slack link stays available while your shared channel is being set up or needs attention. Shared iMessage and WhatsApp Personal setup steps fit a phone screen. Requests that get no answer from the network retry before they fail, and pages that your browser translates no longer break.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.