3CX is a business phone system used by thousands of UK organisations, and it can send and receive SMS through a messaging provider. everymessage supports the 3CX generic SMS provider interface, so your 3CX users can text customers from the same web client and apps they use for calls, on UK numbers, with delivery reports and replies in the conversation. This guide explains how it works, what you need and how to set it up.
In short: add everymessage as the SMS provider in 3CX using our PBX messages URL and your API key, then send us the webhook URL 3CX gives you. Outbound texts go from 3CX to everymessage, and replies and delivery reports come back to 3CX by webhook. No code and nothing to install.
How the integration works
3CX sends each outgoing text to everymessage as a simple request with your API key. We send it to the mobile networks and track delivery. When the message is delivered, or a customer replies to your number, we post it straight back to your 3CX system, which shows it in the right conversation.
What you need
- A 3CX system that supports SMS through a generic provider
- An everymessage account with an API key
- An SMS-enabled number from everymessage for customers to text and reply to, set up in 3CX
- Your 3CX webhook URL, which 3CX shows when you add the SMS provider
Setting it up
- Get your API key. We provide your everymessage API username and password. Your API key is
username:password, Base64-encoded. - Add the SMS provider in 3CX. In your 3CX SMS settings, choose the generic provider, enter the everymessage messages URL below, and paste in your API key.
- Add your number. Set up your everymessage SMS number in 3CX and choose which users or queues handle its texts.
- Send us your webhook URL. Copy the webhook URL 3CX shows for the provider and send it to us. We set it against your number in the 3CX / Yeastar (PBX) format, for both replies and delivery reports.
- Test. Send a text from 3CX, check it arrives and shows as delivered, then reply from the mobile and check the reply appears in 3CX.
| 3CX setting | Value |
|---|---|
| Provider | Generic SMS provider |
| Messages URL | https://api.everymessage.com/v1/pbx/messages |
| API key | Your everymessage API key (username:password, Base64-encoded) |
| Number format | International E.164 with a +, for example +447700900123 |
API reference
You don’t need this to use 3CX, but it shows exactly what 3CX and everymessage exchange, which helps if you’re testing or troubleshooting. The full reference, with code examples, is in our developer docs: Phone systems (PBX) API.
Send a message
3CX posts each text as JSON, with your API key as a Bearer token. from, to and text are all required, and numbers are in E.164 format.
curl -X POST "https://api.everymessage.com/v1/pbx/messages" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"from": "+447700900456", "to": "+447700900123", "text": "Your engineer is on the way."}'
Errors return a JSON errors list with a code, title and detail; the codes are listed under common problems below. A successful request returns HTTP 200 with the message details. The id is the everymessage message id, which 3CX uses to match the delivery report:
{
"data": {
"record_type": "message",
"direction": "outbound",
"id": "123456",
"type": "SMS",
"from": { "phone_number": "+447700900456" },
"to": [ { "phone_number": "+447700900123", "status": "queued" } ],
"text": "Your engineer is on the way.",
"encoding": "GSM-7",
"parts": 1
}
}
Replies
Customer replies are posted to your 3CX webhook as a message.received event:
{
"data": {
"event_type": "message.received",
"record_type": "event",
"payload": {
"id": "123789",
"direction": "inbound",
"type": "SMS",
"from": { "phone_number": "+447700900123" },
"to": [ { "phone_number": "+447700900456" } ],
"text": "Thanks, see you soon",
"received_at": "2026-10-13T09:15:04.511Z"
}
}
}
Delivery reports
When a message is delivered or fails, a message.finalized event is posted to the same webhook. payload.id is the id returned when the message was sent, and to[].status is delivered or delivery_failed.
Common problems and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| HTTP 401, error 10004 | API key is wrong | Check the key is username:password, Base64-encoded, with no spaces |
| HTTP 402, error 10005 | Not enough credit | Top up your account, or contact us |
| HTTP 422, error 10001 | Number can’t be sent to | Check the to number is a valid mobile number in E.164 format |
| HTTP 422, error 10005 | Sender not allowed | Check the from number is one of your everymessage numbers |
| HTTP 422, error 10003 | Picture message (MMS) | Send text only, or use RCS for rich messages |
| HTTP 429, error 10006 | Daily sending limit reached | Wait for the limit to reset, or ask us to raise it |
| Replies don’t appear in 3CX | Webhook not set | Send us the webhook URL 3CX shows for the provider |
| Messages stay unconfirmed | Delivery reports not set | Ask us to check delivery reports go to the same 3CX webhook |
Why use everymessage for 3CX SMS
UK numbers
Two-way UK numbers that customers can text and reply to, set up and supported by our UK team.
Delivery reports
Every message is tracked, and its final status is sent back to 3CX so users can see what was delivered.
Sent as typed
Emoji and accented characters are kept, with Unicode used only when a message needs it, so nothing a user types is lost.
Built for volume
Multiple carrier routes and sending that can burst to 1 million SMS per hour.
Secure and UK-hosted
Hosted in UK data centres with high availability across the UK and EU, and ISO 27001 certified since 2009.
More than SMS
The same platform provides RCS, WhatsApp, email and AI voice assistants.
Using Yeastar? The same everymessage PBX API works with it too: see Yeastar SMS. Using a different phone or contact centre platform? See NetSapiens SMS, Amazon Connect and every other way to connect on our Business SMS page.
Frequently asked questions
Can 3CX send SMS through everymessage?
Yes. everymessage supports the 3CX generic SMS provider interface, so 3CX users can send and receive business SMS on everymessage numbers, with delivery reports shown in 3CX.
What do I enter in 3CX?
The everymessage PBX messages URL and your everymessage API key. 3CX sends the key as a Bearer token on every message, so there’s nothing else to install.
How do replies reach 3CX?
3CX gives you a webhook URL for the trunk. We set it against your everymessage numbers in the 3CX / Yeastar (PBX) format, and every customer reply and delivery report is posted to it.
Does it support MMS?
No, the everymessage 3CX integration is SMS only. Picture messages from 3CX are refused rather than sent without the image. For rich messages with images and buttons, see RCS.
Can users send emoji and accented characters?
Yes. Messages are sent exactly as typed. Plain text uses the standard SMS alphabet, and a message containing emoji or other characters is sent as Unicode automatically.
What number format does 3CX use?
3CX sends and expects numbers in international E.164 format with a leading +, for example +447700900123. everymessage accepts and returns numbers in that format.
Add SMS to your 3CX system
Get your API key and numbers, and we’ll help you connect 3CX and test it end to end.
