DocumentațieAPI și aplicații
API REST
Automatizează isituprightnow cu API-ul REST — chei API și permisiuni, headerul X-Api-Key, URL-ul de bază, limite de rată, erori și coduri de problemă, monitoare, incidente, contacte, mentenanță și pagini de status, cu exemple curl.
Pe această pagină
Tot ce faci în panou se bazează pe un API REST cu JSON. Cu o cheie API poți crea monitoare din pipeline-ul de lansare, poți pune verificările pe pauză în timpul unei lansări, poți prelua disponibilitatea în propriile rapoarte sau poți deschide tichete din incidente.
Noțiuni de bază#
| Element | Valoare |
|---|---|
| URL de bază | https://api.isituprightnow.com/api/v1 |
| Autentificare | Headerul X-Api-Key: <cheia ta> |
| Format | JSON cu câmpuri camelCase; trimite Content-Type: application/json |
| Ore | ISO 8601 în UTC (2026-10-03T14:05:12Z); fusurile orare sunt nume IANA |
| Sume | Cenți ca numere întregi plus o monedă ISO ("amountCents": 900, "currency": "USD") |
| Valori nule | Câmpurile opționale sunt mereu prezente, cu null când sunt goale |
Încearcă:
export IIUN_API_KEY="iiun_xxxxxxxx_…"
curl -s https://api.isituprightnow.com/api/v1/monitors \
-H "X-Api-Key: $IIUN_API_KEY"Chei API#
Creezi chei din Setări → Chei API (proprietarii și administratorii; accesul la API depinde de plan — vezi Prețuri).
- O cheie arată așa:
iiun_<8 caractere>_<40 de caractere>. Cheia completă este afișată o singură dată, la creare; după aceea se vede doar prefixul (iiun_<8 caractere>). Noi stocăm doar un hash. - Dă fiecărei integrări propria cheie, cu un nume descriptiv, ca să poți revoca una fără să le strici pe celelalte. Folosită ultima dată îți arată dacă o cheie mai este folosită.
- Nu pune cheile în codul sursă sau în loguri; folosește depozitul de secrete al sistemului tău CI.
Permisiuni#
| Permisiune | Ce permite |
|---|---|
read |
Cereri GET și HEAD. |
write |
Orice metodă (POST, PUT, DELETE…). Include read. |
O cheie doar de citire care încearcă să modifice ceva primește 403 cu code: "api_key_read_only".
La ce are acces o cheie#
O cheie acționează asupra contului ei cu permisiunile unui Administrator, cu excepția gestionării contului, a echipei și a facturării: account/*, billing/*, api-keys/*, invitations/*, auth/* și push/* răspund cu 403 și code: "api_key_not_allowed". Monitoarele, incidentele, contactele de alertă, ferestrele de mentenanță și paginile de status sunt toate disponibile.
Paginare#
Listele care pot crește acceptă ?page=1&pageSize=50 (pageSize cel mult 200). Ele întorc un tablou JSON simplu, iar totalul apare în headerul de răspuns X-Total-Count.
curl -s -D - "https://api.isituprightnow.com/api/v1/incidents?status=all&page=2&pageSize=100" \
-H "X-Api-Key: $IIUN_API_KEY" -o incidents.json | grep -i x-total-countLimite de rată#
| Ce | Limită |
|---|---|
| Endpointuri de autentificare, înregistrare, parolă și 2FA | 10 cereri pe minut per adresă IP |
| Endpointuri publice (abonare / deblocare pagini de status, formularul de contact…) | 10 cereri pe minut per adresă IP |
| Formularul de contact | în plus, 5 mesaje per IP și 3 per adresă de e-mail a expeditorului, pe oră |
| URL-uri heartbeat | 60 de apeluri pe minut per monitor |
Cererile făcute cu o cheie API nu au deocamdată o cotă fixă, dar te rugăm să păstrezi un trafic rezonabil (de exemplu, nu interoga mai des decât intervalul de verificare). Când atingi o limită, API-ul răspunde cu 429, code: "rate_limited" și headerul Retry-After (secunde): așteaptă atât înainte să reîncerci.
Erori#
Erorile folosesc formatul RFC 7807 application/problem+json, cu un code stabil, ușor de procesat automat:
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"detail": "Interval must be between 15 and 86400 seconds.",
"code": "validation_failed",
"errors": {
"intervalSeconds": ["Interval must be between 15 and 86400 seconds."]
}
}În cod folosește code (textele title și detail, în engleză, se pot schimba). Problemele de validare listează în errors fiecare câmp invalid; problemele legate de limitele planului adaugă limit.
| Cod | Stare | Ce înseamnă |
|---|---|---|
validation_failed |
400 | Câmpuri invalide; vezi errors. |
bad_request |
400 | Cerere malformată (de exemplu JSON invalid). |
unauthorized |
401 | Cheie API lipsă sau invalidă. |
forbidden |
403 | Nu este permis. |
api_key_read_only |
403 | Cheia nu are permisiunea write. |
api_key_not_allowed |
403 | Acest endpoint nu poate fi folosit cu chei API. |
account_suspended |
403 | Contul este suspendat; contactează-ne. |
not_found |
404 | Resursa nu există (sau aparține altui cont). |
conflict |
409 | Cererea intră în conflict cu starea actuală. |
slug_taken |
409 | O pagină de status folosește deja acest slug. |
domain_taken |
409 | O altă pagină de status folosește acest domeniu personalizat. |
plan_limit |
402 | Planul tău nu permite asta. limit este monitors, interval, statusPages, seats, regions sau feature. |
rate_limited |
429 | Prea multe cereri; vezi Retry-After. |
maintenance_mode |
503 | Serviciul este în mentenanță: modificările sunt dezactivate temporar (citirile, verificările și alertele continuă). |
not_configured |
503 | Un canal (SMS, apel vocal, Telegram) nu este disponibil încă. |
not_implemented |
501 | Nu este suportat încă. |
server_error |
500 | Eroare neașteptată la noi; reîncearcă mai târziu. |
Monitoare#
| Metodă și cale | Descriere |
|---|---|
GET /monitors?tag=&status=&q= |
Lista monitoarelor, filtrată opțional după etichetă, stare (up, down, paused, unknown) sau un text de căutare. |
GET /monitors/{id} |
Un monitor. |
POST /monitors |
Creează un monitor. |
PUT /monitors/{id} |
Actualizează un monitor (același corp ca la creare). |
DELETE /monitors/{id} |
Șterge un monitor și istoricul lui. |
POST /monitors/{id}/pause, POST /monitors/{id}/resume |
Pune pe pauză sau reia verificările. |
POST /monitors/bulk |
{ "ids": [...], "action": "pause" | "resume" | "delete" } → { "affected": 3 } |
GET /monitors/{id}/results?hours=24 |
Rezultatele recente ale verificărilor (cel mult 168 de ore, cel mult 300 de puncte). |
GET /monitors/{id}/stats |
Disponibilitatea pe 24 h / 7 / 30 / 90 de zile, timpii medii de răspuns și 90 de valori zilnice. |
GET /monitors/{id}/alert-rules, PUT /monitors/{id}/alert-rules |
Citește sau înlocuiește regulile de alertă ale monitorului. |
Creează un monitor#
curl -s -X POST https://api.isituprightnow.com/api/v1/monitors \
-H "X-Api-Key: $IIUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Site — prima pagină",
"type": "Http",
"target": "https://www.example.com/",
"intervalSeconds": 60,
"timeoutMs": 10000,
"tags": ["productie"],
"config": {
"method": "GET",
"expectedStatusCodes": "200-299",
"followRedirects": true
}
}'type este unul dintre Http, Keyword, Ping, Port, Heartbeat, Ssl, Domain, Dns, Udp. Omite regions ca să folosești regiunea implicită; codurile regiunilor disponibile apar în GET /public/config (regions). Câmpurile config pentru fiecare tip sunt descrise în Monitoare. Răspunsul este monitorul:
{
"id": "8b0c7d3e-3f5a-4a49-9a51-2f1f0f4c6a10",
"name": "Site — prima pagină",
"type": "Http",
"target": "https://www.example.com/",
"intervalSeconds": 60,
"timeoutMs": 10000,
"regions": ["eu-central"],
"status": "Unknown",
"paused": false,
"inMaintenance": false,
"lastCheckedAt": null,
"lastResponseMs": null,
"uptime24h": null,
"tags": ["productie"],
"config": {
"method": "GET",
"headers": {},
"body": null,
"expectedStatusCodes": "200-299",
"followRedirects": true,
"keyword": null,
"keywordMode": "contains",
"caseSensitive": false,
"slowThresholdMs": null,
"basicAuthUser": null,
"basicAuthPassword": { "isSet": false, "hint": null }
},
"lastStatusChangeAt": null,
"expiresAt": null,
"createdAt": "2026-10-03T14:05:12Z",
"updatedAt": "2026-10-03T14:05:12Z"
}Secretele, precum basicAuthPassword, nu sunt returnate niciodată, ci doar { "isSet": true|false }. La actualizare, omite secretul (sau trimite null) ca să-l păstrezi și trimite "" ca să-l ștergi. Pentru monitoarele heartbeat, config.heartbeatUrl conține URL-ul de apelat.
Pauză în timpul unei lansări#
curl -s -X POST "https://api.isituprightnow.com/api/v1/monitors/$MONITOR_ID/pause" -H "X-Api-Key: $IIUN_API_KEY"
./deploy.sh
curl -s -X POST "https://api.isituprightnow.com/api/v1/monitors/$MONITOR_ID/resume" -H "X-Api-Key: $IIUN_API_KEY"Când știi ora dinainte, preferă o fereastră de mentenanță: verificările continuă, iar pagina de status arată mentenanță.
Disponibilitatea pentru un raport#
curl -s "https://api.isituprightnow.com/api/v1/monitors/$MONITOR_ID/stats" -H "X-Api-Key: $IIUN_API_KEY"{
"uptime": { "h24": 100, "d7": 99.98, "d30": 99.95, "d90": 99.97 },
"avgResponseMs": { "h24": 182, "d7": 190, "d30": 188 },
"daily": [{ "date": "2026-10-02", "uptime": 100 }]
}Valorile de disponibilitate sunt procente (0–100); null înseamnă că nu au existat verificări în acea perioadă. daily conține 90 de zile calendaristice, în fusul orar al contului.
Incidente#
| Metodă și cale | Descriere |
|---|---|
GET /incidents?status=open|all&monitorId= |
Lista incidentelor (paginată), de la cel mai recent. |
GET /incidents/{id} |
Detalii: instantaneul verificării eșuate, cronologia și comentariile. |
POST /incidents/{id}/acknowledge |
Confirmă incidentul; oprește reminderele. |
POST /incidents/{id}/comments |
{ "body": "Am revenit la versiunea 1.42" } (planurile cu comentarii la incidente). |
curl -s "https://api.isituprightnow.com/api/v1/incidents?status=open" -H "X-Api-Key: $IIUN_API_KEY"[
{
"id": "5e1f2a9b-77c4-4d3e-9a0f-6b2d8c1e4f55",
"monitorId": "8b0c7d3e-3f5a-4a49-9a51-2f1f0f4c6a10",
"monitorName": "Site — prima pagină",
"startedAt": "2026-10-03T14:05:12Z",
"resolvedAt": null,
"durationSeconds": 240,
"cause": "HTTP 503",
"regions": ["eu-central", "us-east"],
"acknowledged": false
}
]Contacte de alertă#
| Metodă și cale | Descriere |
|---|---|
GET /alert-contacts, GET /alert-contacts/{id} |
Listează sau citește contactele. |
POST /alert-contacts, PUT /alert-contacts/{id}, DELETE /alert-contacts/{id} |
Creează, actualizează, șterge. |
POST /alert-contacts/{id}/test |
Trimite o alertă de test → { "ok": true, "message": "…" }. |
POST /alert-contacts/{id}/verify |
{ "code": "123456" } verifică un contact de e-mail / SMS / apel vocal; un corp gol trimite un cod nou. |
curl -s -X POST https://api.isituprightnow.com/api/v1/alert-contacts \
-H "X-Api-Key: $IIUN_API_KEY" -H "Content-Type: application/json" \
-d '{ "type": "Slack", "name": "#ops", "target": "https://hooks.slack.com/services/T000/B000/XXXX" }'type este unul dintre Email, Sms, Voice, Webhook, Slack, Discord, Teams, GoogleChat, Telegram, Pushover. Contactele webhook acceptă config: { "method", "headers", "bodyTemplate" }; Pushover acceptă config: { "appToken", "device", "priority" }. Vezi Alerte.
Leagă contactele de un monitor prin regulile lui de alertă (asta înlocuiește întreaga listă):
curl -s -X PUT "https://api.isituprightnow.com/api/v1/monitors/$MONITOR_ID/alert-rules" \
-H "X-Api-Key: $IIUN_API_KEY" -H "Content-Type: application/json" \
-d '[
{ "contactId": "'"$SLACK_CONTACT_ID"'", "thresholdMinutes": 0, "repeatEveryMinutes": 0 },
{ "contactId": "'"$SMS_CONTACT_ID"'", "thresholdMinutes": 5, "repeatEveryMinutes": 15 }
]'Ferestre de mentenanță#
GET, POST /maintenance-windows, PUT și DELETE /maintenance-windows/{id} cu { name, monitorIds, startsAt, endsAt, recurrence: null | "daily" | "weekly" | "monthly", timeZone }. Răspunsul adaugă active. Un exemplu găsești în Ferestre de mentenanță.
Pagini de status#
| Metodă și cale | Descriere |
|---|---|
GET /status-pages, GET /status-pages/{id} |
Listează sau citește paginile (modelul din editor, cu publicUrl). |
POST /status-pages, PUT /status-pages/{id}, DELETE /status-pages/{id} |
Creează, actualizează, șterge. |
POST /status-pages/{id}/announcements |
{ "title", "body", "severity": "info" | "warning" | "critical" } — publicat și trimis pe e-mail abonaților. |
GET /status-pages/{id}/subscribers |
Abonații (paginat). |
Vizualizarea publică, doar de citire, a unei pagini este disponibilă fără cheie la GET /public/status-pages/{slug}, iar badge-ul ei la GET /public/status-pages/{slug}/badge.svg.
Heartbeat#
URL-urile heartbeat nu au nevoie de cheie: GET, POST sau HEAD https://api.isituprightnow.com/api/v1/heartbeat/{token}. Vezi Monitoare heartbeat.
Webhook-uri (trimise de noi)#
Ca să primești alertele în propriile tale sisteme, adaugă un contact de alertă de tip Webhook. La fiecare alertă trimitem un payload JSON ca acesta:
{
"event": "monitor.up",
"monitor": { "id": "8b0c7d3e-3f5a-4a49-9a51-2f1f0f4c6a10", "name": "Site — prima pagină", "target": "https://www.example.com/" },
"status": "Up",
"title": "Site — prima pagină is UP",
"message": "isituprightnow: Site — prima pagină este FUNCȚIONAL după 4 min 0 s (https://www.example.com/)",
"locale": "ro",
"occurredAt": "2026-10-03T14:09:12.000Z",
"cause": null,
"regions": ["eu-central", "us-east"],
"incidentId": "5e1f2a9b-77c4-4d3e-9a0f-6b2d8c1e4f55",
"downtimeSeconds": 240,
"responseMs": null,
"expiresAt": null,
"link": "https://isituprightnow.com/ro/app/incidents/5e1f2a9b-77c4-4d3e-9a0f-6b2d8c1e4f55"
}event este monitor.down, monitor.up, monitor.slow, ssl.expiring, domain.expiring sau test. Toate câmpurile, șabloanele personalizate și regulile de livrare sunt descrise în Alerte → Webhook-uri. Protejează-ți endpointul cu un header secret (de exemplu Authorization: Bearer <valoare aleatorie>) configurat pe contact și răspunde cu orice cod 2xx în cel mult 10 secunde.
Nu ai găsit ce căutai? Scrie-ne.