{
  "data": {
    "a": {
      "slug": "nutrient-dws-processor",
      "name": "Nutrient DWS Processor API",
      "vendor": "Nutrient (PSPDFKit GmbH)",
      "vendorUrl": "https://www.nutrient.io",
      "kind": "http-api",
      "category": "pdf-tools",
      "summary": "Hosted REST API from Nutrient (formerly PSPDFKit) that generates, converts, merges, OCRs, redacts, watermarks and signs PDF and Office documents. Agents call it with a Bearer key or through the hosted Nutrient MCP server.",
      "url": "https://www.anchorterminal.com/tools/nutrient-dws-processor",
      "markdownUrl": "https://www.anchorterminal.com/tools/nutrient-dws-processor.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/nutrient-dws-processor.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/nutrient-dws-processor.json",
      "dns": "nutrient-dws-processor.grade.anchorterminal.com",
      "repo": "https://github.com/PSPDFKit/nutrient-dws-mcp-server",
      "license": "Proprietary service under the Nutrient DWS API licence agreement. The MCP server and the TypeScript and Python clients are MIT",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.nutrient.io",
      "packages": [
        {
          "registry": "npm",
          "name": "@nutrient-sdk/dws-client-typescript"
        },
        {
          "registry": "pypi",
          "name": "nutrient-dws"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve. A person signs up at dashboard.nutrient.io and copies a live key, sent as `Authorization: Bearer \u003ckey\u003e`. Keys can be scoped to one DWS product. `POST /tokens` issues a JWT limited to named operations and origins, valid for one hour by default and at most 24, and revocable with `DELETE /tokens`. The hosted MCP server at https://mcp.nutrient.io/mcp uses OAuth with a Nutrient account (scope `mcp:invoke`, product scopes such as `product:processor`) and takes no API key. Test keys need Support to enable them.",
      "pricing": "freemium",
      "pricingNotes": "Free plan of 50 credits a month, no card, with watermarked output. Paid plans are Starter $75 a month for 1,000 credits, Growth $275 for 5,000 and Pro $445 for 10,000, with 10 per cent off billed yearly and custom plans above that. Most tools cost a fixed number of credits per use, from 0.5 to 10, and AI redaction is priced per page. Pay-as-you-go overage has a spending cap, and on the free plan starts with a $25 wallet load. The per-credit overage rate was not readable (https://www.nutrient.io/api/pricing/processor-api/, checked 2026-10-08).",
      "priceSummary": "$75 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the guides, the OpenAPI document, the pricing page or the MCP server README (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 14,
      "popularity": {
        "githubStars": 71,
        "npmWeekly": 2701,
        "pypiWeekly": 2214,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://www.nutrient.io/guides/dws-processor/",
      "llmsTxt": "https://www.nutrient.io/guides/dws-processor/llms.txt",
      "openapi": "https://cdn.cloud.nutrient.io/dws/assets/specs/public@1.19.0-ec566a84de4ef6c97fd9b586262ddcc4.yml",
      "registryName": "io.nutrient/mcp",
      "capabilities": [
        "pdf.convert",
        "pdf.merge",
        "pdf.forms",
        "pdf.generate",
        "pdf.extract",
        "docs.ocr",
        "docs.tables"
      ],
      "tags": [
        "hosted",
        "mcp",
        "oauth",
        "openapi",
        "llms-txt",
        "typescript",
        "python",
        "async-jobs",
        "free-tier",
        "status-page",
        "soc2"
      ],
      "lastRelease": "2026-10-14",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 71.6,
        "grade": "BB",
        "agentReady": true,
        "rank": 135,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 1,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 79,
          "maintenance": 83,
          "payments": 40,
          "reliability": 78,
          "schema": 82,
          "security": 68,
          "transparency": 76
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-01"
        },
        "negative": -1,
        "negativeNotes": [
          "2026-10-08. The product page FAQ said the API runs without strict rate limits or hard caps, while the pricing guide set 100 requests a minute per key on every plan, and the MCP product page invited users to start on a free test key, which the test-mode guide says Support must enable first. By 17 October the FAQ gives 100 requests a minute per key and the rewritten MCP page no longer mentions test keys. Fixed within about nine days, so one point, down from two (https://www.nutrient.io/api/processor-api/, https://www.nutrient.io/api/mcp-server-pdf-automation-llm/)."
        ],
        "verdict": "A public OpenAPI 3.1 document, JSONPath-level error bodies and OAuth or operation-limited tokens make the API easy for an agent to call, and 50 free credits a month need no card. The local MCP server lost support the day a hosted one replaced it, and the terms let plans with data retention train models on submitted files.",
        "bestFor": "An agent that must change or produce documents (merge, convert, OCR, redact, sign, fill forms) in one chained request with predictable per-use cost, and assistants that want those tools plus extraction through one hosted MCP URL.",
        "strengths": [
          "OpenAPI 3.1 document (17 operations in version 1.19.0, now 1.20.0), with llms.txt indexes and a Markdown twin of every guide",
          "Errors return `failingPaths` in JSONPath form, a `requestId`, and machine-readable `error.reason` codes for async jobs",
          "OAuth with PKCE and per-product scopes, plus JWTs limited by operation, origin and expiry of up to 24 hours",
          "Hosted MCP server needs no install or API key and spends the same credits as the API",
          "Free plan of 50 credits a month with no card, and the vendor says failed requests (4xx or 5xx) cost no credits"
        ],
        "weaknesses": [
          "The local MCP server lost support on 14 October 2026, the day the change was announced",
          "Plans with data retention enabled let Nutrient keep files and train models on them, and no public page says which plans those are",
          "No public changelog for the API or the hosted MCP server, and no deprecation policy",
          "The status page has no component for the hosted MCP server, and no SLA is published",
          "`Idempotency-Key` works only on async `/build` requests, and free-plan output is watermarked"
        ],
        "agentNotes": [
          "Send `Authorization: Bearer \u003ckey\u003e` to `https://api.nutrient.io`. Use `POST /build` with an `instructions` JSON part to chain several actions in one charged request",
          "Call `POST /analyze_build` first to get the credit cost of a build. The call is free",
          "Stay under 100 requests a minute per key and back off exponentially on 429. Test keys allow 10 a minute and 5 MB",
          "Use the hosted MCP at https://mcp.nutrient.io/mcp, not `@nutrient-sdk/dws-mcp-server`, which gets no fixes after 14 October 2026",
          "Ask for a lighter parse mode on simple PDFs. The hosted MCP reads documents in agentic mode by default, at 18 credits a page",
          "Turn on pay-as-you-go or use Processor tools only on a free plan, since free plans include no Data Extraction credits and the hosted MCP reads documents with them"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 3.3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 71.6
          }
        ],
        "editorialScores": {
          "ergonomics": 79,
          "maintenance": 83,
          "payments": 40,
          "reliability": 78,
          "schema": 82,
          "security": 68,
          "transparency": 66
        },
        "provenanceScore": 86,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-01",
            "maintenance": "2026-11-01",
            "payments": "2026-11-01",
            "reliability": "2026-11-01",
            "schema": "2026-11-01",
            "security": "2026-11-01",
            "transparency": "2026-11-01"
          },
          "last": "2026-11-01",
          "lastMoved": "2026-10-28",
          "oldest": "2026-11-01",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install @nutrient-sdk/dws-client-typescript",
        "http": "curl -X POST 'https://api.nutrient.io/build' \\\n  -H 'Authorization: Bearer YOUR_API_KEY' \\\n  -F 'index.html=@index.html' \\\n  -F 'instructions={\"parts\":[{\"html\":\"index.html\"}]}' \\\n  -o hello.pdf",
        "claudeCode": "claude mcp add --transport http --scope user nutrient https://mcp.nutrient.io/mcp",
        "config": {
          "mcpServers": {
            "nutrient": {
              "type": "streamable-http",
              "url": "https://mcp.nutrient.io/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/pdf.convert",
        "tool": "https://letme.dev/nutrient-dws-processor"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 75,
          "note": "1,000 credits. $67 a month billed yearly"
        },
        {
          "item": "Growth",
          "unit": "month",
          "usd": 275,
          "note": "5,000 credits. $247 a month billed yearly"
        },
        {
          "item": "Pro",
          "unit": "month",
          "usd": 445,
          "note": "10,000 credits. $399 a month billed yearly"
        },
        {
          "item": "Credit on Starter",
          "unit": "credit",
          "usd": 0.075,
          "note": "Worked out from $75 for 1,000 credits. Merge costs 1 credit, OCR 2, a digital signature 10"
        }
      ],
      "provenance": {
        "legalEntity": "PSPDFKit GmbH",
        "domain": "nutrient.io",
        "domainRegistered": "2019-12-03",
        "endpointOnVendorDomain": true,
        "terms": "https://www.nutrient.io/legal/cloud-terms/",
        "privacy": "https://www.nutrient.io/legal/privacy/",
        "statusPage": "https://www.nutrientstatus.com",
        "changelog": "https://github.com/PSPDFKit/nutrient-dws-mcp-server/blob/main/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-11-01",
        "notes": [
          "The DWS API licence agreement (last updated October 2026) names PSPDFKit GmbH, doing business as Nutrient, Kaiserstrasse 117/17, 1070 Vienna, Austria, and applies Austrian law. Section 9 and Schedule 1 are the data processing terms.",
          "The privacy policy has a Nutrient API section naming PSPDFKit GmbH as controller, with a Processor API subsection.",
          "The API answers at https://api.nutrient.io. An unauthenticated request returned 401 with a JSON error and request id.",
          "The status page is on a separate domain, www.nutrientstatus.com, run on Better Stack.",
          "www.nutrient.io/.well-known/security.txt returns 404 (re-checked on 1 November 2026). Reports go through www.nutrient.io/security/report-vulnerability/.",
          "RDAP for nutrient.io gives a registration date of 2019-12-03.",
          "robots.txt carries `Content-Signal: search=yes, ai-input=yes, ai-train=yes` for every user agent.",
          "The changelog link is the local MCP server's, which stopped with that server on 14 October 2026. No public changelog for the API or the hosted MCP server was found."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/nutrient-dws-processor.json",
      "live": {
        "slug": "nutrient-dws-processor",
        "probe": {
          "target": "https://api.nutrient.io",
          "method": "get",
          "lastAt": "2026-11-04T20:47:03.421168229Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 263,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 99.95,
          "p50ms24h": 226,
          "p95ms24h": 383,
          "samples24h": 246,
          "samples30d": 6644,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 169,
              "ok": 169
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 246
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 254
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 250
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 214,
              "ok": 214
            }
          ]
        },
        "vendorStatus": {
          "page": "https://www.nutrientstatus.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-04T17:14:12.18534684Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "PSPDFKit/nutrient-dws-mcp-server",
            "version": "v0.1.3",
            "released": "2026-08-28",
            "seenAt": "2026-11-04T20:40:31.655591855Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.PSPDFKit/nutrient-dws-mcp-server",
            "version": "0.1.3",
            "seenAt": "2026-10-17T05:11:56.292414565Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.nutrient/mcp",
            "version": "2.0.0",
            "seenAt": "2026-11-04T17:11:44.552009456Z"
          },
          {
            "registry": "npm",
            "name": "@nutrient-sdk/dws-client-typescript",
            "version": "3.0.0",
            "seenAt": "2026-11-04T20:40:30.750966835Z"
          },
          {
            "registry": "npm",
            "name": "@nutrient-sdk/dws-mcp-server",
            "version": "0.1.3",
            "seenAt": "2026-10-17T02:05:31.589466999Z"
          },
          {
            "registry": "pypi",
            "name": "nutrient-dws",
            "version": "3.1.0",
            "released": "2026-05-27",
            "seenAt": "2026-11-04T20:40:31.263904994Z"
          }
        ],
        "githubStars": 71,
        "npmWeekly": 3494,
        "pypiWeekly": 2422,
        "securityTxt": {
          "url": "https://nutrient.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-04T15:53:42.660137621Z"
        },
        "llmsTxt": {
          "url": "https://www.nutrient.io/guides/dws-processor/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-04T15:23:40.329927941Z"
        },
        "domain": {
          "domain": "nutrient.io",
          "checkedAt": "2026-11-01T14:27:29.720335664Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/PSPDFKit/nutrient-dws-mcp-server/main/CHANGELOG.md",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-11-04T08:32:04.223748585Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "8a1c5e1c4c5e"
          },
          {
            "url": "https://www.nutrient.io/api/pricing/processor-api/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-04T08:42:55.120067901Z",
            "changedAt": "2026-11-03T08:08:46.955451188Z",
            "fingerprint": "1619ad7c7031"
          },
          {
            "url": "https://www.nutrient.io/legal/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-04T08:42:59.3957802Z",
            "changedAt": "2026-10-29T05:25:33.66720737Z",
            "fingerprint": "624850a3279c"
          },
          {
            "url": "https://www.nutrient.io/legal/cloud-terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-04T08:42:57.568493809Z",
            "changedAt": "2026-10-29T05:25:31.23575275Z",
            "fingerprint": "c9aeae64cf01"
          }
        ],
        "github": {
          "repo": "pspdfkit/nutrient-dws-mcp-server",
          "checkedAt": "2026-11-02T09:18:54.141337901Z",
          "stars": 71,
          "archived": true,
          "issuesEnabled": true,
          "pushedAt": "2026-10-14T20:03:16Z",
          "openIssues": 1,
          "openPRs": 0,
          "issuesOpened90d": 1,
          "issuesClosed90d": 1,
          "prsMerged90d": 8,
          "ci": {
            "branch": "main",
            "runs": 15,
            "success": 15,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-08-28T00:03:53Z"
          },
          "replies": {
            "sampled": 3,
            "unanswered": 1,
            "medianDays": 0.4
          }
        },
        "updatedAt": "2026-11-04T20:47:03.421168229Z"
      }
    },
    "answer": "Nutrient DWS Processor API scores 71.6 (BB) on agent readiness against PDFMonkey's 59.3 (C), and leads in 5 of 7 scored categories.",
    "b": {
      "slug": "pdfmonkey",
      "name": "PDFMonkey",
      "vendor": "PDFMonkey",
      "vendorUrl": "https://pdfmonkey.io",
      "kind": "http-api",
      "category": "pdf-tools",
      "summary": "PDFMonkey is a hosted service from a Paris company that generates PDFs and images from Liquid or Builder templates and JSON data, through a REST API, a CLI, Ruby and Node.js SDKs, and a local MCP server.",
      "url": "https://www.anchorterminal.com/tools/pdfmonkey",
      "markdownUrl": "https://www.anchorterminal.com/tools/pdfmonkey.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/pdfmonkey.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/pdfmonkey.json",
      "dns": "pdfmonkey.grade.anchorterminal.com",
      "repo": "https://github.com/pdfmonkey/pdfmonkey-mcp",
      "license": "MIT (MCP server, CLI and SDKs)",
      "transports": [
        "stdio"
      ],
      "remoteUrl": "https://api.pdfmonkey.io/api/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "pdfmonkey-mcp-server"
        },
        {
          "registry": "npm",
          "name": "@pdfmonkey/cli"
        },
        {
          "registry": "npm",
          "name": "pdfmonkey"
        },
        {
          "registry": "rubygems",
          "name": "pdfmonkey"
        }
      ],
      "auth": "api-key",
      "authNotes": "One secret API key per account, sent as `Authorization: Bearer`, found on the dashboard's API Key page after a browser signup. The key carries the whole account's privileges. Rotate API key issues a new key while the old one keeps working for 2 days, or is revoked at once. The MCP server and CLI read PDFMONKEY_API_KEY.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with 20 documents a month and a 30-day Pro trial with 300 documents, no card. Starter €5 a month for 300 documents, Pro €15 for 3,000, Pro+ €60 for 5,000, Premium €300 for 60,000, 10 per cent off yearly. Pay-as-you-go overage from €0.008 to €0.005 a document, Boost Packs €5 per 1,000 documents (https://pdfmonkey.io/pricing/).",
      "priceSummary": "$5.59 / mo",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs, llms-full.txt, pricing page or MCP server source (checked 2026-11-03). Quota overruns are billed to the plan's card through the dashboard.",
        "endpoints": []
      },
      "toolCount": 11,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 97,
        "pypiWeekly": null,
        "asOf": "2026-11-03"
      },
      "docsUrl": "https://pdfmonkey.io/docs/",
      "llmsTxt": "https://pdfmonkey.io/llms.txt",
      "registryName": "io.github.pdfmonkey/pdfmonkey-mcp",
      "capabilities": [
        "pdf.generate",
        "pdf.forms"
      ],
      "tags": [
        "hosted",
        "freemium",
        "no-card",
        "free-tier",
        "mcp",
        "mcp-registry",
        "llms-txt",
        "cli",
        "webhooks",
        "async-jobs",
        "typescript",
        "ruby",
        "eu",
        "mit",
        "closed-source"
      ],
      "lastRelease": "2026-10-26",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 59.3,
        "grade": "C",
        "agentReady": false,
        "rank": 637,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 3,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 75,
          "maintenance": 81,
          "payments": 40,
          "reliability": 60,
          "schema": 61,
          "security": 36,
          "transparency": 78
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-03"
        },
        "negative": 0,
        "verdict": "An agent gets 11 compact MCP tools, a scriptable CLI and a sync endpoint, with public euro prices and a free plan. The one account-wide key has no scopes, document creation has no idempotency key, and there is no OpenAPI document, SLA or security disclosure policy.",
        "bestFor": "Agents that fill known templates with JSON to produce invoices, reports, forms and images, and teams that want an agent to author templates through the CLI.",
        "strengths": [
          "11 compact MCP tools with typed inputs, and a CLI whose management commands all take `--json` and exit non-zero on error",
          "`POST /api/v1/documents/sync` returns the finished document in one request, waiting up to 6 minutes",
          "Plan prices, per-document overage rates and Boost Pack prices are public in euros, with a Free plan and a 30-day trial that need no card",
          "Key rotation keeps the old key alive for 2 days, and payloads are stored encrypted in EU data centres with a published DPA",
          "MCP server, CLI, Node.js SDK and Ruby gem are MIT and in the official MCP registry under a verified namespace"
        ],
        "weaknesses": [
          "One secret key with the whole account's privileges, no scopes and no read-only key",
          "No OpenAPI document, no changelog page and no written rate limits beyond the monthly quota",
          "No idempotency key on document creation, so a retried create queues and bills a second document",
          "No SLA, no security.txt, no disclosure policy and no SOC 2 or ISO 27001, which the docs state plainly",
          "The MCP server has no tool annotations and includes a permanent `delete_document`"
        ],
        "agentNotes": [
          "Use `POST /api/v1/documents/sync` or the MCP `generate_document` tool for one document; for batches create with `status: pending` and poll `document_cards` or take the webhook",
          "Fetch the template first (`get_template` or `pdfmonkey template get --json`) to learn the payload shape; a mismatched payload generates a blank or wrong document, not an error",
          "Download within the hour; `download_url` returns 403 after 60 minutes, and fetching the document again gives a fresh link",
          "Do not retry a create on a timeout without checking `list_documents` first; there is no idempotency key and each generation counts against the quota",
          "Expect a 422 with field names when a required field is missing, and a rejected create at 100 per cent of the monthly quota unless pay-as-you-go is on"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 59.3
          }
        ],
        "editorialScores": {
          "ergonomics": 75,
          "maintenance": 81,
          "payments": 40,
          "reliability": 60,
          "schema": 61,
          "security": 36,
          "transparency": 70
        },
        "provenanceScore": 86,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-03",
            "maintenance": "2026-11-03",
            "payments": "2026-11-03",
            "reliability": "2026-11-03",
            "schema": "2026-11-03",
            "security": "2026-11-03",
            "transparency": "2026-11-03"
          },
          "last": "2026-11-03",
          "oldest": "2026-11-03",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install -g @pdfmonkey/cli",
        "http": "curl https://api.pdfmonkey.io/api/v1/current_user -H \"Authorization: Bearer $PDFMONKEY_API_KEY\"",
        "claudeCode": "claude mcp add pdfmonkey -e PDFMONKEY_API_KEY=your-api-key -- npx -y pdfmonkey-mcp-server",
        "config": {
          "mcpServers": {
            "pdfmonkey": {
              "args": [
                "-y",
                "pdfmonkey-mcp-server"
              ],
              "command": "npx",
              "env": {
                "PDFMONKEY_API_KEY": "your-api-key"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/pdf.generate",
        "tool": "https://letme.dev/pdfmonkey"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 5.59,
          "note": "€5, 300 documents a month, converted at the ECB rate of 3 November 2026 (1.1179). €4.50 billed yearly"
        },
        {
          "item": "Pro",
          "unit": "month",
          "usd": 16.77,
          "note": "€15, 3,000 documents a month. €13.50 billed yearly"
        },
        {
          "item": "Pro+",
          "unit": "month",
          "usd": 67.07,
          "note": "€60, 5,000 documents a month. €54 billed yearly"
        },
        {
          "item": "Premium",
          "unit": "month",
          "usd": 335.37,
          "note": "€300, 60,000 documents a month. €270 billed yearly"
        },
        {
          "item": "Pay-as-you-go document on Starter",
          "unit": "tx",
          "usd": 0.0089,
          "note": "€0.008 a document beyond the quota. Pro €0.007, Pro+ €0.006, Premium €0.005"
        },
        {
          "item": "Boost Pack",
          "unit": "tx",
          "usd": 5.59,
          "note": "€5 for 1,000 extra documents, expiring at the monthly quota reset"
        }
      ],
      "provenance": {
        "legalEntity": "PDFMonkey",
        "domain": "pdfmonkey.io",
        "domainRegistered": "2016-05-07",
        "endpointOnVendorDomain": true,
        "terms": "https://pdfmonkey.io/terms-and-conditions",
        "privacy": "https://pdfmonkey.io/privacy-policy",
        "statusPage": "https://status.pdfmonkey.io",
        "changelog": "https://pdfmonkey.io/blog/",
        "securityTxt": "none",
        "checked": "2026-11-03",
        "notes": [
          "The terms and privacy policy are iubenda documents embedded on pdfmonkey.io (iubenda ids 72376615). They name the owner as PDFMonkey at 49 rue de Ponthieu, Lot 41, 75008 Paris, with no company form or registration number. The privacy policy was last updated 16 September 2026.",
          "The terms forbid accounts registered by bots or automated methods and contain no clause on automated reading of the website. pdfmonkey.io/robots.txt allows all crawlers.",
          "status.pdfmonkey.io is an updown.io page with six checks (API, dashboard, preview, website, generation latency, queue size) showing one month of rolling uptime per check and no incident write-ups.",
          "RDAP gives pdfmonkey.io a registration date of 7 May 2016. The oldest blog post is dated 9 December 2019, used for firstReleased.",
          "/.well-known/security.txt and /security.txt return 404. There is no changelog page; product changes are announced on the blog."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/pdfmonkey.json",
      "live": {
        "slug": "pdfmonkey",
        "probe": {
          "target": "https://api.pdfmonkey.io/api/v1",
          "method": "get",
          "lastAt": "2026-11-04T20:47:06.90801329Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 543,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 159,
          "p95ms24h": 714,
          "samples24h": 55,
          "samples30d": 55,
          "days": [
            {
              "date": "2026-11-04",
              "probes": 55,
              "ok": 55
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.pdfmonkey.io",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-04T15:32:28.217450512Z"
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "io.github.pdfmonkey/pdfmonkey-mcp",
            "version": "1.0.1",
            "seenAt": "2026-11-04T17:11:44.552009456Z"
          },
          {
            "registry": "npm",
            "name": "@pdfmonkey/cli",
            "version": "2.1.0",
            "seenAt": "2026-11-04T20:45:09.966897237Z"
          },
          {
            "registry": "npm",
            "name": "pdfmonkey",
            "version": "1.4.0",
            "seenAt": "2026-11-04T20:45:11.419031923Z"
          },
          {
            "registry": "npm",
            "name": "pdfmonkey-mcp-server",
            "version": "1.0.1",
            "seenAt": "2026-11-04T20:45:09.158965958Z"
          }
        ],
        "githubStars": 0,
        "npmWeekly": 83,
        "securityTxt": {
          "url": "https://pdfmonkey.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-04T15:54:14.692797875Z"
        },
        "updatedAt": "2026-11-04T20:47:06.90801329Z"
      }
    },
    "edges": [
      {
        "by": 32,
        "category": "security",
        "leads": "nutrient-dws-processor",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "OAuth at api.nutrient.io with PKCE (S256), dynamic client registration, a revocation endpoint and per-product scopes; the hosted MCP server asks for `mcp:invoke` and accepts `product:processor`, `product:data_extraction` and others. Live keys can be scoped, and `POST /tokens` issues JWTs limited to named operations and origins, expiring within 24 hours and revocable. The base key can only be regenerated. No query-string credential is documented (28). Scoped keys, operation-limited JWTs and product scopes on OAuth, but no confirmation step. The supported MCP route is now hosted and reads no local paths, so the local server's unrestricted file access without `SANDBOX_PATH` no longer applies (15, up from 13). Document text comes back as untrusted content, and no prompt-injection guidance was found (4). Each response reports credit cost and remaining credits with a request id, a usage endpoint exists, and extraction runs from the MCP server land in a run history the person can review. No audit log was found (6). SOC 2 Type 2 and SOC 3 per the trust centre, annual penetration testing by Prescient Security, and a vulnerability disclosure policy with a report page, per the 8 October check. security.txt is still a 404 and no bounty was established (15). 28+15+4+6+15 = 68.",
          "b": "One secret key per account with the whole account's privileges, sent as a Bearer header; it can be rotated with a 2-day overlap and the old key revoked at once, but there are no scopes, no second key and no read-only key (12). No least-privilege mode; the MCP server exposes `delete_document`, the CLI asks before deletions unless `-y`, and the MCP docs say most clients ask before running a delete (6). The tools return the account's own templates, documents and quota, not third-party content (10). Each document carries generation logs and the dashboard shows usage, but no audit log or per-key activity view was found (3). No security.txt (404), no disclosure policy and no bug bounty; the compliance page says there is no SOC 2 or ISO 27001, and sets against that EU hosting, encrypted payloads and a DPA dated 15 October 2026 (5). 12 + 6 + 10 + 3 + 5 = 36."
        },
        "scores": {
          "a": 68,
          "b": 36
        }
      },
      {
        "by": 21,
        "category": "schema",
        "leads": "nutrient-dws-processor",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "A public OpenAPI 3.1.0 document, now version 1.20.0 per the API reference page, with 17 operations and 203 schemas per the 8 October check of 1.19.0, not re-read on 1 November (25). llms.txt at site and product level with topic indexes, and a Markdown twin of each guide (10). Tag descriptions explain the Build API, async jobs and authorisation at length. The tool descriptions of the hosted MCP server couldn't be read first-hand, since `tools/list` needs an OAuth token (15, kept from 8 October). 102 of 203 schemas use enums and build actions are discriminated by `type`, per the 8 October check (13). Guides carry samples in six languages, and the errors guide and async tables document the response bodies (14). The spec is versioned, but the only changelog was the local MCP server's, which stopped with that server on 14 October, and the hosted server 2.0.0 has none. No public API changelog was found, and the move from 1.19.0 to 1.20.0 is undated (5). 25+10+15+13+14+5 = 82.",
          "b": "No OpenAPI document was found on pdfmonkey.io, in llms-full.txt or in the repositories; the 11 MCP tools carry JSON Schema inputs from src/tools.ts (12). llms.txt and llms-full.txt, and every docs page has a Markdown twin (10). MCP tool descriptions are one line each and say what the tool does, and the MCP docs say what the server can't do (create or edit templates) and send that job to the CLI; the API docs explain async against sync and when to use each (12). Parameter tables give types and required fields, list_documents has a status enum, and `payload` is by nature a free JSON object matched to the template (10). Request examples in curl, Ruby, Node.js, Python and PHP on every endpoint, a 401 body, a 422 body with field names and a troubleshooting section for blank documents, empty and 403 download URLs (12). The API lives under /api/v1 and docs pages carry a last-updated date, but there is no changelog page, changes are announced in blog posts such as What We Shipped Since the Summer of 26 October 2026 (5). 12 + 10 + 12 + 10 + 12 + 5 = 61."
        },
        "scores": {
          "a": 82,
          "b": 61
        }
      },
      {
        "by": 18,
        "category": "reliability",
        "leads": "nutrient-dws-processor",
        "name": "Reliability",
        "reasons": {
          "a": "Graded with the hosted lines. Status page at www.nutrientstatus.com on Better Stack with a Processor API component and 90 days of daily history (20). The JSON feed read on 1 November 2026 covers 3 August to 1 November. The Processor API was down on five days, the longest 451 seconds on 6 August and the latest 205 seconds on 30 October. DWS Platform was down 45 seconds on 23 August and 154 seconds on 7 September, and the Data Extraction API 1,763 seconds (about 29 minutes) on 1 September. Nothing reaches an hour, so minor only (20). The feed has no component for the hosted MCP server. The pricing guide and the product page FAQ give 100 requests a minute per key on all plans, and 10 a minute for test keys (15). It recommends exponential backoff, async admission returns `Retry-After`, and `Idempotency-Key` covers async builds only, so 13 of 15. The product page mentions guaranteed SLAs on custom plans, but no SLA document is published and the terms disclaim availability (0). GA, at spec version 1.20.0 (10). 20+20+15+13+0+10 = 78.",
          "b": "Read with the hosted lines. status.pdfmonkey.io is an updown.io page with six checks (API, dashboard, preview, website, generation latency, queue size) and one month of rolling uptime per check, but no incident write-ups (15). The readable record is the uptime figures (API 99.98 per cent and queue 99.97 per cent since 3 October 2026) and the one incident the vendor wrote up, a slowdown of a little under an hour on 29 September 2026 with a post-mortem on 1 October; the 90-day list itself isn't published, so minor incidents only (20). The docs say there is no hard rate limit, only the monthly quota, so no request-rate numbers (5 for the quota numbers). The Node.js SDK retries 408, 429 and 5xx with backoff and honours Retry-After, and the webhook docs say delivery is at least once and to make handlers idempotent, but document creation has no idempotency key (10). No SLA found in the terms or pricing (0). GA (10). 15 + 20 + 5 + 10 + 0 + 10 = 60."
        },
        "scores": {
          "a": 78,
          "b": 60
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Nutrient (PSPDFKit GmbH)",
        "b": "PDFMonkey",
        "name": "Vendor"
      },
      {
        "a": "https://api.nutrient.io",
        "b": "https://api.pdfmonkey.io/api/v1",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the Nutrient DWS API licence agreement. The MCP server and the TypeScript and Python clients are MIT",
        "b": "MIT (MCP server, CLI and SDKs)",
        "name": "Licence"
      },
      {
        "a": "14",
        "b": "11",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "io.nutrient/mcp",
        "b": "io.github.pdfmonkey/pdfmonkey-mcp",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-14",
        "b": "2026-10-26",
        "name": "Last release"
      },
      {
        "a": "2026-09-01",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes, with an opt-out",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "71 stars, 2.7k npm/wk, 2.2k PyPI/wk",
        "b": "97 npm/wk",
        "name": "Popularity"
      },
      {
        "a": "3.3/5 (4)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Nutrient DWS Processor API scores 71.6 (BB) on agent readiness against PDFMonkey's 59.3 (C), and leads in 5 of 7 scored categories.",
        "question": "Which is better for AI agents, Nutrient DWS Processor API or PDFMonkey?"
      },
      {
        "answer": "Nutrient DWS Processor API takes an API key or an OAuth sign-in. PDFMonkey needs an API key.",
        "question": "Do Nutrient DWS Processor API and PDFMonkey need an API key?"
      },
      {
        "answer": "Yes. Nutrient DWS Processor API has a hosted endpoint at https://api.nutrient.io and PDFMonkey at https://api.pdfmonkey.io/api/v1.",
        "question": "Can an agent call Nutrient DWS Processor API and PDFMonkey without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 78 against 60",
          "Schema \u0026 documentation, 82 against 61",
          "Security \u0026 auth, 68 against 36"
        ],
        "also": [
          "Agent-ready, a grade of BB or better"
        ],
        "goodFor": "An agent that must change or produce documents (merge, convert, OCR, redact, sign, fill forms) in one chained request with predictable per-use cost, and assistants that want those tools plus extraction through one hosted MCP URL.",
        "slug": "nutrient-dws-processor",
        "watchFor": "The local MCP server lost support on 14 October 2026, the day the change was announced"
      },
      {
        "aheadOn": null,
        "also": [
          "Runs on your own machine",
          "Free to start without a card"
        ],
        "goodFor": "Agents that fill known templates with JSON to produce invoices, reports, forms and images, and teams that want an agent to author templates through the CLI.",
        "slug": "pdfmonkey",
        "watchFor": "One secret key with the whole account's privileges, no scopes and no read-only key"
      }
    ],
    "history": {
      "nutrient-dws-processor": [
        {
          "causes": [
            "evidence"
          ],
          "date": "2026-10-28",
          "delta": 0.1,
          "from": 71.5,
          "fromGrade": "BB",
          "to": 71.6,
          "toGrade": "BB"
        },
        {
          "causes": [
            "product",
            "event",
            "time"
          ],
          "date": "2026-10-17",
          "delta": 2.8,
          "from": 68.7,
          "fromGrade": "B",
          "to": 71.5,
          "toGrade": "BB"
        }
      ],
      "pdfmonkey": null
    },
    "job": {
      "capability": "pdf.generate",
      "name": "Pdf generate"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/cloudconvert-vs-nutrient-dws-processor.json",
        "title": "CloudConvert API vs Nutrient DWS Processor API",
        "url": "https://www.anchorterminal.com/compare/cloudconvert-vs-nutrient-dws-processor"
      },
      {
        "json": "https://www.anchorterminal.com/compare/foxit-pdf-services-vs-nutrient-dws-processor.json",
        "title": "Foxit PDF Services API vs Nutrient DWS Processor API",
        "url": "https://www.anchorterminal.com/compare/foxit-pdf-services-vs-nutrient-dws-processor"
      },
      {
        "json": "https://www.anchorterminal.com/compare/iloveapi-vs-nutrient-dws-processor.json",
        "title": "iLoveAPI vs Nutrient DWS Processor API",
        "url": "https://www.anchorterminal.com/compare/iloveapi-vs-nutrient-dws-processor"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdf-co.json",
        "title": "Nutrient DWS Processor API vs PDF.co API + MCP",
        "url": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdf-co"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfrest.json",
        "title": "Nutrient DWS Processor API vs pdfRest API Toolkit",
        "url": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfrest"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudconvert-vs-pdfmonkey.json",
        "title": "CloudConvert API vs PDFMonkey",
        "url": "https://www.anchorterminal.com/compare/cloudconvert-vs-pdfmonkey"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docraptor-vs-nutrient-dws-processor.json",
        "title": "DocRaptor vs Nutrient DWS Processor API",
        "url": "https://www.anchorterminal.com/compare/docraptor-vs-nutrient-dws-processor"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docraptor-vs-pdfmonkey.json",
        "title": "DocRaptor vs PDFMonkey",
        "url": "https://www.anchorterminal.com/compare/docraptor-vs-pdfmonkey"
      },
      {
        "json": "https://www.anchorterminal.com/compare/foxit-pdf-services-vs-pdfmonkey.json",
        "title": "Foxit PDF Services API vs PDFMonkey",
        "url": "https://www.anchorterminal.com/compare/foxit-pdf-services-vs-pdfmonkey"
      },
      {
        "json": "https://www.anchorterminal.com/compare/iloveapi-vs-pdfmonkey.json",
        "title": "iLoveAPI vs PDFMonkey",
        "url": "https://www.anchorterminal.com/compare/iloveapi-vs-pdfmonkey"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pdf-co-vs-pdfmonkey.json",
        "title": "PDF.co API + MCP vs PDFMonkey",
        "url": "https://www.anchorterminal.com/compare/pdf-co-vs-pdfmonkey"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pdfmonkey-vs-pdfrest.json",
        "title": "PDFMonkey vs pdfRest API Toolkit",
        "url": "https://www.anchorterminal.com/compare/pdfmonkey-vs-pdfrest"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 18,
        "edge": "nutrient-dws-processor",
        "key": "reliability",
        "name": "Reliability",
        "nutrient-dws-processor": 78,
        "pdfmonkey": 60,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 21,
        "edge": "nutrient-dws-processor",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "nutrient-dws-processor": 82,
        "pdfmonkey": 61,
        "weight": 13
      },
      {
        "by": 4,
        "edge": "nutrient-dws-processor",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "nutrient-dws-processor": 79,
        "pdfmonkey": 75,
        "weight": 13
      },
      {
        "by": 32,
        "edge": "nutrient-dws-processor",
        "key": "security",
        "name": "Security \u0026 auth",
        "nutrient-dws-processor": 68,
        "pdfmonkey": 36,
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "nutrient-dws-processor": 40,
        "pdfmonkey": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "edge": "nutrient-dws-processor",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "nutrient-dws-processor": 83,
        "pdfmonkey": 81,
        "weight": 7
      },
      {
        "by": 2,
        "edge": "pdfmonkey",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "nutrient-dws-processor": 76,
        "pdfmonkey": 78,
        "weight": 7
      }
    ],
    "summary": "Nutrient DWS Processor API scores 71.6 (BB) on agent readiness against PDFMonkey's 59.3 (C), and leads in 5 of 7 scored categories. Both do pdf generate.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "nutrient-dws-processor": "A public OpenAPI 3.1 document, JSONPath-level error bodies and OAuth or operation-limited tokens make the API easy for an agent to call, and 50 free credits a month need no card. The local MCP server lost support the day a hosted one replaced it, and the terms let plans with data retention train models on submitted files.",
      "pdfmonkey": "An agent gets 11 compact MCP tools, a scriptable CLI and a sync endpoint, with public euro prices and a free plan. The one account-wide key has no scopes, document creation has no idempotency key, and there is no OpenAPI document, SLA or security disclosure policy."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfmonkey",
    "json": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfmonkey.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfmonkey.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfmonkey.min.md"
  },
  "markdown": "Nutrient DWS Processor API scores 71.6 (BB) on agent readiness against PDFMonkey's 59.3 (C), and leads in 5 of 7 scored categories. Both do pdf generate.\n\n- Nutrient DWS Processor API: grade BB, 71.6/100, rank #135 of 1349. Markdown https://www.anchorterminal.com/tools/nutrient-dws-processor.md · JSON https://www.anchorterminal.com/api/v1/tools/nutrient-dws-processor.json\n- PDFMonkey: grade C, 59.3/100, rank #637 of 1349. Markdown https://www.anchorterminal.com/tools/pdfmonkey.md · JSON https://www.anchorterminal.com/api/v1/tools/pdfmonkey.json\n- Best PDF manipulation and conversion APIs for AI agents: https://www.anchorterminal.com/best/pdf-tools/index.md\n- All 43 pdf comparisons: https://www.anchorterminal.com/compare/pdf-tools/index.md\n\n## Which one, for what\n\n### Nutrient DWS Processor API (BB)\n\nGood for: An agent that must change or produce documents (merge, convert, OCR, redact, sign, fill forms) in one chained request with predictable per-use cost, and assistants that want those tools plus extraction through one hosted MCP URL.\n\nAhead on:\n- Reliability, 78 against 60\n- Schema \u0026 documentation, 82 against 61\n- Security \u0026 auth, 68 against 36\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n\nWatch for: The local MCP server lost support on 14 October 2026, the day the change was announced\n\n### PDFMonkey (C)\n\nGood for: Agents that fill known templates with JSON to produce invoices, reports, forms and images, and teams that want an agent to author templates through the CLI.\n\nAlso in its favour:\n- Runs on your own machine\n- Free to start without a card\n\nWatch for: One secret key with the whole account's privileges, no scopes and no read-only key\n\n\n## Why the edge\n\n### Security \u0026 auth: Nutrient DWS Processor API +32\n\n- Nutrient DWS Processor API (68): OAuth at api.nutrient.io with PKCE (S256), dynamic client registration, a revocation endpoint and per-product scopes; the hosted MCP server asks for `mcp:invoke` and accepts `product:processor`, `product:data_extraction` and others. Live keys can be scoped, and `POST /tokens` issues JWTs limited to named operations and origins, expiring within 24 hours and revocable. The base key can only be regenerated. No query-string credential is documented (28). Scoped keys, operation-limited JWTs and product scopes on OAuth, but no confirmation step. The supported MCP route is now hosted and reads no local paths, so the local server's unrestricted file access without `SANDBOX_PATH` no longer applies (15, up from 13). Document text comes back as untrusted content, and no prompt-injection guidance was found (4). Each response reports credit cost and remaining credits with a request id, a usage endpoint exists, and extraction runs from the MCP server land in a run history the person can review. No audit log was found (6). SOC 2 Type 2 and SOC 3 per the trust centre, annual penetration testing by Prescient Security, and a vulnerability disclosure policy with a report page, per the 8 October check. security.txt is still a 404 and no bounty was established (15). 28+15+4+6+15 = 68.\n- PDFMonkey (36): One secret key per account with the whole account's privileges, sent as a Bearer header; it can be rotated with a 2-day overlap and the old key revoked at once, but there are no scopes, no second key and no read-only key (12). No least-privilege mode; the MCP server exposes `delete_document`, the CLI asks before deletions unless `-y`, and the MCP docs say most clients ask before running a delete (6). The tools return the account's own templates, documents and quota, not third-party content (10). Each document carries generation logs and the dashboard shows usage, but no audit log or per-key activity view was found (3). No security.txt (404), no disclosure policy and no bug bounty; the compliance page says there is no SOC 2 or ISO 27001, and sets against that EU hosting, encrypted payloads and a DPA dated 15 October 2026 (5). 12 + 6 + 10 + 3 + 5 = 36.\n\n### Schema \u0026 documentation: Nutrient DWS Processor API +21\n\n- Nutrient DWS Processor API (82): A public OpenAPI 3.1.0 document, now version 1.20.0 per the API reference page, with 17 operations and 203 schemas per the 8 October check of 1.19.0, not re-read on 1 November (25). llms.txt at site and product level with topic indexes, and a Markdown twin of each guide (10). Tag descriptions explain the Build API, async jobs and authorisation at length. The tool descriptions of the hosted MCP server couldn't be read first-hand, since `tools/list` needs an OAuth token (15, kept from 8 October). 102 of 203 schemas use enums and build actions are discriminated by `type`, per the 8 October check (13). Guides carry samples in six languages, and the errors guide and async tables document the response bodies (14). The spec is versioned, but the only changelog was the local MCP server's, which stopped with that server on 14 October, and the hosted server 2.0.0 has none. No public API changelog was found, and the move from 1.19.0 to 1.20.0 is undated (5). 25+10+15+13+14+5 = 82.\n- PDFMonkey (61): No OpenAPI document was found on pdfmonkey.io, in llms-full.txt or in the repositories; the 11 MCP tools carry JSON Schema inputs from src/tools.ts (12). llms.txt and llms-full.txt, and every docs page has a Markdown twin (10). MCP tool descriptions are one line each and say what the tool does, and the MCP docs say what the server can't do (create or edit templates) and send that job to the CLI; the API docs explain async against sync and when to use each (12). Parameter tables give types and required fields, list_documents has a status enum, and `payload` is by nature a free JSON object matched to the template (10). Request examples in curl, Ruby, Node.js, Python and PHP on every endpoint, a 401 body, a 422 body with field names and a troubleshooting section for blank documents, empty and 403 download URLs (12). The API lives under /api/v1 and docs pages carry a last-updated date, but there is no changelog page, changes are announced in blog posts such as What We Shipped Since the Summer of 26 October 2026 (5). 12 + 10 + 12 + 10 + 12 + 5 = 61.\n\n### Reliability: Nutrient DWS Processor API +18\n\n- Nutrient DWS Processor API (78): Graded with the hosted lines. Status page at www.nutrientstatus.com on Better Stack with a Processor API component and 90 days of daily history (20). The JSON feed read on 1 November 2026 covers 3 August to 1 November. The Processor API was down on five days, the longest 451 seconds on 6 August and the latest 205 seconds on 30 October. DWS Platform was down 45 seconds on 23 August and 154 seconds on 7 September, and the Data Extraction API 1,763 seconds (about 29 minutes) on 1 September. Nothing reaches an hour, so minor only (20). The feed has no component for the hosted MCP server. The pricing guide and the product page FAQ give 100 requests a minute per key on all plans, and 10 a minute for test keys (15). It recommends exponential backoff, async admission returns `Retry-After`, and `Idempotency-Key` covers async builds only, so 13 of 15. The product page mentions guaranteed SLAs on custom plans, but no SLA document is published and the terms disclaim availability (0). GA, at spec version 1.20.0 (10). 20+20+15+13+0+10 = 78.\n- PDFMonkey (60): Read with the hosted lines. status.pdfmonkey.io is an updown.io page with six checks (API, dashboard, preview, website, generation latency, queue size) and one month of rolling uptime per check, but no incident write-ups (15). The readable record is the uptime figures (API 99.98 per cent and queue 99.97 per cent since 3 October 2026) and the one incident the vendor wrote up, a slowdown of a little under an hour on 29 September 2026 with a post-mortem on 1 October; the 90-day list itself isn't published, so minor incidents only (20). The docs say there is no hard rate limit, only the monthly quota, so no request-rate numbers (5 for the quota numbers). The Node.js SDK retries 408, 429 and 5xx with backoff and honours Retry-After, and the webhook docs say delivery is at least once and to make handlers idempotent, but document creation has no idempotency key (10). No SLA found in the terms or pricing (0). GA (10). 15 + 20 + 5 + 10 + 0 + 10 = 60.\n\n## Score by category\n\n| Category | Weight | Nutrient DWS Processor API | PDFMonkey | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 78 | 60 | Nutrient DWS Processor API +18 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 82 | 61 | Nutrient DWS Processor API +21 |\n| Agent ergonomics | 13% (16.2 this run) | 79 | 75 | Nutrient DWS Processor API +4 |\n| Security \u0026 auth | 14% (17.5 this run) | 68 | 36 | Nutrient DWS Processor API +32 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 40 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 83 | 81 | Nutrient DWS Processor API +2 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 76 | 78 | PDFMonkey +2 |\n| Negative events | ≤15 | -1 | 0 | |\n| **Total** | | **71.6 · BB** | **59.3 · C** | |\n\n## Facts side by side\n\n| Fact | Nutrient DWS Processor API | PDFMonkey |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Nutrient (PSPDFKit GmbH) | PDFMonkey |\n| Hosted endpoint | `https://api.nutrient.io` | `https://api.pdfmonkey.io/api/v1` |\n| Transports | HTTP, Streamable HTTP | stdio |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Proprietary service under the Nutrient DWS API licence agreement. The MCP server and the TypeScript and Python clients are MIT | MIT (MCP server, CLI and SDKs) |\n| Tools exposed | 14 | 11 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | `io.nutrient/mcp` | `io.github.pdfmonkey/pdfmonkey-mcp` |\n| Last release | 2026-10-14 | 2026-10-26 |\n| Terms last updated | 2026-09-01 | couldn't be read |\n| Privacy policy last updated | no date given | couldn't be read |\n| Customer content may train models | yes, with an opt-out | couldn't be read |\n| Terms restrict automated access | not found in the text | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | not found in the text | couldn't be read |\n| Popularity | 71 stars, 2.7k npm/wk, 2.2k PyPI/wk | 97 npm/wk |\n| Agent reviews | 3.3/5 (4) | none |\n\n## How the scores have moved\n\n### Nutrient DWS Processor API\n\n- +0.1 on 28 October 2026: new evidence\n- +2.8 on 17 October 2026 (B to BB): product, negative event, time\n\n### PDFMonkey\n\nNo score change since it was listed.\n\n## Verdicts\n\n**Nutrient DWS Processor API.** A public OpenAPI 3.1 document, JSONPath-level error bodies and OAuth or operation-limited tokens make the API easy for an agent to call, and 50 free credits a month need no card. The local MCP server lost support the day a hosted one replaced it, and the terms let plans with data retention train models on submitted files.\n\n**PDFMonkey.** An agent gets 11 compact MCP tools, a scriptable CLI and a sync endpoint, with public euro prices and a free plan. The one account-wide key has no scopes, document creation has no idempotency key, and there is no OpenAPI document, SLA or security disclosure policy.\n\n## Before you call either\n\n### Nutrient DWS Processor API\n\n1. Send `Authorization: Bearer \u003ckey\u003e` to `https://api.nutrient.io`. Use `POST /build` with an `instructions` JSON part to chain several actions in one charged request\n2. Call `POST /analyze_build` first to get the credit cost of a build. The call is free\n3. Stay under 100 requests a minute per key and back off exponentially on 429. Test keys allow 10 a minute and 5 MB\n4. Use the hosted MCP at https://mcp.nutrient.io/mcp, not `@nutrient-sdk/dws-mcp-server`, which gets no fixes after 14 October 2026\n5. Ask for a lighter parse mode on simple PDFs. The hosted MCP reads documents in agentic mode by default, at 18 credits a page\n6. Turn on pay-as-you-go or use Processor tools only on a free plan, since free plans include no Data Extraction credits and the hosted MCP reads documents with them\n\n### PDFMonkey\n\n1. Use `POST /api/v1/documents/sync` or the MCP `generate_document` tool for one document; for batches create with `status: pending` and poll `document_cards` or take the webhook\n2. Fetch the template first (`get_template` or `pdfmonkey template get --json`) to learn the payload shape; a mismatched payload generates a blank or wrong document, not an error\n3. Download within the hour; `download_url` returns 403 after 60 minutes, and fetching the document again gives a fresh link\n4. Do not retry a create on a timeout without checking `list_documents` first; there is no idempotency key and each generation counts against the quota\n5. Expect a 422 with field names when a required field is missing, and a rejected create at 100 per cent of the monthly quota unless pay-as-you-go is on\n\n## Questions\n\n### Which is better for AI agents, Nutrient DWS Processor API or PDFMonkey?\n\nNutrient DWS Processor API scores 71.6 (BB) on agent readiness against PDFMonkey's 59.3 (C), and leads in 5 of 7 scored categories.\n\n### Do Nutrient DWS Processor API and PDFMonkey need an API key?\n\nNutrient DWS Processor API takes an API key or an OAuth sign-in. PDFMonkey needs an API key.\n\n### Can an agent call Nutrient DWS Processor API and PDFMonkey without installing anything?\n\nYes. Nutrient DWS Processor API has a hosted endpoint at https://api.nutrient.io and PDFMonkey at https://api.pdfmonkey.io/api/v1.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfmonkey.json, and with the fewest tokens: https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfmonkey.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"nutrient-dws-processor\", \"b\": \"pdfmonkey\"}`. From a terminal: `anchor compare nutrient-dws-processor pdfmonkey`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/nutrient-dws-processor.json and https://www.anchorterminal.com/api/v1/tools/pdfmonkey.json\n\n## Other comparisons with Nutrient DWS Processor API or PDFMonkey\n\n- [CloudConvert API vs Nutrient DWS Processor API](https://www.anchorterminal.com/compare/cloudconvert-vs-nutrient-dws-processor.md)\n- [Foxit PDF Services API vs Nutrient DWS Processor API](https://www.anchorterminal.com/compare/foxit-pdf-services-vs-nutrient-dws-processor.md)\n- [iLoveAPI vs Nutrient DWS Processor API](https://www.anchorterminal.com/compare/iloveapi-vs-nutrient-dws-processor.md)\n- [Nutrient DWS Processor API vs PDF.co API + MCP](https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdf-co.md)\n- [Nutrient DWS Processor API vs pdfRest API Toolkit](https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfrest.md)\n- [CloudConvert API vs PDFMonkey](https://www.anchorterminal.com/compare/cloudconvert-vs-pdfmonkey.md)\n- [DocRaptor vs Nutrient DWS Processor API](https://www.anchorterminal.com/compare/docraptor-vs-nutrient-dws-processor.md)\n- [DocRaptor vs PDFMonkey](https://www.anchorterminal.com/compare/docraptor-vs-pdfmonkey.md)\n- [Foxit PDF Services API vs PDFMonkey](https://www.anchorterminal.com/compare/foxit-pdf-services-vs-pdfmonkey.md)\n- [iLoveAPI vs PDFMonkey](https://www.anchorterminal.com/compare/iloveapi-vs-pdfmonkey.md)\n- [PDF.co API + MCP vs PDFMonkey](https://www.anchorterminal.com/compare/pdf-co-vs-pdfmonkey.md)\n- [PDFMonkey vs pdfRest API Toolkit](https://www.anchorterminal.com/compare/pdfmonkey-vs-pdfrest.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Nutrient DWS Processor API vs PDFMonkey",
        "url": ""
      }
    ],
    "description": "Nutrient DWS Processor scores 71.6 (BB) to PDFMonkey's 59.3 (C) for pdf generate. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Nutrient DWS Processor API BB 71.6",
      "PDFMonkey C 59.3",
      "scores"
    ],
    "h1": "Nutrient DWS Processor API vs PDFMonkey",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/nutrient-dws-processor-vs-pdfmonkey",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Nutrient DWS Processor vs PDFMonkey for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-04",
    "url": "https://www.anchorterminal.com/compare/nutrient-dws-processor-vs-pdfmonkey"
  },
  "tokens": {
    "markdown": 4100,
    "slim": 2430
  },
  "version": 1
}
