Skip to content

Receive messages

SMS that arrive on a paired phone are forwarded to SMS Bridge and reach you three ways:

  1. The Inbox in the portal (refreshes every 15 seconds).
  2. A webhook subscribed to message.received — recommended.
  3. 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"
QueryNotes
directioninbound or outbound
statuse.g. delivered, failed
phone_numberMessages to or from this E.164 number
limit1–100, default 25
cursorThe 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.