API Documentation
Everything you need to send push notifications to your phone with a single API call.
Getting Started
Get up and running with Nodkit in under a minute.
- 1Download the Nodkit app from the App Store.
- 2Sign in with your Apple ID.
- 3Go to Settings in the app and copy your API key.
That's it. You're ready to send notifications.
Authentication
All API requests require your API key in the Authorization header using Bearer token authentication.
Authorization: Bearer nk_your_api_key_here
Your API key starts with nk_ and can be found in the Settings screen of the Nodkit app. Keep it secret -- anyone with your key can send notifications to your devices.
Send a Notification
Send a push notification to all your registered devices.
Request body
| Parameter | Type | Description |
|---|---|---|
| titlerequired | string | Notification title |
| subtitleoptional | string | Notification subtitle |
| bodyoptional | string | Notification body text |
| priorityoptional | string | normal (default) or high |
| groupoptional | string | Group name for organizing notifications |
Example request
curl -X POST https://api.nodkit.dev/api/send \
-H "Authorization: Bearer nk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"title": "Deploy Complete",
"subtitle": "production",
"body": "v2.3.1 deployed successfully to all 3 instances",
"priority": "normal",
"group": "deploys"
}'Success response 201 Created
{
"id": "ntf_abc123def456",
"title": "Deploy Complete",
"subtitle": "production",
"body": "v2.3.1 deployed successfully to all 3 instances",
"priority": "normal",
"group": "deploys",
"read": false,
"createdAt": "2026-04-04T12:00:00.000Z"
}List Notifications
Retrieve a paginated list of your notifications.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| limitoptional | integer | Number of results (default: 30, max: 100) |
| cursoroptional | string | Cursor for pagination (from previous response) |
| groupoptional | string | Filter by group name |
| unreadoptional | boolean | Filter by read status (true or false) |
Example request
curl https://api.nodkit.dev/api/notifications?limit=10&group=deploys \ -H "Authorization: Bearer nk_your_api_key_here"
Response 200 OK
{
"notifications": [
{
"id": "ntf_abc123def456",
"title": "Deploy Complete",
"subtitle": "production",
"body": "v2.3.1 deployed successfully to all 3 instances",
"priority": "normal",
"group": "deploys",
"read": false,
"createdAt": "2026-04-04T12:00:00.000Z"
}
],
"cursor": "eyJpZCI6Im50Zl9hYmMxMjMifQ",
"hasMore": true
}Get Notification
Retrieve a single notification by its ID.
Example request
curl https://api.nodkit.dev/api/notifications/ntf_abc123def456 \ -H "Authorization: Bearer nk_your_api_key_here"
Response 200 OK
{
"id": "ntf_abc123def456",
"title": "Deploy Complete",
"subtitle": "production",
"body": "v2.3.1 deployed successfully to all 3 instances",
"priority": "normal",
"group": "deploys",
"read": false,
"createdAt": "2026-04-04T12:00:00.000Z"
}Mark as Read
Mark a notification as read or unread.
Request body
| Parameter | Type | Description |
|---|---|---|
| readrequired | boolean | true to mark as read, false to mark as unread |
Example request
curl -X PATCH https://api.nodkit.dev/api/notifications/ntf_abc123def456/read \
-H "Authorization: Bearer nk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"read": true}'Response 200 OK
{
"id": "ntf_abc123def456",
"read": true
}Delete Notification
Permanently delete a notification.
Example request
curl -X DELETE https://api.nodkit.dev/api/notifications/ntf_abc123def456 \ -H "Authorization: Bearer nk_your_api_key_here"
Response 204 No Content
Returns an empty response on success.
Rate Limits
API requests are rate-limited per endpoint to ensure fair usage and service stability.
| Endpoint | Limit |
|---|---|
| POST /api/send | 60 requests / minute |
| GET /api/notifications | 120 requests / minute |
| GET /api/notifications/{id} | 60 requests / minute |
| PATCH /api/notifications/{id}/read | 60 requests / minute |
| DELETE /api/notifications/{id} | 60 requests / minute |
When you exceed a rate limit, the API returns a 429 Too Many Requests response. Wait before retrying. The response includes a Retry-After header indicating how many seconds to wait.
Errors
The API uses standard HTTP status codes to indicate success or failure.
| Status | Meaning | Description |
|---|---|---|
| 201 | Created | Notification sent successfully |
| 200 | OK | Request succeeded |
| 204 | No Content | Deletion succeeded |
| 400 | Bad Request | Invalid request body or missing required fields |
| 401 | Unauthorized | Invalid or missing API key |
| 404 | Not Found | Notification not found |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Server Error | Something went wrong on our end |
Error response format
{
"error": "Invalid or missing API key",
"code": 401
}