Dokumentacja

Przegląd API

API pozwala Twoim własnym narzędziom odczytać to, co wie PulseKeeper: incydenty, monitory i dostępność. Typowe zastosowanie to raport, który budujesz sam, na przykład miesięczne podsumowanie we własnym szablonie albo panel łączący kilka usług.

API na razie służy tylko do odczytu i jest dostępne w planie Pro i wyższych.

Endpointy

Endpoint
GET /api/v1/incidents Potwierdzone incydenty w danym okresie, od najnowszych
GET /api/v1/incidents/{id} Jeden incydent
GET /api/v1/monitors Wszystkie monitory zespołu
GET /api/v1/monitors/{id} Jeden monitor
GET /api/v1/monitors/{id}/uptime Dostępność jednego monitora w danym okresie

Wszystkie znajdują się pod http://pulsekeeper.io/api/v1.

Tokeny

Token utworzysz w Ustawienia → API. Tworzyć i unieważniać tokeny mogą tylko właściciele i administratorzy.

  • Token należy do zespołu, a nie do osoby, która go utworzyła. Działa dalej, gdy ta osoba odejdzie.
  • Token jest wyświetlany tylko raz. Przechowujemy wyłącznie jego hash, więc skopiuj go od razu. Jeśli go zgubisz, unieważnij go i utwórz nowy.
  • Zespół może mieć do 10 tokenów. Daj każdemu narzędziu własny, aby móc unieważnić jeden bez psucia pozostałych.

Uwierzytelnianie

Wysyłaj token w nagłówku Authorization każdego żądania, jako Bearer, a po nim token. Trzymaj go na swoim serwerze: każdy, kto ma token, może odczytać Twoje incydenty.

cURL

curl http://pulsekeeper.io/api/v1/monitors \
  -H "Authorization: Bearer $PULSEKEEPER_TOKEN" \
  -H "Accept: application/json"

PHP

<?php

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

$monitors = json_decode($client->get('monitors')->getBody(), true)['data'];

JavaScript

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

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

Go

req, _ := http.NewRequest("GET", "http://pulsekeeper.io/api/v1/monitors", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("PULSEKEEPER_TOKEN"))
req.Header.Set("Accept", "application/json")

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

Konwencje

  • ID to krótkie ciągi znaków, np. "3f9a1c0e7b2d4a58". Używaj ich w niezmienionej postaci; nigdy się nie zmieniają.
  • Czasy są w formacie ISO 8601 w UTC, np. "2026-09-30T21:14:05Z". Na potrzeby raportu przelicz je na własną strefę czasową.
  • Okresy przyjmują from i to jako datę albo datę i godzinę z przesunięciem: 2026-09-01 lub 2026-09-01T00:00:00+02:00. W adresie URL zapisz + jako %2B.
  • Nieznane to null. Wartość, której nie zmierzyliśmy, to null, nigdy 0 ani 100.
  • Historia sięga tak daleko wstecz, jak pozwala Twój plan – tak samo jak w aplikacji. Żądanie dłuższego okresu zwraca 422 z wyjaśnieniem zamiast krótszej odpowiedzi, dzięki czemu raport nigdy nie wygląda lepiej, niż wyglądał miesiąc.

Błędy

Błędy to JSON z polem message; błędy walidacji mają też errors dla każdego parametru.

{
  "message": "Your plan keeps 365 days of history.",
  "errors": { "from": ["Your plan keeps 365 days of history."] }
}
Status Znaczenie
401 Brak tokenu, token jest błędny lub unieważniony.
403 Twój plan nie obejmuje już API albo konto jest zawieszone. Sam token zostaje i znów działa po zmianie planu.
404 W Twoim zespole nie ma takiego incydentu ani monitora.
422 Parametr jest nieprawidłowy albo okres sięga dalej wstecz, niż pozwala Twój plan.
429 Zbyt wiele żądań: odczekaj liczbę sekund podaną w nagłówku Retry-After.

Limit żądań

120 żądań na minutę na token. Każda odpowiedź zawiera X-RateLimit-Limit i X-RateLimit-Remaining. Miesięczny raport dla 50 klientów mieści się bez problemu; jeśli odpytujesz API cyklicznie, raz na minutę w zupełności wystarczy, bo incydenty i tak są potwierdzane w ciągu mniej więcej minuty.