Skip to main content
Ownership challenges let the node verify that you control the private key behind a DID before allowing provider registration or key rotation. The workflow is:
  1. POST to create a challenge — the node returns a short-lived string to sign.
  2. Sign the challenge string with the Ed25519 private key for your DID.
  3. Submit the challenge_id and your signature in the subsequent provider register or rotate-key request.

Create an ownership challenge

POST /v1/providers/ownership-challenges

Body parameters

string
required
The DID you will prove ownership of (e.g. "did:key:z6Mk…"). Must match the DID you intend to use when registering or rotating.
string
required
The operation this challenge authorises. Either "register" (new provider) or "rotate_key" (key rotation on an existing provider).
string
Required when operation is "rotate_key". The provider_id of the existing provider whose key you are rotating.

Response

Returns a ProviderOwnershipChallenge with status 201 Created.
string (UUID)
Unique identifier for this challenge. Pass this as ownership_challenge_id in the subsequent request.
string
The provider ID associated with this challenge.
string
The DID this challenge was issued for.
string
Either "register" or "rotate_key".
string
The raw string you must sign with the Ed25519 private key for provider_did. Pass the resulting base64 signature as ownership_signature.
string
ISO 8601 timestamp of when the challenge was created.
string
ISO 8601 timestamp after which this challenge is no longer valid. Default TTL is 300 seconds.
string
ISO 8601 timestamp of when the challenge was successfully consumed. Omitted until the challenge is used.

Status codes

Example response


Retrieve an ownership challenge

GET /v1/providers/ownership-challenges/:challenge_id

Path parameters

string (UUID)
required
The challenge_id returned when you created the challenge.

Response

Returns the same ProviderOwnershipChallenge object described above. The completed_at field is set once the challenge has been successfully used.

Status codes

Example response