API REST v1
Używaj zdjęć AnonShot w swojej aplikacji
Prześlij obraz ze swojego serwera, odbierz jego kod i użyj bezpośredniego URL w LLM, tagu obrazka lub dowolnym kliencie HTTP. Każdy plik jest obracany do właściwej orientacji, oczyszczany z metadanych EXIF i serwowany jako WebP.
Zasada działania w 30 sekund
- Utwórz token w ustawieniach konta.
- Wyślij plik na
POST /api/v1/photosz tym tokenem. - Zachowaj
shortUrlalbo, prościej, gotowe adresy URL z odpowiedzi. - Przekaż
publicImageUrldo LLM, jeśli obraz jest publiczny, albo pobierzfileUrlz tokenem, jeśli ma pozostać prywatny.
1. Utwórz i chroń token
Pełny token jest pokazywany tylko raz. Trzymaj go w zmiennej środowiskowej backendu, nigdy w Gicie, w URL, w JavaScripcie wysyłanym do przeglądarki ani w rozpowszechnianej aplikacji mobilnej.
ANONSHOT_TOKEN=anon_live_…Authorization: Bearer $ANONSHOT_TOKENphotos:writepozwala przesyłać, edytować i usuwać.photos:readpozwala listować, pobierać szczegóły i pliki z uwierzytelnieniem.- Domyślne limity to 60 żądań na minutę i 10 000 żądań na miesiąc.
- Tokeny można unieważnić i mogą mieć datę wygaśnięcia.
2. Prześlij zdjęcie
Wyślij formularz multipart/form-data. Pole files może się powtarzać: akceptowane są JPEG, PNG, WebP i GIF, do 50 MB na plik i 20 plików na żądanie.
Przykład z curl
curl -X POST https://anonshot.com/api/v1/photos \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
-F "files=@photo.jpg"Opcje: dodaj -F "password=osobny-sekret", aby chronić stronę, lub -F "burnAfterRead=true" dla obrazu do jednorazowego wyświetlenia. Nie używaj tych opcji, jeśli zewnętrzna usługa ma swobodnie odczytywać publiczny URL.
Przykład w JavaScripcie po stronie serwera
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 ?? "Przesyłanie nie powiodło się")
const photo = payload.data[0]
console.log(photo.shortUrl, photo.publicImageUrl)Nie ustawiaj samodzielnie nagłówka Content-Type: FormData automatycznie dodaje właściwy boundary multipart.
3. Odpowiedź i jej trzy adresy 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
}]
}| Wartość | Do czego | Dostęp |
|---|---|---|
| shareUrl | Otwarcie strony AnonShot z interfejsem | Publiczny |
| publicImageUrl | LLM, <img>, bezpośrednie pobieranie | Publiczny, bez HTML |
| fileUrl | Pobranie tego samego obrazu bez publicznego udostępniania | Bearer + photos:read |
Adres bezpośredni to zawsze /p/{code}/image. Zwraca bajty obrazu w WebP po przetworzeniu, a nie stronę HTML. Zdjęcia utworzone tokenem konta nie wygasają, chyba że zostaną usunięte lub otwarte jako jednorazowe udostępnienie. Zdjęcie chronione hasłem nie nadaje się dla LLM bez ciasteczka odblokowania.
4. Przekaż obraz do LLM
Jeśli dostawca przyjmuje URL obrazu, przekaż mu bezpośrednio photo.publicImageUrl. Jeśli obraz nie może być publiczny, pobierz bajty z fileUrl na serwerze i wyślij je do dostawcy zgodnie z jego API.
const imageResponse = await fetch(photo.fileUrl, {
headers: { Authorization: `Bearer ${process.env.ANONSHOT_TOKEN}` },
})
if (!imageResponse.ok) throw new Error("Obraz niedostępny")
const imageBytes = await imageResponse.arrayBuffer()
// Następnie przekaż imageBytes do SDK modelu LLM.Nigdy nie przekazuj tokenu AnonShot do LLM ani nie dodawaj go jako parametru zapytania. Token służy wyłącznie między twoim backendem a anonshot.com.
5. Odczyt, lista i usuwanie
# Lista twoich zdjęć
curl https://anonshot.com/api/v1/photos \
-H "Authorization: Bearer $ANONSHOT_TOKEN"
# Szczegóły zdjęcia
curl https://anonshot.com/api/v1/photos/Ab3dE7xK \
-H "Authorization: Bearer $ANONSHOT_TOKEN"
# Pobranie oczyszczonego WebP
curl https://anonshot.com/api/v1/photos/Ab3dE7xK/file \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
--output Ab3dE7xK.webp
# Trwałe usunięcie udostępnienia
curl -X DELETE https://anonshot.com/api/v1/photos/Ab3dE7xK \
-H "Authorization: Bearer $ANONSHOT_TOKEN"Usuń tylko metadane EXIF
Ta trasa przyjmuje obraz i od razu zwraca oczyszczony WebP, bez tworzenia linku do udostępnienia.
curl -X POST https://anonshot.com/api/v1/exif/clean \
-H "Authorization: Bearer $ANONSHOT_TOKEN" \
-F "files=@photo.jpg" \
--output zdjecie-bez-metadanych.webpNagłówek X-AnonShot-Photo-Id zawiera identyfikator operacji. Na tej trasie akceptowane są JPEG, PNG i WebP.
Wszystkie trasy
| Trasa | Funkcja |
|---|---|
| GET /api/v1 | Opis API, bez uwierzytelnienia |
| GET · POST /api/v1/photos | Lista zdjęć lub przesłanie do 20 obrazów |
| GET · PATCH · DELETE /api/v1/photos/{code} | Odczyt, zmiana lub usunięcie udostępnienia |
| GET /api/v1/photos/{code}/file | Pobranie oczyszczonego WebP z tokenem |
| GET /p/{code}/image | Bezpośrednie wyświetlenie publicznego obrazu, bez strony HTML |
| POST /api/v1/exif/clean | Oczyszczenie obrazu i odbiór WebP |
| POST /api/v1/uploads/presign | Przygotowanie bezpośredniego przesyłania do magazynu |
| GET · POST /api/v1/albums | Lista lub tworzenie albumów |
| GET · PATCH · DELETE /api/v1/albums/{code} | Odczyt, zmiana lub usunięcie albumu |
| POST · DELETE /api/v1/albums/{code}/photos | Dodawanie lub usuwanie zdjęć |
Odpowiedzi, błędy i limity
Udane odpowiedzi JSON mają postać {"data": …}. Błędy mają postać {"error":{"code":"…","message":"…"}}. Obsłuż szczególnie 400 (żądanie lub obraz), 401 (token), 403 (scope) i 429 (limit). Nagłówki X-RateLimit-Remaining i X-Monthly-Remaining pokazują pozostałe limity.