REST API v1 · CORS Open

API Reference

Integrasikan upload gambar clickme dari domain atau server manapun — website, bot, script, atau app — menggunakan api.clickme.web.id.

API Base
https://api.clickme.web.id
CDN Base
https://cdn.clickme.web.id
Auth
Tidak ada — rate limit per IP
Response
application/json
Overview

API clickme memungkinkan upload gambar dari domain manapun. Tidak perlu API key. CORS sepenuhnya terbuka — panggil dari browser JS, Node.js, Python, bot Discord, Telegram, atau server-side apapun.

Base URL
API
https://api.clickme.web.id
CDN
https://cdn.clickme.web.id/images/{filename}
Rate Limits

Per IP. Melebihi limit mengembalikan 429 Too Many Requests.

EndpointLimitWindow
POST /upload20 request15 menit
Semua lainnya30 request1 menit
Coba Langsung

Test upload API langsung dari halaman ini.

POST /upload — Live Test
Upload Gambar
POSThttps://api.clickme.web.id/uploadUpload satu gambar

Request — multipart/form-data

FieldTipeStatusKeterangan
imageFileWajibFile gambar. Format: JPEG PNG GIF WEBP SVG. Maks 10 MB

Response 200 OK

json
{
  "success": true,
  "filename": "550e8400-e29b-41d4.jpg",
  "urls": {
    "cdn":      "https://cdn.clickme.web.id/images/550e8400.jpg",
    "jsdelivr": "https://cdn.jsdelivr.net/gh/user/repo@main/images/550e8400.jpg",
    "raw":      "https://raw.githubusercontent.com/user/repo/main/images/550e8400.jpg",
    "path":     "https://clickme.web.id/i/550e8400.jpg"
  },
  "size": 245891,
  "mimetype": "image/jpeg",
  "uploaded_at": "2024-01-15T10:30:00.000Z"
}
JavaScript / Fetch
javascript
async function uploadImage(file) {
  const form = new FormData();
  form.append('image', file);
  const res  = await fetch('https://api.clickme.web.id/upload', { method: 'POST', body: form });
  const data = await res.json();
  if (!data.success) throw new Error(data.error);
  return data.urls.cdn;
}
Python
python
import requests

def upload(path: str) -> str:
    with open(path, "rb") as f:
        r = requests.post("https://api.clickme.web.id/upload", files={"image": f})
    d = r.json()
    if not d["success"]: raise ValueError(d["error"])
    return d["urls"]["cdn"]
cURL
bash
curl -X POST https://api.clickme.web.id/upload \
  -F "image=@/path/to/photo.jpg"
Discord.js Bot
javascript
// !upload + attachment → balas dengan CDN URL
bot.on('messageCreate', async msg => {
  if (msg.content !== '!upload' || !msg.attachments.size) return;
  const att = msg.attachments.first();
  const buf = Buffer.from((await axios.get(att.url, { responseType:'arraybuffer' })).data);
  const fd  = new FormData();
  fd.append('image', buf, { filename: att.name, contentType: att.contentType });
  const res = await (await fetch('https://api.clickme.web.id/upload', {
    method: 'POST', body: fd, headers: fd.getHeaders()
  })).json();
  msg.reply(res.success ? `✅ ${res.urls.cdn}` : `❌ ${res.error}`);
});
Telegram Bot (Python)
python
async def photo(upd, ctx):
    file = await ctx.bot.get_file(upd.message.photo[-1].file_id)
    buf  = io.BytesIO(); await file.download_to_memory(buf); buf.seek(0)
    r = requests.post("https://api.clickme.web.id/upload",
                       files={"image": ("photo.jpg", buf, "image/jpeg")})
    d = r.json()
    await upd.message.reply_text(
        f"✅ {d['urls']['cdn']}" if d["success"] else "❌ Gagal"
    )
PHP
php
<?php
function clickme_upload($path): string {
    $c = curl_init();
    curl_setopt_array($c, [
        CURLOPT_URL            => 'https://api.clickme.web.id/upload',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => ['image' => new CURLFile($path)]
    ]);
    $r = json_decode(curl_exec($c), true);
    if (!$r['success']) throw new Exception($r['error']);
    return $r['urls']['cdn'];
}