Activity · listActivity
Activity log
GET /v1/activity
Who did what in the workspace, newest first: asks created and decided (and by whom), API keys created and revoked, members invited and joined, delivery changes. Never secrets. Page with cursor: pass the previous page's nextCursor until it is null (before, the last entry id, still works). An invalid cursor is a 400 (bad_request).
- Who may call it
- humans: every member
- Server
- https://api.logu.dev
Parameters#
| Name | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | optional | How many to return (1–200). · e.g. 50 |
before | query | string | optional | The last entry id of the previous page (act_…, or aud_… for entries before the rename). Prefer cursor; not with it. · e.g. act_01K7DQ3M2W0J2L4N6Q8S0U2W4Y |
cursor | query | string | optional | Where this page starts: the nextCursor of the previous page, unchanged. Leave it out (or empty) for the first page. · e.g. YWN0aXZpdHk6MTc5MTgxMzk0MjAwMDphY3RfMDFLN0RRM00yVzBKMkw0TjZROFMwVTJXNFk |
Logu-Workspace | header | string | optional | Humans only: the workspace to act in (default: your personal workspace). Agents always act in their API key's workspace. · e.g. wsp_01K7D7Y8Z0B2D4F6H8K0M2P4R6 |
Example#
curl -s "https://api.logu.dev/v1/activity" \
-H "Authorization: Bearer $LOGU_SESSION_TOKEN"
Responses#
200
Entries, newest first, and where the next page starts (null at the end).
{
"entries": [
{
"id": "act_01K7DQ3M2W0J2L4N6Q8S0U2W4Y",
"workspaceId": "wsp_Xq3bY7tLmN2pR8sV",
"action": "ask.decided",
"actor": {
"kind": "human",
"user": {
"id": "Xq3bY7tLmN2pR8sV",
"name": "Ana"
}
},
"target": {
"type": "ask",
"id": "ask_01K7DQ3M2V8H4N6R9T1W3Y5B7C"
},
"data": {
"project": "shop",
"optionId": "approve"
},
"createdAt": "2026-10-12T14:05:42.000Z"
}
],
"nextCursor": "YWN0aXZpdHk6MTc5MTgxMzk0MjAwMDphY3RfMDFLN0RRM00yVzBKMkw0TjZROFMwVTJXNFk"
}
Response fields
| Field | Type | Required | Notes |
|---|---|---|---|
entries | ActivityEntry[] | required | |
entries[].id | string | required | |
entries[].workspaceId | string | required | |
entries[].action | "ask.created" | "ask.decided" | "ask.withdrawn" | "ask.timed_out" | "ask.escalated" | "agent.created" | "agent.updated" | "agent.deleted" | "agent.connected" | "api_key.created" | "api_key.revoked" | "device.registered" | "device.removed" | "browser_push.enabled" | "browser_push.disabled" | "telegram.connected" | "telegram.disconnected" | "slack.connected" | "slack.disconnected" | "whatsapp.connected" | "whatsapp.disconnected" | "preferences.updated" | "delivery.tested" | "project.muted" | "project.unmuted" | "project.routing_changed" | "rule.created" | "rule.deleted" | "metric.deleted" | "alert.created" | "alert.deleted" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.secret_rotated" | "webhook.redelivered" | "webhook.disabled" | "workspace.created" | "workspace.create_refused" | "workspace.renamed" | "workspace.suspended" | "workspace.unsuspended" | "member.invited" | "member.joined" | "member.role_changed" | "member.removed" | "invitation.revoked" | "sign_in_method.added" | "sign_in_method.removed" | "session.revoked" | "billing.checkout_started" | "billing.subscribed" | "billing.updated" | "billing.canceled" | "billing.payment_failed" | "billing.quota_warning" | "billing.quota_reached" | "billing.ceiling_reached" | "delivery.capped" | "account.deletion_requested" | "account.restored" | "account.exported" | required | |
entries[].actor | object | required | |
entries[].target | object | null | required | |
entries[].target.type | string | required | |
entries[].target.id | string | required | |
entries[].data | object | null | required | |
entries[].createdAt | string | required | date-time |
nextCursor | string | null | required | Pass as cursor for the next page, unchanged; null at the end of the list. |
Errors#
Every error is {"error":{"code","message","hint","docUrl","requestId"}}: branch on code. See Errors.
| Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | The request is malformed or a field is invalid (see issues). |
| 401 | unauthorized | No credentials, or the API key or session is invalid or revoked. |
| 403 | forbidden | The caller is authenticated but may not do this (wrong role, or an API key on a human-only endpoint). |
| 404 | not_found | No such route, or the resource doesn't exist in your workspace. |
| 500 | internal_error | Something went wrong on Logu's side. |