AnonShot

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

  1. Buat token di pengaturan akun Anda.
  2. Kirim file ke POST /api/v1/photos dengan token tersebut.
  3. Simpan shortUrl, atau cukup URL siap pakai yang dikembalikan dalam respons.
  4. Berikan publicImageUrl ke LLM jika gambar bersifat publik, atau unduh fileUrl dengan 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_TOKEN
  • photos:write mengizinkan unggah, edit, dan hapus.
  • photos:read mengizinkan 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
  }]
}
NilaiDigunakan untukAkses
shareUrlMembuka halaman AnonShot dengan antarmukanyaPublik
publicImageUrlLLM, <img>, unduhan langsungPublik, tanpa HTML
fileUrlMengunduh gambar yang sama tanpa membukanya ke publikBearer + 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.webp

Header X-AnonShot-Photo-Id berisi ID operasi. JPEG, PNG, dan WebP diterima di rute ini.

Semua rute

RuteFungsi
GET /api/v1Penemuan API, tanpa autentikasi
GET · POST /api/v1/photosDaftar foto atau unggah hingga 20 gambar
GET · PATCH · DELETE /api/v1/photos/{code}Baca, edit, atau hapus berbagi
GET /api/v1/photos/{code}/fileDapatkan WebP yang sudah dibersihkan dengan token
GET /p/{code}/imageSajikan gambar publik secara langsung, tanpa halaman HTML
POST /api/v1/exif/cleanBersihkan gambar dan dapatkan WebP-nya
POST /api/v1/uploads/presignSiapkan unggahan langsung ke penyimpanan
GET · POST /api/v1/albumsDaftar atau buat album
GET · PATCH · DELETE /api/v1/albums/{code}Baca, edit, atau hapus album
POST · DELETE /api/v1/albums/{code}/photosTambah 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.

Buat atau cabut token API