Skip to main content

Search message history

The Messages Hub search box — and the GET /api/v1/messages list endpoint — accepts a fielded search DSL in its q parameter instead of a plain free-text scan, so you can look a message up by a provider-side identifier or combine constraints on channel, status, recipient, or time. Pass the same expression to the SDK or in the dashboard search box. A DSL expression is a set of field:value clauses. Clauses are AND-joined by default; parentheses and AND/OR/NOT combine them further (precedence: NOT > AND > OR). A malformed q returns a 422 INVALID_QUERY — check the error message for the rejected field, operator, or syntax.

Field reference

These are the complete set of searchable fields for messages. Anything not on this list is rejected with INVALID_QUERY_FIELD.

Operator reference

Whichever operator you use, the full expression is capped at 2,048 characters, 8 nested levels deep, and 64 clauses — generous headroom for any realistic filter.

Look up a provider SID with message_id: / external_id:

Every outbound message carries two identifiers: the canonical Orbit id (msg_..., returned by the send API) and the provider-side identifier stamped when the send reaches its provider. message_id: and external_id: both match that provider-side identifier — use whichever your saved integration or report already names:

Provider reference per channel

Because a provider dashboard shows only these refs, pasting one straight into the search is the fastest path from a carrier or Meta console back to the Orbit message.

Full multi-field examples per channel

Clauses AND together, so combine a provider-SID or body fragment with channel, status, and time constraints. Two worked examples per channel: SMS
WhatsApp
Email
RCS
Viber
Voice
Fax
Instagram / Messenger
LINE / Telegram

Quoting rules for body fragments and whitespace

Values containing whitespace must be double-quoted; anything else can stay bare. Inside quotes, internal whitespace and wildcards are preserved:
\" and \\ are the only escape sequences; a backslash before any other character is kept literally. An unterminated quote is a 422 INVALID_QUERY_SYNTAX, not a silent truncation. Phone values need no quoting — a leading + never turns the value into a number.

Bookmarkable filtered views — the q= URL parameter

The same q expression that the Messages Hub search box runs also rides the dashboard URL, so a filtered view is a link, not a keystroke ritual. Compose the filter once, then copy the address bar:
Anyone on the tenant with messages access who opens the link lands on the same filtered result set, which makes investigations and support hand-offs one paste instead of a screenshot plus instructions. The Delivery log page works the same way for its own filter parameters — see the Delivery log guide.

Both identifiers come back in the response

Each matching row carries both the raw provider SID (external_id) and the canonical Orbit id (msg_...) — so the lookup can deep-link to the message detail page and your downstream reconciliation logic can still record whichever identifier it prefers. The Delivery log page in the dashboard surfaces the same correlation: a msg_... pasted into its search box flags a correlated lookup and shows the matching channels across the results strip.