SIM Route
Send from a real mobile number instead of a sender ID. The message leaves a physical SIM card, so it arrives as a normal person-to-person text and the recipient can reply to that number.
Enabled per account
route: "sim" is delivered over the normal sender-ID route. Contact support to have it enabled.HTTP API
Add route to a normal send request. It works on both POST /v1/sms/send and POST /v1/a2p/send. Omit it, or send "sid", for the standard sender-ID route.
curl -X POST https://api.sendexa.co/v1/sms/send \-H "Authorization: Basic <your-token>" \-H "Content-Type: application/json" \-d '{"to": "233240000000","from": "Sendexa","message": "Your order has shipped.","route": "sim"}'
The response tells you which route was actually used, and the number the message was sent from:
{"success": true,"data": {"messageId": "MSG-…","message": {"from": { "name": "+233500000000" },"to": { "address": "233240000000" }},"delivery": {"status": "PENDING","route": { "channel": "sim" }}}}
delivery.route.channel"sim" means a SIM was picked. "sid" means the message went over the sender-ID route — because the SIM route isn't enabled on your account, or no SIM was available right now (all busy, at their daily limit, or offline). You are billed for the route that was used.
SMPP
SMPP has no per-message route field, so the choice is made per account: ask Sendexa to set your SMPP system_id's default route to SIM. Every submit_sm on that bind then uses the SIM route (when available), and delivery receipts (deliver_sm) work exactly as they do today.
Sender ID and replies
- The
fromvalue you send is ignored on the SIM route — the SIM's own number is the sender. Your sender ID stays recorded on the message for your records. - Recipients can reply to that number. A reply is routed to the account that most recently sent that person a SIM-route message from that number (within 30 days), and is delivered to you as a webhook and via the API below. Replies that match no message are kept by Sendexa and never shared with another account.
Receiving replies
Subscribe a webhook to the SMS_RECEIVED event to get each reply as it arrives:
{"id": "cm…","from": "233240000000","to": "+233500000000","message": "Yes, I'll be there","receivedAt": "2026-01-01T10:15:00.000Z","inReplyTo": "MSG-…","optOut": false}
Or pull them, newest first, with GET /v1/sms/inbound?limit=50 (pass before=<id> from nextCursor for the next page).
inReplyTois themessageIdof the message being answered, when it can be identified.optOutistruewhen the reply is a stop request (STOP, UNSUBSCRIBE, CANCEL…). Honouring it is your responsibility — don't message that number again.- Replies are only available for phones running the Sendexa SIM Gateway app.
Fallback and billing
If a SIM can't send — the phone is offline, the gateway rejects the message, or the phone later reports the send failed — Sendexa re-sends it over the sender-ID route automatically, so it still goes out.
- SIM sends can have their own per-segment rate. If a message falls back and the sender-ID rate is lower, the difference is credited back to your wallet — you never pay more than the route that delivered.
- The same
messageIdis kept, andMESSAGE_SENT/MESSAGE_DELIVERED/MESSAGE_FAILEDwebhooks work as usual.
Limits to know about
- Delivery reports depend on the carrier. Some networks don't return them for SIM traffic, so a message can remain
SENTeven though it arrived. - Volume is capped per SIM (daily limits protect the numbers from being blocked). Large bursts spill over to the sender-ID route.
- Bulk isn't supported yet.
route: "sim"on/bulkor/send-bulkis rejected withSIM_BULK_UNSUPPORTED; send messages individually.