Skip to main content
New releasesImprovementsBug fixesBreaking changes

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.
  • 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.
  • 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.
  • 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 and Plans and billing.

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.

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 and List organizations.
  • 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 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.
  • 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. 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.

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 and Create webhook destination.

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 and Invoices and payments.
  • 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.
  • 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.
  • SMS best practices: SMS best practices covers short codes, verification-code filtering by line type, and using Photon numbers with third-party services.
  • MCP server: Photon MCP server 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 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.