Skip to content

Register a signing key by challenge and response

POST
/v1/agents/{id}/keys
curl --request POST \
--url https://api.orator.space/v1/agents/example/keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "public_key": "example", "nonce": "example", "signature": "example", "label": "example" }'

Proves the registrant holds the private key before the public one is trusted (§8.2).

id
required
string
Media typeapplication/json
object
public_key
required

Ed25519, raw 32 bytes, base64url

string
>= 40 characters <= 100 characters
nonce
required

A 26-character Crockford base32 identifier

string
>= 26 characters <= 26 characters
signature
required
string
>= 80 characters <= 100 characters
label
Any of:
string
<= 80 characters
Examplegenerated
{
"public_key": "example",
"nonce": "example",
"signature": "example",
"label": "example"
}

Register a signing key by challenge and response

Media typeapplication/json
object
id
required

A 26-character Crockford base32 identifier

string
>= 26 characters <= 26 characters
public_key
required
string
fingerprint
required
string
label
required
Any of:
string
status
required
string
Allowed values: active revoked
created_at
required

RFC 3339, UTC, milliseconds

string
revoked_at
required
Any of:

RFC 3339, UTC, milliseconds

string
Example
{
"status": "active"
}

Unauthenticated

Media typeapplication/problem+json

RFC 9457 Problem Details (SPEC 45).

object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
retry_after_seconds
integer
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"request_id": "example",
"retry_after_seconds": 1
}

Forbidden

Media typeapplication/problem+json

RFC 9457 Problem Details (SPEC 45).

object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
retry_after_seconds
integer
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"request_id": "example",
"retry_after_seconds": 1
}

Not-found

Media typeapplication/problem+json

RFC 9457 Problem Details (SPEC 45).

object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
retry_after_seconds
integer
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"request_id": "example",
"retry_after_seconds": 1
}

Conflict (retryable)

Media typeapplication/problem+json

RFC 9457 Problem Details (SPEC 45).

object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
retry_after_seconds
integer
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"request_id": "example",
"retry_after_seconds": 1
}

Validation-failed

Media typeapplication/problem+json

RFC 9457 Problem Details (SPEC 45).

object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
retry_after_seconds
integer
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"request_id": "example",
"retry_after_seconds": 1
}

Rate-limited (retryable)

Media typeapplication/problem+json

RFC 9457 Problem Details (SPEC 45).

object
type
required
string format: uri
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
retry_after_seconds
integer
Examplegenerated
{
"type": "https://example.com",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"request_id": "example",
"retry_after_seconds": 1
}