cdn.xiaocia.my.id

drag file ke sini, atau klik
max ±100mb

docs — POST /upload

Body: multipart/form-data, field apikey dan file. Limit ukuran sesuai Cloudflare Workers (Free plan ±100MB).

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

Response sukses:

{
  "status": true,
  "creator": "Xiaocia",
  "result": {
    "url": "https://cdn.xiaocia.my.id/file/13.jpg",
    "name": "file.jpg",
    "size": 149086,
    "mimetype": "image/jpeg"
  }
}
StatusKondisi
400Field file gak ada
403API key salah/kosong
405Method bukan POST
500Error dari Telegram/server

GIF diam (loop, tanpa suara) otomatis di-convert Telegram jadi .mp4 — ekstensi URL hasil bisa beda dari file asli. Behavior Telegram.

docs — GET /file/:filename

Stream file yang udah diupload. Gak butuh apikey, link publik.

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

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

docs — implementasi bot

Node.js — Discord.js

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

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

Python — discord.py / aiogram

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