Docs

Filtering

One list endpoint powers every timeline in your product. Combine filters to build user history pages, workspace audit trails, support views, and admin tooling from the same event source.

The list endpoint

All queries go through GET /v1/events, authenticated with your secret key (or, from the browser, a feed token — which pins actor_id to one user):

Terminalcurl
curl "https://api.softechlog.com/v1/events?actor_id=user_123&action=member.invited&limit=50" \
  -H "Authorization: Bearer stl_sk_xxxxxxxxxxxx"

Available filters

ParameterTypeDescription
actor_idstringOnly events by this user (your external ID)
actionstringExact action match (member.invited), or a prefix ending in * (member.*)
target_typestringOnly events on this resource type, e.g. workspace
target_idstringOnly events on a specific resource
capture_modemanual · autoSeparate SDK-tracked events from auto-captured UI events
session_idstringAll events in one session
from / toISO 8601 datetimeTime window bounds on occurred_at
qstringFree-text search across action, target name/id, and actor name/email/id (case-insensitive, ≤ 200 chars)
limit1–100Page size (default 25)
cursorstringOpaque cursor from the previous page's next_cursor

Filters combine with AND semantics — every parameter you pass narrows the result.

Action prefixes & search

Terminalcurl
# Every member.* action — invited, removed, role_changed …
curl "https://api.softechlog.com/v1/events?action=member.*" \
  -H "Authorization: Bearer stl_sk_xxxxxxxxxxxx"

# Free-text search across action, target name/id, and actor name/email/id
curl "https://api.softechlog.com/v1/events?q=acme" \
  -H "Authorization: Bearer stl_sk_xxxxxxxxxxxx"

Time windows

Terminalcurl
# Everything a user did last week
curl "https://api.softechlog.com/v1/events?actor_id=user_123&from=2026-08-10T00:00:00Z&to=2026-08-17T00:00:00Z" \
  -H "Authorization: Bearer stl_sk_xxxxxxxxxxxx"

Response & cursor pagination

Responses are newest-first and cursor-paginated. Pass next_cursor back as cursor to fetch the next page, until has_more is false:

Responseapplication/json
{
  "events": [
    {
      "id": "9b2f0f5e-4c1a-4e7b-9d3f-2a6c8e1b7f10",
      "action": "member.invited",
      "target_type": "workspace",
      "target_id": "ws_abc",
      "target_name": "Acme",
      "metadata": { "role": "admin" },
      "capture_mode": "manual",
      "session_id": null,
      "occurred_at": "2026-08-17T14:09:31.412Z",
      "created_at": "2026-08-17T14:09:31.598Z",
      "actor": { "id": "…", "external_id": "user_123", "name": "Ari", "email": "ari@acme.co", "avatar_url": null }
    }
    /* … up to `limit` events, newest first … */
  ],
  "has_more": true,
  "next_cursor": "<opaque cursor — pass back as ?cursor=>"
}
Treat the cursor as opaque — its format may change. It encodes the position as a (timestamp, id) tuple rather than a bare timestamp, so pagination stays correct while new events stream in and when many events share the same second — no skipped or duplicated rows, unlike offset pagination.

Export

GET /v1/events/export?format=csv|json accepts the same filters and streams up to 10,000 matching rows as a download (Content-Disposition: attachment). It is available on every plan, needs a secret key (feed tokens can't export), and the same export is one click away in the dashboard's Events page.

Terminalcurl
# Same filters as /v1/events; up to 10,000 rows, newest first
curl -o events.csv "https://api.softechlog.com/v1/events/export?format=csv&action=member.*&from=2026-08-01T00:00:00Z" \
  -H "Authorization: Bearer stl_sk_xxxxxxxxxxxx"

Common recipes

  • User history page: actor_id={user} — everything one user did.
  • Workspace audit trail: target_type=workspace&target_id={ws} — everything that happened to one workspace.
  • Security review: action=security.*&from=… — every sensitive action across all users in a window.
  • Support debugging: session_id={session} — replay exactly what a user saw and clicked in one browsing session (list sessions with GET /v1/sessions?actor_id=…).
  • "Find that customer": q=acme — free-text across actors and targets when you only have a name or email.