cloud_sync Izuka CDN
API Docs
integration_instructions API Reference

Izuka CDN Docs

REST API documentation & reusable function templates untuk integrasi ke aplikasi, bot, atau project lainnya.

favorite
Health Check GET /health

Periksa status server sebelum upload.

cURL
curl https://cdn.izukaprivate.my.id/health
Fetch
const res = await fetch('https://cdn.izukaprivate.my.id/health');
const data = await res.json();
console.log(data);
Python
import requests
res = requests.get('https://cdn.izukaprivate.my.id/health')
print(res.json())
upload
Upload File POST /upload

Upload file sebagai multipart/form-data. Max 5 MB per file.

info Response berisi URL GitHub raw. Gunakan domain CDN custom: https://cdn.izukaprivate.my.id/cdn/{filename}
cURL
curl -X POST https://cdn.izukaprivate.my.id/upload \
  -F "file=@./file.jpg"
JavaScript
async function uploadToCDN(buffer, filename, mimetype = 'application/octet-stream') {
  const form = new FormData();
  form.append('file', new Blob([buffer], { type: mimetype }), filename);

  const res = await fetch('https://cdn.izukaprivate.my.id/upload', {
    method: 'POST',
    body: form
  });

  const data = await res.json();
  if (!res.ok) throw new Error(data.error);

  const fn = data.url.split('/').pop();
  return `https://cdn.izukaprivate.my.id/cdn/${fn}`;
}
Node.js
const axios = require('axios');
const FormData = require('form-data');

async function uploadToCDN(buffer, filename) {
  const form = new FormData();
  form.append('file', buffer, { filename });

  const { data } = await axios.post(
    'https://cdn.izukaprivate.my.id/upload',
    form,
    { headers: form.getHeaders() }
  );

  const fn = data.url.split('/').pop();
  return `https://cdn.izukaprivate.my.id/cdn/${fn}`;
}
Python
import requests
import io

def upload_to_cdn(buffer: bytes, filename: str) -> str:
    files = {'file': (filename, io.BytesIO(buffer))}
    res = requests.post('https://cdn.izukaprivate.my.id/upload', files=files)
    data = res.json()
    
    if res.status_code != 200:
        raise Exception(data.get('error'))
    
    fn = data['url'].split('/')[-1]
    return f'https://cdn.izukaprivate.my.id/cdn/{fn}'
lightning_bolt
Async Upload (Python) aiohttp

Untuk bot async atau aplikasi yang memerlukan non-blocking I/O.

Python aiohttp
import aiohttp
import io

async def upload_to_cdn_async(buffer: bytes, filename: str) -> str:
    form = aiohttp.FormData()
    form.add_field('file', io.BytesIO(buffer), filename=filename)
    
    async with aiohttp.ClientSession() as session:
        async with session.post(
            'https://cdn.izukaprivate.my.id/upload',
            data=form
        ) as r:
            data = await r.json()
    
    fn = data['url'].split('/')[-1]
    return f'https://cdn.izukaprivate.my.id/cdn/{fn}'
security
Error Handling Best Practice

Wrapper lengkap dengan retry logic dan validasi file size.

warning Server menggunakan GitHub API yang bisa rate-limited. Implementasikan exponential backoff untuk retry.
JavaScript dengan Retry
const MAX_SIZE = 5 * 1024 * 1024;

async function safeCDNUpload(buffer, filename, maxRetries = 3) {
  if (buffer.length > MAX_SIZE)
    throw new Error('File terlalu besar');

  for (let i = 1; i <= maxRetries; i++) {
    try {
      const form = new FormData();
      form.append('file', new Blob([buffer]), filename);

      const res = await fetch('https://cdn.izukaprivate.my.id/upload', {
        method: 'POST', body: form
      });
      
      const data = await res.json();
      if (!res.ok) throw new Error(data.error);

      const fn = data.url.split('/').pop();
      return `https://cdn.izukaprivate.my.id/cdn/${fn}`;
    } catch (err) {
      if (i === maxRetries) throw err;
      await new Promise(r => setTimeout(r, 1000 * i)); // backoff
    }
  }
}
check_circle Selalu gunakan domain CDN custom cdn.izukaprivate.my.id/cdn/ untuk kecepatan optimal.