meta { name: Get Mod Action Log type: http seq: 16 } get { url: {{appview_url}}/api/admin/modlog } params:query { limit: 50 offset: 0 } assert { res.status: eq 200 res.body.actions: isArray res.body.total: isDefined res.body.limit: isDefined res.body.offset: isDefined } docs { Paginated, reverse-chronological list of moderation actions with human-readable handles for both the moderator and the subject. **Requires any one of:** - `space.atbb.permission.moderatePosts` - `space.atbb.permission.banUsers` - `space.atbb.permission.lockTopics` Query params: - limit: Max results per page (default: 50, max: 100) - offset: Number of records to skip for pagination (default: 0) Returns: { "actions": [ { "id": "123", "action": "space.atbb.modAction.ban", "moderatorDid": "did:plc:abc", "moderatorHandle": "alice.bsky.social", "subjectDid": "did:plc:xyz", "subjectHandle": "bob.bsky.social", "subjectPostUri": null, "reason": "Spam", "createdAt": "2026-02-26T12:01:00Z" } ], "total": 42, "offset": 0, "limit": 50 } Error codes: - 400: Invalid limit or offset (non-numeric or negative) - 401: Not authenticated - 403: Insufficient permissions (none of the three mod permissions) Notes: - Actions are returned in descending createdAt order (newest first) - id is serialized as a string (BigInt) - moderatorHandle falls back to moderatorDid when the moderator's handle is not indexed - subjectHandle is null for post-targeting actions (subjectDid is null) - subjectPostUri is null for user-targeting actions }