/v1/account/monitors
account/monitors
Monitoring: få virksomheder overvåget, opret, sæt på pause, slet.
En monitor overvåger en virksomhed for dig. Med et fast interval tjekker vi for nye signaler og sender hvert nyt signal via webhook til dine webhook-endpoints.
Omkostninger og grænser
| Hvad | Kreditter |
|---|---|
| Monitor tjekket hver dag i 30 dage | 50 |
| Monitor tjekket hver 3. dag i 30 dage | 40 |
| Monitor tjekket hver 7. dag i 30 dage | 20 |
| Monitor tjekket hver 30. dag i 30 dage | 10 |
| Hvert yderligere vellykket tjek i perioden | +2 |
Grænse: 30 forespørgsler pr. minut. Opret, opdater og slet: 10 pr. minut.
Oprettelse af en monitor og den første baseline er gratis. En cyklus på 30 dage afregnes, så snart monitoren bliver aktiv. Prisen afhænger af tjekintervallet og dækker alle tjek, som intervallet planlægger inden for én cyklus.
Et interval mellem to trin koster lige så meget som det næste hyppigere trin: hver fjerde dag koster lige så meget som hver tredje dag.
Ekstra tjek sker primært, når du forkorter intervallet midt i en cyklus. Hvert vellykket ekstra tjek koster beløbet i tabellen.
Efter 30 dage fornyes cyklussen automatisk til den pris, der gælder på det tidspunkt. Mislykkede tjek koster intet. Når du sætter på pause, arkiverer eller ændrer intervallet, refunderer vi intet.
Hver konto kan have op til 50 monitors på samme tid, én pr. virksomhed. Inden for 24 timer kan du oprette op til 50 monitors; arkiverede tæller med.
Prisen for et interval får du gratis med GET /v1/account/monitoring/pricing, her for et tjek hver syvende dag:
curl -G "https://handelsregister.ai/api/v1/account/monitoring/pricing" \ -H "x-api-key: DIN_API_NOEGLE" \ --data-urlencode 'poll_interval_days=7'
import requests response = requests.get( "https://handelsregister.ai/api/v1/account/monitoring/pricing", headers={"x-api-key": "DIN_API_NOEGLE"}, 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": "DIN_API_NOEGLE" }, }); 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}
Sådan fungerer en monitor
- Opret. Du angiver virksomheden, tjekintervallet og mindst ét verificeret webhook-endpoint. Monitoren starter med status
initializing. - Baseline. Vi registrerer de seneste dages signaler som kendte. De leveres ikke, så du kun får det, der er nyt derefter.
- Aktivér. Vi afregner cyklussen, monitoren bliver
activeog tjekker første gang med det samme. - Tjek. Derefter tjekker den med det valgte interval. Hvert nyt signal udløser én besked pr. monitor til dine webhook-endpoints.
- Forny. Efter hver cyklus afregnes den næste automatisk, så længe din saldo dækker den.
Tjekintervallet ligger mellem 1 og 30 dage. Det præcise tidspunkt for et tjek kan variere inden for en time. Hvert tjek ser nogle dage tilbage, så sent offentliggjorte indførsler alligevel kommer med.
En monitor leverer Signals-emnerne i dit abonnement: fem i alle konti, Insolvenser med Pro, Omdannelser & M&A med Max. En webhook bærer det samme signal i feltet data.signal som signals.
| Status | Betydning |
|---|---|
| initializing | Oprettet; baseline og aktivering kører. |
| active | Tjekker med det valgte interval. |
| paused_user | Sat på pause af dig. |
| paused_configuration | Der er ikke længere tilknyttet noget aktivt, verificeret webhook-endpoint. |
| paused_billing | Din saldo dækker ikke cyklussen eller et ekstra tjek. Eller prisen er ændret og venter på dit samtykke. |
| error | Flere tjek i træk er mislykkedes. |
| archived | Afsluttet for altid. Du kan stadig læse monitoren via dens ID, men den vises ikke længere i listen. |
For monitors på pause og fejl forklarer status_reason hvorfor, f.eks. no_verified_endpoint eller insufficient_cycle_floor.
Endpoints
Alle stier ligger under /v1/account. Du læser og skriver med din API-nøgle i headeren x-api-key.
| Metode | Sti | Formål |
|---|---|---|
| GET |
/v1/account/monitors |
Alle monitors, nyeste først, uden arkiverede. |
| POST |
/v1/account/monitors |
Opret en monitor. |
| GET |
/v1/account/monitors/{id} |
Én monitor med dens cyklus og seneste tjek. |
| PATCH |
/v1/account/monitors/{id} |
Ændr tjekintervallet. |
| POST |
/v1/account/monitors/{id}/pause |
Sæt på pause. |
| POST |
/v1/account/monitors/{id}/resume |
Genoptag. |
| DELETE |
/v1/account/monitors/{id} |
Arkivér. |
| GET |
/v1/account/monitoring/pricing |
Pris for et interval. |
Idempotency-Key
Hver skriveforespørgsel kræver headeren Idempotency-Key, en entydig værdi pr. handling, helst et UUID. Uden den svarer API’et med 428.
Gentager du en forespørgsel med samme nøgle og samme data inden for 24 timer, får du det gemte svar tilbage. Det har headeren Idempotency-Status: replayed. Sådan opretter en netværksfejl ikke en monitor nummer to.
Det gælder også fejlsvar. Til et nyt forsøg efter en rettelse bruger du derfor en ny nøgle. Den samme nøgle med andre data returnerer 409.
Op til 128 tegn er tilladt: bogstaver, cifre og . _ : -. Det første tegn er et bogstav eller et ciffer. En nøgle i ethvert andet format returnerer 400.
Opret en monitor
Du skal bruge virksomhedens entity_id og mindst ét verificeret webhook-endpoint, se account/webhook-endpoints.
curl -X POST "https://handelsregister.ai/api/v1/account/monitors" \ -H "x-api-key: DIN_API_NOEGLE" \ -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": "DIN_API_NOEGLE", "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": "DIN_API_NOEGLE", "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();
| Navn | Type | Beskrivelse | Eksempel |
|---|---|---|---|
| Idempotency-KeyHeader | strengpåkrævet | En entydig værdi pr. handling, helst et UUID. Se Idempotency-Key.Grænser: 1 til 128 tegn |
req-20260802-01 |
| entity_idBody | strengpåkrævet |
Virksomhedens entity_id fra fetch-organization eller search-organizations.Grænser: 1 til 128 tegn |
94eb910fef13f94585c48c263fa446d4 |
| labelBody | strengvalgfri | Et navn til monitoren.Grænser: højst 200 tegn |
Hetzner Online GmbH |
| poll_interval_daysBody | heltalpåkrævet | Tjekinterval i dage.Grænser: 1 til 30 |
7 |
| endpoint_idsBody | liste af stringpåkrævet |
ID’erne på dine webhook-endpoints (wep_…). Hvert skal være aktivt og verificeret.Grænser: 1 til 10 poster |
["wep_01m6b3j1g0cdz98hw8zdefbf52"] |
API’et svarer med 202: monitoren er oprettet, og baseline og aktivering kører i baggrunden. meta.billing.charged_credits viser, at der ikke er afregnet noget for det.
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}
List og opdater monitors
GET /v1/account/monitors returnerer op til 100 monitors under monitors, med total. Arkiverede er ikke med i listen.
GET /v1/account/monitors/{id} viser desuden den aktuelle cyklus i billing_cycle og de seneste tjek i recent_runs.
curl -G "https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec" \ -H "x-api-key: DIN_API_NOEGLE"
import requests response = requests.get( "https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec", headers={"x-api-key": "DIN_API_NOEGLE"}, ) 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": "DIN_API_NOEGLE" }, }); 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}
| Felt | Betydning |
|---|---|
| id |
Monitorens ID, starter med mon_.
|
| entity_id | Den overvågede virksomhed. |
| poll_interval_days | Tjekinterval i dage. |
| status, status_reason |
Status, se ovenfor. status_reason angiver årsagen.
|
| baseline_completed_at, activated_at, last_succeeded_at | Tidspunkter for baseline, aktivering og det seneste vellykkede tjek. |
| next_poll_at | Det næste planlagte tjek, kun for aktive monitors. |
| billing_cycle | Den aktuelle cyklus: start, slutning, pris, inkluderede tjek og hidtil udførte tjek. |
| recent_runs |
De seneste tjek med resultat, afregning og antallet af nye signaler i events_new.
|
PATCH /v1/account/monitors/{id} ændrer tjekintervallet. Det næste tjek følger så med det nye interval, regnet fra ændringen.
Den aktuelle cyklus beholder sin pris og sine inkluderede tjek. Den nye pris gælder fra næste cyklus. Et kortere interval kan udløse ekstra tjek i den aktuelle cyklus.
curl -X PATCH "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz" \ -H "x-api-key: DIN_API_NOEGLE" \ -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": "DIN_API_NOEGLE", "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": "DIN_API_NOEGLE", "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}
Sæt på pause, genoptag, arkivér
POST …/{id}/pause stopper en aktiv monitor. Den betalte cyklus løber ud, og intet refunderes.
POST …/{id}/resume genoptager en monitor på pause eller en monitor med fejl. Vi tjekker webhook-endpoints, saldo og pris igen.
Inden for den aktuelle betalte cyklus koster genoptagelse intet. Er cyklussen udløbet, starter en ny cyklus nu til den aktuelle pris. meta.request_credit_cost viser beløbet.
Mangler der f.eks. et verificeret webhook-endpoint, svarer API’et stadig med 200, men med meta.activated: false. Monitorens status og status_reason angiver årsagen.
Er prisen ændret, stopper en aktiv monitor ved cyklussens udløb med pricing_consent_required. Med resume accepterer du den nye pris.
DELETE …/{id} arkiverer monitoren for altid. Det er endeligt og refunderer intet.
curl -X POST "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz/resume" \ -H "x-api-key: DIN_API_NOEGLE" \ -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": "DIN_API_NOEGLE", "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": "DIN_API_NOEGLE", "Idempotency-Key": crypto.randomUUID(), }, }); const data = await response.json();
paused_configuration. Når du har aktiveret webhook-endpointet, genoptager du monitoren med resume.
Fejl
Fejl har opbygningen {"error": "…", "meta": {"message": "…"}}. Tjek i dit program værdien af error. Teksten i meta.message er på engelsk og kan ændre sig. Fejl koster intet.
| Status | Årsag | Hvad du kan gøre |
|---|---|---|
| 400 |
api_key står i URL’en. |
Send nøglen i headeren x-api-key. |
| 400 |
Idempotency-Key har et ugyldigt format. |
Ret formatet, brug f.eks. et UUID. |
| 401 | Ingen eller en ugyldig API-nøgle eller token. |
Send nøglen i headeren x-api-key. |
| 403 |
Bearer-tokenet mangler rettigheden account:read. |
Brug API-nøglen eller et token med account:read. |
| 403 | Din kontos e-mailadresse er endnu ikke bekræftet, eller kontoen er spærret. | Åbn linket fra bekræftelsesmailen. Er kontoen spærret, kan support hjælpe. |
| 403 |
Bearer-tokenet mangler rettigheden monitoring:manage. |
Brug API-nøglen eller admin-tokenet. |
| 404 | Ingen monitor med dette ID på din konto. | Tjek ID’et. |
| 409 |
Der findes allerede en monitor for denne virksomhed (duplicate_monitor). |
Brug den eksisterende monitor, eller arkivér den først. |
| 409 |
Idempotency-Key blev allerede brugt med andre data, er ældre end 24 timer eller behandles stadig. |
Brug en ny nøgle, eller vent kort. |
| 422 |
En værdi er ugyldig: invalid_subject, invalid_interval, endpoint_required, monitor_limit eller not_resumable. |
Ret værdien. |
| 428 |
Headeren Idempotency-Key mangler. |
Send headeren. |
| 429 | For mange forespørgsler. |
Prøv igen efter Retry-After. |
| 429 |
creation_rate_limited: for mange nye monitors inden for 24 timer. |
Prøv igen efter Retry-After. |
| 503 | Monitoring er midlertidigt utilgængelig. | Prøv igen lidt senere. |
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}