# Gemini Consultation: Technic API 401 Unauthorized Fix

**Date:** April 6, 2026  
**Chronicler:** #63  
**Task:** #26 ModpackChecker Phase 5 Deployment

---

## The Problem

Technic API was returning `401 Unauthorized` for all requests:

```php
$response = Http::get('https://api.technicpack.net/modpack/tekkit?build=1');
// Returns: {"status":401,"error":"Unauthorized"}
```

We initially suspected authentication requirements had changed.

---

## Gemini's Diagnosis

**It wasn't authentication — it was version control.**

Technic actively blocks requests claiming to come from ancient or deprecated launcher builds. By hardcoding `?build=1`, we were telling the API we're using build #1 of the Technic Launcher. The API rejects this outdated build number.

The current stable build number is in the high 700s/800s.

---

## The "RV-Ready" Fix

Instead of hardcoding a higher number (which could eventually be deprecated too), we dynamically fetch the current build number:

```php
private function checkTechnic(string $slug): array
{
    // Step 1: Get current stable launcher build number
    $versionResponse = Http::get('https://api.technicpack.net/launcher/version/stable4');
    $latestBuild = $versionResponse->successful() 
        ? ($versionResponse->json('build') ?? 999) 
        : 999; // Fallback to high number if version check fails
    
    // Step 2: Fetch modpack data with valid build number
    $response = Http::withHeaders([
        'User-Agent' => 'FirefrostGaming/ModpackChecker/1.0',
        'Accept' => 'application/json',
    ])->get("https://api.technicpack.net/modpack/{$slug}?build={$latestBuild}");

    if (!$response->successful()) {
        throw new \Exception('Technic API request failed: ' . $response->status());
    }

    $data = $response->json();

    return [
        'name' => $data['displayName'] ?? $data['name'] ?? 'Unknown',
        'version' => $data['version'] ?? 'Unknown',
    ];
}
```

---

## Why "RV-Ready"?

This approach requires **zero ongoing maintenance**. As Technic updates their launcher versions, our extension automatically mimics the latest official launcher — no code changes needed.

---

## Key Endpoints

| Endpoint | Purpose |
|----------|---------|
| `https://api.technicpack.net/launcher/version/stable4` | Get current launcher build number |
| `https://api.technicpack.net/modpack/{slug}?build={N}` | Get modpack info with valid build |

---

## Result

All 4 platforms now working:
- ✅ Modrinth
- ✅ FTB
- ✅ CurseForge
- ✅ Technic
