Deprecations
This page tracks deprecated API endpoints and their scheduled removal dates. If you are integrating against BlueSender for the first time, do not use the endpoints listed here — use the replacement listed in each entry.
Deprecated endpoints
POST /send-message
| Field | Value |
|---|---|
| Status | 410 Gone (sunsetted 2026-05-01; code removal in next release) |
| Deprecated | 2025-02-06 |
| Sunset | 2026-05-01 |
| Replacement | POST /crm/webhook |
Reason: Endpoint is unused. All CRM integrations use
/crm/webhook, which provides better payload flexibility, signature
verification, and status updates.
Migration: Update your webhook URL from /send-message to
/crm/webhook and add contactId to the payload. The legacy
endpoint required (locationId, number, message); /crm/webhook
requires (locationId, contactId, message-or-attachments) and treats
number as optional (resolved from the contact when omitted). See
the HTTP Webhooks reference for the full
payload format.
POST /crm/send-message
| Field | Value |
|---|---|
| Status | 410 Gone (sunsetted 2026-05-01; code removal in next release) |
| Deprecated | 2025-02-06 |
| Sunset | 2026-05-01 |
| Replacement | POST /crm/webhook |
Reason: Endpoint is unused. Functionally identical to
/crm/webhook but with stricter field requirements.
Migration: Update your webhook URL from /crm/send-message to
/crm/webhook. No payload changes required.
Removed field aliases on POST /crm/webhook
In release 1.19.13 the wider field-alias set previously accepted on
/crm/webhook (and its two path aliases) was removed. The endpoint now
accepts only the canonical CRM Conversation Provider — Outbound
Message schema, which is exactly the shape documented on
HTTP Webhooks.
The removed aliases had accumulated during early debug commits in February–March 2025 and were never used by a real integrator in production — verified by a server-log scan over the prior 3 months (zero matches across 216 webhook requests).
| Field | Removed alias paths |
|---|---|
locationId | location.id, accountId |
contactId | contact.id |
messageId | id, message.id, payload.id |
message | body, text, message.body, payload.body, data.body, raw |
phone | number, toNumber, toPhone, toPhoneNumber, to, contact.phone, contact.phoneNumber, customer.phone, payload.phone, payload.number, data.phone, data.number |
attachments | payload.attachments, data.attachments, message.attachments |
conversationId | message.conversationId, payload.conversationId, conversationProviderId, payload.conversationProviderId |
Migration. Send the canonical fields at the top level of the JSON
body. Existing integrations that already use the documented shape are
not affected. Requests that relied on one of the removed aliases now
fail validation with 400 MISSING_REQUIRED_FIELDS.
accountId note. The legacy accountId alias previously resolved
as locationId for routing purposes but silently disabled per-message
status callbacks (the message-location cache was only keyed by
locationId). The endpoint is therefore now fail-fast instead of
silently degraded for those requests.
type field tightening. The endpoint previously logged type but
ignored its value entirely, so an Email-typed payload would flow
through the iMessage / SMS pipeline. As of 1.19.13 type is optional,
and when present must equal "SMS" — Email (and any other value) is
rejected with 400 UNSUPPORTED_MESSAGE_TYPE. Production traffic was
216/216 SMS prior to this change, so no live integrator is affected.
Response headers on deprecated endpoints
Deprecated and sunsetted endpoints return the following response headers per RFC 8594:
Deprecation: @<unix-timestamp>— when the endpoint was deprecated.Sunset: <HTTP-date>— when the endpoint stopped accepting traffic.Link: <url>; rel="deprecation"— link to this page.
If your client logs response headers, you can detect deprecated calls without polling this page.
Removal process
- Endpoints are marked deprecated with logging and the response headers above.
- A minimum 90-day notice period runs between the deprecation and the sunset date. Specific endpoints may receive a longer notice period — see the table above for actual dates.
- On the sunset date the endpoint starts returning
410 Gonewith the response headers above. - The
410 Goneresponse is kept for one release cycle so late callers get a clear signal, after which the route and handler code are removed entirely.
Related
- Versioning policy — overall compatibility guarantees and how breaking changes are signalled.
- HTTP Webhooks — current endpoints and their request/response shapes.