Operations
Submit, retrieve, and verify signed operation records. Each operation captures one agent action.
Submit Operation
POST
/v1/operations
Submit a signed Elydora Operation Record (EOR).
Auth: org_owner, security_admin, integration_engineer
Request Body (EOR)
| Field | Type | Required | Description |
|---|---|---|---|
| op_version | string | Yes | Protocol version, currently "1.0" |
| operation_id | string | Yes | Client-generated UUIDv7 |
| org_id | string | Yes | Organization identifier |
| agent_id | string | Yes | Submitting agent identifier |
| issued_at | number | Yes | Unix timestamp in milliseconds |
| ttl_ms | number | Yes | Time-to-live in milliseconds (max window for submission) |
| nonce | string | Yes | Random nonce for replay protection |
| operation_type | string | Yes | Domain-specific operation type (e.g. loan.approve) |
| subject | object | Yes | JSON object describing the subject of the operation |
| action | object | Yes | JSON object describing the action performed |
| payload | object | string | null | Yes | Operation data: a JSON object, a string, or null |
| payload_hash | string | Yes | Base64url SHA-256 of the canonical payload |
| prev_chain_hash | string | Yes | Chain hash of the previous operation; the genesis constant for the first |
| agent_pubkey_kid | string | Yes | Key ID of the agent's signing key |
| signature | string | Yes | Ed25519 signature over the canonical EOR |
Example Request
bash
curl -X POST https://api.elydora.com/v1/operations \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"op_version": "1.0",
"operation_id": "0195f2c6-8f4e-7a1b-9c3d-2e4f6a8b0c1d",
"org_id": "org_acme",
"agent_id": "agent_underwriter",
"issued_at": 1772287200000,
"ttl_ms": 30000,
"nonce": "qL3xV9pZ2mK8wR4t",
"operation_type": "loan.approve",
"subject": { "id": "borrower:BRW-2026-0042", "type": "borrower" },
"action": { "name": "approve", "type": "decision" },
"payload": {
"loanId": "LN-2026-001",
"amount": 50000,
"currency": "USD"
},
"payload_hash": "<base64url SHA-256 of the canonical payload>",
"prev_chain_hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"agent_pubkey_kid": "agent_underwriter-key-1",
"signature": "<base64url Ed25519 signature>"
}'Response
Returns an Elydora Acknowledgement Receipt (EAR) confirming the operation was received and sequenced.
json
{
"receipt": {
"receipt_version": "1.0",
"receipt_id": "0195f2c6-9a2b-7c4d-8e1f-3a5b7c9d1e2f",
"operation_id": "0195f2c6-8f4e-7a1b-9c3d-2e4f6a8b0c1d",
"org_id": "org_acme",
"agent_id": "agent_underwriter",
"server_received_at": 1772287201000,
"seq_no": 42,
"chain_hash": "<base64url chain hash>",
"queue_message_id": "<queue message id>",
"receipt_hash": "<base64url receipt hash>",
"elydora_kid": "<Elydora signing key id>",
"elydora_signature": "<base64url Ed25519 signature>"
}
}Get Operation
GET
/v1/operations/:operation_id
Retrieve a full operation record by ID.
Auth: org_owner, security_admin, compliance_auditor, integration_engineer, readonly_investigator
Path Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| operation_id | string | Yes | UUID of the operation |
Response
Returns the stored operation row, the receipt reference, and the payload when it was stored. The subject and action fields are JSON strings.
json
{
"operation": {
"operation_id": "0195f2c6-8f4e-7a1b-9c3d-2e4f6a8b0c1d",
"org_id": "org_acme",
"agent_id": "agent_underwriter",
"seq_no": 42,
"operation_type": "loan.approve",
"issued_at": 1772287200000,
"ttl_ms": 30000,
"nonce": "qL3xV9pZ2mK8wR4t",
"subject": "{\"id\":\"borrower:BRW-2026-0042\",\"type\":\"borrower\"}",
"action": "{\"name\":\"approve\",\"type\":\"decision\"}",
"payload_hash": "<base64url SHA-256 of the canonical payload>",
"prev_chain_hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"chain_hash": "<base64url chain hash>",
"agent_pubkey_kid": "agent_underwriter-key-1",
"signature": "<base64url Ed25519 signature>",
"r2_payload_key": "<object storage key>",
"created_at": 1772287201000
},
"receipt": {
"receipt_id": "0195f2c6-9a2b-7c4d-8e1f-3a5b7c9d1e2f",
"operation_id": "0195f2c6-8f4e-7a1b-9c3d-2e4f6a8b0c1d",
"r2_receipt_key": "<object storage key>",
"created_at": 1772287201000
},
"payload": { "loanId": "LN-2026-001", "amount": 50000, "currency": "USD" }
}Verify Operation
POST
/v1/operations/:operation_id/verify
Server-side verification of the signature, chain, receipt, and Merkle inclusion.
Auth: org_owner, security_admin, compliance_auditor, integration_engineer, readonly_investigator
Response
checks.merkle is absent until an epoch covers the operation.
json
{
"valid": true,
"checks": {
"signature": true,
"chain": true,
"receipt": true,
"merkle": true
}
}