# HTTP API

Kart üstü panelin kullandığı uç noktalar. Her şey `http://<kart-ip>/api/...` altında, JSON döner; yazma istekleri `POST`. `/api` dışı her yol önce projelerin `cyd.rota` ile açtığı rotalara bakılır.

## Durum ve dosyalar

| Uç | İş |
|---|---|
| `GET /api/status` | İşler (`mod` dahil), `sys` (heap / DRAM / flash / rssi / sıcaklık), `net`, `autostart`, `rotalar`, `max_jobs`, `max_thread` |
| `GET /api/caps` | Özellik haritası (`OZELLIKLER` + ölçülen yetenekler); panel düğmeleri buna göre gizler |
| `GET /api/list` | Proje dosyaları + `modlar` + `base` (`/projects` ya da `/sd/projects`) |
| `GET /api/file?name=` | Dosya içeriği |
| `POST /api/save?name=` | Yaz (gövde = ham içerik, akıtmalı) |
| `POST /api/delete?name=` · `POST /api/rename?name=&to=` | |
| `GET /api/docs[?dil=en]` | Kart üstü belge (Markdown) |

## Çalıştırma

| Uç | İş |
|---|---|
| `POST /api/run?name=[&mod=normal\|thread\|solo]` | Çalıştır; `mod` tek seferlik |
| `POST /api/stop?name=` · `POST /api/stopall` | Durdur |
| `POST /api/mod?name=&mod=` | Dosyanın kalıcı çalışma modu |
| `POST /api/solo?name=&wifi=0\|1` | Solo modda yeniden başlat (tek seferlik) |
| `POST /api/autostart?name=&on=0\|1` | Açılış listesi (çoklu) |
| `POST /api/force` | Takılı projeyi zorla (reset) |
| `POST /api/eval` | Gövdedeki kodu bir kez çalıştır |
| `GET /api/rotalar` · `GET /<rota>` | Projelerin açtığı yollar; projenin işleyicisi |

## Log

| Uç | İş |
|---|---|
| `GET /api/log?since=N[&source=ad]` | Canlı log: `[seq, kaynak, satır]` (100 satırlık halka, sayfa başına en çok 80) |
| `POST /api/log/clear` | Canlı logu temizle |
| `GET /api/log/file?name=` | Projenin kalıcı logu (`/logs/<proje>.log`, 8 KB/proje) |
| `GET /api/log/files` | Logu olan projeler ve boyutları |
| `POST /api/log/file/clear?name=` | |

## Ayarlar

| Uç | İş |
|---|---|
| `GET/POST /api/wifi` | Ağ ayarları (boş şifre eskisini korur) |
| `GET /api/scan` | Ağ taraması |
| `POST /api/display?rot=0..3&bgr=0\|1&test=1&save=0\|1` | Ekranı anında ayarla |
| `GET/POST /api/depolama[?mod=otomatik\|flash\|sd]` | Projeler nerede dursun (canlı geçiş) |
| `POST /api/tasi?hedef=sd\|flash[&names=a,b]` | Flash ↔ SD taşıma (kopyala, doğrula, kaynağı sil; çalışan proje varken reddedilir) |
| `POST /api/reset` | Yeniden başlat |

## Örnek

```sh
curl http://192.168.0.217/api/status
curl -X POST --data-binary @merhaba.py "http://192.168.0.217/api/save?name=merhaba.py"
curl -X POST "http://192.168.0.217/api/run?name=merhaba.py"
curl "http://192.168.0.217/api/log?since=0&source=merhaba.py"
curl -X POST "http://192.168.0.217/api/stop?name=merhaba.py"
```

## USB köprüsü üzerinden

`tools/usb_panel.py` aynı API'yi seri porttan sunar: çerçeve `~CYD~id~b64(json{m,p,q,b|f})`, cevap yazıldıkça base64'lenip `~CYDR~id~...` olarak akıtılır; 384 bayt üstü gövdeler `~CYDB~` parçaları olarak gider ve her parça `~CYDA~` ile onaylanır. Panel tarafında bir fark yoktur.
