Dokumentasi API
REST API Shanev.Gist untuk membaca, membuat, dan menghapus snippet dari skrip atau aplikasi kamu. Semua respons berupa JSON.
Mulai cepat
Base URL: https://shanev-gist.vercel.app/api/v1
Membaca snippet publik tidak butuh kunci. Membuat dan menghapus snippet butuh kunci API dari halaman Pengaturan.
curl "https://shanev-gist.vercel.app/api/v1/snippets?limit=3"Autentikasi
- Masuk, lalu buka Pengaturan → Kunci API.
- Buat kunci dengan nama yang kamu ingat. Kunci berawalan
sgk_dan hanya tampil sekali. - Kirim kunci di header
Authorization.
Authorization: Bearer sgk_xxxxxxxxxxxxxxxxxxxxxxxxKunci tidak disimpan dalam bentuk asli. Kalau hilang, cabut lalu buat yang baru. Jangan taruh kunci di kode yang dipublikasikan.
Batas penggunaan
| Nama | Tipe | Keterangan |
|---|---|---|
| per menit | request | 60 request per kunci |
| per hari | request | 2.000 request per kunci |
| snippet baru | per hari | 50 snippet per kunci |
| kunci aktif | per akun | 5 kunci |
| file per snippet | jumlah | 10 file |
| isi satu file | karakter | 200.000 |
Setiap respons yang memakai kunci menyertakan header X-RateLimit-Remaining. Kalau batas terlampaui, respons berstatus 429 dengan header Retry-After berisi jumlah detik untuk menunggu.
Format galat
{ "error": { "code": "validation_error", "message": "title wajib, 1 sampai 120 karakter." } }| Nama | Tipe | Keterangan |
|---|---|---|
| 400 | invalid_json | Body bukan JSON yang valid |
| 401 | unauthorized | Kunci tidak ada, salah, atau sudah dicabut |
| 404 | not_found | Snippet atau pengguna tidak ditemukan, atau bukan milikmu saat menghapus |
| 422 | validation_error | Data tidak lolos validasi, lihat pesan |
| 429 | rate_limited | Batas penggunaan terlampaui, lihat Retry-After |
Endpoint
| Nama | Tipe | Keterangan |
|---|---|---|
| GET /api/v1/snippets | publik | Daftar snippet, bisa dicari dan difilter |
| GET /api/v1/snippets/{username}/{slug} | publik | Detail snippet beserta semua file |
| POST /api/v1/snippets | kunci | Buat snippet baru |
| DELETE /api/v1/snippets/{username}/{slug} | kunci | Hapus snippet milik sendiri |
| GET /api/v1/users/{username} | publik | Profil pengguna |
| GET /api/v1/me | kunci | Cek kunci dan sisa batas penggunaan |
/api/v1/snippetspublikhttps://shanev-gist.vercel.app/api/v1/snippets
Daftar snippet publik, terbaru dulu secara default. Bisa dicari dan difilter.
| Nama | Tipe | Keterangan |
|---|---|---|
| q | string | Cari di judul dan deskripsi |
| urut | string | terbaru, terlama, populer, az, atau za |
| kategori | string | Bahasa file, misal python |
| halaman | number | Nomor halaman, mulai dari 1 |
| limit | number | Jumlah per halaman, 1 sampai 50 (default 20) |
{
"data": [
{
"id": "…", "slug": "hello-world", "title": "Hello World",
"description": "contoh", "author": "shan",
"url": "https://shanev-gist.vercel.app/shan/hello-world",
"views": 12, "created_at": "2026-11-09T00:00:00Z",
"file_count": 2, "lang": "javascript", "tags": ["contoh"]
}
],
"page": 1, "limit": 20, "has_more": false
}/api/v1/snippets/{username}/{slug}publikhttps://shanev-gist.vercel.app/api/v1/snippets/{username}/{slug}
Detail satu snippet beserta semua file dan isinya.
{
"id": "…", "slug": "hello-world", "title": "Hello World",
"description": "contoh", "author": "shan", "url": "https://shanev-gist.vercel.app/shan/hello-world",
"views": 12, "created_at": "2026-11-09T00:00:00Z", "tags": ["contoh"],
"files": [ { "filename": "index.js", "lang": "javascript", "code": "console.log('hi')" } ]
}Contoh curl
curl -X GET "https://shanev-gist.vercel.app/api/v1/snippets/{username}/{slug}"Coba di Playground/api/v1/snippetsbutuh kuncihttps://shanev-gist.vercel.app/api/v1/snippets
Membuat snippet publik atas nama pemilik kunci. Snippet langsung tampil di beranda.
| Nama | Tipe | Keterangan |
|---|---|---|
| title | string | Wajib, 1 sampai 120 karakter |
| description | string | null | Opsional, maksimal 2.000 karakter. Mendukung markdown sederhana |
| tags | string[] | Opsional, maksimal 8 tag. Huruf kecil, angka, dan tanda hubung |
| files | object[] | Wajib, 1 sampai 10 file |
| files[].filename | string | Wajib, maksimal 100 karakter |
| files[].lang | string | Opsional, misal javascript, python, text (default text) |
| files[].code | string | Wajib, maksimal 200.000 karakter |
{
"id": "…", "slug": "hello-world", "author": "shan",
"url": "https://shanev-gist.vercel.app/shan/hello-world",
"api_url": "https://shanev-gist.vercel.app/api/v1/snippets/shan/hello-world"
}Contoh curl
curl -X POST "https://shanev-gist.vercel.app/api/v1/snippets" \
-H "Authorization: Bearer $SHANEV_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Contoh","files":[{"filename":"contoh.txt","code":"halo"}]}'Coba di Playground/api/v1/snippets/{username}/{slug}butuh kunci, milik sendirihttps://shanev-gist.vercel.app/api/v1/snippets/{username}/{slug}
Menghapus snippet milikmu. Berhasil dibalas 204 No Content. Snippet milik orang lain dibalas 404.
Contoh curl
curl -X DELETE "https://shanev-gist.vercel.app/api/v1/snippets/{username}/{slug}" \
-H "Authorization: Bearer $SHANEV_KEY"Coba di Playground/api/v1/users/{username}publikhttps://shanev-gist.vercel.app/api/v1/users/{username}
Profil publik: bio, gelar, lencana, dan jumlah pengikut.
{
"username": "shan", "bio": "…", "avatar_url": null,
"title": { "name": "Pembuat", "color": "#7a4fc0" },
"badges": [ { "name": "Early", "description": "Pengguna awal" } ],
"followers": 3, "following": 1, "snippets": 12,
"created_at": "2026-10-01T00:00:00Z"
}/api/v1/mebutuh kuncihttps://shanev-gist.vercel.app/api/v1/me
Mengecek kunci dan melihat batas penggunaannya. Berguna untuk memastikan kunci sudah benar.
Contoh curl
curl -X GET "https://shanev-gist.vercel.app/api/v1/me" \
-H "Authorization: Bearer $SHANEV_KEY"Coba di PlaygroundContoh kode
curl: buat snippet
curl -X POST "https://shanev-gist.vercel.app/api/v1/snippets" \
-H "Authorization: Bearer $SHANEV_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Fungsi penjumlahan",
"description": "Contoh sederhana",
"tags": ["javascript", "dasar"],
"files": [
{ "filename": "tambah.js", "lang": "javascript", "code": "export const tambah = (a, b) => a + b;" }
]
}'curl: cari dan hapus
curl "https://shanev-gist.vercel.app/api/v1/snippets?q=react&urut=populer&limit=10"
curl -X DELETE "https://shanev-gist.vercel.app/api/v1/snippets/shan/fungsi-penjumlahan" \
-H "Authorization: Bearer $SHANEV_KEY"JavaScript (fetch)
const res = await fetch("https://shanev-gist.vercel.app/api/v1/snippets", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SHANEV_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Halo dari Node",
files: [{ filename: "halo.txt", code: "halo" }],
}),
});
const snippet = await res.json();
console.log(snippet.url);Python (requests)
import os, requests
res = requests.post(
"https://shanev-gist.vercel.app/api/v1/snippets",
headers={"Authorization": f"Bearer {os.environ['SHANEV_KEY']}"},
json={
"title": "Halo dari Python",
"files": [{"filename": "halo.py", "lang": "python", "code": "print('halo')"}],
},
timeout=10,
)
res.raise_for_status()
print(res.json()["url"])Playground
Coba endpoint langsung dari sini. Untuk endpoint yang butuh kunci, isi kunci di kolom yang tersedia.
Kunci hanya dipakai di browser ini untuk request ini dan tidak disimpan.