['users:read']]], tags: ['Audit'], parameters: [ new OA\Parameter(name: 'action', in: 'query', required: false, description: 'Filtrar por acción exacta (ej. user.updated)', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'subject_type', in: 'query', required: false, description: 'user | client', schema: new OA\Schema(type: 'string')), new OA\Parameter(name: 'per_page', in: 'query', required: false, description: '5-100, default 25', schema: new OA\Schema(type: 'integer')), ], responses: [ new OA\Response(response: 200, description: 'Listado paginado'), new OA\Response(response: 403, description: 'Sin permiso audit.view'), ] )] public function index(Request $request) { $actor = $request->user('api'); abort_if($actor && ! $actor->can('audit.view'), 403); return response()->json(AuditLog::paginatedFor($request)); } }