# Tanod Docs PDF Form Fill

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

Fills PDF form fields (text, checkbox, radio, choice) with provided values and returns the filled PDF as base64 or a download URL.

## Facts

- Endpoint: POST https://docs.tanod.dev/v1/pdf/fill-form?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/tanod-docs-pdf-form-fill-5d44ba91
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_lVBYllFItv5gbsi5Xajxj

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-form-fill-5d44ba91 -d '<json body>'
```

Example prompt: Take this PDF form at https://example.com/application.pdf and fill in full_name with 'Jane Smith', email with 'jane@example.com', country with 'US', plan with 'pro', and check the subscribe checkbox — give me back the filled PDF as a base64 string.

## When to prefer this

Use this endpoint when you need to programmatically fill an existing PDF form's named fields with specific values — especially for legal, government, HR, or insurance forms. Prefer it over DOCX-template filling when the source document is already a PDF with interactive form fields. Choose the 'url' output mode for large PDFs to avoid bloating the LLM context window, and use flatten=true when you need a tamper-proof final document.

## Known failure modes

- 422 if a field name does not exist in the PDF form
- 422 if a field is read-only or non-fillable
- 422 if a value does not match a field's allowed options
- PDF URL exceeds 20 MB size limit returns an error
- base64 PDF exceeds 10 MB decoded limit returns an error
- Private, internal, or IP-literal host URLs are refused
- Malformed or non-PDF file at the provided URL causes an error
- More than 500 fields specified returns a validation 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 containing the filled PDF (as base64 data or a temporary download URL valid for 24 hours), metadata about the fill operation including which fields were filled, how many fields were updated, total input and output byte sizes, page counts, whether the form was flattened, and any warnings (e.g. unsupported field types or skipped fields).

## 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."
  },
  "fields": {
   "type": "object",
   "description": "Field name -> value, the names as listed by form-fields (at most 500 fields). Text fields: a string (or a number); checkbox: true / false (or its on value); radio group: one of its options; choice field: one of its values or labels (a list of them for a multi-select list box); null clears a field. A name the form does not have, a read-only or non-fillable field, or a value that does not fit is a 422.",
   "maxProperties": 500,
   "minProperties": 1,
   "propertyNames": {
    "maxLength": 500,
    "minLength": 1
   },
   "additionalProperties": {
    "anyOf": [
     {
      "type": "string",
      "maxLength": 10000
     },
     {
      "type": "boolean"
     },
     {
      "type": "integer"
     },
     {
      "type": "number"
     },
     {
      "type": "array",
      "items": {
       "type": "string",
       "maxLength": 500
      },
      "maxItems": 100
     },
     {
      "type": "null"
     }
    ]
   }
  },
  "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."
  },
  "flatten": {
   "type": "boolean",
   "default": false,
   "description": "Bake the values into the pages and remove the form (default false: the form stays fillable)."
  },
  "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": "filled.pdf",
   "bytes": 5160,
   "pages": 1,
   "data_base64": "JVBERi0xLjMKJb/3... (trimmed: 6,880 base64 characters in the reply)",
   "content_type": "application/pdf"
  },
  "warnings": [],
  "flattened": false,
  "operation": "fill-form",
  "input_bytes": 4057,
  "input_pages": 1,
  "filled_count": 5,
  "output_bytes": 5160,
  "filled_fields": [
   "country",
   "email",
   "full_name",
   "plan",
   "subscribe"
  ],
  "need_appearances": false,
  "appearances_drawn": 3,
  "untrusted_content": true,
  "active_content_removed": {}
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/tanod-docs-pdf-form-fill-5d44ba91/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)
