# onDuty API

- Pagina: https://onduty.ro/api
- Sursa: onDuty (onduty.ro), în limba română
- Pe scurt: Documentația API-ului onDuty: incidente, verificări, ture, pagini de status, alerte primite, apeluri și SMS.

API-ul onDuty: proiecte, servicii, verificări, incidente, ture, pagini de status, alerte primite, apeluri și SMS. Autentificare cu o cheie API: Authorization: Bearer od_live_… (Integrări › Chei API). Răspunsurile sunt JSON, cu cheile în română, datele în ISO 8601; listele vin în date, cu pagina, pe_pagina (50) și total. Erorile au forma {"eroare": "cod", "mesaj": "…"}. Limită: 120 de cereri pe minut pe cheie.

[openapi.json](https://api.onduty.ro/v1/openapi.json) [Apeluri și SMS din API](https://onduty.ro/integrari#api-apeluri)

```
# lista incidentelor deschise
curl https://api.onduty.ro/v1/incidents?stare=deschis \
  -H "Authorization: Bearer od_live_…"
```

## Monitorizare

Proiecte, servicii și verificări.

get `/projects` → 200

Proiectele · Dreptul cheii: „citire”.

get `/services` → 200

Serviciile · Dreptul cheii: „citire”.

- `proiect` (în query) · ID-ul proiectului
- `pagina` (în query) · Pagina, de la 1

get `/services/{id}` → 200

Un serviciu · Dreptul cheii: „citire”.

- `id` (în adresă)

get `/checks` → 200

Verificările · Dreptul cheii: „citire”.

- `serviciu` (în query) · ID-ul serviciului
- `pagina` (în query) · Pagina, de la 1

post `/checks` → 201

Adaugă o verificare · Dreptul cheii: „scriere”.

**Corpul (VerificareNoua)**

- `serviciu` obligatoriu string
- `tip` obligatoriu string: http, keyword, api, ping, port, udp, smtp, imap, ssl, domain, dns, heartbeat
- `metoda` string · Pentru tip = http sau keyword; implicit GET
- `coduri` string · Codurile acceptate, de exemplu 200-299, 301
- `asertiuni` array · Pentru tip = http: aserțiuni pe corpul JSON (planurile cu „API checks”)
- `pasi` array · Pentru tip = api: 1–10 cereri, în ordine (planurile cu „API checks”)
- `payload` string · Pentru tip = udp: ce trimitem
- `format_payload` string: text, hex
- `raspuns_asteptat` string · Pentru tip = udp: textul pe care trebuie să-l conțină răspunsul
- `tls` string: none, starttls, tls · Pentru tip = smtp sau imap
- `etichete` array
- `regiuni_publice` boolean · false: rulează doar din verificatoarele private alese
- `verificatoare_private` array · Id-urile verificatoarelor private ale contului
- `nume` string
- `tinta` string · URL-ul, host-ul sau domeniul
- `critica` boolean
- `interval` integer · Secunde, dintre intervalele planului
- `cuvant` string · Pentru tip = keyword
- `cuvant_absent` boolean
- `port` integer · Pentru tip = port sau udp (obligatoriu), smtp sau imap (opțional)
- `inregistrare` string · Pentru tip = dns: A, AAAA, CNAME, MX, NS, TXT
- `asteptat` string
- `perioada` integer · Pentru tip = heartbeat, secunde
- `gratie` integer

get `/checks/{id}` → 200

O verificare · Dreptul cheii: „citire”.

- `id` (în adresă)

post `/checks/{id}/pause` → 200

Pune verificarea în pauză · Dreptul cheii: „scriere”.

- `id` (în adresă)

post `/checks/{id}/resume` → 200

Reia verificarea · Dreptul cheii: „scriere”.

- `id` (în adresă)

get `/regions` → 200

Regiunile active și adresele IP din care pleacă verificările, pentru whitelisting în firewall (aceeași listă ca onduty.ro/ip-uri.json și /ip-uri.txt); fără cheie

## Incidente

Deschide, confirmă și rezolvă incidente.

get `/incidents` → 200

Incidentele, cele mai noi întâi · Dreptul cheii: „citire”.

- `stare` (în query) · deschis, confirmat sau rezolvat
- `proiect` (în query) · ID-ul proiectului
- `serviciu` (în query) · ID-ul serviciului
- `test` (în query) · „da” include simulările
- `pagina` (în query) · Pagina, de la 1

post `/incidents` → 201

Deschide un incident; politica proiectului sau a serviciului anunță echipa. Cu aceeași „cheie” cât e deschis, întoarce același incident · Dreptul cheii: „scriere”.

**Corpul (IncidentNou)**

- `titlu` obligatoriu string
- `proiect` obligatoriu string
- `serviciu` string
- `prioritate` integer
- `descriere` string
- `cheie` string · Deduplicare: cât incidentul e deschis, aceeași cheie îl întoarce

get `/incidents/{reference}` → 200

Un incident, după INC-0142 sau UUID · Dreptul cheii: „citire”.

- `reference` (în adresă)

post `/incidents/{reference}/acknowledge` → 200

Confirmă incidentul (oprește escaladarea) · Dreptul cheii: „scriere”.

- `reference` (în adresă)

post `/incidents/{reference}/resolve` → 200

Rezolvă incidentul · Dreptul cheii: „scriere”.

- `reference` (în adresă)

## Gardă

Cine e de gardă și paginile de status.

get `/shifts` → 200

Cine e de gardă pe fiecare tură, acum sau la „la” · Dreptul cheii: „citire”.

- `la` (în query) · Momentul, ISO 8601

get `/status-pages` → 200

Paginile de status, cu starea componentelor · Dreptul cheii: „citire”.

## Evenimente

Alerte din alte sisteme, cu cheia unui punct de primire.

post `/events` → 202

O alertă din alt sistem, în formatul generic onDuty; „cheie” deduplică, „stare: rezolvat” închide

**Corpul (Eveniment)**

- `integrare` obligatoriu string · Cheia punctului de primire (ultima parte a URL-ului lui)
- `titlu` obligatoriu string
- `severitate` string · critic, mare, mediu, mic (sau P1–P4)
- `sursa` string
- `cheie` string · Alertele cu aceeași cheie actualizează același incident
- `stare` string: deschis, rezolvat
- `descriere` string
- `link` string
- `etichete` object

## Apeluri și SMS

Apeluri și SMS-uri spre numerele verificate ale contului.

post `/calls` → 202

Sună un număr verificat și citește mesajul (TTS, română) · Dreptul cheii: „apeluri și SMS”.

**Corpul (ApelNou)**

- `catre` obligatoriu string
- `mesaj` obligatoriu string
- `de_pe` string · Unul dintre numerele contului
- `webhook` string · URL https unde trimitem rezultatul

get `/calls/{id}` → 200

Rezultatul unui apel · Dreptul cheii: „apeluri și SMS”.

- `id` (în adresă)

post `/sms` → 202

Trimite un SMS spre un număr verificat · Dreptul cheii: „apeluri și SMS”.

**Corpul (SmsNou)**

- `catre` obligatoriu string
- `mesaj` obligatoriu string
- `webhook` string

get `/sms/{id}` → 200

Starea unui SMS · Dreptul cheii: „apeluri și SMS”.

- `id` (în adresă)

## Erori

Orice eroare are forma `{"eroare": "cod", "mesaj": "explicație"}`: 401 `cheie_invalida`, 403 `drept_lipsa`, 404 `negasit`, 409 `stare_gresita`, 422 `date_invalide` sau `numar_neverificat`, 429 `prea_multe_cereri` sau `limita_zilnica`.
