Documentação da API do Screenshot Studio

O Screenshot Studio expõe uma API HTTP pública e direta: capture uma página web como imagem, recompacte uma imagem exportada, consulte um tweet e use o proxy de mídia do Twitter. Sem chave de API, sem token e sem conta. Todas as falhas retornam o mesmo formato de erro JSON. O contrato legível por máquina está em /openapi.json.

Início Rápido

Capture uma página e salve o PNG no disco em um único comando.

curl -s -X POST https://www.screenshot-studio.com/api/screenshot \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}' \
  | jq -r .screenshot | base64 -d > shot.png

URL Base

https://www.screenshot-studio.com

Endpoints

POST/api/screenshot

operationId: captureScreenshot

Renderiza a página na URL informada e retorna a screenshot como um PNG codificado em base64. Os resultados ficam em cache por URL, tipo de dispositivo e esquema de cores.

Requisição

curl -X POST https://www.screenshot-studio.com/api/screenshot \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "deviceType": "desktop",
    "colorScheme": "light",
    "forceRefresh": false
  }'

Resposta

{
  "screenshot": "iVBORw0KGgoAAAANSUhEUg...",
  "url": "https://example.com",
  "cached": false,
  "strategy": "microlink",
  "deviceType": "desktop",
  "colorScheme": "light"
}

POST/api/export

operationId: optimizeExportImage

Recompacta uma imagem com Sharp e retorna os bytes otimizados. JPEG usa MozJPEG, WebP usa libwebp, PNG usa filtragem adaptativa. O corpo da resposta é a própria imagem binária, não JSON.

Requisição

curl -X POST https://www.screenshot-studio.com/api/export \
  -F "image=@shot.png" \
  -F "format=webp" \
  -F "qualityPreset=high" \
  -o shot.webp

Resposta

HTTP/2 200
content-type: image/webp

<binary image bytes>

GET/api/tweet/{id}

operationId: getTweet

Retorna a carga útil pública do tweet usada para renderizá-lo como imagem. O id é o ID numérico do status extraído da URL do tweet.

Requisição

curl https://www.screenshot-studio.com/api/tweet/1234567890123456789

Resposta

{
  "data": {
    "id_str": "1234567890123456789",
    "text": "...",
    "user": { "name": "...", "screen_name": "..." }
  }
}

GET/api/image-proxy

operationId: proxyTwitterImage

Transmite uma imagem hospedada no Twitter através desta origem para que possa ser desenhada em um canvas sem torná-lo 'tainted'. Apenas pbs.twimg.com, abs.twimg.com, ton.twitter.com e video.twimg.com são permitidos.

Requisição

curl "https://www.screenshot-studio.com/api/image-proxy?url=https://pbs.twimg.com/media/EXAMPLE.jpg" \
  -o media.jpg

Resposta

HTTP/2 200
content-type: image/jpeg

<binary image bytes>

Erros

Toda requisição com falha retorna JSON com o mesmo formato. Utilize code, que é estável; error e message trazem o mesmo texto legível, e hint explica como recuperar.

{
  "error": "URL is required",
  "code": "invalid_request",
  "message": "URL is required",
  "hint": "Send a JSON body with a \"url\" string, for example {\"url\": \"https://example.com\"}.",
  "status": 400,
  "documentation": "https://www.screenshot-studio.com/docs#errors"
}
CódigoStatusSignificado
invalid_request400Um campo obrigatório está ausente ou malformatado.
invalid_url400A url não é uma URL http ou https absoluta válida.
unsupported_value400Um campo foi definido com um valor fora do enum permitido.
forbidden_domain403O host solicitado não está na lista de permissões do proxy.
not_found404Nenhum endpoint ou recurso corresponde à requisição.
method_not_allowed405O endpoint não aceita este método HTTP.
rate_limited429O limite de taxa por IP foi excedido. Respeite o cabeçalho Retry-After.
upstream_timeout408A página de destino demorou muito para carregar.
upstream_unavailable503O serviço de captura upstream está inacessível.
upstream_failed502O host upstream recusou ou falhou na requisição.
internal_error500Falha inesperada no servidor.

Negociação de conteúdo Markdown

Todas as páginas deste site entregam Markdown aos clientes que o solicitam. As respostas definem Content-Type: text/markdown; charset=utf-8 e Vary: Accept, Accept-Encoding. Uma requisição que não aceite nem text/html nem text/markdown é respondida com 406, e um caminho desconhecido retorna 404 com um corpo em Markdown listando para onde ir em seguida.

curl -H "Accept: text/markdown" https://www.screenshot-studio.com/

Recursos relacionados