Verify a request signature (self-test)

Rebuilds the canonical string from what you send and verifies the detached JWS against the **caller's own** public keys. Use it to get your signing implementation right before the first real transaction. Always answers `200` (except on a malformed body), including when the signature is invalid: a `401` here would be indistinguishable from "your token expired" and would send you debugging the wrong thing. Creates nothing and moves nothing.

Authentication

AuthorizationBearer

Bearer authentication of the form Bearer <token>, where token is your auth token.

Headers

X-Tenant-IdstringRequired
Tenant context used for authorization and routing.
Idempotency-KeystringOptional

Optional client-generated idempotency token (recommended for safe retries).

Request

This endpoint expects an object.
pathstringRequired
Path including the query string, no host.
methodstringOptional

HTTP method of the hypothetical request. Defaults to POST.

timestampstringOptional

Unix seconds, same value as X-Request-Timestamp.

idempotencyKeystringOptional

Value of Idempotency-Key, or empty when the route has none.

contentSha256stringOptional

Lowercase hex SHA-256 of the body. Omit and we compute it from body — that is the step most integrators get wrong.

bodystringOptional
Raw body of the hypothetical request, as a string.
signaturestringOptional

Detached JWS <protected>..<signature>.

Response

Verification result (including failures).

validboolean
canonicalStringstring
The exact string the server signed over. Compare it with yours.
reasonstringOptional

Present only when valid is false. One of request_signature_invalid, request_timestamp_skew, unknown_kid, body_hash_mismatch, signature_missing, no_credential, no_public_key.

messagestringOptional
expectedContentSha256stringOptional
signedHoststringOptional
maxSkewSecondsintegerOptional
usableKidslist of stringsOptional

Keys currently usable by this credential (past their grace period).

kidstringOptional
algenumOptional

Errors

400
Bad Request Error
500
Internal Server Error