Ping

Sending Webhooks

Send a POST request to your webhook URL to trigger a push notification.


Basic Request

Terminal
curl -X POST 'https://ping-api-production.up.railway.app/v1/send/YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"title": "Hello World"}'

Preview

Hello World

just now

Payload Reference

FieldTypeRequiredDescriptionConstraints
titlestringYesNotification titleMax 100 characters
bodystringNoNotification body (supports Markdown)Max 10,000 characters
prioritystringNoDelivery prioritylow, normal, high
callback_urlstringConditionalURL to receive action responsesRequired for interactive actions
actionsarrayNoInteractive actionsMax 5 actions

Full Example

JSON
{
  "title": "Build Failed",
  "body": "CI pipeline failed on main branch at commit abc123",
  "priority": "high",
  "actions": [
    {"type": "url", "label": "View Build", "value": "https://github.com/org/repo/actions/runs/123"},
    {"type": "url", "label": "View Logs", "value": "https://ci.example.com/logs/123"}
  ]
}

Preview

Build Failed

just now
CI pipeline failed on main branch at commit abc123

Priority Levels

PriorityBehavior
highPlays a sound, shows alert indicator
normalStandard notification (default)
lowLower priority delivery

Use high priority sparingly for truly urgent alerts. Overusing it reduces its effectiveness.

Markdown Support

The body field supports Markdown formatting, which is rendered beautifully in the iOS app. This is ideal for AI-generated content, reports, and structured messages.

Supported formatting:

  • Bold: **text** or __text__
  • Italic: *text* or _text_
  • Inline code: `code`
  • Links: [label](url)

Example: Traffic Report with Markdown

JSON
{
  "title": "šŸš— Traffic Update",
  "body": "**⚽ EVENTS & SCHEDULED DISRUPTIONS**\n\nšŸ”“ **Southampton vs Leicester City** - Tuesday, 18 Nov **in 3 days**\n\nSt. Mary's Stadium\n- Peak congestion: 18:30-20:30 before, 22:00-23:00 after\n- Most affected: *Britannia Road*, *St Mary's Road*"
}

Preview

šŸš— Traffic Update

just now
⚽ EVENTS & SCHEDULED DISRUPTIONS šŸ”“ Southampton vs Leicester City - Tuesday, 18 Nov in 3 days St. Mary's Stadium - Peak congestion: 18:30-20:30 before, 22:00-23:00 after - Most affected: Britannia Road, St Mary's Road

Response Format

Success

JSON
{
  "ok": true,
  "id": "msg_xxxxxxxxxxxx",
  "muted": false
}
FieldDescription
okAlways true on success
idUnique message identifier for tracking or polling
mutedtrue if the channel is muted (message stored, but no push sent)

Error

JSON
{
  "error": "error_code",
  "message": "Human-readable description"
}

Error Handling

Error CodeHTTP StatusDescriptionSolution
invalid_json400Request body isn't valid JSONCheck JSON syntax
invalid_payload400Missing title, exceeds limits, or missing callback_urlVerify required fields
invalid_token401Channel not foundCheck webhook URL
rate_limited429Too many requestsWait and retry

Common invalid_payload errors:

  • Missing title field
  • callback_url missing when using interactive actions
  • Field exceeds character limits

Rate Limits

PlanWebhook RateOther Endpoints
Free5/min per channel60/min per endpoint
Pro200/min per channel200/min per endpoint

When rate limited, you'll receive HTTP 429. Wait before retrying (exponential backoff recommended).