AnonShot

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

  1. Erstelle ein Token in deinen Kontoeinstellungen.
  2. Schick die Datei mit diesem Token an POST /api/v1/photos.
  3. Speichere shortUrl oder einfacher die fertigen URLs aus der Antwort.
  4. Gib publicImageUrl an das LLM, wenn das Bild öffentlich ist, oder lade fileUrl mit 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_TOKEN
  • photos:write erlaubt Upload, Bearbeiten und Löschen.
  • photos:read erlaubt 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
  }]
}
WertVerwenden fürZugriff
shareUrlDie AnonShot-Seite mit ihrer Oberfläche öffnenÖffentlich
publicImageUrlLLM, <img>, direkter DownloadÖffentlich, ohne HTML
fileUrlDasselbe Bild herunterladen, ohne es öffentlich zu machenBearer + 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.webp

Der Header X-AnonShot-Photo-Id enthält die ID des Vorgangs. Auf dieser Route werden JPEG, PNG und WebP akzeptiert.

Alle Routen

RouteFunktion
GET /api/v1API-Übersicht, ohne Authentifizierung
GET · POST /api/v1/photosFotos 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}/fileBereinigtes WebP mit Token abrufen
GET /p/{code}/imageÖffentliches Bild direkt ausliefern, ohne HTML-Seite
POST /api/v1/exif/cleanBild bereinigen und WebP erhalten
POST /api/v1/uploads/presignDirekten Upload in den Speicher vorbereiten
GET · POST /api/v1/albumsAlben auflisten oder erstellen
GET · PATCH · DELETE /api/v1/albums/{code}Album lesen, ändern oder löschen
POST · DELETE /api/v1/albums/{code}/photosFotos 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.

API-Token erstellen oder widerrufen
API für Bild-Hosting und EXIF-Entfernung — AnonShot