- POST to create a challenge — the node returns a short-lived string to sign.
- Sign the
challengestring with the Ed25519 private key for your DID. - Submit the
challenge_idand your signature in the subsequent provider register or rotate-key request.
Create an ownership challenge
POST /v1/providers/ownership-challenges
Body parameters
The DID you will prove ownership of (e.g.
"did:key:z6Mk…"). Must match the DID you intend to use when registering or rotating.The operation this challenge authorises. Either
"register" (new provider) or "rotate_key" (key rotation on an existing provider).Required when
operation is "rotate_key". The provider_id of the existing provider whose key you are rotating.Response
Returns aProviderOwnershipChallenge with status 201 Created.
Unique identifier for this challenge. Pass this as
ownership_challenge_id in the subsequent request.The provider ID associated with this challenge.
The DID this challenge was issued for.
Either
"register" or "rotate_key".The raw string you must sign with the Ed25519 private key for
provider_did. Pass the resulting base64 signature as ownership_signature.ISO 8601 timestamp of when the challenge was created.
ISO 8601 timestamp after which this challenge is no longer valid. Default TTL is 300 seconds.
ISO 8601 timestamp of when the challenge was successfully consumed. Omitted until the challenge is used.
Status codes
| Code | Meaning |
|---|---|
201 Created | Challenge issued successfully. |
400 Bad Request | Invalid provider_did format or missing required fields. |
Example response
Retrieve an ownership challenge
GET /v1/providers/ownership-challenges/:challenge_id
Path parameters
The
challenge_id returned when you created the challenge.Response
Returns the sameProviderOwnershipChallenge object described above. The completed_at field is set once the challenge has been successfully used.
Status codes
| Code | Meaning |
|---|---|
200 OK | Challenge found. |
404 Not Found | No challenge with the given challenge_id exists. |