{
  "aid": "formfeed.dev:formfeed",
  "name": "Formfeed",
  "description": "Formfeed is an API that renders PDFs and images from HTML templates written in Jinja2, Liquid or Handlebars and JSON data, fills Word and PowerPoint templates, converts office documents to PDF, merges, protects and watermarks PDFs, and turns an invoice into a ZUGFeRD / Factur-X e-invoice that is validated before it is delivered. Rendering runs in Frankfurt, rendered files are stored in the EU, prices are in EUR and there is a free plan. Around the API: a browser editor, a command line tool for templates as files, SDKs for TypeScript and Python, and an MCP server for AI agents.",
  "url": "https://formfeed.dev/apis.json",
  "image": "https://formfeed.dev/brand/formfeed-512.png",
  "specificationVersion": "0.23",
  "created": "2026-10-05",
  "modified": "2026-10-17",
  "type": "Index",
  "kind": "company",
  "position": "Producing",
  "access": "3rd-Party",
  "tags": [
    "PDF",
    "Image Generation",
    "Documents",
    "Templates",
    "E-Invoicing",
    "Developer Tools"
  ],
  "apis": [
    {
      "aid": "formfeed.dev:formfeed-api",
      "name": "Formfeed API",
      "description": "One call per document: a template and JSON data in, a PDF, an image or a Word or PowerPoint file out. Synchronous and queued renders, batches of up to 1,000 documents, webhooks, templates and their versions as resources, a file library and PDF tools.",
      "image": "https://formfeed.dev/brand/formfeed-512.png",
      "humanURL": "https://docs.formfeed.dev/api/overview",
      "baseURL": "https://api.formfeed.dev/v1",
      "version": "v1",
      "tags": [
        "PDF",
        "Image Generation",
        "Templates",
        "Webhooks"
      ],
      "properties": [
        {
          "type": "OpenAPI",
          "name": "OpenAPI 3.0 description",
          "url": "https://api.formfeed.dev/v1/openapi.json",
          "mediaType": "application/json"
        },
        {
          "type": "APIReference",
          "url": "https://docs.formfeed.dev/api/reference/formfeed"
        },
        {
          "type": "Documentation",
          "url": "https://docs.formfeed.dev/api/overview"
        },
        {
          "type": "GettingStarted",
          "url": "https://docs.formfeed.dev/getting-started/quickstart"
        },
        {
          "type": "Authentication",
          "url": "https://docs.formfeed.dev/api/authentication"
        },
        {
          "type": "Sandbox",
          "name": "Test keys",
          "description": "A key that starts with ff_test_ renders on the same endpoints without using units: files are kept for at most 24 hours, every file carries a test mark on the Free plan, and test e-invoices carry it on every plan and are limited to a number per day.",
          "url": "https://docs.formfeed.dev/api/authentication#test-and-live-keys"
        },
        {
          "type": "ErrorCodes",
          "description": "Errors are RFC 9457 problem details with a stable code, and every code has its page.",
          "url": "https://docs.formfeed.dev/api/errors"
        },
        {
          "type": "RateLimits",
          "url": "https://docs.formfeed.dev/api/limits-and-usage"
        },
        {
          "type": "RateLimits",
          "name": "Requests per second by plan",
          "description": "Per workspace, on POST requests under /renders, /pdf and /compat/apitemplate; reads and polling are not limited, and a batch takes one request. A token bucket: its size and its refill rate per second are both the number given here. Test keys on the Free plan have 30 requests per minute on top.",
          "data": {
            "plans": [
              {
                "name": "Free",
                "requestsPerSecond": 1
              },
              {
                "name": "Starter",
                "requestsPerSecond": 5
              },
              {
                "name": "Pro",
                "requestsPerSecond": 15
              },
              {
                "name": "Business",
                "requestsPerSecond": 40
              }
            ]
          }
        },
        {
          "type": "Webhooks",
          "url": "https://docs.formfeed.dev/api/webhooks"
        },
        {
          "type": "ChangeLog",
          "name": "API changelog",
          "url": "https://docs.formfeed.dev/changelog"
        },
        {
          "type": "SDKs",
          "name": "TypeScript SDK (@formfeed/sdk on npm)",
          "url": "https://www.npmjs.com/package/@formfeed/sdk"
        },
        {
          "type": "SDKs",
          "name": "Python SDK (formfeed on PyPI)",
          "url": "https://pypi.org/project/formfeed/"
        },
        {
          "type": "CLI",
          "name": "Command line tool (formfeed on npm)",
          "description": "Templates as files: validate, test, preview, render and push. Documented at https://docs.formfeed.dev/cli",
          "url": "https://www.npmjs.com/package/formfeed"
        },
        {
          "type": "MCPServer",
          "name": "Hosted MCP server",
          "description": "Streamable HTTP. https://mcp.formfeed.dev/mcp takes an API key as bearer token or a sign-in (OAuth 2.1, the workspace chosen at consent; protected resource metadata at https://mcp.formfeed.dev/.well-known/oauth-protected-resource/mcp); https://mcp.formfeed.dev/mcp/{workspace_id} pins another workspace. Server card (SEP-2127) at https://mcp.formfeed.dev/mcp/server-card. In the MCP registry as io.github.formfeed-dev/formfeed. Documented at https://docs.formfeed.dev/integrations/mcp",
          "url": "https://mcp.formfeed.dev/mcp"
        },
        {
          "type": "MCPServer",
          "name": "Local MCP server (@formfeed/mcp on npm)",
          "description": "The same tools over stdio: npx -y @formfeed/mcp with FORMFEED_API_KEY.",
          "url": "https://www.npmjs.com/package/@formfeed/mcp"
        },
        {
          "type": "CodeExamples",
          "name": "Example templates",
          "description": "Complete templates with their data, the rendered file and the request in eight languages.",
          "url": "https://formfeed.dev/examples"
        },
        {
          "type": "Tutorials",
          "name": "Guides per programming language",
          "url": "https://formfeed.dev/guides"
        },
        {
          "type": "Integrations",
          "url": "https://formfeed.dev/integrations"
        },
        {
          "type": "UseCases",
          "url": "https://formfeed.dev/use-cases"
        }
      ]
    }
  ],
  "common": [
    {
      "type": "Website",
      "url": "https://formfeed.dev"
    },
    {
      "type": "Pricing",
      "url": "https://formfeed.dev/pricing"
    },
    {
      "type": "Plans",
      "name": "Plans, prices and included units",
      "description": "A plan is a flat price per month or per year with a number of render units included. It is not priced per seat. Enterprise is agreed individually.",
      "data": {
        "currency": "EUR",
        "unit": "One unit is a PDF of up to 5 pages (each further 5 pages add one) or one image or Word/PowerPoint file; a PDF from a Word or PowerPoint template and /pdf/convert follow the PDF rule; merge, protect and watermark cost 0.5 each; an e-invoice (ZUGFeRD, Factur-X) adds one unit to its render.",
        "plans": [
          {
            "name": "Free",
            "pricePerMonth": 0,
            "pricePerYear": 0,
            "unitsPerMonth": 100,
            "overagePer1000Units": null
          },
          {
            "name": "Starter",
            "pricePerMonth": 19,
            "pricePerYear": 180,
            "unitsPerMonth": 3000,
            "overagePer1000Units": 7
          },
          {
            "name": "Pro",
            "pricePerMonth": 59,
            "pricePerYear": 588,
            "unitsPerMonth": 15000,
            "overagePer1000Units": 5
          },
          {
            "name": "Business",
            "pricePerMonth": 179,
            "pricePerYear": 1788,
            "unitsPerMonth": 60000,
            "overagePer1000Units": 4
          }
        ]
      }
    },
    {
      "type": "SignUp",
      "description": "Signing in with a new address creates the account.",
      "url": "https://app.formfeed.dev/en/sign-in"
    },
    {
      "type": "Login",
      "url": "https://app.formfeed.dev/en/sign-in"
    },
    {
      "type": "TermsOfService",
      "url": "https://formfeed.dev/legal/terms"
    },
    {
      "type": "PrivacyPolicy",
      "url": "https://formfeed.dev/legal/privacy"
    },
    {
      "type": "x-DataProcessingAgreement",
      "url": "https://formfeed.dev/legal/dpa"
    },
    {
      "type": "x-SubProcessors",
      "url": "https://formfeed.dev/legal/subprocessors"
    },
    {
      "type": "x-DataResidency",
      "description": "Rendering runs in Frankfurt, and rendered files are stored in the EU.",
      "url": "https://docs.formfeed.dev/api/data-residency"
    },
    {
      "type": "Security",
      "url": "https://formfeed.dev/security"
    },
    {
      "type": "SecurityTxt",
      "url": "https://formfeed.dev/.well-known/security.txt"
    },
    {
      "type": "StatusPage",
      "url": "https://status.formfeed.dev"
    },
    {
      "type": "Support",
      "url": "https://formfeed.dev/support"
    },
    {
      "type": "ChangeLog",
      "name": "Product changelog",
      "url": "https://formfeed.dev/changelog"
    },
    {
      "type": "Blog",
      "url": "https://formfeed.dev/blog"
    },
    {
      "type": "BlogFeed",
      "url": "https://formfeed.dev/rss.xml"
    },
    {
      "type": "APICatalog",
      "name": "API catalog (RFC 9727)",
      "url": "https://formfeed.dev/.well-known/api-catalog",
      "mediaType": "application/linkset+json"
    },
    {
      "type": "x-AICatalog",
      "name": "AI catalog, which names the MCP server card",
      "url": "https://formfeed.dev/.well-known/ai-catalog.json",
      "mediaType": "application/ai-catalog+json"
    },
    {
      "type": "LLMsTxt",
      "url": "https://formfeed.dev/llms.txt"
    },
    {
      "type": "LLMsTxt",
      "name": "The documentation as one plain-text file",
      "url": "https://docs.formfeed.dev/llms-full.txt"
    },
    {
      "type": "GitHubOrg",
      "url": "https://github.com/formfeed-dev"
    },
    {
      "type": "GitHubRepo",
      "name": "SDKs, CLI, template engine and MCP server (MIT)",
      "url": "https://github.com/formfeed-dev/formfeed"
    },
    {
      "type": "GitHubRepo",
      "name": "Example templates (MIT)",
      "url": "https://github.com/formfeed-dev/templates"
    },
    {
      "type": "GitHubRepo",
      "name": "GitHub Action that validates, tests, previews and publishes templates (MIT)",
      "url": "https://github.com/formfeed-dev/formfeed-action"
    },
    {
      "type": "GitHubRepo",
      "name": "Plugin for coding agents: the hosted MCP server for Cursor and Claude Code, listed on cursor.directory (MIT)",
      "url": "https://github.com/formfeed-dev/skills"
    }
  ],
  "maintainers": [
    {
      "FN": "Formfeed",
      "email": "support@formfeed.dev",
      "url": "https://formfeed.dev",
      "X-github": "formfeed-dev"
    }
  ]
}
