GET /v1/ping
Single-request convenience over POST /v1/heartbeats. Everything goes in the query string, response is OK\n, fits in a cron line. Used by shell scripts, n8n HTTP nodes, Lambda last lines, GitHub Actions steps.
GET requests are conventionally side-effect-free; this one creates database records. JSON bodies are too much friction for the calling environments that hit this endpoint.
https://eu.ingest.agentping.io/v1/ping
Query parameters
| Parameter | Required | Description |
|---|---|---|
key |
Yes (or via header) | Ping token (ping_..., recommended) or full API key (apk_..., discouraged). See Authentication. |
agent |
Yes | Agent slug. New agents auto-created. |
status |
No (default ok) |
ok, fail, start, timeout. start opens without finishing. |
cost_usd |
No | Numeric cost in US dollars. |
duration_ms |
No | If absent, computed from a prior start ping with the same id. |
id |
No | Client-generated run ID. |
metadata |
No | Single string up to 256 characters, stored as a note. Requires a metadata-eligible plan (Team or above); silently dropped on Starter. For richer, use POST /v1/heartbeats. |
Response
200 OK with the smallest possible body:
OK
Pass Accept: application/json for the full JSON response:
{
"id": "run_eu_018f3a2b9c1d7e8fa4b9c2d7e8f1a3b9",
"agent": "daily-summary",
"status": "ok",
"received_at": "2026-05-15T14:32:12.450Z"
}
Failures use text/plain so they're readable in shell output:
HTTP/1.1 400 Bad Request
Content-Type: text/plain
missing required parameter: agent
HTTP/1.1 401 Unauthorized
Content-Type: text/plain
This ping token is scoped to agent "daily-summary".
You attempted to fire a heartbeat for "competitor-scan".
Examples
Cron daily heartbeat:
0 9 * * * /usr/bin/wget -qO- 'https://eu.ingest.agentping.io/v1/ping?key=ping_eu_018f3a2b9c1d7e8fa4b9c2d7e8f1a3b6&agent=daily-summary&status=ok'
Failure ping with cost and a note:
curl 'https://eu.ingest.agentping.io/v1/ping?key=ping_eu_018f3a2b9c1d7e8fa4b9c2d7e8f1a3b6&agent=invoice-sync&status=fail&cost_usd=0.011&metadata=stripe%20rate%20limit'
Header-auth variant for environments where query strings get logged:
curl -H "X-AgentPing-Key: ping_eu_018f3a2b9c1d7e8fa4b9c2d7e8f1a3b6" \
'https://eu.ingest.agentping.io/v1/ping?agent=daily-summary&status=ok'
Authentication
| Credential | When to use |
|---|---|
ping_<region>_... |
Recommended. Scoped to one agent, can only fire heartbeats. A leak compromises one agent's status. |
apk_<region>_... |
Accepted but strongly discouraged. Full team key in a URL leaks through access logs, shell history, browser history, referer headers. |
The dashboard's "copy curl one-liner" always uses a ping_ token.
A credential whose region segment doesn't match the endpoint returns 401 Unauthorized before any database lookup. A ping token used against a non-scope agent returns 401 with both slugs named. See Authentication.