# Media (/api/media)

| Jenis | Format                           | Batas                                                                 |
| ----- | -------------------------------- | --------------------------------------------------------------------- |
| Foto  | JPEG, PNG                        | 8 MB. Instagram: rasio 4:5–1.91:1 (PNG dikonversi ke JPEG)            |
| Video | MP4, MOV (H.264/HEVC, audio AAC) | 300 MB, lebar maks 1920 px, metadata `moov` di awal file (fast start) |

Jenis file dibaca dari isi file, bukan dari `Content-Type`.

## Dari URL publik [#dari-url-publik]

```bash
curl -X POST https://api.tebar.app/v1/media/from-url \
  -H "Authorization: Bearer tb_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://contoh.com/foto.jpg"}'
```

Hanya `http`/`https` ke host publik di port 80 atau 443.

## Upload langsung [#upload-langsung]

Untuk foto dan video kecil (di bawah 100 MB), kirim isi file sebagai body:

```bash
curl -X POST https://api.tebar.app/v1/media/upload \
  -H "Authorization: Bearer tb_live_xxx" \
  -H "Content-Type: image/jpeg" \
  --data-binary @foto.jpg
```

## Upload terpotong (video besar) [#upload-terpotong-video-besar]

```http
POST /v1/media/uploads          {"mime_type":"video/mp4","size_bytes":12000000}
→ 201 {"id":"m1..","part_size":8388608,"part_count":2,...}

PUT  /v1/media/m1../parts/1     (8.388.608 byte pertama, Content-Type: application/octet-stream) → 204
PUT  /v1/media/m1../parts/2     (sisanya) → 204
POST /v1/media/m1../complete    → 200 {"type":"video","duration_ms":6000,"width":1080,"height":1920,...}
```

Semua bagian kecuali yang terakhir harus tepat `part_size` byte.

## Alt text dan pustaka [#alt-text-dan-pustaka]

- `PATCH /v1/media/{id}` dengan `{"alt_text": "..."}` (≤ 1.000 karakter). Threads memakainya untuk foto dan video, Instagram hanya untuk foto.
- `GET /v1/media` menampilkan pustaka media, terbaru dulu.
- `DELETE /v1/media/{id}` menghapus media. Media yang dipakai post terjadwal tidak bisa dihapus (`409 media_in_use`).
