Documentation ▸

Authentication

Your account opened by signing up, or by a builder for you; API keys, scopes, your agents and a key of its own for each, and the people who sign in.

Every call carries an API key in the Authorization header:

Authorization: Bearer hk_live_...

A key belongs to one account. Keys start with hk_live_ or hk_test_, which says which environment they are for. A key is shown once, when it is created, and Himmel keeps only a hash of it: a lost key cannot be shown again. Create a new one and revoke the old. Your account's admins and engineers make and revoke keys in the console, under Settings, API keys — see Making and revoking keys.

The rule-set catalogue is the one part of the API readable without a key. See Rule sets.

GET /v1/me says which account a key belongs to, whether it is live or a test key, and the scopes it carries. The account comes with country, where your company is established (an ISO 3166-1 code such as US, AE or DE), and currency, the currency your books are kept in (an ISO 4217 code). Both are set when your account is opened, and the currency is never taken from the country: a company may keep its books in another. An account opened by signing up says the terms its person accepted, in terms.

Opening your account

Sign up in the console and open your company's account yourself, on Home: you are its first admin, and its first two keys are shown to you there, once.

  • GET /v1/terms needs no key: Himmel's terms in force, version and text. A version is never changed once published. sign_up says whether accounts are opened here: open, or closed until Himmel's terms are published, when opening one is 503 sign-up-closed.
  • POST /v1/me/account is for a person signed in to the console whom no account has added yet; a key never opens an account. It takes account - name, your company's; slug, a short name of 2 to 40 lower-case letters, digits and _, beginning with a letter, which names your account's own rule sets (policy.<slug>.<name>); country, where your company is established; currency, the one your books are kept in; and retention_years, how many years your records must be kept by your country's law, from 1 to 30 - with name, yours, where Clerk holds none for you, and terms, the version you accept. The API document lists every country and currency it takes.
  • The account opens with live and test. You are its admin; its matching rules wait for you to confirm them, as everything in it does before it answers. Its live key and its test key, each shown once, hold what a system that acts needs - check, checks:read, checks:write and rules:read - and neither confirms a rule or posts a policy: an admin makes a key that does on purpose, in Settings.
  • Refused, with nothing opened: a person in an account already (409, another_account: one person, one account), a slug another account has (409, taken), a value that is not as described (422, naming the field), the terms a version other than the one in force (422, not_in_force), and the accounts opened in a day - at most 50 for all of Himmel and 5 from one network address (429 rate-limited, with Retry-After saying in how many seconds the next can be opened). A retry with the same Idempotency-Key gets the same account, its keys' key null, and counts nothing.

Accounts for your customers

If your agents act for your customers - an AI support agent for online shops, say - open an account for each customer you serve: theirs, its owner confirming its rules, you acting there as its builder and no further. Every call needs accounts, which an admin's and an engineer's roles hold - signed in, never with a key. See Accounts for your customers.

An account a builder opened for you

If a company whose agents act for you opened your account - its builder - you are its owner. You join by taking its invitation up, signed in, accepting Himmel's terms for the account as you do - terms on the accept, the version GET /v1/me/invitations names - and you own its agents here from then: you switch any of them off, in one step. GET /v1/me names the company that opened your account (opened_by), and your agents and keys say which are its (builder). It registers its agents here and makes and revokes their keys, sends your invitation again until you join, and posts your playbook from Himmel's template; it never confirms a rule, switches a playbook on, changes a setting, names anybody or decides anything here. An admin of your account can cut it off - POST /v1/builder/cut-off, from then and for good: it acts in your account no more, and reads nothing more of it. Its agents and their keys stay as they are: switch each agent off, or revoke its keys, in a step of its own.

Live and test

Every account has two environments, live and test, and a key acts in its own. The database keeps what happens in one apart from the other: a booking, a check, a sign-off, an alert and a recipient each belong to the environment they were made in, and a request never sees the other's. A gift sent with a test key never counts toward a live recipient's yearly total, and a test key cannot read, report on or sign off a live answer. An answer given in test carries "sandbox": true; a live answer has no such field.

What your company has decided belongs to the account, and both environments read it: the rules your owner confirmed, your settings and your policies. A check in test therefore gets the answer a live one would. They are changed from live. With a test key, confirming rules, changing a setting or writing a policy is refused with 403 live-only, so a test key that leaks cannot change a live answer.

The sandbox account holds test data only: its keys are test keys, and it changes its own settings from test. GET /v1/me says so, with account.test_only.

In the console you act in live unless you switch to test, and the console then sends Himmel-Env: test with your requests. A key never needs the header, because it has an environment already; a Himmel-Env that disagrees with the key is refused.

Keys are for software, sign-in is for people

Keys are for your software and your agents. People sign in to the console, and what they may do follows from their role in your account rather than from a key. That difference shows in the record: a request made with a key can only name the person it acts for, and the record keeps who it named as the key's claim. Someone signed in has shown who they are, so a rule confirmed in the console is recorded against that person.

It shows in what comes back, too. Recipient names are shown only to people — admins and ops, signed in to the console — and a key is given recipient ids, whatever its scopes. See Recipients.

Naming a person

Five fields say who did something: by_user, confirmed_by, decided_by, resolved_by and acknowledged_by. With a key, each takes the Himmel id of a person in your account — everyone's is on the console's People page, under Settings, and your own on Developers — whose role could have done it themselves: only an admin confirms rules, for instance. Anything else is refused with 422 invalid-request, and errors says why: unknown_user when nobody in your account has that id (a name never is one), role_cannot when their role could not have done it. The refusal never repeats what you sent. Leave a field out when nobody in particular acted; resolved_by is the exception, because a resolution is somebody's decision. A key made for an agent names nobody but itself: any of these fields from it is refused with 422 invalid-request and not_the_keys, and it records no resolution at all (403 cannot-decide).

Signed in to the console, leave them out: it is you, and naming anybody else is refused (not_the_signed_in_person).

transaction.actor.on_behalf_of is different. The person an agent acts for needs no account here, so it takes your own systems' id for them — never a name or an email address.

Scopes

A key carries scopes, and each endpoint needs one. The reference for every endpoint says which.

ScopeLets the key
checksend checks and dry-run a policy version
checks:readread checks, the check log, alerts and recipients (by id: a key is never given a name)
checks:writereport what happened to a proposal, take an action back, record a resolution, acknowledge an alert
rules:readread your rule sets' wording in the catalogue, the confirmation page, your settings, your policies, your agents and what each is held to, the sandbox examples and GET /v1/me
confirmconfirm or flag rules, and change your settings
recipients:writeanswer a probable match, and undo a link between recipients
policies:writepost, edit, publish and draft your policies

A key without the scope an endpoint needs gets 403 with the problem type insufficient-scope, naming the scope it needed (required_scope) and the ones it has (scopes). confirm and policies:write change what your account has decided, so outside the sandbox they work with a live key only.

Four more scopes belong to people alone, and no key can hold them: keys, making and revoking keys, which an admin's and an engineer's roles hold; people, inviting colleagues, changing a role, removing somebody and cutting off the builder that opened your account, which only an admin's holds; agents, registering your agents, changing them and switching them off and on, which an admin's and an engineer's hold - and an agent's owner switches it off and on whatever their role; and accounts, opening accounts for your customers and acting in them as their builder, which an admin's and an engineer's hold.

A key of its own for every agent

An agent that acts for your company gets its own key, never a person's. It is registered first - see Your agents - and an admin or an engineer then makes its key in the console, for that agent, named by the id it was registered under (agt_travel_ops); it is shown once. The key identifies the agent, and every check it sends records that agent, whatever the request says — so a rule of yours that turns on who acts, "an agent refunds up to €30 on its own", reads what the key is. In the request, the agent names the person it acts for:

"transaction": {
  "status": "proposed",
  "actor": { "on_behalf_of": "emp_4f1c" }
}

It may repeat its own kind and id, and naming any other is refused with 422 invalid-request (not_the_keys). GET /v1/me says, under caller.actor, which agent a key acts as.

An agent's key carries only what an agent needs: check, checks:read, checks:write and rules:read. It asks before it acts, reports what became of its own actions, and reads what concerns its own agent alone: its answers, the requests Himmel made about them, the alerts about them, its record, its runs and the rules it is held to. Another agent's action or request is 403 not-the-agents-action, another agent's record 403 insufficient-scope, and so is anything your whole account holds - the register of agents, your people, settings, policies and their documents, confirmations, the review queue, who is who and the templates (agent_key); the rule catalogue it reads as anybody does, the law's rule sets alone, and your playbooks' worked examples it is served with itself acting, to try it with. So a key that leaks, or an agent talked into misusing its key, reads its own agent's work and nothing more. It confirms nothing and changes no setting or policy, which are your company's to do.

It speaks for itself. It names nobody: a field naming a person who did something is refused (not_the_keys), and so is a fact naming a person — who approved an action — or the figure an approval was given for, which Himmel holds for the agent (An agent never names a person); a resolution is refused whole with 403 cannot-decide — a decision is a person's, made signed in to the console or sent by your own software with one of your account's own keys. And it acts on its own actions only, those its agent took, whichever of its keys sent them: it reports on them, takes them back, completes and corrects them, and anyone else's is refused with 403 not-the-agents-action. Your account's own keys and your people act on any.

Both the agent and the person it acted for are recorded on every check. When the agent's key is replaced, the new one is made for the same agent and the record of what it did stays whole, without touching anyone's own access; to stop the agent itself, switch it off.

Your account's own keys — the two you are given when the account is opened, and any made for your own software — are tied to nobody. Your software acts for many people and agents, so it says in transaction.actor who acts in each request - an agent it names being one your account has registered, or the check is refused with 422 invalid-request (unknown_agent), so a mistyped id is never a new agent; and a person it names (kind: user) being one of your account's people, by their Himmel id - here on the day of an action taken, here now for one asked about - or 422 invalid-request (unknown_user, left_the_account), so your log never names as who acted somebody your account never had. A check that names nobody records nobody, and a rule of yours that turns on who acts answers undetermined_missing_facts with actor in missing rather than guess.

Making and revoking keys

Keys are made and revoked by a person signed in whose role holds keys — an admin, or an engineer — in the console under Settings, or through the API with their session. Never by a key: keys is a scope no key can hold, so a key that leaks cannot make more keys or revoke the ones meant to replace it.

  • GET /v1/keys lists every key of your account, live and test, newest first, revoked ones too: its prefix and name, the agent it is for (or none, for your own software), what it may do, who made it (created_by, empty for one we made for you) and when it was last used, to the minute. Never the key itself.
  • POST /v1/keys makes one: a name saying what it is for, agent for an agent's key - the id your account registered it under, 422 invalid-request (unknown_agent) for one it has not - env (live or test, your account's own when left out) and scopes. An agent's key may do at most what an agent does, all four when left out; a key for your own software may do anything your role may, and when left out the same four - send checks, report what became of an action, read the check log and the rules - so confirm, recipients:write and policies:write are given only by naming them. Nobody makes a key that can do more than they can: an engineer's keys never confirm, and asking for more is 403 insufficient-scope, naming the scope. The answer carries the key, hk_live_…, once: store it before you leave the page. A retry with the same Idempotency-Key gets the same key's record with key empty, never a second key; a key lost before it was stored is revoked and another made.
  • POST /v1/keys/{key_id}/revoke revokes one, from now and for good: the next request with it is 401, and nothing puts it back. It is never deleted — your check log still names it as the sender of what it sent. You revoke only a key that can do no more than your role, so your account's own keys, which confirm, are an admin's to revoke.

To replace an agent's key, make the new one for the same agent, move the agent to it, then revoke the old one: the agent stays the same in every rule and in your check log. Keys belong to the account, so both calls are made from live — from test they are 403 live-only; the sandbox, which has only test, makes test keys.

Your agents

Every agent that acts for your company is registered before it acts: by its own id in your systems, what it is in words, and the person in your account who answers for it, its owner. Its keys are made for it, and your own software names only an agent you have registered. An agent is answered under every playbook of yours, as anybody is; where a playbook holds an agent tighter than a person, its own rules say so. An agent whose runtime speaks MCP adds Himmel by configuration, with its own key, and reads its rules, asks and reports through Himmel's tools: see Connect an agent by MCP.

In the console, Agents lists every agent your account has registered, registers one, changes it and switches it off and on, and shows what each reads before it starts - and whether its own keys last read what applies now - and what each did, its last actions and its runs; an agent's keys are made on its page, or under Settings, picked from the agents registered. Through the API:

  • GET /v1/agents lists every agent your account has registered, in the order registered: its id, its role, its owner (a person's Himmel id), whether it is switched off (switched_off_at, switched_off_by), who registered it and when, and last_acted_at — when an action recorded as its was last asked about or taken, in the environment you ask in, whoever sent the check. That is never when one of its keys was last used, which any request sets, and sending an action's missing facts later is not acting again. And rules_read_at with rules_read — when its own key last read its rules, in the environment you ask in, and what it was given then: the versions of your rule sets, and the checksum of the text (see Rule sets). Any key or person reads it (rules:read). GET /v1/agents/{agent_id} reads one.
  • GET /v1/agents/{agent_id}/runs says what it did, run by run — each task a person dispatched it to do, as its checks named it in transaction.run (see Check) — the one it acted in last first, fifty to a page (limit, before set to the last page's next_before). For each run: on_behalf_of, everybody its actions said it acted for; first_at and last_at, when its first action was asked about or taken and when its last was; actions, how many, a completion or a correction being the action it amends; answers, what the answers that stand came to, by state and outcome; statuses, what became of the actions — taken, still asked about, not taken, taken back; and checks, the check log's query that lists exactly those actions. Its actions sent with no run are counted together in without_run. It needs checks:read, as the check log does.
  • GET /v1/runs lists every agent's runs at once, the one acted in last first, fifty to a page, each as an agent's runs give it, with agent, whose run it is: a run is its agent's, so two agents that name the same run are two runs. actor keeps one agent's runs or several's, separated by commas, and system the actions taken in these systems (codes, or none): a run then counts those actions alone, and its checks lists exactly them. from and to keep the runs that acted in that time — a moment, or a date at its midnight UTC — each with every action counted. Actions sent with no run are no run. Continue with before set to the last page's next_before, with the same filters. It needs checks:read, and a key made for an agent reads its own agent's runs alone.
  • GET /v1/map is the map of your agents, below: who answers for each, the systems they act in, and how each of their actions was answered.
  • GET /v1/agents/{agent_id}/rules gives it the rules it is held to today, in the words your rule owner confirmed, for it to read at the start of each run: see Rule sets.
  • POST /v1/agents registers one: id - letters, digits and _ . : -, up to 64, never a name or an address and never beginning usr_, fixed once registered - role, one line saying what it is ("The support assistant"), and owner, the Himmel id of a person in your account, any role. An id registered already is 409 conflict (already_registered).
  • PUT /v1/agents/{agent_id} changes its role and owner, both sent; never its id, which its checks record.
  • POST /v1/agents/{agent_id}/switch-off switches it off, from now: every request its keys send is refused with 403 agent-switched-off, and a check asking first in its name is refused the same, whoever sends it. An action reported as taken that names it is recorded and answered as any - your books hold what happened - and nothing it did is touched. POST /v1/agents/{agent_id}/switch-on puts it back, and its keys work again. A key that leaked is revoked instead, for good.

Registering and changing an agent need agents, an admin's or an engineer's; switching one off and on is theirs, and its owner's whatever their role. Agents belong to the account, as keys do: both environments read them, and they are changed from live - from test, 403 live-only. A person who owns an agent is removed once each of their agents has another owner (409 owns-agents, listing them).

The map of your agents

GET /v1/map is one window over your agents, as the console's Home draws it: every action an agent asked about or reported on the days you choose, once, by the answer that stands - never what a person did - counted by the agent that acted, the system it was taken in and the kind of answer it came to. effective_from and effective_to are the first and last day counted, both included, as each action is dated (the day it happened): the last thirty days to today where you send neither, the thirty to the last day where you send that alone, and from the first day to today where you send that alone. actor keeps one agent's actions or several's, separated by commas, and system those taken in these systems, codes or none.

Every figure comes with checks, the check log's query that lists exactly what it counts:

  • actions, every action counted;
  • agents, every agent your filters keep, in the order registered - those that did nothing on those days too, with nought - each with its role, its owner and whether it is switched off;
  • people, each person who answers for one of them, with theirs;
  • systems, where they acted, the busiest first, none for the actions whose system nobody named;
  • lines, one for each agent, system and kind of answer, and of those actions the ones taken against your rules (against_rules) and the ones waiting on an approval Himmel asked a person for (approvals_waiting), each null where there are none;
  • answers, the actions of each kind;
  • not_covered, the actions no rule of yours gave an answer for, approvals_waiting, those waiting on an approval - the review queue's, of these days - and against_rules, those taken against your rules, as check.against_rules is raised.

The kinds are those the check log's answer lists - allowed, approval, person, refused, other and open (Check) - and every action is of exactly one, so an agent's lines add up to the agent, a system's to the system, and every line to actions. It names people by their Himmel ids and no customer at all. It needs checks:read, as the check log does, and a key made for an agent maps its own agent alone. Nothing is drawn in it: how many agents and systems a picture shows, and which fold together, is the picture's.

People: invited, and removed

Nobody joins your account alone. An admin invites a colleague by the address they sign in with and the role they are to have; Clerk, which signs people in to Himmel, emails them the invitation, and they join by taking it up, signed in to the console. The first admin of a new account is the person who opened it by signing up, or - for an account we open with your company - is invited by us, or - for an account a builder opened for you - is its owner, whom the builder invited.

  • GET /v1/people lists everybody in your account and everybody who left it: their Himmel id — what every answer that names them says — their role, when they joined, and when they left and who removed them. Any key or person reads ids and roles (rules:read); a person signed in reads names; an admin reads addresses.
  • POST /v1/invitations invites a colleague: email and role (tenant_admin, tenant_engineer or tenant_ops). It runs out after seven days. Refused for an address somebody in your account signs in with, or one an invitation already waits for (409: withdraw it to send another); 503 sign-in-unavailable where Clerk could not be asked, and nothing was sent. GET /v1/invitations lists them, and POST /v1/invitations/{invitation_id}/withdraw withdraws one: nobody takes it up, and its address goes.
  • GET /v1/me/invitations and POST /v1/me/invitations/{invitation_id}/accept are the invitee's: a person signed in whom no account has added yet sees the invitations sent to an address they have signed in with, and joins by taking one up. One person, one account: somebody in an account already is refused. They join with a name - name, as their colleagues know them, one line of at most 200 characters; left out, the one Clerk holds for them, or the one they left with if they were in the account before - and where there is none of these it is 422, name required: their colleagues pick them by it, to approve and to sign off.
  • PUT /v1/me/name is for a person signed in who joined before a name was asked for: they give it, once. The same name again is answered as it stands; another, once they have one, is 409 (named_already). A key has no name: 403.
  • POST /v1/people/{person_id}/role changes a role, from now. POST /v1/people/{person_id}/remove removes a person: nobody signs in as them again, and their address goes, while every answer, confirmation, decision and approval that names them keeps naming them, by the same id and the same name. Nobody changes their own role or removes themselves, a person a setting names — who approves, who signs off — is removed once it names somebody else (409 named-in-settings, listing the settings), and your account always keeps an admin (409 last-admin).

A person who left, invited again, comes back as themselves, under the same id. An action they approved before they left stays approved by them: a report of it, a completion or a correction sent later names them as it did. Anything new — a proposal, a setting, a decision — names somebody who is here (left_the_account otherwise). These calls are made from live, like the keys'.

Rate limits

Each key may make 600 requests a minute with a live key and 60 with a test key. A person signed in to the console may make 600 a minute, in live or in test. Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. Past the limit, a request gets 429 with the problem type rate-limited, and nothing is done.

When a key is refused

StatusProblem typeWhy
401unauthorizedNo key was sent, the header is not Bearer <key>, or the key is not in use
403insufficient-scopeThe key lacks the scope the endpoint needs — for /v1/keys, /v1/invitations, a person's role or removal, opening an account and /v1/accounts, every key does
403cut-offThe owner of an account you opened cut you off from it
403rule-set-not-enabledThe rule set is not enabled for your account
403names-withheldThe request searches recipients by name, which a key never may
403live-onlyA test key tried to confirm rules, change a setting or write a policy
422invalid-requestA Himmel-Env header that disagrees with the key's environment
429rate-limitedToo many requests in the last minute

Endpoints

GET/v1/termsReadable without a key

Himmel's terms in force

The terms a person accepts opening their company's account (POST /v1/me/account): version, which they send as terms, and text, in Markdown. A version is never changed once published, and the one an account accepted is kept for as long as the account keeps its records. placeholder stands in until the terms are written, and its text says so. sign_up says whether this deployment opens accounts: closed until its terms are published, where it signs people in through Clerk's production instance.

Needs no key: it is read before anybody has an account.

Responses

200 Successful response
  • versionstringrequired

    What POST /v1/me/account is sent as terms, accepting them. A version is never changed once published. placeholder stands in until the terms are written, and its text says so.

  • textstringrequired

    The terms, in Markdown.

  • sign_up"open" | "closed"required

    Whether this deployment opens accounts: closed where it signs people in through Clerk's production instance and the terms in force are the placeholder - opening one is then 503 sign-up-closed - and open otherwise.

  • 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.
POST/v1/me/account

Open your company's account

For a person signed in to the console whom no account has added yet: you open your company's account and are its first admin. account says what it is called, its slug - which names its own rule sets - where it is established (country), the currency its books are kept in (currency, never taken from the country) and how many years its records are kept (retention_years, its country's law, never assumed); name is yours, else the one Clerk holds for you (422, name required, with neither); terms is the version of Himmel's terms you accept, the one in force (GET /v1/terms). It opens with live and test, its matching rules a draft for you to confirm, and a live and a test key, each shown here once and each holding a system's four scopes: a key that confirms rules or posts policies is made on purpose, by an admin, with POST /v1/keys. Refused: a person in an account already (409, another_account: one person, one account), a slug another account has (409, taken), a field not as described (422, naming it), a company name holding an email address or an IBAN (422 pii-in-facts), an address Clerk has not verified (409, no_verified_address), the accounts opened in a day - 50 for the whole deployment, 5 from one network address (429 rate-limited, with Retry-After saying when to try again) - Clerk not answering (503 sign-in-unavailable), and a deployment whose terms are not yet written (503 sign-up-closed) - each with nothing opened. A retry with the same Idempotency-Key gets the same account, the keys' key and your name and email null.

Needs a person signed in to the console, whom no account need have added yet: it is how they join an account, or open their company's own. No key may call it.

Parameters

  • 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

  • accountAccountFieldsrequired
    5 fields
    • namestringrequired

      The company's name, as every page of the console shows it: one line, up to 200 characters, never an email address or an IBAN (pii-in-facts).

    • slugstringrequired

      The account's short name, which names its own rule sets - policy.<slug>.<name> - so it is 2 to 40 lower-case letters, digits and _, beginning with a letter, and one account's alone (409, taken).

    • countrystring, one of 249required

      Where the company is established, as an ISO 3166-1 code: US, AE, DE - the United Kingdom is GB. Never read off the currency.

    • currencystring, one of 165required

      The currency the company's books are kept in, as an ISO 4217 code amounts are written in: USD, AED, EUR. Never taken from the country: a company may keep its books in another.

    • retention_yearsintegerrequired

      How many years the company must keep its records - its country's law, which it says, from 1 to 30 - and so how long Himmel keeps every check of the account. Never assumed.

  • termsstringrequired

    The version of Himmel's terms you accept, as GET /v1/terms gives it: the one in force (422, not_in_force, otherwise).

  • namestring or null

    Your name, as your colleagues know you. Left out, the name Clerk holds for you - your first and last name joined; where there is none it is required.

Responses

200 Successful response
  • accountAccountrequired
    9 fields
    • idstringrequired
    • slugstringrequired
    • namestringrequired
    • test_onlybooleanrequired

      true for an account that holds test data only: the sandbox. Every other has live and test.

    • retention_yearsintegerrequired

      How many years its checks are kept: the period its country's law sets for its records, stated when the account was opened. GET /v1/checks/{id} reproduces an answer for it.

    • countrystring or null

      Where the company is established, as an ISO 3166-1 code: US, AE, DE.

    • currencystring or null

      The currency its books are kept in, as an ISO 4217 code: a playbook drafted for it states its limits in this one where its document names none. Never taken from the country: a company may keep its books in another.

    • termsTermsAccepted or null

      The terms of Himmel's the account's person accepted - opening it by signing up, or, for an account a builder opened, joining it as its owner - the latest, where its admins have accepted several. Null for an account opened with us, whose terms are in its contract, and for one a builder opened until its owner joins.

      3 fields
      • versionstringrequired

        The version accepted, as GET /v1/terms gives it.

      • accepted_bystringrequired

        The Himmel id of the person who accepted them.

      • accepted_atstringrequired
    • opened_byOpenedBy or null

      The account that opened yours, for one a builder opened: its agents act for you, and it registers them and makes their keys here - never more. Null for an account opened with us or by signing up.

      4 fields
      • idstringrequired

        Its account's id: what builder says on its agents and keys.

      • namestringrequired

        Its company's name.

      • cut_off_atstring or null

        When your account cut it off, for good: it acts in your account no more - its agents act on, until you switch them off. Null while it may act.

      • cut_off_bystring or null

        The Himmel id of the person who cut it off.

  • personPersonrequired

    You, its first admin, as GET /v1/people lists you to yourself. A retry with the same Idempotency-Key gets your name and email null.

    7 fields
    • idstringrequired

      Their Himmel id, usr_…: what every answer that names them says.

    • role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"required
    • joined_atstringrequired

      When they first joined your account.

    • namestring or null

      Their name, as they gave it joining - or as Clerk held it - to a person signed in; null to a key, and for a person who joined before Himmel asked for one and has not given it yet (PUT /v1/me/name). Kept after they leave, with the evidence that names them.

    • emailstring or null

      The address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.

    • removed_atstring or null

      When they left: nobody signs in as them since. Null while they are here.

    • removed_bystring or null

      The Himmel id of the admin who removed them.

  • keyslist of ApiKeyMaderequired

    Its live key, then its test key, for your own software: each holds a system's four scopes - check, checks:read, checks:write, rules:read - and neither confirms a rule or posts a policy. key is each one itself, shown here once: store both now. A retry with the same Idempotency-Key gets their records with key null.

    13 fields
    • idstringrequired
    • prefixstringrequired

      The start of the key, hk_live_9f3Kx2: what your check log shows as its sender.

    • namestringrequired

      What it is for.

    • env"live" | "test"required
    • scopeslist of stringrequired
    • created_atstringrequired
    • keystring or nullrequired

      The key itself, hk_live_…: shown here once and never again - we keep only its fingerprint. Store it now. Null on a retry with the same Idempotency-Key, which gets the same key's record: a key lost before it was stored is revoked, and another made.

    • agentstring or null

      The agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.

    • created_bystring or null

      The Himmel id of the person of your account who made it - your account's first two, its person who opened it by signing up. Null for a key we made for you - an account's first two, when we opened it, or one made on your behalf - and for one your account's builder made, which builder says.

    • builderstring or null

      For a key the account that opened yours made for one of its agents: that account's id - its builder's, named in GET /v1/me. Null for every other key.

    • last_used_atstring or null

      When a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.

    • revoked_atstring or null

      When it was revoked, for good: a request with it since is 401. Null while it works.

    • revoked_bystring or null

      The Himmel id of the person who revoked it, where a person did.

  • 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).
  • 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.
  • 503An optional part of the service is not configured in this deployment, or a service it relies on did not answer: type says which.
POST/v1/builder/cut-offScope people

Cut off the builder that opened your account

For an account a builder opened - a company whose agents act for you: from now, and for good, it acts in your account no more - no agent registered, no key made or revoked, no playbook posted - and reads nothing more of it. Its agents and their keys are untouched: switch each agent off (POST /v1/agents/{agent_id}/switch-off), or revoke its keys, in a step of its own. One cut off already is answered as it stands; an account no builder opened is 404. An admin's, signed in.

Needs a person signed in whose role carries people: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • 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.

Responses

200 Successful response
  • idstringrequired

    Its account's id: what builder says on its agents and keys.

  • namestringrequired

    Its company's name.

  • cut_off_atstring or null

    When your account cut it off, for good: it acts in your account no more - its agents act on, until you switch them off. Null while it may act.

  • cut_off_bystring or null

    The Himmel id of the person who cut it off.

  • 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.
  • 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.
GET/v1/meScope rules:read

Who is calling, for which account, and what it may do

The account your key belongs to - with the country it is established in, the currency its books are kept in, how many years its checks are kept and, for an account opened by signing up, the terms its person accepted - whether this request acts in live or in test, the scopes the key carries, and for a key made for an agent, the agent it acts as. The console reads the same answer for the person signed in to it, whose role decides their scopes.

Responses

200 Successful response
  • accountAccountrequired
    9 fields
    • idstringrequired
    • slugstringrequired
    • namestringrequired
    • test_onlybooleanrequired

      true for an account that holds test data only: the sandbox. Every other has live and test.

    • retention_yearsintegerrequired

      How many years its checks are kept: the period its country's law sets for its records, stated when the account was opened. GET /v1/checks/{id} reproduces an answer for it.

    • countrystring or null

      Where the company is established, as an ISO 3166-1 code: US, AE, DE.

    • currencystring or null

      The currency its books are kept in, as an ISO 4217 code: a playbook drafted for it states its limits in this one where its document names none. Never taken from the country: a company may keep its books in another.

    • termsTermsAccepted or null

      The terms of Himmel's the account's person accepted - opening it by signing up, or, for an account a builder opened, joining it as its owner - the latest, where its admins have accepted several. Null for an account opened with us, whose terms are in its contract, and for one a builder opened until its owner joins.

      3 fields
      • versionstringrequired

        The version accepted, as GET /v1/terms gives it.

      • accepted_bystringrequired

        The Himmel id of the person who accepted them.

      • accepted_atstringrequired
    • opened_byOpenedBy or null

      The account that opened yours, for one a builder opened: its agents act for you, and it registers them and makes their keys here - never more. Null for an account opened with us or by signing up.

      4 fields
      • idstringrequired

        Its account's id: what builder says on its agents and keys.

      • namestringrequired

        Its company's name.

      • cut_off_atstring or null

        When your account cut it off, for good: it acts in your account no more - its agents act on, until you switch them off. Null while it may act.

      • cut_off_bystring or null

        The Himmel id of the person who cut it off.

  • env"live" | "test"required

    Where this request acts: a key's own environment, or for a person the account's own unless the request sent Himmel-Env: test.

  • callerIdentityrequired
    4 fields
    • kind"api_key" | "person"required
    • idstringrequired

      The key's id, or the person's user id.

    • role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author" or null

      A person's role, which decides their scopes. Null for a key.

    • actorActor or null

      For a key made for an agent: the agent it acts as, which every check it sends records whatever the request says. Null for your account's own keys, which name who acts in each request, and for a person.

      3 fields
      • kind"user" | "agent" | "system"required
      • idstring or null
      • on_behalf_ofstring or null

        The person an agent acted for.

  • scopeslist of stringrequired

    What this caller may do: one scope per kind of call.

  • 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.
GET/v1/keysScope keys

Your account's API keys

Every key your account has, live and test, newest first, revoked ones too: its prefix and name, the agent it is for, what it may do, who made it, and when it was last used - never the key itself, which is shown once, when it is made. For a person signed in whose role holds keys, an admin or an engineer; a key never lists keys.

Needs a person signed in whose role carries keys: no key can hold it.

Responses

200 Successful response
  • keyslist of ApiKeyrequired

    Every key of your account, live and test, newest first - revoked ones too.

    12 fields
    • idstringrequired
    • prefixstringrequired

      The start of the key, hk_live_9f3Kx2: what your check log shows as its sender.

    • namestringrequired

      What it is for.

    • env"live" | "test"required
    • scopeslist of stringrequired
    • created_atstringrequired
    • agentstring or null

      The agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.

    • created_bystring or null

      The Himmel id of the person of your account who made it - your account's first two, its person who opened it by signing up. Null for a key we made for you - an account's first two, when we opened it, or one made on your behalf - and for one your account's builder made, which builder says.

    • builderstring or null

      For a key the account that opened yours made for one of its agents: that account's id - its builder's, named in GET /v1/me. Null for every other key.

    • last_used_atstring or null

      When a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.

    • revoked_atstring or null

      When it was revoked, for good: a request with it since is 401. Null while it works.

    • revoked_bystring or null

      The Himmel id of the person who revoked it, where a person did.

  • 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/keysScope keys

Make an API key

A key for one agent - every check it sends records that agent, whatever the request says - or for your own software, tied to nobody, whose requests name who acts. Live or test (your account's own environment when left out; the sandbox's are test). The key itself is in this answer and never again: store it now. It may do only what your role may (insufficient-scope naming the scope otherwise): an engineer's keys never confirm. An agent's key does at most what an agent does. With scopes left out, either kind holds what a system that acts needs - check, checks:read, checks:write, rules:read - and a key for your own software is given more only by naming it. A retry with the same Idempotency-Key gets the same key's record, with key null. Made by a person signed in, never by a key.

Needs a person signed in whose role carries keys: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • 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

  • namestringrequired

    What the key is for, as your check log will show it beside the key's prefix: Refunds assistant, Support tool. Never a person's name or address (pii-in-facts).

  • env"live" | "test" or null

    Where it acts: live, or test for trying an integration - it reads everything your account decided and changes none of it. Your account's own when left out; the sandbox's keys are test keys.

  • agentstring or null

    The agent the key is for, by the id your account registered it under (POST /v1/agents): unknown_agent for one it has not. Every check the key sends records this agent, whatever the request says. Left out, the key is your own software's, tied to nobody, and each request names who acts.

  • scopeslist of "check" | "checks:read" | "checks:write" | "rules:read" | "confirm" | "recipients:write" | "policies:write" or null

    What the key may do. For an agent, at most an agent's four - check, checks:read, checks:write, rules:read - and all four when left out. For your own software, any your role holds, and when left out the same four, which are what a system that acts needs: confirm, recipients:write and policies:write are given only by name. Nobody makes a key that can do more than they can.

Responses

200 Successful response
  • idstringrequired
  • prefixstringrequired

    The start of the key, hk_live_9f3Kx2: what your check log shows as its sender.

  • namestringrequired

    What it is for.

  • env"live" | "test"required
  • scopeslist of stringrequired
  • created_atstringrequired
  • keystring or nullrequired

    The key itself, hk_live_…: shown here once and never again - we keep only its fingerprint. Store it now. Null on a retry with the same Idempotency-Key, which gets the same key's record: a key lost before it was stored is revoked, and another made.

  • agentstring or null

    The agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.

  • created_bystring or null

    The Himmel id of the person of your account who made it - your account's first two, its person who opened it by signing up. Null for a key we made for you - an account's first two, when we opened it, or one made on your behalf - and for one your account's builder made, which builder says.

  • builderstring or null

    For a key the account that opened yours made for one of its agents: that account's id - its builder's, named in GET /v1/me. Null for every other key.

  • last_used_atstring or null

    When a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.

  • revoked_atstring or null

    When it was revoked, for good: a request with it since is 401. Null while it works.

  • revoked_bystring or null

    The Himmel id of the person who revoked it, where a person did.

  • 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).
  • 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.
POST/v1/keys/{key_id}/revokeScope keys

Revoke an API key

Revoked from now, for good: the next request with it is 401, and nothing puts it back. It is never deleted - your check log still names it as the sender of what it sent. Revoking a key already revoked changes nothing and answers it as it stands. You revoke only a key that can do no more than your role (insufficient-scope naming the scope otherwise): your account's own keys, which confirm, are an admin's to revoke. To replace an agent's key, make the new one for the same agent first: the agent stays the same in every rule and in the log.

Needs a person signed in whose role carries keys: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • key_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.

Responses

200 Successful response
  • idstringrequired
  • prefixstringrequired

    The start of the key, hk_live_9f3Kx2: what your check log shows as its sender.

  • namestringrequired

    What it is for.

  • env"live" | "test"required
  • scopeslist of stringrequired
  • created_atstringrequired
  • agentstring or null

    The agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.

  • created_bystring or null

    The Himmel id of the person of your account who made it - your account's first two, its person who opened it by signing up. Null for a key we made for you - an account's first two, when we opened it, or one made on your behalf - and for one your account's builder made, which builder says.

  • builderstring or null

    For a key the account that opened yours made for one of its agents: that account's id - its builder's, named in GET /v1/me. Null for every other key.

  • last_used_atstring or null

    When a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.

  • revoked_atstring or null

    When it was revoked, for good: a request with it since is 401. Null while it works.

  • revoked_bystring or null

    The Himmel id of the person who revoked it, where a person did.

  • 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.
  • 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.
GET/v1/peopleScope rules:read

Your account's people

Everybody in your account, and everybody who left it: their Himmel id - what every answer that names them says - and role, when they joined, and when they left and who removed them. Their names to a person signed in, and their addresses to an admin; a key reads ids and roles. A person who left keeps their name with the evidence that names them, and loses their address.

Needs a key with the scope rules:read. What it reads is your whole account's, so a key made for an agent, which reads its own agent's alone, gets 403 insufficient-scope.

Responses

200 Successful response
  • peoplelist of Personrequired

    Everybody in your account, in the order they joined, then everybody who left it, the most recent first.

    7 fields
    • idstringrequired

      Their Himmel id, usr_…: what every answer that names them says.

    • role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"required
    • joined_atstringrequired

      When they first joined your account.

    • namestring or null

      Their name, as they gave it joining - or as Clerk held it - to a person signed in; null to a key, and for a person who joined before Himmel asked for one and has not given it yet (PUT /v1/me/name). Kept after they leave, with the evidence that names them.

    • emailstring or null

      The address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.

    • removed_atstring or null

      When they left: nobody signs in as them since. Null while they are here.

    • removed_bystring or null

      The Himmel id of the admin who removed them.

  • 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/people/{person_id}/roleScope people

Change a person's role

Their role from now - tenant_admin, tenant_engineer or tenant_ops - and with it what they may do. Never your own (409, yourself: another admin changes yours), never for a person who left (409, left_the_account: invite them again), and never your account's last admin's (409 last-admin). The same role again changes nothing and answers them as they stand. An admin's, signed in.

Needs a person signed in whose role carries people: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • person_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

  • role"tenant_admin" | "tenant_engineer" | "tenant_ops"required

    The role they have from now: tenant_admin, tenant_engineer or tenant_ops.

Responses

200 Successful response
  • idstringrequired

    Their Himmel id, usr_…: what every answer that names them says.

  • role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"required
  • joined_atstringrequired

    When they first joined your account.

  • namestring or null

    Their name, as they gave it joining - or as Clerk held it - to a person signed in; null to a key, and for a person who joined before Himmel asked for one and has not given it yet (PUT /v1/me/name). Kept after they leave, with the evidence that names them.

  • emailstring or null

    The address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.

  • removed_atstring or null

    When they left: nobody signs in as them since. Null while they are here.

  • removed_bystring or null

    The Himmel id of the admin who removed them.

  • 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.
POST/v1/people/{person_id}/removeScope people

Remove a person

Removed from now, never deleted: nobody signs in as them again, their address goes - Clerk's copy with ours - and every answer, confirmation, decision and approval that names them keeps naming them, by the same id and the same name. Refused for yourself (409, yourself), for a person a setting names from today on - who approves, who signs off - until it names somebody else (409 named-in-settings, listing the settings), for a person who owns an agent until each has another owner (409 owns-agents, listing the agents), and for your account's last admin (409 last-admin). Removing a person who left answers them as they stand. An admin's, signed in.

Needs a person signed in whose role carries people: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • person_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.

Responses

200 Successful response
  • idstringrequired

    Their Himmel id, usr_…: what every answer that names them says.

  • role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"required
  • joined_atstringrequired

    When they first joined your account.

  • namestring or null

    Their name, as they gave it joining - or as Clerk held it - to a person signed in; null to a key, and for a person who joined before Himmel asked for one and has not given it yet (PUT /v1/me/name). Kept after they leave, with the evidence that names them.

  • emailstring or null

    The address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.

  • removed_atstring or null

    When they left: nobody signs in as them since. Null while they are here.

  • removed_bystring or null

    The Himmel id of the admin who removed them.

  • 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.
  • 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.
GET/v1/invitationsScope people

Your account's invitations

Every invitation your account sent, the newest first: the address, the role, who sent it, when it runs out, and how it ended - taken up by whom, withdrawn by whom, or run out. An admin's, signed in.

Needs a person signed in whose role carries people: no key can hold it.

Responses

200 Successful response
  • invitationslist of Invitationrequired

    Every invitation your account sent, the newest first.

    12 fields
    • idstringrequired

      Its id, ivt_….

    • role"tenant_admin" | "tenant_engineer" | "tenant_ops"required
    • status"waiting" | "accepted" | "withdrawn" | "expired"required

      waiting to be taken up; accepted, by the person in accepted_by; withdrawn; expired, not taken up in time.

    • invited_atstringrequired
    • expires_atstringrequired

      When it runs out, if nobody has taken it up.

    • emailstring or null

      The address it was sent to. Null once it has ended and nothing else keeps the address: a withdrawn invitation's goes.

    • invited_bystring or null

      The admin who sent it. Null for your first admin's, which we sent opening your account - or, for an account a builder opened, the owner's, which the builder sent (GET /v1/me, opened_by).

    • emailed_atstring or null

      When Himmel's own email with its link went - which only the owner's of an account a builder opened has, where Himmel sends email. Null for every invitation Clerk emailed, and until Himmel's has gone.

    • accepted_atstring or null
    • accepted_bystring or null

      Who joined by it: the same Himmel id as before for a person who came back.

    • withdrawn_atstring or null
    • withdrawn_bystring or null
  • 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/invitationsScope people

Invite a colleague

An invitation to this address, in this role, which Clerk - who signs people in to Himmel - emails. Your colleague signs up through it and joins your account by taking it up, signed in (POST /v1/me/invitations/{id}/accept); it runs out after 7 days. Refused for an address a person in your account signs in with (409, already_a_member) or one an invitation waits for (409, already_invited: withdraw it to send another). A person who left, invited again, comes back as themselves. 503 sign-in-unavailable where Clerk could not be asked: nothing was sent. A retry with the same Idempotency-Key gets the same invitation, with email null. An admin's, signed in.

Needs a person signed in whose role carries people: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • 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

  • emailstringrequired

    The address your colleague signs in with. Clerk, which signs people in to Himmel, emails them the invitation.

  • role"tenant_admin" | "tenant_engineer" | "tenant_ops"required

    What they may do: tenant_admin everything, tenant_engineer the docs, the sandbox, the check log and keys, tenant_ops the check log, the review queue and recipients.

Responses

200 Successful response
  • idstringrequired

    Its id, ivt_….

  • role"tenant_admin" | "tenant_engineer" | "tenant_ops"required
  • status"waiting" | "accepted" | "withdrawn" | "expired"required

    waiting to be taken up; accepted, by the person in accepted_by; withdrawn; expired, not taken up in time.

  • invited_atstringrequired
  • expires_atstringrequired

    When it runs out, if nobody has taken it up.

  • emailstring or null

    The address it was sent to. Null once it has ended and nothing else keeps the address: a withdrawn invitation's goes.

  • invited_bystring or null

    The admin who sent it. Null for your first admin's, which we sent opening your account - or, for an account a builder opened, the owner's, which the builder sent (GET /v1/me, opened_by).

  • emailed_atstring or null

    When Himmel's own email with its link went - which only the owner's of an account a builder opened has, where Himmel sends email. Null for every invitation Clerk emailed, and until Himmel's has gone.

  • accepted_atstring or null
  • accepted_bystring or null

    Who joined by it: the same Himmel id as before for a person who came back.

  • withdrawn_atstring or null
  • withdrawn_bystring or null
  • 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).
  • 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.
  • 503An optional part of the service is not configured in this deployment, or a service it relies on did not answer: type says which.
POST/v1/invitations/{invitation_id}/withdrawScope people

Withdraw an invitation

Nobody takes it up from now: Clerk's is revoked, and the address goes. One that ended already is answered as it stands; one taken up is a person in your account, whom you remove instead (409, accepted). An admin's, signed in.

Needs a person signed in whose role carries people: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • invitation_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.

Responses

200 Successful response
  • idstringrequired

    Its id, ivt_….

  • role"tenant_admin" | "tenant_engineer" | "tenant_ops"required
  • status"waiting" | "accepted" | "withdrawn" | "expired"required

    waiting to be taken up; accepted, by the person in accepted_by; withdrawn; expired, not taken up in time.

  • invited_atstringrequired
  • expires_atstringrequired

    When it runs out, if nobody has taken it up.

  • emailstring or null

    The address it was sent to. Null once it has ended and nothing else keeps the address: a withdrawn invitation's goes.

  • invited_bystring or null

    The admin who sent it. Null for your first admin's, which we sent opening your account - or, for an account a builder opened, the owner's, which the builder sent (GET /v1/me, opened_by).

  • emailed_atstring or null

    When Himmel's own email with its link went - which only the owner's of an account a builder opened has, where Himmel sends email. Null for every invitation Clerk emailed, and until Himmel's has gone.

  • accepted_atstring or null
  • accepted_bystring or null

    Who joined by it: the same Himmel id as before for a person who came back.

  • withdrawn_atstring or null
  • withdrawn_bystring or null
  • 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.
  • 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.
GET/v1/me/invitations

The invitations waiting for you

For a person signed in to the console whom no account has added yet: every invitation waiting for an address you have signed in with - the account, and the role you would have; for an account a builder opened for you, the company that did, and the version of Himmel's terms you accept taking it up. A person in an account already is refused (409): one person, one account. Never a key's.

Needs a person signed in to the console, whom no account need have added yet: it is how they join an account, or open their company's own. No key may call it.

Responses

200 Successful response
  • invitationslist of WaitingInvitationrequired

    Every invitation waiting for an address you have signed in with, the newest first.

    6 fields
    • idstringrequired
    • accountWaitingAccountrequired

      The account you would join.

      2 fields
      • namestringrequired
      • opened_byWaitingOpener or null

        For an account a builder opened for you - a company whose agents act for you - that company, which named you its owner. Null otherwise.

        1 field
        • namestringrequired
    • role"tenant_admin" | "tenant_engineer" | "tenant_ops"required
    • invited_atstringrequired
    • expires_atstringrequired
    • termsstring or null

      The version of Himmel's terms you accept taking it up (GET /v1/terms), sent as terms: for an account a builder opened that nobody has accepted them for yet - its owner accepts them for it, the builder's acceptance being its own account's. Null where none is asked.

  • 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).
  • 409The request conflicts with what is stored: see detail.
  • 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.
  • 503An optional part of the service is not configured in this deployment, or a service it relies on did not answer: type says which.
POST/v1/me/invitations/{invitation_id}/accept

Take an invitation up

You join the account that invited you, in the role it gave you - or, if you were in it before, you come back as yourself, under the same Himmel id. With your name, as your colleagues know you: the one you send, else the one Clerk holds for you, else the one you left with - with none of them it is 422, name required, and nothing is done. Refused for a person in an account already (409, another_account: one person, one account), for an invitation withdrawn or run out (409: ask your admin for another), and 404 for one not sent to an address you have signed in with. An account a builder opened for you - a company whose agents act for you, which named you its owner: you join it accepting Himmel's terms for it, where nobody has, sent as terms (422, terms required or not_in_force; GET /v1/me/invitations says the version), and own the agents it registered there. A retry with the same Idempotency-Key gets the same answer with your name and email null: a stored reply keeps neither. Never a key's.

Needs a person signed in to the console, whom no account need have added yet: it is how they join an account, or open their company's own. No key may call it.

Parameters

  • invitation_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

  • namestring or null

    Your name, as your colleagues know you. Left out, the name Clerk holds for you - your first and last name joined - or, if you were in the account before, the one you left with; where there is none of these it is required.

  • termsstring or null

    The version of Himmel's terms you accept for the account, where the invitation asks it (GET /v1/me/invitations, terms): an account a builder opened for you that nobody has accepted them for. Required there - the one in force, not_in_force otherwise - and not read anywhere else.

Responses

200 Successful response
  • accountJoinedAccountrequired
    2 fields
    • idstringrequired
    • namestringrequired
  • personPersonrequired
    7 fields
    • idstringrequired

      Their Himmel id, usr_…: what every answer that names them says.

    • role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"required
    • joined_atstringrequired

      When they first joined your account.

    • namestring or null

      Their name, as they gave it joining - or as Clerk held it - to a person signed in; null to a key, and for a person who joined before Himmel asked for one and has not given it yet (PUT /v1/me/name). Kept after they leave, with the evidence that names them.

    • emailstring or null

      The address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.

    • removed_atstring or null

      When they left: nobody signs in as them since. Null while they are here.

    • removed_bystring or null

      The Himmel id of the admin who removed them.

  • 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.
  • 503An optional part of the service is not configured in this deployment, or a service it relies on did not answer: type says which.
PUT/v1/me/nameScope rules:read

Give your name

For a person signed in who joined before Himmel asked for a name: your name, as your colleagues know you. Every page names you by it, and your colleagues pick you by it - to approve, to sign off. A name is given once: the same name again is answered as it stands, and another, once you have one, is 409, named_already. Never a key's (403): a key has no name. Answered with you, as GET /v1/people lists you.

Needs a person signed in to the console, in any role: it is their own, and no key may call it. A person is one of your account's people, which live and test share, so it is done from live: in an account with a live side, a request made in test gets 403 live-only.

Request body · application/json

  • namestringrequired

    Your name, as your colleagues know you: one line, up to 200 characters. Every page names you by it, and your colleagues pick you by it - to approve, to sign off.

Responses

200 Successful response
  • idstringrequired

    Their Himmel id, usr_…: what every answer that names them says.

  • role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"required
  • joined_atstringrequired

    When they first joined your account.

  • namestring or null

    Their name, as they gave it joining - or as Clerk held it - to a person signed in; null to a key, and for a person who joined before Himmel asked for one and has not given it yet (PUT /v1/me/name). Kept after they leave, with the evidence that names them.

  • emailstring or null

    The address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.

  • removed_atstring or null

    When they left: nobody signs in as them since. Null while they are here.

  • removed_bystring or null

    The Himmel id of the admin who removed them.

  • 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).
  • 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.
GET/v1/agentsScope rules:read

Your account's agents

Every agent your account has registered, in the order registered: its id - what every check it sends records - its role in words, the person who owns it, whether it is switched off, since when and by whom, and in this request's environment when it last acted and when its own key last read its rules, with the versions it was given. Live and test read the same agents, as they read the same keys.

Needs a key with the scope rules:read. What it reads is your whole account's, so a key made for an agent, which reads its own agent's alone, gets 403 insufficient-scope.

Responses

200 Successful response
  • agentslist of Agentrequired

    Every agent your account has registered, in the order registered.

    11 fields
    • idstringrequired

      The agent's own id in your systems: what every check it sends records, and what a rule reading actor.id names.

    • created_atstringrequired

      When it was registered.

    • rolestring or null

      What it is, in words, as every page names it: The support assistant. Null only for an agent Himmel registered from what your records already knew, until somebody says.

    • ownerstring or null

      The Himmel id of the person in your account who answers for it. Null for an agent Himmel registered from what your records already knew, until somebody names one, and for one your account's builder registered before its owner joined - the owner owns it from then.

    • switched_off_atstring or null

      When it was switched off: every request its keys send is refused since, and nothing is asked in its name. Null while it is on.

    • switched_off_bystring or null

      The Himmel id of the person who switched it off.

    • created_bystring or null

      The Himmel id of the person of your account who registered it. Null for an agent we registered for you, or from what your records already knew, and for one your account's builder registered, which builder says.

    • builderstring or null

      For an agent the account that opened yours registered - its builder's, named in GET /v1/me - that account's id. Null for every other agent.

    • last_acted_atstring or null

      When an action recorded as its was last asked about or taken, in this request's environment, whoever sent the check: the latest moment of its runs. Never when one of its keys was last used, which any request sets. Null where none has been.

    • rules_read_atstring or null

      When its own key last read its rules (GET /v1/agents/{agent_id}/rules) in this request's environment, to the minute: a read within a minute of the last, given the same, is not written again. A read by a person, your account's own key or another agent is not it reading. Null where it never has.

    • rules_readRulesRead or null

      What it was given then. Null where it has never read its rules.

      2 fields
      • versionslist of VersionReadrequired

        The version of each rule set it was given, in the order given; a rule set with no version in force that day gave none.

        2 fields
        • rule_setstringrequired
        • versionstringrequired
      • checksumstringrequired

        The checksum of the text it was given. The text names its day, so a read on another day gives another: compare versions to say whether it has read what applies now.

  • 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/agentsScope agents

Register an agent

An agent, known before it acts: its own id in your systems - fixed once registered, never a name or an address, never beginning usr_ (format) - its role in words, and the person here who owns it, any role (unknown_user, left_the_account). An id your account registered already is 409 conflict, already_registered. Its keys are then made for it (POST /v1/keys), and a check your own software sends naming it records it; one naming an agent your account has not registered is refused (unknown_agent). It is answered under every playbook of your account, as anybody is.

Needs a person signed in whose role carries agents: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • 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

  • idstringrequired

    The agent's own id in your systems - what every check it sends records, and what a rule reading actor.id names: letters, digits and _ . : -, up to 64, never a name or an address, and never beginning usr_. Fixed once registered.

  • rolestringrequired

    What the agent is, in words, as every page names it: The support assistant. One line; never a person's name or address (pii-in-facts).

  • ownerstringrequired

    The Himmel id of the person in your account who answers for the agent, in any role: Settings' People lists everybody's.

Responses

200 Successful response
  • idstringrequired

    The agent's own id in your systems: what every check it sends records, and what a rule reading actor.id names.

  • created_atstringrequired

    When it was registered.

  • rolestring or null

    What it is, in words, as every page names it: The support assistant. Null only for an agent Himmel registered from what your records already knew, until somebody says.

  • ownerstring or null

    The Himmel id of the person in your account who answers for it. Null for an agent Himmel registered from what your records already knew, until somebody names one, and for one your account's builder registered before its owner joined - the owner owns it from then.

  • switched_off_atstring or null

    When it was switched off: every request its keys send is refused since, and nothing is asked in its name. Null while it is on.

  • switched_off_bystring or null

    The Himmel id of the person who switched it off.

  • created_bystring or null

    The Himmel id of the person of your account who registered it. Null for an agent we registered for you, or from what your records already knew, and for one your account's builder registered, which builder says.

  • builderstring or null

    For an agent the account that opened yours registered - its builder's, named in GET /v1/me - that account's id. Null for every other agent.

  • last_acted_atstring or null

    When an action recorded as its was last asked about or taken, in this request's environment, whoever sent the check: the latest moment of its runs. Never when one of its keys was last used, which any request sets. Null where none has been.

  • rules_read_atstring or null

    When its own key last read its rules (GET /v1/agents/{agent_id}/rules) in this request's environment, to the minute: a read within a minute of the last, given the same, is not written again. A read by a person, your account's own key or another agent is not it reading. Null where it never has.

  • rules_readRulesRead or null

    What it was given then. Null where it has never read its rules.

    2 fields
    • versionslist of VersionReadrequired

      The version of each rule set it was given, in the order given; a rule set with no version in force that day gave none.

      2 fields
      • rule_setstringrequired
      • versionstringrequired
    • checksumstringrequired

      The checksum of the text it was given. The text names its day, so a read on another day gives another: compare versions to say whether it has read what applies now.

  • 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).
  • 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.
GET/v1/agents/{agent_id}Scope rules:read

One agent

One agent your account has registered, by its id: 404 not-found for one it has not.

Needs a key with the scope rules: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

  • agent_idpath · stringrequired

Responses

200 Successful response
  • idstringrequired

    The agent's own id in your systems: what every check it sends records, and what a rule reading actor.id names.

  • created_atstringrequired

    When it was registered.

  • rolestring or null

    What it is, in words, as every page names it: The support assistant. Null only for an agent Himmel registered from what your records already knew, until somebody says.

  • ownerstring or null

    The Himmel id of the person in your account who answers for it. Null for an agent Himmel registered from what your records already knew, until somebody names one, and for one your account's builder registered before its owner joined - the owner owns it from then.

  • switched_off_atstring or null

    When it was switched off: every request its keys send is refused since, and nothing is asked in its name. Null while it is on.

  • switched_off_bystring or null

    The Himmel id of the person who switched it off.

  • created_bystring or null

    The Himmel id of the person of your account who registered it. Null for an agent we registered for you, or from what your records already knew, and for one your account's builder registered, which builder says.

  • builderstring or null

    For an agent the account that opened yours registered - its builder's, named in GET /v1/me - that account's id. Null for every other agent.

  • last_acted_atstring or null

    When an action recorded as its was last asked about or taken, in this request's environment, whoever sent the check: the latest moment of its runs. Never when one of its keys was last used, which any request sets. Null where none has been.

  • rules_read_atstring or null

    When its own key last read its rules (GET /v1/agents/{agent_id}/rules) in this request's environment, to the minute: a read within a minute of the last, given the same, is not written again. A read by a person, your account's own key or another agent is not it reading. Null where it never has.

  • rules_readRulesRead or null

    What it was given then. Null where it has never read its rules.

    2 fields
    • versionslist of VersionReadrequired

      The version of each rule set it was given, in the order given; a rule set with no version in force that day gave none.

      2 fields
      • rule_setstringrequired
      • versionstringrequired
    • checksumstringrequired

      The checksum of the text it was given. The text names its day, so a read on another day gives another: compare versions to say whether it has read what applies now.

  • 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.
  • 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.
GET/v1/agents/{agent_id}/runsScope checks:read

What an agent did, run by run

Each run of the agent - the task a person dispatched it to do, as its checks named it in transaction.run - in this request's environment, the one acted in last first, fifty to a page: who it was for, as its actions said; when its first action was asked about or taken and when its last was; how many actions, what their answers that stand came to and what became of them; and checks, the check log's query that lists exactly those actions. A completion or a correction is the action it amends, never another. Its actions sent with no run are counted together in without_run. Continue with before set to the last page's next_before.

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

  • agent_idpath · stringrequired
  • limitquery · integer

    How many runs to a page.

  • beforequery · string or null

    The last page's next_before, a run's id, to continue from.

Responses

200 Successful response
  • agentstringrequired

    The agent's id.

  • runslist of Runrequired

    Each run its checks named, in this request's environment, the one acted in last first.

    8 fields
    • runstring or nullrequired

      The run's id, as the agent's checks named it in transaction.run.

    • on_behalf_oflist of stringrequired

      Every person its actions said the agent acted for, as your own systems identify them; empty where none said.

    • first_atstringrequired

      When its first action was asked about or taken.

    • last_atstringrequired

      When its last action was asked about or taken.

    • actionsintegerrequired

      How many actions it took or asked about. A completion or a correction is the action it amends, never another.

    • answerslist of RunAnswersrequired

      What the answers that stand came to, by state and outcome, the most first.

      3 fields
      • state"determined" | "undetermined_missing_facts" | "not_covered" | "contested"required
      • actionsintegerrequired
      • outcomestring or null

        What a determined answer came to, as its rule set names it; null otherwise.

    • statuseslist of RunStatusrequired

      What became of the actions, the most first.

      2 fields
      • status"executed" | "proposed" | "abandoned" | "expired" | "reversed"required

        executed, taken; proposed, still being asked about; abandoned or expired, never taken; reversed, taken back.

      • actionsintegerrequired
    • checksstring or null

      The check log's query that lists exactly these actions, one row each, by the answer that stands. Null for the actions sent with no run.

  • without_runRun or null

    Its actions sent with no run, counted together; null where there are none.

    8 fields
    • runstring or nullrequired

      The run's id, as the agent's checks named it in transaction.run.

    • on_behalf_oflist of stringrequired

      Every person its actions said the agent acted for, as your own systems identify them; empty where none said.

    • first_atstringrequired

      When its first action was asked about or taken.

    • last_atstringrequired

      When its last action was asked about or taken.

    • actionsintegerrequired

      How many actions it took or asked about. A completion or a correction is the action it amends, never another.

    • answerslist of RunAnswersrequired

      What the answers that stand came to, by state and outcome, the most first.

      3 fields
      • state"determined" | "undetermined_missing_facts" | "not_covered" | "contested"required
      • actionsintegerrequired
      • outcomestring or null

        What a determined answer came to, as its rule set names it; null otherwise.

    • statuseslist of RunStatusrequired

      What became of the actions, the most first.

      2 fields
      • status"executed" | "proposed" | "abandoned" | "expired" | "reversed"required

        executed, taken; proposed, still being asked about; abandoned or expired, never taken; reversed, taken back.

      • actionsintegerrequired
    • checksstring or null

      The check log's query that lists exactly these actions, one row each, by the answer that stands. Null for the actions sent with no run.

  • next_beforestring or null

    Where the next page starts: send it as before. Null on the last page.

  • 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.
  • 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.
GET/v1/runsScope checks:read

Every agent's runs

Every agent's runs - each the task a person dispatched an agent to do, as its checks named it in transaction.run - in this request's environment, the one acted in last first, fifty to a page: each as an agent's runs give it, with agent, whose run it is. A run is its agent's: two agents that name the same run are two runs. actor keeps one agent's actions or several's, and system those taken in these systems: a run counts the actions they keep, and its checks lists exactly those. from and to keep the runs that acted in that time, each with every action counted. Actions sent with no run are no run. Continue with before set to the last page's next_before. From a key made for an agent, its own agent's alone.

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

  • actorquery · string or null

    Only these agents' runs, by id: one, or several separated by commas.

  • systemquery · string or null

    Only the actions taken in this system, by its code - none for those whose system nobody named - or several, separated by commas: each run counts those alone.

  • fromquery · string or null

    Only the runs one of whose actions was asked about or taken at or after this moment, an ISO 8601 timestamp or a date - a date alone is its midnight, UTC.

  • toquery · string or null

    Only the runs one of whose actions was asked about or taken before this moment; as from.

  • limitquery · integer

    How many runs to a page.

  • beforequery · string or null

    The last page's next_before, as it was given, to continue from.

Responses

200 Successful response
  • runslist of AgentsRunrequired

    Every agent's runs the filters keep, in this request's environment, the one acted in last first, each counting the actions the filters keep.

    9 fields
    • runstring or nullrequired

      The run's id, as the agent's checks named it in transaction.run.

    • on_behalf_oflist of stringrequired

      Every person its actions said the agent acted for, as your own systems identify them; empty where none said.

    • first_atstringrequired

      When its first action was asked about or taken.

    • last_atstringrequired

      When its last action was asked about or taken.

    • actionsintegerrequired

      How many actions it took or asked about. A completion or a correction is the action it amends, never another.

    • answerslist of RunAnswersrequired

      What the answers that stand came to, by state and outcome, the most first.

      3 fields
      • state"determined" | "undetermined_missing_facts" | "not_covered" | "contested"required
      • actionsintegerrequired
      • outcomestring or null

        What a determined answer came to, as its rule set names it; null otherwise.

    • statuseslist of RunStatusrequired

      What became of the actions, the most first.

      2 fields
      • status"executed" | "proposed" | "abandoned" | "expired" | "reversed"required

        executed, taken; proposed, still being asked about; abandoned or expired, never taken; reversed, taken back.

      • actionsintegerrequired
    • agentstringrequired

      The agent whose run it is: two agents that name the same run are two runs.

    • checksstring or null

      The check log's query that lists exactly these actions, one row each, by the answer that stands. Null for the actions sent with no run.

  • next_beforestring or null

    Where the next page starts: send it as before, with the same filters. Null on the last page.

  • 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.
GET/v1/mapScope checks:read

The map of your agents

Who answers for each agent, the systems they act in, and how each of their actions was answered: in this request's environment, every action an agent asked about or reported, once, by the answer that stands, dated from effective_from to effective_to, both included - the last thirty days to today where neither is sent. actor keeps one agent's actions or several's, and system those taken in these systems, codes or none. Every figure comes with checks, the check log's query that lists exactly what it counts: agents, every agent the filters keep, those that did nothing on those days too; people, who answers for them; systems, where they acted; lines, one for each agent, system and kind of answer, with the actions among them taken against your rules and those waiting on an approval; answers, each kind's; and not_covered, approvals_waiting and against_rules. Each answer's kind is read from its first policy's layer where a policy answered, as the log's answer reads it. From a key made for an agent, its own agent's alone. Not under /v1/agents/, where map could be an agent's id.

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

  • actorquery · string or null

    Only these agents' actions, by id: one, or several separated by commas.

  • systemquery · string or null

    Only the actions taken in this system, by its code - none for those whose system nobody named - or several, separated by commas.

  • effective_fromquery · string or null

    The first day counted, as each action is dated (effective_date): a date, YYYY-MM-DD. Sent alone, the days from it to today.

  • effective_toquery · string or null

    The last day counted, included: a date, YYYY-MM-DD. Sent alone, the thirty days to it; with neither sent, the thirty days to today, the server's day in UTC.

Responses

200 Successful response
  • effective_fromstringrequired

    The first day counted, as each action is dated.

  • effective_tostringrequired

    The last day counted, included.

  • as_ofstringrequired

    When it was read.

  • actionsintegerrequired

    Every action an agent asked about or reported on those days that the filters keep, once, by the answer that stands.

  • checksstringrequired

    The check log's query that lists exactly those actions, one row each.

  • agentslist of MapAgentrequired

    Every agent the filters keep, in the order registered, then any other agent whose actions were counted.

    6 fields
    • idstringrequired

      The agent's own id in your systems.

    • rolestring or nullrequired

      What it is, in words, as registered; null for an agent the register lacks.

    • ownerstring or nullrequired

      The Himmel id of the person who answers for it; null where nobody does.

    • switched_off_atstring or nullrequired

      When it was switched off; null while it is on.

    • actionsintegerrequired

      Its actions on those days: nought where it did nothing.

    • checksstringrequired

      The check log's query that lists exactly those actions, one row each.

  • peoplelist of MapPersonrequired

    Each person who answers for one of those agents.

    2 fields
    • idstringrequired

      The person's Himmel id.

    • agentslist of stringrequired

      The agents listed that they answer for, by id.

  • systemslist of MapSystemrequired

    Each system the actions were taken in, the busiest first.

    3 fields
    • systemstringrequired

      The system's code, or none for the actions whose system nobody named.

    • actionsintegerrequired

      The actions taken in it.

    • checksstringrequired

      The check log's query that lists exactly those actions, one row each.

  • lineslist of MapLinerequired

    One for each agent, system and kind of answer the actions came to: an agent's add up to the agent, a system's to the system, and every line to actions.

    7 fields
    • agentstringrequired

      The agent, by id.

    • systemstringrequired

      The system, by code, or none.

    • answer"allowed" | "approval" | "person" | "refused" | "other" | "open"required

      The kind of answer its actions came to.

    • actionsintegerrequired

      How many of the agent's actions in the system came to it.

    • checksstringrequired

      The check log's query that lists exactly those actions, one row each.

    • against_rulesMapFigure or null

      Those of them taken against your rules; null where there are none.

      2 fields
      • actionsintegerrequired

        How many actions.

      • checksstringrequired

        The check log's query that lists exactly those actions, one row each.

    • approvals_waitingMapFigure or null

      Those of them whose answer waits on an approval Himmel asked a person for; null where there are none.

      2 fields
      • actionsintegerrequired

        How many actions.

      • checksstringrequired

        The check log's query that lists exactly those actions, one row each.

  • answerslist of MapAnswerrequired

    The actions of each kind, in the kinds' order.

    3 fields
    • answer"allowed" | "approval" | "person" | "refused" | "other" | "open"required

      The kind of answer.

    • actionsintegerrequired

      How many actions came to it.

    • checksstringrequired

      The check log's query that lists exactly those actions, one row each.

  • not_coveredMapFigurerequired

    Of the actions, those no rule of yours gave an answer for.

    2 fields
    • actionsintegerrequired

      How many actions.

    • checksstringrequired

      The check log's query that lists exactly those actions, one row each.

  • approvals_waitingMapFigurerequired

    Of the actions, those whose answer waits on an approval Himmel asked a person for: the review queue's approvals, of these days and agents.

    2 fields
    • actionsintegerrequired

      How many actions.

    • checksstringrequired

      The check log's query that lists exactly those actions, one row each.

  • against_rulesMapFigurerequired

    Of the actions, those taken against your rules, as check.against_rules is raised.

    2 fields
    • actionsintegerrequired

      How many actions.

    • checksstringrequired

      The check log's query that lists exactly those actions, one row each.

  • 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.
PUT/v1/agents/{agent_id}Scope agents

Change an agent's role or owner

Its role and its owner from now, both sent; never its id, which its checks record. The same again changes nothing and answers it as it stands.

Needs a person signed in whose role carries agents: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • agent_idpath · stringrequired

Request body · application/json

  • rolestringrequired

    What the agent is, in words, as every page names it: The support assistant. One line; never a person's name or address (pii-in-facts).

  • ownerstringrequired

    The Himmel id of the person in your account who answers for the agent, in any role: Settings' People lists everybody's.

Responses

200 Successful response
  • idstringrequired

    The agent's own id in your systems: what every check it sends records, and what a rule reading actor.id names.

  • created_atstringrequired

    When it was registered.

  • rolestring or null

    What it is, in words, as every page names it: The support assistant. Null only for an agent Himmel registered from what your records already knew, until somebody says.

  • ownerstring or null

    The Himmel id of the person in your account who answers for it. Null for an agent Himmel registered from what your records already knew, until somebody names one, and for one your account's builder registered before its owner joined - the owner owns it from then.

  • switched_off_atstring or null

    When it was switched off: every request its keys send is refused since, and nothing is asked in its name. Null while it is on.

  • switched_off_bystring or null

    The Himmel id of the person who switched it off.

  • created_bystring or null

    The Himmel id of the person of your account who registered it. Null for an agent we registered for you, or from what your records already knew, and for one your account's builder registered, which builder says.

  • builderstring or null

    For an agent the account that opened yours registered - its builder's, named in GET /v1/me - that account's id. Null for every other agent.

  • last_acted_atstring or null

    When an action recorded as its was last asked about or taken, in this request's environment, whoever sent the check: the latest moment of its runs. Never when one of its keys was last used, which any request sets. Null where none has been.

  • rules_read_atstring or null

    When its own key last read its rules (GET /v1/agents/{agent_id}/rules) in this request's environment, to the minute: a read within a minute of the last, given the same, is not written again. A read by a person, your account's own key or another agent is not it reading. Null where it never has.

  • rules_readRulesRead or null

    What it was given then. Null where it has never read its rules.

    2 fields
    • versionslist of VersionReadrequired

      The version of each rule set it was given, in the order given; a rule set with no version in force that day gave none.

      2 fields
      • rule_setstringrequired
      • versionstringrequired
    • checksumstringrequired

      The checksum of the text it was given. The text names its day, so a read on another day gives another: compare versions to say whether it has read what applies now.

  • 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.
  • 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.
POST/v1/agents/{agent_id}/switch-offScope agents

Switch an agent off

Switched off from now: every request its keys send is refused (403 agent-switched-off), before anything is read, and a check asking first in its name is refused the same, whoever sends it. An action reported as taken that names it is recorded and answered as any - the books hold what happened - and nothing it did is touched. One switched off already is answered as it stands. Its keys work again once it is switched on; a key that leaked is revoked instead.

Needs a person signed in whose role carries agents, or the agent's owner whatever their role: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • agent_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.

Responses

200 Successful response
  • idstringrequired

    The agent's own id in your systems: what every check it sends records, and what a rule reading actor.id names.

  • created_atstringrequired

    When it was registered.

  • rolestring or null

    What it is, in words, as every page names it: The support assistant. Null only for an agent Himmel registered from what your records already knew, until somebody says.

  • ownerstring or null

    The Himmel id of the person in your account who answers for it. Null for an agent Himmel registered from what your records already knew, until somebody names one, and for one your account's builder registered before its owner joined - the owner owns it from then.

  • switched_off_atstring or null

    When it was switched off: every request its keys send is refused since, and nothing is asked in its name. Null while it is on.

  • switched_off_bystring or null

    The Himmel id of the person who switched it off.

  • created_bystring or null

    The Himmel id of the person of your account who registered it. Null for an agent we registered for you, or from what your records already knew, and for one your account's builder registered, which builder says.

  • builderstring or null

    For an agent the account that opened yours registered - its builder's, named in GET /v1/me - that account's id. Null for every other agent.

  • last_acted_atstring or null

    When an action recorded as its was last asked about or taken, in this request's environment, whoever sent the check: the latest moment of its runs. Never when one of its keys was last used, which any request sets. Null where none has been.

  • rules_read_atstring or null

    When its own key last read its rules (GET /v1/agents/{agent_id}/rules) in this request's environment, to the minute: a read within a minute of the last, given the same, is not written again. A read by a person, your account's own key or another agent is not it reading. Null where it never has.

  • rules_readRulesRead or null

    What it was given then. Null where it has never read its rules.

    2 fields
    • versionslist of VersionReadrequired

      The version of each rule set it was given, in the order given; a rule set with no version in force that day gave none.

      2 fields
      • rule_setstringrequired
      • versionstringrequired
    • checksumstringrequired

      The checksum of the text it was given. The text names its day, so a read on another day gives another: compare versions to say whether it has read what applies now.

  • 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.
  • 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/agents/{agent_id}/switch-onScope agents

Switch an agent on again

On from now: its keys work again, and checks are asked in its name. One on already is answered as it stands.

Needs a person signed in whose role carries agents, or the agent's owner whatever their role: no key can hold it. It changes what your account has decided, which live and test share, so it is done from live: in an account with a live side, a test key gets 403 live-only.

Parameters

  • agent_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.

Responses

200 Successful response
  • idstringrequired

    The agent's own id in your systems: what every check it sends records, and what a rule reading actor.id names.

  • created_atstringrequired

    When it was registered.

  • rolestring or null

    What it is, in words, as every page names it: The support assistant. Null only for an agent Himmel registered from what your records already knew, until somebody says.

  • ownerstring or null

    The Himmel id of the person in your account who answers for it. Null for an agent Himmel registered from what your records already knew, until somebody names one, and for one your account's builder registered before its owner joined - the owner owns it from then.

  • switched_off_atstring or null

    When it was switched off: every request its keys send is refused since, and nothing is asked in its name. Null while it is on.

  • switched_off_bystring or null

    The Himmel id of the person who switched it off.

  • created_bystring or null

    The Himmel id of the person of your account who registered it. Null for an agent we registered for you, or from what your records already knew, and for one your account's builder registered, which builder says.

  • builderstring or null

    For an agent the account that opened yours registered - its builder's, named in GET /v1/me - that account's id. Null for every other agent.

  • last_acted_atstring or null

    When an action recorded as its was last asked about or taken, in this request's environment, whoever sent the check: the latest moment of its runs. Never when one of its keys was last used, which any request sets. Null where none has been.

  • rules_read_atstring or null

    When its own key last read its rules (GET /v1/agents/{agent_id}/rules) in this request's environment, to the minute: a read within a minute of the last, given the same, is not written again. A read by a person, your account's own key or another agent is not it reading. Null where it never has.

  • rules_readRulesRead or null

    What it was given then. Null where it has never read its rules.

    2 fields
    • versionslist of VersionReadrequired

      The version of each rule set it was given, in the order given; a rule set with no version in force that day gave none.

      2 fields
      • rule_setstringrequired
      • versionstringrequired
    • checksumstringrequired

      The checksum of the text it was given. The text names its day, so a read on another day gives another: compare versions to say whether it has read what applies now.

  • 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.
  • 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.