GET /v1/messages
Returns a paginated list of all messages — both outbound (sent by your platform) and inbound (replies from users) — logged for your workspace. This is the primary way to inspect message history, build reporting, and audit delivery.

Request

Authorization
string
required
Bearer <api_key>
limit
integer
default:"50"
Number of messages to return. Maximum 200.
offset
integer
default:"0"
Number of messages to skip. Use with limit to paginate.
direction
string
Filter by message direction.
ValueDescription
OUTBOUNDMessages sent by your platform to a user
INBOUNDMessages sent by a user to your platform (RCS replies, inbound SMS)
status
string
Filter by current delivery status.
ValueMeaning
QUEUEDAccepted, not yet dispatched
SENTDispatched to the carrier / network
DELIVEREDConfirmed on the recipient’s device
READUser opened the message
CLICKEDLink in the message was clicked (email)
BOUNCEDHard or soft bounce (email)
FAILEDPermanent delivery failure
UNSUBSCRIBEDOne-click unsubscribe processed (email)
channel_id
string
Filter to a specific channel (ch_ prefixed ID). See Identifiers.
contact_id
string
Filter to messages for a specific contact.
campaign_id
string
Filter to messages sent as part of a specific campaign.
message_type
string
Filter by message type: MESSAGE, CONVERSATION, or NEWSLETTER.
from
string
ISO 8601 start of the date range (inclusive). Example: 2026-03-01T00:00:00Z.
to
string
ISO 8601 end of the date range (inclusive). Example: 2026-03-31T23:59:59Z.

Response

{
  "messages": [
    {
      "id": "msg_a1b2c3d4",
      "direction": "OUTBOUND",
      "channel_id": "ch_rcs_xxxx",
      "contact_id": "c_a1b2c3d4",
      "campaign_id": null,
      "message_type": "MESSAGE",
      "content_type": "INTERACTIVE",
      "status": "DELIVERED",
      "cost": "0.0800",
      "sent_at": "2026-03-28T09:00:01Z",
      "delivered_at": "2026-03-28T09:00:04Z",
      "read_at": "2026-03-28T09:03:22Z",
      "created_at": "2026-03-28T09:00:00Z"
    },
    {
      "id": "msg_b2c3d4e5",
      "direction": "INBOUND",
      "channel_id": "ch_rcs_xxxx",
      "contact_id": "c_a1b2c3d4",
      "campaign_id": null,
      "message_type": "CONVERSATION",
      "content_type": "TEXT",
      "status": "DELIVERED",
      "cost": null,
      "sent_at": "2026-03-28T09:05:10Z",
      "delivered_at": "2026-03-28T09:05:10Z",
      "read_at": null,
      "created_at": "2026-03-28T09:05:10Z"
    }
  ],
  "total": 4821,
  "limit": 50,
  "offset": 0
}
messages[].id
string
Message ID. Use with GET /v1/messages/{id} to fetch the full content and delivery timeline.
messages[].direction
string
OUTBOUND for sends you initiated; INBOUND for user replies and incoming SMS.
messages[].content_type
string
Shape of the message content: TEXT, TEMPLATE, MEDIA, or INTERACTIVE (rich card / carousel).
messages[].cost
string
Settled cost in EUR as a decimal string (e.g. "0.0800"). null for inbound messages (not billed). Returned as a string to preserve decimal precision — unlike the numeric hold_amount / message_price fields in the send response.
messages[].read_at
string
Timestamp the user read the message. null if no read receipt was received.
total
integer
Total matching messages across all pages.

Examples

List all inbound messages (user replies) from the last 7 days:
curl "https://api.arowana.app/v1/messages?direction=INBOUND&from=2026-03-21T00:00:00Z" \
  -H "Authorization: Bearer $API_KEY"
List failed messages on a specific RCS channel:
curl "https://api.arowana.app/v1/messages?status=FAILED&channel_id=ch_rcs_xxxx&limit=100" \
  -H "Authorization: Bearer $API_KEY"
List all messages for a contact (full conversation thread):
curl "https://api.arowana.app/v1/messages?contact_id=c_a1b2c3d4" \
  -H "Authorization: Bearer $API_KEY"
Paginate through all outbound messages sent in a campaign:
# Page 1
curl "https://api.arowana.app/v1/messages?campaign_id=550e8400-e29b-41d4-a716-446655440004&direction=OUTBOUND&limit=200&offset=0" \
  -H "Authorization: Bearer $API_KEY"

# Page 2
curl "https://api.arowana.app/v1/messages?campaign_id=550e8400-e29b-41d4-a716-446655440004&direction=OUTBOUND&limit=200&offset=200" \
  -H "Authorization: Bearer $API_KEY"
To retrieve the full message content and the step-by-step delivery timeline for a single message, use GET /v1/messages/{id}.