Docs

Advanced PDF compression

Choose lossless optimization or a lossy PDF compression preset.

POST /v1/pdf/compress-advanced. Authenticated with your RelayPDF API key. Choose binary output, a temporary download URL, or an asynchronous job.

Request example

Replace the example input URL with a publicly accessible file you control. The example authorizes up to $1; successful work is charged for measured usage. Use a new idempotency key for a different request.

curl
curl https://api.relaypdf.com/v1/pdf/compress-advanced \
  -H "Authorization: Bearer $RELAYPDF_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: compress-example-001" \
  -H "X-RelayPDF-Max-Charge-Microdollars: 1000000" \
  --data '{"url":"https://example.com/input.pdf","response":"url","filename":"compressed.pdf","options":{"preset":"ebook"}}'

Input and response

Provide exactly one of url, file, or fileId. All other fields are optional unless an operation option is marked required.

FieldMeaning
urlHTTPS input URL; public URL input is limited to 15 MiB.
fileBase64 input, optionally a data URI; decoded limit 15 MiB.
fileIdPrivate upload ID from POST /v1/files; maximum 100 MiB.
responsebinary (default), url, or async.
filenameOptional output filename matching the actual output extension.
callbackUrlOptional HTTPS per-job callback; unsigned.
optionsOnly use the options documented for the selected operation.

Operation options

Pass these fields inside the options object. Unknown or irrelevant options should not be relied upon.

OptionDefaultMeaning
presetlosslesslossless, screen, ebook, or printer.
passwordNoneInput password.

Output and limitations

Lossy presets can change images, forms, annotations, and tags. Compare representative outputs before choosing a preset. Existing /v1/pdf/compress remains available with its original behavior.

PDF inputs are limited to 500 pages and returned output to 32 MiB. Uploaded inputs expire after 24 hours. Download successful output before its 24-hour URL expires.

Failed jobs are unbilled. A 402 can mean insufficient available credit or a spending limit; a 409 indicates an idempotency conflict; a 413 indicates an exceeded size limit. Do not retry invalid inputs unchanged.

Node SDK

Use a release version containing client.process. With older published packages, call REST until the matching SDK version is available.

TypeScript
import { RelayPDF } from "@relaypdf/sdk";
const client = new RelayPDF({ apiKey: process.env.RELAYPDF_API_KEY! });
const result = await client.process("compress", {
  "url": "https://example.com/input.pdf",
  "response": "url",
  "filename": "compressed.pdf",
  "options": {
    "preset": "ebook"
  }
}, { idempotencyKey: "compress-example-002", maxChargeMicrodollars: 1_000_000 });
console.log(result);

Pricing and job lifecycle

The assigned native rate applies. Final release pricing is $0.0004 per successful job plus $0.0005 per native execution second. Existing accounts retain their assigned rate. Reservations reduce available credit before work; unused funds return after settlement. See /docs/billing and /docs/idempotency for receipts, limits, and retries.