I guess you would need to have your own method in your controller to fire up the indexing tool. From what it looks like, you need a few things to get going: - The classname of the tool i.e `AssetIndex` - An array of asset sources or `*` for them all - An indexing session id - An array of parameters to send to the tool So I managed to get something working with the following code (this would go in your plugin controller) public function actionUpdateIndex() { // Get the AssetIndex tool $tool = craft()->components->getComponentByTypeAndClass(ComponentType::Tool, 'AssetIndex'); // Generate an AssetIndex session id for us to use $sessionId = craft()->assetIndexing->getIndexingSessionId(); // Set up some params $params = array( 'start' => '1', // Tells the tool this is the initial request 'sources' => '*', // All of them or [1,2,3] just ids1 ); // Get an initial response from the tool, will contain an array containing the assets to index $response = $tool->performAction($params); // See [1] foreach($response['batches'] as $key => $value) { foreach($value as $key => $batch) { // All the needed params are set in the array to do the index $tool->performAction($batch['params']); } } } Each time you call `$tool->performAction($batch['params']);` you will an array back, something like: Array ( [success] => 1 ) --- **[1]** Because this is the initial request craft will return an array with a `batches` index, which we then have to do a few loops through, it looks something like this: Array ( [batches] => Array ( [0] => Array ( [0] => Array ( [params] => Array ( [sessionId] => 6d08c5ba-169f-4b99-a7bd-cdc26c9428c7 [sourceId] => 1 [total] => 12 [offset] => 0 [process] => 1 ) ) ) ) [total] => 0 ) Not sure if this is the absolute best way to do it, I was learning as I was going, but this worked for me so hopefully it'll work for you too :)