Uploader Media Hosting.

API upload media sementara untuk image, video, dan audio. Setiap file wajib memakai API key panel, maksimal 10MB, aktif 30 hari, deduplikasi file yang sama otomatis memperbarui expired 30 hari, dan limit berkurang berdasarkan ukuran file. Validasi sekarang memakai MIME, extension, dan signature file supaya PNG/JPG/MP4/MP3 tetap diterima walau Content-Type dari browser kosong atau application/octet-stream.

POST /api/uploadImage / Video / AudioMax 10MBExpire 30 hari1 limit / 0,5MBAdmin manage
Storage panel:
File disimpan di folder panel Api/Uploader dan metadata aktif di Api/Uploader/media.json. Saat file yang sama diupload ulang, panel memakai ID lama dan hanya memperbarui expired menjadi 30 hari lagi. Saat expire, panel akan membersihkan file otomatis.

Endpoint Upload

POST /api/upload
POST /api/media/upload
Field/HeaderKeterangan
fileField multipart/form-data berisi media.
apikeyAPI key wajib. Bisa dikirim lewat query, header x-api-key, atau Authorization: Bearer.
Content-TypeSupport multipart/form-data, JSON base64, dan raw body dengan filename di query. Jika MIME kosong/aneh, panel fallback ke extension + signature file.
extensionSupport image/video/audio umum seperti .png, .jpg, .jpeg, .webp, .gif, .mp4, .webm, .mov, .mp3, .wav, .ogg, .m4a, dll.
max size10MB per media.
costceil(sizeMB / 0.5). 0-0,5MB = 1 limit, 1MB = 2 limit, 1,2MB = 3 limit, 4,8MB = 10 limit.

Response sukses

{
  "ok": true,
  "message": "Media berhasil diupload.",
  "id": "media_id",
  "url": "https://api.chioriya.my.id/Api/Uploader/media_id.jpg",
  "mediaUrl": "https://api.chioriya.my.id/Api/Uploader/media_id.jpg",
  "expiresAt": 1790000000000,
  "cost": 2,
  "remaining": 498
}

Manage Uploader Admin

Manage Uploader hanya muncul untuk akun yang tersambung ke panel dan role-nya admin/owner. Di dashboard, Manage Uploader sekarang berupa tombol yang membuka popup list media aktif. Popup mendukung copy URL, hapus, edit expired, sort ukuran/expired, serta filter extension multi-selection seperti jpg, png, mp4, mp3, webp, dan lainnya.

POST /api/panel/media/manage
POST /api/panel/media/delete
POST /api/panel/media/update
EndpointFungsi
/api/panel/media/manageLihat semua media aktif yang masih tersimpan.
/api/panel/media/deleteHapus media berdasarkan id.
/api/panel/media/updateUbah expire berdasarkan id + days atau expiresAt.
Endpoint manage memakai cookie/session connector panel, bukan API key biasa. Jadi user biasa tetap tidak bisa melihat semua media orang lain.

Examples

Browser Fetch

const form = new FormData();
form.append("file", fileInput.files[0]);

const res = await fetch("/api/upload?apikey=YOUR_APIKEY", {
  method: "POST",
  body: form
});
const data = await res.json();
console.log(data.mediaUrl);

curl

curl -X POST "https://api.chioriya.my.id/api/upload?apikey=YOUR_APIKEY" \
  -F "file=@gambar.jpg"

Baileys / Keila

const axios = require("axios");
const FormData = require("form-data");

async function uploadMedia(buffer, filename, apiKey) {
  const form = new FormData();
  form.append("file", buffer, filename);
  const { data } = await axios.post("https://api.chioriya.my.id/api/upload", form, {
    headers: { ...form.getHeaders(), "x-api-key": apiKey },
    maxBodyLength: Infinity
  });
  return data.mediaUrl;
}