Prepare Application registration
curl --request POST \
--url https://api.example.com/applications/{applicationId}/registration/prepare \
--header 'Content-Type: application/json' \
--data '
{
"control_did": "<string>",
"signer_key_id": "<string>"
}
'import requests
url = "https://api.example.com/applications/{applicationId}/registration/prepare"
payload = {
"control_did": "<string>",
"signer_key_id": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({control_did: '<string>', signer_key_id: '<string>'})
};
fetch('https://api.example.com/applications/{applicationId}/registration/prepare', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/applications/{applicationId}/registration/prepare",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'control_did' => '<string>',
'signer_key_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/applications/{applicationId}/registration/prepare"
payload := strings.NewReader("{\n \"control_did\": \"<string>\",\n \"signer_key_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/applications/{applicationId}/registration/prepare")
.header("Content-Type", "application/json")
.body("{\n \"control_did\": \"<string>\",\n \"signer_key_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/applications/{applicationId}/registration/prepare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"control_did\": \"<string>\",\n \"signer_key_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyApplications
Prepare Application registration
Get the exact bytes and nonce to sign for a new Application
Prepare Application registration
curl --request POST \
--url https://api.example.com/applications/{applicationId}/registration/prepare \
--header 'Content-Type: application/json' \
--data '
{
"control_did": "<string>",
"signer_key_id": "<string>"
}
'import requests
url = "https://api.example.com/applications/{applicationId}/registration/prepare"
payload = {
"control_did": "<string>",
"signer_key_id": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({control_did: '<string>', signer_key_id: '<string>'})
};
fetch('https://api.example.com/applications/{applicationId}/registration/prepare', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/applications/{applicationId}/registration/prepare",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'control_did' => '<string>',
'signer_key_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/applications/{applicationId}/registration/prepare"
payload := strings.NewReader("{\n \"control_did\": \"<string>\",\n \"signer_key_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/applications/{applicationId}/registration/prepare")
.header("Content-Type", "application/json")
.body("{\n \"control_did\": \"<string>\",\n \"signer_key_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/applications/{applicationId}/registration/prepare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"control_did\": \"<string>\",\n \"signer_key_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyRegister an Application under an active control DID. The Application ID must be 1–64 lowercase letters, digits, dots, underscores, or hyphens. The ID must not already be registered.
The
Request
string
required
The proposed Application ID.
string
required
Active DID that will own the Application and its policy.
string
required
Verification-method ID beginning with the control DID and
#.curl --request POST \
--url "https://directory.example.com/applications/example/registration/prepare" \
--header "Content-Type: application/json" \
--data '{"control_did":"did:openpayload:1111111111111111111111","signer_key_id":"did:openpayload:1111111111111111111111#signing"}'
200 response contains application_id, control_did, signer_key_id, the current numeric nonce, and canonical_payload as 0x-prefixed hexadecimal. Decode the payload and sign those exact bytes locally with the named Ed25519 key. The Directory never receives the private key.
Complete the flow with Submit Application registration. Prepare again if the authorization nonce changes before submission.
Straight to the point
POST /applications/{applicationId}/registration/prepare
Success: 200 with nonce and canonical_payload
Next: sign the decoded bytes and submit registration

