---
title: "PDF split API"
canonical_url: "https://www.nutrient.io/guides/dws-processor/tools-and-api/pdf-split-api/"
md_url: "https://www.nutrient.io/guides/dws-processor/tools-and-api/pdf-split-api.md"
last_updated: "2026-07-06T00:00:00.000Z"
description: "Split PDFs and extract page ranges using Nutrient DWS Processor API. Create new PDF files from selected pages with zero-based page indexes."
---

# PDF split API

Use the PDF split API to create a new PDF from selected pages of an existing PDF. The [`/build` endpoint](https://www.nutrient.io/api/reference/public/#tag/Document-Editing/operation/build-document) handles the split operation. Add the source PDF as a `parts` item, and set a `pages` range for the pages you want in the output.

For signup, pricing, and task-level examples, refer to the [split PDF API task page](https://www.nutrient.io/api/split-pdf-api/).

## Extract a page range

The following example extracts the first three pages from `document.pdf` and writes them to `result.pdf`.

Page indexes are zero-based, so page `0` is the first page. The `end` value is inclusive, so `{ "start": 0, "end": 2 }` includes pages zero, one, and two.

### Shell

### Shell (Windows)

### Java

### C#

### JavaScript

### Python

### PHP

### HTTP

## Split a PDF into two files

The `/build` endpoint returns one output file per request. To split one PDF into two separate PDFs, send two requests with complementary page ranges.

The following example creates these files:

- `first_half.pdf` — All pages except the last five.

- `second_half.pdf` — The last five pages.

Negative page indexes count from the end of the document. For example, `-1` is the last page, `-2` is the second-to-last page, and so on.

### Shell

Run these requests to create two output PDFs:

```bash

curl -X POST https://api.nutrient.io/build \
  -H "Authorization: Bearer $NUTRIENT_API_KEY" \
  -F document=@document.pdf \
  -F 'instructions={
    "parts": [
      {
        "file": "document",
        "pages": {
          "end": -6
        }
      }
    ]
  }' \
  -o first_half.pdf

curl -X POST https://api.nutrient.io/build \
  -H "Authorization: Bearer $NUTRIENT_API_KEY" \
  -F document=@document.pdf \
  -F 'instructions={
    "parts": [
      {
        "file": "document",
        "pages": {
          "start": -5
        }
      }
    ]
  }' \
  -o second_half.pdf

```

## Extract pages from a remote PDF

For remotely hosted source files, send a JSON request and pass the source URL in `parts[].file.url`. Use this instructions object:

```json

{
  "parts": [
    {
      "file": {
        "url": "https://example.com/document.pdf"
      },
      "pages": {
        "start": 3,
        "end": 7
      }
    }
  ]
}

```

### Shell

Run this request to extract pages from a remote PDF:

```bash

curl -X POST https://api.nutrient.io/build \
  -H "Authorization: Bearer $NUTRIENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "parts": [
      {
        "file": {
          "url": "https://example.com/document.pdf"
        },
        "pages": {
          "start": 3,
          "end": 7
        }
      }
    ]
  }' \
  -o result.pdf

```

## Extract the last page

Use `-1` for both `start` and `end` to extract only the last page of a document. Use this instructions object:

```json

{
  "parts": [
    {
      "file": "document",
      "pages": {
        "start": -1,
        "end": -1
      }
    }
  ]
}

```

## Create a packet from multiple page ranges

Include more than one `parts` item to assemble selected ranges into a single output PDF. Use this approach when you want to split out specific sections and combine them into a new packet.

The following example creates one PDF from pages zero through two and pages 10 through the end of the same source document:

```json

{
  "parts": [
    {
      "file": "document",
      "pages": {
        "start": 0,
        "end": 2
      }
    },
    {
      "file": "document",
      "pages": {
        "start": 10,
        "end": -1
      }
    }
  ]
}

```

The order of the `parts` array controls the page order in the output PDF.

## Split password-protected PDFs

If the source PDF is password-protected, include the password on the part. Use this instructions object:

```json

{
  "parts": [
    {
      "file": "protected_document",
      "password": "document-password",
      "pages": {
        "start": 0,
        "end": 2
      }
    }
  ]
}

```

Nutrient DWS Processor API uses the password only to open the source document for processing. To set a password on the output PDF, configure `output.user_password`, `output.owner_password`, and `output.user_permissions`.

## Combine splitting with other actions

The `/build` endpoint can extract pages and then apply actions to the resulting PDF. Actions run after Nutrient DWS Processor API assembles the selected `parts`.

The following example extracts pages zero through two and then rotates the output by 90 degrees:

```json

{
  "parts": [
    {
      "file": "document",
      "pages": {
        "start": 0,
        "end": 2
      }
    }
  ],
  "actions": [
    {
      "type": "rotate",
      "rotateBy": 90
    }
  ]
}

```

For workflows that include signing, extract or split the required pages before signing the final PDF.

## Reference

A PDF split request uses the Build API `parts` array. Each part can include an optional `pages` range:

```typescript

type PageRange = {
  // First page to include. Defaults to 0.
  // Page indexes are zero-based. Negative values count from the end.
  start?: number,

  // Last page to include. Defaults to -1, which means the last page.
  // The end value is inclusive.
  end?: number,
};

type FilePart = {
  // Multipart field name, or a remote URL object.
  file: string | { url: string },

  // Optional password for encrypted input PDFs.
  password?: string,

  // Optional page range to extract from this part.
  pages?: PageRange,
};

type BuildInstructions = {
  parts: FilePart[],
  actions?: BuildAction[],
  output?: {
    type?: "pdf",
  },
};

```

## Related API reference operations

- Refer to the [build document endpoint](https://www.nutrient.io/api/reference/public/#tag/Document-Editing/operation/build-document) API reference for extracting page ranges, assembling selected pages, and applying follow-up actions in a single request.

## Related guides

- Refer to the [PDF merge API](https://www.nutrient.io/guides/dws-processor/tools-and-api/pdf-merge-api.md) guide.

- Refer to the [PDF rotate API](https://www.nutrient.io/guides/dws-processor/tools-and-api/pdf-rotate-api.md) guide.

- Refer to the [PDF flatten API](https://www.nutrient.io/guides/dws-processor/tools-and-api/pdf-flatten-api.md) guide.

- Refer to the [PDF watermark API](https://www.nutrient.io/guides/dws-processor/tools-and-api/pdf-watermark-api.md) guide.

- Refer to the [PDF security API](https://www.nutrient.io/guides/dws-processor/tools-and-api/pdf-security-api.md) guide.

- Refer to the [tools and APIs](https://www.nutrient.io/guides/dws-processor/tools-and-api.md) guide.
---

## Related pages

- [Image-to-PDF API](/guides/dws-processor/tools-and-api/image-to-pdf-api.md)
- [Analyze Build API](/guides/dws-processor/tools-and-api/analyze-build-api.md)
- [Tools and APIs](/guides/dws-processor/tools-and-api.md)
- [Document-to-image API](/guides/dws-processor/tools-and-api/document-to-image-api.md)
- [Import Instant JSON API](/guides/dws-processor/tools-and-api/import-instant-json-api.md)
- [DOCX templating API](/guides/dws-processor/tools-and-api/docx-templating-api.md)
- [Import XFDF annotations API](/guides/dws-processor/tools-and-api/import-xfdf-annotations-api.md)
- [Office-to-PDF API](/guides/dws-processor/tools-and-api/office-to-pdf-api.md)
- [Markdown-to-PDF API](/guides/dws-processor/tools-and-api/markdown-to-pdf-api.md)
- [PDF digital signature API](/guides/dws-processor/tools-and-api/pdf-digital-signature-api.md)
- [PDF merge API](/guides/dws-processor/tools-and-api/pdf-merge-api.md)
- [PDF form filling API](/guides/dws-processor/tools-and-api/pdf-form-filling-api.md)
- [PDF flatten API](/guides/dws-processor/tools-and-api/pdf-flatten-api.md)
- [PDF OCR API](/guides/dws-processor/tools-and-api/pdf-ocr-api.md)
- [PDF generator API](/guides/dws-processor/tools-and-api/pdf-generator-api.md)
- [PDF linearization API](/guides/dws-processor/tools-and-api/pdf-linearization-api.md)
- [PDF rotate API](/guides/dws-processor/tools-and-api/pdf-rotate-api.md)
- [PDF optimization API](/guides/dws-processor/tools-and-api/pdf-optimization-api.md)
- [PDF security API](/guides/dws-processor/tools-and-api/pdf-security-api.md)
- [PDF page manipulation API](/guides/dws-processor/tools-and-api/pdf-page-manipulation-api.md)
- [PDF-to-HTML API](/guides/dws-processor/tools-and-api/pdf-to-html-api.md)
- [PDF-to-image API](/guides/dws-processor/tools-and-api/pdf-to-image-api.md)
- [PDF-to-Markdown API](/guides/dws-processor/tools-and-api/pdf-to-markdown-api.md)
- [PDF-to-Office API](/guides/dws-processor/tools-and-api/pdf-to-office-api.md)
- [PDF-to-PDF/A API](/guides/dws-processor/tools-and-api/pdf-to-pdfa-api.md)
- [PDF watermark API](/guides/dws-processor/tools-and-api/pdf-watermark-api.md)
- [Redaction API](/guides/dws-processor/tools-and-api/redaction-api.md)
- [PDF/UA auto-tagging API](/guides/dws-processor/tools-and-api/pdfua-api.md)

