Overview
The Create message API allows you to send push notifications, emails, and SMS to your users. This guide is specific for email. See Push notification or SMS to send to those channels. Ensure your Email setup is complete.Headers
Your App API key with prefix Key
. See Keys & IDs.
Body
Your OneSignal App ID in UUID v4 format. See Keys & IDs.
The subject of the email. Supports Message Personalization.
The body of the email in HTML format. Required if template_id
is not set. Supports Message Personalization.
Target up to 20,000 users by their external_id
, onesignal_id
, or your own custom alias. Use with target_channel
to control the delivery channel. Not compatible with any other targeting parameters like filters
, include_subscription_ids
, included_segments
, or excluded_segments
. See Sending messages with the OneSignal API.
The targeted delivery channel. Required when using include_aliases
. Accepts push
, email
, or sms
.
push
, email
, sms
Target users' specific subscriptions by ID. Include up to 20,000 subscription_id
per API call. Not compatible with any other targeting parameters like filters
, include_aliases
, included_segments
, or excluded_segments
. See Sending messages with the OneSignal API.
Send email to specific users by their email address. Include up to 20,000 email addresses per API call. If the email address does not exist within the OneSignal App, then a new email Subscription will be created. Can only be used when sending Email. Not compatible with any other targeting parameters like filters
, include_aliases
, included_segments
, or excluded_segments
. See Sending messages with the OneSignal API.
Target predefined Segments. Users that are in multiple segments will only be sent the message once. Can be combined with excluded_segments
. Not compatible with any other targeting parameters like filters
, include_aliases
, or include_subscription_ids
. See Sending messages with the OneSignal API.
Exclude users in predefined Segments. Overrides membership in any segment specified in the included_segments
. Not compatible with any other targeting parameters like filters
, include_aliases
, or include_subscription_ids
. See Sending messages with the OneSignal API.
Filters define the segment based on user properties like tags, activity, or location using flexible AND/OR logic. Limited to 200 total entries, including fields and OR
operators. See Sending messages with the OneSignal API.
1 - 200
elementsPreview text displayed after the email subject.
An internal name you set to help organize and track messages. Not shown to recipients. Maximum 128 characters.
Include user or context-specific data (e.g., cart items, OTPs, links) in a message. Use with template_id
. See Message Personalization. Max size: 2KB (Push/SMS), 10KB (Email).
The name the email is sent from. Defaults to the 'Sender Name' in the Email Settings of your OneSignal Dashboard. See Email setup and Senders.
The authenticated sending domain used for email delivery. This domain must be verified in your DNS records and will determine which domain handles the mail transfer. It may not always exactly match the domain in the email_from_address
(e.g., email_from_address = news@example.com
while email_sender_domain = mail.example.com
), but the root domain must align for DMARC compliance. If not specified, OneSignal uses the default sender email's domain configured in your Dashboard. See Email setup and Senders.
The email address users reply to. Defaults to the 'Reply-To' address in the Email Settings of your OneSignal Dashboard. See Email setup.
Used for important account-related, non-marking emails. If set to true
it will send the email to unsubscribed email addresses. Defaults to false
. See Email unsubscribe links & headers.
If set to true
, the URLs sent within the email will not include link tracking and will be the same as originally set; otherwise, all the URLs in the email will be tracked. See Email unsubscribe links & headers. Defaults to false
.
Schedule delivery for a future date/time (in UTC). The format must be valid per the ISO 8601 standard and compatible with JavaScript’s Date() parser
. Example: 2025-09-24T14:00:00-07:00
Controls how messages are delivered on a per-user basis: 'timezone'
— Sends at the same local time across time zones. 'last-active'
— Delivers based on each user’s most recent session. Not compatible with Push Throttling. If enabled, set throttle_rate_per_minute
to 0
.
Use with delayed_option: 'timezone'
to set a consistent local delivery time. Accepted formats: '9:00AM'
(12-hour), '21:45'
(24-hour), '09:45:30'
(HH:mm:ss).
A unique identifier used to prevent duplicate messages from repeat API calls. See Idempotent notification requests. Must be a v3 or v4 UUID. Valid for 30 days. Previously called external_id
.
Response
200
The message ID in UUID v4 format. If id
is an empty string, then the message was not sent.
The idempotency_key
parameter if set. Used to prevent duplicate messages from repeat API calls. See Idempotent message requests.
If the message id
is set, then a message was sent. Any errors reported are with individual Users or Subscriptions that cannot be sent the message.