AnonShot

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

  1. Utwórz token w ustawieniach konta.
  2. Wyślij plik na POST /api/v1/photos z tym tokenem.
  3. Zachowaj shortUrl albo, prościej, gotowe adresy URL z odpowiedzi.
  4. Przekaż publicImageUrl do LLM, jeśli obraz jest publiczny, albo pobierz fileUrl z 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_TOKEN
  • photos:write pozwala przesyłać, edytować i usuwać.
  • photos:read pozwala 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 czegoDostęp
shareUrlOtwarcie strony AnonShot z interfejsemPubliczny
publicImageUrlLLM, <img>, bezpośrednie pobieraniePubliczny, bez HTML
fileUrlPobranie tego samego obrazu bez publicznego udostępnianiaBearer + 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.webp

Nagłówek X-AnonShot-Photo-Id zawiera identyfikator operacji. Na tej trasie akceptowane są JPEG, PNG i WebP.

Wszystkie trasy

TrasaFunkcja
GET /api/v1Opis API, bez uwierzytelnienia
GET · POST /api/v1/photosLista 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}/filePobranie oczyszczonego WebP z tokenem
GET /p/{code}/imageBezpośrednie wyświetlenie publicznego obrazu, bez strony HTML
POST /api/v1/exif/cleanOczyszczenie obrazu i odbiór WebP
POST /api/v1/uploads/presignPrzygotowanie bezpośredniego przesyłania do magazynu
GET · POST /api/v1/albumsLista lub tworzenie albumów
GET · PATCH · DELETE /api/v1/albums/{code}Odczyt, zmiana lub usunięcie albumu
POST · DELETE /api/v1/albums/{code}/photosDodawanie 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.

Utwórz lub unieważnij token API
API do hostingu zdjęć i usuwania EXIF — AnonShot