CoreDash Uptime API i narzędzia MCP: monitory i sprawdzenia
Listuj, dodawaj, zmieniaj i wstrzymuj monitory uptime za pomocą klucza API CoreDash oraz odczytuj ich sprawdzenia przez REST lub MCP.
Monitory uptime przez API CoreDash
Odczytuj i zmieniaj monitory uptime w projektach CoreDash przez REST za pomocą tego samego klucza API, którego używasz do danych RUM. Agent AI odczytuje je przez MCP.
Szybki start
- Bazowy URL
https://app.coredash.app/api/uptime/monitors, JSON na wejściu i wyjściu. - Nagłówek
Authorization: Bearer cdk_your_keyz kluczem projektu lub kluczem master. - Pierwsze wywołanie:
GET /api/uptime/monitorszwraca listę monitorów wraz z ich stanem oraz uptime z ostatnich 7 dni.
curl https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_your_key"
Klucze API do monitorów uptime
Endpointy uptime obsługują klucze z CoreDash API oraz Agency API.
| Klucz | Zaczyna się od | Widzi | Nowy monitor trafia do |
|---|---|---|---|
| Klucz projektu | cdk_ | Monitory z własnego projektu | Zawsze do własnego projektu |
| Klucz master | cdk_master_ | Monitory każdego projektu, którego jesteś właścicielem lub do którego masz zaproszenie | Projektu wskazanego w project_id (musisz być jego właścicielem) |
Klucz projektu wygenerujesz na stronie Connect Your AI w pasku bocznym projektu: nadaj mu nazwę i kliknij Generate API key. Te same klucze znajdziesz w ustawieniach projektu w sekcji API Keys (MCP). Mogą je tworzyć tylko właściciele projektu. Klucz master wygenerujesz na stronie Agency API w pasku bocznym – na kontach agencyjnych. Gdy projekt wygaśnie, jego klucz projektu zwraca 401 przy każdym wywołaniu.
Gość w projekcie może jedynie odczytywać monitory. Dodawanie, modyfikowanie, przenoszenie i usuwanie wymaga projektu, którego jesteś właścicielem.
Token OAuth połączenia AI, takiego jak Claude (mcp_at_), pozwala wyłącznie na odczyt. Żądania POST, PATCH i DELETE z jego użyciem zwracają 403.
Endpointy uptime
| Metoda i ścieżka | Działanie | Zwraca |
|---|---|---|
GET /api/uptime/monitors | Zwraca listę wszystkich monitorów widocznych dla klucza, posortowaną według nazwy. | 200, { "monitors": [...] }, każdy z obiektem summary |
POST /api/uptime/monitors | Dodaje monitor. Pierwsze sprawdzenie rusza w kolejnej rundzie, o :00 lub :30. | 201, { "monitor": {...} } |
GET /api/uptime/monitors/:id | Pojedynczy monitor z historią sprawdzeń (od najnowszych). Parametr ?limit= określa liczbę sprawdzeń: domyślnie 300, maksymalnie 2100. | 200, { "monitor", "summary", "checks", "rum" } |
PATCH /api/uptime/monitors/:id | Modyfikuje przesłane pola, a resztę pozostawia bez zmian. | 200, { "monitor": {...} } |
DELETE /api/uptime/monitors/:id | Usuwa monitor i wszystkie jego sprawdzenia. | 200, { "deleted": true } |
Adres IP serwera origin oraz wartości nagłówków to dane poufne. Zwracają je metody POST, PATCH i GET /api/uptime/monitors/:id. Zwykła lista oraz narzędzia MCP pomijają origin_ip, a każdą wartość nagłówka maskują jako ••••.
Obiekt monitora
| Pole | Znaczenie |
|---|---|
id | ID monitora, dla parametru :id w ścieżkach. |
name, url | Nazwa w aplikacji oraz sprawdzany URL. |
project_id | Projekt CoreDash, do którego należy monitor. |
paused | true, gdy monitor nie jest sprawdzany. |
expect_status | Status HTTP uznawany za działający (up). Domyślnie 200. |
origin_check | true, gdy ustawiono IP serwera origin – każda runda sprawdza wtedy bezpośrednio sam serwer. |
origin_ip | Adres IP serwera. Występuje tylko w odpowiedziach zawierających dane poufne. |
headers | Dodatkowe nagłówki żądania, [{ "name", "value" }]. |
state | pending, up, failing, down, warn, blocked lub paused. Zobacz tabelę stanów poniżej. |
last_check_at, last_up_at | Czas ostatniej rundy oraz ostatniej rundy ze statusem up. |
down_since | W trakcie awarii: czas pierwszej nieudanej rundy. W przeciwnym razie null. |
last_down | Ostatnia zakończona awaria: { "from", "to" } lub null. |
check_requested_at | Ustawiane przy dodaniu monitora. Kolejna runda czyści to pole. |
last | Ostatnie sprawdzenie danego typu: edge i origin (każde jako obiekt sprawdzenia). Pole origin_is_cdn ma wartość true, gdy sprawdzenie origin zwróciło nagłówki Cloudflare, co oznacza, że wpisany adres IP to nie serwer. |
cert_expires | Data wygaśnięcia certyfikatu HTTPS serwowanego użytkownikom. |
created_at | Czas dodania monitora. |
Pola summary i rum
Zarówno lista, jak i pojedynczy monitor zawierają pole summary: rounds_7d i down_rounds_7d zliczają rundy z ostatnich 7 dni, uptime_7d to odsetek tych rund bez sprawdzenia zakończonego statusem down, a recent przechowuje ostatnie 48 rund (od najstarszej), każda z najgorszym wynikiem w danej rundzie. Monitor bez sprawdzeń w ciągu ostatnich 7 dni ma summary: null.
Pojedynczy monitor zawiera także pole rum: TTFB na poziomie p75, jaki mieli rzeczywiści użytkownicy w ostatnich 7 dniach (z danych RUM projektu), do porównania z ttfb_ms bota sprawdzającego. Dopóki projekt nie ma danych RUM, pole ma wartość null.
GET /api/uptime/monitors/:id
curl "https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16?limit=2" \
-H "Authorization: Bearer cdk_your_key"
{
"monitor": {
"id": "6ad68c7a844fad80b752fd16",
"name": "Checkout",
"url": "https://www.example.com/checkout/",
"project_id": "655f1f77bcf86cd799439011",
"paused": false,
"expect_status": 200,
"origin_check": true,
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"state": "up",
"last_check_at": "2026-10-20T08:00:09.000Z",
"last_up_at": "2026-10-20T08:00:09.000Z",
"down_since": null,
"last_down": { "from": "2026-10-18T19:00:11.000Z", "to": "2026-10-18T20:00:10.000Z" },
"check_requested_at": null,
"last": {
"edge": { "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "edge", "outcome": "up", "status": 200, "ttfb_ms": 212, "total_ms": 388, "connect_ms": 14, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": true, "cache_status": "DYNAMIC" },
"origin": { "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "origin", "outcome": "up", "status": 200, "ttfb_ms": 640, "total_ms": 702, "connect_ms": 9, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": false, "cache_status": null },
"origin_is_cdn": false
},
"cert_expires": "2027-01-02T23:59:59.000Z",
"created_at": "2026-10-06T09:12:41.000Z"
},
"summary": {
"rounds_7d": 336,
"down_rounds_7d": 2,
"uptime_7d": 99.4,
"recent": [
{ "at": "2026-10-20T07:30:10.000Z", "outcome": "up" },
{ "at": "2026-10-20T08:00:09.000Z", "outcome": "up" }
]
},
"checks": [
{ "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "edge", "outcome": "up", "status": 200, "ttfb_ms": 212, "total_ms": 388, "connect_ms": 14, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": true, "cache_status": "DYNAMIC" },
{ "at": "2026-10-20T08:00:09.000Z", "server": "scan1", "mode": "origin", "outcome": "up", "status": 200, "ttfb_ms": 640, "total_ms": 702, "connect_ms": 9, "redirects": 0, "final_url": "https://www.example.com/checkout/", "error": null, "error_text": null, "cloudflare": false, "cache_status": null }
],
"rum": { "ttfb_p75": 1920, "rating": "poor", "period": "last 7 days" }
}
W rzeczywistej odpowiedzi tablica recent zawiera 48 rund – ten przykład pokazuje dwie ostatnie.
Obiekt sprawdzenia i jego wyniki
Co 30 minut uruchamia się runda sprawdzająca każdy monitor, naprzemiennie z dwóch serwerów: scan1 o :00 i scan2 o :30. Runda zawsze sprawdza URL tak, jak docierają do niego użytkownicy – przez DNS i CDN (edge). Po podaniu IP serwera origin sprawdza też bezpośrednio sam serwer (origin). API nie pozwala wywołać sprawdzenia między rundami. Historia sprawdzeń jest przechowywana przez 30 dni.
Każde sprawdzenie wysyła user agent CoreDash/1.0 (uptime; +https://www.coredash.app/bot). Gdy URL monitora znajduje się w domenie projektu (w jego hoście, z www lub bez, albo w subdomenie), sprawdzenie wysyła także nagłówek X-CoreDash-Bot z tajną wartością projektu, pobraną z zakładki CoreDash bot token w ustawieniach projektu. Monitor w jakiejkolwiek innej witrynie nie otrzymuje tokena. Przy przekierowaniu token zachowuje się zgodnie z regułą dla zdefiniowanych nagłówków (headers): jest przekazywany tylko dopóki przekierowanie pozostaje na hoście monitora. Własny nagłówek o nazwie X-CoreDash-Bot jest odrzucany. Szczegóły obu mechanizmów opisuje strona bota CoreDash.
| Pole | Znaczenie |
|---|---|
at, server | Czas zaraportowania rundy przez serwer oraz serwer, który ją wykonał: scan1 lub scan2. Sprawdzenia z tej samej rundy mają identyczną wartość at. |
mode | edge lub origin. |
outcome | up, down, blocked lub warn. |
status | Status HTTP ostatniej odpowiedzi, po uwzględnieniu przekierowań. null, gdy serwer nie odpowiedział. |
ttfb_ms, total_ms, connect_ms | Time to First Byte oraz całkowity czas (oba z uwzględnieniem przekierowań), a także czas nawiązania połączenia przy pierwszym żądaniu. |
redirects, final_url | Liczba obsłużonych przekierowań oraz URL, który odpowiedział jako ostatni. |
error, error_text | Przyczyna niepowodzenia sprawdzenia – jako wartość z poniższej tabeli oraz jako tekst. |
cloudflare, cache_status | Informacja, czy odpowiedź przeszła przez Cloudflare, oraz nagłówek cache z CDN (cf-cache-status lub x-cache). |
Jak ustalany jest wynik sprawdzenia
| Wynik | Warunek |
|---|---|
up | Status jest równy expect_status, chyba że wynosi 403, 429 albo 500 lub więcej: te kody są traktowane w pierwszej kolejności jako blocked lub down. |
down | Status 500 lub wyższy albo błąd (error): dns, connect, connect_timeout (brak połączenia w ciągu 10 sekund), timeout (brak pełnej odpowiedzi w ciągu 30 sekund), tls, redirects (więcej niż 5) lub network. |
blocked | 403, 429 lub challenge Cloudflare: firewall zablokował bota sprawdzającego. Nigdy nie jest liczony jako downtime. Przepuść CoreDash przez firewall. |
warn | Każdy inny status, np. 404 na checkoucie po deployu. Także invalid_ip oraz invalid_url: gdy URL lub przekierowanie prowadzi do adresu prywatnego albo zarezerwowanego, bądź gdy przekierowanie wskazuje na coś, co nie jest adresem URL. Bot sprawdzający nie wykonuje do nich żądań. |
O stanie monitora decyduje najgorszy wynik sprawdzeń w danej rundzie, w kolejności od najgorszego: down, blocked, warn, up.
Stany monitora
state | In the app | Znaczenie |
|---|---|---|
pending | Waiting for first check | Dodany; pierwsza runda jeszcze się nie odbyła. |
up | Up | Ostatnia runda zwróciła oczekiwany status. |
failing | Failing | Jedna runda zakończyła się błędem. Jeszcze jedna i stan zmieni się na down. |
down | Down | Dwie nieudane rundy z rzędu – awarię potwierdziły oba serwery. |
warn | Unexpected status | Ostatnia runda zwróciła wynik warn. |
blocked | Blocked | Firewall zablokował bota sprawdzającego. |
paused | Paused | Nie jest sprawdzany, dopóki nie ustawisz paused na false. |
Monitor w projekcie, którego subskrypcja wygasła, zachowuje swoje ustawienia i ostatni stan. Nie jest sprawdzany do momentu opłacenia projektu.
Dodawanie, edycja i usuwanie monitora
POST /api/uptime/monitors
curl -X POST https://app.coredash.app/api/uptime/monitors \
-H "Authorization: Bearer cdk_master_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.example.com/checkout/",
"name": "Checkout",
"project_id": "655f1f77bcf86cd799439011",
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"expect_status": 200
}'
| Pole | Reguły |
|---|---|
url | Wymagany przy POST. Pełny adres URL http lub https, bez nazwy użytkownika i hasła. |
name | Do 80 znaków; dłuższe nazwy są obcinane. Puste przy POST: host z adresu URL. Puste przy PATCH: pozostaje dotychczasowa nazwa, chyba że ten sam PATCH przesyła nowy url – wtedy przyjmuje nowy host. |
project_id | Wymagany przy kluczu master: projekt, którego jesteś właścicielem, z aktywną subskrypcją lub trwającym okresem próbnym. Klucz projektu ignoruje to pole i używa własnego projektu. |
origin_ip | Publiczny adres IPv4 lub IPv6 serwera. Włącza sprawdzanie origin: bezpośrednio pod ten IP, z pominięciem DNS i CDN. Wartość "" lub null usuwa to sprawdzenie. |
headers | Do 5 dodatkowych nagłówków żądania, [{ "name", "value" }]. Nazwy: litery, cyfry i myślniki, do 64 znaków. Wartości: do 256 znaków (dłuższe są obcinane). Przy przekierowaniu są przekazywane tylko dopóki pozostaje ono na hoście monitora (z www lub bez). Przekierowanie na jakikolwiek inny host, w tym subdomenę, nie otrzymuje żadnego z nich. |
expect_status | Status uznawany za działający (up), od 100 do 599. Domyślnie 200. Kody 403, 429 oraz jakikolwiek status 500 lub wyższy nigdy nie są uznawane za up. |
paused | Wartość true wstrzymuje sprawdzanie, false wznawia je. |
Odpowiedź to 201 z nowym monitorem, w tym z adresem IP origin i wartościami nagłówków:
{
"monitor": {
"id": "6ad68c7a844fad80b752fd16",
"name": "Checkout",
"url": "https://www.example.com/checkout/",
"project_id": "655f1f77bcf86cd799439011",
"paused": false,
"expect_status": 200,
"origin_check": true,
"origin_ip": "203.0.113.10",
"headers": [{ "name": "X-Staging-Auth", "value": "k7Qp2vX9mR4tL8wZ" }],
"state": "pending",
"last_check_at": null,
"last_up_at": null,
"down_since": null,
"last_down": null,
"check_requested_at": "2026-10-20T09:12:41.000Z",
"last": {},
"cert_expires": null,
"created_at": "2026-10-20T09:12:41.000Z"
}
}
PATCH /api/uptime/monitors/:id
Przesyłaj tylko zmieniane pola. Pole headers zastępuje całą listę, więc wyślij wszystkie nagłówki, które chcesz zachować. Poniższe wywołanie wstrzymuje monitor:
curl -X PATCH https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key" \
-H "Content-Type: application/json" \
-d '{ "paused": true }'
Przy użyciu klucza master pole project_id przenosi monitor – na takich samych zasadach jak przy POST.
DELETE /api/uptime/monitors/:id
curl -X DELETE https://app.coredash.app/api/uptime/monitors/6ad68c7a844fad80b752fd16 \
-H "Authorization: Bearer cdk_your_key"
Operacji nie można cofnąć. Aby zatrzymać sprawdzanie i zachować historię, wyślij { "paused": true } za pomocą PATCH.
Błędy i limity w Uptime API
Błędy są zwracane jako { "error": "..." } z jednym z poniższych statusów:
| Status | Kiedy występuje |
|---|---|
400 | Treść żądania narusza reguły. Komunikat error wskazuje przyczynę (zobacz niżej). |
401 | Unauthorized: brak klucza, klucz nieznany, unieważniony lub wygasły, albo przypisany do wygasłego projektu. |
403 | This token can only read. Use a CoreDash API key to change monitors.: żądanie POST, PATCH lub DELETE z tokenem OAuth (mcp_at_). Żądanie PATCH lub DELETE na monitorze w projekcie, w którym jesteś gościem, zwraca 403 z komunikatem Only the project's owners can change its monitors. |
404 | Monitor not found: podane ID nie istnieje lub klucz nie ma dostępu do tego monitora. |
405 | Method not allowed. |
400 error | Rozwiązanie |
|---|---|
Choose a project for this monitor | Prześlij project_id wraz z kluczem master. |
project not found | Projekt wskazany w project_id nie należy do Ciebie. Goście nie mogą dodawać ani przenosić tam monitorów. |
This project's subscription has ended | Dodanie lub przeniesienie monitora wymaga opłaconego projektu albo aktywnego okresu próbnego. |
A project can have up to 25 monitors | Najpierw usuń jeden monitor lub użyj innego projektu. |
A monitor must belong to a project | Pomiń project_id w żądaniu PATCH lub podaj projekt, którego jesteś właścicielem. |
url can't contain a username or password | Do uwierzytelniania basic auth przekaż nagłówek Authorization w polu headers. |
origin_ip is not an IP address, origin_ip must be a public IP address | Użyj publicznego adresu IP samego serwera. |
url must be a full http or https URL, e.g. https://www.example.com/, url must start with http:// or https://, headers must be a list of {name, value}, at most 5 headers, "…" isn't a valid header name (letters, numbers and dashes only), expect_status must be an HTTP status code | Popraw pole wskazane w komunikacie. Zasady znajdziesz w tabeli pól pod POST. |
Limity: 25 monitorów na projekt, 5 dodatkowych nagłówków na monitor, 2100 sprawdzeń na jedno zapytanie GET pojedynczego monitora oraz 30 dni historii sprawdzeń.
Narzędzia MCP dla uptime
Serwer MCP CoreDash pod adresem https://app.coredash.app/api/mcp oferuje dwa narzędzia uptime (obok narzędzi RUM) oraz list_projects dla projektów dostępnych dla danego klucza. Wszystkie trzy służą wyłącznie do odczytu. Aby dodać, zmienić lub usunąć monitor, skorzystaj z aplikacji lub z powyższych endpointów REST z kluczem CoreDash API. Narzędzia te nie wymagają parametru project_id: klucz projektu odczytuje własny projekt, a klucz master lub połączenie OAuth (np. Claude) odczytuje wszystkie projekty, których jesteś właścicielem lub do których masz zaproszenie.
| Narzędzie | Zapytaj agenta | Zwraca |
|---|---|---|
list_projects | „Jakie witryny widzisz?” | { "projects": [...] } z polami project_id, name, url i role (owner lub guest). |
list_uptime_monitors | „Czy wszystko działa?” | { "monitors": [...] } z zamaskowanym adresem IP origin i wartościami nagłówków. |
get_uptime_monitor | „Czy checkout miał w tym tygodniu awarię i od kiedy?” | { "monitor", "summary", "checks" }. Przyjmuje monitor_id oraz limit (domyślnie 100, maksymalnie 1000); summary zwraca rounds, down_rounds i uptime_pct dla tych sprawdzeń. |
curl -X POST https://app.coredash.app/api/mcp \
-H "Authorization: Bearer cdk_your_key" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_uptime_monitor",
"arguments": { "monitor_id": "6ad68c7a844fad80b752fd16", "limit": 48 }
}
}'
Odpowiedź to wrapper JSON-RPC z CoreDash API, z wynikiem w postaci ciągu JSON w result.content[0].text. Nieznany monitor zwraca tam { "error": "Monitor not found" }, a pole result.isError przyjmuje wartość true.
Więcej o uptime i CoreDash API
- Monitoring uptime: co sprawdza CoreDash i co widać w aplikacji.
- CoreDash API: klucze projektu, format JSON-RPC i narzędzia RUM.
- Agency API: klucze master i projekty przez REST.
- Bot CoreDash: user agent, nagłówek
X-CoreDash-Boti adresy IP. - Przepuść CoreDash przez firewall: dla monitora ze statusem Blocked.