Remove a PDF's password
Remove password is an API that strips the password from a protected PDF, as long as you know it. Great for unlocking your own documents inside an automated flow in n8n, Make or Zapier, with no servers to maintain.
How it works
You send a protected PDF and its current password, and get back the same PDF without it: it will open directly, no prompt. Nothing is stored: it's generated on the fly.
Important: this tool needs you to already know the password. It's not an "unlocker" that guesses or cracks forgotten passwords.
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).
- The PDF's current password.
How to use it in n8n (step by step)
You send your PDF as is (as binary data) and the current password as a parameter. In the HTTP Request node:
- Method:
POST - URL:
https://api.cofferdock.com/pdf-unprotect - Send Query Parameters: on, and add
password= the PDF's current password. - 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) - Under Options → Response → Response Format: choose File
In Make (HTTP → Make a request module): same method and URL, password in Query String, the two headers, and the PDF as binary data in the body.
Options
| Option | Default | What it does |
|---|---|---|
password | - | Required. The PDF's CURRENT password (not a new one, there's no "set a new one" here). |
API overview
- Endpoint:
POST https://api.cofferdock.com/pdf-unprotect - Auth: header
x-api-key: YOUR_KEY. - Input: the PDF goes in the body as
application/pdf(raw, withpasswordas a Query param) or asapplication/jsonwith{ "file": "<base64>", "password": "..." }. - Output: by default, with
application/pdfit returns the binary; with JSON it returns base64 inpdf.output=pdf/output=jsonforces either. - Wrong password: 400
{"error":"Incorrect password"}, and the credit is refunded (a failed attempt isn't charged). - 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 successful call = 1 credit.
Options
| Option | Default | Description |
|---|---|---|
password | - | Required. The PDF's current password. |
file | - | JSON mode only: the PDF in base64. |
output | per mode | pdf (binary) or json (base64). |
Examples
curl (raw PDF):
curl -X POST "https://api.cofferdock.com/pdf-unprotect?password=SuperSecret123" \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/pdf" \
--data-binary @protected.pdf \
-o unlocked.pdf
JavaScript (Node 18+):
const fs = require('fs');
const r = await fetch('https://api.cofferdock.com/pdf-unprotect?password=SuperSecret123', {
method: 'POST',
headers: { 'x-api-key': 'YOUR_KEY', 'Content-Type': 'application/pdf' },
body: fs.readFileSync('protected.pdf'),
});
if (r.status === 400) {
console.error('Wrong password or other error:', await r.json());
} else {
fs.writeFileSync('unlocked.pdf', Buffer.from(await r.arrayBuffer()));
}
Python:
import requests
r = requests.post(
'https://api.cofferdock.com/pdf-unprotect',
params={'password': 'SuperSecret123'},
headers={'x-api-key': 'YOUR_KEY', 'Content-Type': 'application/pdf'},
data=open('protected.pdf', 'rb').read(),
)
open('unlocked.pdf', 'wb').write(r.content)
JSON mode (base64 response)
{ "file": "JVBERi0xLjQ…", "password": "SuperSecret123" }
→ { "success": true, "pdf": "JVBERi0xLjQ…", "mime_type": "application/pdf",
"meta": { "used": 12, "remaining": 488 } }
What you get back
The PDF without a password, directly, ready to save or send. (In JSON mode, the PDF comes in base64.)