Best Free Sign PDF
Drop a signature image or typed name onto a PDF page — free, no printing, no signup.
How it works
- Upload. Choose the PDF you need to sign (up to 100 MB).
- Add a signature. Upload a signature image or type your name, then set the page and position.
- Download. The signed PDF downloads automatically; nothing is stored.
About this tool
Sign PDF places a signature onto a page of your document. Upload an image of your signature to stamp it on, or type your name to drop a text signature, then set which page and where it lands. It is built for the everyday case of signing a form, a letter or a contract without printing, signing and scanning it back. The signature is embedded into the PDF itself. No watermark, no signup, processed in memory and discarded.
What people use it for
- Sign a contract or agreement without printing it
- Add your signature to a form before emailing it
- Place initials on a specific page of a document
- Stamp a typed signature when you have no scan
Developer API
Automate this tool from your own code. Send a POST request to the endpoint below and get the same result the web tool produces. It is rate-limited per IP and needs no signup — API keys for higher limits are coming.
https://best.free/api/tools/pdf-sign/
| Parameter | Example | Required | Notes |
|---|---|---|---|
file (file) |
contract.pdf |
Yes | PDF, ≤25 MB. |
signature (file) |
signature.png |
No | Signature image (PNG/JPG). Omit to use text. |
text |
Jane Doe |
No | Typed signature, used if no image is sent. |
page |
1 |
No | Page number to sign (default last). |
x |
350 |
No | X position in points from the left. |
y |
680 |
No | Y position in points from the top. |
width |
160 |
No | Signature width in points. |
curl -X POST https://best.free/api/tools/pdf-sign/ \
-F 'file=@contract.pdf' \
-F 'signature=@signature.png' \
-F 'text=Jane Doe' \
-F 'page=1' \
-F 'x=350' \
-F 'y=680' \
-F 'width=160' \
-o signed.pdf
import requests
files = {"file": open("contract.pdf", "rb"), "signature": open("signature.png", "rb")}
data = {"text": "Jane Doe", "page": 1, "x": 350, "y": 680, "width": 160}
r = requests.post("https://best.free/api/tools/pdf-sign/", files=files, data=data)
with open("signed.pdf", "wb") as out:
out.write(r.content)
const fd = new FormData();
fd.append("file", fileInput.files[0]);
fd.append("signature", fileInput.files[0]);
fd.append("text", "Jane Doe");
fd.append("page", 1);
fd.append("x", 350);
fd.append("y", 680);
fd.append("width", 160);
const r = await fetch("https://best.free/api/tools/pdf-sign/", { method: "POST", body: fd });
const blob = await r.blob(); // the signed.pdf
Response: The PDF with a signature image or text placed on a page.