apyhub
DEVELOPER TOOLS · FILE MANIPULATION

Split Excel API

Hosted on ApyHub

What it does

Excel Splitter takes one or more Excel workbooks and splits each file into separate workbooks based on the values in a chosen column. Send .xlsx or .xlsm files, plus the sheet index and target column index for each file, and you get back job records you can track while the split runs.

The main response includes a jobs array with job_id, filename, status, progress, and the sheet and column indices used for each file. Use the status endpoint to check an individual job by job_id, or the overall-status endpoint to track multiple jobs together with aggregated status, progress, total_files, completed_files, and per-job details.

When a job finishes, download the resulting split workbook with the download endpoint using the same job_id. This is useful when you need to break a sales export, customer list, or inventory sheet into one workbook per group value without doing the split manually in spreadsheet software.

Excel Splitter is a file manipulation utility for backend workflows, batch processing, and internal ops tools where spreadsheet partitioning needs to happen programmatically.

▣ ENDPOINT 01 / 04
POST
Split Excel files into one workbook per value group in a column
http://localhost:8080/flowdocs/split-excel
QUICKSTARTGUIDE

Quickstart

Upload one or more Excel files to split them into separate jobs.

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

What you'll get back

Returns a JSON object with a jobs array. Each item in jobs includes the required job_id, filename, status, and progress fields, and may also include sheet_index and target_column_index.

{
  "jobs": [
    {
      "job_id": "a1b2c3d4",
      "filename": "report.pdf",
      "status": "queued",
      "progress": 0
    }
  ]
}
TRY ITLIVE · 50 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*
Excel files (.xlsx, .xlsm) to split.
sheet_index
Sheet number per file (1-based), one value per uploaded file.
target_column_index
Column number to split by per file (1-based), one value per uploaded file.

About this endpoint

What it does

Splits uploaded Excel files into separate workbooks based on the values found in a specified column. The request takes one or more files and, for each uploaded file, the sheet index and target column index to use for the split.

Request Body

ParameterTypeMandatoryDescription
filesString ArrayYesExcel files (.xlsx, .xlsm) to split. Max File Upload limit - 5
sheet_indexString ArrayNoSheet number per file (1-based), one value per uploaded file.
target_column_indexString ArrayNoColumn number to split by per file (1-based), one value per uploaded file.

Response

Returns a JSON object with a jobs array field. Each item in jobs is an object containing job_id, status, filename, and progress, with optional sheet_index and target_column_index fields. This endpoint returns job submissions, so the result is processed asynchronously.

ParameterTypeMandatoryDescription
jobsObject ArrayYesArray of job objects. Each job includes:<br>- job_id (String): Job identifier.<br>- status (String): Job status.<br>- filename (String): Filename associated with the job.<br>- progress (Integer): Progress value.<br>- sheet_index (Integer): Sheet number used for the job, if present.<br>- target_column_index (Integer): Column number used for the job, if present.

Notes

This endpoint kicks off an async job and returns immediately with a job identifier; the actual work runs in the background. Pair this call with the corresponding job_check endpoint — poll that until the status reaches a terminal state to retrieve the result. Extract the job id from jobs[].job_id.

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 an Excel split job
http://localhost:8080/flowdocs/split-excel/status/:job_id
QUICKSTARTGUIDE

Quickstart

Check the status of a split-excel job by its job_id.

curl -X GET "http://localhost:8080/flowdocs/split-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 an optional error string or null.

{
  "job_id": "job_12345",
  "status": "processing",
  "progress": 42,
  "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

Returns the current status of an Excel split job identified by job_id. The response includes the job identifier, a status value, and progress information, with an optional error message when present.

Path Parameter(s)

AttributeTypeMandatoryDescription
job_idStringYesIdentifies the Excel split job.

Response

Returns a JSON object with job_id as a String, status as a String enum, progress as an Integer, and error as a nullable String. The success response is the job status payload for the split job.

AttributeTypeMandatoryDescription
job_idStringYesIdentifies the Excel split job.
statusENUMYesJob status. Allowed values: queued, processing, done, failed.
progressIntegerYesProgress percentage from 0 to 100.
errorStringNoError message when present; nullable.

Path parameters

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

Quickstart

Download the split Excel file for a completed job by replacing job_id in the path.

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

What you'll get back

Returns the binary file contents directly, not a JSON object. The response schema is a string with format: "binary".

<binary file data>
TRY ITLIVE · 5 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 output file for a completed Excel split job. The request uses the job_id in the path and the response is the binary file content itself.

Path Parameter(s)

AttributeTypeMandatoryDescription
job_idStringYesIdentifies the finished split job to download.

Response

Returns a binary response body (string with binary format) containing the downloaded Excel split output file.

AttributeTypeMandatoryDescription
bodyStringYesBinary file content for the finished split output.

Path parameters

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

Quickstart

Check the overall status for one or more split jobs by passing the required job_ids query parameter.

curl -X GET "http://localhost:8080/flowdocs/split-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 (unknown, queued, processing, done, or failed)
  • progress is an integer from 0 to 100
  • details is an array of objects with job_id, status, and progress
  • total_files and completed_files are integers
{
  "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 the aggregate progress for one or more Excel split jobs. Provide the job ID(s) in the query string to get an overall status, overall progress, and per-job details.

Query Parameter(s)

AttributeTypeMandatoryDescription
job_idsStringYesJob ID(s) to aggregate.

Response

Returns a JSON object with status and progress as required top-level fields. It may also include details, total_files, and completed_files to provide per-job and summary progress information.

ParameterTypeMandatoryDescription
statusENUMYesOverall job status. Allowed values: unknown, queued, processing, done, failed.
progressIntegerYesOverall progress as a percentage from 0 to 100.
detailsObject ArrayNoPer-job progress details. Each item may include:<br>- job_id (String)<br>- status (String)<br>- progress (Integer)
total_filesIntegerNoTotal number of files across the split jobs.
completed_filesIntegerNoNumber of files that have been completed.

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.