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/termsneeds no key: Himmel's terms in force,versionandtext. A version is never changed once published.sign_upsays whether accounts are opened here:open, orcloseduntil Himmel's terms are published, when opening one is503 sign-up-closed.POST /v1/me/accountis for a person signed in to the console whom no account has added yet; a key never opens an account. It takesaccount-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; andretention_years, how many years your records must be kept by your country's law, from 1 to 30 - withname, yours, where Clerk holds none for you, andterms, 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:writeandrules: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, withRetry-Aftersaying in how many seconds the next can be opened). A retry with the sameIdempotency-Keygets the same account, its keys'keynull, 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.
| Scope | Lets the key |
|---|---|
check | send checks and dry-run a policy version |
checks:read | read checks, the check log, alerts and recipients (by id: a key is never given a name) |
checks:write | report what happened to a proposal, take an action back, record a resolution, acknowledge an alert |
rules:read | read 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 |
confirm | confirm or flag rules, and change your settings |
recipients:write | answer a probable match, and undo a link between recipients |
policies:write | post, 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/keyslists 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/keysmakes one: anamesaying what it is for,agentfor an agent's key - the id your account registered it under,422 invalid-request(unknown_agent) for one it has not -env(liveortest, your account's own when left out) andscopes. 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 - soconfirm,recipients:writeandpolicies:writeare 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 is403 insufficient-scope, naming the scope. The answer carries the key,hk_live_…, once: store it before you leave the page. A retry with the sameIdempotency-Keygets the same key's record withkeyempty, never a second key; a key lost before it was stored is revoked and another made.POST /v1/keys/{key_id}/revokerevokes one, from now and for good: the next request with it is401, 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/agentslists every agent your account has registered, in the order registered: itsid, itsrole, itsowner(a person's Himmel id), whether it is switched off (switched_off_at,switched_off_by), who registered it and when, andlast_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. Andrules_read_atwithrules_read— when its own key last read its rules, in the environment you ask in, and what it was given then: theversionsof your rule sets, and thechecksumof 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}/runssays what it did, run by run — each task a person dispatched it to do, as its checks named it intransaction.run(see Check) — the one it acted in last first, fifty to a page (limit,beforeset to the last page'snext_before). For each run:on_behalf_of, everybody its actions said it acted for;first_atandlast_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, bystateandoutcome;statuses, what became of the actions — taken, still asked about, not taken, taken back; andchecks, the check log's query that lists exactly those actions. Its actions sent with no run are counted together inwithout_run. It needschecks:read, as the check log does.GET /v1/runslists every agent's runs at once, the one acted in last first, fifty to a page, each as an agent's runs give it, withagent, whose run it is: a run is its agent's, so two agents that name the same run are two runs.actorkeeps one agent's runs or several's, separated by commas, andsystemthe actions taken in these systems (codes, ornone): a run then counts those actions alone, and itscheckslists exactly them.fromandtokeep 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 withbeforeset to the last page'snext_before, with the same filters. It needschecks:read, and a key made for an agent reads its own agent's runs alone.GET /v1/mapis 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}/rulesgives 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/agentsregisters one:id- letters, digits and_ . : -, up to 64, never a name or an address and never beginningusr_, fixed once registered -role, one line saying what it is ("The support assistant"), andowner, the Himmel id of a person in your account, any role. An id registered already is409 conflict(already_registered).PUT /v1/agents/{agent_id}changes itsroleandowner, both sent; never its id, which its checks record.POST /v1/agents/{agent_id}/switch-offswitches it off, from now: every request its keys send is refused with403 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-onputs 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 itsrole, itsownerand whether it is switched off;people, each person who answers for one of them, with theirs;systems, where they acted, the busiest first,nonefor 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 - andagainst_rules, those taken against your rules, ascheck.against_rulesis 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/peoplelists 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/invitationsinvites a colleague:emailandrole(tenant_admin,tenant_engineerortenant_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-unavailablewhere Clerk could not be asked, and nothing was sent.GET /v1/invitationslists them, andPOST /v1/invitations/{invitation_id}/withdrawwithdraws one: nobody takes it up, and its address goes.GET /v1/me/invitationsandPOST /v1/me/invitations/{invitation_id}/acceptare 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 is422,namerequired: their colleagues pick them by it, to approve and to sign off.PUT /v1/me/nameis 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, is409(named_already). A key has no name:403.POST /v1/people/{person_id}/rolechanges a role, from now.POST /v1/people/{person_id}/removeremoves 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
| Status | Problem type | Why |
|---|---|---|
| 401 | unauthorized | No key was sent, the header is not Bearer <key>, or the key is not in use |
| 403 | insufficient-scope | The 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 |
| 403 | cut-off | The owner of an account you opened cut you off from it |
| 403 | rule-set-not-enabled | The rule set is not enabled for your account |
| 403 | names-withheld | The request searches recipients by name, which a key never may |
| 403 | live-only | A test key tried to confirm rules, change a setting or write a policy |
| 422 | invalid-request | A Himmel-Env header that disagrees with the key's environment |
| 429 | rate-limited | Too many requests in the last minute |
Endpoints
/v1/termsReadable without a keyHimmel'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
versionstringrequiredWhat
POST /v1/me/accountis sent asterms, accepting them. A version is never changed once published.placeholderstands in until the terms are written, and its text says so.textstringrequiredThe terms, in Markdown.
sign_up"open" | "closed"requiredWhether this deployment opens accounts:
closedwhere it signs people in through Clerk's production instance and the terms in force are the placeholder - opening one is then503 sign-up-closed- andopenotherwise.
- 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 itsHimmel-Envdoes not fit the caller. Missing facts are not errors.
/v1/me/accountOpen 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 nullMakes 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
accountAccountFieldsrequired5 fields
namestringrequiredThe 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).slugstringrequiredThe 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 249requiredWhere the company is established, as an ISO 3166-1 code:
US,AE,DE- the United Kingdom isGB. Never read off the currency.currencystring, one of 165requiredThe 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_yearsintegerrequiredHow 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.
termsstringrequiredThe version of Himmel's terms you accept, as
GET /v1/termsgives it: the one in force (422,not_in_force, otherwise).namestring or nullYour 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
accountAccountrequired9 fields
idstringrequiredslugstringrequirednamestringrequiredtest_onlybooleanrequiredtruefor an account that holds test data only: the sandbox. Every other has live and test.retention_yearsintegerrequiredHow 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 nullWhere the company is established, as an ISO 3166-1 code:
US,AE,DE.currencystring or nullThe 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 nullThe 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
versionstringrequiredThe version accepted, as
GET /v1/termsgives it.accepted_bystringrequiredThe Himmel id of the person who accepted them.
accepted_atstringrequired
opened_byOpenedBy or nullThe 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
idstringrequiredIts account's id: what
buildersays on its agents and keys.namestringrequiredIts company's name.
cut_off_atstring or nullWhen 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 nullThe Himmel id of the person who cut it off.
personPersonrequiredYou, its first admin, as
GET /v1/peoplelists you to yourself. A retry with the sameIdempotency-Keygets yournameandemailnull.7 fields
idstringrequiredTheir Himmel id,
usr_…: what every answer that names them says.role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"requiredjoined_atstringrequiredWhen they first joined your account.
namestring or nullTheir 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 nullThe address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.
removed_atstring or nullWhen they left: nobody signs in as them since. Null while they are here.
removed_bystring or nullThe Himmel id of the admin who removed them.
keyslist of ApiKeyMaderequiredIts 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.keyis each one itself, shown here once: store both now. A retry with the sameIdempotency-Keygets their records withkeynull.13 fields
idstringrequiredprefixstringrequiredThe start of the key,
hk_live_9f3Kx2: what your check log shows as its sender.namestringrequiredWhat it is for.
env"live" | "test"requiredscopeslist of stringrequiredcreated_atstringrequiredkeystring or nullrequiredThe key itself,
hk_live_…: shown here once and never again - we keep only its fingerprint. Store it now. Null on a retry with the sameIdempotency-Key, which gets the same key's record: a key lost before it was stored is revoked, and another made.agentstring or nullThe agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.
revoked_atstring or nullWhen it was revoked, for good: a request with it since is
401. Null while it works.revoked_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies 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:
typesays which.
/v1/builder/cut-offScope peopleCut 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 nullMakes 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
idstringrequiredIts account's id: what
buildersays on its agents and keys.namestringrequiredIts company's name.
cut_off_atstring or nullWhen 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 nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/meScope rules:readWho 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
accountAccountrequired9 fields
idstringrequiredslugstringrequirednamestringrequiredtest_onlybooleanrequiredtruefor an account that holds test data only: the sandbox. Every other has live and test.retention_yearsintegerrequiredHow 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 nullWhere the company is established, as an ISO 3166-1 code:
US,AE,DE.currencystring or nullThe 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 nullThe 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
versionstringrequiredThe version accepted, as
GET /v1/termsgives it.accepted_bystringrequiredThe Himmel id of the person who accepted them.
accepted_atstringrequired
opened_byOpenedBy or nullThe 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
idstringrequiredIts account's id: what
buildersays on its agents and keys.namestringrequiredIts company's name.
cut_off_atstring or nullWhen 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 nullThe Himmel id of the person who cut it off.
env"live" | "test"requiredWhere this request acts: a key's own environment, or for a person the account's own unless the request sent
Himmel-Env: test.callerIdentityrequired4 fields
kind"api_key" | "person"requiredidstringrequiredThe key's id, or the person's user id.
role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author" or nullA person's role, which decides their scopes. Null for a key.
actorActor or nullFor 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"requiredidstring or nullon_behalf_ofstring or nullThe person an agent acted for.
scopeslist of stringrequiredWhat 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/keysScope keysYour 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 ApiKeyrequiredEvery key of your account, live and test, newest first - revoked ones too.
12 fields
idstringrequiredprefixstringrequiredThe start of the key,
hk_live_9f3Kx2: what your check log shows as its sender.namestringrequiredWhat it is for.
env"live" | "test"requiredscopeslist of stringrequiredcreated_atstringrequiredagentstring or nullThe agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.
revoked_atstring or nullWhen it was revoked, for good: a request with it since is
401. Null while it works.revoked_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/keysScope keysMake 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 nullMakes 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
namestringrequiredWhat 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 nullWhere it acts:
live, ortestfor 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 nullThe agent the key is for, by the id your account registered it under (
POST /v1/agents):unknown_agentfor 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 nullWhat 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:writeandpolicies:writeare given only by name. Nobody makes a key that can do more than they can.
Responses
200 Successful response
idstringrequiredprefixstringrequiredThe start of the key,
hk_live_9f3Kx2: what your check log shows as its sender.namestringrequiredWhat it is for.
env"live" | "test"requiredscopeslist of stringrequiredcreated_atstringrequiredkeystring or nullrequiredThe key itself,
hk_live_…: shown here once and never again - we keep only its fingerprint. Store it now. Null on a retry with the sameIdempotency-Key, which gets the same key's record: a key lost before it was stored is revoked, and another made.agentstring or nullThe agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.
revoked_atstring or nullWhen it was revoked, for good: a request with it since is
401. Null while it works.revoked_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/keys/{key_id}/revokeScope keysRevoke 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 · stringrequiredIdempotency-Keyheader · string or nullMakes 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
idstringrequiredprefixstringrequiredThe start of the key,
hk_live_9f3Kx2: what your check log shows as its sender.namestringrequiredWhat it is for.
env"live" | "test"requiredscopeslist of stringrequiredcreated_atstringrequiredagentstring or nullThe agent it is for, which every check it sends records. Null for your own software's keys, tied to nobody.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen a request last came with it, to the minute: a key in steady use writes it once a minute. Null: never.
revoked_atstring or nullWhen it was revoked, for good: a request with it since is
401. Null while it works.revoked_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/peopleScope rules:readYour 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 PersonrequiredEverybody in your account, in the order they joined, then everybody who left it, the most recent first.
7 fields
idstringrequiredTheir Himmel id,
usr_…: what every answer that names them says.role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"requiredjoined_atstringrequiredWhen they first joined your account.
namestring or nullTheir 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 nullThe address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.
removed_atstring or nullWhen they left: nobody signs in as them since. Null while they are here.
removed_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/people/{person_id}/roleScope peopleChange 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 · stringrequiredIdempotency-Keyheader · string or nullMakes 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"requiredThe role they have from now:
tenant_admin,tenant_engineerortenant_ops.
Responses
200 Successful response
idstringrequiredTheir Himmel id,
usr_…: what every answer that names them says.role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"requiredjoined_atstringrequiredWhen they first joined your account.
namestring or nullTheir 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 nullThe address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.
removed_atstring or nullWhen they left: nobody signs in as them since. Null while they are here.
removed_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/people/{person_id}/removeScope peopleRemove 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 · stringrequiredIdempotency-Keyheader · string or nullMakes 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
idstringrequiredTheir Himmel id,
usr_…: what every answer that names them says.role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"requiredjoined_atstringrequiredWhen they first joined your account.
namestring or nullTheir 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 nullThe address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.
removed_atstring or nullWhen they left: nobody signs in as them since. Null while they are here.
removed_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/invitationsScope peopleYour 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 InvitationrequiredEvery invitation your account sent, the newest first.
12 fields
idstringrequiredIts id,
ivt_….role"tenant_admin" | "tenant_engineer" | "tenant_ops"requiredstatus"waiting" | "accepted" | "withdrawn" | "expired"requiredwaitingto be taken up;accepted, by the person inaccepted_by;withdrawn;expired, not taken up in time.invited_atstringrequiredexpires_atstringrequiredWhen it runs out, if nobody has taken it up.
emailstring or nullThe address it was sent to. Null once it has ended and nothing else keeps the address: a withdrawn invitation's goes.
invited_bystring or nullThe 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 nullWhen 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 nullaccepted_bystring or nullWho joined by it: the same Himmel id as before for a person who came back.
withdrawn_atstring or nullwithdrawn_bystring or null
- 401No API key was sent, or it is not in use (
unauthorized). - 403The caller may not do this, and
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/invitationsScope peopleInvite 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 nullMakes 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
emailstringrequiredThe address your colleague signs in with. Clerk, which signs people in to Himmel, emails them the invitation.
role"tenant_admin" | "tenant_engineer" | "tenant_ops"requiredWhat they may do:
tenant_admineverything,tenant_engineerthe docs, the sandbox, the check log and keys,tenant_opsthe check log, the review queue and recipients.
Responses
200 Successful response
idstringrequiredIts id,
ivt_….role"tenant_admin" | "tenant_engineer" | "tenant_ops"requiredstatus"waiting" | "accepted" | "withdrawn" | "expired"requiredwaitingto be taken up;accepted, by the person inaccepted_by;withdrawn;expired, not taken up in time.invited_atstringrequiredexpires_atstringrequiredWhen it runs out, if nobody has taken it up.
emailstring or nullThe address it was sent to. Null once it has ended and nothing else keeps the address: a withdrawn invitation's goes.
invited_bystring or nullThe 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 nullWhen 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 nullaccepted_bystring or nullWho joined by it: the same Himmel id as before for a person who came back.
withdrawn_atstring or nullwithdrawn_bystring or null
- 401No API key was sent, or it is not in use (
unauthorized). - 403The caller may not do this, and
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies 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:
typesays which.
/v1/invitations/{invitation_id}/withdrawScope peopleWithdraw 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 · stringrequiredIdempotency-Keyheader · string or nullMakes 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
idstringrequiredIts id,
ivt_….role"tenant_admin" | "tenant_engineer" | "tenant_ops"requiredstatus"waiting" | "accepted" | "withdrawn" | "expired"requiredwaitingto be taken up;accepted, by the person inaccepted_by;withdrawn;expired, not taken up in time.invited_atstringrequiredexpires_atstringrequiredWhen it runs out, if nobody has taken it up.
emailstring or nullThe address it was sent to. Null once it has ended and nothing else keeps the address: a withdrawn invitation's goes.
invited_bystring or nullThe 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 nullWhen 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 nullaccepted_bystring or nullWho joined by it: the same Himmel id as before for a person who came back.
withdrawn_atstring or nullwithdrawn_bystring or null
- 401No API key was sent, or it is not in use (
unauthorized). - 403The caller may not do this, and
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/me/invitationsThe 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 WaitingInvitationrequiredEvery invitation waiting for an address you have signed in with, the newest first.
6 fields
idstringrequiredaccountWaitingAccountrequiredThe account you would join.
2 fields
namestringrequiredopened_byWaitingOpener or nullFor 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"requiredinvited_atstringrequiredexpires_atstringrequiredtermsstring or nullThe version of Himmel's terms you accept taking it up (
GET /v1/terms), sent asterms: 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies 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:
typesays which.
/v1/me/invitations/{invitation_id}/acceptTake 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 · stringrequiredIdempotency-Keyheader · string or nullMakes 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 nullYour 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 nullThe 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_forceotherwise - and not read anywhere else.
Responses
200 Successful response
accountJoinedAccountrequired2 fields
idstringrequirednamestringrequired
personPersonrequired7 fields
idstringrequiredTheir Himmel id,
usr_…: what every answer that names them says.role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"requiredjoined_atstringrequiredWhen they first joined your account.
namestring or nullTheir 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 nullThe address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.
removed_atstring or nullWhen they left: nobody signs in as them since. Null while they are here.
removed_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies 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:
typesays which.
/v1/me/nameScope rules:readGive 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
namestringrequiredYour 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
idstringrequiredTheir Himmel id,
usr_…: what every answer that names them says.role"tenant_admin" | "tenant_engineer" | "tenant_ops" | "author"requiredjoined_atstringrequiredWhen they first joined your account.
namestring or nullTheir 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 nullThe address they sign in with, to an admin alone. Null to anybody else, and once they have left: their address goes.
removed_atstring or nullWhen they left: nobody signs in as them since. Null while they are here.
removed_bystring or nullThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/agentsScope rules:readYour 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 AgentrequiredEvery agent your account has registered, in the order registered.
11 fields
idstringrequiredThe agent's own id in your systems: what every check it sends records, and what a rule reading
actor.idnames.created_atstringrequiredWhen it was registered.
rolestring or nullWhat 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 nullThe 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 nullWhen 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 nullThe Himmel id of the person who switched it off.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen 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 nullWhen 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 nullWhat it was given then. Null where it has never read its rules.
2 fields
versionslist of VersionReadrequiredThe 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_setstringrequiredversionstringrequired
checksumstringrequiredThe
checksumof the text it was given. The text names its day, so a read on another day gives another: compareversionsto 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/agentsScope agentsRegister 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 nullMakes 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
idstringrequiredThe agent's own id in your systems - what every check it sends records, and what a rule reading
actor.idnames: letters, digits and_ . : -, up to 64, never a name or an address, and never beginningusr_. Fixed once registered.rolestringrequiredWhat 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).ownerstringrequiredThe 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
idstringrequiredThe agent's own id in your systems: what every check it sends records, and what a rule reading
actor.idnames.created_atstringrequiredWhen it was registered.
rolestring or nullWhat 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 nullThe 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 nullWhen 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 nullThe Himmel id of the person who switched it off.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen 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 nullWhen 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 nullWhat it was given then. Null where it has never read its rules.
2 fields
versionslist of VersionReadrequiredThe 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_setstringrequiredversionstringrequired
checksumstringrequiredThe
checksumof the text it was given. The text names its day, so a read on another day gives another: compareversionsto 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/agents/{agent_id}Scope rules:readOne 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
idstringrequiredThe agent's own id in your systems: what every check it sends records, and what a rule reading
actor.idnames.created_atstringrequiredWhen it was registered.
rolestring or nullWhat 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 nullThe 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 nullWhen 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 nullThe Himmel id of the person who switched it off.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen 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 nullWhen 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 nullWhat it was given then. Null where it has never read its rules.
2 fields
versionslist of VersionReadrequiredThe 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_setstringrequiredversionstringrequired
checksumstringrequiredThe
checksumof the text it was given. The text names its day, so a read on another day gives another: compareversionsto 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/agents/{agent_id}/runsScope checks:readWhat 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 · stringrequiredlimitquery · integerHow many runs to a page.
beforequery · string or nullThe last page's
next_before, a run's id, to continue from.
Responses
200 Successful response
agentstringrequiredThe agent's id.
runslist of RunrequiredEach run its checks named, in this request's environment, the one acted in last first.
8 fields
runstring or nullrequiredThe run's id, as the agent's checks named it in
transaction.run.on_behalf_oflist of stringrequiredEvery person its actions said the agent acted for, as your own systems identify them; empty where none said.
first_atstringrequiredWhen its first action was asked about or taken.
last_atstringrequiredWhen its last action was asked about or taken.
actionsintegerrequiredHow many actions it took or asked about. A completion or a correction is the action it amends, never another.
answerslist of RunAnswersrequiredWhat the answers that stand came to, by state and outcome, the most first.
3 fields
state"determined" | "undetermined_missing_facts" | "not_covered" | "contested"requiredactionsintegerrequiredoutcomestring or nullWhat a
determinedanswer came to, as its rule set names it; null otherwise.
statuseslist of RunStatusrequiredWhat became of the actions, the most first.
2 fields
status"executed" | "proposed" | "abandoned" | "expired" | "reversed"requiredexecuted, taken;proposed, still being asked about;abandonedorexpired, never taken;reversed, taken back.actionsintegerrequired
checksstring or nullThe 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 nullIts actions sent with no run, counted together; null where there are none.
8 fields
runstring or nullrequiredThe run's id, as the agent's checks named it in
transaction.run.on_behalf_oflist of stringrequiredEvery person its actions said the agent acted for, as your own systems identify them; empty where none said.
first_atstringrequiredWhen its first action was asked about or taken.
last_atstringrequiredWhen its last action was asked about or taken.
actionsintegerrequiredHow many actions it took or asked about. A completion or a correction is the action it amends, never another.
answerslist of RunAnswersrequiredWhat the answers that stand came to, by state and outcome, the most first.
3 fields
state"determined" | "undetermined_missing_facts" | "not_covered" | "contested"requiredactionsintegerrequiredoutcomestring or nullWhat a
determinedanswer came to, as its rule set names it; null otherwise.
statuseslist of RunStatusrequiredWhat became of the actions, the most first.
2 fields
status"executed" | "proposed" | "abandoned" | "expired" | "reversed"requiredexecuted, taken;proposed, still being asked about;abandonedorexpired, never taken;reversed, taken back.actionsintegerrequired
checksstring or nullThe 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 nullWhere 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/runsScope checks:readEvery 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 nullOnly these agents' runs, by id: one, or several separated by commas.
systemquery · string or nullOnly the actions taken in this system, by its code -
nonefor those whose system nobody named - or several, separated by commas: each run counts those alone.fromquery · string or nullOnly 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 nullOnly the runs one of whose actions was asked about or taken before this moment; as
from.limitquery · integerHow many runs to a page.
beforequery · string or nullThe last page's
next_before, as it was given, to continue from.
Responses
200 Successful response
runslist of AgentsRunrequiredEvery 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 nullrequiredThe run's id, as the agent's checks named it in
transaction.run.on_behalf_oflist of stringrequiredEvery person its actions said the agent acted for, as your own systems identify them; empty where none said.
first_atstringrequiredWhen its first action was asked about or taken.
last_atstringrequiredWhen its last action was asked about or taken.
actionsintegerrequiredHow many actions it took or asked about. A completion or a correction is the action it amends, never another.
answerslist of RunAnswersrequiredWhat the answers that stand came to, by state and outcome, the most first.
3 fields
state"determined" | "undetermined_missing_facts" | "not_covered" | "contested"requiredactionsintegerrequiredoutcomestring or nullWhat a
determinedanswer came to, as its rule set names it; null otherwise.
statuseslist of RunStatusrequiredWhat became of the actions, the most first.
2 fields
status"executed" | "proposed" | "abandoned" | "expired" | "reversed"requiredexecuted, taken;proposed, still being asked about;abandonedorexpired, never taken;reversed, taken back.actionsintegerrequired
agentstringrequiredThe agent whose run it is: two agents that name the same run are two runs.
checksstring or nullThe 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 nullWhere 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/mapScope checks:readThe 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 nullOnly these agents' actions, by id: one, or several separated by commas.
systemquery · string or nullOnly the actions taken in this system, by its code -
nonefor those whose system nobody named - or several, separated by commas.effective_fromquery · string or nullThe 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 nullThe 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_fromstringrequiredThe first day counted, as each action is dated.
effective_tostringrequiredThe last day counted, included.
as_ofstringrequiredWhen it was read.
actionsintegerrequiredEvery action an agent asked about or reported on those days that the filters keep, once, by the answer that stands.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
agentslist of MapAgentrequiredEvery agent the filters keep, in the order registered, then any other agent whose actions were counted.
6 fields
idstringrequiredThe agent's own id in your systems.
rolestring or nullrequiredWhat it is, in words, as registered; null for an agent the register lacks.
ownerstring or nullrequiredThe Himmel id of the person who answers for it; null where nobody does.
switched_off_atstring or nullrequiredWhen it was switched off; null while it is on.
actionsintegerrequiredIts actions on those days: nought where it did nothing.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
peoplelist of MapPersonrequiredEach person who answers for one of those agents.
2 fields
idstringrequiredThe person's Himmel id.
agentslist of stringrequiredThe agents listed that they answer for, by id.
systemslist of MapSystemrequiredEach system the actions were taken in, the busiest first.
3 fields
systemstringrequiredThe system's code, or
nonefor the actions whose system nobody named.actionsintegerrequiredThe actions taken in it.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
lineslist of MapLinerequiredOne 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
agentstringrequiredThe agent, by id.
systemstringrequiredThe system, by code, or
none.answer"allowed" | "approval" | "person" | "refused" | "other" | "open"requiredThe kind of answer its actions came to.
actionsintegerrequiredHow many of the agent's actions in the system came to it.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
against_rulesMapFigure or nullThose of them taken against your rules; null where there are none.
2 fields
actionsintegerrequiredHow many actions.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
approvals_waitingMapFigure or nullThose of them whose answer waits on an approval Himmel asked a person for; null where there are none.
2 fields
actionsintegerrequiredHow many actions.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
answerslist of MapAnswerrequiredThe actions of each kind, in the kinds' order.
3 fields
answer"allowed" | "approval" | "person" | "refused" | "other" | "open"requiredThe kind of answer.
actionsintegerrequiredHow many actions came to it.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
not_coveredMapFigurerequiredOf the actions, those no rule of yours gave an answer for.
2 fields
actionsintegerrequiredHow many actions.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
approvals_waitingMapFigurerequiredOf 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
actionsintegerrequiredHow many actions.
checksstringrequiredThe check log's query that lists exactly those actions, one row each.
against_rulesMapFigurerequiredOf the actions, those taken against your rules, as
check.against_rulesis raised.2 fields
actionsintegerrequiredHow many actions.
checksstringrequiredThe 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/agents/{agent_id}Scope agentsChange 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
rolestringrequiredWhat 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).ownerstringrequiredThe 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
idstringrequiredThe agent's own id in your systems: what every check it sends records, and what a rule reading
actor.idnames.created_atstringrequiredWhen it was registered.
rolestring or nullWhat 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 nullThe 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 nullWhen 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 nullThe Himmel id of the person who switched it off.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen 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 nullWhen 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 nullWhat it was given then. Null where it has never read its rules.
2 fields
versionslist of VersionReadrequiredThe 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_setstringrequiredversionstringrequired
checksumstringrequiredThe
checksumof the text it was given. The text names its day, so a read on another day gives another: compareversionsto 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/agents/{agent_id}/switch-offScope agentsSwitch 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 · stringrequiredIdempotency-Keyheader · string or nullMakes 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
idstringrequiredThe agent's own id in your systems: what every check it sends records, and what a rule reading
actor.idnames.created_atstringrequiredWhen it was registered.
rolestring or nullWhat 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 nullThe 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 nullWhen 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 nullThe Himmel id of the person who switched it off.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen 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 nullWhen 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 nullWhat it was given then. Null where it has never read its rules.
2 fields
versionslist of VersionReadrequiredThe 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_setstringrequiredversionstringrequired
checksumstringrequiredThe
checksumof the text it was given. The text names its day, so a read on another day gives another: compareversionsto 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.
/v1/agents/{agent_id}/switch-onScope agentsSwitch 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 · stringrequiredIdempotency-Keyheader · string or nullMakes 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
idstringrequiredThe agent's own id in your systems: what every check it sends records, and what a rule reading
actor.idnames.created_atstringrequiredWhen it was registered.
rolestring or nullWhat 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 nullThe 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 nullWhen 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 nullThe Himmel id of the person who switched it off.
created_bystring or nullThe 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
buildersays.builderstring or nullFor 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 nullWhen 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 nullWhen 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 nullWhat it was given then. Null where it has never read its rules.
2 fields
versionslist of VersionReadrequiredThe 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_setstringrequiredversionstringrequired
checksumstringrequiredThe
checksumof the text it was given. The text names its day, so a read on another day gives another: compareversionsto 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
typesays 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 itsHimmel-Envdoes 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, withRetry-Aftersaying when to try again. - 500Something failed on our side.
X-Request-Ididentifies it in our logs.