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
- Crea un token nelle impostazioni dell'account.
- Invia il file a
POST /api/v1/photoscon quel token. - Conserva
shortUrlo, più semplicemente, gli URL già pronti nella risposta. - Passa
publicImageUrlall'LLM se l'immagine è pubblica, oppure scaricafileUrlcon 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_TOKENphotos:writeconsente upload, modifica ed eliminazione.photos:readconsente 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
}]
}| Valore | Da usare per | Accesso |
|---|---|---|
| shareUrl | Aprire la pagina AnonShot con la sua interfaccia | Pubblico |
| publicImageUrl | LLM, <img>, download diretto | Pubblico, senza HTML |
| fileUrl | Scaricare la stessa immagine senza esporla pubblicamente | Bearer + 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.webpL'intestazione X-AnonShot-Photo-Id contiene l'identificativo dell'operazione. Su questa rotta sono accettati JPEG, PNG e WebP.
Tutte le rotte
| Rotta | Funzione |
|---|---|
| GET /api/v1 | Scoperta dell'API, senza autenticazione |
| GET · POST /api/v1/photos | Elencare o caricare fino a 20 immagini |
| GET · PATCH · DELETE /api/v1/photos/{code} | Leggere, modificare o eliminare una condivisione |
| GET /api/v1/photos/{code}/file | Ricevere il WebP ripulito con un token |
| GET /p/{code}/image | Mostrare direttamente un'immagine pubblica, senza pagina HTML |
| POST /api/v1/exif/clean | Ripulire un'immagine e ricevere il WebP |
| POST /api/v1/uploads/presign | Preparare un upload diretto verso lo storage |
| GET · POST /api/v1/albums | Elencare o creare album |
| GET · PATCH · DELETE /api/v1/albums/{code} | Leggere, modificare o eliminare un album |
| POST · DELETE /api/v1/albums/{code}/photos | Aggiungere 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.