Parse
by Unsiloed AI in Documents & files
Creates a parse job for a PDF, JPEG, PNG, WEBP or PPTX document sent by URL or as a multipart upload, and returns the job id at once. Word, TIFF and other formats are converted to PDF first. Poll GET /parse/{job_id} for the ordered chunks with Markdown, HTML, OCR text, bounding boxes and confidence per segment. Options select the layout model, OCR engine, page range, output fields and exports. Excel workbooks go to POST /parse/excel. Usage is the page count of the document.
https://agents.prod.visionapi.unsiloed.ai/parse- Price
- $0.02
- per call in USDC
- Uptime
- 13.3%
- last 30 days
- Response time
- 832 ms
- 986 ms slowest 5%
- Last check
- Failed
- 24 h ago, next in 2 days
Reliability
Latest check failed 24 h ago: Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE)
Status and outage history · Atom feed · Watch with other listings
How to call it
POST https://agents.prod.visionapi.unsiloed.ai/parse
Each call costs $0.02 in USDC on Base, paid with the request over x402.
Run a free test callOne unpaid request, the way an agent sends it. You see the payment challenge it gets back. Nothing is charged.
Example request
From the listing.
POST https://agents.prod.visionapi.unsiloed.ai/parse
content-type: application/json
{
"url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
agentic_ocr | string | No | Re-reads each segment with an agentic OCR model after layout detection for higher accuracy; omit to disable. One of: standard, advanced. |
detect_pii | boolean | No | Run a PII detection pass first. When PII at or above pii_block_severity is found the job is not created and the response says so. Default: false. |
enhance_reading_order | boolean | No | Reorder segments into natural reading order; recommended for multi-column layouts. No effect with page_by_page. Default: false. |
error_handling | string | No | Continue skips segments that fail (for example a model refusal); Fail stops the job on the first error. One of: Continue, Fail. Default: "Continue". |
export_format | array of string | No | Export files to generate after parsing; their download links appear in the exports field of the result. |
extract_colors | boolean | No | Carry text colour from the PDF text layer into the OCR results. Default: false. |
extract_links | boolean | No | Attach hyperlink URLs from PDF annotations to the OCR results. Default: false. |
extract_strikethrough | boolean | No | Keep strikethrough formatting in the HTML and Markdown output. Default: false. |
layout_analysis | string | No | How pages are segmented: smart_layout_detection finds headers, sections, tables and figures with bounding boxes; page_by_page treats each page as one segment (fastest); advanced_layout_detection runs a vision model for dense or unusual layouts. One of: smart_layout_detection, page_by_page, advanced_layout_detection. Default: "smart_layout_detection". |
merge_batch_size | integer | No | Most tables per merge group when merge_tables is on. Default: 20. |
merge_tables | boolean | No | Stitch tables that continue across page breaks into one table by matching headers and columns. Default: false. |
ocr_engine | string | No | OCR engine: Hawk for complex layouts and mixed content (the documented default), Beta for rotated or warped text, Storm for 50 plus languages. One of: UnsiloedHawk, UnsiloedBeta, UnsiloedStorm. |
ocr_strategy | string | No | auto_detection runs OCR only where the page needs it; force_ocr runs it on every page. One of: auto_detection, force_ocr. Default: "auto_detection". |
output_fields | string | No | JSON-encoded object of booleans to drop fields from each segment: html, markdown, ocr, image, content, bbox, confidence, embed, chart_data. All default to true. |
page_range | string | No | Pages to process, for example 1-5, 2,4,6 or [1,3,5]. Defaults to all pages. |
pii_block_severity | string | No | Severity that blocks the job when detect_pii is on: any finding, quasi-identifiers (names, dates, locations), contact details (email, phone), or direct identifiers only (SSN, passport, card numbers). One of: any, low, medium, high. Default: "any". |
pii_engine | string | No | PII detector: standard is the fast pattern engine, advanced has higher precision. One of: standard, advanced. Default: "standard". |
response_profile | string | No | slim returns only embed text, bbox, page number, segment id and type plus HTML for tables or Markdown for the rest; full returns everything; custom honours output_fields. One of: slim, full, custom. |
segment_analysis | string | No | JSON-encoded object setting, per segment type, whether HTML and Markdown come from a vision model (VLM) or straight from OCR (Auto), the model id, a custom prompt and optional translation. See the Unsiloed parse reference for the per-type defaults. |
segment_filter | string | No | Comma-separated segment types to keep (table, picture, formula, text, sectionheader, title, listitem, caption, footnote, pageheader, pagefooter, keyvaluepair, signature, seal, page) or all. Default: "all". |
segment_type_naming | string | No | Segment type names: Unsiloed (PageHeader, ListItem, Picture) or Other (Header, List Item, Figure). One of: Unsiloed, Other. Default: "Unsiloed". |
segmentation_version | string | No | Layout model. v2 is form-aware and also returns KeyValuePair, Signature and Seal segments; use it for forms and applications. One of: v1, v2. Default: "v1". |
url | string (uri) | Yes | Public or presigned URL of the document to process. To upload the file itself instead, send multipart/form-data with the file in the file field as the Unsiloed docs show; uploads above 10 MB must use a URL. |
use_high_resolution | boolean | No | Use high-resolution page images for cropping and OCR. Better on poor scans, about 2 to 3 seconds more per page. |
validate_segments | string | No | JSON-encoded array of segment types to re-check with a vision model, for example ["Table","Formula","Picture"]. Defaults to Table and Picture. |
xml_citation | boolean | No | Extract the bibliography of a research PDF and hyperlink in-text citations in the Markdown. PDFs only. Default: false. |
Example response
The listing has no example response.
Call it from code
The curl command shows the payment challenge. The JavaScript and Python versions pay and call, and never pay more than $0.02.
curl: see the payment challenge
# bash or zsh: see the payment challenge. Nothing is charged.
curl -sS -g -i -X POST 'https://agents.prod.visionapi.unsiloed.ai/parse' \
-H 'content-type: application/json' \
--data-raw '{"url":"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"}'
# x402 v2 sends the challenge base64-encoded in the PAYMENT-REQUIRED header (v1 sends it in the body).
# To read the header:
curl -sS -g -o /dev/null -D - -X POST 'https://agents.prod.visionapi.unsiloed.ai/parse' \
-H 'content-type: application/json' \
--data-raw '{"url":"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"}' \
| grep -i '^payment-required:' | cut -d' ' -f2 | tr -d '\r' | base64 --decodeJavaScript: pay and call
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
// Pays at most $0.02 per call.
const client = new x402Client().setSpendControls({ maxAmountPerPayment: "$0.02" });
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY) });
const pay = wrapFetchWithPayment(fetch, client);
// Not sure it's safe to pay? ToolVet checks it first for $0.005. Pay for that from a separate
// client: this one is capped at $0.02 per payment. GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Fagents.prod.visionapi.unsiloed.ai%2Fparse&method=POST
const res = await pay("https://agents.prod.visionapi.unsiloed.ai/parse", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
"url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
}),
});
console.log(res.status, await res.text());Python: pay and call
# pip install "x402[requests,evm]"
import os
from eth_account import Account
from x402 import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
# Pays at most $0.02 per call.
client = x402ClientSync().set_spend_controls({"max_amount_per_payment": "$0.02"})
register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))
with x402_requests(client) as session:
res = session.post(
"https://agents.prod.visionapi.unsiloed.ai/parse",
json={
"url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
},
)
print(res.status_code, res.text)Security scan
No findings
We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.
Recent checks
| When | Result | HTTP | Time | Price |
|---|---|---|---|---|
| 24 h ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 29 h ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 34 h ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 38 h ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 43 h ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
Show 10 older checks
| 2 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 2 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 2 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 3 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 3 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 3 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 3 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 3 days ago | Connection failed (ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE) | - | - | - |
| 3 days ago | Passed | 402 | 986 ms | $0.02 |
| 4 days ago | Passed | 402 | 832 ms | $0.02 |