API Reference
Send real-time push notifications to your Apple devices with a single API call. No SDK required — just an HTTP POST.
Base URL: https://api.eventping.site
Quick Start
Create account
Sign up in the iOS app or web dashboard
Get your API key
Create one from the dashboard — it starts with ep_
Send a POST
Hit the endpoint below and your devices ping instantly
curl -X POST https://api.eventping.site/api/v1/notifications \
-H "Authorization: Bearer ep_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"title": "New Purchase!",
"body": "John bought Premium Plan — $49.99",
"channel": "purchases"
}'Authentication
Every API request must include your API key as a Bearer token in the Authorization header.
Authorization: Bearer ep_your_api_key
Keep your API key secret — treat it like a password. If compromised, revoke it immediately from the dashboard and create a new one.
/api/v1/notificationsSend a push notification to all your registered devices. Delivery happens asynchronously via Apple Push Notification Service — typically under one second.
Request Body
titleThe notification headline. Max 256 characters.
bodyThe notification message. Max 4,096 characters.
channelGroup notifications (e.g. "purchases", "alerts", "deploys"). Defaults to "default". Max 64 characters.
categoryCustom category tag for filtering in the app. Max 64 characters.
urlA URL that opens when the user taps the notification. Must be a valid URL.
dataArbitrary JSON payload attached to the notification. Accessible in the app via the notification detail view.
Example Request
curl -X POST https://api.eventping.site/api/v1/notifications \
-H "Authorization: Bearer ep_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Deploy Succeeded",
"body": "main branch deployed to production in 42s",
"channel": "deploys",
"url": "https://myapp.com/deploys/latest",
"data": {
"commitSha": "a1b2c3d",
"environment": "production"
}
}'Success Response
HTTP 202 Accepted
{
"id": "69cc759c6a9a132c6869a260",
"status": "pending",
"message": "Notification queued for delivery",
"usage": {
"used": 42,
"limit": 10000,
"overage": false
}
}The id is the notification's unique identifier. The usage object shows your current monthly count and plan limit.
Code Examples
JSJavaScript / Node.js
const response = await fetch("https://api.eventping.site/api/v1/notifications", {
method: "POST",
headers: {
"Authorization": "Bearer ep_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "New signup!",
body: "jane@example.com just created an account",
channel: "signups",
}),
});
const data = await response.json();
console.log(data.id); // "69cc759c..."
console.log(data.usage.used); // 43PYPython
import requests
response = requests.post(
"https://api.eventping.site/api/v1/notifications",
headers={"Authorization": "Bearer ep_your_api_key"},
json={
"title": "Payment received",
"body": "$49.99 from john@example.com",
"channel": "payments",
"data": {"amount": 49.99, "currency": "usd"},
},
)
print(response.json()["id"])PHPPHP
$ch = curl_init("https://api.eventping.site/api/v1/notifications");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer ep_your_api_key",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"title" => "New order #1234",
"body" => "3 items totaling \$129.97",
"channel" => "orders",
]),
]);
$response = json_decode(curl_exec($ch), true);
echo $response["id"];GOGo
payload := strings.NewReader(`{
"title": "Server alert",
"body": "CPU usage exceeded 90% on prod-web-01",
"channel": "alerts"
}`)
req, _ := http.NewRequest("POST", "https://api.eventping.site/api/v1/notifications", payload)
req.Header.Set("Authorization", "Bearer ep_your_api_key")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}Rate Limits
The API is rate limited to 60 requests per minute per user account. If you exceed this, you'll receive HTTP 429.
{
"error": "Rate limit exceeded. Max 60 notifications per minute."
}The limit resets every 60 seconds. Need higher throughput? Contact us.
Plans & Limits
Monthly usage resets each billing period. Notifications beyond your plan limit are billed as overage at $0.001 each.
| Plan | Price | Notifications | API Keys | Devices | Branding |
|---|---|---|---|---|---|
| Starter | $9/mo | 500 | 5 | 3 | EventPing |
| Pro | $14.99/mo | 1,500 | 10 | 10 | EventPing |
| Business | $29.99/mo | 10,000 | Unlimited | 30 | Custom |
Business plan users can set custom notification branding from the dashboard. Other plans show "EventPing" as the notification subtitle.
Error Handling
Errors return JSON with an error field and the appropriate HTTP status code.
| Status | Meaning | Action |
|---|---|---|
| 400 | Invalid request body | Check required fields (title, body) and value constraints |
| 401 | Invalid or missing API key | Verify your Authorization: Bearer ep_... header |
| 403 | No active subscription | Subscribe at eventping.site/dashboard |
| 429 | Rate limit exceeded | Wait 60 seconds and retry the request |
| 500 | Internal server error | Retry after a moment or contact support |
// Validation error (400)
{
"error": "Validation failed",
"details": {
"fieldErrors": {
"title": ["Required"]
}
}
}
// Auth error (401)
{
"error": "Invalid API key"
}Need help? support@bymatan.dev
Go to Dashboard