curl --request POST \
--url "https://directory.example.com/register-did" \
--header "Content-Type: application/json" \
--data '{
"did": "did:openpayload:1111111111111111111111",
"timestamp": "2026-07-16T12:00:00Z",
"signature": "<signature>",
"root_pubkey": "z<ed25519-public-key>",
"did_document": {
"id": "did:openpayload:1111111111111111111111",
"verificationMethod": [
{
"id": "did:openpayload:1111111111111111111111#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<ed25519-public-key>"
}
],
"authentication": [
"did:openpayload:1111111111111111111111#keys-1"
],
"keyAgreement": [
{
"id": "did:openpayload:1111111111111111111111#x25519-1",
"type": "X25519KeyAgreementKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<x25519-public-key>"
}
],
"service": [
{
"id": "did:openpayload:1111111111111111111111#relay",
"type": "OpenPayloadRelayService",
"serviceEndpoint": ["https://relay.example.com"]
},
{
"id": "did:openpayload:1111111111111111111111#cache",
"type": "OpenPayloadCacheService",
"serviceEndpoint": ["https://cache.example.com"],
"authorization": [
"did:openpayload:1111111111111111111111#keys-1"
]
}
]
}
}'
{
"status": "did registration pending",
"registration_status": "pending",
"tx_id": "<transaction-id>",
"did": "did:openpayload:1111111111111111111111",
"did_document": {
"id": "did:openpayload:1111111111111111111111",
"verificationMethod": [
{
"id": "did:openpayload:1111111111111111111111#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<ed25519-public-key>"
}
],
"authentication": [
"did:openpayload:1111111111111111111111#keys-1"
],
"keyAgreement": [
{
"id": "did:openpayload:1111111111111111111111#x25519-1",
"type": "X25519KeyAgreementKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<x25519-public-key>"
}
],
"service": [
{
"id": "did:openpayload:1111111111111111111111#relay",
"type": "OpenPayloadRelayService",
"serviceEndpoint": ["https://relay.example.com"]
},
{
"id": "did:openpayload:1111111111111111111111#cache",
"type": "OpenPayloadCacheService",
"serviceEndpoint": ["https://cache.example.com"],
"authorization": [
"did:openpayload:1111111111111111111111#keys-1"
]
}
]
}
}
DIDs
Register a DID
Submit a new public DID record.
curl --request POST \
--url "https://directory.example.com/register-did" \
--header "Content-Type: application/json" \
--data '{
"did": "did:openpayload:1111111111111111111111",
"timestamp": "2026-07-16T12:00:00Z",
"signature": "<signature>",
"root_pubkey": "z<ed25519-public-key>",
"did_document": {
"id": "did:openpayload:1111111111111111111111",
"verificationMethod": [
{
"id": "did:openpayload:1111111111111111111111#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<ed25519-public-key>"
}
],
"authentication": [
"did:openpayload:1111111111111111111111#keys-1"
],
"keyAgreement": [
{
"id": "did:openpayload:1111111111111111111111#x25519-1",
"type": "X25519KeyAgreementKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<x25519-public-key>"
}
],
"service": [
{
"id": "did:openpayload:1111111111111111111111#relay",
"type": "OpenPayloadRelayService",
"serviceEndpoint": ["https://relay.example.com"]
},
{
"id": "did:openpayload:1111111111111111111111#cache",
"type": "OpenPayloadCacheService",
"serviceEndpoint": ["https://cache.example.com"],
"authorization": [
"did:openpayload:1111111111111111111111#keys-1"
]
}
]
}
}'
{
"status": "did registration pending",
"registration_status": "pending",
"tx_id": "<transaction-id>",
"did": "did:openpayload:1111111111111111111111",
"did_document": {
"id": "did:openpayload:1111111111111111111111",
"verificationMethod": [
{
"id": "did:openpayload:1111111111111111111111#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<ed25519-public-key>"
}
],
"authentication": [
"did:openpayload:1111111111111111111111#keys-1"
],
"keyAgreement": [
{
"id": "did:openpayload:1111111111111111111111#x25519-1",
"type": "X25519KeyAgreementKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<x25519-public-key>"
}
],
"service": [
{
"id": "did:openpayload:1111111111111111111111#relay",
"type": "OpenPayloadRelayService",
"serviceEndpoint": ["https://relay.example.com"]
},
{
"id": "did:openpayload:1111111111111111111111#cache",
"type": "OpenPayloadCacheService",
"serviceEndpoint": ["https://cache.example.com"],
"authorization": [
"did:openpayload:1111111111111111111111#keys-1"
]
}
]
}
}
Submit a new public DID record.
Registration creates the first public record for an identity. Your client signs the UTF-8 text
The Directory submits
register_with_document_proof as an ownerless DID-key operation. It does not attach a
chain account owner, even if the server environment contains an account seed.DID|timestamp with the Ed25519 private key corresponding to the submitted root public key.
Request
string
required
The canonical
did:<platform>:<Base58Address> identifier. The platform must contain 1–32 lowercase ASCII letters or digits. The address must contain 16–96 Bitcoin Base58 characters. The identifier must exactly match did_document.id.string
required
The timestamp included in the signed request.
string
required
The registration authorization signature.
object
required
The public DID document.
string
The root Ed25519 public key. The first verification method supplies it when omitted.
string
An optional lowercase public alias. It cannot contain
@ or #.curl --request POST \
--url "https://directory.example.com/register-did" \
--header "Content-Type: application/json" \
--data '{
"did": "did:openpayload:1111111111111111111111",
"timestamp": "2026-07-16T12:00:00Z",
"signature": "<signature>",
"root_pubkey": "z<ed25519-public-key>",
"did_document": {
"id": "did:openpayload:1111111111111111111111",
"verificationMethod": [
{
"id": "did:openpayload:1111111111111111111111#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<ed25519-public-key>"
}
],
"authentication": [
"did:openpayload:1111111111111111111111#keys-1"
],
"keyAgreement": [
{
"id": "did:openpayload:1111111111111111111111#x25519-1",
"type": "X25519KeyAgreementKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<x25519-public-key>"
}
],
"service": [
{
"id": "did:openpayload:1111111111111111111111#relay",
"type": "OpenPayloadRelayService",
"serviceEndpoint": ["https://relay.example.com"]
},
{
"id": "did:openpayload:1111111111111111111111#cache",
"type": "OpenPayloadCacheService",
"serviceEndpoint": ["https://cache.example.com"],
"authorization": [
"did:openpayload:1111111111111111111111#keys-1"
]
}
]
}
}'
Response
string
required
A human-readable registration status.
string
required
The public registration state.
string
required
The submitted transaction identifier.
string
required
The submitted DID.
object
required
The submitted public DID document.
{
"status": "did registration pending",
"registration_status": "pending",
"tx_id": "<transaction-id>",
"did": "did:openpayload:1111111111111111111111",
"did_document": {
"id": "did:openpayload:1111111111111111111111",
"verificationMethod": [
{
"id": "did:openpayload:1111111111111111111111#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<ed25519-public-key>"
}
],
"authentication": [
"did:openpayload:1111111111111111111111#keys-1"
],
"keyAgreement": [
{
"id": "did:openpayload:1111111111111111111111#x25519-1",
"type": "X25519KeyAgreementKey2020",
"controller": "did:openpayload:1111111111111111111111",
"publicKeyMultibase": "z<x25519-public-key>"
}
],
"service": [
{
"id": "did:openpayload:1111111111111111111111#relay",
"type": "OpenPayloadRelayService",
"serviceEndpoint": ["https://relay.example.com"]
},
{
"id": "did:openpayload:1111111111111111111111#cache",
"type": "OpenPayloadCacheService",
"serviceEndpoint": ["https://cache.example.com"],
"authorization": [
"did:openpayload:1111111111111111111111#keys-1"
]
}
]
}
}
202 means the Directory accepted the registration for processing. It does not confirm final settlement.
Poll Get registration status until the state is confirmed.Understand the complete document
Learn how each key and service entry participates in encryption, Relay delivery, and Cache retrieval.
Straight to the point
POST /register-did
Content-Type: application/json
- Signed bytes: UTF-8
did + "|" + timestamp - Signature: Ed25519, Base64 encoded
- Private key: never submitted
- Confirmation: poll
GET /registration-status/{did}

