View the details for a collection of messages.
Overview
The View messages API allows you to fetch data from up to 50 push, email, or SMS message at a time. If you want to get a single message's data, use the View message API. In most cases, you will likely want to use Event Streams instead.
Currently this API does not provide Journey-sent messages. See Journey analytics for details.
Messages sent through the API and Automated Messages are only accessible 30 days after creation; however, messages sent using the OneSignal dashboard are accessible for the app's lifetime.
See our Rate limits for details on how often you can pull your message data with this API.
How to use this API
Standard Pagination
Using the limit
and offset
parameters you can make multiple requests to page through the notifications for an app. You can pull a maximum of 50 messages at a time and with each request, use limit
to specify the result size and offset
to increment by the limit value each time. The defaultlimit
if not specified is 50
.
For example, your first request can have offset=0
, second request will have offset=50
, third request offset=100
, etc.
Pagination queries using limit
and offset
are convenient but can suffer from poor latency especially as the offset
value grows. Therefore standard pagination is not well suited to any ETL use cases. Consider using Event Streams instead.
Optimized Pagination - Time Offset
To efficiently retrieve all available messages for an app, use time_offset
-based pagination. When time_offset
is specified, the sort order changes from descending to ascending, meaning the oldest messages appear first based on the send_after
date.
time_offset
Accepted Values
time_offset
Accepted Values- ISO8601 formatted timestamp – e.g., 2025-01-01T00:00:00.000Z (January 1st, 2025, at 12:00 AM UTC).
- Base64 integer token – provided in the API response.
Step 1: Initial Fetch
To fetch messages from a specific date onward, set time_offset
to an ISO8601 formatted timestamp. For example, to retrieve messages sent since January 1st, 2025 - time_offset=2025-01-01T00:00:00.000Z

Important Notes:
time_offset
cannot be used with the standardoffset
parameter.- It excludes messages that match the exact timestamp to avoid duplicates.
- Messages created through our API are typically retained for 30 days.
- The response includes
next_time_offset
, a cursor token for the next page. No decoding of the token required. For example:
"next_time_offset": "MjAyNS0wMi0xOVQxOToxNjo0OS41Njg5NTFaIzQ2ZWVjMTAzLWQ5OGYtNGQzZC04MzA5LWQxNWI1M2QzMjQ5Nw=="
Step 2: Fetch Additional Pages
Use next_time_offset
from the previous response as the time_offset
value in the next request. For example time_offset=MjAyNS0wMi0xOVQxOToxNjo0OS41Njg5NTFaIzQ2ZWVjMTAzLWQ5OGYtNGQzZC04MzA5LWQxNWI1M2QzMjQ5Nw==
Step 3: Continue Until Completion
Repeat the requests until an empty "notifications"
array is returned, indicating all messages have been fetched.
Handling New Messages
Since sorting is in ascending order, new messages are added to the end of the results. To resume fetching from where you left off, reuse the last next_time_offset
that returned an empty response.
Response data
The properties returned will include the same properties used in the original Create message request, along with the message analytics at the time of the request.
For example, if you send a message targeting the include_aliases
parameter, the response will include the aliases you set. If you send with the included_segments
parameter, then the response will only provide the segments you set. When targeting segments or filters, you can use the Export audience activity CSV API to get the user event data.
The table below lists all non-customizable properties returned. Properties not listed here can be found in Push channel parameters, Email channel parameters, and SMS channel parameters, depending on the target channel.
Common Parameters | Definitions |
---|---|
"total_count" | The total number of messages available in the dashboard irrespective of page. |
"limit" | The limit specified. Defaults to 50 if not provided in the request. |
"time_offset" | The time_offset if specified in the request. |
"next_time_offset" | A Base64 integer token representing the next group of messages to fetch if time_offset provided. |
"notifications" | An array of message objects. "notifications": [] indicates no more messages to fetch. The data below is generally the most desired from this request. |
"successful" | Number of messages delivered to the push, email, or sms services. |
"failed" | Number of subscriptions reported as unsubscribed. |
"errored" | Number of subscriptions with an error. See Export audience activity CSV to get the error message. |
"converted" | Number of subscriptions that have clicked/tapped the notification which lead to opening your app. |
"received" | Number of subscriptions that confirmed receiving the message.received data is not available for:- Safari Web Push - Windows Apps - macOS Apps - Chrome App Extensions |
"platform_delivery_stats" | Hash of delivery statistics broken out by target device platform. |
"queued_at" | Unix timestamp indicating when the message was created. |
"send_after" | Unix timestamp indicating when message delivery should begin. |
"completed_at" | Unix timestamp indicating when message delivery was completed. The delivery duration from start to finish can be calculated with completed_at - send_after . |
"throttle_rate_per_minute" | Number of push notifications sent per minute. Paid Feature Only. If throttling is not enabled for the app or the message, and for Free accounts, null is returned. Refer to Throttling for more details. |
"outcomes" | For a list of Outcomes definitions, see View Outcomes. |