/v1/keys/signature-checkCheck this request signature
Verify the RFC 9421 signature on THIS request against the calling key's own registered signers and echo a structured verdict: whether a signer matched, which components were covered, whether the body digest is valid, the created/expires/skew window, and PASS or FAIL with a reason. This is the integrator's debugging endpoint for Web Bot Auth. It only ever inspects the caller's own key and never reveals any other key's data. Sign the request the same way you would sign a real call.
Responses
200The structured signature verdict for this requestkeyIdstring | null requiredThe key that made this request. Null when the caller is a session rather than a key.
verdictstring requiredWhether this request’s signature would be accepted. `fail` is a normal, non-error response here: this endpoint returns 200 and tells you what is wrong.
passfailreasonstring | null requiredWhy the signature failed, in plain words. Null on a pass.
signerThumbprintstring | null requiredThe RFC 7638 thumbprint of the signer that matched, which is the `keyid` your signature carried. Null when none matched.
componentsarray of string requiredThe covered components the signature actually signed. `@method` and `@path` are always required, and `content-digest` is required on a mutating verb.
digestValidboolean requiredWhether the body actually matches its Content-Digest header. Checked independently of the signature, because a signature only proves the HEADER was signed, not that it describes the body you sent.
createdstring | null requiredThe signature’s `created` time, as an ISO 8601 instant. Null when absent.
expiresstring | null requiredThe signature’s `expires` time, as an ISO 8601 instant. The window must be at most five minutes.
skewMsnumber | null requiredHow far the `created` time sits in the future relative to the server clock, in milliseconds. Up to 30 seconds is tolerated; beyond that the signature is rejected.
401No or invalid credentialcodestring requiredStable machine-readable error code. Branch on this, never on the numeric status.
bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.
topupconnect_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.