截作 API 文档

截作 提供一组小型公开 HTTP API:把实时网页截成图片、重新压缩导出图、解析推文,以及代理 Twitter 媒体。没有 API 密钥,没有令牌,也没有账号。每次失败请求都返回同一套 JSON 错误信封。机器可读的契约在 /openapi.json

快速开始

一条命令即可截取页面并把 PNG 写到磁盘。

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

基址

https://kimte.com

接口

POST/api/screenshot

operationId: captureScreenshot

渲染给定 URL 的页面,并以 base64 编码的 PNG 返回截图。结果按 URL、设备类型和配色方案缓存。

请求

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

响应

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

POST/api/export

operationId: optimizeExportImage

用 Sharp 重新压缩图片并返回优化后的字节。JPEG 使用 MozJPEG,WebP 使用 libwebp,PNG 使用自适应滤波。响应体是图片本身,不是 JSON。

请求

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

响应

HTTP/2 200
content-type: image/webp

<binary image bytes>

GET/api/tweet/{id}

operationId: getTweet

返回用于把推文渲染成图片的公开推文数据。id 是推文链接里的数字状态 ID。

请求

curl https://kimte.com/api/tweet/1234567890123456789

响应

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

GET/api/image-proxy

operationId: proxyTwitterImage

把 Twitter 托管的图片经本源站流转,以便绘制到画布上而不污染画布。仅允许 pbs.twimg.com、abs.twimg.com、ton.twitter.com 和 video.twimg.com。

请求

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

响应

HTTP/2 200
content-type: image/jpeg

<binary image bytes>

错误

每次失败请求都返回相同形状的 JSON。请根据 code分支,它是稳定的; error message 携带同一段可读文本, hint 则说明如何恢复。

{
  "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://kimte.com/docs#errors"
}
错误码状态含义
invalid_request400缺少必填字段,或字段格式不正确。
invalid_url400url 不是有效的绝对 http 或 https 地址。
unsupported_value400某个字段的值不在允许的枚举范围内。
forbidden_domain403请求的主机不在代理白名单中。
not_found404没有匹配该请求的接口或资源。
method_not_allowed405该接口不接受此 HTTP 方法。
rate_limited429超出每 IP 速率限制。请遵守 Retry-After。
upstream_timeout408目标页面加载时间过长。
upstream_unavailable503上游截图服务不可达。
upstream_failed502上游主机拒绝或未能完成请求。
internal_error500未预期的服务端失败。

Markdown 内容协商

本站每个页面都会向请求它的客户端提供 Markdown。响应会设置 Content-Type: text/markdown; charset=utf-8 Vary: Accept, Accept-Encoding。若请求既不接受 text/html 也不接受 text/markdown ,则返回 406;未知路径返回 404 ,正文为 Markdown,并列出接下来该看哪里。

curl -H "Accept: text/markdown" https://kimte.com/

相关资源