Rule sets
The catalogue: facts, outcomes, versions and what is not checked; what an agent reads before it starts; and the settings your rules read.
A rule set is a versioned set of rules for one domain — gifts and client entertainment, say. There are three kinds:
- law — maintained once and shared by every account: the consequences the law attaches, such as how much of an expense is deductible. The first is German gifts and client entertainment; the platform is not tied to one jurisdiction.
- policy — your company's own rules, layered after the law: limits, conditions and approvals. A policy may add to the law; it can never change a consequence the law decides. See Policies.
- matching — your rules for when two recipient records are one person. See Recipients.
The catalogue
GET /v1/rules, GET /v1/rules/{rule_set} and GET /v1/rules/{rule_set}/{version} are readable without a key for the rule sets of the law, so you can build a form or a validator before you have an account. With a key, you also see your own policies and matching rules - a key that may read the rules (rules:read), as every read of them asks: one made only to check is 403 insufficient-scope.
Each version lists:
- its facts — every fact it takes, with its type, whether it is required, what it means, for a code the
patternits values must match, and for a number that may go below zerosigned— any other is zero or more. These are the only things it will ever ask you for, and every one is observable: a date, an amount, an account, a recipient, whether a receipt names its guests. Never a conclusion. - your settings it reads, such as your fiscal year start.
- the currency its limits are in (
currency): every amount its rules read is read in it, and an amount in another currency at the figure you send beside it (An amount in another currency); a rule set whose rules read no amount, such as your matching rules, says none. - its outcomes, such as
deductibleandnot_deductible. - what it does not check, and why — a topic the rule set leaves alone on purpose, such as an election made for a whole year rather than for one booking.
- its versions, each with the date it applies from and its changelog.
With a key for an account that has the rule set enabled, each rule's wording and citations are listed too. A version is named here, never chosen: which version answers today, and which of its rules run, is what an agent reads before it starts (below). The worked examples are on each rule's confirmation page (Confirmations).
What an agent reads before it starts
GET /v1/agents/{agent_id}/rules gives an agent the rules it is held to today, for it to read at the start of each run and plan within. It reads what a check reads: every rule set of your account that answers what an agent may do - your own policies, then the law you have switched on, never your matching rules, which say who is who - each with the version that answers today (version, never a draft) and one published to apply from a later date (next). Of that version:
rules- the rules that run: those your rule owner has confirmed, in the order they run, each in the words confirmed (title,wording), with what it cites (clauses), its worked example (example), the people it names through your settings, by Himmel id (people), andwho_actswhere it turns on who acts - an agent rather than a person, say - so it may hold an agent tighter than a person.waiting- the rules not confirmed yet, or marked not right, never in their words: an action one reaches is answerednot_covered.facts, what a check of the agent's sends, as the catalogue lists them, andnever_sent, the facts it never sends — a person, the figure an approval was given for — which Himmel holds for it (An agent never names a person);settings, your settings it reads, with their values today;outcomes; andnot_checked.
text is all of it in words, for the agent's instructions - who it is, how to ask before each action and report what became of it, through the MCP server's tools or the API's two calls, how an amount is written, the four answers, what requests says where an answer names a person and how to ask again about the action (When an answer names a person), keeping its check_id with the work for a later session that starts afresh, and that where the agent's own tools ask Himmel through the SDK they ask and report for it, while it plans within the rules, then each rule set's rules in your rule owner's words, with the name of its check tool - and checksum, its SHA-256, changes whenever what the agent is told changes, so whatever hands it to the agent can tell. Every agent is answered under every playbook of your account, so every agent is given every one. People are named by their Himmel id, never by name. These words are not the check: each action is still asked about, and answered under the rules in force when it is.
Any key or person reads it (rules:read): an agent with its own key, your software for the agents it runs, a person to see what an agent is told. A key of an agent switched off is refused, 403 agent-switched-off, as every request of its keys; an agent your account has not registered is 404 not-found.
When the agent reads it with its own key, the read is kept, so that whoever owns a playbook sees a change to it reach the agents that work by it: the agent's record (GET /v1/agents/{agent_id}, Your agents) says when it last read its rules, in the environment you ask in (rules_read_at), and what it was given (rules_read): the versions of your rule sets, and the checksum of the text. It is kept to the minute - a read within a minute of the last that was given the same is not written again - and a read given anything else is written at once. A read by a person, your own software's key or another agent is not the agent reading. The text names its day, so a read on another day has another checksum: to tell whether an agent has read what applies now, compare its versions with what it would read now.
Your settings
What your rules read about your company — who approves a refund above a limit, who decides a question the rules leave to a person, where your financial year begins — are your account's settings. A version lists the settings it reads as tenant_facts; GET /v1/tenant-facts lists them for your account, as settings: each one a rule set your account has reads, with every rule set that reads it and what each says it is for, and unset where nothing is in force today — a check that reaches a rule reading it asks for it. Their values are beside them: each as it applies today (in_force), and every version (history). Himmel reads one setting itself, whatever your rules read: your financial year's start (fiscal_year_start, as MM-DD), which decides how long a customer's name is kept.
PUT /v1/tenant-facts/{key} writes a new version from valid_from, today when you leave it out. Nothing is overwritten, and every answer keeps the settings it was given with. It is checked first, in this order:
| Problem | When |
|---|---|
invalid-fact, read_by_nothing | Nothing in your account reads a setting of that name: a typo, or a setting of a law set your account has not switched on. The problem's settings lists what your rules do read. |
invalid-fact, unknown_rule | A rule named in emailed_at_once is no rule of your own policies. The detail says which place in the list, never the value. |
pii-in-facts | The value holds an email address or an IBAN. |
invalid-fact | The value does not have the type everything that reads it declares. |
invalid-fact, unknown_user or left_the_account | It names a person who is not in your account, or who has left it. |
invalid-fact, currency | An amount in another currency than a rule set that reads it reads it in, with no figure in that one beside it. |
A person — who approves, who signs off — is named by their Himmel id, never by name. An amount — a limit, a sign-off amount — is in the currency the rule sets that read it state their limits in, which settings lists for it as currencies; where two rule sets read it in two currencies, it is in one of them with what it comes to in the other beside it, under equivalents, as a check's amount is (An amount in another currency). Himmel picks no rate. A change dated back reaches answers already given: the answers dated from valid_from on that read the setting are checked again by a re-run, whose id comes back as rerun_id, and those it changes are issued again, with one checks.rerun alert. A change from today on reaches none given before. In the console, an admin changes settings under Settings, and everybody signed in reads them there.
Versions
A published version never changes. A change to the law is a new version, with the date it applies from — effective_from — and a changelog, and old answers keep citing the version that gave them.
Which version answers a check depends on the transaction's date. For some rule sets the date that counts is the transaction's own; for others it is the start of the fiscal year it falls in (effective_basis: fiscal_year_start), because the law changed from a fiscal year onward. A company whose fiscal year began in July 2023 books a gift in March 2024 under the old version. A check that names rule_version says which version it expects, and is refused (409 rule-version-not-in-force) where another is in force: the version in force always answers.
A version also has a status: draft while it is being written, published, and superseded once a later version takes over. A draft can be confirmed and tried, but it is marked as a draft wherever it is shown.
Endpoints
/v1/rulesReadable without a keyEvery rule set you can see
The public catalogue: each rule set's title, domain and versions with their effective dates and changelog. Without a key it lists the rule sets of the law; with one, your own policies and matching rules too.
Readable without a key, for the rule sets of the law; with one, it needs the scope rules:read, and your own rule sets are added - except for a key made for an agent, which reads it as anybody does: what its agent is held to is GET /v1/agents/{agent_id}/rules.
Responses
200 Successful response
rule_setslist of RuleSetListItemrequired5 fields
rule_setstringrequiredkindstringrequiredlaw,policyormatching.domainstringrequiredtitlestringrequiredversionslist of RuleSetVersionSummaryrequired9 fields
versionstringrequiredstatusstringrequireddraft,publishedorsuperseded.effective_fromstringrequiredeffective_basisstringrequiredWhat the date is compared with: the transaction's own, or its year's start.
effective_date_factstringrequiredjurisdictionslist of stringrequiredchecksumstringrequiredchangelogstring or nullsuperseded_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/rules/{rule_set}Readable without a keyOne rule set and its versions
Readable without a key for a rule set of the law.
Readable without a key, for the rule sets of the law; with one, it needs the scope rules:read, and your own rule sets are added - except for a key made for an agent, which reads it as anybody does: what its agent is held to is GET /v1/agents/{agent_id}/rules.
Parameters
rule_setpath · stringrequired
Responses
200 Successful response
rule_setstringrequiredkindstringrequireddomainstringrequiredtitlestringrequiredjurisdictionslist of stringrequiredversionslist of RuleSetVersionSummaryrequired9 fields
versionstringrequiredstatusstringrequireddraft,publishedorsuperseded.effective_fromstringrequiredeffective_basisstringrequiredWhat the date is compared with: the transaction's own, or its year's start.
effective_date_factstringrequiredjurisdictionslist of stringrequiredchecksumstringrequiredchangelogstring or nullsuperseded_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.
- 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/rules/{rule_set}/{version}Readable without a keyOne version: its facts, and its rules
The facts the version takes - name, type, whether required, what it means - so you can build a form or a validator against it; your settings it reads; the currency its limits are in, which an amount in another currency is read in at the figure you send beside it; its outcomes; and what it deliberately does not check. Readable without a key. With a key for an account that has the rule set enabled, each rule's wording and citations too.
Readable without a key, for the rule sets of the law; with one, it needs the scope rules:read, and your own rule sets are added - except for a key made for an agent, which reads it as anybody does: what its agent is held to is GET /v1/agents/{agent_id}/rules.
Parameters
rule_setpath · stringrequiredversionpath · stringrequired
Responses
200 Successful response
versionstringrequiredstatusstringrequireddraft,publishedorsuperseded.effective_fromstringrequiredeffective_basisstringrequiredWhat the date is compared with: the transaction's own, or its year's start.
effective_date_factstringrequiredjurisdictionslist of stringrequiredchecksumstringrequiredrule_setstringrequiredkindstringrequireddomainstringrequiredtitlestringrequiredfactsmap of FactSpecrequiredEvery fact the version takes, by name.
tenant_factsmap of TenantFactSpecrequiredoutcomeslist of stringrequirednot_checkedlist of NotCheckedrequired2 fields
topicstringrequiredreasonstringrequired
changelogstring or nullsuperseded_bystring or nullcurrencystring or nullThe currency its limits are in, as an ISO 4217 code: every amount its rules read is read in it, an amount in another currency at the figure sent beside it (
equivalents) - never at a rate we pick. Null where its rules read no amount, and for a version stored before rule sets said one.ruleslist of CatalogueRule or nullRules and their wording: only for an account with the rule set enabled.
7 fields
rulestringrequiredstagestringrequiredtitlestringrequiredwordingstringrequiredThe plain-language sentence your rule owner confirms.
rule_hashstringrequiredcitationslist of Citationrequired4 fields
sourcestringrequiredThe source's key within the rule set, such as
estg.paragraphstring or nullclausestring or nulltext_refstring or nullThe passage in the rule set's own copy of the source,
sources/<file>#<anchor>.
statusstring or null
rules_visibleboolean or nullfalsewhen the rules are left out because no key was sent.
- 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}/rulesScope rules:readWhat an agent is held to today
The rules the agent is held to today, for it to read at the start of each run and plan within: every rule set of your account that answers what it may do - your own policies, then the law you have switched on, never your matching rules - each with the version that answers today, as a check picks it, and a version published from a later date in next. Of each, the rules that run, in the words your rule owner confirmed: each with what it cites, its worked example, the people it names through your settings, by Himmel id, and who_acts where it turns on who acts; the rules not confirmed yet, or marked not right, are listed as waiting, without their wording - an action one reaches is answered not_covered. Then the facts a check sends, your settings it reads with their values today, its outcomes and what it does not check. text is all of it in words, for the agent's instructions, and checksum its SHA-256, which changes whenever what the agent is told changes. Every agent is answered under every playbook of your account, so every agent is given every one. No person is named: people by Himmel id. These words are not the check: each action is checked when it is asked about, under the rules in force then. Read with the agent's own key, it is kept as the agent's latest read in this request's environment - when, and the versions and checksum it was given - which every answer that gives the agent says (rules_read_at, rules_read); a read by a person, your account's own key or another agent is not the agent reading. 404 not-found for an agent your account has not registered; a key of an agent switched off is refused (agent-switched-off).
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
agentHeldAgentrequired2 fields
idstringrequiredThe agent's own id in your systems.
rolestring or nullWhat it is, in words. Null for an agent whose role nobody has said yet.
accountHeldAccountrequired3 fields
namestringrequiredcountrystring or nullWhere your company is established, ISO 3166-1.
currencystring or nullThe currency your books are kept in, ISO 4217.
as_ofstringrequiredThe day these are the rules of: today, in UTC, as a check's day.
playbookslist of HeldPlaybookrequiredEvery rule set of your account that answers what the agent may do: your own policies, then the law you have switched on - never your matching rules, which say who is who.
16 fields
rule_setstringrequiredWhat a check names as its
rule_setto be checked against it.kind"policy" | "law"requiredpolicy, your own;law, ours you have on.titlestringrequireddomainstringrequiredjurisdictionslist of stringrequiredThe countries it covers, ISO 3166-1; empty for any country.
ruleslist of HeldRulerequiredThe rules that run today - confirmed by your rule owner - in the order they run.
8 fields
rulestringrequiredstagestringrequiredscope,outcomeorconsequence.titlestringrequiredwordingstringrequiredThe plain-language sentence your rule owner confirmed.
clauseslist of stringrequiredWhat it cites: each clause or paragraph of its source, as its citations name it.
who_actsbooleanrequiredTrue where it turns on who acts - an agent rather than a person, or one agent in particular - so it may hold an agent tighter than a person.
peoplelist of HeldPersonrequiredThe people it names through your settings, each by Himmel id.
3 fields
settingstringrequiredThe setting, as your rules name it:
support_team_lead.descriptionstringrequiredWhat the rule set says the setting is for, in its own words.
personstring | list of string or nullThe Himmel id of the person it names today - the id an answer names as its approver or signer - or each one's, for a setting that names several. Null where nobody is set. Never a name, and never sent by the agent: who approved its action is Himmel's to hold.
examplestring or nullIts worked example, as one sentence: the first of the cases that name it.
waitinglist of WaitingRulerequiredThe rules of the version that do not run yet, never with their wording.
3 fields
rulestringrequiredtitlestringrequiredstatus"pending" | "flagged"requiredpending, not confirmed yet;flagged, marked not right by your rule owner.
factsmap of FactSpecrequiredEvery fact a check of the agent's sends, by name: never a person, nor the figure an approval was given for, which
never_sentnames.never_sentlist of stringrequiredThe facts of the version a key made for an agent never sends, by name: every person, and the figure an approval was given for. Himmel holds them for the agent - none where nothing is recorded on the action - and one sent with a value is refused,
422 invalid-fact,not_the_keys.settingslist of HeldSettingrequiredEach of your settings the version reads.
4 fields
settingstringrequiredtypestringrequireddescriptionstringrequiredvalueanyIts value in force today - a person by Himmel id, an amount in minor units with its currency - or null where none is: a check that reaches a rule reading it asks for it.
outcomeslist of stringrequirednot_checkedlist of NotCheckedrequiredWhat it deliberately does not check, and why.
2 fields
topicstringrequiredreasonstringrequired
versionstring or nullThe version that answers today; null where none does yet.
effective_fromstring or nullThe date that version applies from.
currencystring or nullThe currency its limits are in, ISO 4217; null where it reads no amount.
nextVersionAhead or nullA version published to apply from a later date; null where none is.
2 fields
versionstringrequiredeffective_fromstringrequiredThe date it applies from.
textstringrequiredAll of it in words, for the agent's instructions: how to ask before each action, what
requestssays where an answer names a person and how to ask again about the action, then each rule set's rules as your rule owner confirmed them, who they name, what waits for your rule owner, the facts a check sends and those it never sends. People by Himmel id, never by name.checksumstringrequiredThe SHA-256 of
text, hex: it changes whenever what the agent is told changes.
- 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/tenant-factsScope rules:readThe settings your checks are answered with
What your rules read about your company - who approves, who signs off, your financial year's start, a limit of your own - each as it applies today (in_force), with every version (history), and settings: each one a rule set of your account reads, with the rule sets that read it and what each says it is for, for an amount the currencies they read it in, and unset where nothing is in force today, so a check reaching a rule that reads it asks for it. Himmel reads your financial year's start itself. Every check records the settings it read.
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
in_forceobjectrequiredEach setting as it applies today.
historylist of TenantFactVersionrequiredEvery version of every setting, by key, newest first - a day's the latest saved first, so the first dated on or before a day is the one in force that day.
5 fields
keystringrequiredvalid_fromstringrequiredvalueanyconfirmed_bystring or nullconfirmed_atstring or null
settingslist of SettingrequiredEach setting a rule set of your account reads, or Himmel does, by key, with what reads it - and any other set, which nothing reads. Its values are in
in_forceandhistory.7 fields
keystringrequiredread_bylist of SettingReaderrequiredWhat reads it, each in its own words: your policies first, then your matching rules, then the law you have switched on, then Himmel. Empty for a setting stored that nothing reads any more, which cannot be changed.
5 fields
kind"law" | "policy" | "matching" | "himmel"requiredA law set switched on for your account, one of your policies or your matching rules - or
himmel: Himmel itself, which reads your financial year's start and which actions taken against the rules are emailed at once.titlestringrequiredversionslist of stringrequiredThe rule set's versions that declare the setting, drafts included, oldest first.
descriptionstringrequiredWhat this reader says the setting is for, as its newest version declares it.
rule_setstring or nullThe rule set's key; null for Himmel.
unsetbooleanrequiredNo value is in force today, or it is none: a check reaching a rule that reads it asks for it.
typestring or nullThe type a value must have, as what reads it declares it (docs: rule sets) - a person by their Himmel id is
user. Null for a setting nothing reads.patternstring or nullFor a code - a
string, or anaccountthat declares one: a regular expression the whole value must match. A value that does not is refused withinvalid-fact.valueslist of string or nullAn
enum's values.currencieslist of string or nullFor an amount: the currencies the rule sets that read it read it in, as their versions say. A value is in one of them, with what it comes to in each other beside it (
equivalents, as a check's amount carries them) - otherwisePUTrefuses it.
- 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/tenant-facts/{key}Scope confirmA new version of one setting
Writes a new version from valid_from (today when left out). Nothing is overwritten, and an answer keeps the settings it read as its record. Dated back, a change reaches answers already given: those dated from valid_from on that read the setting are issued again by a re-run (rerun_id), with one checks.rerun alert once it is done - a financial year's start corrected to 1 April reaches the credits of the year it moves. The setting is checked first: something in your account reads it - a key nothing reads, a typo say, is invalid-fact with read_by_nothing, and the problem's settings lists what your rules do read - and its value holds no email address or IBAN (pii-in-facts) and has the type everything that reads it declares (invalid-fact). A signer or an approver is a person in your account, by their Himmel id, never a name (unknown_user when nobody here has it). An amount is in the currency each rule set that reads it reads it in, or carries what it comes to in that one beside it (equivalents) - otherwise invalid-fact, currency. The rules whose actions taken against them you hear of at once (emailed_at_once) are rules of your own policies, by id - otherwise invalid-fact, unknown_rule.
Needs a key with the scope confirm. 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
keypath · stringrequired
Request body · application/json
valueanyrequiredvalid_fromstring or nullconfirmed_bystring or nullWho did it, when your key acts for a person: their Himmel id, which the console's Developers page shows them, and Settings' People an admin. They must be in your account, with a role that could do this themselves, and the record keeps it as your key's claim. A key made for an agent names nobody but itself: leave it out. Signed in to the console, leave it out: it is you.
Responses
200 Successful response
keystringrequiredvalid_fromstringrequiredrerun_idstringrequiredThe re-run this change queued: the answers dated from
valid_fromon that read the setting are issued again where it changes them, with onechecks.rerunalert. A change from today on reaches none given before.valueany
- 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). - 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.