# Expo Push Notifications (slim) > Hosted push service from Expo that takes one HTTPS request and relays it to Apple's APNs and Google's FCM for apps built with Expo. It issues push tickets and receipts, and sending is free. - Full: https://www.anchorterminal.com/tools/expo-push-notifications.md (~7,150 tokens) · this version ~1,480 tokens · JSON https://www.anchorterminal.com/tools/expo-push-notifications.json · canonical https://www.anchorterminal.com/tools/expo-push-notifications - Index: https://www.anchorterminal.com/llms.txt · API: https://www.anchorterminal.com/api/v1/index.json · Updated: 2026-10-10 **C · 58.8/100 · rank #571 of 950 · #9 in Notifications · not agent-ready · confidence medium** Assessment: A free push relay with a small, well documented HTTP API, published limits of 600 notifications a second and written error codes. Sending needs no credential unless the owner turns on access tokens, there is no idempotency key or SLA, and the status page records three iOS push incidents since 4 August 2026. ## Facts - Kind: HTTP API · vendor: Expo · category: Notifications · legal entity: 650 Industries, Inc. · provenance 76/100 - Endpoint: `https://exp.host/--/api/v2/push/send` (HTTP) - Auth: OAuth or key · pricing: Free · x402: no · licence: Proprietary service under Expo's terms of service. The Node.js server SDK is MIT - Probe metrics: not measured yet (probes haven't run) - Endpoints: POST `https://exp.host/--/api/v2/push/send` and POST `https://exp.host/--/api/v2/push/getReceipts`, JSON bodies, gzip accepted - Targets: Expo push tokens from apps built with Expo's `expo-notifications` library. Android through FCM v1 and iOS through APNs. No web push, email or SMS - Limits: 600 notifications a second per project, 100 messages a send request, 1,000 ticket IDs a receipts request, 4,096 bytes a payload - Receipts: A send returns a ticket per message. A receipt records whether APNs or FCM accepted it, is best read after 15 minutes and is cleared after 24 hours - Errors: Request codes `TOO_MANY_REQUESTS`, `PUSH_TOO_MANY_EXPERIENCE_IDS`, `PUSH_TOO_MANY_NOTIFICATIONS`, `PUSH_TOO_MANY_RECEIPTS` and `UNAUTHORIZED`. Receipt codes `DeviceNotRegistered`, `MessageTooBig`, `MessageRateExceeded`, `MismatchSenderId` and `InvalidCredentials` - Credentials: None by default. Optional enhanced push security requires a Bearer access token (personal, or a robot user's with a role) - SDKs: `expo-server-sdk` 7.2.0 for Node.js 22.12 or later, MIT, maintained by Expo, with six concurrent connections, gzip and two retries on 429. Twelve other libraries listed in the docs are community or Symfony maintained - Delivery: Best effort, at least one attempt to hand off to APNs or FCM, no SLA. Duplicates are possible and there is no idempotency key - Hosting: Google Cloud Platform in the United States, per the docs - Certifications: SOC 2 Type 2 for the Security criterion, report on request for Production and Enterprise customers, per expo.dev/security - Status: status.expo.dev on Statuspage with a Push Notifications Broker component - Scores: Reliability 65, Performance pending, Schema & documentation 60, Agent ergonomics 63, Security & auth 48, Payments & pricing 40, Task success pending, Maintenance & community 74, Transparency & trust 68 · total over the 7 assessed categories - Why: Reliability, Hosted reading. · Schema & documentation, API reading. · Agent ergonomics, API reading. · Security & auth, By default the API takes no credential, and the docs say a leaked push token lets another party send to that device. · Payments & pricing, No x402, MPP or L402 (0). · Maintenance & community, Read as a closed service with an official SDK. · Transparency & trust, Closed service under Expo's terms of service, which cover every Expo service without naming push, with an MIT Node SDK (15 of 30). - Sources: 16, open questions: 8, both in the full twin - Capabilities: notify.push - JSON: https://www.anchorterminal.com/api/v1/tools/expo-push-notifications.json - Verify (for the vendor): the badge `https://www.anchorterminal.com/badges/expo-push-notifications.svg` or a link to https://www.anchorterminal.com/tools/expo-push-notifications from a page on expo.dev or one of its subdomains, or the README of github.com/expo/expo-server-sdk-node, then `POST https://www.anchorterminal.com/api/v1/verify` `{"slug", "url"}` or `verify_listing` at /mcp; re-checked weekly, no effect on the grade. Snippets in the full twin. ## Before you call it 1. Send an array of up to 100 messages per request, all for one project, and stay under 600 notifications a second 2. Keep each ticket `id` and POST them to `/--/api/v2/push/getReceipts` about 15 minutes later. Receipts are cleared after 24 hours 3. Stop sending to a token when a ticket or receipt returns `DeviceNotRegistered` 4. If the project has enhanced push security on, send `Authorization: Bearer ` or the call fails with `UNAUTHORIZED` 5. Retry 429 and 5xx with exponential backoff, and expect an occasional duplicate because there is no idempotency key ## Connect ```bash yarn add expo-server-sdk ``` ```bash curl -H "Content-Type: application/json" -X POST "https://exp.host/--/api/v2/push/send" -d '{ "to": "ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]", "title":"hello", "body": "world" }' ``` Full config and headless snippets are in the full page. Through letme (picks today, calling later): https://letme.dev/expo-push-notifications ## Similar tools | Tool | Grade | Score | Shared capabilities | Slim | | --- | --- | --- | --- | --- | | Ably | BB | 75 | notify.push | https://www.anchorterminal.com/tools/ably.min.md | | Customer.io | BB | 74.5 | notify.push | https://www.anchorterminal.com/tools/customer-io.min.md | | Amazon SNS | BB | 72.8 | notify.push | https://www.anchorterminal.com/tools/amazon-sns.min.md | | SuprSend | BB | 72.6 | notify.push | https://www.anchorterminal.com/tools/suprsend.min.md | | Courier | BB | 70.5 | notify.push | https://www.anchorterminal.com/tools/courier.min.md | ## Panel reviews (0, desk reviews from public material, no calls made)