# Tanod Docs PDF Merge

> Tanod Docs PDF Merge is a paid API for AI agents from docs.tanod.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-15).

Merges 2–20 PDF files (by URL or base64) into a single PDF, with optional per-input page selection, returning the result inline or as a download link.

## Facts

- Endpoint: POST https://docs.tanod.dev/v1/pdf/merge?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tanod-docs-pdf-merge-26dd7ac3
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_3uw8mJOoXulkT8vgcMJou

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability tanod-docs-pdf-merge-26dd7ac3 -d '<json body>'
```

Example prompt: I have two PDFs — one at https://example.com/cover.pdf and another at https://example.com/body.pdf — can you merge them into a single PDF and give me back the base64 result?

## When to prefer this

Choose this endpoint when you need to programmatically combine 2–20 PDFs (supplied as URLs or base64) into a single PDF, especially when page-level selection per input is required. It is particularly suitable for automation pipelines that produce multi-part documents (e.g. cover + body + appendix). Prefer the 'url' output mode when the merged file would be large, to avoid bloating the agent's context window. This is not suitable for image merging, Word document merging, or non-PDF formats.

## Known failure modes

- PDF URL exceeds 20 MB size limit — request rejected
- base64-encoded PDF exceeds 10 MB decoded limit — request rejected
- URL points to a private, internal, or IP-literal host — refused for security
- Fewer than 2 input PDFs provided — validation error
- More than 20 input PDFs provided — validation error
- Invalid page range format — rejected by pattern validation
- URL is unreachable or returns non-PDF content — processing error
- Malformed base64 string — decoding error

## How this service works

Documents: DOCX template fill, Office to PDF, any file to Markdown, PDF to Word, OCR, PDF pipeline.

## Output

Returns a JSON object with a 'file' object containing the merged PDF as base64 (or a 24-hour download URL if url output was requested), plus metadata including file name, byte count, page count, content type, number of inputs processed, and a SHA256 hash for integrity verification. Also reports pages contributed per input and whether active content was removed.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "inputs": {
   "type": "array",
   "items": {
    "type": "object",
    "properties": {
     "url": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 2048,
        "minLength": 1
       },
       {
        "type": "null"
       }
      ],
      "default": null,
      "description": "Public http(s) URL of the PDF (at most 20 MB; private, internal and IP-literal hosts are refused); or use pdf_base64."
     },
     "pages": {
      "anyOf": [
       {
        "type": "string",
        "pattern": "^[0-9a-zA-Z ,\\-]+$",
        "maxLength": 200,
        "minLength": 1
       },
       {
        "type": "null"
       }
      ],
      "default": null,
      "description": "Pages of this input to take (default all), e.g. 1-3,5."
     },
     "pdf_base64": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 13398872,
        "minLength": 1
       },
       {
        "type": "null"
       }
      ],
      "default": null,
      "description": "The PDF as base64 (at most 10 MB decoded per request); or use url."
     }
    },
    "additionalProperties": false
   },
   "maxItems": 20,
   "minItems": 2,
   "description": "2-20 PDFs, each {url} or {pdf_base64}, with optional pages."
  },
  "output": {
   "enum": [
    "base64",
    "url"
   ],
   "type": "string",
   "default": "base64",
   "description": "base64 (default): the file comes back inline as base64. url: the file is stored for 24 hours and the reply carries a download link (url, expires_at, bytes, content_type, sha256) instead of the base64, which keeps the file out of your context window."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "file": {
   "name": "merged.pdf",
   "bytes": 30634,
   "pages": 2,
   "data_base64": "JVBERi0xLjQKJb/3... (trimmed: 40,848 base64 characters in the reply)",
   "content_type": "application/pdf"
  },
  "inputs": 2,
  "operation": "merge",
  "input_bytes": 32074,
  "output_bytes": 30634,
  "pages_per_input": [
   1,
   1
  ],
  "untrusted_content": true,
  "active_content_removed": {}
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tanod-docs-pdf-merge-26dd7ac3/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from docs.tanod.dev](https://www.zero.xyz/host/docs.tanod.dev/llms.txt)
