cdn.xiaocia.my.id

Pilih file atau drag ke sini
Batas maksimal ukuran file adalah 20 MB
API Documentation

POST /upload

Format multipart/form-data, butuh field apikey dan file. Limit ukuran 20MB per file.

bash
curl -X POST https://cdn.xiaocia.my.id/upload \
  -F "apikey=X14OC14" \
  -F "file=@/path/ke/file.jpg"

Response Sukses

json
{
  "status": true,
  "creator": "Xiaocia",
  "result": {
    "url": "https://cdn.xiaocia.my.id/file/xc-13.jpg",
    "name": "file.jpg",
    "size": 149086,
    "mimetype": "image/jpeg"
  }
}

Response Gagal

Status HTTPKeterangan
400Field file tidak ditemukan
403API key salah atau kosong
405Method bukan POST
500Internal server error

Catatan: GIF diam otomatis di-convert menjadi .mp4. Ekstensi URL hasil bisa berbeda dari file asli.

GET /file/:id

Stream file publik. Tidak memerlukan API key. Format ID sequential (xc-1, xc-2, dst).

http
GET https://cdn.xiaocia.my.id/file/xc-13.jpg

404 kalau file gak ketemu: {"status":false,"message":"File tidak ditemukan atau link sudah kedaluwarsa."}

DELETE /file/:id

Hapus file dari CDN secara permanen. Butuh apikey admin di header — beda dari apikey upload. File yang dihapus langsung 404.

bash
curl -X DELETE https://cdn.xiaocia.my.id/file/xc-13.jpg \
  -H "apikey: ADMIN_KEY"

Response Sukses

json
{"status": true, "message": "File udah dihapus."}

Response Gagal

Status HTTPKeterangan
401Apikey admin salah atau sesi tidak valid
404File tidak ditemukan atau sudah dihapus
500Internal server error

Bot Implementation

Node.js — Discord.js

javascript
const axios = require('axios');
const FormData = require('form-data');

async function uploadToXiaocia(fileUrl, fileName) {
  const fileRes = await axios.get(fileUrl, { responseType: 'arraybuffer' });
  const form = new FormData();
  form.append('apikey', 'X14OC14');
  form.append('file', Buffer.from(fileRes.data), fileName);

  const res = await axios.post('https://cdn.xiaocia.my.id/upload', form, {
    headers: form.getHeaders(),
  });
  return res.data.result.url;
}
// const url = await uploadToXiaocia(attachment.url, attachment.name);
// message.reply(`Link: ${url}`);

Node.js — Telegram Bot

javascript
async function uploadFromTelegramFile(bot, fileId, fileName) {
  const fileLink = await bot.getFileLink(fileId);
  return uploadToXiaocia(fileLink, fileName);
}

Python — discord.py / aiogram

python
import aiohttp

async def upload_to_xiaocia(file_bytes: bytes, filename: str, api_key: str) -> str:
    async with aiohttp.ClientSession() as session:
        form = aiohttp.FormData()
        form.add_field('apikey', api_key)
        form.add_field('file', file_bytes, filename=filename)
        async with session.post('https://cdn.xiaocia.my.id/upload', data=form) as resp:
            data = await resp.json()
            if not data['status']:
                raise Exception(data['message'])
            return data['result']['url']

Pake result.url buat dikirim ke user, bukan result.name.

Known Limitations