Reference

Read API

Read your events over HTTP with a site key. Paid plans only.
The read API is available on every paid plan (Starter and up). Free is dashboard-only — see Plans & limits.
This page covers site keys — reading one site's events. To create or manage sites, or to read events across your whole account, use an account key with the Account API instead.

Authentication

Every request needs your site key as a bearer token, plus the domain it was issued for:

Terminal
curl https://api.hellolog.io/v1/wordpress-activity-audit-log/events \
  -H "Authorization: Bearer <your site key>" \
  -H "X-Site-Domain: example.com"

X-Site-Domain has to match the domain the key was minted for — it's how a leaked key stays useless anywhere except the WordPress install it was issued for.

List events

GET /events returns events for your site, newest first, cursor-paginated.

ParameterDescription
limitPage size, 1–200. Defaults to 50.
from / toISO 8601 time bounds on when the event occurred.
codeFilter by event code. Repeatable or comma-separated.
user_idFilter by WordPress user ID.
objectFilter by the object type the event touched (e.g. post, user).
event_typeFilter by event type (e.g. created, deleted).
severityFilter by severity. Repeatable or comma-separated. Closed set: info, low, medium, high, critical — anything else answers 400 {"error":"invalid severity"}.
qFree-text search over the event message.
cursorOpaque cursor from a previous response's next_cursor.
{
  "events": [
    {
      "id": 918273,
      "occurred_at": "2026-08-18T09:41:02Z",
      "code": 9000,
      "severity": "info",
      "object": "product",
      "event_type": "created",
      "user_id": 4,
      "username": "a.kovacs",
      "message": "WC product \"Merino scarf\" created.",
      "site_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    }
  ],
  "next_cursor": "eyJ0IjoiMjAyNi0wOC0xOFQwOTo0MDo1OVoiLCJpIjo5MTgyNzB9"
}

Pass next_cursor back as cursor to fetch the next page. An empty next_cursor means you're on the last page.

site_id is always your own site here — it rides along because this row shape is shared with the Account API, where it's what tells events from different sites apart.

Get a single event

GET /events/{id} returns one event by ID, with a few extra fields the list endpoint leaves out to keep pages small: user_agent, session_id, post_id, post_type, post_status.

Rate limits

Requests are rate-limited per site key. If you're building an integration that polls, prefer a sane interval — a minute or more — over tight loops.

Also available: MCP

If you'd rather ask questions than write queries, connect the same site key to MCP and ask an AI tool directly.