Request body
sourceUrl— HTTPS or signed URL to the spreadsheet file. Required iffileis not provided.file— Optional uploaded spreadsheet/CSV file viamultipart/form-data.sourceName— Optional label saved with the extracted dataset.options— Optional object. Supported keys:sheet— Name or index of the worksheet to extract (default: all sheets).headerRow— Row number containing column headers (default1).dateFormat— Output date format (default ISO 8601).numericLocale— Locale for decimal parsing (defaulten-US).
webhookUrl— Optional HTTPS URL Horizon should call when the extraction finishes.
Sample request
Response
Returns202 Accepted with jobId, status, statusUrl, and optional etaSeconds. Completed jobs include normalized rows, column schemas, and summary statistics.
Notes
- Large sheets run asynchronously; chunking respects logical rows.
- Hidden sheets are ignored unless explicitly referenced via
sheet. - Numbers files must be exported to
.xlsxor.csvbefore ingestion. - Poll
GET /jobs/{jobId}(the same asstatusUrl) to monitor progress or retrieve normalized rows after the job completes. - To upload the spreadsheet directly, send
multipart/form-datawith afilefield instead ofsourceUrl.
x402 flow
Spreadsheet extraction is priced via Coinbase’s x402 protocol. A missing proof triggers:accepts payload to your facilitator, call /verify and /settle, then replay the POST with the Base64 token in X-PAYMENT. Horizon resumes the extraction and includes X-PAYMENT-RESPONSE for your records.Body
application/json
Provide either sourceUrl or file.
Extraction hints such as language, segmentLength, transcriptionModel, or sheet preferences depending on the endpoint.
Webhook to call when the extraction completes.
Upload the raw file instead of providing sourceUrl.
Response
Extraction job accepted
Example:
"job_01hx9q9"
Available options:
queued, processing, completed, failed Canonical link to GET /jobs/{jobId} for this job.
Example:
"extract/pdf"
Present when the job completes synchronously.
Estimated seconds until completion.