WIP! A BB-style forum, on the ATmosphere!
We're still working... we'll be back soon when we have something to show off!
node
typescript
hono
htmx
atproto
1meta {
2 name: Get Mod Action Log
3 type: http
4 seq: 16
5}
6
7get {
8 url: {{appview_url}}/api/admin/modlog
9}
10
11params:query {
12 limit: 50
13 offset: 0
14}
15
16assert {
17 res.status: eq 200
18 res.body.actions: isArray
19 res.body.total: isDefined
20 res.body.limit: isDefined
21 res.body.offset: isDefined
22}
23
24docs {
25 Paginated, reverse-chronological list of moderation actions with human-readable
26 handles for both the moderator and the subject.
27
28 **Requires any one of:**
29 - `space.atbb.permission.moderatePosts`
30 - `space.atbb.permission.banUsers`
31 - `space.atbb.permission.lockTopics`
32
33 Query params:
34 - limit: Max results per page (default: 50, max: 100)
35 - offset: Number of records to skip for pagination (default: 0)
36
37 Returns:
38 {
39 "actions": [
40 {
41 "id": "123",
42 "action": "space.atbb.modAction.ban",
43 "moderatorDid": "did:plc:abc",
44 "moderatorHandle": "alice.bsky.social",
45 "subjectDid": "did:plc:xyz",
46 "subjectHandle": "bob.bsky.social",
47 "subjectPostUri": null,
48 "reason": "Spam",
49 "createdAt": "2026-02-26T12:01:00Z"
50 }
51 ],
52 "total": 42,
53 "offset": 0,
54 "limit": 50
55 }
56
57 Error codes:
58 - 400: Invalid limit or offset (non-numeric or negative)
59 - 401: Not authenticated
60 - 403: Insufficient permissions (none of the three mod permissions)
61
62 Notes:
63 - Actions are returned in descending createdAt order (newest first)
64 - id is serialized as a string (BigInt)
65 - moderatorHandle falls back to moderatorDid when the moderator's handle is not indexed
66 - subjectHandle is null for post-targeting actions (subjectDid is null)
67 - subjectPostUri is null for user-targeting actions
68}