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ą
fromitojako datę albo datę i godzinę z przesunięciem:2026-09-01lub2026-09-01T00:00:00+02:00. W adresie URL zapisz+jako%2B. - Nieznane to
null. Wartość, której nie zmierzyliśmy, tonull, nigdy0ani100. - Historia sięga tak daleko wstecz, jak pozwala Twój plan – tak samo jak w aplikacji. Żądanie dłuższego okresu zwraca
422z 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.