group(function () { Route::match(['post', 'get'], 'api', [ApiController::class, 'api']); }); Route::prefix('v2')->group(function () { Route::get('capabilities', [ApiV2Controller::class, 'capabilities']); Route::post('nzbadd', [ApiV2Controller::class, 'nzbAdd']); }); Route::prefix('v2')->middleware('apiRateLimit')->group(function () { Route::get('movies', [ApiV2Controller::class, 'movie']); Route::get('audio', [ApiV2Controller::class, 'audio']); Route::get('books', [ApiV2Controller::class, 'books']); Route::get('anime', [ApiV2Controller::class, 'anime']); Route::get('search', [ApiV2Controller::class, 'apiSearch']); Route::get('tv', [ApiV2Controller::class, 'tv']); Route::get('getnzb', [ApiV2Controller::class, 'getNzb']); Route::get('details', [ApiV2Controller::class, 'details']); }); Route::prefix('inform')->group(function () { Route::get('release', [ApiInformController::class, 'release']); }); // Mediainfo endpoint (no auth required for internal use) Route::get('release/{id}/mediainfo', function ($id) { $releaseExtra = app(ReleaseExtraService::class); $video = $releaseExtra->getVideo($id); $audio = $releaseExtra->getAudio($id); $subs = $releaseExtra->getSubs($id); return response()->json([ 'video' => $video ?: null, 'audio' => $audio ?: null, 'subs' => $subs ? $subs->subs : null, // @phpstan-ignore property.notFound ]); })->middleware('throttle:60,1'); Route::fallback(function () { return response()->json(['message' => 'Not Found!'], 404); });