/v1/account/monitors
account/monitors
Monitoring: pune companii sub supraveghere, creează, pune pe pauză, șterge.
Un monitor urmărește o companie pentru tine. La un interval fix verificăm dacă există semnale noi și trimitem fiecare semnal nou prin webhook la endpointurile tale webhook.
Costuri și limite
| Ce | Credite |
|---|---|
| Monitor verificat în fiecare zi, timp de 30 zile | 50 |
| Monitor verificat la fiecare 3 zile, timp de 30 zile | 40 |
| Monitor verificat la fiecare 7 zile, timp de 30 zile | 20 |
| Monitor verificat la fiecare 30 zile, timp de 30 zile | 10 |
| Fiecare verificare reușită suplimentară din perioadă | +2 |
Limită: 30 cereri pe minut. Creare, modificare și ștergere: 10 pe minut.
Crearea unui monitor și prima bază de referință sunt gratuite. Un ciclu de 30 zile se taxează de îndată ce monitorul devine activ. Prețul depinde de intervalul de verificare și acoperă toate verificările pe care intervalul le programează într-un ciclu.
Un interval între două trepte costă cât următoarea treaptă mai frecventă: la fiecare patru zile costă cât la fiecare trei zile.
Verificări suplimentare apar mai ales când scurtezi intervalul în mijlocul unui ciclu. Fiecare verificare suplimentară reușită costă suma din tabel.
După 30 zile, ciclul se reînnoiește automat la prețul valabil atunci. Verificările eșuate nu costă nimic. Când pui pe pauză, arhivezi sau schimbi intervalul, nu rambursăm nimic.
Fiecare cont poate avea până la 50 monitoare în același timp, câte unul per companie. În 24 de ore poți crea până la 50 monitoare; și cele arhivate se socotesc.
Prețul unui interval îl afli gratuit cu GET /v1/account/monitoring/pricing, aici pentru o verificare la fiecare șapte zile:
curl -G "https://handelsregister.ai/api/v1/account/monitoring/pricing" \ -H "x-api-key: CHEIA_TA_API" \ --data-urlencode 'poll_interval_days=7'
import requests response = requests.get( "https://handelsregister.ai/api/v1/account/monitoring/pricing", headers={"x-api-key": "CHEIA_TA_API"}, params={ "poll_interval_days": "7", }, ) data = response.json()
const url = new URL("https://handelsregister.ai/api/v1/account/monitoring/pricing"); url.searchParams.append("poll_interval_days", "7"); const response = await fetch(url, { headers: { "x-api-key": "CHEIA_TA_API" }, }); const data = await response.json();
1{2 "pricing": {3 "policy_version": "2026-08.v2",4 "credits_per_run": 2,5 "cycle_minimum_credits": 20,6 "included_runs": 5,7 "cycle_days": 30,8 "estimated_runs": 5,9 "estimated_credits": 2010 },11 "entitled": true,12 "meta": {13 "request_credit_cost": 0,14 "credits_remaining": 14515 }16}
Cum funcționează un monitor
- Creare. Numești compania, intervalul de verificare și cel puțin un endpoint webhook verificat. Monitorul pornește cu statusul
initializing. - Bază de referință. Înregistrăm semnalele din ultimele câteva zile drept cunoscute. Ele nu se livrează, deci primești doar ce e nou după aceea.
- Activare. Taxăm ciclul, monitorul devine
activeși verifică imediat prima dată. - Verificare. Apoi verifică la intervalul ales. Fiecare semnal nou declanșează câte un mesaj per monitor către endpointurile tale webhook.
- Reînnoire. După fiecare ciclu, următorul se taxează automat, cât timp soldul tău îl acoperă.
Intervalul de verificare este între 1 și 30 zile. Momentul exact al unei verificări poate varia în cadrul unei ore. Fiecare verificare privește câteva zile în urmă, așa că sosesc și înscrierile publicate târziu.
Un monitor livrează temele Signals ale planului tău: cinci în orice cont, Insolvențele cu Pro, Transformările & M&A cu Max. Un webhook poartă același semnal în câmpul data.signal ca signals.
| Status | Semnificație |
|---|---|
| initializing | Creat; baza de referință și activarea rulează. |
| active | Verifică la intervalul ales. |
| paused_user | Pus pe pauză de tine. |
| paused_configuration | Nu mai este conectat niciun endpoint webhook activ și verificat. |
| paused_billing | Soldul tău nu acoperă ciclul sau o verificare suplimentară. Sau prețul s-a schimbat și așteaptă acordul tău. |
| error | Mai multe verificări la rând au eșuat. |
| archived | Încheiat definitiv. Poți citi în continuare monitorul după ID, dar nu mai apare în listă. |
Pentru monitoarele puse pe pauză și pentru erori, status_reason explică de ce, de exemplu no_verified_endpoint sau insufficient_cycle_floor.
Endpointuri
Toate căile se află sub /v1/account. Citești și scrii cu cheia ta API în headerul x-api-key.
| Metodă | Cale | Scop |
|---|---|---|
| GET |
/v1/account/monitors |
Toate monitoarele, cele mai noi primele, fără cele arhivate. |
| POST |
/v1/account/monitors |
Creează un monitor. |
| GET |
/v1/account/monitors/{id} |
Un monitor cu ciclul și ultimele verificări. |
| PATCH |
/v1/account/monitors/{id} |
Schimbă intervalul de verificare. |
| POST |
/v1/account/monitors/{id}/pause |
Pauză. |
| POST |
/v1/account/monitors/{id}/resume |
Reluare. |
| DELETE |
/v1/account/monitors/{id} |
Arhivare. |
| GET |
/v1/account/monitoring/pricing |
Prețul unui interval. |
Idempotency-Key
Fiecare cerere de scriere are nevoie de headerul Idempotency-Key, o valoare unică per operație, ideal un UUID. Fără el, API-ul răspunde cu 428.
Dacă repeți o cerere cu aceeași cheie și aceleași date în 24 de ore, primești înapoi răspunsul salvat. Acesta poartă headerul Idempotency-Status: replayed. Astfel o eroare de rețea nu creează un al doilea monitor.
Asta se aplică și răspunsurilor de eroare. Pentru o încercare nouă după o corectură folosește deci o cheie nouă. Aceeași cheie cu alte date returnează 409.
Sunt permise până la 128 de caractere: litere, cifre și . _ : -. Primul caracter este o literă sau o cifră. O cheie în orice alt format returnează 400.
Creează un monitor
Ai nevoie de entity_id-ul companiei și de cel puțin un endpoint webhook verificat, vezi account/webhook-endpoints.
curl -X POST "https://handelsregister.ai/api/v1/account/monitors" \ -H "x-api-key: CHEIA_TA_API" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "entity_id": "94eb910fef13f94585c48c263fa446d4", "label": "Hetzner Online GmbH", "poll_interval_days": 7, "endpoint_ids": [ "wep_01m6b3j1g0cdz98hw8zdefbf52" ] }'
import uuid import requests response = requests.post( "https://handelsregister.ai/api/v1/account/monitors", headers={ "x-api-key": "CHEIA_TA_API", "Idempotency-Key": str(uuid.uuid4()), }, json={ "entity_id": "94eb910fef13f94585c48c263fa446d4", "label": "Hetzner Online GmbH", "poll_interval_days": 7, "endpoint_ids": [ "wep_01m6b3j1g0cdz98hw8zdefbf52" ] }, ) data = response.json()
const response = await fetch("https://handelsregister.ai/api/v1/account/monitors", { method: "POST", headers: { "x-api-key": "CHEIA_TA_API", "Idempotency-Key": crypto.randomUUID(), "Content-Type": "application/json", }, body: JSON.stringify({ "entity_id": "94eb910fef13f94585c48c263fa446d4", "label": "Hetzner Online GmbH", "poll_interval_days": 7, "endpoint_ids": [ "wep_01m6b3j1g0cdz98hw8zdefbf52" ] }), }); const data = await response.json();
| Nume | Tip | Descriere | Exemplu |
|---|---|---|---|
| Idempotency-KeyHeader | șir de caractereobligatoriu | O valoare unică per operație, ideal un UUID. Vezi Idempotency-Key.Limite: 1 până la 128 caractere |
req-20260802-01 |
| entity_idBody | șir de caractereobligatoriu |
entity_id-ul companiei din fetch-organization sau search-organizations.Limite: 1 până la 128 caractere |
94eb910fef13f94585c48c263fa446d4 |
| labelBody | șir de caractereopțional | Un nume pentru monitor.Limite: cel mult 200 caractere |
Hetzner Online GmbH |
| poll_interval_daysBody | număr întregobligatoriu | Intervalul de verificare în zile.Limite: 1 până la 30 |
7 |
| endpoint_idsBody | listă de stringobligatoriu |
ID-urile endpointurilor tale webhook (wep_…). Fiecare trebuie să fie activ și verificat.Limite: 1 până la 10 intrări |
["wep_01m6b3j1g0cdz98hw8zdefbf52"] |
API-ul răspunde cu 202: monitorul e creat, iar baza de referință și activarea rulează în fundal. meta.billing.charged_credits arată că nu s-a taxat nimic pentru asta.
1{2 "monitor": {3 "id": "mon_01m6b3m7945dn7cyvexzv41kjz",4 "type": "organization.signals",5 "entity_id": "94eb910fef13f94585c48c263fa446d4",6 "label": "Hetzner Online GmbH",7 "poll_interval_days": 7,8 "status": "initializing",9 "status_reason": null,10 "pricing_policy_version": "2026-08.v2",11 "baseline_completed_at": null,12 "activated_at": null,13 "last_succeeded_at": null,14 "next_poll_at": null,15 "created_at": "2026-11-01T08:29:13+00:00"16 },17 "meta": {18 "message": "Monitor created; the free baseline is queued and this request charged 0 credits. The cycle price is charged only when activation succeeds.",19 "baseline_queued": true,20 "billing": {21 "charged_credits": 0,22 "new_cycle": false,23 "floor_transaction_id": null24 },25 "request_credit_cost": 0,26 "credits_remaining": 14527 }28}
Listează și modifică monitoare
GET /v1/account/monitors returnează până la 100 monitoare sub monitors, cu total. Cele arhivate nu sunt în listă.
GET /v1/account/monitors/{id} arată în plus ciclul curent în billing_cycle și ultimele verificări în recent_runs.
curl -G "https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec" \ -H "x-api-key: CHEIA_TA_API"
import requests response = requests.get( "https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec", headers={"x-api-key": "CHEIA_TA_API"}, ) data = response.json()
const url = new URL("https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec"); const response = await fetch(url, { headers: { "x-api-key": "CHEIA_TA_API" }, }); const data = await response.json();
1{2 "monitor": {3 "id": "mon_01m65pn3vm11sjjp1j076cbvec",4 "type": "organization.signals",5 "entity_id": "94eb910fef13f94585c48c263fa446d4",6 "label": "Hetzner Online GmbH",7 "poll_interval_days": 1,8 "status": "active",9 "status_reason": null,10 "pricing_policy_version": "2026-08.v2",11 "baseline_completed_at": "2026-10-30T06:06:28+00:00",12 "activated_at": "2026-10-30T06:06:28+00:00",13 "last_succeeded_at": "2026-10-30T06:06:53+00:00",14 "next_poll_at": "2026-10-31T06:19:12+00:00",15 "created_at": "2026-10-30T06:06:18+00:00"16 },17 "billing_cycle": {18 "starts_at": "2026-10-30T06:06:28+00:00",19 "ends_at": "2026-11-29T06:06:28+00:00",20 "floor_credits": 50,21 "credits_per_run": 2,22 "included_runs": 30,23 "successful_runs": 1,24 "extra_credits_settled": 0,25 "pricing_policy_version": "2026-08.v2"26 },27 "recent_runs": [28 {29 "due_slot_at": "2026-10-30T06:06:28+00:00",30 "kind": "activation_catchup",31 "status": "succeeded",32 "charge_state": "covered",33 "charge_credits": 0,34 "events_new": 0,35 "finished_at": "2026-10-30T06:06:55+00:00"36 }37 ],38 "meta": {39 "request_credit_cost": 0,40 "credits_remaining": 14541 }42}
| Câmp | Semnificație |
|---|---|
| id |
ID-ul monitorului, începe cu mon_.
|
| entity_id | Compania urmărită. |
| poll_interval_days | Intervalul de verificare în zile. |
| status, status_reason |
Statusul, vezi mai sus. status_reason indică motivul.
|
| baseline_completed_at, activated_at, last_succeeded_at | Momentele bazei de referință, ale activării și ale ultimei verificări reușite. |
| next_poll_at | Următoarea verificare programată, doar pentru monitoarele active. |
| billing_cycle | Ciclul curent: început, sfârșit, preț, verificări incluse și verificări făcute până acum. |
| recent_runs |
Ultimele verificări cu rezultat, facturare și numărul de semnale noi în events_new.
|
PATCH /v1/account/monitors/{id} schimbă intervalul de verificare. Următoarea verificare urmează atunci la noul interval, socotit de la schimbare.
Ciclul curent își păstrează prețul și verificările incluse. Noul preț se aplică de la următorul ciclu. Un interval mai scurt poate declanșa verificări suplimentare în ciclul curent.
curl -X PATCH "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz" \ -H "x-api-key: CHEIA_TA_API" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "poll_interval_days": 30 }'
import uuid import requests response = requests.patch( "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz", headers={ "x-api-key": "CHEIA_TA_API", "Idempotency-Key": str(uuid.uuid4()), }, json={ "poll_interval_days": 30 }, ) data = response.json()
const response = await fetch("https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz", { method: "PATCH", headers: { "x-api-key": "CHEIA_TA_API", "Idempotency-Key": crypto.randomUUID(), "Content-Type": "application/json", }, body: JSON.stringify({ "poll_interval_days": 30 }), }); const data = await response.json();
1{2 "monitor": {3 "id": "mon_01m6b3m7945dn7cyvexzv41kjz",4 "type": "organization.signals",5 "entity_id": "94eb910fef13f94585c48c263fa446d4",6 "label": "Hetzner Online GmbH",7 "poll_interval_days": 30,8 "status": "initializing",9 "status_reason": null,10 "pricing_policy_version": "2026-08.v2",11 "baseline_completed_at": null,12 "activated_at": null,13 "last_succeeded_at": null,14 "next_poll_at": null,15 "created_at": "2026-11-01T08:29:13+00:00"16 },17 "meta": {18 "request_credit_cost": 0,19 "credits_remaining": 14520 }21}
Pauză, reluare, arhivare
POST …/{id}/pause oprește un monitor activ. Ciclul plătit continuă până la capăt și nu se rambursează nimic.
POST …/{id}/resume reia un monitor pus pe pauză sau un monitor cu eroare. Verificăm din nou endpointurile webhook, soldul și prețul.
În cadrul ciclului plătit curent, reluarea nu costă nimic. Dacă ciclul s-a încheiat, începe acum un ciclu nou la prețul actual. meta.request_credit_cost arată suma.
Dacă, de exemplu, lipsește un endpoint webhook verificat, API-ul răspunde totuși cu 200, dar cu meta.activated: false. Statusul monitorului și status_reason indică motivul.
Dacă prețul s-a schimbat, un monitor activ se oprește la sfârșitul ciclului cu pricing_consent_required. Cu resume accepți noul preț.
DELETE …/{id} arhivează monitorul definitiv. Este ireversibil și nu se rambursează nimic.
curl -X POST "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz/resume" \ -H "x-api-key: CHEIA_TA_API" \ -H "Idempotency-Key: $(uuidgen)"
import uuid import requests response = requests.post( "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz/resume", headers={ "x-api-key": "CHEIA_TA_API", "Idempotency-Key": str(uuid.uuid4()), }, ) data = response.json()
const response = await fetch("https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz/resume", { method: "POST", headers: { "x-api-key": "CHEIA_TA_API", "Idempotency-Key": crypto.randomUUID(), }, }); const data = await response.json();
paused_configuration. După ce activezi endpointul webhook, reia monitorul cu resume.
Erori
Erorile au structura {"error": "…", "meta": {"message": "…"}}. În programul tău verifică valoarea lui error. Textul din meta.message este în engleză și se poate schimba. Erorile nu costă nimic.
| Status | Cauză | Ce poți face |
|---|---|---|
| 400 |
api_key se află în URL. |
Trimite cheia în headerul x-api-key. |
| 400 |
Idempotency-Key are un format invalid. |
Corectează formatul, de exemplu folosește un UUID. |
| 401 | Nicio cheie API sau token ori unul invalid. |
Trimite cheia în headerul x-api-key. |
| 403 |
Bearer tokenului îi lipsește dreptul account:read. |
Folosește cheia API sau un token cu account:read. |
| 403 | Adresa de e-mail a contului tău nu este încă confirmată sau contul este blocat. | Deschide linkul din e-mailul de confirmare. Dacă contul este blocat, te poate ajuta suportul. |
| 403 |
Bearer tokenului îi lipsește dreptul monitoring:manage. |
Folosește cheia API sau tokenul admin. |
| 404 | Niciun monitor cu acest ID în contul tău. | Verifică ID-ul. |
| 409 |
Există deja un monitor pentru această companie (duplicate_monitor). |
Folosește monitorul existent sau arhivează-l mai întâi. |
| 409 |
Idempotency-Key a fost deja folosit cu alte date, este mai vechi de 24 de ore sau încă se procesează. |
Folosește o cheie nouă sau așteaptă puțin. |
| 422 |
O valoare este invalidă: invalid_subject, invalid_interval, endpoint_required, monitor_limit sau not_resumable. |
Corectează valoarea. |
| 428 |
Lipsește headerul Idempotency-Key. |
Trimite headerul. |
| 429 | Prea multe cereri. |
Reîncearcă după Retry-After. |
| 429 |
creation_rate_limited: prea multe monitoare noi în 24 de ore. |
Reîncearcă după Retry-After. |
| 503 | Monitoring este temporar indisponibil. | Reîncearcă puțin mai târziu. |
1{2 "error": "duplicate_monitor",3 "meta": {4 "message": "You already have a monitor for this company.",5 "request_credit_cost": 0,6 "credits_remaining": 1457 }8}