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
- Maak een token aan in je accountinstellingen.
- Stuur het bestand met dat token naar
POST /api/v1/photos. - Bewaar de
shortUrlof, eenvoudiger, de kant-en-klare URL's uit het antwoord. - Geef
publicImageUrlaan het LLM als de afbeelding openbaar is, of downloadfileUrlmet 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_TOKENphotos:writestaat uploaden, bewerken en verwijderen toe.photos:readstaat 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
}]
}| Waarde | Gebruiken voor | Toegang |
|---|---|---|
| shareUrl | De AnonShot-pagina met interface openen | Openbaar |
| publicImageUrl | LLM, <img>, directe download | Openbaar, zonder HTML |
| fileUrl | Dezelfde afbeelding downloaden zonder haar openbaar te maken | Bearer + 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.webpDe header X-AnonShot-Photo-Id bevat de ID van de bewerking. Op deze route worden JPEG, PNG en WebP geaccepteerd.
Alle routes
| Route | Functie |
|---|---|
| GET /api/v1 | API-overzicht, zonder authenticatie |
| GET · POST /api/v1/photos | Foto'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}/file | De opgeschoonde WebP met een token ophalen |
| GET /p/{code}/image | Een openbare afbeelding direct tonen, zonder HTML-pagina |
| POST /api/v1/exif/clean | Een afbeelding opschonen en de WebP terugkrijgen |
| POST /api/v1/uploads/presign | Een directe upload naar de opslag voorbereiden |
| GET · POST /api/v1/albums | Albums oplijsten of maken |
| GET · PATCH · DELETE /api/v1/albums/{code} | Een album lezen, wijzigen of verwijderen |
| POST · DELETE /api/v1/albums/{code}/photos | Foto'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.