AnonShot

API REST v1

AnonShot-afbeeldingen in je applicatie gebruiken

Upload een afbeelding vanaf je server, krijg de code terug en gebruik een directe URL in een LLM, een afbeeldingstag of een andere HTTP-client. Elk bestand wordt rechtgezet, ontdaan van EXIF-metadata en als WebP geleverd.

Het principe in 30 seconden

  1. Maak een token aan in je accountinstellingen.
  2. Stuur het bestand met dat token naar POST /api/v1/photos.
  3. Bewaar de shortUrl of, eenvoudiger, de kant-en-klare URL's uit het antwoord.
  4. Geef publicImageUrl aan het LLM als de afbeelding openbaar is, of download fileUrl met het token als ze privé moet blijven.

1. Het token maken en beschermen

Het volledige token wordt maar één keer getoond. Zet het in een omgevingsvariabele van je backend, nooit in Git, een URL, JavaScript voor de browser of een verspreide mobiele app.

ANONSHOT_TOKEN=anon_live_…
Authorization: Bearer $ANONSHOT_TOKEN
  • photos:write staat uploaden, bewerken en verwijderen toe.
  • photos:read staat lijsten, details en geauthenticeerd downloaden toe.
  • De standaardquota zijn 60 verzoeken per minuut en 10.000 per maand.
  • Tokens zijn in te trekken en kunnen een vervaldatum hebben.

2. Een foto uploaden

Stuur een multipart/form-data-formulier. Het veld files mag herhaald worden: JPEG, PNG, WebP en GIF worden geaccepteerd, tot 50 MB per bestand en 20 bestanden per verzoek.

Voorbeeld met curl

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

Opties: voeg -F "password=een-apart-geheim" toe om de pagina te beschermen, of -F "burnAfterRead=true" voor een eenmalige afbeelding. Gebruik deze opties niet als een externe dienst de openbare URL vrij moet kunnen lezen.

JavaScript-voorbeeld aan de serverkant

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 mislukt")

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

Stel de header Content-Type niet zelf in: FormData voegt automatisch de juiste multipart-boundary toe.

3. Het antwoord en de drie URL's

{
  "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
  }]
}
WaardeGebruiken voorToegang
shareUrlDe AnonShot-pagina met interface openenOpenbaar
publicImageUrlLLM, <img>, directe downloadOpenbaar, zonder HTML
fileUrlDezelfde afbeelding downloaden zonder haar openbaar te makenBearer + photos:read

Het directe adres is altijd /p/{code}/image. Het geeft de bytes van de afbeelding als WebP terug in het verwerkte formaat, geen HTML-pagina. Foto's die met een accounttoken zijn gemaakt verlopen niet, tenzij ze worden verwijderd of als eenmalige deelactie geopend. Een foto met wachtwoord werkt niet voor een LLM zonder ontgrendelcookie.

4. De afbeelding aan een LLM koppelen

Accepteert de aanbieder een afbeeldings-URL, geef dan direct photo.publicImageUrl door. Mag de afbeelding niet openbaar zijn, haal dan de bytes op via fileUrl op je server en stuur die volgens de API van de aanbieder door.

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

if (!imageResponse.ok) throw new Error("Afbeelding niet bereikbaar")
const imageBytes = await imageResponse.arrayBuffer()
// Geef imageBytes daarna door aan de LLM-SDK.

Geef het AnonShot-token nooit aan het LLM en voeg het nooit toe als queryparameter. Het token wordt alleen gebruikt tussen je backend en anonshot.com.

5. Lezen, oplijsten en verwijderen

# Je foto's oplijsten
curl https://anonshot.com/api/v1/photos \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

# Gegevens van een foto lezen
curl https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

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

# De deelactie definitief verwijderen
curl -X DELETE https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

Alleen EXIF-metadata verwijderen

Deze route neemt een afbeelding aan en geeft direct een opgeschoonde WebP terug, zonder deellink te maken.

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

De header X-AnonShot-Photo-Id bevat de ID van de bewerking. Op deze route worden JPEG, PNG en WebP geaccepteerd.

Alle routes

RouteFunctie
GET /api/v1API-overzicht, zonder authenticatie
GET · POST /api/v1/photosFoto's oplijsten of tot 20 afbeeldingen uploaden
GET · PATCH · DELETE /api/v1/photos/{code}Een deelactie lezen, wijzigen of verwijderen
GET /api/v1/photos/{code}/fileDe opgeschoonde WebP met een token ophalen
GET /p/{code}/imageEen openbare afbeelding direct tonen, zonder HTML-pagina
POST /api/v1/exif/cleanEen afbeelding opschonen en de WebP terugkrijgen
POST /api/v1/uploads/presignEen directe upload naar de opslag voorbereiden
GET · POST /api/v1/albumsAlbums oplijsten of maken
GET · PATCH · DELETE /api/v1/albums/{code}Een album lezen, wijzigen of verwijderen
POST · DELETE /api/v1/albums/{code}/photosFoto's toevoegen of verwijderen

Antwoorden, fouten en quota

Geslaagde JSON-antwoorden gebruiken {"data": …}. Fouten gebruiken {"error":{"code":"…","message":"…"}}. Vang vooral 400 (verzoek of afbeelding), 401 (token), 403 (scope) en 429 (quotum) af. De headers X-RateLimit-Remaining en X-Monthly-Remaining tonen de resterende quota.

Een API-token maken of intrekken
API voor afbeeldingshosting en EXIF-verwijdering — AnonShot