/// EDIT
FreeReorder PDF Pages API
Rearrange pages by an explicit order list — duplicate a page by naming it twice.
/// Quick answer
Reorder rebuilds the PDF's pages in exactly the order you list, 1-based. By default the order must include every source page exactly once (validated: true) — set validated: false to allow a partial reorder, and allow_duplicates: true to let the same page number appear more than once, which duplicates that page in the output.
How does the Reorder PDF Pages API work?
One HTTP request from any language. Every ASHDOCS endpoint uses the same X-API-Key header.
curl -X POST https://www.ashdocs.com/api/v2/tools/pdf-reorder \
-H "X-API-Key: ash_live_..." \
-F "file=@document.pdf" \
-F 'options={"order":[2,1,3,4,5,6,7,8,9,10]}'import requests
r = requests.post(
"https://www.ashdocs.com/api/v2/tools/pdf-reorder",
headers={"X-API-Key": "ash_live_..."},
files=[("file", open("document.pdf", "rb"))],
data={"options": '{"order":[2,1,3,4,5,6,7,8,9,10]}'},
)
job = r.json()
print(job["status"], job.get("url"))import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("file", new Blob([await readFile("document.pdf")]), "document.pdf");
form.append("options", JSON.stringify({"order":[2,1,3,4,5,6,7,8,9,10]}));
const res = await fetch("https://www.ashdocs.com/api/v2/tools/pdf-reorder", {
method: "POST",
headers: { "X-API-Key": "ash_live_..." },
body: form,
});
const job = await res.json();
console.log(job.status, job.url);using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "ash_live_...");
using var form = new MultipartFormDataContent();
form.Add(new ByteArrayContent(await File.ReadAllBytesAsync("document.pdf")), "file", "document.pdf");
form.Add(new StringContent("{\"order\":[2,1,3,4,5,6,7,8,9,10]}"), "options");
var res = await client.PostAsync("https://www.ashdocs.com/api/v2/tools/pdf-reorder", form);
var job = await res.Content.ReadAsStringAsync();
Console.WriteLine(job);import java.io.ByteArrayOutputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class Sample {
static final String BOUNDARY = "AshdocsBoundary7MA4YWxkTrZu0gW";
public static void main(String[] args) throws Exception {
ByteArrayOutputStream body = new ByteArrayOutputStream();
addFile(body, "file", "document.pdf");
addField(body, "options", "{\"order\":[2,1,3,4,5,6,7,8,9,10]}");
body.write(("--" + BOUNDARY + "--\r\n").getBytes(StandardCharsets.UTF_8));
HttpRequest req = HttpRequest.newBuilder(URI.create("https://www.ashdocs.com/api/v2/tools/pdf-reorder"))
.header("X-API-Key", "ash_live_...")
.header("Content-Type", "multipart/form-data; boundary=" + BOUNDARY)
.POST(HttpRequest.BodyPublishers.ofByteArray(body.toByteArray()))
.build();
HttpResponse<String> res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
}
static void addFile(ByteArrayOutputStream body, String name, String path) throws Exception {
body.write(("--" + BOUNDARY + "\r\nContent-Disposition: form-data; name=\"" + name + "\"; filename=\""
+ Path.of(path).getFileName() + "\"\r\nContent-Type: application/octet-stream\r\n\r\n").getBytes(StandardCharsets.UTF_8));
body.write(Files.readAllBytes(Path.of(path)));
body.write("\r\n".getBytes(StandardCharsets.UTF_8));
}
static void addField(ByteArrayOutputStream body, String name, String value) throws Exception {
body.write(("--" + BOUNDARY + "\r\nContent-Disposition: form-data; name=\"" + name + "\"\r\n\r\n"
+ value + "\r\n").getBytes(StandardCharsets.UTF_8));
}
}#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl = curl_easy_init();
if (!curl) return 1;
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "X-API-Key: ash_live_...");
curl_mime *mime = curl_mime_init(curl);
curl_mimepart *part;
part = curl_mime_addpart(mime);
curl_mime_name(part, "file");
curl_mime_filedata(part, "document.pdf");
part = curl_mime_addpart(mime);
curl_mime_name(part, "options");
curl_mime_data(part, "{\"order\":[2,1,3,4,5,6,7,8,9,10]}", CURL_ZERO_TERMINATED);
curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);
curl_easy_setopt(curl, CURLOPT_URL, "https://www.ashdocs.com/api/v2/tools/pdf-reorder");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
CURLcode rc = curl_easy_perform(curl);
printf("\n");
curl_mime_free(mime);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
return rc == CURLE_OK ? 0 : 1;
}Common use cases
- →Fixing a scanned document's page order
- →Moving a signature page to the end
- →Duplicating a cover page across a batch
RELATED TOOLS
Crop PDF API
Crop to an exact box in mm, or automatically to the page's text bounds plus a margin.
Stamp PDF API — text, image or Bates numbering
Text, an image, or sequential Bates numbers — nine anchors or exact coordinates, with opacity and rotation.
PDF Info API — inspect a PDF without opening it
Page count, sizes, fonts embedded or not, forms, tagging, PDF/A claim, linearization — one call.