Register a webhook signing key
Registers a new webhook signing key for an enterprise. The key can be provided inline via a JWKS payload or referenced via a JWKS URI.
Key ID selection: The keyId (derived from the kid field in the JWK, or
supplied explicitly for JWKS URI registrations) must be unique within the
enterprise. Once a keyId is used — even if the key is later revoked — it is
permanently tombstoned and cannot be reused. Plan for this by choosing a
stable, unique keyId from the start (e.g. my-key-v2).
Recommended rotation workflow:
- Register the new key under a new
keyId(e.g.my-key-v2). - Update your service configuration to sign webhooks with the new key.
- Revoke the old key only after you have confirmed the new key is working.
Authorization: Caller must be an admin of the specified enterprise.
Path Params
-
enterpriseIdstring requiredThe enterprise ID.
Header Params
-
X-BitGo-OTPstring requiredOTP code for verification. Required for webhook key management operations.
Body Params
object
-
jwksobjectInline JWKS payload containing the public key(s). Mutually exclusive with jwksUri. Thekidfield inside the JWK object becomes thekeyIdfor this registration. Choose a stable, uniquekidvalue (e.g.my-key-v2) because once akeyIdis revoked it is permanently tombstoned and cannot be reused.jwks object
-
keysarray of objects requiredArray of JWK objects. Exactly one key must be provided.
-
-
jwksUristringURI pointing to a hosted JWKS endpoint. Mutually exclusive with jwks. -
keyIdstringCustomer-provided key identifier. Required when registering via
jwksUri(must match thekidin your JWKS endpoint). Optional when registering inline JWKS (derived from the JWKkidfield if not provided).Permanent restriction: Once a
keyIdis registered under an enterprise — even if the key is later revoked — thekeyIdis permanently tombstoned and cannot be reused. Attempting to re-register the samekeyIdreturns a 400 error. Choose stable, unique values (e.g.my-key-v2) to avoid needing to update secrets and configuration after key rotation. -
keyNamestringHuman-readable name for the key.
Responses
201
Key successfully registered.
Response Body
object
-
idstring uuid requiredInternal UUID of the registered key. -
keyIdstring requiredThe derived key identifier. -
algorithmstring enum nullableThe signing algorithm (EdDSA or ECDSA). Null for JWKS URI registrations.EdDSAECDSA -
jwksUristring nullableThe JWKS URI if the key was registered via URI. -
statusstring requiredStatus of the newly registered key. -
createdDatestring date-time requiredWhen the key was registered.
400
Bad Request
Response Body
ONE OF
-
codestring -
messagestring -
statusinteger
-
codestring -
messagestring -
statusinteger -
failedValidationsobject
401
Unauthorized
Response Body
object
-
codestring -
messagestring -
statusinteger
403
Forbidden
Response Body
object
-
codestring -
messagestring -
statusinteger
409
Conflict - The request conflicts with the current state of the resource
Response Body
object
-
codestring -
messagestring -
statusinteger
500
Server Error - Transient error please try again
Response Body
object
-
codestring -
messagestring -
statusinteger