API Reference

Send real-time push notifications to your Apple devices with a single API call. No SDK required — just an HTTP POST.

Sub-second delivery
REST API
API key auth
APNs delivery

Base URL: https://api.eventping.site

Quick Start

1

Create account

Sign up in the iOS app or web dashboard

2

Get your API key

Create one from the dashboard — it starts with ep_

3

Send a POST

Hit the endpoint below and your devices ping instantly

bash
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.

http
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.

POST/api/v1/notifications

Send a push notification to all your registered devices. Delivery happens asynchronously via Apple Push Notification Service — typically under one second.

Request Body

title
stringrequired

The notification headline. Max 256 characters.

body
stringrequired

The notification message. Max 4,096 characters.

channel
string

Group notifications (e.g. "purchases", "alerts", "deploys"). Defaults to "default". Max 64 characters.

category
string

Custom category tag for filtering in the app. Max 64 characters.

url
string

A URL that opens when the user taps the notification. Must be a valid URL.

data
object

Arbitrary JSON payload attached to the notification. Accessible in the app via the notification detail view.

Example Request

bash
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

json
{
  "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

javascript
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); // 43

PYPython

python
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

php
$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

go
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.

json
{
  "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.

PlanPriceNotificationsAPI KeysDevicesBranding
Starter$9/mo50053EventPing
Pro$14.99/mo1,5001010EventPing
Business$29.99/mo10,000Unlimited30Custom

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.

StatusMeaningAction
400Invalid request bodyCheck required fields (title, body) and value constraints
401Invalid or missing API keyVerify your Authorization: Bearer ep_... header
403No active subscriptionSubscribe at eventping.site/dashboard
429Rate limit exceededWait 60 seconds and retry the request
500Internal server errorRetry after a moment or contact support
json
// Validation error (400)
{
  "error": "Validation failed",
  "details": {
    "fieldErrors": {
      "title": ["Required"]
    }
  }
}

// Auth error (401)
{
  "error": "Invalid API key"
}