---
title: "List pings for a check"
method: GET
path: "/api/v1/checks/{id}/pings"
tags: ["Events"]
---

# List pings for a check

`GET /api/v1/checks/{id}/pings`

## Request

- Base URL: `https://app.lastping.dev`
- URL: `https://app.lastping.dev/api/v1/checks/{id}/pings`
- Auth: API key in header `X-Api-Key`

Returns the most recent pings received for the check (newest first).
Always returns a JSON array (never null).  Privacy-sensitive fields
(`source_ip_hash`, `ua`) are never included.

## Query parameters

- `limit` integer

## Response `200`

Array of pings (may be empty).

- Ping[]
  - `id` string, uuid: Unique ping identifier.
  - `kind` string: Ping kind. One of `success`, `start`, `fail`, `log`, `cancel`, `blocked`, `note`. `blocked` marks the run as waiting on a human (pauses run-clock detection until cleared); `note` is a labelled informational signal that carries free text in the request body, visible here via `body_excerpt`. A `success` whose body failed an output assertion (one set on the monitor, or an expectation the run declared) is stored and returned as `fail`: it ended its run as a failure.
  - `rid` string: Optional run identifier supplied by the sender (omitted when empty).
  - `body_excerpt` string: First 500 bytes of the ping request body (omitted when empty).
  - `received_at` string, date-time: RFC 3339 UTC timestamp when the ping was received.
  - `duration_ms` integer: Wall-clock duration in milliseconds of the run this ping completed. Present only when this ping is a `success` that paired with a preceding `start` on the same `rid`; omitted otherwise (never `0` or `null` as a stand-in for "absent").
  - `fail_cause` 'assertion': Why this ping reads `fail` although its sender did not send a fail. `assertion`: it arrived as a `success` and an output assertion (one set on the monitor, or an expectation the run declared) failed it. Omitted on every other ping, including a `fail` the job sent itself.

## Other responses

- `400`: id is not a valid UUID.
- `401`: Missing or invalid API key.
- `404`: Check not found in this project.
- `429`: Too many requests. The per-principal fixed-window rate limit has been exceeded. Retry after the number of seconds indicated by the `Retry-After` response header. The problem body's `code` is `RATE_LIMITED`. It names this limiter specifically, so a client can tell it apart from the application-level throttles that also answer 429 with their own codes and their own, much longer, `Retry-After` values (`TEST_PING_RATE_LIMITED`, `TOO_MANY_ATTEMPTS`). Back off globally on `RATE_LIMITED`; back off on the one operation for the others. The principal is the API key for a key-authenticated request and the USER for a browser session, so every tab one person has open shares one budget.

---

[API](https://skmtc.dev/lastping/apis/lastping-management-api.md) · [All operations](https://skmtc.dev/lastping/apis/lastping-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lastping/apis/lastping-management-api/revisions/bbc6eda91c46?raw)
