Endpoint

POST https://documentdelta.com/api/compare

Request

Send a multipart/form-data request with two DOCX files:

FieldTypeDescription
originalFileThe base version of the document (.docx, max 500 KB)
modifiedFileThe updated version to compare against (.docx, max 500 KB)

Response

StatusContent-TypeBody
200application/vnd.openxmlformats-...The compared DOCX file with tracked changes
400application/json{ "error": "..." } — missing files, empty files, non-.docx, or invalid document
413application/json{ "error": "..." } — file exceeds 500 KB limit
429Rate limit exceeded (10 requests/hour)
500application/json{ "error": "..." } — comparison engine error

Rate Limits

The public API allows 10 requests per hour per IP address. Need higher limits? Contact us about enterprise access.

Examples

cURL

curl -X POST https://documentdelta.com/api/compare \
  -F "original=@original.docx" \
  -F "modified=@modified.docx" \
  -o compared.docx

C# / .NET

using var client = new HttpClient();
using var form = new MultipartFormDataContent();

form.Add(new ByteArrayContent(
    File.ReadAllBytes("original.docx")), "original", "original.docx");
form.Add(new ByteArrayContent(
    File.ReadAllBytes("modified.docx")), "modified", "modified.docx");

var response = await client.PostAsync(
    "https://documentdelta.com/api/compare", form);

response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("compared.docx", result);

Python

import requests

files = {
    "original": open("original.docx", "rb"),
    "modified": open("modified.docx", "rb"),
}

response = requests.post(
    "https://documentdelta.com/api/compare", files=files
)
response.raise_for_status()

with open("compared.docx", "wb") as f:
    f.write(response.content)

JavaScript (Node.js)

const fs = require("fs");

const form = new FormData();
form.append("original", new Blob([fs.readFileSync("original.docx")]));
form.append("modified", new Blob([fs.readFileSync("modified.docx")]));

const response = await fetch(
    "https://documentdelta.com/api/compare",
    { method: "POST", body: form }
);

if (!response.ok) throw new Error(await response.text());
const buffer = await response.arrayBuffer();
fs.writeFileSync("compared.docx", Buffer.from(buffer));

PowerShell

$original = Get-Item "original.docx"
$modified = Get-Item "modified.docx"

$form = @{
    original = $original
    modified = $modified
}

$response = Invoke-RestMethod `
    -Uri "https://documentdelta.com/api/compare" `
    -Method Post `
    -Form $form `
    -OutFile "compared.docx"

Java

HttpClient client = HttpClient.newHttpClient();

var boundary = "----FormBoundary" + System.currentTimeMillis();
byte[] original = Files.readAllBytes(Path.of("original.docx"));
byte[] modified = Files.readAllBytes(Path.of("modified.docx"));

var body = buildMultipart(boundary, original, modified);

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://documentdelta.com/api/compare"))
    .header("Content-Type", "multipart/form-data; boundary=" + boundary)
    .POST(HttpRequest.BodyPublishers.ofByteArray(body))
    .build();

HttpResponse<byte[]> response = client.send(
    request, HttpResponse.BodyHandlers.ofByteArray());

Files.write(Path.of("compared.docx"), response.body());

Try It Now

No API key needed. Upload two documents and see the result.

Open the Demo