OneSignal · Rate Limits

Onesignal Rate Limits

OneSignal publishes two independent limit systems that are easy to confuse and have very different consequences. API rate limits are per app and per endpoint and return 429 with Retry-After; they only throttle. Application message limits count delivered messages in a rolling 15-minute window and, when exceeded, temporarily DISABLE the app. Only the second one can take a customer offline.

Onesignal Rate Limits is the machine-readable rate-limit profile for OneSignal on the APIs.io network, conforming to the API Commons Rate Limits specification.

It captures 6 rate-limit definitions, measuring messages delivered, not API requests.

The profile also includes 4 backoff/retry policies defined and response codes documented for throttled, server_error, and non_retryable.

Tagged areas include Notifications, Push, Email, SMS, and Rate Limiting.

6 Limits Throttle: 429
NotificationsPushEmailSMSRate LimitingQuotasThrottling

Limits

Create message / Cancel message per app, per endpoint
6000
Create custom events per app, per endpoint
rate-limited independently from Create Message; exact rate not published
Create, update or delete users and subscriptions per app
1000
View endpoints (messages, templates, users) per app
1
Message History and CSV exports per app
keep parallel exports under 100 GB per file
Application message limit (app disablement) per app
messages delivered, not API requests
10x the app's total subscribed Subscriptions

Policies

Simple retry strategy
Wait 100 seconds before retrying (aligned with the maximum API response timeout). Retry up to 3 total attempts (original + 2 retries). Always reuse the same idempotency_key.
Time-sensitive retry strategy
Exponential backoff with jitter (2s, 4s, 8s, up to 60s). Cap at 10 total attempts and stop after 10-15 minutes. For 429s: wait max(Retry-After, backoff).
Retry classification
Retriable: network timeouts, no response, 429, 5xx. Non-retryable: 400, 401, 403 — these are input, authentication or permission problems, not temporary failures.
Idempotency on retry
Never retry a message send without an idempotency_key. Reuse the SAME key for every attempt. See conventions/onesignal-conventions.yml.

Sources