HYBRID-CHAINDEVELOPERS
DOCUMENTATIONv2
GET

Developer access

List request signing keys

/api/v2/security/signing-keys
AUTHENTICATIONBearer token · security:readAUTHORITATIVE OWNERdeveloper-platformCONTRACT AUTHORITYGenerated Rust OpenAPISTATUSSource ready · production listed

PURPOSE + BUSINESS CONTEXT

List public request-signing key metadata for the authenticated client.

WHEN THIS CALL IS USEFUL

Call this to inventory the authenticated client's active and revoked request-signing keys before choosing a key, investigating signature failures, rotating credentials, or revoking access.

OUTCOME · Discover

What changes

Read-only projection; it grants no mutation, settlement, traffic, or authority change.

WHY IT MATTERS

  • Gives people and agents a contract-backed way to discover request-signing keys.
  • Gives human and agentic integrations one discoverable path from service identity and reference data to executable OpenAPI, capability ownership, guides, SDK status, and request-signing controls.

ISOLATION + AUTHORITY

Public service metadata, the OpenAPI document, the capability registry, guides, SDK listings, bearer credentials, step-up grants, and request-signing keys are separate artifacts. Discovery metadata grants no tenant, wallet, custody, payment, settlement, publisher, matching, or trading authority; public signing-key metadata never includes private key material.

BEFORE YOU CALL

  • Authenticate at the documented boundary: bearer+scope.
  • Use the live OpenAPI schema as the authority for the exact request shape and response model.
  • Resolve whether the caller needs public discovery, bearer authorization, purpose-bound step-up, or RFC 9421 request signing; do not substitute one mechanism for another.

WHAT TO DO NEXT

  • Select only an active key whose identifier and public JWK match the caller's retained private key and intended security policy.
  • Use a fresh purpose-bound step-up authorization to register, rotate, or revoke a key; never upload or expose the private key.

AGENT GUIDANCE

  • Use request-signing keys only for the purpose and lifecycle stage described by this operation; do not treat it as authority for an adjacent action.
  • Use the live OpenAPI schema as the authority for the exact request shape and response model.
  • Treat deployment identity, OpenAPI schema, capability readiness, guide narrative, SDK publication, bearer authorization, step-up authorization, and request-signing proof as distinct inputs; none substitutes for another.
  • Use response links and canonical identifiers instead of constructing internal service URLs or scraping the website.
MACHINE CONTRACT

The exact deployed parameters, schemas, responses, security requirements, and Hybrid-Chain agent metadata are authoritative at this operation's production OpenAPI JSON Pointer. The readable tables below add integration guidance; the deployed OpenAPI controls if guidance and the machine contract ever differ.

Open the authoritative production contract

EXTENDED INTEGRATION GUIDANCE

Readable request and response reference

Examples illustrate integration intent; the referenced OpenAPI operation and component schemas define the executable shape.

PARAMETERS

Headers, path, query, and body

NAMELOCATIONPRESENCETYPE / RULES / PURPOSE
AuthorizationheaderRequired

Bearer tokenCredential containing the security:read scope.EXAMPLEBearer hc_live_…

STABLE ERROR CODES

Branch on the code, then follow the recovery action

These codes are published by the authoritative gateway contract for this endpoint. Treat message as safe diagnostic text; integrations should branch on code and HTTP status.

STATUSCODEMEANING
400invalid_jsonThe JSON body is malformed or fails the published identity-security schema.
400invalid_security_requestThe session, scope, public key, proof, or purpose-bound security request is invalid.
401invalid_credentialsThe bearer, client assertion, or proof-of-possession credential is invalid.
403step_up_requiredFresh purpose-bound authenticator verification or stronger authority is required.
404signing_key_not_foundThe requested signing-key or workload-client resource was not found.
409security_conflictThe requested identity-security transition conflicts with current state.
503identity_security_unavailableThe authoritative Identity security service is temporarily unavailable.

RESPONSES

Status and payload examples

200Public request-signing key metadata for this authenticated client.Read completed · JSON RESPONSE+
[
  {
    "key_id": "hck_…",
    "algorithm": "ed25519",
    "thumbprint": "f4a5…",
    "label": "Production settlement worker",
    "status": "ACTIVE",
    "rotated_from_key_id": null,
    "created_at": "2026-08-10T21:00:00Z",
    "expires_at": null,
    "revoked_at": null
  }
]
INTEGRATION DECISION
CALLER ACTION
Accept the returned representation or receipt, then select only an active key whose identifier and public JWK match the caller's retained private key and intended security policy.
RETRY SAFETY
Repeat only when the integration needs a fresher authoritative projection.
STATE RECONCILIATION
Use returned identifiers and versions as the comparison point for later reads. Refresh the application, credential or callback record; compare scope, key identifier, secret-display state, version, and revocation or rotation receipt.
401The bearer credential is invalid.Authentication required · JSON RESPONSE+
{
  "code": "invalid_credentials",
  "message": "The bearer credential is invalid."
}
INTEGRATION DECISIONinvalid_credentials
CALLER ACTION
Discard the rejected credential, complete the documented authentication or reassertion flow, and rebuild any request signature with fresh timestamps and nonces.
RETRY SAFETY
Retry only with a newly valid credential and fresh replay-protection values. Do not replay an expired signature.
STATE RECONCILIATION
Authentication failed before an authoritative read was returned for developer applications, credentials, signing keys, callbacks, scopes, secrets, and lifecycle receipts.
ESCALATE WHEN
Escalate when a secret-bearing result was lost, key or callback state is ambiguous, or least-privilege scope cannot be established.
503Identity security is unavailable.Dependency unavailable or outcome uncertain · JSON RESPONSE+
{
  "code": "identity_security_unavailable",
  "message": "Identity security is unavailable."
}
INTEGRATION DECISIONidentity_security_unavailable
CALLER ACTION
Treat the failure as transient and preserve the last known good representation without presenting it as fresh.
RETRY SAFETY
Retry with bounded exponential backoff and jitter; stop after the integration's failure budget is exhausted.
STATE RECONCILIATION
Refresh the application, credential or callback record; compare scope, key identifier, secret-display state, version, and revocation or rotation receipt.
ESCALATE WHEN
Escalate when a secret-bearing result was lost, key or callback state is ambiguous, or least-privilege scope cannot be established.

OPERATIONAL NOTES

Security and lifecycle guarantees

  • The response is a JSON array, not an object wrapper.
  • Only public-key lifecycle metadata is returned. Private keys never enter Hybrid-Chain.
  • A workload bearer sees only its own derived request-signing key projection.
DOCUMENTATION STATUS

This route is implemented in canonical gateway source and appears in the production OpenAPI snapshot observed 2026-09-11T06:35:11.572Z. Authentication, tenant, feature, venue, and market policy still apply.

Verify the exact production OpenAPI operation Return to the V2 directory