API REST v1
AnonShot-Bilder in deine Anwendung einbinden
Lade ein Bild von deinem Server hoch, erhalte seinen Code und nutze eine direkte URL in einem LLM, einem Bild-Tag oder einem anderen HTTP-Client. Jede Datei wird korrekt ausgerichtet, von EXIF-Metadaten befreit und als WebP ausgeliefert.
Das Prinzip in 30 Sekunden
- Erstelle ein Token in deinen Kontoeinstellungen.
- Schick die Datei mit diesem Token an
POST /api/v1/photos. - Speichere
shortUrloder einfacher die fertigen URLs aus der Antwort. - Gib
publicImageUrlan das LLM, wenn das Bild öffentlich ist, oder ladefileUrlmit dem Token herunter, wenn es privat bleiben soll.
1. Token erstellen und schützen
Das vollständige Token wird nur einmal angezeigt. Leg es in einer Umgebungsvariablen deines Backends ab, nie in Git, in einer URL, in JavaScript für den Browser oder in einer verteilten Mobile-App.
ANONSHOT_TOKEN=anon_live_…Authorization: Bearer $ANONSHOT_TOKENphotos:writeerlaubt Upload, Bearbeiten und Löschen.photos:readerlaubt Liste, Details und authentifizierten Download.- Standardkontingente: 60 Anfragen pro Minute und 10.000 Anfragen pro Monat.
- Tokens lassen sich widerrufen und können ein Ablaufdatum haben.
2. Ein Foto hochladen
Schick ein multipart/form-data-Formular. Das Feld files darf mehrfach vorkommen: JPEG, PNG, WebP und GIF werden akzeptiert, bis 50 MB pro Datei und 20 Dateien pro Anfrage.
curl-Beispiel
curl -X POST https://anonshot.com/api/v1/photos \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
-F "files=@photo.jpg"Optionen: -F "password=ein-eigenes-geheimnis" schützt die Seite, -F "burnAfterRead=true" erzeugt ein Bild zur einmaligen Ansicht. Nutze diese Optionen nicht, wenn ein externer Dienst die öffentliche URL frei lesen muss.
JavaScript-Beispiel auf dem 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 fehlgeschlagen")
const photo = payload.data[0]
console.log(photo.shortUrl, photo.publicImageUrl)Setze den Header Content-Type nicht selbst: FormData fügt automatisch die richtige Multipart-Boundary hinzu.
3. Die Antwort und ihre drei URLs
{
"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
}]
}| Wert | Verwenden für | Zugriff |
|---|---|---|
| shareUrl | Die AnonShot-Seite mit ihrer Oberfläche öffnen | Öffentlich |
| publicImageUrl | LLM, <img>, direkter Download | Öffentlich, ohne HTML |
| fileUrl | Dasselbe Bild herunterladen, ohne es öffentlich zu machen | Bearer + photos:read |
Die direkte Adresse ist immer /p/{code}/image. Sie liefert die Bildbytes als WebP in der verarbeiteten Größe, keine HTML-Seite. Fotos, die mit einem Konto-Token erstellt wurden, laufen nicht ab – außer sie werden gelöscht oder als Einmal-Freigabe geöffnet. Ein passwortgeschütztes Foto eignet sich nicht für ein LLM ohne Entsperr-Cookie.
4. Das Bild an ein LLM übergeben
Akzeptiert der Anbieter eine Bild-URL, übergib direkt photo.publicImageUrl. Soll das Bild nicht öffentlich sein, hol die Bytes serverseitig über fileUrl und schick sie gemäß seiner API an den Anbieter.
const imageResponse = await fetch(photo.fileUrl, {
headers: { Authorization: `Bearer ${process.env.ANONSHOT_TOKEN}` },
})
if (!imageResponse.ok) throw new Error("Bild nicht erreichbar")
const imageBytes = await imageResponse.arrayBuffer()
// Danach imageBytes an das LLM-SDK übergeben.Gib das AnonShot-Token nie an das LLM weiter und hänge es nie als Query-Parameter an. Das Token dient nur zwischen deinem Backend und anonshot.com.
5. Lesen, auflisten und löschen
# Deine Fotos auflisten
curl https://anonshot.com/api/v1/photos \
-H "Authorization: Bearer $ANONSHOT_TOKEN"
# Details eines Fotos lesen
curl https://anonshot.com/api/v1/photos/Ab3dE7xK \
-H "Authorization: Bearer $ANONSHOT_TOKEN"
# Das bereinigte WebP herunterladen
curl https://anonshot.com/api/v1/photos/Ab3dE7xK/file \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
--output Ab3dE7xK.webp
# Die Freigabe endgültig löschen
curl -X DELETE https://anonshot.com/api/v1/photos/Ab3dE7xK \
-H "Authorization: Bearer $ANONSHOT_TOKEN"Nur EXIF-Metadaten entfernen
Diese Route nimmt ein Bild entgegen und liefert direkt ein bereinigtes WebP zurück, ohne einen Freigabelink zu erstellen.
curl -X POST https://anonshot.com/api/v1/exif/clean \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
-F "files=@photo.jpg" \
--output foto-ohne-metadaten.webpDer Header X-AnonShot-Photo-Id enthält die ID des Vorgangs. Auf dieser Route werden JPEG, PNG und WebP akzeptiert.
Alle Routen
| Route | Funktion |
|---|---|
| GET /api/v1 | API-Übersicht, ohne Authentifizierung |
| GET · POST /api/v1/photos | Fotos auflisten oder bis zu 20 Bilder hochladen |
| GET · PATCH · DELETE /api/v1/photos/{code} | Freigabe lesen, ändern oder löschen |
| GET /api/v1/photos/{code}/file | Bereinigtes WebP mit Token abrufen |
| GET /p/{code}/image | Öffentliches Bild direkt ausliefern, ohne HTML-Seite |
| POST /api/v1/exif/clean | Bild bereinigen und WebP erhalten |
| POST /api/v1/uploads/presign | Direkten Upload in den Speicher vorbereiten |
| GET · POST /api/v1/albums | Alben auflisten oder erstellen |
| GET · PATCH · DELETE /api/v1/albums/{code} | Album lesen, ändern oder löschen |
| POST · DELETE /api/v1/albums/{code}/photos | Fotos hinzufügen oder entfernen |
Antworten, Fehler und Kontingente
Erfolgreiche JSON-Antworten nutzen {"data": …}. Fehler nutzen {"error":{"code":"…","message":"…"}}. Behandle vor allem 400 (Anfrage oder Bild), 401 (Token), 403 (Scope) und 429 (Kontingent). Die Header X-RateLimit-Remaining und X-Monthly-Remaining zeigen die verbleibenden Kontingente.