PDF metadata
Metadata is an API that reads or changes a PDF's internal info: title, author, subject, keywords, who created it, and its dates. Great for organizing documents generated in bulk from n8n, Make or Zapier, with no servers to maintain.
How it works
You send a PDF. If you don't send anything else, you get its current metadata back (read mode). If you send any field (say, title), you get back the same PDF with that field updated (write mode): only the fields you send are touched, everything else stays as it was.
All you need
- Your API key. Create it in your dashboard with "+ Create key". It's shown only once, so copy and save it.
- In your automation platform, an "HTTP Request" step (n8n, Make, Zapier, Pipedream… all have one).
Read a PDF's metadata
You send your PDF as is (as binary data), nothing else, and get its data back in JSON. In the HTTP Request node:
- Method:
POST - URL:
https://api.cofferdock.com/pdf-metadata - Send Headers: on → add two:
x-api-key= your key, andContent-Type=application/pdf - Send Body: on → choose the binary file option (in n8n: "n8n Binary File", with your PDF's binary property, usually
data)
The response carries { "metadata": { "title": "...", "author": "...", ... } }.
Change the title, author or other fields
Add whichever fields you want to change as Query Parameters, e.g. title = Invoice 2026. Under Options → Response → Response Format choose File to get the updated PDF directly.
In Make: same method and URL, the fields to change in Query String, the two headers, and the PDF as binary data in the body.
Available fields
| Field | What it does |
|---|---|
title | Document title. |
author | Author. |
subject | Subject/description. |
keywords | Comma-separated keywords, e.g. invoice,2026,client. |
creator | Program/person who created the original document. |
producer | Who generated this specific PDF. |
creation_date | Creation date, format 2026-08-02T10:00:00Z. |
modification_date | Last modified date, same format. |
API overview
- Endpoint:
POST https://api.cofferdock.com/pdf-metadata - Auth: header
x-api-key: YOUR_KEY. - Input: the PDF goes in the body as
application/pdf(raw) or asapplication/jsonwith{ "file": "<base64>", ... }. - Mode: no metadata fields → read, returns
metadata. At least one (even empty, to clear that field) → write. - Write output: by default, with
application/pdfit returns the binary; with JSON it returns base64 inpdf.output=pdf/output=jsonforces either. Read is always JSON. - Limits: input PDF up to 20 MB (50 MB on Business/Scale) in
application/pdfmode, or ~4 MB real in JSON with base64. 30 requests/min per IP. 1 call = 1 credit, read or write equally.
Fields
| Field | Type | Notes |
|---|---|---|
title, author, subject, creator, producer | string | - |
keywords | string (comma) or array | Read responses always return an array. The PDF itself only stores a single string internally, so the read array is an approximation (split on whitespace), not an exact round-trip. |
creation_date, modification_date | ISO 8601 string | Invalid format → 400. |
file | base64 string | JSON mode only. |
output | pdf/json | Write mode only. |
Examples
curl (read metadata):
curl -X POST "https://api.cofferdock.com/pdf-metadata" \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/pdf" \
--data-binary @document.pdf
JavaScript (Node 18+, change title and author):
const fs = require('fs');
const r = await fetch('https://api.cofferdock.com/pdf-metadata?title=Invoice%202026&author=My%20Company', {
method: 'POST',
headers: { 'x-api-key': 'YOUR_KEY', 'Content-Type': 'application/pdf' },
body: fs.readFileSync('document.pdf'),
});
fs.writeFileSync('updated.pdf', Buffer.from(await r.arrayBuffer()));
Python:
import requests
r = requests.post(
'https://api.cofferdock.com/pdf-metadata',
params={'title': 'Invoice 2026', 'keywords': 'invoice,2026,client'},
headers={'x-api-key': 'YOUR_KEY', 'Content-Type': 'application/pdf'},
data=open('document.pdf', 'rb').read(),
)
open('updated.pdf', 'wb').write(r.content)
Response shape
Read:
{ "success": true, "mode": "read",
"metadata": { "title": "Invoice 001", "author": "My Company", "subject": null,
"keywords": ["invoice","2026"], "creator": null, "producer": "pdf-lib …",
"creation_date": "2026-07-01T12:00:00.000Z", "modification_date": null, "page_count": 3 },
"meta": { "used": 12, "remaining": 488 } }
Write (with output=json):
{ "success": true, "mode": "write", "pdf": "JVBERi0xLjQ…", "mime_type": "application/pdf",
"meta": { "fields_updated": 2, "used": 13, "remaining": 487 } }
What you get back
Read mode: a JSON object with the current metadata. Write mode: the updated PDF itself (or in base64 with output=json).