Documentation ▸

Alerts

What has changed since you were answered.

An answer can change after it was given — a later gift takes a client over the year's limit, two recipient records turn out to be one person, a new version of the law is published. Himmel never edits the earlier answer. It issues a new one, and tells you here.

GET /v1/alerts lists them, newest first, and filters by type and status:

TypeRaised when
check.recheckedAn earlier answer has been issued again. payload.was and payload.now say what moved, for the law and for each of your policies; reason why, and by_user the person whose approval or decision issued it again, where one did.
checks.rerunAnswers have been issued again because the rules changed: your rule owner confirmed or flagged rules, or a version or a policy was published. One alert for all of them: payload.cause says what happened, reissued how many answers were issued again and changed how many of them moved state or an outcome, against_rules how many of them are actions you took that now stand against your rules, and checks is the check log query that lists them.
check.against_rulesAn action you reported as taken was not allowed by your own rules as taken: a policy of yours answered not_allowed, needs_approval, hand_to_a_person — any outcome but allowed and not_applicable. One alert an action, whichever way it came to stand so: sent as taken, asked about and then reported done, corrected or completed, or turned by a later booking. payload.check_id is the answer that stands, actor who acted, cause how it came about, and against each policy that said so — its rule, the rule's title, the outcome, and the approver it names, where it names one. An ask raises none: the tool that asked was told.
check.rule_set_brokenAn action that happened could not be checked: its rules could not run on its facts. It is kept, counts in every total as an action taken, and is answered not_covered with the reason rule_set_broken until a version of the rules that can answer it is confirmed, when it is checked again. payload.check_id is that answer, detail what the rules said, naming rules and facts and never a value you sent. One alert an action.
check.handed_overAn agent asked about an action, and your rules hand it to the person they name (to on the rule, handed_to on the answer's layer). payload.check_id is the answer that handed it over, handed_to the person, actor the agent, action the action's first booking, and rule_set, rule, its title and the outcome the rule that said so. One alert for each action and person: the agent asking again about the same action raises none. A notice: nothing waits on the person in Himmel, and they act in your own systems.
rule_set.version.publishedA new version of a rule set you use is published, with a summary of what changed and the rules now waiting for your rule owner. payload.by_user is the person of yours who published it - null for our law.
recipient.probable_matchTwo recipient records may be one person, and a person needs to answer.
confirmation.overdueAnswers given for actions you took wait on rules of a version that applies today and that your rule owner has not confirmed yet. payload.waiting says how many answers wait, and payload.pending lists the rules still to confirm. Raised once per version, and only once an answer waits: a version just published, whose rules nothing has reached yet, is not overdue, and neither is an ask about an action not yet taken.

A re-check is stored whenever any part of an answer moved, down to the year-to-date total it reports. An alert is raised when the state or an outcome moved — the changes someone has to act on.

For software that acted on an answer

An agent that acted on an answer learns here that the answer has changed. A key made for an agent lists the alerts about its own agent's actions alone - an answer given again, an action taken against your rules or handed to a person, one your rules could not answer - never another agent's or your account's own news; your account's own keys list every one. Each check.rechecked alert carries the new answer's check_id and the one it supersedes: poll GET /v1/alerts?type=check.rechecked and look for the check_ids you acted on under payload.supersedes. A checks.rerun alert covers many answers at once, so it links to them instead: follow payload.checks, and each answer listed names the one it replaced in supersedes_check_id. GET /v1/checks/{id} on an old answer shows superseded_by either way. Signed webhooks are not offered yet: polling is the interface.

Acknowledging

POST /v1/alerts/{id}/acknowledge marks an alert as seen. It changes nothing else: an alert has one status, shared by every caller, and is emailed to your admins whatever it is. A person marks one seen on the console's Home the same way, so software of yours that reads open alerts sees it seen too. acknowledged_by names who saw it — from one of your account's own keys a person in your account, signed in yourself — and a key made for an agent marks seen only the alerts it lists, any other being 404 not-found to it, and names nobody (422 invalid-request, not_the_keys).

Each alert is also emailed once to your account's admins - but never to the person whose own act it reports: a version they published, an answer their approval or decision issued again (by_user). Where they are your only admin it is emailed to nobody, and listed here for everyone all the same. The email says what it is about in your words, as the console does: a playbook by its title, a rule by its title, an agent by its role, and a changed answer by its action - what it came to, who asked, under which playbook - with what it was and is now. The listing's emailed_at and emailed_to say when everyone it goes to had been emailed, and how many it reached: a person whose mail server refused their address is not counted, and the others are emailed all the same. The email links the console's page for what it reports - the answer in the check log, a version's confirmation page, the review queue - the one Home links the same alert to. An action handed over goes to the person it is handed to alone, at once - never to your admins, who read it here and on Home. An action taken against your rules goes to the approver its rule names as well, and in one summary a day to each of them, grouped by rule — unless its rule is one your owner has chosen to hear of at once, under the setting emailed_at_once (a list of your policies' rule ids), which is emailed as it happens; payload.emailed says which. An alert belongs to the environment it is about, and in an account with live and test, one raised by test data is listed to test keys and emailed to nobody: trying an integration never reaches your finance team's inbox. The sandbox, which is test only, emails its own.

Endpoints

GET/v1/alertsScope checks:read

What has changed since you last looked

Newest first. check.rechecked means an answer you were given has been issued again - payload.was and payload.now say what moved - and a caller that acted on the earlier answer learns it here. check.against_rules means an action reported as taken was not allowed by your own rules as taken - not_allowed, needs_approval, hand_to_a_person - one alert an action. check.rule_set_broken means an action that happened could not be checked, its rules unable to run on its facts: it is kept, counts in every total, and is answered not_covered until a version that can answer it is confirmed. check.handed_over means an agent asked about an action your rules hand to the person they name, who is told: one alert for each action and person. The others: a new version published, a probable match to answer, and confirmations still pending once a version is in force. Poll it; webhooks come later.

Needs a key with the scope checks:read. From a key made for an agent it reads that agent's own alone: another agent's action is 403 not-the-agents-action, another agent's record 403 insufficient-scope.

Parameters

  • typequery · string or null
  • statusquery · string or null
  • limitquery · integer

Responses

200 Successful response
  • alertslist of Alertrequired
    9 fields
    • alert_idstringrequired
    • typestringrequired

      rule_set.version.published, check.rechecked, checks.rerun, recipient.probable_match, confirmation.overdue, check.against_rules, check.rule_set_broken or check.handed_over.

    • payloadobjectrequired

      What changed: for rule_set.version.published, the rule_set, its version and the day it applies from (effective_from), the rules still pending, and by_user, the person of yours who published it, null for our law; for check.rechecked, was and now, and by_user, the person whose approval or decision issued it again, null for any other cause; for checks.rerun, its cause, how many answers it checked again (reissued) and changed (changed), how many of them are actions taken that now stand against your rules (against_rules), and checks, the query that lists them; for confirmation.overdue, the rule_set and version, the rules still pending, and how many answers wait on them (waiting); for check.against_rules, an action taken that your own rules did not allow as taken - the check_id of the answer that stands, transaction_id, effective_date, who acted (actor), the cause, whether it is emailed at once or in the day's summary (emailed), and against: each policy that said so, its rule_set, rule_version, the rule and its title, the outcome, and the approver it named, where it named one; for check.rule_set_broken, an action that happened whose rules could not run on its facts, kept and answered not_covered - the check_id, transaction_id, the rule_set its check named, effective_date and the answer's detail; for check.handed_over, an action an agent asked about that your rules hand to the person they name - the check_id that handed it over, transaction_id, action (its first booking), handed_to, effective_date, the agent (actor), and the policy that said so: rule_set, rule_version, the rule, its title and the outcome.

    • status"open" | "acknowledged"required
    • created_atstringrequired
    • acknowledged_bystring or null
    • acknowledged_atstring or null
    • emailed_atstring or null
    • emailed_tointeger or null

      How many people it was emailed to: your admins, and for check.against_rules the approvers it names as well - never the person whose own act it reports (by_user): 0 where they are your only admin; for check.handed_over the person it hands the action to alone. A person whose mail server refused their address is not counted, and the others are emailed all the same.

  • 401No API key was sent, or it is not in use (unauthorized).
  • 403The caller may not do this, and type says why: the key or role lacks the scope, the rule set is not enabled for this account, the person signed in belongs to no account, names were asked for by a caller that is not shown them, or a request acting in test tried to change the account's settings (live-only).
  • 422The request, or a fact in it, is not in the documented shape - a query parameter the operation does not take included, which is named (unknown_parameter) rather than ignored - or its Himmel-Env does not fit the caller. Missing facts are not errors.
  • 429More requests in a minute than the key's or the person's limit (rate-limited) - or, opening an account, more accounts in a day than the deployment opens, with Retry-After saying when to try again.
  • 500Something failed on our side. X-Request-Id identifies it in our logs.
POST/v1/alerts/{alert_id}/acknowledgeScope checks:write

Mark an alert as seen

An alert has one status, shared by every caller of its environment, and is emailed to your admins whatever it is. acknowledged_by names who saw it: yourself, signed in; from one of the account's own keys, a person in the account, or nobody. A key made for an agent names nobody but itself, and naming anybody is 422 invalid-request (not_the_keys).

Parameters

  • alert_idpath · stringrequired
  • Idempotency-Keyheader · string or null

    Makes a retry safe: the same key with the same request within 24 hours gets the first answer again, and nothing is done twice. The same key with a different request is 409 idempotency-conflict. Keys are per environment and per path.

Request body · application/json

  • acknowledged_bystring or null

    Who did it, when your key acts for a person: their Himmel id, which the console's Developers page shows them, and Settings' People an admin. They must be in your account, with a role that could do this themselves, and the record keeps it as your key's claim. A key made for an agent names nobody but itself: leave it out. Signed in to the console, leave it out: it is you.

Responses

200 Successful response
  • alert_idstringrequired
  • status"acknowledged"required
  • 401No API key was sent, or it is not in use (unauthorized).
  • 403The caller may not do this, and type says why: the key or role lacks the scope, the rule set is not enabled for this account, the person signed in belongs to no account, names were asked for by a caller that is not shown them, or a request acting in test tried to change the account's settings (live-only).
  • 404Nothing with that id or name exists for this account.
  • 409The request conflicts with what is stored: see detail.
  • 413The request's body is larger than the operation takes, refused before any of it is read (body-too-large): a policy's files at most 5 MB, any other body 1 MB - and an uploaded file at most 20 MB (file-too-large).
  • 422The request, or a fact in it, is not in the documented shape - a query parameter the operation does not take included, which is named (unknown_parameter) rather than ignored - or its Himmel-Env does not fit the caller. Missing facts are not errors.
  • 429More requests in a minute than the key's or the person's limit (rate-limited) - or, opening an account, more accounts in a day than the deployment opens, with Retry-After saying when to try again.
  • 500Something failed on our side. X-Request-Id identifies it in our logs.