AnonShot

API REST v1

Integra le immagini AnonShot nella tua applicazione

Carica un'immagine dal tuo server, ricevi il suo codice e usa un URL diretto in un LLM, in un tag immagine o in un altro client HTTP. Ogni file viene riorientato, ripulito dai metadati EXIF e servito in WebP.

Come funziona in 30 secondi

  1. Crea un token nelle impostazioni dell'account.
  2. Invia il file a POST /api/v1/photos con quel token.
  3. Conserva shortUrl o, più semplicemente, gli URL già pronti nella risposta.
  4. Passa publicImageUrl all'LLM se l'immagine è pubblica, oppure scarica fileUrl con il token se deve restare privata.

1. Creare e proteggere il token

Il token completo viene mostrato una sola volta. Mettilo in una variabile d'ambiente del tuo backend, mai in Git, in un URL, in JavaScript inviato al browser o in un'app mobile distribuita.

ANONSHOT_TOKEN=anon_live_…
Authorization: Bearer $ANONSHOT_TOKEN
  • photos:write consente upload, modifica ed eliminazione.
  • photos:read consente elenco, dettagli e download autenticato.
  • Le quote predefinite sono 60 richieste al minuto e 10.000 al mese.
  • I token si possono revocare e possono avere una data di scadenza.

2. Caricare una foto

Invia un modulo multipart/form-data. Il campo files è ripetibile: sono accettati JPEG, PNG, WebP e GIF, fino a 50 MB per file e 20 file per richiesta.

Esempio con curl

curl -X POST https://anonshot.com/api/v1/photos \
  -H "Authorization: Bearer $ANONSHOT_TOKEN" \
  -F "files=@photo.jpg"

Opzioni: aggiungi -F "password=un-segreto-diverso" per proteggere la pagina, oppure -F "burnAfterRead=true" per un'immagine a visione singola. Non usare queste opzioni se un servizio esterno deve poter leggere liberamente l'URL pubblico.

Esempio JavaScript lato 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 ?? "Upload non riuscito")

const photo = payload.data[0]
console.log(photo.shortUrl, photo.publicImageUrl)

Non impostare tu l'intestazione Content-Type: FormData aggiunge automaticamente il boundary multipart corretto.

3. La risposta e i suoi tre URL

{
  "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
  }]
}
ValoreDa usare perAccesso
shareUrlAprire la pagina AnonShot con la sua interfacciaPubblico
publicImageUrlLLM, <img>, download direttoPubblico, senza HTML
fileUrlScaricare la stessa immagine senza esporla pubblicamenteBearer + photos:read

L'indirizzo diretto è sempre /p/{code}/image. Restituisce i byte dell'immagine in WebP, già elaborata, e non una pagina HTML. Le foto create con un token di account non scadono, salvo eliminazione o apertura di una condivisione a visione singola. Una foto protetta da password non va bene per un LLM che non ha il cookie di sblocco.

4. Collegare l'immagine a un LLM

Se il fornitore accetta un URL di immagine, passagli direttamente photo.publicImageUrl. Se l'immagine non deve essere pubblica, recupera invece i byte da fileUrl lato server e inviali al fornitore secondo la sua API.

const imageResponse = await fetch(photo.fileUrl, {
  headers: { Authorization: `Bearer ${process.env.ANONSHOT_TOKEN}` },
})

if (!imageResponse.ok) throw new Error("Immagine non raggiungibile")
const imageBytes = await imageResponse.arrayBuffer()
// Poi passa imageBytes all'SDK dell'LLM.

Non passare mai il token AnonShot all'LLM e non aggiungerlo mai come parametro dell'URL. Il token serve solo tra il tuo backend e anonshot.com.

5. Leggere, elencare ed eliminare

# Elencare le tue foto
curl https://anonshot.com/api/v1/photos \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

# Leggere i dettagli di una foto
curl https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

# Scaricarne il WebP ripulito
curl https://anonshot.com/api/v1/photos/Ab3dE7xK/file \
  -H "Authorization: Bearer $ANONSHOT_TOKEN" \
  --output Ab3dE7xK.webp

# Eliminare definitivamente la condivisione
curl -X DELETE https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

Ripulire solo i metadati EXIF

Questa rotta riceve un'immagine e restituisce direttamente un WebP ripulito, senza creare un link di condivisione.

curl -X POST https://anonshot.com/api/v1/exif/clean \
  -H "Authorization: Bearer $ANONSHOT_TOKEN" \
  -F "files=@photo.jpg" \
  --output foto-senza-metadati.webp

L'intestazione X-AnonShot-Photo-Id contiene l'identificativo dell'operazione. Su questa rotta sono accettati JPEG, PNG e WebP.

Tutte le rotte

RottaFunzione
GET /api/v1Scoperta dell'API, senza autenticazione
GET · POST /api/v1/photosElencare o caricare fino a 20 immagini
GET · PATCH · DELETE /api/v1/photos/{code}Leggere, modificare o eliminare una condivisione
GET /api/v1/photos/{code}/fileRicevere il WebP ripulito con un token
GET /p/{code}/imageMostrare direttamente un'immagine pubblica, senza pagina HTML
POST /api/v1/exif/cleanRipulire un'immagine e ricevere il WebP
POST /api/v1/uploads/presignPreparare un upload diretto verso lo storage
GET · POST /api/v1/albumsElencare o creare album
GET · PATCH · DELETE /api/v1/albums/{code}Leggere, modificare o eliminare un album
POST · DELETE /api/v1/albums/{code}/photosAggiungere o togliere foto

Risposte, errori e quote

Le risposte JSON riuscite usano {"data": …}. Gli errori usano {"error":{"code":"…","message":"…"}}. Gestisci in particolare 400 (richiesta o immagine), 401 (token), 403 (scope) e 429 (quota). Le intestazioni X-RateLimit-Remaining e X-Monthly-Remaining indicano le quote rimanenti.

Crea o revoca un token API
API per hosting di immagini e rimozione EXIF — AnonShot