Check a tenant's BYOK backend coordinates before declaring them (platform)

Checks coordinates a platform operator is considering for one tenant's own
(BYOK) key-material backend, and answers what was checked. Required scope:
admin.platform.key-backend.byok.declare, plus the ROOT platform

tenant.

It rides the declare scope rather than a read scope deliberately:

the operation has a side effect an attacker would want, an outbound connection
to a host the caller names, and that is a capability someone entitled to declare
a backend already has while a reader must not gain it.

It persists nothing and it reads nothing. No declaration is

created or mutated, no credential is read, sealed or unsealed, no
key-encryption key is moved and no lifecycle state changes. Equally,
nothing about the tenant's current declaration takes part in the
verdict
: every value checked travels in the request body, so the answer is
a statement about the coordinates being proposed and never about the ones the
tenant already holds. Calling it on a tenant that has already bound a backend is
explicitly supported and changes nothing. Its one lasting effect is an audit row
recording that a configuration was submitted for checking.

A FAILED verdict is an HTTP 200. The question is whether the

submitted coordinates are admissible and, where they name an operator-specific
host, whether that host answers. "It did not answer" is an answer, so it arrives
as a 200 carrying FAILED/UNREACHABLE. A client that
renders that as a transport error loses the distinction that makes the operation
useful.

It never answers PASSED, and cannot. A pass means key

material was wrapped and unwrapped again and came back identical. This operation
presents no credential - the request shape carries none - and wraps nothing, so a
pass is not something it is able to observe. The green outcome is
NOT_APPLICABLE. Nothing about authorization, entitlement to the

named key, or key material is known until the backend is declared and bound.

Which checks run depends on the selected family and on what was submitted, and the verdict names them. SHAPE and ENDPOINT_POLICY always run. KEY_ID_GRAMMAR_PARSED runs when a keyId was supplied

AND the declared family publishes a grammar for it - aws-kms,
gcp-kms and gcp-kms-hsm do; Azure key names and PKCS#11

labels have none, and for those the entry is ABSENT rather than reported as
vacuously passing. TRANSPORT_PROBE runs only when an
endpoint is supplied - so for the four PKCS#11 tokens and the two

GCP tokens, which name no operator-specific host, nothing is contacted and the
verdict carries no TRANSPORT_PROBE entry at all. That is what stops
a green answer reading as "everything is fine".

An endpoint the declared backend does not accept is a 422, not a verdict, and neither is one omitted where the

backend requires it. The rule is the declared per-backend requirement the DECLARE
verb enforces, read here by the same single reader - so a body this check admits
is a body the declare admits, and a rehearsal cannot come back green for a
submission the commit refuses.

The probe is pinned at TCP connect plus TLS handshake and issues no application-layer request. A vault that completes the handshake and would decline an unauthenticated API call therefore answers ENDPOINT_ANSWERED, because it was never asked anything to

decline.

503 never means "the backend did not answer". It means this

instance declined to start a check it could not bound, because too many outbound
reachability probes are already in flight here. It carries
Retry-After and no verdict member at all, because a bounded-out

request contacted nothing.

The named backend family is checked against this tenant's admissibility before anything is contacted, so a family the tenant may never declare

cannot drive an outbound dial. That refusal is a 422 identical to the declare
verb's.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
uuid
required
Body Params

The coordinates to check. Everything checked travels here; nothing is read from the tenant's declaration. It carries NO CREDENTIAL, so the check could not authenticate and a green verdict must never be read as 'the backend accepted us'. It MAY carry a keyId: that coordinate is PARSED against the backend family's own grammar (aws-kms, gcp-kms, gcp-kms-hsm publish one; Azure key names and PKCS#11 labels do not) and is never RESOLVED - no credential is presented and no backend is contacted for it, so a passing KEY_ID_GRAMMAR_PARSED entry says the coordinate COULD name a key on this family and never that the key is there. Omit it to rehearse only the endpoint, and the entry is then absent from the checks list rather than reported as vacuously passing. Unknown keys are rejected rather than ignored.

Coordinates submitted for a pre-commit check on one tenant's own (BYOK) key-material backend. Everything checked travels in this body; nothing is read from the tenant's persisted declaration and nothing is written. Carries no credential. An optional key id is PARSED against the backend family's own grammar and is never resolved: the check presents no credential and contacts no backend for it, so a passing grammar entry is not a statement that the key exists, is reachable or is usable.

string
enum
required
length ≥ 1
^(?i)(SOFTHSM|NSHIELD|LUNA|CLOUDHSM|AWS-KMS|GCP-KMS|GCP-KMS-HSM|AZURE-KV|AZURE-KV-MHSM)$

Key-protection backend from the closed nine-value set (4 PKCS#11 HSM vendors + 5 Cloud KMS backends). Accepted case-insensitively; the verdict echoes the registry's canonical lowercase spelling. A family this tenant may not declare is refused 422 BEFORE anything is contacted.

string
length between 0 and 2048

The egress endpoint to check: an absolute https URL with a host and no inline credentials. Omit it for a family that carries no operator-specific host — the verdict then reports COORDINATES_ADMITTED with no TRANSPORT_PROBE among the checks that ran, which is what stops a green answer reading as 'everything is fine'. An endpoint this submitter may not dial is a 400, never a verdict. On an ANKA-operated deployment the tenant-plane operation additionally refuses private and unique-local addresses, which the platform-plane operation accepts: the network they name belongs to the operator, not to the tenant.

string
length between 0 and 255
^[A-Za-z0-9:/._\-]+$

The key coordinate to check: a key ARN on AWS, a Cloud KMS resource path on GCP, a vault key name on Azure, a token key label on a PKCS#11 vendor. Optional - omit it to rehearse only the endpoint. When supplied and the family publishes a grammar (aws-kms, gcp-kms, gcp-kms-hsm), it is PARSED with that vendor's own parser and the verdict names KEY_ID_GRAMMAR_PARSED among the checks that ran. The parse is local: no credential is presented and no backend is contacted for it, so a passing entry says the coordinate COULD name a key on this family and never that the key exists. Azure key names and PKCS#11 labels have no vendor grammar, so for those families the check does not run and is absent from the list.

Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
Responses

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json
application/problem+json