/v1/account/monitors
account/monitors
Monitoring: παρακολούθηση εταιρειών, δημιουργία, παύση, διαγραφή.
Ένα monitor παρακολουθεί μια εταιρεία για σένα. Σε σταθερά διαστήματα ελέγχουμε για νέα signals και στέλνουμε κάθε νέο signal μέσω webhook στα endpoints webhook σου.
Κόστος και όρια
| Τι | Πιστώσεις |
|---|---|
| Monitor με έλεγχο κάθε ημέρα, για 30 ημέρες | 50 |
| Monitor με έλεγχο κάθε 3 ημέρες, για 30 ημέρες | 40 |
| Monitor με έλεγχο κάθε 7 ημέρες, για 30 ημέρες | 20 |
| Monitor με έλεγχο κάθε 30 ημέρες, για 30 ημέρες | 10 |
| Κάθε επιπλέον επιτυχής έλεγχος μέσα στην περίοδο | +2 |
Όριο: 30 αιτήματα ανά λεπτό. Δημιουργία, ενημέρωση και διαγραφή: 10 ανά λεπτό.
Η δημιουργία ενός monitor και η πρώτη αρχική κατάσταση είναι δωρεάν. Ένας κύκλος 30 ημερών χρεώνεται μόλις το monitor ενεργοποιηθεί. Η τιμή εξαρτάται από τη συχνότητα ελέγχου και καλύπτει όλους τους ελέγχους που προγραμματίζει η συχνότητα μέσα σε έναν κύκλο.
Μια συχνότητα ανάμεσα σε δύο βαθμίδες κοστίζει όσο η επόμενη συχνότερη βαθμίδα: κάθε τέσσερις ημέρες κοστίζει όσο κάθε τρεις ημέρες.
Επιπλέον έλεγχοι γίνονται κυρίως όταν συντομεύεις τη συχνότητα στη μέση ενός κύκλου. Κάθε επιτυχής επιπλέον έλεγχος κοστίζει το ποσό του πίνακα.
Μετά από 30 ημέρες ο κύκλος ανανεώνεται αυτόματα με την τιμή που ισχύει τότε. Οι αποτυχημένοι έλεγχοι δεν κοστίζουν τίποτα. Όταν κάνεις παύση, αρχειοθέτηση ή αλλάζεις τη συχνότητα, δεν επιστρέφουμε τίποτα.
Κάθε λογαριασμός μπορεί να έχει έως 50 monitors ταυτόχρονα, ένα ανά εταιρεία. Μέσα σε 24 ώρες μπορείς να δημιουργήσεις έως 50 monitors· μετρούν και τα αρχειοθετημένα.
Την τιμή μιας συχνότητας τη λαμβάνεις δωρεάν με GET /v1/account/monitoring/pricing, εδώ για έλεγχο κάθε επτά ημέρες:
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}
Πώς λειτουργεί ένα monitor
- Δημιουργία. Ορίζεις την εταιρεία, τη συχνότητα ελέγχου και τουλάχιστον ένα επαληθευμένο endpoint webhook. Το monitor ξεκινά με την κατάσταση
initializing. - Αρχική κατάσταση. Καταγράφουμε τα signals των τελευταίων λίγων ημερών ως γνωστά. Δεν παραδίδονται, οπότε λαμβάνεις μόνο ό,τι νέο προκύψει μετά.
- Ενεργοποίηση. Χρεώνουμε τον κύκλο, το monitor γίνεται
activeκαι ελέγχει αμέσως για πρώτη φορά. - Έλεγχος. Στη συνέχεια ελέγχει με τη συχνότητα που επέλεξες. Κάθε νέο signal προκαλεί ένα μήνυμα ανά monitor στα endpoints webhook σου.
- Ανανέωση. Μετά από κάθε κύκλο χρεώνεται αυτόματα ο επόμενος, εφόσον το υπόλοιπό σου τον καλύπτει.
Η συχνότητα ελέγχου είναι μεταξύ 1 και 30 ημερών. Η ακριβής ώρα ενός ελέγχου μπορεί να διαφέρει μέσα σε μία ώρα. Κάθε έλεγχος κοιτάζει λίγες ημέρες πίσω, ώστε να φτάνουν και εγγραφές που δημοσιεύτηκαν καθυστερημένα.
Ένα monitor παραδίδει τα θέματα Signals του πλάνου σου: πέντε σε κάθε λογαριασμό, Αφερεγγυότητες με Pro, Μετασχηματισμοί & M&A με Max. Ένα webhook μεταφέρει στο πεδίο data.signal το ίδιο signal με το signals.
| Κατάσταση | Σημασία |
|---|---|
| initializing | Δημιουργήθηκε· η αρχική κατάσταση και η ενεργοποίηση εκτελούνται. |
| active | Ελέγχει με τη συχνότητα που επιλέχθηκε. |
| paused_user | Σε παύση από εσένα. |
| paused_configuration | Δεν είναι πλέον συνδεδεμένο κανένα ενεργό, επαληθευμένο endpoint webhook. |
| paused_billing | Το υπόλοιπό σου δεν καλύπτει τον κύκλο ή έναν επιπλέον έλεγχο. Ή η τιμή έχει αλλάξει και περιμένει τη συναίνεσή σου. |
| error | Πολλοί διαδοχικοί έλεγχοι απέτυχαν. |
| archived | Τερματίστηκε οριστικά. Μπορείς ακόμη να διαβάσεις το monitor με το ID του, αλλά δεν εμφανίζεται πλέον στη λίστα. |
Για monitors σε παύση και σφάλματα, το status_reason εξηγεί το γιατί, για παράδειγμα no_verified_endpoint ή insufficient_cycle_floor.
Endpoints
Όλες οι διαδρομές βρίσκονται στο /v1/account. Διαβάζεις και γράφεις με το κλειδί API σου στο header x-api-key.
| Μέθοδος | Διαδρομή | Σκοπός |
|---|---|---|
| GET |
/v1/account/monitors |
Όλα τα monitors, τα νεότερα πρώτα, χωρίς τα αρχειοθετημένα. |
| POST |
/v1/account/monitors |
Δημιουργία monitor. |
| GET |
/v1/account/monitors/{id} |
Ένα monitor με τον κύκλο του και τους πιο πρόσφατους ελέγχους. |
| PATCH |
/v1/account/monitors/{id} |
Αλλαγή της συχνότητας ελέγχου. |
| POST |
/v1/account/monitors/{id}/pause |
Παύση. |
| POST |
/v1/account/monitors/{id}/resume |
Συνέχιση. |
| DELETE |
/v1/account/monitors/{id} |
Αρχειοθέτηση. |
| GET |
/v1/account/monitoring/pricing |
Τιμή μιας συχνότητας. |
Idempotency-Key
Κάθε αίτημα εγγραφής χρειάζεται το header Idempotency-Key, μια μοναδική τιμή ανά λειτουργία, ιδανικά ένα UUID. Χωρίς αυτό το API απαντά με 428.
Αν επαναλάβεις ένα αίτημα με το ίδιο κλειδί και τα ίδια δεδομένα μέσα σε 24 ώρες, λαμβάνεις πίσω την αποθηκευμένη απάντηση. Φέρει το header Idempotency-Status: replayed. Έτσι ένα σφάλμα δικτύου δεν δημιουργεί δεύτερο monitor.
Αυτό ισχύει και για απαντήσεις σφάλματος. Γι’ αυτό για μια νέα προσπάθεια μετά από διόρθωση, χρησιμοποίησε νέο κλειδί. Το ίδιο κλειδί με διαφορετικά δεδομένα επιστρέφει 409.
Επιτρέπονται έως 128 χαρακτήρες: γράμματα, ψηφία και . _ : -. Ο πρώτος χαρακτήρας είναι γράμμα ή ψηφίο. Ένα κλειδί σε οποιαδήποτε άλλη μορφή επιστρέφει 400.
Δημιουργία monitor
Χρειάζεσαι το entity_id της εταιρείας και τουλάχιστον ένα επαληθευμένο endpoint webhook, βλ. 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();
| Όνομα | Τύπος | Περιγραφή | Παράδειγμα |
|---|---|---|---|
| Idempotency-KeyHeader | stringυποχρεωτικό | Μια μοναδική τιμή ανά λειτουργία, ιδανικά ένα UUID. Βλ. Idempotency-Key.Όρια: 1 έως 128 χαρακτήρες |
req-20260802-01 |
| entity_idBody | stringυποχρεωτικό |
Το entity_id της εταιρείας από το fetch-organization ή το search-organizations.Όρια: 1 έως 128 χαρακτήρες |
94eb910fef13f94585c48c263fa446d4 |
| labelBody | stringπροαιρετικό | Ένα όνομα για το monitor.Όρια: το πολύ 200 χαρακτήρες |
Hetzner Online GmbH |
| poll_interval_daysBody | integerυποχρεωτικό | Συχνότητα ελέγχου σε ημέρες.Όρια: 1 έως 30 |
7 |
| endpoint_idsBody | λίστα από stringυποχρεωτικό |
Τα ID των endpoints webhook σου (wep_…). Το καθένα πρέπει να είναι ενεργό και επαληθευμένο.Όρια: 1 έως 10 καταχωρίσεις |
["wep_01m6b3j1g0cdz98hw8zdefbf52"] |
Το API απαντά με 202: το monitor δημιουργήθηκε, και η αρχική κατάσταση και η ενεργοποίηση εκτελούνται στο παρασκήνιο. Το meta.billing.charged_credits δείχνει ότι δεν χρεώθηκε τίποτα γι’ αυτό.
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}
Λίστα και ενημέρωση monitors
Το GET /v1/account/monitors επιστρέφει έως 100 monitors στο monitors, με total. Τα αρχειοθετημένα δεν περιλαμβάνονται στη λίστα.
Το GET /v1/account/monitors/{id} δείχνει επιπλέον τον τρέχοντα κύκλο στο billing_cycle και τους πιο πρόσφατους ελέγχους στο 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}
| Πεδίο | Σημασία |
|---|---|
| id |
ID του monitor, ξεκινά με mon_.
|
| entity_id | Η εταιρεία που παρακολουθείται. |
| poll_interval_days | Συχνότητα ελέγχου σε ημέρες. |
| status, status_reason |
Κατάσταση, βλ. παραπάνω. Το status_reason δίνει την αιτία.
|
| baseline_completed_at, activated_at, last_succeeded_at | Χρονικές στιγμές της αρχικής κατάστασης, της ενεργοποίησης και του τελευταίου επιτυχούς ελέγχου. |
| next_poll_at | Ο επόμενος προγραμματισμένος έλεγχος, μόνο για ενεργά monitors. |
| billing_cycle | Ο τρέχων κύκλος: έναρξη, λήξη, τιμή, έλεγχοι που περιλαμβάνονται και έλεγχοι που έχουν γίνει ως τώρα. |
| recent_runs |
Οι πιο πρόσφατοι έλεγχοι με αποτέλεσμα, χρέωση και το πλήθος νέων signals στο events_new.
|
Το PATCH /v1/account/monitors/{id} αλλάζει τη συχνότητα ελέγχου. Ο επόμενος έλεγχος ακολουθεί τότε με τη νέα συχνότητα, μετρώντας από την αλλαγή.
Ο τρέχων κύκλος διατηρεί την τιμή του και τους ελέγχους που περιλαμβάνει. Η νέα τιμή ισχύει από τον επόμενο κύκλο. Μια συντομότερη συχνότητα μπορεί να προκαλέσει επιπλέον ελέγχους στον τρέχοντα κύκλο.
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}
Παύση, συνέχιση, αρχειοθέτηση
Το POST …/{id}/pause σταματά ένα ενεργό monitor. Ο πληρωμένος κύκλος συνεχίζει μέχρι να λήξει, και δεν επιστρέφεται τίποτα.
Το POST …/{id}/resume συνεχίζει ένα monitor σε παύση ή ένα monitor με σφάλμα. Ελέγχουμε ξανά endpoints webhook, υπόλοιπο και τιμή.
Μέσα στον τρέχοντα πληρωμένο κύκλο, η συνέχιση δεν κοστίζει τίποτα. Αν ο κύκλος έχει λήξει, ξεκινά τώρα νέος κύκλος με την τρέχουσα τιμή. Το meta.request_credit_cost δείχνει το ποσό.
Αν, για παράδειγμα, λείπει ένα επαληθευμένο endpoint webhook, το API απαντά παρ’ όλα αυτά με 200, αλλά με meta.activated: false. Η κατάσταση του monitor και το status_reason δίνουν την αιτία.
Αν η τιμή έχει αλλάξει, ένα ενεργό monitor σταματά στο τέλος του κύκλου με pricing_consent_required. Με το resume συμφωνείς με τη νέα τιμή.
Το DELETE …/{id} αρχειοθετεί οριστικά το monitor. Αυτό είναι τελικό και δεν επιστρέφει τίποτα.
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. Αφού ενεργοποιήσεις το endpoint webhook, συνέχισε το monitor με resume.
Σφάλματα
Τα σφάλματα έχουν τη δομή {"error": "…", "meta": {"message": "…"}}. Στο πρόγραμμά σου, έλεγχε την τιμή του error. Το κείμενο στο meta.message είναι στα αγγλικά και μπορεί να αλλάξει. Τα σφάλματα δεν κοστίζουν τίποτα.
| Status | Αιτία | Τι μπορείς να κάνεις |
|---|---|---|
| 400 |
Το api_key βρίσκεται στο URL. |
Στείλε το κλειδί στο header x-api-key. |
| 400 |
Το Idempotency-Key έχει μη έγκυρη μορφή. |
Διόρθωσε τη μορφή, για παράδειγμα χρησιμοποίησε ένα UUID. |
| 401 | Κανένα κλειδί API ή token ή μη έγκυρο. |
Στείλε το κλειδί στο header x-api-key. |
| 403 |
Στο bearer token λείπει το δικαίωμα account:read. |
Χρησιμοποίησε το κλειδί API ή ένα token με account:read. |
| 403 | Η διεύθυνση email του λογαριασμού σου δεν έχει επιβεβαιωθεί ακόμη ή ο λογαριασμός είναι κλειδωμένος. | Άνοιξε τον σύνδεσμο από το email επιβεβαίωσης. Αν ο λογαριασμός είναι κλειδωμένος, η υποστήριξη μπορεί να βοηθήσει. |
| 403 |
Στο bearer token λείπει το δικαίωμα monitoring:manage. |
Χρησιμοποίησε το κλειδί API ή το admin token. |
| 404 | Κανένα monitor με αυτό το ID στον λογαριασμό σου. | Έλεγξε το ID. |
| 409 |
Υπάρχει ήδη monitor για αυτή την εταιρεία (duplicate_monitor). |
Χρησιμοποίησε το υπάρχον monitor ή αρχειοθέτησέ το πρώτα. |
| 409 |
Το Idempotency-Key έχει ήδη χρησιμοποιηθεί με διαφορετικά δεδομένα, είναι παλαιότερο από 24 ώρες ή βρίσκεται ακόμη υπό επεξεργασία. |
Χρησιμοποίησε νέο κλειδί ή περίμενε λίγο. |
| 422 |
Μια τιμή δεν είναι έγκυρη: invalid_subject, invalid_interval, endpoint_required, monitor_limit ή not_resumable. |
Διόρθωσε την τιμή. |
| 428 |
Λείπει το header Idempotency-Key. |
Στείλε το header. |
| 429 | Πάρα πολλά αιτήματα. |
Δοκίμασε ξανά μετά το Retry-After. |
| 429 |
creation_rate_limited: πάρα πολλά νέα monitors μέσα σε 24 ώρες. |
Δοκίμασε ξανά μετά το Retry-After. |
| 503 | Το Monitoring δεν είναι προσωρινά διαθέσιμο. | Δοκίμασε ξανά λίγο αργότερα. |
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}