apyhub
FILE CONVERSION

Convert PDF to Excel Job API

Hosted on ApyHub

What it does

PDF to Excel Converter turns one or more PDF files into .xlsx workbooks. Send PDF files in the files array and get back a jobs list with a job_id, original filename, status, and progress for each conversion.

Use it when you need tabular data out of PDFs without rebuilding the spreadsheet by hand. A typical flow is to submit invoices, reports, or exported statements, then poll /status/:job_id until the job is done or failed. When the job finishes, fetch the converted workbook from /download/:job_id as binary output.

If you are processing multiple files, /overall-status lets you check aggregate progress for a set of job IDs. The response includes overall status, progress, and summary counts such as total_files and completed_files, plus per-job details when you need to track each conversion separately.

PDF to Excel Converter is a good fit for document workflows where the source format is fixed but the downstream system expects spreadsheets.

Note: Pricing depends on page count and PDF type: native PDFs cost 2 atoms per page + 100, while scanned PDFs cost 5 atoms per page + 100.

▣ ENDPOINT 01 / 04
POST
Convert PDF files to Excel (.xlsx)
http://localhost:8080/flowdocs/convert-pdf-to-excel
QUICKSTARTGUIDE

Quickstart

Upload one or more PDF files to convert them to Excel.

curl -X POST "http://localhost:8080/flowdocs/convert-pdf-to-excel" \
  -H "apy-token: $APY_TOKEN" \
  -F "files=@/path/to/report.pdf"

What you'll get back

Returns a JSON object with a jobs array. Each item is an object with job_id (string), filename (string), status (string), and progress (integer).

{
  "jobs": [
    {
      "job_id": "a1b2c3d4",
      "filename": "report.pdf",
      "status": "queued",
      "progress": 0
    }
  ]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.
body*
files*
PDF files to convert to Excel.

About this endpoint

What it does

Converts one or more PDF files into Excel .xlsx jobs. The request uploads PDF files, and the response returns a JSON object listing the conversion jobs that were created.

Request Body

ParameterTypeMandatoryDescription
filesString ArrayYesPDF files to convert to Excel. Each array item is a binary file upload. Max File Upload limit - 5

Response

Returns a JSON object with a jobs array field. Each item in jobs is an object containing job_id, filename, status, and progress.

ParameterTypeMandatoryDescription
jobsObject ArrayYesThe conversion jobs created for the uploaded files.
jobs[].job_idStringYesJob identifier.
jobs[].filenameStringYesOriginal filename of the uploaded PDF file.
jobs[].statusStringYesJob status.
jobs[].progressIntegerYesJob progress value.

Body

Name
Type
Description
bodyREQUIRED
object

Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.

▣ ENDPOINT 02 / 04
GET
Get the status of a PDF-to-Excel job
http://localhost:8080/flowdocs/convert-pdf-to-excel/status/:job_id
QUICKSTARTGUIDE

Quickstart

Check the status of a PDF-to-Excel conversion job by its job_id.

curl -X GET "http://localhost:8080/flowdocs/convert-pdf-to-excel/status/:job_id" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with job_id as a string, status as a string (queued, processing, done, or failed), progress as an integer from 0 to 100, and error as a nullable string.

{
  "job_id": "job_12345",
  "status": "processing",
  "progress": 65,
  "error": null
}
TRY ITLIVE · 1 ATOM
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Checks the status of a PDF-to-Excel conversion job and returns the job’s current state, progress, and job identifier.

Path Parameter(s)

AttributeTypeMandatoryDescription
job_idStringYesIdentifies the job to check.

Response

Returns a JSON object with job_id as a string, status as a string enum, progress as an integer, and error as a string or null. The status field indicates the job state and can be queued, processing, done, or failed.

ParameterTypeMandatoryDescription
errorStringNoAn error message, or null.
job_idStringYesThe job identifier.
statusENUMYesJob state: queued, processing, done, or failed.
progressIntegerYesProgress value from 0 to 100.

Notes

This is a job-check endpoint. Poll it with the job_id from the submit call. The status field cycles through transitional values (queued, processing) before reaching a terminal state (done or failed). The progress field is required in the schema and is returned as an integer from 0 to 100.

Path parameters

Name
Type
Description
job_idREQUIRED
string
▣ ENDPOINT 03 / 04
GET
Download a finished PDF-to-Excel output
http://localhost:8080/flowdocs/convert-pdf-to-excel/download/:job_id
QUICKSTARTGUIDE

Quickstart

Download the generated Excel file for a finished PDF-to-Excel job by replacing job_id in the path.

curl -X GET "http://localhost:8080/flowdocs/convert-pdf-to-excel/download/:job_id" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a binary file (string with format: binary), not a JSON object.

(binary Excel file download)
TRY ITLIVE · 10 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Downloads the finished PDF-to-Excel output for a completed job. The request takes a job_id in the path and returns the file as binary content.

Path Parameter(s)

AttributeTypeMandatoryDescription
job_idStringYesIdentifies the finished conversion job.

Response

Returns a binary file download, represented in the schema as a string with binary format. The success response is the file contents itself, not a JSON object.

Path parameters

Name
Type
Description
job_idREQUIRED
string
▣ ENDPOINT 04 / 04
GET
Aggregate progress across PDF-to-Excel jobs
http://localhost:8080/flowdocs/convert-pdf-to-excel/overall-status
QUICKSTARTGUIDE

Quickstart

Check the overall status for one or more PDF-to-Excel jobs by passing the required job_ids query parameter.

curl -X GET "http://localhost:8080/flowdocs/convert-pdf-to-excel/overall-status?job_ids=job-123,job-456" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with required status and progress fields, plus optional details, total_files, and completed_files.

  • status is a string enum: unknown, queued, processing, done, or failed.
  • progress is an integer from 0 to 100.
{
  "status": "processing",
  "progress": 60,
  "details": [
    {
      "job_id": "job-123",
      "status": "processing",
      "progress": 60
    }
  ],
  "total_files": 2,
  "completed_files": 1
}
TRY ITLIVE · 1 ATOM
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Returns aggregate progress information for one or more PDF-to-Excel jobs identified by the job_ids query parameter. The response reports overall job status and progress, and may include per-job details plus file counts.

Query Parameter(s)

AttributeTypeMandatoryDescription
job_idsStringYesOne or more job identifiers.

Response

Returns a JSON object with required status and progress fields, plus optional details, total_files, and completed_files fields. status is a string enum that indicates the aggregate state, and progress is an integer from 0 to 100.

AttributeTypeMandatoryDescription
statusENUMYesAggregate status. Allowed values: unknown, queued, processing, done, failed.
detailsObject ArrayNoPer-job status entries. Each item includes:<br>- job_id (String)<br>- status (String)<br>- progress (Integer)
progressIntegerYesAggregate progress percentage. Minimum 0, maximum 100.
total_filesIntegerNoTotal number of files included in the aggregate.
completed_filesIntegerNoNumber of files completed so far.

Query parameters

Name
Type
Description
job_idsREQUIRED
string
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.