/v1/account/monitors
account/monitors
Monitoring: få firmaer overvåket, opprett, sett på pause, slett.
En monitor overvåker et firma for deg. Med et fast intervall ser vi etter nye signaler og sender hvert nytt signal via webhook til webhook-endepunktene dine.
Kostnader og grenser
| Hva | Kreditter |
|---|---|
| Monitor sjekket hver dag, i 30 dager | 50 |
| Monitor sjekket hver 3. dag, i 30 dager | 40 |
| Monitor sjekket hver 7. dag, i 30 dager | 20 |
| Monitor sjekket hver 30. dag, i 30 dager | 10 |
| Hver ytterligere vellykket sjekk i perioden | +2 |
Grense: 30 forespørsler per minutt. Opprette, endre og slette: 10 per minutt.
Å opprette en monitor og den første baselinen er gratis. En syklus på 30 dager belastes så snart monitoren blir aktiv. Prisen avhenger av sjekkintervallet og dekker alle sjekker intervallet planlegger innenfor én syklus.
Et intervall mellom to trinn koster like mye som det neste, hyppigere trinnet: hver fjerde dag koster like mye som hver tredje dag.
Ekstra sjekker skjer hovedsakelig når du forkorter intervallet midt i en syklus. Hver vellykket ekstra sjekk koster beløpet i tabellen.
Etter 30 dager fornyes syklusen automatisk til prisen som da gjelder. Mislykkede sjekker koster ingenting. Når du setter på pause, arkiverer eller endrer intervallet, refunderer vi ingenting.
Hver konto kan ha opptil 50 monitorer samtidig, én per firma. Innen 24 timer kan du opprette opptil 50 monitorer; arkiverte teller også.
Prisen for et intervall får du gratis med GET /v1/account/monitoring/pricing, her for en sjekk hver sjuende dag:
curl -G "https://handelsregister.ai/api/v1/account/monitoring/pricing" \ -H "x-api-key: YOUR_API_KEY" \ --data-urlencode 'poll_interval_days=7'
import requests response = requests.get( "https://handelsregister.ai/api/v1/account/monitoring/pricing", headers={"x-api-key": "YOUR_API_KEY"}, 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": "YOUR_API_KEY" }, }); 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}
Slik fungerer en monitor
- Opprett. Du oppgir firmaet, sjekkintervallet og minst ett verifisert webhook-endepunkt. Monitoren starter med statusen
initializing. - Baseline. Vi registrerer signalene fra de siste dagene som kjente. De leveres ikke, så du får bare det som er nytt etter det.
- Aktiver. Vi belaster syklusen, monitoren blir
activeog sjekker for første gang med en gang. - Sjekk. Deretter sjekker den med det valgte intervallet. Hvert nytt signal utløser én melding per monitor til webhook-endepunktene dine.
- Forny. Etter hver syklus belastes den neste automatisk, så lenge saldoen din dekker den.
Sjekkintervallet er mellom 1 og 30 dager. Det nøyaktige tidspunktet for en sjekk kan variere innenfor en time. Hver sjekk ser noen dager tilbake, så oppføringer som publiseres sent, kommer likevel frem.
En monitor leverer Signals-temaene i abonnementet ditt: fem i hver konto, Insolvenser med Pro, Omdannelser og M&A med Max. En webhook har det samme signalet i feltet data.signal som signals.
| Status | Betydning |
|---|---|
| initializing | Opprettet; baseline og aktivering pågår. |
| active | Sjekker med det valgte intervallet. |
| paused_user | Satt på pause av deg. |
| paused_configuration | Ikke noe aktivt, verifisert webhook-endepunkt er tilkoblet lenger. |
| paused_billing | Saldoen din dekker ikke syklusen eller en ekstra sjekk. Eller prisen er endret og venter på samtykket ditt. |
| error | Flere sjekker på rad har mislyktes. |
| archived | Avsluttet for godt. Du kan fortsatt lese monitoren via ID-en, men den vises ikke lenger i listen. |
For monitorer på pause og feil forklarer status_reason hvorfor, for eksempel no_verified_endpoint eller insufficient_cycle_floor.
Endepunkter
Alle stier ligger under /v1/account. Du leser og skriver med API-nøkkelen din i headeren x-api-key.
| Metode | Sti | Formål |
|---|---|---|
| GET |
/v1/account/monitors |
Alle monitorer, de nyeste først, uten arkiverte. |
| POST |
/v1/account/monitors |
Opprett en monitor. |
| GET |
/v1/account/monitors/{id} |
Én monitor med syklus og siste sjekker. |
| PATCH |
/v1/account/monitors/{id} |
Endre sjekkintervallet. |
| POST |
/v1/account/monitors/{id}/pause |
Sett på pause. |
| POST |
/v1/account/monitors/{id}/resume |
Gjenoppta. |
| DELETE |
/v1/account/monitors/{id} |
Arkiver. |
| GET |
/v1/account/monitoring/pricing |
Pris for et intervall. |
Idempotency-Key
Hver skriveforespørsel trenger headeren Idempotency-Key, en unik verdi per operasjon, helst en UUID. Uten den svarer API-et med 428.
Gjentar du en forespørsel med samme nøkkel og samme data innen 24 timer, får du det lagrede svaret tilbake. Det har headeren Idempotency-Status: replayed. Slik oppretter ikke en nettverksfeil en monitor til.
Det gjelder også for feilsvar. For et nytt forsøk etter en rettelse bruker du derfor en ny nøkkel. Samme nøkkel med andre data gir 409.
Opptil 128 tegn er tillatt: bokstaver, sifre og . _ : -. Det første tegnet er en bokstav eller et siffer. En nøkkel i annet format gir 400.
Opprett en monitor
Du trenger firmaets entity_id og minst ett verifisert webhook-endepunkt, se account/webhook-endpoints.
curl -X POST "https://handelsregister.ai/api/v1/account/monitors" \ -H "x-api-key: YOUR_API_KEY" \ -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": "YOUR_API_KEY", "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": "YOUR_API_KEY", "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åkrevd | En unik verdi per operasjon, helst en UUID. Se Idempotency-Key.Grenser: 1 til 128 tegn |
req-20260802-01 |
| entity_idBody | strengpåkrevd |
Firmaets entity_id fra fetch-organization eller search-organizations.Grenser: 1 til 128 tegn |
94eb910fef13f94585c48c263fa446d4 |
| labelBody | strengvalgfri | Et navn på monitoren.Grenser: høyst 200 tegn |
Hetzner Online GmbH |
| poll_interval_daysBody | heltallpåkrevd | Sjekkintervall i dager.Grenser: 1 til 30 |
7 |
| endpoint_idsBody | liste med stringpåkrevd |
ID-ene til webhook-endepunktene dine (wep_…). Hvert må være aktivt og verifisert.Grenser: 1 til 10 oppføringer |
["wep_01m6b3j1g0cdz98hw8zdefbf52"] |
API-et svarer med 202: monitoren er opprettet, og baseline og aktivering kjører i bakgrunnen. meta.billing.charged_credits viser at ingenting ble belastet for dette.
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 opp og endre monitorer
GET /v1/account/monitors returnerer opptil 100 monitorer under monitors, med total. Arkiverte står ikke i listen.
GET /v1/account/monitors/{id} viser i tillegg den aktuelle syklusen i billing_cycle og de siste sjekkene i recent_runs.
curl -G "https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec" \ -H "x-api-key: YOUR_API_KEY"
import requests response = requests.get( "https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec", headers={"x-api-key": "YOUR_API_KEY"}, ) 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": "YOUR_API_KEY" }, }); 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, begynner med mon_.
|
| entity_id | Det overvåkede firmaet. |
| poll_interval_days | Sjekkintervall i dager. |
| status, status_reason |
Status, se ovenfor. status_reason oppgir årsaken.
|
| baseline_completed_at, activated_at, last_succeeded_at | Tidspunktene for baselinen, aktiveringen og den siste vellykkede sjekken. |
| next_poll_at | Den neste planlagte sjekken, bare for aktive monitorer. |
| billing_cycle | Den aktuelle syklusen: start, slutt, pris, inkluderte sjekker og sjekker utført så langt. |
| recent_runs |
De siste sjekkene med resultat, avregning og antall nye signaler i events_new.
|
PATCH /v1/account/monitors/{id} endrer sjekkintervallet. Den neste sjekken følger da med det nye intervallet, regnet fra endringen.
Den aktuelle syklusen beholder prisen og de inkluderte sjekkene. Den nye prisen gjelder fra neste syklus. Et kortere intervall kan utløse ekstra sjekker i den aktuelle syklusen.
curl -X PATCH "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz" \ -H "x-api-key: YOUR_API_KEY" \ -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": "YOUR_API_KEY", "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": "YOUR_API_KEY", "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}
Sett på pause, gjenoppta, arkiver
POST …/{id}/pause stopper en aktiv monitor. Den betalte syklusen løper ut, og ingenting refunderes.
POST …/{id}/resume gjenopptar en monitor på pause eller en monitor med feil. Vi sjekker webhook-endepunkter, saldo og pris på nytt.
Innenfor den aktuelle betalte syklusen koster gjenopptakelse ingenting. Har syklusen løpt ut, starter en ny syklus nå til gjeldende pris. meta.request_credit_cost viser beløpet.
Mangler for eksempel et verifisert webhook-endepunkt, svarer API-et likevel med 200, men med meta.activated: false. Monitorens status og status_reason oppgir årsaken.
Har prisen endret seg, stopper en aktiv monitor ved slutten av syklusen med pricing_consent_required. Med resume godtar du den nye prisen.
DELETE …/{id} arkiverer monitoren for godt. Det er endelig og refunderer ingenting.
curl -X POST "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz/resume" \ -H "x-api-key: YOUR_API_KEY" \ -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": "YOUR_API_KEY", "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": "YOUR_API_KEY", "Idempotency-Key": crypto.randomUUID(), }, }); const data = await response.json();
paused_configuration. Etter at du har aktivert webhook-endepunktet, gjenopptar du monitoren med resume.
Feil
Feil har strukturen {"error": "…", "meta": {"message": "…"}}. I programmet ditt sjekker du verdien av error. Teksten i meta.message er på engelsk og kan endre seg. Feil koster ingenting.
| Status | Årsak | Hva du kan gjøre |
|---|---|---|
| 400 |
api_key står i URL-en. |
Send nøkkelen i headeren x-api-key. |
| 400 |
Idempotency-Key har et ugyldig format. |
Rett formatet, bruk for eksempel en UUID. |
| 401 | Ingen eller ugyldig API-nøkkel eller token. |
Send nøkkelen i headeren x-api-key. |
| 403 |
Bearer-tokenet mangler rettigheten account:read. |
Bruk API-nøkkelen eller et token med account:read. |
| 403 | Kontoens e-postadresse er ikke bekreftet ennå, eller kontoen er sperret. | Åpne lenken fra bekreftelses-e-posten. Er kontoen sperret, kan support hjelpe. |
| 403 |
Bearer-tokenet mangler rettigheten monitoring:manage. |
Bruk API-nøkkelen eller admin-tokenet. |
| 404 | Ingen monitor med denne ID-en i kontoen din. | Sjekk ID-en. |
| 409 |
Det finnes allerede en monitor for dette firmaet (duplicate_monitor). |
Bruk den eksisterende monitoren eller arkiver den først. |
| 409 |
Idempotency-Key ble allerede brukt med andre data, er eldre enn 24 timer eller behandles fortsatt. |
Bruk en ny nøkkel eller vent litt. |
| 422 |
En verdi er ugyldig: invalid_subject, invalid_interval, endpoint_required, monitor_limit eller not_resumable. |
Rett verdien. |
| 428 |
Headeren Idempotency-Key mangler. |
Send headeren. |
| 429 | For mange forespørsler. |
Prøv igjen etter Retry-After. |
| 429 |
creation_rate_limited: for mange nye monitorer innen 24 timer. |
Prøv igjen etter Retry-After. |
| 503 | Monitoring er midlertidig utilgjengelig. | Prøv igjen litt 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}