Agents
Manage AI agent identities. Each agent is identified by a unique ID and an Ed25519 public key used to verify operation signatures.
Register Agent
POST
/v1/agents/register
Register a new agent with its Ed25519 public key.
Auth: integration_engineer
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| agent_id | string | Yes | Unique agent identifier (e.g. agent_underwriter) |
| display_name | string | No | Human-readable agent label (defaults to agent_id) |
| responsible_entity | string | No | Contact or team responsible for this agent |
| integration_type | string | No | Integration type (default: "sdk") |
| keys | array | Yes | Array of signing keys, each with kid, public_key, and algorithm |
Example Request
bash
curl -X POST https://api.elydora.com/v1/agents/register \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "agent_underwriter",
"display_name": "Loan Underwriter v2",
"responsible_entity": "underwriting-team@acme.com",
"keys": [
{
"kid": "agent_underwriter-key-v1",
"public_key": "MCowBQYDK2VwAyEA...",
"algorithm": "ed25519"
}
]
}'Response
json
{
"agent": {
"agent_id": "agent_underwriter",
"org_id": "org_acme",
"display_name": "Loan Underwriter v2",
"responsible_entity": "underwriting-team@acme.com",
"integration_type": "sdk",
"status": "active",
"created_at": 1736935800000,
"updated_at": 1736935800000
},
"keys": [
{
"kid": "agent_underwriter-key-v1",
"agent_id": "agent_underwriter",
"public_key": "MCowBQYDK2VwAyEA...",
"algorithm": "ed25519",
"status": "active",
"created_at": 1736935800000,
"retired_at": null
}
]
}List Agents
GET
/v1/agents
List all agents in the organization.
Auth: readonly_investigator
Example Request
bash
curl https://api.elydora.com/v1/agents \
-H "Authorization: Bearer <token>"Response
json
{
"agents": [
{
"agent_id": "agent_underwriter",
"org_id": "org_acme",
"display_name": "Loan Underwriter v2",
"responsible_entity": "underwriting-team@acme.com",
"integration_type": "sdk",
"status": "active",
"created_at": 1736935800000,
"updated_at": 1736935800000
}
]
}Get Agent
GET
/v1/agents/:agent_id
Retrieve agent details including status and key information.
Auth: readonly_investigator
Path Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| agent_id | string | Yes | The agent's unique identifier |
Response
json
{
"agent": {
"agent_id": "agent_underwriter",
"org_id": "org_acme",
"display_name": "Loan Underwriter v2",
"responsible_entity": "underwriting-team@acme.com",
"integration_type": "sdk",
"status": "active",
"created_at": 1736935800000,
"updated_at": 1736935800000
},
"keys": [
{
"kid": "agent_underwriter-key-v1",
"agent_id": "agent_underwriter",
"public_key": "MCowBQYDK2VwAyEA...",
"algorithm": "ed25519",
"status": "active",
"created_at": 1736935800000,
"retired_at": null
}
]
}Update Agent
PATCH
/v1/agents/:agent_id
Update an agent's integration type.
Auth: integration_engineer
Path Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| agent_id | string | Yes | The agent's unique identifier |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| integration_type | string | Yes | New integration type. Must be one of: claudecode, cursor, gemini, kirocli, kiroide, opencode, copilot, letta, codex, kimi, enterprise, gui, other |
Example Request
bash
curl -X PATCH https://api.elydora.com/v1/agents/agent_underwriter \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "integration_type": "claudecode" }'Response
json
{
"agent": {
"agent_id": "agent_underwriter",
"org_id": "org_acme",
"display_name": "Loan Underwriter v2",
"responsible_entity": "underwriting-team@acme.com",
"integration_type": "claudecode",
"status": "active",
"created_at": 1736935800000,
"updated_at": 1740700800000
}
}Delete Agent
DELETE
/v1/agents/:agent_id
Permanently delete an agent.
Auth: security_admin
Example Request
bash
curl -X DELETE https://api.elydora.com/v1/agents/agent_underwriter \
-H "Authorization: Bearer <token>"Response
json
{
"deleted": true
}Freeze Agent
POST
/v1/agents/:agent_id/freeze
Temporarily suspend an agent. Frozen agents cannot submit operations.
Auth: security_admin
Freezing an agent is reversible. The agent's key and history are preserved, but new operation submissions will be rejected with AGENT_FROZEN.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| reason | string | Yes | Reason for freezing the agent |
Example Request
bash
curl -X POST https://api.elydora.com/v1/agents/agent_underwriter/freeze \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "reason": "Suspected anomalous activity" }'Response
json
{
"agent": {
"agent_id": "agent_underwriter",
"org_id": "org_acme",
"display_name": "Loan Underwriter v2",
"responsible_entity": "underwriting-team@acme.com",
"integration_type": "sdk",
"status": "frozen",
"created_at": 1736935800000,
"updated_at": 1740754800000
}
}Unfreeze Agent
POST
/v1/agents/:agent_id/unfreeze
Reactivate a frozen agent, restoring its ability to submit operations.
Auth: security_admin
Unfreezing reverses a previous freeze. The agent returns to active status and can resume submitting operations. Only agents in frozen status can be unfrozen — revoked agents cannot be reactivated.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| reason | string | Yes | Reason for unfreezing the agent |
Example Request
bash
curl -X POST https://api.elydora.com/v1/agents/agent_underwriter/unfreeze \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "reason": "Investigation complete, agent cleared" }'Response
json
{
"agent": {
"agent_id": "agent_underwriter",
"org_id": "org_acme",
"display_name": "Loan Underwriter v2",
"responsible_entity": "underwriting-team@acme.com",
"integration_type": "sdk",
"status": "active",
"created_at": 1736935800000,
"updated_at": 1740758400000
}
}Revoke Agent Key
POST
/v1/agents/:agent_id/revoke
Permanently revoke a specific agent key. This action is irreversible.
Auth: security_admin
Revoking a key permanently invalidates the specified signing key. Past operations signed by the key remain verifiable, but new operations using that key will be rejected with KEY_REVOKED.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| kid | string | Yes | Key ID of the key to revoke |
| reason | string | Yes | Reason for revoking the key |
Example Request
bash
curl -X POST https://api.elydora.com/v1/agents/agent_underwriter/revoke \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "kid": "kid_abc123", "reason": "Key compromised" }'Response
json
{
"key": {
"kid": "kid_abc123",
"agent_id": "agent_underwriter",
"public_key": "MCowBQYDK2VwAyEA...",
"algorithm": "ed25519",
"status": "revoked",
"created_at": 1736935800000,
"retired_at": 1740755400000
}
}