跳转到内容
Foldbun Stack文档
EN获取 API 密钥即将推出

单个文档页面的版面分析与识别

POST
/v1/documents/parse
curl --request POST \
--url https://api.stack.foldbun.com/v1/documents/parse \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "image": { "id": "img_3b1f0c5e9a7d42c8b6e1f0a9d8c7b6a5f4e3d2c1b0a998877665544332211000" }, "options": { "blocks": true } }'

模型 paddleocr-vl(默认)。一次请求为一页图片(按 page 计费)。多页 PDF 后续提供。 版面区块(文本、标题、表格、公式、图形等)按阅读顺序返回,同时返回整页的 Markdown(表格为 HTML 表格,公式为 LaTeX)。

Idempotency-Key
string
至少 1 个字符 至多 128 个字符 /^[\x21-\x7e]+$/

1 至 128 个可打印 ASCII 字符。在同一账户内,密钥保留 24 小时:使用相同请求体重复请求,会返回原始响应(响应头 Idempotent-Replayed: true),且不会再次扣费或运行。相同密钥搭配不同请求体返回 409 idempotency_conflict。见概览。

单个文档页面图片。

媒体类型application/json

文档解析请求。

object
model

文档解析模型。

string
默认值:paddleocr-vl
允许的值: paddleocr-vl
image
必填

文档的一页,以图片形式给出。

object
至少 1 个属性 至多 1 个属性
id

POST /v1/images(或之前的调用)返回的句柄:img_ 加清理后图片的 SHA-256。仅在上传它的账户内有效。

string
/^img_[0-9a-f]{64}$/
url

预留(后续提供)。目前返回 400 unsupported。

string format: uri
/^https:///
base64

JPEG、PNG 或 WebP 文件的标准 base64;允许带 data: 前缀。

string
options

结果的可选调整。

object
blocks

包含 blocks(否则只返回 markdown)。

boolean
默认值:true

示例

{
"image": {
"id": "img_3b1f0c5e9a7d42c8b6e1f0a9d8c7b6a5f4e3d2c1b0a998877665544332211000"
},
"options": {
"blocks": true
}
}

页面的 Markdown,以及(除非禁用)按阅读顺序排列的版面区块。

媒体类型application/json
object
id
必填

调用 ID call_<uuid>;联系支持时应提供。

string
model
必填

处理该调用的模型 ID。

string
image
必填

坐标所对应的摆正后的原图。纯文本向量嵌入时不出现。

object
id
必填

图片句柄:img_ 加清理后字节的 SHA-256。

string
/^img_[0-9a-f]{64}$/
width
必填

摆正后的原图的宽度,单位为像素(已应用 EXIF 方向)。

integer
height
必填

摆正后的原图的高度,单位为像素(已应用 EXIF 方向)。

integer
bytes
必填

已存储图片的大小,单位为字节。

integer
contentType
必填

已存储图片的媒体类型(与上传的类型相同)。

string
允许的值: image/jpeg image/png image/webp
cost
必填

本次调用扣除的额度。失败的调用,以及由每日包含额度覆盖的调用,为 0。内部账户只计量、不扣费,此时 cost 为该调用的价格。

number
balance
必填

调用后的账户余额,单位为额度(内部账户的余额不变)。

number
timing
必填

本次调用在服务器侧的耗时,单位为毫秒。queueMs 为从提交到 GPU 节点领取任务的时间(包括排队,以及节点故障后的重新排队);processingMs 为从节点领取任务到结果返回的时间(获取图片、推理,以及节点与服务器之间的往返)。inferenceMs、imageFetchMs 和 serverMs 对此作进一步细分。不包含客户端与 API 之间的网络时间。

object
queueMs
必填

从提交到 GPU 节点领取任务的毫秒数。

integer
processingMs
必填

从节点领取任务到结果返回的毫秒数。

integer
inferenceMs

节点测得的 GPU 节点上的模型耗时,不含获取图片。不会大于 processingMs。节点未上报时不出现。

integer
imageFetchMs

节点获取图片字节所用的时间。图片随任务一同发送,或节点无需获取(编码缓存命中)时为 0。节点未上报时不出现。

integer
serverMs

API 服务器内的总耗时:从收到请求到响应写出之前。包括读取请求体、图片准备、准入、queueMs、processingMs 和计费结算。仅在重放由旧版服务器存储的幂等响应时不出现。

integer
billing

该调用的计价方式。

object
lines
必填

该调用每个计价单位一行。

Array<object>
object
unit
必填

价目表中的计费单位,与 GET /v1/models 的 prices[].unit 相同(例如 encode_image、prompt、refine、image)。

string
quantity
必填

使用的单位数。

integer
>= 1
unitPrice
必填

单个单位的标价。

number
amount
必填

该行的价格:unitPrice * quantity,waived 时为 0。对未扣费(charged 为 false)的调用(试用、每日包含额度),各行仍显示标价。

number
waived
必填

节点已持有该编码(cache: hit)时,图片编码费为 true;此时 amount 为 0,原本适用的费用为 unitPrice * quantity。

boolean
total
必填

该调用的价格(各行金额之和;capped 时削减到余额)。

number
charged
必填

是否从账户余额中扣费。Playground 试用调用,以及由每日包含额度覆盖的调用(此时设置了 pool 和 allowance)为 false;计费调用为 true。内部账户按标价计量、不扣费,此时 charged 为 false,total 为该调用的价格。

boolean
pool
必填

其每日包含额度覆盖了该调用的模型池(public 或 free)。计费调用(包括超出额度的调用)、试用调用和内部账户为 null。

string | null
allowance

pool 当日(UTC)的包含调用,计入本次调用。仅在设置了 pool 时出现。

object
used
必填

当日(UTC)已用调用次数,包括本次。

integer
>= 1
limit
必填

每个 UTC 日包含的调用次数。

integer
>= 1
capped

仅当价格超过余额、扣费被削减到余额时出现,且为 true。

boolean
pages
必填

已解析的页数;目前始终为 1。

integer
允许的值: 1
markdown
必填

页面的 Markdown(表格为 HTML 表格,公式为 LaTeX)。各区块按阅读顺序拼接而成。

string
blocks

按阅读顺序排列的版面区块。

Array<object>
object
type
必填

版面区块的类型。

string
允许的值: text title table formula figure caption header footer list other
order
必填

阅读顺序,从 0 开始。

integer
bbox
必填

该区块的框。

Array<number>
至少 4 项 至多 4 项
text

该区块的纯文本。没有文本的区块(例如插图)没有该字段。table 区块为 HTML <table>;formula 区块为以 $$(行间公式)或 $(行内公式)包围的 LaTeX,版面分析也可能把行内公式作为独立区块返回,此时分隔符同样可能是 $$;正文中的行内公式保留在所在区块的文本中,以 $ 包围。

string
markdown

该区块的 Markdown。表格和公式的形式与 text 相同。

string

示例

{
"image": {
"contentType": "image/jpeg"
},
"pages": 1,
"blocks": [
{
"type": "text"
}
]
}

错误信封。HTTP 状态码与 code 对应;只有 retryable: true 的错误才值得原样重复。失败的调用不收费。

状态码 错误码
400 invalid_request, invalid_image(图片通过了上传检查,但无法解码), unsupported
401 unauthorized
402 insufficient_balance
403 model_locked
404 not_found, image_not_found
409 idempotency_conflict, request_in_progress
413 payload_too_large
429 rate_limited, daily_limit_reached, too_many_batches(均带有 Retry-After)
500 internal_error
502 upstream_error, bad_model_output
503 model_unavailable, model_busy, unavailable(均带有 Retry-After)
504 upstream_timeout

model_unavailable 也用于唯一提供该模型的 GPU 节点短时失联:失联后约一分钟内,交互式调用立即返回该错误并带较短的 Retry-After(5 秒),同步和批量调用则继续排队到各自的截止时间,不会直接失败。

各错误码的含义和重试建议:错误。

媒体类型application/json

所有错误响应的响应体。

object
error
必填

错误。

object
code
必填

稳定的、机器可读的错误码。应依据该字段而不是 message 判断。与 HTTP 状态码的对应关系见响应部分。

string
message
必填

面向人的说明。措辞可能变化。

string
retryable
必填

为 true 时,原样重复同一请求有可能成功。

boolean
retryAfterMs
必填

建议重试前等待的毫秒数;无建议时为 0。

integer

示例

{
"error": {
"code": "model_busy",
"message": "model sam3 is busy; retry shortly",
"retryable": true,
"retryAfterMs": 5000
}
}
Retry-After
integer
>= 1

重试前须等待的整秒数;出现在 429 和 503 响应中。

X-Request-Id
string
/^[0-9a-f]{16}$/

服务器生成的请求 ID(16 个十六进制字符);出现在每个响应中。联系支持时应提供该值。