截作 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_request | 400 | 缺少必填字段,或字段格式不正确。 |
| invalid_url | 400 | url 不是有效的绝对 http 或 https 地址。 |
| unsupported_value | 400 | 某个字段的值不在允许的枚举范围内。 |
| forbidden_domain | 403 | 请求的主机不在代理白名单中。 |
| not_found | 404 | 没有匹配该请求的接口或资源。 |
| method_not_allowed | 405 | 该接口不接受此 HTTP 方法。 |
| rate_limited | 429 | 超出每 IP 速率限制。请遵守 Retry-After。 |
| upstream_timeout | 408 | 目标页面加载时间过长。 |
| upstream_unavailable | 503 | 上游截图服务不可达。 |
| upstream_failed | 502 | 上游主机拒绝或未能完成请求。 |
| internal_error | 500 | 未预期的服务端失败。 |
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/