API Reference
REST API publik untuk mengakses 36 snippet di 14 kategori. Read-only, gratis, tanpa API key.
4
36
Tidak perlu
JSON
Live Request Activity
Volume 5 menit · distribusi 24 jam
—
—
—
—
Request volume — 5 menit terakhir
Distribusi endpoint
Belum ada request hari ini.
Status response
Belum ada request hari ini.
Quickstart
Semua endpoint diakses lewat base URL berikut. Tidak ada autentikasi atau API key — langsung request dan dapatkan JSON.
Base URL
https://qrtzcode.web.id/api/v1curl "https://qrtzcode.web.id/api/v1/snippets?limit=5"Endpoints
/api/v1/snippetsList semua snippet
Mengambil daftar snippet dengan pagination dan filter opsional. Hasil di-sort dari yang terbaru.
| Query Param | Tipe | Keterangan |
|---|---|---|
category | string | Filter berdasarkan slug kategori, contoh: scraper |
tag | string | Filter snippet yang memiliki tag tertentu |
language | string | Filter berdasarkan bahasa, contoh: typescript |
limit | number | Jumlah hasil per halaman, default 20, maksimal 100 |
offset | number | Offset untuk pagination, default 0 |
Request
curl "https://qrtzcode.web.id/api/v1/snippets?limit=5"Response 200
{
"data": [
{
"id": "049cad18-7ea7-4eff-99e3-40398a55e4a4",
"slug": "otakudesu",
"title": "otakudesu",
"description": "seperti biasa bebas kalian modifikasi ubah credit ama creatornya, ak gabakal baper kok😹, semoga bermanfaat ya^^.",
"language": "javascript",
"tags": [
"anime",
"scraper"
],
"copy_count": 37,
"view_count": 66,
"created_at": "2026-06-18T19:03:45.350504+00:00",
"categories": {
"name": "Anime",
"slug": "anime"
}
}
],
"meta": {
"total": 36,
"limit": 20,
"offset": 0
}
}Coba langsung
/api/v1/snippets/:idDetail satu snippet
Mengambil detail snippet beserta metadata file-file-nya (filename, language, position). Source code tidak disertakan — gunakan endpoint /raw untuk mengambil isi file langsung.
| Path Param | Tipe | Keterangan |
|---|---|---|
idwajib | string (uuid) | ID unik snippet, didapat dari endpoint list |
Request
curl "https://qrtzcode.web.id/api/v1/snippets/049cad18-7ea7-4eff-99e3-40398a55e4a4"Response 200
{
"id": "049cad18-7ea7-4eff-99e3-40398a55e4a4",
"slug": "otakudesu",
"title": "otakudesu",
"description": "seperti biasa bebas kalian modifikasi ubah credit ama creatornya, ak gabakal baper kok😹, semoga bermanfaat ya^^.",
"language": "javascript",
"tags": [
"anime",
"scraper"
],
"copy_count": 37,
"view_count": 66,
"created_at": "2026-06-18T19:03:45.350504+00:00",
"categories": {
"name": "Anime",
"slug": "anime"
},
"files": [
{
"filename": "otakudesu.js",
"language": "javascript",
"position": 0
}
]
}Coba langsung
/api/v1/snippets/:id/rawAmbil source code mentah
Mengembalikan isi file snippet sebagai plain text apa adanya, bukan dibungkus JSON. Cocok buat curl url -o file.js langsung tanpa parsing.
| Path Param | Tipe | Keterangan |
|---|---|---|
idwajib | string (uuid) | ID unik snippet, didapat dari endpoint list |
| Query Param | Tipe | Keterangan |
|---|---|---|
file | string | Nama file spesifik kalau snippet punya lebih dari satu file. Default: file pertama |
Request
curl "https://qrtzcode.web.id/api/v1/snippets/049cad18-7ea7-4eff-99e3-40398a55e4a4/raw" -o otakudesu.jsResponse 200
const axios = require('axios');
const cheerio = require('cheerio');
const https = require('https');
const userAgents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x...Coba langsung
/api/feedRSS / JSON Feed
Feed snippet terbaru dalam format RSS 2.0 atau JSON Feed, cocok untuk syndication dan feed reader.
| Query Param | Tipe | Keterangan |
|---|---|---|
format | string | "rss" (default) atau "json" |
Request
curl "https://qrtzcode.web.id/api/feed?format=json"Response 200
{
"data": [
{
"id": "049cad18-7ea7-4eff-99e3-40398a55e4a4",
"slug": "otakudesu",
"title": "otakudesu",
"description": "seperti biasa bebas kalian modifikasi ubah credit ama creatornya, ak gabakal baper kok😹, semoga bermanfaat ya^^.",
"language": "javascript",
"tags": [
"anime",
"scraper"
],
"copy_count": 37,
"view_count": 66,
"created_at": "2026-06-18T19:03:45.350504+00:00",
"categories": {
"name": "Anime",
"slug": "anime"
}
}
],
"meta": {
"total": 36,
"limit": 20,
"offset": 0
}
}Coba langsung
Premium AM
Alight Motion Premium 1 tahun via 2-step flow
Cara kerja — 2 step
- 1POST /api/v1/premium/send dengan body { "email": "target@gmail.com" }. Server forward ke Alight Motion → mereka kirim email berisi tombol "Login ke Alight Creative".
- 2Buka inbox target (cek folder Spam juga). JANGAN klik tombol di HP — kalau diklik verifikasi gagal. Tekan-tahan tombolnya → pilih Salin URL.
- 3POST /api/v1/premium/verif dengan body { email, link } — link adalah URL yang barusan disalin.
- 4Server balikin duration: "1 Tahun" kalau sukses. Login Alight Motion di HP pakai email tadi — Premium sudah aktif.
| Kode | Error | Keterangan |
|---|---|---|
| 400 | invalid_request | Email kosong / format salah, atau link bukan URL valid. |
| 401 | authentication_error | API key salah atau tidak ada di header Authorization: Bearer. |
| 502 | upstream_error | Server Alight Motion error atau link kadaluwarsa. Coba ulang send/verif. |
Error Codes
| 200 | Request berhasil |
| 404 | Resource tidak ditemukan (id salah / sudah dihapus) |
| 500 | Internal error di server, coba lagi |
Contoh error 404
{
"error": "Not found"
}Caching & CORS
Semua response endpoint /api/v1/* dikirim dengan header Cache-Control: s-maxage=60, stale-while-revalidate — di-cache 60 detik di edge Vercel, lalu di-revalidate otomatis di background.
CORS terbuka penuh (Access-Control-Allow-Origin: *), jadi bisa langsung di-fetch dari browser di domain manapun tanpa proxy.
Rate Limit
Maksimal 50 req/menit per IP. Melebihi limit → 429 Too Many Requests dengan header Retry-After: 60.
IP yang melewati 150 req/menit terdeteksi sebagai DDoS dan langsung di-ban permanen → 403 Forbidden. Gunakan client-side cache (lihat bagian Integrasi) untuk menghindari hit limit.
Integrasi & Client Cache
localStorage TTL 60s — zero dependency
Tidak ada SDK resmi — cukup pakai fetch biasa. Helper di bawah menambahkan layer cache localStorage sehingga endpoint yang sama tidak di-hit berulang dalam 60 detik.
Vanilla JS
const BASE = 'https://qrtzcode.web.id';
const TTL = 60_000; // 60 detik
async function qrtzFetch(path) {
const key = 'qrtz:' + path;
try {
const { data, exp } = JSON.parse(localStorage.getItem(key) ?? '{}');
if (data && Date.now() < exp) return data;
} catch {}
const data = await fetch(BASE + path).then(r => r.json());
localStorage.setItem(key, JSON.stringify({ data, exp: Date.now() + TTL }));
return data;
}
const list = await qrtzFetch('/api/v1/snippets?limit=10');
const detail = await qrtzFetch('/api/v1/snippets/' + id);React / Next.js hook
import { useEffect, useState } from 'react';
const BASE = 'https://qrtzcode.web.id';
const TTL = 60_000;
export function useQrtz<T = unknown>(path: string) {
const [data, setData] = useState<T | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<Error | null>(null);
useEffect(() => {
setLoading(true);
const key = 'qrtz:' + path;
try {
const { data: cached, exp } = JSON.parse(localStorage.getItem(key) ?? '{}');
if (cached && Date.now() < exp) { setData(cached); setLoading(false); return; }
} catch {}
fetch(BASE + path)
.then(r => r.json())
.then(json => {
localStorage.setItem(key, JSON.stringify({ data: json, exp: Date.now() + TTL }));
setData(json);
})
.catch(setError)
.finally(() => setLoading(false));
}, [path]);
return { data, loading, error };
}
const { data, loading } = useQrtz('/api/v1/snippets?limit=10');