Why Developers Choose One-Ping's API
Most notification APIs force you to learn different endpoints, payload formats, and authentication methods for every channel. Want to send a Telegram message? That is one API. Need an email? A different API with different credentials. Slack notification? Yet another SDK to install and configure. One-Ping eliminates all of that complexity by giving you a single, unified REST endpoint that routes your message to any channel you need.
Our API was designed with one principle in mind: if you can make an HTTP POST request, you can send notifications. There are no SDKs to install, no complex OAuth flows to implement, and no channel-specific payloads to memorize. You send JSON in, and notifications go out across Telegram, Email, Slack, Discord, WhatsApp, and SMS.
Getting started is free. Every account includes 100 messages per month at no cost. No credit card required. Upgrade only when your volume grows.
API Reference: POST /send
The entire One-Ping API revolves around a single endpoint. Here is the full specification for sending a notification.
Endpoint
POST https://api.one-ping.com/send Content-Type: application/json Authorization: Bearer YOUR_API_KEY
Request Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
message |
string | Yes | The notification text to send. Supports plain text and basic Markdown. |
channels |
array | Yes | Array of channel names: "telegram", "email", "slack", "discord", "whatsapp", "sms". |
recipient |
string | Yes | Recipient identifier: email address, phone number, or channel-specific ID. |
subject |
string | No | Email subject line. Only used when "email" is in channels. |
metadata |
object | No | Custom key-value pairs attached to the notification for your own tracking. |
callback_url |
string | No | URL to receive delivery webhook callbacks. |
retry |
boolean | No | Enable automatic retry on failure. Defaults to true. |
fallback_channels |
array | No | Backup channels to use if primary channels fail. See retry and fallback. |
Code Examples
Here are ready-to-use examples in the most popular languages. Copy, paste, replace your API key, and you are sending notifications in under a minute.
cURL
curl -X POST https://api.one-ping.com/send \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "message": "Your order #1234 has been shipped!", "channels": ["telegram", "email"], "recipient": "[email protected]", "subject": "Order Shipped" }'
JavaScript (fetch)
const response = await fetch('https://api.one-ping.com/send', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_API_KEY' }, body: JSON.stringify({ message: 'Your order #1234 has been shipped!', channels: ['telegram', 'email'], recipient: '[email protected]', subject: 'Order Shipped' }) }); const data = await response.json(); console.log(data);
Python (requests)
import requests response = requests.post( 'https://api.one-ping.com/send', headers={ 'Authorization': 'Bearer YOUR_API_KEY' }, json={ 'message': 'Your order #1234 has been shipped!', 'channels': ['telegram', 'email'], 'recipient': '[email protected]', 'subject': 'Order Shipped' } ) print(response.json())
PHP (cURL)
$ch = curl_init('https://api.one-ping.com/send'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer YOUR_API_KEY' ], CURLOPT_POSTFIELDS => json_encode([ 'message' => 'Your order #1234 has been shipped!', 'channels' => ['telegram', 'email'], 'recipient' => '[email protected]', 'subject' => 'Order Shipped' ]) ]); $response = curl_exec($ch); curl_close($ch); echo $response;
Response Format
Every API call returns a consistent JSON response so you always know what to expect. Here is what a successful response looks like.
Success Response (200 OK)
{
"success": true,
"id": "msg_a1b2c3d4e5",
"channels": {
"telegram": { "status": "sent", "delivered_at": "2025-01-15T10:30:00Z" },
"email": { "status": "queued" }
},
"metadata": {}
}
Error Response (4xx/5xx)
{
"success": false,
"error": {
"code": "INVALID_CHANNEL",
"message": "Channel 'fax' is not supported."
}
}
Error Codes
| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | MISSING_FIELD | A required field (message, channels, or recipient) is missing. |
| 400 | INVALID_CHANNEL | One or more channels in the array are not supported. |
| 401 | UNAUTHORIZED | API key is missing, invalid, or expired. |
| 403 | CHANNEL_NOT_CONFIGURED | The channel is valid but not configured in your account settings. |
| 429 | RATE_LIMITED | Too many requests. Wait and retry. See rate limiting below. |
| 500 | INTERNAL_ERROR | Something went wrong on our side. The request can be retried. |
Authentication with API Keys
One-Ping uses Bearer token authentication with API keys. You can generate and manage your API keys from the dashboard. Each key can be scoped to specific channels and has its own rate limits.
Create your account
Sign up at app.one-ping.com/register. No credit card required. Your free tier includes 100 messages per month.
Generate an API key
Go to the API Keys section in your dashboard. Click "Create new key", give it a name, and copy the generated key. Store it securely -- you will not be able to see it again.
Configure your channels
Connect the channels you want to use: add your Telegram bot token, Slack webhook URL, SMTP credentials, or Discord webhook. Each channel takes less than two minutes to set up.
Send your first notification
Use any of the code examples above, replacing YOUR_API_KEY with your actual key. That is it. You are now sending multi-channel notifications with a single API call.
Rate Limiting
To ensure fair usage and reliable delivery for all users, the One-Ping API enforces rate limits based on your plan.
| Plan | Requests/Minute | Messages/Month |
|---|---|---|
| Free | 10 | 100 |
| Pro ($9/mo) | 60 | 5,000 |
| Business ($29/mo) | 300 | 50,000 |
When you hit the rate limit, you will receive a 429 response with a Retry-After header indicating how many seconds to wait before retrying. Our automatic retry system handles this gracefully if you have it enabled.
How One-Ping Compares to Other Notification APIs
Traditional notification services require you to integrate multiple APIs, each with their own authentication, payload format, and error handling. Here is how One-Ping stacks up against the alternatives.
| Feature | One-Ping | Twilio | Novu (self-hosted) | Knock |
|---|---|---|---|---|
| Single endpoint for all channels | Yes | No | No | Yes |
| No SDK required | Yes | No | No | No |
| Free tier included | 100 msg/mo | Pay per use | Self-hosted | Limited |
| Setup time | 5 minutes | Hours | Days | 30+ minutes |
| Built-in retry and fallback | Yes | Manual | Yes | Yes |
| n8n / Zapier integration | Yes | Yes | No | Limited |
Migrating from another service? Our API is so simple that most developers complete the migration in under 30 minutes. Check our migration guide for step-by-step instructions.
Designed for Every Stack
Because One-Ping is a standard REST API with JSON payloads, it works with every programming language, framework, and platform that can make HTTP requests. No vendor-specific SDKs, no dependency bloat.
Any Language
JavaScript, Python, PHP, Ruby, Go, Java, C#, Rust -- if it can send an HTTP POST, it works with One-Ping.
No-Code Tools
Use One-Ping with n8n, Zapier, Make, or any automation platform via our REST API or pre-built templates.
Serverless Ready
Perfect for AWS Lambda, Cloudflare Workers, Vercel Functions, and other serverless environments. No persistent connections needed.
Webhook Callbacks
Get real-time delivery status via webhook callbacks. Know exactly when your notification was delivered or if it failed.