/v1/account/monitors

account/monitors

Monitoring: have companies monitored, create, pause, delete.

Costs and limits

Costs and limits
What Credits
Monitor checked every day, for 30 days 50
Monitor checked every 3 days, for 30 days 40
Monitor checked every 7 days, for 30 days 20
Monitor checked every 30 days, for 30 days 10
Each further successful check in the period +2

Limit: 30 requests per minute. Create, update and delete: 10 per minute.

curl -G "https://handelsregister.ai/api/v1/account/monitoring/pricing" \
  -H "x-api-key: YOUR_API_KEY" \
  --data-urlencode 'poll_interval_days=7'
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}
200 · Example response: price for a monitor with a check every 7 days

How a monitor works

Status
Status Meaning
initializing Created; baseline and activation are running.
active Checks at the chosen interval.
paused_user Paused by you.
paused_configuration No active, verified webhook endpoint is connected any more.
paused_billing Your balance does not cover the cycle or an extra check. Or the price has changed and waits for your consent.
error Several checks in a row have failed.
archived Ended for good. You can still read the monitor by its ID, but it no longer appears in the list.

Endpoints

Method
Method Path Purpose
GET /v1/account/monitors All monitors, newest first, without archived ones.
POST /v1/account/monitors Create a monitor.
GET /v1/account/monitors/{id} One monitor with its cycle and latest checks.
PATCH /v1/account/monitors/{id} Change the check interval.
POST /v1/account/monitors/{id}/pause Pause.
POST /v1/account/monitors/{id}/resume Resume.
DELETE /v1/account/monitors/{id} Archive.
GET /v1/account/monitoring/pricing Price of an interval.

Idempotency-Key

Create a monitor

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"
    ]
}'
Parameters
Name Type Description Example
Idempotency-KeyHeader stringrequired A unique value per operation, ideally a UUID. See Idempotency-Key.Limits: 1 to 128 characters req-20260802-01
entity_idBody stringrequired The company's entity_id from fetch-organization or search-organizations.Limits: 1 to 128 characters 94eb910fef13f94585c48c263fa446d4
labelBody stringoptional A name for the monitor.Limits: at most 200 characters Hetzner Online GmbH
poll_interval_daysBody integerrequired Check interval in days.Limits: 1 to 30 7
endpoint_idsBody list of stringrequired The IDs of your webhook endpoints (wep_…). Each must be active and verified.Limits: 1 to 10 entries ["wep_01m6b3j1g0cdz98hw8zdefbf52"]
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}
202 · Example response: a new monitor, in our example for Hetzner Online GmbH, Ansbach HRB 6089
Through the API you set the webhook endpoints when you create the monitor. You connect another webhook endpoint under Account › Monitoring with “Connect destination”, at no extra cost.

List and update monitors

curl -G "https://handelsregister.ai/api/v1/account/monitors/mon_01m65pn3vm11sjjp1j076cbvec" \
  -H "x-api-key: YOUR_API_KEY"
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}
200 · Example response: an active monitor with a daily check, again for Hetzner Online GmbH
Fields of a monitor
Field Meaning
id ID of the monitor, starts with mon_.
entity_id The monitored company.
poll_interval_days Check interval in days.
status, status_reason Status, see above. status_reason gives the reason.
baseline_completed_at, activated_at, last_succeeded_at Times of the baseline, the activation and the last successful check.
next_poll_at The next scheduled check, only for active monitors.
billing_cycle The current cycle: start, end, price, included checks and checks done so far.
recent_runs The latest checks with result, billing and the number of new signals in events_new.
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
}'
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}
200 · Example response: interval changed to 30 days

Pause, resume, archive

curl -X POST "https://handelsregister.ai/api/v1/account/monitors/mon_01m6b3m7945dn7cyvexzv41kjz/resume" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
If you disable or archive a webhook endpoint, all monitors without another webhook endpoint pause with paused_configuration. After you enable the webhook endpoint, resume the monitor with resume.

Errors

Errors
Status Cause What you can do
400 api_key is in the URL. Send the key in the header x-api-key.
400 The Idempotency-Key has an invalid format. Correct the format, for example use a UUID.
401 No API key or token, or an invalid one. Send the key in the header x-api-key.
403 The bearer token lacks the ability account:read. Use the API key or a token with account:read.
403 Your account's email address is not confirmed yet, or the account is locked. Open the link from the confirmation email. If the account is locked, support can help.
403 The bearer token lacks the ability monitoring:manage. Use the API key or the admin token.
404 No monitor with this ID in your account. Check the ID.
409 A monitor already exists for this company (duplicate_monitor). Use the existing monitor or archive it first.
409 The Idempotency-Key was already used with different data, is older than 24 hours, or is still being processed. Use a new key or wait briefly.
422 A value is invalid: invalid_subject, invalid_interval, endpoint_required, monitor_limit or not_resumable. Correct the value.
428 The header Idempotency-Key is missing. Send the header.
429 Too many requests. Retry after Retry-After.
429 creation_rate_limited: too many new monitors within 24 hours. Retry after Retry-After.
503 Monitoring is temporarily unavailable. Retry a little later.
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}
409 · A second monitor for the same company