Dokumentacja

Pobieranie incydentu

GET /api/v1/incidents/{id}

Jeden potwierdzony incydent według id z listy incydentów. Incydent innego zespołu albo podejrzenie, które nigdy nie zostało potwierdzone, zwraca 404.

Przykład

cURL

curl http://pulsekeeper.io/api/v1/incidents/3f9a1c0e7b2d4a58 \
  -H "Authorization: Bearer $PULSEKEEPER_TOKEN"

PHP

<?php

// composer require guzzlehttp/guzzle
$client = new GuzzleHttp\Client([
    'base_uri' => 'http://pulsekeeper.io/api/v1/',
    'headers' => ['Authorization' => 'Bearer '.getenv('PULSEKEEPER_TOKEN')],
]);

$incident = json_decode($client->get('incidents/3f9a1c0e7b2d4a58')->getBody(), true)['data'];

JavaScript

const response = await fetch('http://pulsekeeper.io/api/v1/incidents/3f9a1c0e7b2d4a58', {
  headers: { Authorization: `Bearer ${process.env.PULSEKEEPER_TOKEN}` },
});

const { data: incident } = await response.json();

Go

req, _ := http.NewRequest("GET", "http://pulsekeeper.io/api/v1/incidents/3f9a1c0e7b2d4a58", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("PULSEKEEPER_TOKEN"))

res, err := http.DefaultClient.Do(req)
if err != nil {
	log.Fatal(err)
}
defer res.Body.Close()

var body struct {
	Data map[string]any `json:"data"`
}
json.NewDecoder(res.Body).Decode(&body)

Odpowiedź

{
  "data": {
    "id": "3f9a1c0e7b2d4a58",
    "type": "downtime",
    "title": "Site unreachable",
    "severity": "critical",
    "state": "resolved",
    "monitor": { "id": "a81c27e05f3d9b64", "type": "http", "name": "HTTP", "target": "shop.example.com" },
    "client": { "id": "c4e0b9a17d2f6385", "name": "Example Shop" },
    "started_at": "2026-09-30T21:14:05Z",
    "confirmed_at": "2026-09-30T21:14:41Z",
    "acknowledged_at": null,
    "resolved_at": "2026-09-30T21:42:10Z",
    "duration_seconds": 1685,
    "excluded_from_sla": false,
    "affected_locations": ["fra", "lon"],
    "error": { "code": "http_5xx", "detail": "HTTP 502" },
    "cause": { "text": "Outage at the hosting provider", "in_report": true }
  }
}

Pola

Pole Znaczenie
type Co się stało: downtime, timeout, blocked (zapora blokuje nasze sprawdzenia), auth (strona wymaga hasła), ssl_expiring, ssl_invalid, domain_expiring, tag_missing (kod śledzący zniknął ze strony), health_regressed (lista kontrolna strony się pogorszyła, np. noindex), heartbeat_missed i inne. title mówi to samo słowami.
severity critical (awaria), warning lub info.
state confirmed, acknowledged (ktoś z Twojego zespołu go przejął), resolved lub suppressed. Suppressed oznacza, że wydarzył się w trakcie okna serwisowego: jest prawdziwy, ale nie obniża dostępności.
monitor Monitor, na którym wystąpił. target to nazwa hosta; null dla heartbeatów.
client Klient, do którego należy cel; null dla heartbeatów.
started_at Pierwsze nieudane sprawdzenie.
confirmed_at Kiedy potwierdziła go druga lokalizacja. Od tego momentu liczy się przestój.
resolved_at Pierwsze udane sprawdzenie po nim; null, dopóki trwa.
duration_seconds Ustawiane po rozwiązaniu. Dla otwartego incydentu wynosi null: licz od started_at do potrzebnego Ci momentu.
excluded_from_sla true, gdy nie obniża dostępności, na przykład w trakcie prac serwisowych.
affected_locations Lokalizacje, które zobaczyły błąd.
error Pierwszy błąd: kod, np. http_5xx, timeout lub dns_fail, oraz jego szczegóły.
cause To, co Twój zespół wpisał w Dodaj przyczynę. Przy in_report: false przyczyna została oznaczona jako wewnętrzna: pomiń ją we wszystkim, co widzi Twój klient.