Developers · API v1.0.0

Version Support and Versioning Policy

Current version

Current API version 1.0.0
Base path /api/v1
Oldest supported version 1.0.0
Checking the version GET /api/v1/version and the X-NotiPilot-API-Version header on every response

API version status

Version Base path Status End of support
1.x /api/v1 ✅ Active Not yet determined (at least 12 months after v2 is released)
Unversioned (legacy) /api/ ⚠️ Kept for compatibility; behaves exactly like v1 Will be announced when v2 is released

Always use /api/v1 for new integrations.

Versioning rules

The NotiPilot API follows Semantic Versioning (MAJOR.MINOR.PATCH):

Change type Example Version Does the mobile app need changes?
PATCH Bug fixes, performance improvements 1.0.0 → 1.0.1 No
MINOR New optional field, new endpoint, new field added to a response 1.0.x → 1.1.0 No
MAJOR Removing/renaming a field, adding a required field, behavior change 1.x → 2.0.0 Yes — new base path (/api/v2)

Backward compatibility commitment (within the same MAJOR version):

  • Existing request fields will not be removed, renamed, or made required.
  • New fields may be added to responses; clients must ignore unknown fields.
  • New error codes may be added; clients should handle unknown codes based on the HTTP status code.
  • When a new MAJOR version is released, the previous MAJOR version remains supported for at least 12 months. Deprecations are announced via the dashboard and email at least 6 months in advance.

Platform support matrix

Because the NotiPilot API uses standard HTTPS + JSON, it works with any client that can make HTTP requests. The table below shows the versions on which the push notification flow described in the guides is tested and supported.

Platform Minimum Recommended Push token method Guide
Expo SDK 50 Latest SDK expo-notifications → Expo Push Token expo.md
React Native (bare) RN 0.74 Latest RN expo-notifications (recommended) or Firebase Messaging + token conversion react-native.md
Flutter Flutter 3.22, Dart 3.4 Latest stable firebase_messaging → Expo Push Token conversion flutter.md
Ionic (Capacitor) Capacitor 6, Ionic 7 Latest @capacitor/push-notifications → Expo Push Token conversion ionic.md
Firebase (FCM) Android BoM 33, iOS SDK 10 Latest FCM (Android) / APNs (iOS) token → Expo Push Token conversion firebase.md
Shopify store apps Storefront API 2025-01 Latest API version Depends on the app's tech stack shopify.md
Android (Java) Android 6.0 (API 23), Java 11 targetSdk 35+, Java 17 FCM → Expo Push Token conversion android.md
Kotlin Android 6.0 (API 23), Kotlin 1.9 targetSdk 35+, Kotlin 2.x FCM → Expo Push Token conversion kotlin.md
iOS (Objective-C) iOS 13.0, Xcode 15 iOS 15+ APNs → Expo Push Token conversion ios.md
Swift iOS 13.0, Swift 5.9, Xcode 15 iOS 15+, Swift 6 APNs → Expo Push Token conversion swift.md
Web / PWA – – The API accepts platform: "web", but web push delivery is not supported in 1.0.0 –

Platform-specific notes

  • Android 13+ (API 33): The POST_NOTIFICATIONS runtime permission is required to display notifications.
  • Android 8.0+ (API 26): Notifications require a channel. NotiPilot uses the default channel ID.
  • iOS: Push notifications require a paid Apple Developer account, the Push Notifications capability, and a physical device. Debug builds use the APNs sandbox; TestFlight/App Store builds use the production environment.
  • Expo Go: Remote push notifications are not supported in Expo Go; use a development build.

Delivery provider support (API 1.0.0)

provider Registration Visible in segments Notification delivery
expo ✅ ✅ ✅ Via the Expo Push Service
fcm ✅ ✅ ❌ On the roadmap
apns ✅ ✅ ❌ On the roadmap

Native apps can get full delivery support today by converting their FCM/APNs token into an Expo Push Token, as described in the guides.

Changelog

1.0.0 — September 2026

  • First stable release.
  • Added the /api/v1 base path and the GET /api/v1/version endpoint. Unversioned /api/* paths are kept for compatibility.
  • Standard error format: success, error (machine-readable code), message, errors (per field).
  • app_id must now be registered in NotiPilot; otherwise the API returns 404 unknown_app.
  • Field validation: type and length limits, attributes/tags limits.
  • attributes are now updated by merging; keys that aren't sent are not deleted. Send null to delete a key.
  • Rate limit of 300 requests per minute per IP (429 + Retry-After).
  • X-NotiPilot-API-Version header on every response.