AnonShot

API REST v1

Integre as imagens do AnonShot no seu app

Envie uma imagem do seu servidor, receba o código e use uma URL direta num LLM, numa tag de imagem ou em qualquer cliente HTTP. Cada arquivo é reorientado, limpo dos metadados EXIF e servido em WebP.

Como funciona em 30 segundos

  1. Crie um token em as configurações da conta.
  2. Envie o arquivo para POST /api/v1/photos com esse token.
  3. Guarde o shortUrl ou, mais simples, as URLs já prontas na resposta.
  4. Passe publicImageUrl ao LLM se a imagem for pública, ou baixe fileUrl com o token se ela precisar continuar privada.

1. Criar e proteger o token

O token completo só aparece uma vez. Guarde-o numa variável de ambiente do seu backend, nunca no Git, numa URL, em JavaScript enviado ao navegador ou num app mobile distribuído.

ANONSHOT_TOKEN=anon_live_…
Authorization: Bearer $ANONSHOT_TOKEN
  • photos:write permite upload, edição e exclusão.
  • photos:read permite listar, ver detalhes e baixar com autenticação.
  • As cotas padrão são de 60 requisições por minuto e 10.000 por mês.
  • Os tokens podem ser revogados e ter data de expiração.

2. Enviar uma foto

Envie um formulário multipart/form-data. O campo files pode se repetir: JPEG, PNG, WebP e GIF são aceitos, com até 50 MB por arquivo e 20 arquivos por requisição.

Exemplo com curl

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

Opções: adicione -F "password=um-segredo-diferente" para proteger a página, ou -F "burnAfterRead=true" para uma imagem de visualização única. Não use essas opções se um serviço externo precisar ler a URL pública livremente.

Exemplo em JavaScript no servidor

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 ?? "Falha no upload")

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

Não defina você mesmo o cabeçalho Content-Type: o FormData adiciona automaticamente o boundary multipart correto.

3. A resposta e suas três 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
  }]
}
ValorUse paraAcesso
shareUrlAbrir a página do AnonShot com a interfacePúblico
publicImageUrlLLM, <img>, download diretoPúblico, sem HTML
fileUrlBaixar a mesma imagem sem expô-la publicamenteBearer + photos:read

O endereço direto é sempre /p/{code}/image. Ele devolve os bytes da imagem em WebP, já processada, e não uma página HTML. Fotos criadas com um token de conta não expiram, a não ser que sejam apagadas ou abertas como compartilhamento de visualização única. Uma foto com senha não funciona para um LLM que não tenha o cookie de desbloqueio.

4. Conectar a imagem a um LLM

Se o provedor aceita URL de imagem, passe photo.publicImageUrl diretamente. Se a imagem não pode ser pública, busque os bytes em fileUrl no servidor e envie esses bytes ao provedor conforme a API dele.

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

if (!imageResponse.ok) throw new Error("Imagem inacessível")
const imageBytes = await imageResponse.arrayBuffer()
// Depois passe imageBytes para o SDK do LLM.

Nunca passe o token do AnonShot ao LLM nem o coloque como parâmetro de URL. O token só serve entre o seu backend e o anonshot.com.

5. Ler, listar e apagar

# Listar suas fotos
curl https://anonshot.com/api/v1/photos \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

# Ver os dados de uma foto
curl https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

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

# Apagar o compartilhamento de vez
curl -X DELETE https://anonshot.com/api/v1/photos/Ab3dE7xK \
  -H "Authorization: Bearer $ANONSHOT_TOKEN"

Limpar só os metadados EXIF

Esta rota recebe uma imagem e devolve direto um WebP limpo, sem criar link de compartilhamento.

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

O cabeçalho X-AnonShot-Photo-Id traz o identificador da operação. JPEG, PNG e WebP são aceitos nesta rota.

Todas as rotas

RotaFunção
GET /api/v1Descoberta da API, sem autenticação
GET · POST /api/v1/photosListar ou enviar até 20 imagens
GET · PATCH · DELETE /api/v1/photos/{code}Ler, editar ou apagar um compartilhamento
GET /api/v1/photos/{code}/fileReceber o WebP limpo com um token
GET /p/{code}/imageExibir direto uma imagem pública, sem página HTML
POST /api/v1/exif/cleanLimpar uma imagem e receber o WebP
POST /api/v1/uploads/presignPreparar um upload direto para o armazenamento
GET · POST /api/v1/albumsListar ou criar álbuns
GET · PATCH · DELETE /api/v1/albums/{code}Ler, editar ou apagar um álbum
POST · DELETE /api/v1/albums/{code}/photosAdicionar ou remover fotos

Respostas, erros e cotas

Respostas JSON de sucesso usam {"data": …}. Erros usam {"error":{"code":"…","message":"…"}}. Trate principalmente 400 (requisição ou imagem), 401 (token), 403 (scope) e 429 (cota). Os cabeçalhos X-RateLimit-Remaining e X-Monthly-Remaining mostram as cotas restantes.

Criar ou revogar um token de API
API de hospedagem de imagens e remoção de EXIF — AnonShot