---
name: "pdf123-add-stamp"
description: "Add text or add image stamps at set locations. Runs the PDF123 \"Add Stamp to PDF\" tool (pdf123.xyz) over its REST API with curl, no account needed. Use when the user wants this done to their file. Also known as: 添加图章, Añadir sello, मोहर लगाएँ, إضافة ختم, Adicionar carimbo, Tambah stempel, Ajouter un tampon, Добавить штамп, スタンプの追加, Stempel hinzufügen, 스탬프 넣기, Thêm dấu, Damga ekle, 加入圖章, Aggiungi timbro, ใส่ตรายาง, Dodaj pieczątkę, Поставити штамп, Stempel toevoegen, Tambah cop pada PDF, Lägg till stämpel, Προσθήκη σφραγίδας, Добавяне на печат, Afegeix un segell, Weka muhuri."
compatibility: "Needs curl 7.76+ and outbound HTTPS to pdf123.xyz, or PDFX_API_BASE pointing at a self-hosted pdfx-server."
---

# Add Stamp to PDF (PDF123)

Add text or add image stamps at set locations.

Web version: https://pdf123.xyz/add-stamp · All tools: https://pdf123.xyz/skills/pdf123.md

## When to use

- Put a single mark in a corner on every page
- Rotate a short stamp without tiling a full grid
- Use instead of Watermark when you do not want a repeating pattern

## Run it

Replace the sample file names and values with the user's, then run:

```bash
API="${PDFX_API_BASE:-https://pdf123.xyz}"
curl -sS --fail-with-body -X POST "$API/api/v1/misc/add-stamp" \
  -F "fileInput=@input.pdf" \
  -F "stampText=PDF123" \
  -F "fontSize=40" \
  -F "rotation=0" \
  -F "position=8" \
  -F "customColor=#d3d3d3" \
  --output-dir "pdf123-output/$(date +%Y%m%d-%H%M%S)" --create-dirs -OJ -w '%{filename_effective} %{content_type}\n'
```

## Inputs

Everything is `multipart/form-data`. The command above already sends each field with its default; keep them all and change only the values the user asked for, since some endpoints reject a missing optional field.

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `fileInput` | file | yes | | .pdf (one file) |
| `stampText` | text | no | `PDF123` | Stamp text |
| `fontSize` | number | yes | `40` | Font size |
| `rotation` | number | yes | `0` | Stamp rotation |
| `position` | choice | yes | `8` | Position. One of: `1` (Top-left), `2` (Top-center), `3` (Top-right), `4` (Middle-left), `5` (Middle-center), `6` (Middle-right), `7` (Bottom-left), `8` (Bottom-center), `9` (Bottom-right) |
| `customColor` | color (#rrggbb) | no | `#d3d3d3` | Color |

## Result

curl saves the result in a new `pdf123-output/<timestamp>/` directory under the server's file name and prints its path and content type. Several output files come back as one ZIP. Tell the user where the file is.

## Limits

- Text only, in Helvetica (Latin characters); other scripts are rejected
- The chosen position is where the text starts, not its center or right edge
- Applies to every page
- No transparency
- Upload limit on this website: 500 MB per file, sent in chunks above about 95 MB. A single direct API request body is capped at 100 MB.

## Errors

- A non-zero curl exit means the request failed. The saved file then holds `application/problem+json`; read it and report its `detail` to the user instead of retrying blindly.
- `413`: the upload exceeds 100 MiB. `429`: wait for `Retry-After` seconds, then retry once.
- Send `X-API-KEY: $PDFX_API_KEY` only if the user has a PDF123 API key; anonymous calls work without it.

## Privacy

Files are uploaded to the API host, processed, and deleted once the response is sent. For confidential files, ask before uploading, or use a self-hosted server via `PDFX_API_BASE`.

## Authorized use only

Only run this on documents the user owns or is authorized to modify. Do not use it to bypass someone else's access controls or alter signed records without a legitimate reason.
