接口端点
同步解析
上传文件并立即获取解析结果
POST
/
parse
/
sync
Python
import json
import requests
url = "https://somark.ai/api/v1/parse/sync"
data = {
"output_formats": ["markdown", "json"],
"api_key": "sk-***",
"element_formats": json.dumps({
"image": "url",
"formula": "latex",
"table": "html",
"cs": "image",
}),
"feature_config": json.dumps({
"enable_text_cross_page": False,
"enable_table_cross_page": False,
"enable_title_level_recognition": False,
"enable_inline_image": False,
"enable_table_image": True,
"enable_image_understanding": True,
"keep_header_footer": False,
}),
}
files = {"file": ("example.pdf", open("example.pdf", "rb"))}
response = requests.post(url, data=data, files=files)
print(response.json())curl -X POST https://somark.ai/api/v1/parse/sync \
-F "file=@example.pdf" \
-F "output_formats=markdown" \
-F "output_formats=json" \
-F "api_key=sk-***" \
-F 'element_formats={"image":"url","formula":"latex","table":"html","cs":"image"}' \
-F 'feature_config={"enable_text_cross_page":false,"enable_table_cross_page":false,"enable_title_level_recognition":false,"enable_inline_image":false,"enable_table_image":true,"enable_image_understanding":true,"keep_header_footer":false}'const form = new FormData();
form.append('api_key', '<string>');
form.append('file', '<string>');
form.append('file_url', '<string>');
form.append('output_formats[0]', 'markdown');
form.append('output_formats[1]', 'json');
form.append('element_formats', '{
"image": "url",
"formula": "latex",
"table": "html",
"cs": "image"
}');
form.append('feature_config', '{
"enable_text_cross_page": false,
"enable_table_cross_page": false,
"enable_title_level_recognition": false,
"enable_inline_image": false,
"enable_table_image": true,
"enable_image_understanding": true,
"keep_header_footer": false
}');
const options = {method: 'POST'};
options.body = form;
fetch('https://somark.ai/api/v1/parse/sync', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://somark.ai/api/v1/parse/sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"api_key\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B0%5D\"\r\n\r\nmarkdown\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B1%5D\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"element_formats\"\r\n\r\n{\r\n \"image\": \"url\",\r\n \"formula\": \"latex\",\r\n \"table\": \"html\",\r\n \"cs\": \"image\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"feature_config\"\r\n\r\n{\r\n \"enable_text_cross_page\": false,\r\n \"enable_table_cross_page\": false,\r\n \"enable_title_level_recognition\": false,\r\n \"enable_inline_image\": false,\r\n \"enable_table_image\": true,\r\n \"enable_image_understanding\": true,\r\n \"keep_header_footer\": false\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data; boundary=---011000010111000001101001"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://somark.ai/api/v1/parse/sync"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"api_key\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B0%5D\"\r\n\r\nmarkdown\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B1%5D\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"element_formats\"\r\n\r\n{\r\n \"image\": \"url\",\r\n \"formula\": \"latex\",\r\n \"table\": \"html\",\r\n \"cs\": \"image\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"feature_config\"\r\n\r\n{\r\n \"enable_text_cross_page\": false,\r\n \"enable_table_cross_page\": false,\r\n \"enable_title_level_recognition\": false,\r\n \"enable_inline_image\": false,\r\n \"enable_table_image\": true,\r\n \"enable_image_understanding\": true,\r\n \"keep_header_footer\": false\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://somark.ai/api/v1/parse/sync")
.header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"api_key\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B0%5D\"\r\n\r\nmarkdown\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B1%5D\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"element_formats\"\r\n\r\n{\r\n \"image\": \"url\",\r\n \"formula\": \"latex\",\r\n \"table\": \"html\",\r\n \"cs\": \"image\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"feature_config\"\r\n\r\n{\r\n \"enable_text_cross_page\": false,\r\n \"enable_table_cross_page\": false,\r\n \"enable_title_level_recognition\": false,\r\n \"enable_inline_image\": false,\r\n \"enable_table_image\": true,\r\n \"enable_image_understanding\": true,\r\n \"keep_header_footer\": false\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://somark.ai/api/v1/parse/sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"api_key\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B0%5D\"\r\n\r\nmarkdown\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"output_formats%5B1%5D\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"element_formats\"\r\n\r\n{\r\n \"image\": \"url\",\r\n \"formula\": \"latex\",\r\n \"table\": \"html\",\r\n \"cs\": \"image\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"feature_config\"\r\n\r\n{\r\n \"enable_text_cross_page\": false,\r\n \"enable_table_cross_page\": false,\r\n \"enable_title_level_recognition\": false,\r\n \"enable_inline_image\": false,\r\n \"enable_table_image\": true,\r\n \"enable_image_understanding\": true,\r\n \"keep_header_footer\": false\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"code": 0,
"message": "任务成功",
"data": {
"task_id": "a1b2c3d4e5f6",
"error": null,
"metadata": {
"page_num": 10,
"file_type": ".pdf"
},
"result": {
"file_name": "document.pdf",
"outputs": {
"markdown": "# 第一章 引言\n\n本文档介绍了...",
"json": {
"pages": [
{
"page_num": 0,
"blocks": [
{
"idx": 0,
"type": "title",
"bbox": [
72,
50,
540,
80
],
"content": "第一章 引言",
"format": "text",
"captions": [],
"img_url": "",
"title_level": 1
},
{
"idx": 1,
"type": "text",
"bbox": [
72,
100,
540,
200
],
"content": "本文档介绍了...",
"format": "text",
"captions": [],
"img_url": ""
}
],
"page_size": {
"h": 1684,
"w": 1190
},
"merge_content_from_pre_page": false
}
]
}
}
}
}
}路径变更:该接口路径已从
/extract/acc_sync 更改为 /parse/sync。旧路径将于 2026-12-31 停用,请在此之前迁移至新路径。
参数变更:extract_config 已更名为 feature_config。请将请求中的 extract_config 字段替换为 feature_config。output_formats
output_formats
| 可选输出格式 | 默认值 | 说明 |
|---|---|---|
json / markdown / zip | ["markdown", "json"] | 可多选 ,不传时使用默认值;zip 将 Markdown 和所有图片文件打包为压缩包;在 output_formats 包含 zip 时,element_formats.image 只能是 file |
element_formats
element_formats
| 配置项 | 可选输出格式 | 默认值 | 说明 |
|---|---|---|---|
image | url / base64 / file / none | url | 单选,image 设定为file时,output_formats需包含zip;none表示不返回图片 |
formula | latex / mathml / ascii | latex | 单选,指定公式的输出格式 |
table | markdown / html / image | html | 单选,markdown 模式下,合并单元格将自动拆分为独立单元格,并以相同内容填充 |
cs | image | image | 单选,化学结构式输出格式,即将支持smiles格式 |
feature_config
feature_config
| 配置项 | 默认值 | 说明 |
|---|---|---|
enable_text_cross_page | false | 文字跨页拼接:跨页文字段合并为连续段落 |
enable_table_cross_page | false | 表格跨页拼接:跨页表格合并为完整表格 |
enable_title_level_recognition | false | 标题层级识别:识别文档标题层级结构(H1/H2/H3…) |
enable_inline_image | false | 文中图:返回文字段落中的图片 |
enable_table_image | true | 表中图:返回表格单元格内的图片 |
enable_image_understanding | true | 图片理解:对文档内图片进行语义理解和结构化描述 |
keep_header_footer | false | 保留页眉页脚:默认过滤了页眉页脚,如果使用页眉页脚可开启保留 |
如果你需要了解鉴权、使用限制和同步/异步选择建议,先看 API 概览。大文件、批处理和后台任务建议改走 异步解析 — 提交任务。
请求体
multipart/form-data
API 密钥,格式 sk-***
待解析的文档文件(与 file_url 二选一)
待解析文档的下载链接(与 file 二选一)
输出格式,可多选。不传时默认为 ["markdown", "json"]。支持 json / markdown / zip,其中 zip 将所有输出文件打包为压缩包
可用选项:
json, markdown, zip 元素格式配置,控制各类元素的格式
Show child attributes
Show child attributes
特色功能配置(参数已从 extract_config 更名为 feature_config)
Show child attributes
Show child attributes
⌘I

