apyhub
FILE CONVERSION

Convert PDF to Excel Job API

Hosted on ApyHub

What it does

PDF to Excel converts one or more PDF files into Excel spreadsheets and gives you a batch-oriented workflow for tracking each conversion.

Send PDF files in the files array and receive a batch_id plus a jobs list back. Each job includes a job_id, filename, status, and progress, so you can track individual files as they move through queued, processing, done, or failed states. Use GET /status/:job_id to check the status of a single job or batch, and GET /overall-status when you want aggregate progress across multiple job IDs.

When a conversion finishes, GET /download/:job_id returns the resulting .xlsx file as binary data. That makes this service a fit for document workflows that need spreadsheet output from uploaded reports, invoices, statements, or tables trapped inside PDFs.

If you are building an ingestion pipeline, PDF to Excel lets you submit multiple files, monitor progress, and fetch completed work without guessing when the output is ready.

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)
https://api.eu.apyhub.com/flowdocs/convert-pdf-to-excel

QUICKSTART

GUIDE

Quickstart

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

curl -X POST "https://api.eu.apyhub.com/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 batch_id string and a jobs array. Each job in jobs is an object with job_id, filename, status, and progress fields.

{
  "batch_id": "a1b2c3d4e5f6a7b8",
  "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 files. The request uploads PDF files in the body, and the response returns a batch identifier plus a list of per-file jobs.

Request Body

ParameterTypeMandatoryDescription
filesString ArrayYesPDF files to convert to Excel.

Response

Returns a JSON object with a required batch_id string and a required jobs array. Each item in jobs is an object describing one submitted file conversion job.

ParameterTypeMandatoryDescription
batch_idStringYesParent id for this submit; also returned as X-Apy-Job-Id.
jobsObject ArrayYesArray of per-file job objects.
jobs[].job_idStringYesJob identifier for the submitted file.
jobs[].filenameStringYesOriginal filename of the uploaded PDF file.
jobs[].statusStringYesJob status for the file conversion.
jobs[].progressIntegerYesProgress value for the file conversion job.
jobs[].batch_idStringNoParent batch id this child belongs to.

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
https://api.eu.apyhub.com/flowdocs/convert-pdf-to-excel/status/:job_id

QUICKSTART

GUIDE

Quickstart

Check the status of a conversion job by its job_id.

curl -X GET "https://api.eu.apyhub.com/flowdocs/convert-pdf-to-excel/status/:job_id/status/$JOB_ID" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object matching one of the documented status shapes. The common fields are job_id (string), status (queued, processing, done, or failed), and progress (integer 0–100). Some responses also include error, and batch jobs may include batch, jobs, total_files, completed_files, or batch_id.

{
  "job_id": "job-123",
  "status": "processing",
  "progress": 45
}
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 the current status of a PDF-to-Excel job by job_id. Depending on what the job represents, the response can describe a single job, a job that belongs to a batch, or a batch summary with per-job details.

Path Parameter(s)

AttributeTypeMandatoryDescription
job_idStringYesThe job identifier in the path.

Response

Returns a JSON object describing the job status. The response shape is one of three object variants, each including job_id, status, and progress, with additional fields depending on whether the response represents a batch summary or a batch child job.

ParameterTypeMandatoryDescription
job_idStringYesThe job identifier. In the batch-summary variant, this is the batch id.
batchBooleanYesPresent in the batch-summary variant only; the schema constrains it to true.
statusENUMYesJob status. Allowed values: queued, processing, done, failed.
progressIntegerYesProgress percentage from 0 to 100.
total_filesIntegerYesTotal number of files in the batch summary variant.
completed_filesIntegerYesNumber of completed files in the batch summary variant.
jobsObject ArrayYesArray of job objects in the batch summary variant. Each item may include: job_id (String), status (String), progress (Integer).
batch_idStringYesParent batch id in the batch-child variant. Billing happens at the parent, not here.
errorStringNoError message, if present. It is nullable in the schema.

Path parameters

Name
Type
Description
job_idREQUIRED
string
▣ ENDPOINT 03 / 04
GET
Download a finished PDF-to-Excel output
https://api.eu.apyhub.com/flowdocs/convert-pdf-to-excel/download/:job_id

QUICKSTART

GUIDE

Quickstart

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

curl -X GET "https://api.eu.apyhub.com/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
https://api.eu.apyhub.com/flowdocs/convert-pdf-to-excel/overall-status

QUICKSTART

GUIDE

Quickstart

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

curl -X GET "https://api.eu.apyhub.com/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.