API REST v1
Gunakan gambar AnonShot di aplikasi Anda
Unggah gambar dari server Anda, dapatkan kodenya, dan gunakan URL langsung di LLM, tag gambar, atau klien HTTP apa pun. Setiap file diperbaiki orientasinya, dibersihkan dari metadata EXIF, dan disajikan sebagai WebP.
Cara kerjanya dalam 30 detik
- Buat token di pengaturan akun Anda.
- Kirim file ke
POST /api/v1/photosdengan token tersebut. - Simpan
shortUrl, atau cukup URL siap pakai yang dikembalikan dalam respons. - Berikan
publicImageUrlke LLM jika gambar bersifat publik, atau unduhfileUrldengan token jika harus tetap privat.
1. Buat dan lindungi token
Token lengkap hanya ditampilkan sekali. Simpan di variabel lingkungan pada backend Anda, jangan pernah di Git, URL, JavaScript yang dikirim ke browser, atau aplikasi seluler yang didistribusikan.
ANONSHOT_TOKEN=anon_live_…Authorization: Bearer $ANONSHOT_TOKENphotos:writemengizinkan unggah, edit, dan hapus.photos:readmengizinkan daftar, detail, dan unduhan terautentikasi.- Kuota default adalah 60 permintaan per menit dan 10.000 permintaan per bulan.
- Token dapat dicabut dan dapat memiliki tanggal kedaluwarsa.
2. Unggah foto
Kirim formulir multipart/form-data. Kolom files bisa diulang: JPEG, PNG, WebP, dan GIF diterima, hingga 50 MB per file dan 20 file per permintaan.
Contoh curl
curl -X POST https://anonshot.com/api/v1/photos \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
-F "files=@photo.jpg"Opsi: tambahkan -F "password=rahasia-terpisah" untuk melindungi halaman, atau -F "burnAfterRead=true" untuk gambar sekali lihat. Jangan gunakan opsi ini jika layanan eksternal perlu membaca URL publik secara bebas.
Contoh JavaScript sisi server
import { readFile } from "node:fs/promises"
const bytes = await readFile("photo.jpg")
const form = new FormData()
form.append("files", new Blob([bytes], { type: "image/jpeg" }), "photo.jpg")
const response = await fetch("https://anonshot.com/api/v1/photos", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ANONSHOT_TOKEN}`,
},
body: form,
})
const payload = await response.json()
if (!response.ok) throw new Error(payload.error?.message ?? "Unggahan gagal")
const photo = payload.data[0]
console.log(photo.shortUrl, photo.publicImageUrl)Jangan atur header Content-Type sendiri: FormData menambahkan boundary multipart yang benar secara otomatis.
3. Respons dan tiga URL-nya
{
"data": [{
"id": "…",
"shortUrl": "Ab3dE7xK",
"shareUrl": "https://anonshot.com/p/Ab3dE7xK",
"publicImageUrl": "https://anonshot.com/p/Ab3dE7xK/image",
"fileUrl": "https://anonshot.com/api/v1/photos/Ab3dE7xK/file",
"mime": "image/webp",
"size": 183421,
"width": 2048,
"height": 1365,
"burnAfterRead": false,
"passwordProtected": false
}]
}| Nilai | Digunakan untuk | Akses |
|---|---|---|
| shareUrl | Membuka halaman AnonShot dengan antarmukanya | Publik |
| publicImageUrl | LLM, <img>, unduhan langsung | Publik, tanpa HTML |
| fileUrl | Mengunduh gambar yang sama tanpa membukanya ke publik | Bearer + photos:read |
Alamat langsung selalu /p/{code}/image. Alamat ini mengembalikan byte gambar dalam format WebP pada ukuran hasil pemrosesan, bukan halaman HTML. Foto yang dibuat dengan token akun tidak kedaluwarsa, kecuali dihapus atau dibuka sekali sebagai berbagi sekali lihat. Foto yang dilindungi kata sandi tidak akan berfungsi untuk LLM yang tidak memiliki cookie pembuka kunci.
4. Berikan gambar ke LLM
Jika penyedia menerima URL gambar, berikan photo.publicImageUrl secara langsung. Jika gambar tidak boleh publik, ambil byte-nya dari fileUrl di server Anda, lalu kirim byte tersebut ke penyedia sesuai API-nya.
const imageResponse = await fetch(photo.fileUrl, {
headers: { Authorization: `Bearer ${process.env.ANONSHOT_TOKEN}` },
})
if (!imageResponse.ok) throw new Error("Gambar tidak dapat dijangkau")
const imageBytes = await imageResponse.arrayBuffer()
// Lalu berikan imageBytes ke SDK LLM.Jangan pernah memberikan token AnonShot ke LLM dan jangan pernah menambahkannya sebagai parameter kueri. Token hanya digunakan antara backend Anda dan anonshot.com.
5. Baca, daftar, dan hapus
# Daftar foto Anda
curl https://anonshot.com/api/v1/photos \
-H "Authorization: Bearer $ANONSHOT_TOKEN"
# Baca detail foto
curl https://anonshot.com/api/v1/photos/Ab3dE7xK \
-H "Authorization: Bearer $ANONSHOT_TOKEN"
# Unduh WebP yang sudah dibersihkan
curl https://anonshot.com/api/v1/photos/Ab3dE7xK/file \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
--output Ab3dE7xK.webp
# Hapus berbagi secara permanen
curl -X DELETE https://anonshot.com/api/v1/photos/Ab3dE7xK \
-H "Authorization: Bearer $ANONSHOT_TOKEN"Hanya hapus metadata EXIF
Rute ini menerima gambar dan langsung mengembalikan WebP yang sudah dibersihkan, tanpa membuat tautan berbagi.
curl -X POST https://anonshot.com/api/v1/exif/clean \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
-F "files=@photo.jpg" \
--output foto-tanpa-metadata.webpHeader X-AnonShot-Photo-Id berisi ID operasi. JPEG, PNG, dan WebP diterima di rute ini.
Semua rute
| Rute | Fungsi |
|---|---|
| GET /api/v1 | Penemuan API, tanpa autentikasi |
| GET · POST /api/v1/photos | Daftar foto atau unggah hingga 20 gambar |
| GET · PATCH · DELETE /api/v1/photos/{code} | Baca, edit, atau hapus berbagi |
| GET /api/v1/photos/{code}/file | Dapatkan WebP yang sudah dibersihkan dengan token |
| GET /p/{code}/image | Sajikan gambar publik secara langsung, tanpa halaman HTML |
| POST /api/v1/exif/clean | Bersihkan gambar dan dapatkan WebP-nya |
| POST /api/v1/uploads/presign | Siapkan unggahan langsung ke penyimpanan |
| GET · POST /api/v1/albums | Daftar atau buat album |
| GET · PATCH · DELETE /api/v1/albums/{code} | Baca, edit, atau hapus album |
| POST · DELETE /api/v1/albums/{code}/photos | Tambah atau hapus foto |
Respons, error, dan kuota
Respons JSON yang berhasil menggunakan {"data": …}. Error menggunakan {"error":{"code":"…","message":"…"}}. Tangani terutama 400 (permintaan atau gambar), 401 (token), 403 (cakupan), dan 429 (kuota). Header X-RateLimit-Remaining dan X-Monthly-Remaining menunjukkan sisa kuota.