Integrations

Plugs into your stack. Alerts where you look.

Pings come in from anything that can make an HTTP request, with official SDKs for the stacks you use most. Alerts go out on nine channels, armed per check or per project.

Send pings from your stack
The ping API
curl · cron · systemd
plain HTTP, any language

One line at the end of any job. Exit codes, start signals, and explicit failures are just URL suffixes.

# crontab: ping only when the job succeeds
0 2 * * * /usr/local/bin/backup.sh && curl -fsS https://pingark.com/ping/pk_live_a1b2c3d4/nightly-backup

# or report the real exit code (0 = success)
/usr/local/bin/backup.sh; curl https://pingark.com/ping/pk_live_a1b2c3d4/nightly-backup/$?
Copy
Read the ping API guide
Laravel plugin
pingark/pingark-laravel

Chain one method onto a scheduled command. Duration, exit codes, and exception context arrive automatically; pingark:sync mirrors the whole schedule.

// composer require pingark/pingark-laravel
$schedule->command('backup:run')
    ->daily()
    ->pingArk('nightly-backup');
Copy
Read the Laravel guide
JavaScript SDK
pingark on npm

Framework-agnostic core for Node.js 18+, Bun, Deno, and edge runtimes. One monitor() call wraps any job with start, finish, and failure capture.

// npm install pingark
import { monitor } from 'pingark'

await monitor(() => runNightlyJob(), 'nightly-job')
Copy
Read the JavaScript SDK guide
Next.js
pingark/next

Wrap a route handler and point a Vercel Cron at it. The wrapper pings around the handler and returns its response unchanged.

// app/api/cron/nightly/route.ts
import { withPingArk } from 'pingark/next'

export const GET = withPingArk(
  async () => {
    await runNightlyJob()
    return Response.json({ ok: true })
  },
  { check: 'nightly-job' },
)
Copy
Read the Next.js section
Express
pingark/express

Middleware for the route your scheduler hits: start on arrival, success on a normal finish, failure on a 5xx response.

import { pingarkExpress } from 'pingark/express'

app.get('/cron/nightly', pingarkExpress('nightly-job'), (req, res) => {
  runNightlyJob()
  res.send('ok')
})
Copy
Read the Express section
Nuxt
pingark/nuxt

Wrap a Nitro scheduled task's run function, or any server route a cron service calls. Failures re-throw so your handling is unchanged.

// server/tasks/nightly.ts
import { withPingArk } from 'pingark/nuxt'

export default defineTask({
  meta: { name: 'nightly' },
  run: withPingArk(async () => {
    await runNightlyJob()
    return { result: 'ok' }
  }, { check: 'nightly-job' }),
})
Copy
Read the Nuxt section
Python
plain HTTP

No SDK needed: one GET on success, the /fail suffix on an exception. Keep the timeout short so a ping can never slow the job.

import requests

PING = "https://pingark.com/ping/pk_live_a1b2c3d4/nightly-backup"

try:
    run_nightly_job()
    requests.get(PING, timeout=5)
except Exception:
    requests.get(PING + "/fail", timeout=5)
    raise
Copy
Read the ping API guide
Go
plain HTTP

The standard library is all it takes. Ping the check URL on success, or its /fail suffix when the job returns an error.

import "net/http"

const ping = "https://pingark.com/ping/pk_live_a1b2c3d4/nightly-backup"

if err := runNightlyJob(); err != nil {
    http.Get(ping + "/fail")
    log.Fatal(err)
}
http.Get(ping)
Copy
Read the ping API guide
Nine alert channels

Alerts where your team already looks.

Six on every plan, and three premium channels with credits bundled on higher plans. Arm any of them per check or per project.

Read the channels guide
Email
verified senders

Per-address delivery with a confirm step before a channel is armed.

Setup guide
Slack
incoming webhook

Post downtime and recovery to any channel via an incoming webhook URL.

Setup guide
Discord
channel webhook

Drop alerts straight into a server channel with a rich embed.

Setup guide
Telegram
bot message

A bot pings you or a group chat the moment a check goes down.

Setup guide
Webhook
any HTTP endpoint

A JSON POST to your own service. Wire PingArk into anything.

Setup guide
PagerDuty
events API

Open and resolve incidents so escalation and on-call rotations just work.

Setup guide
WhatsApp
premium · message credits

A WhatsApp message the moment a check goes down, and again on recovery. Your number is verified once with a one-time code.

Setup guide
SMS
premium · message credits

A plain text message to your verified number. Works on any phone, no app required. Each alert uses one message credit.

Setup guide
Voice call
premium · call credits

A real phone call that reads the alert out loud, for the pages that must wake someone. Each alert uses one call credit.

Setup guide
Opsgenie · Teams · Matrix · ntfy
on the roadmap

More destinations are landing soon. Each is just one more channel class.

The Laravel wedge

A first-class integration, not a curl line in a comment.

The open-source plugin registers every scheduled task as a check, wraps each run with start and finish, and ships duration, exit code, and the exception trace when it throws. Zero config beyond your project key.

Read the Laravel guide
// app/Console/Kernel.php
$schedule->command('reports:send')
    ->hourly()
    ->pingArk('hourly-reports');
// duration, exit code & exceptions: automatic

Management API

Create, pause, and list checks over a clean REST API with read-only and read-write keys per project. Generated docs stay in sync with the routes.

API reference

README status badges

pingarkup

A live SVG badge per check or project, served from the CDN so thousands of README hits never touch app logic.

Badges guide