Elydora Docs

Audit

Query the immutable audit log. The audit endpoint provides flexible filtering over all operation records within your organization.

Query Audit Records

POST
/v1/audit/query
Search and filter operation records with flexible query parameters.
Auth: org_owner, security_admin, compliance_auditor

Request Body

FieldTypeRequiredDescription
agent_idstringNoFilter by agent identifier
operation_typestringNoFilter by operation type (e.g. loan.approve)
start_timenumberNoUnix millisecond start of the time range
end_timenumberNoUnix millisecond end of the time range
cursorstringNoCursor from a previous response
limitnumberNoResults per page, from 1 to 500 (default 100)

Example Request

bash
curl -X POST https://api.elydora.com/v1/audit/query \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "agent_underwriter",
    "operation_type": "loan.approve",
    "start_time": 1769904000000,
    "end_time": 1772409599000,
    "limit": 20
  }'

Response

Operations are the stored rows; subject and action are JSON strings. cursor is present when more results exist.

json
{
  "operations": [
    {
      "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
    }
  ],
  "total_count": 1
}