{
  "endpoints": [
    {
      "method": "POST",
      "path": "/api/media/upload",
      "description": "Upload ảnh hoặc video lên Media Library. Hỗ trợ Query param `tags` (phân tách bởi dấu phẩy) và `uploaded_by`. Giới hạn dung lượng file 50MB."
    },
    {
      "method": "GET",
      "path": "/api/media",
      "description": "Liệt kê danh sách tất cả các assets. Hỗ trợ lọc qua Query param `content_type` (VD: 'image' hoặc 'video') và `tag`. Hỗ trợ phân trang bằng `limit` và `offset`."
    },
    {
      "method": "GET",
      "path": "/api/media/platforms",
      "description": "Lấy danh sách các chuẩn kích thước nền tảng được hệ thống hỗ trợ tự động cắt/ghép (facebook, instagram_square, tiktok, ...)."
    },
    {
      "method": "GET",
      "path": "/api/media/{asset_id}/info",
      "description": "Lấy chi tiết cấu trúc siêu dữ liệu (metadata) của một asset (chiều rộng, chiều cao, codec, size)."
    },
    {
      "method": "GET",
      "path": "/api/media/{asset_id}",
      "description": "Phục vụ (Serve) file nội dung raw (octet-stream hoặc image/video type) của asset gốc."
    },
    {
      "method": "GET",
      "path": "/api/media/{asset_id}/thumb",
      "description": "Phục vụ ảnh thu nhỏ (thumbnail) kích thước tối đa 400x400 cho asset tương ứng. Fallback trả về ảnh gốc nếu thumb không tồn tại."
    },
    {
      "method": "POST",
      "path": "/api/media/{asset_id}/resize",
      "description": "Xử lý cắt (crop) và thay đổi kích thước (resize) ảnh asset trực tiếp dựa vào tham số nền tảng `platform`. Trả về byte stream của ảnh định dạng JPEG."
    },
    {
      "method": "DELETE",
      "path": "/api/media/{asset_id}",
      "description": "Xóa vĩnh viễn file gốc, file thumbnail và loại bỏ asset khỏi tập tin quản lý index.json."
    }
  ]
}