Organise
Split PDF
Break one PDF into multiple parts — by page range, by fixed page count, or by top-level bookmark. Every part is delivered together as a single ZIP.
Free to try — no key required 10 credits / callSynchronous
Overview
Upload one PDF, choose a split_mode, and get back a public R2 URL to a ZIP containing every output part. Text, links, annotations and forms are preserved in each part.
POST
https://api.bytefuse.in/api/v1/pdf/split/splitThe path segment is doubled
As with merge, the real path is/api/v1/pdf/split/split — the router prefix and route both contribute a split segment.Request
Content type multipart/form-data:
filefilerequiredThe single PDF to split.
split_modestringrequiredThe split strategy — see the modes table below.
split_configstring (JSON)requiredJSON config for the chosen mode. Its shape depends on
split_mode. Malformed JSON returns 400.optionsstring (JSON)optionalAccepted but not used by the current implementation.Default:
nullasync_processingbooleanoptionalAccepted but ignored — always synchronous.Default:
falseSplit modes
split_modesplit_config & behaviour
page_range{"ranges": [[1,3],[4,10]]} — list of [start, end] pairs, 1-based and inclusive. One output PDF per range.page_count{"pages_per_file": 5} — one output PDF every N pages.bookmarks{} — one output PDF per top-level bookmark, named NN_<title>.pdf. Errors with 400 if the PDF has no top-level bookmarks.(other)Any other value falls back to one PDF per page.Caps and quirks
A split is capped at 200 output parts (beyond that returns400). Tier/mode gating is not enforced on this path, and “AI/content” modes silently fall back to one-file-per-page.Response
200 OK, application/json — always a single ZIP:
200 OK
{
"job_id": "...",
"status": "completed",
"output_url": "https://<r2-host>/split/20260704/<uuid>.zip",
"pages": 42,
"size": 987654,
"message": "Split into 9 file(s)"
}job_idstringoptionalFresh UUID, not queryable.
statusstringoptionalAlways
"completed".output_urlstringoptionalPublic R2 URL to a single ZIP (
<name>_split.zip) of all parts. No expires_at.pagesintoptionalPage count of the input document.
sizeintoptionalByte size of the ZIP.
messagestringoptionale.g.
"Split into 9 file(s)".The response header X-Credits-Charged is 1 per call regardless of how many parts are produced (0 anonymous).
Examples
# split every 5 pages
curl -X POST https://api.bytefuse.in/api/v1/pdf/split/split \
-H "X-API-Key: dt_live_your_key" \
-F "file=@report.pdf" \
-F "split_mode=page_count" \
-F 'split_config={"pages_per_file": 5}'
# extract specific ranges
curl -X POST https://api.bytefuse.in/api/v1/pdf/split/split \
-F "file=@report.pdf" \
-F "split_mode=page_range" \
-F 'split_config={"ranges": [[1,3],[10,12]]}'Errors
400Malformed
split_config, no bookmarks (bookmarks mode), more than 200 parts, or a config that yields no output.402 / 429 / 503Insufficient credits, rate limited, or capacity/config error.
500The split operation failed unexpectedly.
