Authentication & Token
Kirim token pada header berikut:
Authorization: Bearer <token>
X-API-Key: <token>
Format token contoh: nama-4digit (mis. dani-4821).
Gunakan token untuk mengakses API. Jika token salah, hubungi admin via WhatsApp Channel.
https://cdn.danimaru.site
Kirim token pada header berikut:
Authorization: Bearer <token>
X-API-Key: <token>
Format token contoh: nama-4digit (mis. dani-4821).
| Parameter | Tipe | Keterangan |
|---|---|---|
file | File | Wajib. Isi chunk saat ini (atau file utuh untuk single-part). |
chunkIndex | int | Index chunk (0-based). Gunakan 0 untuk single-part. |
totalChunks | int | Total chunk. Gunakan 1 untuk single-part. |
fileId | string | ID unik yang sama untuk semua chunk (mis. UUID). |
originalName | string | Opsional. Nama asli file. |
Server memvalidasi MIME/EXT, memblokir skrip berbahaya, lalu menghasilkan URL pendek.
curl -X POST "https://cdn.danimaru.site/upload" \
-H "Authorization: Bearer <TOKEN>" \
-F "file=@/path/to/file.jpg" \
-F "chunkIndex=0" -F "totalChunks=1" \
-F "fileId=$(date +%s)" \
-F "originalName=file.jpg"
# Ulangi 0..N-1
for i in $(seq 0 3); do
curl -X POST "https://cdn.danimaru.site/upload" \
-H "Authorization: Bearer <TOKEN>" \
-F "file=@/tmp/chunk-$i.bin" \
-F "chunkIndex=$i" -F "totalChunks=4" \
-F "fileId=my-big-file-uuid" \
-F "originalName=video.mp4"
done
const TOKEN = '<TOKEN>';
const CHUNK = 20 * 1024 * 1024; // 20MB
async function upload(file){
const total = Math.ceil(file.size / CHUNK);
const fileId = (Date.now().toString(36)+Math.random().toString(36).slice(2)).slice(0,16);
for(let i=0;i<total;i++){
const part = file.slice(i*CHUNK, Math.min(file.size,(i+1)*CHUNK));
const fd = new FormData();
fd.append('file', part, file.name + '.part');
fd.append('chunkIndex', i);
fd.append('totalChunks', total);
fd.append('fileId', fileId);
fd.append('originalName', file.name);
const res = await fetch('https://cdn.danimaru.site/upload', {
method:'POST', headers:{ 'Authorization':'Bearer '+TOKEN }, body: fd
});
const json = await res.json();
if(json.status==='success'){ return json.data; }
}
}
const fd = new FormData();
fd.append('file', file);
fd.append('chunkIndex', 0);
fd.append('totalChunks', 1);
fd.append('fileId', Date.now().toString(36));
fd.append('originalName', file.name);
const res = await fetch('https://cdn.danimaru.site/upload', {
method:'POST', headers:{ 'Authorization':'Bearer <TOKEN>' }, body: fd
});
const json = await res.json();
console.log(json.data?.url);
$ch = curl_init('https://cdn.danimaru.site/upload');
$data = [
'file' => new CURLFile('/path/to/file.jpg'),
'chunkIndex' => 0,
'totalChunks' => 1,
'fileId' => 'abc123',
'originalName' => 'file.jpg'
];
curl_setopt_array($ch, [
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => ['Authorization: Bearer <TOKEN>'],
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => 1
]);
$out = curl_exec($ch); curl_close($ch);
echo $out;
{
"status": "success",
"creator": "Danimaru",
"data": {
"filename": "a1b2c3d4.png",
"original": "foto.png",
"type": "image",
"size": "1.2 MB",
"mime": "image/png",
"short_url": "https://cdn.danimaru.site/s/Ab12CdE",
"view_url": "https://cdn.danimaru.site/f/Ab12CdE",
"url": "https://cdn.danimaru.site/f/Ab12CdE"
}
}
{
"status": "chunk_uploaded",
"chunkIndex": 2
}
Proxy streaming ke Cloudflare R2 (opsional). URL R2 asli tidak tampil di address bar.
image/*, video/*, audio/*, text/*, application/pdf.&d=1 untuk memaksa unduh.url (required) — http(s) targetcode (optional) — custom code [a-zA-Z0-9_-] 3–32curl -X POST "https://cdn.danimaru.site/api/shorten" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/halaman"}'
{
"status": "success",
"code": "AbC1234",
"short_url": "https://cdn.danimaru.site/s/AbC1234",
"long_url": "https://example.com/halaman"
}
GET https://cdn.danimaru.site/s/AbC1234 → 302 → https://example.com/halaman
curl "https://cdn.danimaru.site/api/info?code=AbC1234"
{
"status": "success",
"data": {
"code": "AbC1234",
"long_url": "https://example.com/halaman",
"clicks": 12,
"created_at": "2025-08-27 05:55:11",
"short_url": "https://cdn.danimaru.site/s/AbC1234"
}
}
{
"status": "error",
"message": "Unauthorized: Token kosong atau tidak dikirim."
}
{
"status": "error",
"message": "Method not allowed"
}
{
"status": "error",
"message": "Chunk too large (max 20MB)"
}
{
"status": "error",
"message": "Type not allowed (mime: '...', ext: '...')"
}
Butuh token valid atau ada kendala teknis? Hubungi:
WhatsApp Channel