Changelog
A chronological record of platform updates, new features, and important changes to Sent's APIs and services.
2026
May 2026
Pre-Send Consent Gate
- Added: New
ERR_CONSENT_BLOCKEDsend-time error code. Every outbound message now runs through a pre-routing consent check that refuses sends to recipients withopt_out = trueor whose phone is on the customer's phone-channel suppression list. Blocked messages are finalized asFAILEDbefore any provider call is made, so no carrier charge applies. Inspectdescriptionon the message detail or inGET /v3/messages/{id}/activitiesto see the reason. - Updated:
BUSINESS_004is now scoped to the all-recipients-opted-out case. When some recipients are still reachable, the API accepts the batch and only the blocked recipients fail asynchronously withERR_CONSENT_BLOCKED. See API Errors and the error catalog.
Inbound Message Webhooks
- Fixed:
message.receivedwebhook events now fire correctly for inbound messages across all channels. Previously, subscribing tomessage.receivedproduced no deliveries despite the event appearing in the subscription list — the webhook notification was only sent for outbound status changes. All inbound messages persisted since this release trigger amessage.receivedevent to your webhook endpoint. - Updated:
message.receivedpayloadchannelfield now reflects the actual inbound channel (smsorwhatsapp). WhatsApp replies fire the samemessage.receivedevent shape as SMS replies. - Fixed: Inbound WhatsApp replies now reliably resolve to the correct account when a number has been used across multiple WhatsApp Business Accounts.
Profile Completion API
- Updated:
POST /v3/profiles/{profileId}/completenow returns distinct typed responses:- 200 — Profile was already in a completed state. Response body:
{success: true, data: {status: "completed", message: "..."}}. - 202 — Completion accepted and running in the background. Response body:
{success: true, data: {message: "..."}}. The provided webhook URL is called when processing finishes. - Previously both paths returned an opaque
objecttype, which made it difficult to distinguish synchronous completion from asynchronous processing in generated SDK clients.
- 200 — Profile was already in a completed state. Response body:
API Schema
- Updated:
event_dataandmetadatafields on webhook event and message objects are now typed as open JSON objects in the OpenAPI spec. This resolves ambiguity in generated SDK clients where these fields previously appeared as untyped empty schemas. Runtime behaviour is unchanged.
April 2026
Opt-In / Opt-Out Keyword Management
- Added: Per-account keyword management for SMS opt-in and opt-out flows. You can now configure custom keywords (beyond the standard STOP/START/HELP) that trigger automatic replies and consent state changes. Contacts who send an opt-out keyword are automatically suppressed from future messages.
- Added: Inbound keyword matches now trigger configurable auto-replies, billed as standard outbound messages.
Inbound Message Processing
- Added: Inbound messages from contacts are now persisted and fully tracked across all supported channels. Each inbound message appears in your message history with
direction: "INBOUND"andstatus: "RECEIVED". - Added: Inbound messages generate a
message.receivedwebhook event. Subscribe to this event to receive real-time notifications when contacts reply to your messages. See webhook event types for payload details. - Added: The
fromfield is now captured on all message activities, so you can see the sender's phone number throughout the full message lifecycle.
Webhook Event Filtering
- Added: Granular webhook event filtering by
sub_type. When creating or updating a webhook, you can now specify which message sub-types to receive (e.g. onlydeliveredandfailed) instead of subscribing to all status transitions. This reduces webhook volume for high-throughput integrations.
March 2026
Template Approval Enforcement
- Added: Messages using WhatsApp templates that have not been approved by Meta are now blocked before dispatch, with a clear error response. Previously, unapproved templates could reach the provider and produce a delayed failure. Approved templates continue to send without any change.
OTP Delivery via WhatsApp
- Added: OTP codes can now be delivered via WhatsApp. The platform waits for a delivery confirmation before reporting success, and automatically falls back to SMS if WhatsApp delivery is not confirmed within the timeout window. No API changes required — channel selection follows your normal routing configuration.
Account Suspension
- Added: Accounts flagged as suspended are blocked from sending messages and receive a clear
account_suspendederror response on all API calls. This applies to both the messaging API and webhook delivery.
Error Documentation Links
- Updated: All API error responses now include a
doc_urlfield pointing to the relevant documentation page for that specific error code. This makes it easier to diagnose and resolve integration issues without searching the docs manually.
Message Metadata
- Added: Messages now carry a
metadataobject that captures origin context (e.g. the API endpoint that created the message). This field is returned in message detail and activity responses as an open JSON object.
February 2026
Per-Customer Pricing
- Added: Two billing models are now supported — Active Contact (charged per unique contact reached in a billing period) and Per Message (charged per message sent). Your account's billing model is configured at account setup. Charges are deducted automatically after each successful send.
Number Provisioning
- Added: Phone numbers associated with your account are now visible via the API. Use
GET /v3/lookup/number/{phone}to retrieve carrier and capability information for any number.
Playground Message Endpoint
- Added: A dedicated endpoint for sending test messages during onboarding, without requiring a fully provisioned profile. Useful for verifying end-to-end message delivery before going live.
January 2026
Organizations & Sender Profiles (Multi-Tenancy)
- Added: Full multi-tenancy support via Organizations and Sender Profiles. An Organization is the top-level account; Sender Profiles are sub-accounts that can inherit or isolate contacts, templates, brands, and campaigns from the parent organization.
- Added: Profile CRUD — create, list, retrieve, update, and delete sender profiles via the API.
- Added:
POST /v3/profiles/{id}/complete— trigger the compliance setup workflow for a profile (TCR registration, WhatsApp connection). - Added: Contact and template inheritance — profiles can be configured to share contacts and templates with the parent organization (
inheritContacts,inheritTemplates), or to maintain their own isolated sets. - Added: Template sharing — templates created at the organization level can be shared with child profiles without duplication.
User Management
- Added: Full user management for your organization:
GET /v3/users/GET /v3/users/{id}— list and retrieve usersPOST /v3/users— invite a user by email with a specified rolePATCH /v3/users/{id}— update a user's roleDELETE /v3/users/{id}— remove a user from the organization
- Added: Role-based access —
OWNER,ADMIN, andMEMBERroles with appropriate permission scopes. Owners have implicit admin access across all endpoints. - Added: User invitation emails with organization and profile context included in the invitation link.
WhatsApp Template Synchronization
- Added: WhatsApp templates are now automatically synchronized from your connected WhatsApp Business Account. Template status updates (approved, rejected, paused) are reflected in real time via webhook-driven sync — no manual re-import needed.
- Added: Template soft-deletion — when a WhatsApp Business Account is disconnected or deleted, all associated templates are soft-deleted rather than permanently removed, preserving message history.
- Added: AUTHENTICATION template category support, including OTP and COPY_CODE button types for one-time password flows.
Error Codes
- Added: Comprehensive error code system for message sending failures. Each failure now includes a machine-readable
error_codefield in the message activity, making it straightforward to programmatically distinguish temporary failures (retry) from permanent ones (suppress).
API v3
Overview
Sent API v3 is the current major version, featuring a redesigned authentication system, consistent response formats, and expanded functionality for multi-channel messaging.
Key Changes from v2
| Feature | v2 | v3 |
|---|---|---|
| Authentication | x-sender-id + x-api-key headers | x-api-key header only |
| Response Format | FastEndpoints problem details | Consistent JSON envelope |
| Property Naming | Mixed case | snake_case |
| Sandbox Mode | Not available | sandbox field in body |
| Idempotency | Not available | Idempotency-Key header |
| Error Codes | Limited | Comprehensive error catalog |
| Profiles | Limited | Full CRUD operations |
| Brands/Campaigns | Not available | Full 10DLC support |
| Users | Not available | Organization management |
| Webhooks | v2 endpoints | Enhanced v3 webhooks |
2024
December 2024
API v3 General Availability
- Added: Sent API v3 is now the recommended version for all integrations
- Added: Comprehensive API documentation for v3 endpoints
- Added: New getting started guide for v3
November 2024
Webhook Enhancements
- Added:
GET /v3/webhooks/event-typesendpoint to list available event types - Added:
POST /v3/webhooks/{id}/testendpoint to test webhook delivery - Added:
POST /v3/webhooks/{id}/rotate-secretendpoint for security rotation - Added:
PATCH /v3/webhooks/{id}/toggle-statusendpoint to enable/disable webhooks
User Management
- Added:
GET /v3/usersandGET /v3/users/{id}for user listing and details - Added:
POST /v3/usersto invite users to your organization - Added:
PATCH /v3/users/{id}to update user roles - Added:
DELETE /v3/users/{id}to remove users
October 2024
10DLC Compliance (Brands & Campaigns)
- Added: Brand registration endpoints for 10DLC compliance
POST /v3/brands- Create brandGET /v3/brands- List brandsPUT /v3/brands/{id}- Update brandDELETE /v3/brands/{id}- Delete brand
- Added: Campaign management endpoints
POST /v3/brands/{id}/campaigns- Create campaignGET /v3/brands/{id}/campaigns- List campaignsPUT /v3/brands/{id}/campaigns/{id}- Update campaignDELETE /v3/brands/{id}/campaigns/{id}- Delete campaign
Profile Management
- Added: Full profile CRUD operations
POST /v3/profiles- Create profileGET /v3/profiles- List profilesGET /v3/profiles/{id}- Get profile detailsPATCH /v3/profiles/{id}- Update profileDELETE /v3/profiles/{id}- Delete profile
- Added:
POST /v3/profiles/{id}/completefor profile setup completion
September 2024
API v3 Beta Release
- Added: Core messaging endpoints
POST /v3/messages- Send messagesGET /v3/messages/{id}- Get message statusGET /v3/messages/{id}/activities- Get message activities
- Added: Contact management
GET /v3/contacts- List contactsPOST /v3/contacts- Create contactGET /v3/contacts/{id}- Get contactPATCH /v3/contacts/{id}- Update contactDELETE /v3/contacts/{id}- Delete contact
- Added: Template management
GET /v3/templates- List templatesPOST /v3/templates- Create templateGET /v3/templates/{id}- Get templatePUT /v3/templates/{id}- Update templateDELETE /v3/templates/{id}- Delete template
- Added: Webhook management
GET /v3/webhooks- List webhooksPOST /v3/webhooks- Create webhookGET /v3/webhooks/{id}- Get webhookPUT /v3/webhooks/{id}- Update webhookDELETE /v3/webhooks/{id}- Delete webhookGET /v3/webhooks/{id}/events- List webhook events
- Added: Number lookup
GET /v3/lookup/number/{phone}- Lookup phone number information
- Added: Account information
GET /v3/me- Get authenticated account details
New Features
- Added: Sandbox mode (
sandbox: true) for all mutation endpoints - Added: Idempotency key support via
Idempotency-Keyheader - Added: Consistent JSON response envelope (
success,data,error,meta) - Added: Standardized error codes with documentation URLs
- Added: snake_case property naming convention
- Added: Enhanced rate limiting with detailed headers
2023
Legacy API v2
The v2 API remains fully supported for existing integrations. All v2 endpoints continue to operate at /v2/ paths.
Key v2 endpoints:
POST /v2/messages/contact- Send message to contactPOST /v2/messages/phone- Send message to phone numberGET /v2/contacts- List contactsGET /v2/templates- List templates
See Legacy API Reference for complete v2 documentation.
Deprecation Notices
API v2
- Status: Legacy (still supported)
- Recommendation: New integrations should use v3
- End of Support: No end date announced
Upcoming Changes
Planned for 2025
- Analytics API: Message delivery analytics and reporting endpoints
- Bulk Operations: Endpoints for batch contact and message operations
- Advanced Templates: Template versioning and A/B testing support
- SDKs: Official client libraries for JavaScript, Python, and Go
Subscribe to our API Status page for real-time updates on API changes and service status.
Feedback
Have suggestions for API improvements? Contact us at support@sent.dm.