Query Events

List and retrieve audit events with powerful filtering, search, and cursor-based pagination.

List Events

GET /events
Required Scope
This endpoint requires the events:read scope.

Query Parameters

Parameter Type Required Description
action string No Filter by action name. Supports wildcards with * (e.g., user.*, *.deleted)
actor_id string No Filter by actor ID
target_type string No Filter by target resource type
target_id string No Filter by target resource ID
from string No Filter events from this ISO 8601 date (inclusive)
to string No Filter events until this ISO 8601 date (inclusive)
search string No Full-text search across event data
per_page integer No Number of events per page (default: 25, max: 100)
cursor string No Pagination cursor from previous response

Response

Returns a paginated list of events with cursor-based pagination metadata.

{
  "data": [
    {
      "id": "evt_2Nz9Q8kL3Fy",
      "sequence_number": 42315,
      "action": "document.updated",
      "actor": {
        "id": "usr_4Hx8K9mP1Qz",
        "type": "user",
        "meta": {
          "name": "Jane Doe",
          "email": "jane@example.com"
        }
      },
      "target": {
        "type": "document",
        "id": "doc_6Ry2M3nT5Wx",
        "meta": {
          "title": "Q4 Financial Report"
        }
      },
      "context": {
        "ip": "203.0.113.42"
      },
      "diff": {
        "before": { "status": "draft" },
        "after": { "status": "published" }
      },
      "metadata": {
        "department": "finance"
      },
      "hash": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
      "previous_hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
      "occurred_at": "2026-02-10T14:32:15.000000Z",
      "received_at": "2026-02-10T14:32:15.123456Z",
      "created_at": "2026-02-10T14:32:15.123456Z"
    }
  ],
  "meta": {
    "next_cursor": "eyJpZCI6ImV2dF8yTno5UThrTDNGeSIsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
    "has_more": true
  }
}

Examples

curl -X GET "https://logproof.de/v1/events?action=document.*&per_page=50" \
  -H "Authorization: Bearer YOUR_API_KEY"
use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'https://logproof.de/v1/',
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
    ]
]);

$response = $client->get('events', [
    'query' => [
        'action' => 'document.*',
        'per_page' => 50,
    ]
]);

$result = json_decode($response->getBody(), true);
$events = $result['data'];
$nextCursor = $result['meta']['next_cursor'];
const axios = require('axios');

const response = await axios.get('https://logproof.de/v1/events', {
  params: {
    action: 'document.*',
    per_page: 50
  },
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const events = response.data.data;
const nextCursor = response.data.meta.next_cursor;
import requests

response = requests.get(
    'https://logproof.de/v1/events',
    params={
        'action': 'document.*',
        'per_page': 50
    },
    headers={
        'Authorization': 'Bearer YOUR_API_KEY'
    }
)

result = response.json()
events = result['data']
next_cursor = result['meta']['next_cursor']

Get Single Event

GET /events/{id}
Required Scope
This endpoint requires the events:read scope.

Response

Returns a single event by ID.

{
  "data": {
    "id": "evt_2Nz9Q8kL3Fy",
    "sequence_number": 42315,
    "action": "document.updated",
    "actor": {
      "id": "usr_4Hx8K9mP1Qz",
      "type": "user",
      "meta": {
        "name": "Jane Doe",
        "email": "jane@example.com"
      }
    },
    "target": {
      "type": "document",
      "id": "doc_6Ry2M3nT5Wx",
      "meta": {
        "title": "Q4 Financial Report"
      }
    },
    "context": {
      "ip": "203.0.113.42"
    },
    "diff": {
      "before": { "status": "draft" },
      "after": { "status": "published" }
    },
    "metadata": {
      "department": "finance"
    },
    "hash": "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
    "previous_hash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
    "occurred_at": "2026-02-10T14:32:15.000000Z",
    "received_at": "2026-02-10T14:32:15.123456Z",
    "created_at": "2026-02-10T14:32:15.123456Z"
  }
}

Examples

curl -X GET https://logproof.de/v1/events/evt_2Nz9Q8kL3Fy \
  -H "Authorization: Bearer YOUR_API_KEY"
use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'https://logproof.de/v1/',
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
    ]
]);

$response = $client->get('events/evt_2Nz9Q8kL3Fy');
$event = json_decode($response->getBody(), true);
const axios = require('axios');

const response = await axios.get(
  'https://logproof.de/v1/events/evt_2Nz9Q8kL3Fy',
  {
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY'
    }
  }
);

const event = response.data;
import requests

response = requests.get(
    'https://logproof.de/v1/events/evt_2Nz9Q8kL3Fy',
    headers={
        'Authorization': 'Bearer YOUR_API_KEY'
    }
)

event = response.json()