Receive messages
SMS that arrive on a paired phone are forwarded to SMS Bridge and reach you three ways:
- The Inbox in the portal (refreshes every 15 seconds).
- A webhook subscribed to
message.received— recommended. - Polling
GET /v1/messages?direction=inbound.
Webhook payload
{
"event": "message.received",
"message": {
"id": "5d1c2b7a-0e44-4f0b-8c1e-7a9f3d2e6b10",
"direction": "inbound",
"from_number": "+15550100002",
"to_number": "+15550100001",
"content": "Is the store open tomorrow?",
"status": "delivered"
},
"timestamp": "2026-09-26T10:04:12.512+00:00"
}Listing messages
curl "https://api.99billingsolutions.com/v1/messages?direction=inbound&limit=20" \
-H "x-api-key: $SMS_BRIDGE_KEY"| Query | Notes |
|---|---|
direction | inbound or outbound |
status | e.g. delivered, failed |
phone_number | Messages to or from this E.164 number |
limit | 1–100, default 25 |
cursor | The cursor value from the previous page |
Results are newest first. Keep requesting with the returned cursor while has_more is true.
Retention
Message text is removed 30 minutes after a message is received, and the record itself after 24 hours. Save inbound messages on your side when your webhook receives them.
Opt-out keywords
Replies of STOP, UNSUBSCRIBE, CANCEL, END or QUIT mark the contact as opted out, and campaigns skip them. START opts them back in. STOP AI turns off AI auto-replies for that contact only.