API Overview
Notifer provides a simple REST API for programmatic access to topics, messages, and subscriptions.
Base URL
https://app.notifer.io
All API endpoints are served from the same domain as the web application.
API Structure
The Notifer API follows REST principles and uses:
- HTTP methods: GET, POST, PUT, PATCH, DELETE
- JSON for request/response bodies (except simple publishing)
- Standard HTTP status codes
- JWT tokens for authentication
Endpoints Overview
Publishing Messages
| Method | Endpoint | Description |
|---|---|---|
POST | /{topic} | Publish message to topic |
PUT | /{topic} | Publish message to topic (alias) |
Topics Management
| Method | Endpoint | Description |
|---|---|---|
GET | /api/topics | List all topics |
GET | /api/topics/my | List user's owned topics (requires auth) |
GET | /api/topics/public | List public/discoverable topics |
POST | /api/topics | Create new topic (requires auth) |
GET | /api/topics/{name} | Get topic details by name |
GET | /api/topics/{name}/stats | Get topic statistics |
GET | /api/topics/{name}/messages | Search topic messages |
PATCH | /api/topics/{topic_id} | Update topic settings (by UUID) |
DELETE | /api/topics/{topic_id} | Delete topic (by UUID) |
Messages
| Method | Endpoint | Description |
|---|---|---|
GET | /{topic}/json | Get message history (JSON) |
GET | /api/messages/search | Search messages with filters |
GET | /api/messages/recent | Get recent messages from subscribed topics |
GET | /api/messages/activity | Get message activity stats for charts |
DELETE | /api/{topic}/messages/{id} | Soft-delete message (ESSENTIALS+) |
PATCH | /api/{topic}/messages/{id} | Edit message (ESSENTIALS+) |
Real-time Subscriptions
| Method | Endpoint | Description |
|---|---|---|
GET | /sse | Subscribe to multiple topics (multi-SSE) |
POST | /api/sse/sessions | Create SSE session for short URLs |
GET | /{topic}/sse | Subscribe to single topic via SSE |
WS | /{topic}/ws | Subscribe via WebSocket |
Authentication
| Method | Endpoint | Description |
|---|---|---|
POST | /auth/register | Register new user |
POST | /auth/login | Login (email/password) |
GET | /auth/google/login | Initiate Google OAuth |
POST | /auth/apple/mobile | Apple Sign-In (iOS) |
GET | /auth/me | Get current user |
POST | /auth/refresh | Refresh access token |
GET | /auth/verify-email | Verify email address |
POST | /auth/resend-verification | Resend verification email |
POST | /auth/password-reset/request | Request password reset |
POST | /auth/password-reset/confirm | Confirm password reset |
POST | /auth/password-change | Change password |
POST | /auth/accept-terms | Accept Terms of Service |
GET | /auth/consent-history | Get consent history (GDPR) |
User Management
| Method | Endpoint | Description |
|---|---|---|
GET | /api/users/me | Get current user profile |
PATCH | /api/users/me | Update user profile |
GET | /api/users/me/data | Export user data (GDPR) |
DELETE | /api/users/me | Delete account (GDPR) |
Devices (Mobile)
| Method | Endpoint | Description |
|---|---|---|
POST | /api/devices/register | Register device for push |
GET | /api/devices/my | List user's devices |
GET | /api/devices/{id} | Get device details |
PUT | /api/devices/{id} | Update device |
DELETE | /api/devices/{id} | Delete device |
POST | /api/devices/{id}/test | Send test notification |
Subscriptions
| Method | Endpoint | Description |
|---|---|---|
GET | /api/subscriptions | List user's subscriptions |
POST | /api/subscriptions | Create subscription |
PATCH | /api/subscriptions/{id} | Update subscription settings |
DELETE | /api/subscriptions/{id} | Delete subscription |
DELETE | /api/subscriptions/by-topic/{name} | Unsubscribe by topic name |
GET | /api/subscriptions/check/{name} | Check if subscribed |
API Keys
| Method | Endpoint | Description |
|---|---|---|
GET | /api/keys | List API keys |
POST | /api/keys | Create API key |
DELETE | /api/keys/{key_id} | Revoke API key |
Topic Access Tokens
| Method | Endpoint | Description |
|---|---|---|
GET | /api/topics/{topic}/access-tokens | List tokens |
POST | /api/topics/{topic}/access-tokens | Create token |
DELETE | /api/topics/{topic}/access-tokens/{token_id} | Revoke token |
Teams (TEAM+ Plan)
| Method | Endpoint | Description |
|---|---|---|
GET | /api/teams | List user's teams |
GET | /api/teams/stats | Get team statistics |
GET | /api/teams/deactivated | List deactivated teams |
POST | /api/teams | Create team |
GET | /api/teams/{team_id} | Get team details |
PATCH | /api/teams/{team_id} | Update team |
DELETE | /api/teams/{team_id} | Delete team |
POST | /api/teams/{team_id}/reactivate | Reactivate team |
GET | /api/teams/{team_id}/members | List team members |
PATCH | /api/teams/{team_id}/members/{user_id} | Update member role |
DELETE | /api/teams/{team_id}/members/{user_id} | Remove member |
POST | /api/teams/{team_id}/invites | Invite member |
GET | /api/teams/{team_id}/invites | List pending invites |
POST | /api/teams/invites/accept | Accept invite |
POST | /api/teams/invites/{id}/resend | Resend invite |
DELETE | /api/teams/invites/{id} | Cancel invite |
Response Format
Success Response
{
"id": "uuid",
"name": "my-topic",
"created_at": "2025-01-15T10:30:00Z",
"message_count": 42
}
Error Response
{
"detail": "Topic not found"
}
HTTP Status Codes
| Code | Meaning |
|---|---|
200 | Success |
201 | Created |
204 | No Content (successful deletion) |
400 | Bad Request (invalid input) |
401 | Unauthorized (authentication required) |
403 | Forbidden (insufficient permissions) |
404 | Not Found |
409 | Conflict (e.g., topic name already exists) |
422 | Unprocessable Entity (validation error) |
429 | Rate Limit Exceeded |
500 | Internal Server Error |
Rate Limiting
Rate limits vary by subscription tier:
Plan limits:
When rate limited, the API returns HTTP 429 with header:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1641024000
Pagination
List endpoints support pagination:
GET /api/topics?page=1&per_page=20
Parameters:
page- Page number (default: 1)per_page- Items per page (default: 20, max: 100)
Response headers:
X-Total-Count: 150
X-Page: 1
X-Per-Page: 20
Interactive Documentation
Explore the full API interactively using Swagger UI:
Or ReDoc format:
SDKs and Libraries
Official SDKs
- Python: notifer-python (Coming soon)
- JavaScript/Node.js: notifer-js (Coming soon)
- Go: notifer-go (Coming soon)
Community Libraries
Check GitHub for community-contributed libraries.
Examples
Publishing with Authentication
# Get JWT token first
TOKEN=$(curl -X POST https://app.notifer.io/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "secret"}' \
| jq -r '.access_token')
# Publish to private topic
curl -d "Authenticated message" \
-H "Authorization: Bearer $TOKEN" \
https://app.notifer.io/my-private-topic
Creating a Topic
curl -X POST https://app.notifer.io/api/topics \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "server-alerts",
"access_level": "private",
"description": "Production server monitoring",
"is_discoverable": false
}'
Subscribing via SSE
# Public topic
curl -N https://app.notifer.io/server-alerts/sse
# Private topic
curl -N "https://app.notifer.io/server-alerts/sse?token=$TOKEN"
Next Steps
- Authentication Guide - Learn about auth methods
- API Reference - Complete endpoint documentation
- Publishing Guide - Send messages via HTTP
- SSE Guide - Real-time subscriptions
Support
- Interactive Docs: https://app.notifer.io/docs
- Email: support@notifer.io
- GitHub Issues: https://github.com/notifer/notifer/issues