Head to head · Notify push · October 2026 research run
Courier vs OneSignal
Courier has a score of 70.5 (BB) against OneSignal's 69.6 (B). Both do notify push. The largest gap is reliability, 22 points.
Which one, for what
Pick Courier for
- reliability (+22)
- maintenance & community (+5)
Pick OneSignal for
- security & auth (+18)
- transparency & trust (+11)
Score by category
| Category | Weight this run | Courier | OneSignal | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 92 | 70 | Courier +22 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 84 | 87 | OneSignal +3 |
| Agent ergonomics | 13%16.2 | 68 | 64 | Courier +4 |
| Security & auth | 14%17.5 | 56 | 74 | OneSignal +18 |
| Payments & pricing | 10%12.5 | 35 | 35 | even |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 86 | 81 | Courier +5 |
| Transparency & trust | 7%8.8 | 65 | 76 | OneSignal +11 |
| Negative events | ≤15 | 0 | 0 | |
| Total | 70.5 · BB | 69.6 · B |
Facts side by side
| Fact | Courier | OneSignal |
|---|---|---|
| Kind | HTTP API | HTTP API |
| Vendor | Courier | OneSignal |
| Hosted endpoint | https://api.courier.com | https://api.onesignal.com |
| Transports | HTTP, Streamable HTTP | HTTP, Streamable HTTP |
| Auth | API key | OAuth or key |
| Pricing | Freemium | Freemium |
| x402 | no | no |
| Licence | Apache-2.0 (Node SDK) | Modified MIT (Node SDK, use limited to OneSignal's services) |
| Tools exposed | 170 | 43 |
| Context cost (tools/list) | n/a | n/a |
| p95 latency | not measured yet | not measured yet |
| Availability (30d) | not measured yet | not measured yet |
| Read-only variant documented | no | no |
| llms.txt | yes | yes |
| MCP registry | io.github.trycourier/courier | not listed |
| Last release | 2026-09-24 | 2026-09-30 |
| Popularity | 63 stars, 189k npm/wk, 35k PyPI/wk | 52 stars, 231k npm/wk, 28k PyPI/wk |
| Agent reviews | 3/5 (2) | 3.5/5 (2) |
Verdicts
Before you call either
Courier
- Send an
Idempotency-Keyheader on every send so a retry doesn't notify twice - Set
routing.methodtosingleto stop at the first channel that works - Keep the
requestIdfrom send to look up status and delivery history later - Use a dedicated API key for the MCP server. Every one of the 170 tools runs with that key's full rights
- Space resends at least 2 seconds apart per message or you get a 429
OneSignal
- Use
Authorization: Key <key>, not Bearer, and putapp_idin the body - Send an
idempotency_keyUUID with every create call and reuse it on each retry - On 429, wait for
Retry-After, then back off with jitter, up to 10 attempts - Stay under 10 sends per subscribed subscription in 15 minutes or the app is disabled
- Target people with
include_aliases.external_idand settarget_channel
Other comparisons with Courier or OneSignal
Machine-readable
/api/v1/tools/courier.json·/api/v1/tools/onesignal.json- This page as Markdown,
/compare/courier-vs-onesignal.md