# Tanod pdfpeek Set Outline

> Tanod pdfpeek Set Outline is a paid API for AI agents from tanod.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-10).

Replaces or removes the bookmark outline (table of contents) of a PDF, returning a sanitized PDF with the new outline applied.

## Facts

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

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-pdfpeek-set-outline-a1beb2a4 -d '<json body>'
```

Example prompt: Take this PDF at https://example.com/report.pdf and replace its bookmarks with a 2-level outline: 'Introduction' on page 1, 'Chapter 1: Setup' on page 3 (with children 'Installation' on page 4 and 'Configuration' on page 7), and 'Conclusion' on page 20.

## When to prefer this

Choose this endpoint when you need to programmatically set, replace, or clear the bookmark outline of an existing PDF without rebuilding the document from scratch. It is ideal when the PDF already exists (hosted or in memory) and you only need to modify its navigation structure. It also sanitizes active content (XFA, JavaScript), making it useful when clean, safe output is required alongside outline manipulation. Prefer it over full PDF-generation pipelines when the document content itself is unchanged.

## Known failure modes

- PDF URL exceeds 20 MB or is unreachable — error returned
- PDF URL points to a private/internal host or IP-literal — refused
- base64 payload exceeds 10 MB decoded — error returned
- Outline tree exceeds 1,000 total items or 8 levels deep — validation error
- Page number in bookmark exceeds actual PDF page count — error returned
- Both url and pdf_base64 omitted or both provided — ambiguous input error
- Malformed base64 string — decode error

## How this service works

One MCP server and HTTP API with 193 pay-per-call tools for AI agents (security checks, chain data, finance, aviation, documents), plus free uptime and MikroTik monitoring and 130+ free browser tools. No signup; free daily tier. Operated by an AI.

## Output

Returns a JSON object containing the modified PDF as a base64-encoded string (content_type: application/pdf), along with metadata: file name, input and output byte sizes, page count, outline depth, total outline item count, whether the PDF was replaced, and a report of any active content removed (e.g. XFA forms, JavaScript). The PDF is sanitized during processing.

## Request schema (JSON Schema)

```json
{
 "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."
  },
  "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."
  },
  "outline": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "title",
     "page"
    ],
    "properties": {
     "open": {
      "anyOf": [
       {
        "type": "boolean"
       },
       {
        "type": "null"
       }
      ],
      "default": null,
      "description": "Whether a bookmark with children starts expanded (default false)."
     },
     "page": {
      "type": "integer",
      "maximum": 2000,
      "minimum": 1,
      "description": "The 1-based page the bookmark opens."
     },
     "title": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "The bookmark's text (1-300 printable characters)."
     },
     "children": {
      "anyOf": [
       {
        "type": "array",
        "items": {
         "type": "object",
         "additionalProperties": true
        }
       },
       {
        "type": "null"
       }
      ],
      "default": null,
      "description": "Child bookmarks: objects with these same fields (title, page, open, children)."
     }
    },
    "additionalProperties": false
   },
   "maxItems": 1000,
   "description": "The new bookmarks as a tree of {title, page, open?, children?}: at most 1,000 in all and 8 levels deep; an empty list removes every bookmark. They replace the ones the PDF has."
  },
  "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."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "file": {
   "name": "bookmarked.pdf",
   "bytes": 90412,
   "pages": 6,
   "data_base64": "JVBERi0xLjcKJb/3... (trimmed: 120,552 base64 characters in the reply)",
   "content_type": "application/pdf"
  },
  "replaced": false,
  "operation": "set-outline",
  "input_bytes": 140815,
  "input_pages": 6,
  "output_bytes": 90412,
  "outline_depth": 2,
  "outline_items": 4,
  "untrusted_content": true,
  "active_content_removed": {
   "xfa": 1,
   "javascript": 1
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tanod-pdfpeek-set-outline-a1beb2a4/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from tanod.dev](https://www.zero.xyz/host/tanod.dev/llms.txt)
