[{"data":1,"prerenderedAt":1112},["Reactive",2],{"/pdf-generator-api":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":5,"title":7,"description":8,"date":9,"dateModified":9,"author":10,"faq":11,"body":24,"_type":1107,"_id":1108,"_source":1109,"_file":1110,"_extension":1111},"/pdf-generator-api","",false,"PDF Generator API: HTML to PDF, With Prices Compared","PDFShift turns your HTML or a URL into a PDF with one POST. See the request, the response, the limits, and what 500 to 500,000 PDFs a month cost.","2026-11-09","Cyril Nicodème",[12,15,18,21],{"question":13,"answer":14},"Is there a free PDF generator API?","Yes. PDFShift's free plan gives you 50 credits a month with no credit card, for files up to 15 MB and conversions up to 30 seconds. For testing, add \"sandbox\": true to a request: the PDF gets a watermark and uses no credits, up to 10 documents a minute.",{"question":16,"answer":17},"How do I automate PDF generation without writing a backend?","Use a no-code tool that can call PDFShift, such as n8n, Make or Zapier, or give an AI agent our hosted MCP server. Each one calls the same API as the code on this page.",{"question":19,"answer":20},"Which browser engine renders my HTML?","Chromium. New accounts get the latest version PDFShift offers, and the X-Processor-Version header lets you pin one of the accepted versions, 116 or 142.",{"question":22,"answer":23},"Can the same API make images instead of PDFs?","Yes. Separate endpoints return PNG, JPEG or WebP from the same HTML or URL.",{"type":25,"children":26,"toc":1091},"root",[27,44,51,73,85,105,118,129,140,203,353,360,365,371,376,378,729,734,739,886,899,905,934,939,945,973,1014,1020,1025,1038,1043,1064,1069,1082,1087],{"type":28,"tag":29,"props":30,"children":31},"element","p",{},[32,35,42],{"type":33,"value":34},"text","Send PDFShift your HTML or a URL in one POST request, and the PDF comes back in the response. Your templates stay in your own code, the Chromium that renders them runs on our servers, and you can see what it costs before you sign up: ",{"type":28,"tag":36,"props":37,"children":39},"a",{"href":38},"/register/",[40],{"type":33,"value":41},"free for 50 credits a month",{"type":33,"value":43},", then from $9 for 500 to $799 for 500,000.",{"type":28,"tag":45,"props":46,"children":48},"h2",{"id":47},"generate-an-invoice-pdf-from-html-with-one-api-call",[49],{"type":33,"value":50},"Generate an invoice PDF from HTML with one API call",{"type":28,"tag":29,"props":52,"children":53},{},[54,56,63,65,71],{"type":33,"value":55},"Your app already renders the invoice as HTML. Send that HTML as ",{"type":28,"tag":57,"props":58,"children":60},"code",{"className":59},[],[61],{"type":33,"value":62},"source",{"type":33,"value":64},", with your API key in the ",{"type":28,"tag":57,"props":66,"children":68},{"className":67},[],[69],{"type":33,"value":70},"X-API-Key",{"type":33,"value":72}," header:",{"type":28,"tag":74,"props":75,"children":80},"pre",{"className":76,"code":78,"language":79,"meta":5},[77],"language-bash","curl https://api.pdfshift.io/v3/convert/pdf \\\n  -H 'X-API-Key: sk_your_api_key' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"source\": \"\u003Ch1>Invoice #1042\u003C/h1>\u003Cp>Total: $240.00\u003C/p>\"}' \\\n  -o invoice-1042.pdf\n","bash",[81],{"type":28,"tag":57,"props":82,"children":83},{"__ignoreMap":5},[84],{"type":33,"value":78},{"type":28,"tag":29,"props":86,"children":87},{},[88,90,96,98,103],{"type":33,"value":89},"The response body is the PDF itself, so ",{"type":28,"tag":57,"props":91,"children":93},{"className":92},[],[94],{"type":33,"value":95},"-o",{"type":33,"value":97}," writes it straight to a file. Got a URL instead? Put it in ",{"type":28,"tag":57,"props":99,"children":101},{"className":100},[],[102],{"type":33,"value":62},{"type":33,"value":104}," and we load the page and convert it, no extra flag.",{"type":28,"tag":29,"props":106,"children":107},{},[108,110,116],{"type":33,"value":109},"The same call from Node.js 18 or later, and from Python with ",{"type":28,"tag":57,"props":111,"children":113},{"className":112},[],[114],{"type":33,"value":115},"requests",{"type":33,"value":117},":",{"type":28,"tag":74,"props":119,"children":124},{"className":120,"code":122,"language":123,"meta":5},[121],"language-javascript","const res = await fetch('https://api.pdfshift.io/v3/convert/pdf', {\n  method: 'POST',\n  headers: {\n    'X-API-Key': process.env.PDFSHIFT_API_KEY,\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({ source: invoiceHtml })\n})\nconst pdf = Buffer.from(await res.arrayBuffer())\n","javascript",[125],{"type":28,"tag":57,"props":126,"children":127},{"__ignoreMap":5},[128],{"type":33,"value":122},{"type":28,"tag":74,"props":130,"children":135},{"className":131,"code":133,"language":134,"meta":5},[132],"language-python","import os, requests\n\nres = requests.post(\n    \"https://api.pdfshift.io/v3/convert/pdf\",\n    headers={\"X-API-Key\": os.environ[\"PDFSHIFT_API_KEY\"]},\n    json={\"source\": invoice_html},\n)\npdf = res.content\n","python",[136],{"type":28,"tag":57,"props":137,"children":138},{"__ignoreMap":5},[139],{"type":33,"value":133},{"type":28,"tag":29,"props":141,"children":142},{},[143,145,151,153,159,161,167,169,175,177,183,185,191,193,201],{"type":33,"value":144},"Read the body as bytes, not JSON. If you'd rather have a link, add ",{"type":28,"tag":57,"props":146,"children":148},{"className":147},[],[149],{"type":33,"value":150},"\"filename\": \"invoice-1042\"",{"type":33,"value":152}," and the response turns into JSON with a ",{"type":28,"tag":57,"props":154,"children":156},{"className":155},[],[157],{"type":33,"value":158},"url",{"type":33,"value":160}," to the PDF, plus ",{"type":28,"tag":57,"props":162,"children":164},{"className":163},[],[165],{"type":33,"value":166},"filesize",{"type":33,"value":168},", ",{"type":28,"tag":57,"props":170,"children":172},{"className":171},[],[173],{"type":33,"value":174},"duration",{"type":33,"value":176}," and ",{"type":28,"tag":57,"props":178,"children":180},{"className":179},[],[181],{"type":33,"value":182},"pdf_pages",{"type":33,"value":184},". Add ",{"type":28,"tag":57,"props":186,"children":188},{"className":187},[],[189],{"type":33,"value":190},"\"encode\": true",{"type":33,"value":192}," and the PDF comes back Base64-encoded. Every parameter is in the ",{"type":28,"tag":36,"props":194,"children":198},{"href":195,"rel":196},"https://docs.pdfshift.io/api-reference/convert-to-pdf",[197],"nofollow",[199],{"type":33,"value":200},"convert reference",{"type":33,"value":202}," (API v3).",{"type":28,"tag":204,"props":205,"children":207},"guide-figure",{"caption":206},"What one POST to /v3/convert/pdf sends back, by the parameter you add. PDFShift API v3.",[208],{"type":28,"tag":209,"props":210,"children":219},"svg",{"viewBox":211,"xmlns":212,"role":213,"ariaLabelledBy":214,"style":217,"fontFamily":218},"0 0 400 252","http://www.w3.org/2000/svg","img",[215,216],"pga-resp-title","pga-resp-desc","max-width:400px;display:block;margin:0 auto","DM Sans, sans-serif",[220,226,232,251,262,271,277,282,288,292,298,302,305,310,314,319,323,326,331,335,341,345,348],{"type":28,"tag":221,"props":222,"children":223},"title",{"id":215},[224],{"type":33,"value":225},"One request, four ways to get the result",{"type":28,"tag":227,"props":228,"children":229},"desc",{"id":216},[230],{"type":33,"value":231},"With no parameter added, the response body is the PDF. With filename, JSON with a URL to the PDF, kept for 2 days. With encode true, the PDF as Base64 text. With webhook, a 202 at once and the result posted to your webhook later.",{"type":28,"tag":233,"props":234,"children":237},"g",{"style":235,"fill":236},"font-size:13px","#4C556D",[238,245],{"type":28,"tag":33,"props":239,"children":242},{"x":240,"y":241},"0","16",[243],{"type":33,"value":244},"You add",{"type":28,"tag":33,"props":246,"children":248},{"x":247,"y":241},"148",[249],{"type":33,"value":250},"You get back",{"type":28,"tag":252,"props":253,"children":261},"rect",{"x":254,"y":255,"width":256,"height":257,"rx":258,"fill":259,"stroke":260},"1","28","130","44","8","#FFFFFF","#DBE4F2",[],{"type":28,"tag":33,"props":263,"children":268},{"style":264,"x":265,"y":266,"fill":267},"font-size:13px;font-weight:600","12","55","#0A0C3D",[269],{"type":33,"value":270},"No parameter",{"type":28,"tag":272,"props":273,"children":276},"path",{"d":274,"stroke":236,"fill":275},"M134 50 h10 m-5 -5 l5 5 l-5 5","none",[],{"type":28,"tag":252,"props":278,"children":281},{"x":247,"y":255,"width":279,"height":257,"rx":258,"fill":259,"stroke":280},"251","#6C47FF",[],{"type":28,"tag":33,"props":283,"children":285},{"style":235,"x":284,"y":266,"fill":267},"160",[286],{"type":33,"value":287},"The PDF, as the response body",{"type":28,"tag":252,"props":289,"children":291},{"x":254,"y":290,"width":256,"height":257,"rx":258,"fill":259,"stroke":260},"84",[],{"type":28,"tag":33,"props":293,"children":295},{"style":264,"x":265,"y":294,"fill":267},"111",[296],{"type":33,"value":297},"\"filename\"",{"type":28,"tag":272,"props":299,"children":301},{"d":300,"stroke":236,"fill":275},"M134 106 h10 m-5 -5 l5 5 l-5 5",[],{"type":28,"tag":252,"props":303,"children":304},{"x":247,"y":290,"width":279,"height":257,"rx":258,"fill":259,"stroke":280},[],{"type":28,"tag":33,"props":306,"children":307},{"style":235,"x":284,"y":294,"fill":267},[308],{"type":33,"value":309},"JSON with a url, kept 2 days",{"type":28,"tag":252,"props":311,"children":313},{"x":254,"y":312,"width":256,"height":257,"rx":258,"fill":259,"stroke":260},"140",[],{"type":28,"tag":33,"props":315,"children":317},{"style":264,"x":265,"y":316,"fill":267},"167",[318],{"type":33,"value":190},{"type":28,"tag":272,"props":320,"children":322},{"d":321,"stroke":236,"fill":275},"M134 162 h10 m-5 -5 l5 5 l-5 5",[],{"type":28,"tag":252,"props":324,"children":325},{"x":247,"y":312,"width":279,"height":257,"rx":258,"fill":259,"stroke":280},[],{"type":28,"tag":33,"props":327,"children":328},{"style":235,"x":284,"y":316,"fill":267},[329],{"type":33,"value":330},"The PDF as Base64 text",{"type":28,"tag":252,"props":332,"children":334},{"x":254,"y":333,"width":256,"height":257,"rx":258,"fill":259,"stroke":260},"196",[],{"type":28,"tag":33,"props":336,"children":338},{"style":264,"x":265,"y":337,"fill":267},"223",[339],{"type":33,"value":340},"\"webhook\"",{"type":28,"tag":272,"props":342,"children":344},{"d":343,"stroke":236,"fill":275},"M134 218 h10 m-5 -5 l5 5 l-5 5",[],{"type":28,"tag":252,"props":346,"children":347},{"x":247,"y":333,"width":279,"height":257,"rx":258,"fill":259,"stroke":280},[],{"type":28,"tag":33,"props":349,"children":350},{"style":235,"x":284,"y":337,"fill":267},[351],{"type":33,"value":352},"202 now, the result POSTed later",{"type":28,"tag":354,"props":355,"children":357},"h3",{"id":356},"templates-in-a-visual-editor-or-your-own-html",[358],{"type":33,"value":359},"Templates in a visual editor, or your own HTML?",{"type":28,"tag":29,"props":361,"children":362},{},[363],{"type":33,"value":364},"We render the HTML and CSS you already have, with a current Chromium. Most of the other PDF generator APIs you'll find in a search work the opposite way: you rebuild the template in their visual editor, then fill it with JSON. If your developers own the layout, that's a second copy of every template, in another company's editor, to keep in sync. Rather keep templates with us? Store them as HTML through the API and send only the data each time.",{"type":28,"tag":45,"props":366,"children":368},{"id":367},"pdf-generation-api-comparison-what-500-to-500000-pdfs-a-month-cost",[369],{"type":33,"value":370},"PDF generation API comparison: what 500 to 500,000 PDFs a month cost",{"type":28,"tag":29,"props":372,"children":373},{},[374],{"type":33,"value":375},"We count 1 credit per 5 MB of output, so an invoice or a report of a few pages costs 1 credit. Here's the smallest published plan that covers each volume of one-page PDFs, and what it costs a month:",{"type":33,"value":377},"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",{"type":28,"tag":379,"props":380,"children":381},"table",{},[382,421],{"type":28,"tag":383,"props":384,"children":385},"thead",{},[386],{"type":28,"tag":387,"props":388,"children":389},"tr",{},[390,396,401,406,411,416],{"type":28,"tag":391,"props":392,"children":393},"th",{},[394],{"type":33,"value":395},"API",{"type":28,"tag":391,"props":397,"children":398},{},[399],{"type":33,"value":400},"Billed by",{"type":28,"tag":391,"props":402,"children":403},{},[404],{"type":33,"value":405},"500 a month",{"type":28,"tag":391,"props":407,"children":408},{},[409],{"type":33,"value":410},"5,000",{"type":28,"tag":391,"props":412,"children":413},{},[414],{"type":33,"value":415},"50,000",{"type":28,"tag":391,"props":417,"children":418},{},[419],{"type":33,"value":420},"500,000",{"type":28,"tag":422,"props":423,"children":424},"tbody",{},[425,478,511,544,574,607,638,668,696],{"type":28,"tag":387,"props":426,"children":427},{},[428,438,446,454,462,470],{"type":28,"tag":429,"props":430,"children":431},"td",{},[432],{"type":28,"tag":433,"props":434,"children":435},"strong",{},[436],{"type":33,"value":437},"PDFShift",{"type":28,"tag":429,"props":439,"children":440},{},[441],{"type":28,"tag":433,"props":442,"children":443},{},[444],{"type":33,"value":445},"credit (1 per 5 MB)",{"type":28,"tag":429,"props":447,"children":448},{},[449],{"type":28,"tag":433,"props":450,"children":451},{},[452],{"type":33,"value":453},"$9",{"type":28,"tag":429,"props":455,"children":456},{},[457],{"type":28,"tag":433,"props":458,"children":459},{},[460],{"type":33,"value":461},"$39",{"type":28,"tag":429,"props":463,"children":464},{},[465],{"type":28,"tag":433,"props":466,"children":467},{},[468],{"type":33,"value":469},"$149",{"type":28,"tag":429,"props":471,"children":472},{},[473],{"type":28,"tag":433,"props":474,"children":475},{},[476],{"type":33,"value":477},"$799",{"type":28,"tag":387,"props":479,"children":480},{},[481,486,491,496,501,506],{"type":28,"tag":429,"props":482,"children":483},{},[484],{"type":33,"value":485},"PDF Generator API",{"type":28,"tag":429,"props":487,"children":488},{},[489],{"type":33,"value":490},"credit (1 per 1 to 5 pages)",{"type":28,"tag":429,"props":492,"children":493},{},[494],{"type":33,"value":495},"€43, billed yearly",{"type":28,"tag":429,"props":497,"children":498},{},[499],{"type":33,"value":500},"€73, billed yearly",{"type":28,"tag":429,"props":502,"children":503},{},[504],{"type":33,"value":505},"€296, billed yearly",{"type":28,"tag":429,"props":507,"children":508},{},[509],{"type":33,"value":510},"not published",{"type":28,"tag":387,"props":512,"children":513},{},[514,519,524,529,534,539],{"type":28,"tag":429,"props":515,"children":516},{},[517],{"type":33,"value":518},"CraftMyPDF",{"type":28,"tag":429,"props":520,"children":521},{},[522],{"type":33,"value":523},"PDF",{"type":28,"tag":429,"props":525,"children":526},{},[527],{"type":33,"value":528},"$29",{"type":28,"tag":429,"props":530,"children":531},{},[532],{"type":33,"value":533},"$99",{"type":28,"tag":429,"props":535,"children":536},{},[537],{"type":33,"value":538},"$499",{"type":28,"tag":429,"props":540,"children":541},{},[542],{"type":33,"value":543},"contact sales",{"type":28,"tag":387,"props":545,"children":546},{},[547,552,556,561,566,570],{"type":28,"tag":429,"props":548,"children":549},{},[550],{"type":33,"value":551},"APITemplate.io",{"type":28,"tag":429,"props":553,"children":554},{},[555],{"type":33,"value":523},{"type":28,"tag":429,"props":557,"children":558},{},[559],{"type":33,"value":560},"$24",{"type":28,"tag":429,"props":562,"children":563},{},[564],{"type":33,"value":565},"$89",{"type":28,"tag":429,"props":567,"children":568},{},[569],{"type":33,"value":510},{"type":28,"tag":429,"props":571,"children":572},{},[573],{"type":33,"value":510},{"type":28,"tag":387,"props":575,"children":576},{},[577,582,587,592,597,602],{"type":28,"tag":429,"props":578,"children":579},{},[580],{"type":33,"value":581},"PDFMonkey",{"type":28,"tag":429,"props":583,"children":584},{},[585],{"type":33,"value":586},"document",{"type":28,"tag":429,"props":588,"children":589},{},[590],{"type":33,"value":591},"€6.60",{"type":28,"tag":429,"props":593,"children":594},{},[595],{"type":33,"value":596},"€29",{"type":28,"tag":429,"props":598,"children":599},{},[600],{"type":33,"value":601},"€300",{"type":28,"tag":429,"props":603,"children":604},{},[605],{"type":33,"value":606},"€2,500",{"type":28,"tag":387,"props":608,"children":609},{},[610,615,620,625,630,634],{"type":28,"tag":429,"props":611,"children":612},{},[613],{"type":33,"value":614},"Nutrient DWS API",{"type":28,"tag":429,"props":616,"children":617},{},[618],{"type":33,"value":619},"credit (0.5 per HTML to PDF)",{"type":28,"tag":429,"props":621,"children":622},{},[623],{"type":33,"value":624},"$75",{"type":28,"tag":429,"props":626,"children":627},{},[628],{"type":33,"value":629},"$275",{"type":28,"tag":429,"props":631,"children":632},{},[633],{"type":33,"value":543},{"type":28,"tag":429,"props":635,"children":636},{},[637],{"type":33,"value":543},{"type":28,"tag":387,"props":639,"children":640},{},[641,646,651,656,660,664],{"type":28,"tag":429,"props":642,"children":643},{},[644],{"type":33,"value":645},"Adobe PDF Services",{"type":28,"tag":429,"props":647,"children":648},{},[649],{"type":33,"value":650},"document transaction",{"type":28,"tag":429,"props":652,"children":653},{},[654],{"type":33,"value":655},"free tier, 500 a month",{"type":28,"tag":429,"props":657,"children":658},{},[659],{"type":33,"value":543},{"type":28,"tag":429,"props":661,"children":662},{},[663],{"type":33,"value":543},{"type":28,"tag":429,"props":665,"children":666},{},[667],{"type":33,"value":543},{"type":28,"tag":387,"props":669,"children":670},{},[671,676,680,684,688,692],{"type":28,"tag":429,"props":672,"children":673},{},[674],{"type":33,"value":675},"DocRaptor",{"type":28,"tag":429,"props":677,"children":678},{},[679],{"type":33,"value":586},{"type":28,"tag":429,"props":681,"children":682},{},[683],{"type":33,"value":624},{"type":28,"tag":429,"props":685,"children":686},{},[687],{"type":33,"value":469},{"type":28,"tag":429,"props":689,"children":690},{},[691],{"type":33,"value":543},{"type":28,"tag":429,"props":693,"children":694},{},[695],{"type":33,"value":543},{"type":28,"tag":387,"props":697,"children":698},{},[699,704,709,714,719,724],{"type":28,"tag":429,"props":700,"children":701},{},[702],{"type":33,"value":703},"Api2Pdf",{"type":28,"tag":429,"props":705,"children":706},{},[707],{"type":33,"value":708},"MB and compute second",{"type":28,"tag":429,"props":710,"children":711},{},[712],{"type":33,"value":713},"about $1.25",{"type":28,"tag":429,"props":715,"children":716},{},[717],{"type":33,"value":718},"about $3.46",{"type":28,"tag":429,"props":720,"children":721},{},[722],{"type":33,"value":723},"about $26",{"type":28,"tag":429,"props":725,"children":726},{},[727],{"type":33,"value":728},"about $247",{"type":28,"tag":29,"props":730,"children":731},{},[732],{"type":33,"value":733},"Prices as of November 9, 2026, billed monthly unless the row says otherwise. PDFMonkey's figures include its published per-document overage. Api2Pdf charges $1 a month plus bandwidth and compute time, so its figures use the 0.1 MB, 2-second PDF from its own pricing example. A heavier page costs more.",{"type":28,"tag":29,"props":735,"children":736},{},[737],{"type":33,"value":738},"The more PDFs you make, the fewer of these APIs will tell you the price:",{"type":28,"tag":204,"props":740,"children":742},{"caption":741},"How many of the 9 APIs in the table publish a monthly price at each volume of one-page PDFs, as of November 9, 2026.",[743],{"type":28,"tag":209,"props":744,"children":749},{"viewBox":745,"xmlns":212,"role":213,"ariaLabelledBy":746,"style":217,"fontFamily":218},"0 0 400 264",[747,748],"pga-pub-title","pga-pub-desc",[750,755,760,835,841,847,853,858],{"type":28,"tag":221,"props":751,"children":752},{"id":747},[753],{"type":33,"value":754},"At 500,000 PDFs a month, 3 of 9 APIs publish a price",{"type":28,"tag":227,"props":756,"children":757},{"id":748},[758],{"type":33,"value":759},"Bar chart of how many of the 9 APIs publish a monthly price that covers each volume. 500 PDFs a month: 9. 5,000: 8. 50,000: 5. 500,000: 3, PDFShift, PDFMonkey and Api2Pdf.",{"type":28,"tag":233,"props":761,"children":762},{"style":235,"fill":236},[763,770,777,781,787,791,797,801,807,814,819,824,829],{"type":28,"tag":764,"props":765,"children":769},"line",{"x1":766,"y1":767,"x2":768,"y2":767,"stroke":260},"40","220.0","396",[],{"type":28,"tag":33,"props":771,"children":775},{"x":772,"y":773,"textAnchor":774},"30","224.0","end",[776],{"type":33,"value":240},{"type":28,"tag":764,"props":778,"children":780},{"x1":766,"y1":779,"x2":768,"y2":779,"stroke":260},"163.3",[],{"type":28,"tag":33,"props":782,"children":784},{"x":772,"y":783,"textAnchor":774},"167.3",[785],{"type":33,"value":786},"3",{"type":28,"tag":764,"props":788,"children":790},{"x1":766,"y1":789,"x2":768,"y2":789,"stroke":260},"106.7",[],{"type":28,"tag":33,"props":792,"children":794},{"x":772,"y":793,"textAnchor":774},"110.7",[795],{"type":33,"value":796},"6",{"type":28,"tag":764,"props":798,"children":800},{"x1":766,"y1":799,"x2":768,"y2":799,"stroke":260},"50.0",[],{"type":28,"tag":33,"props":802,"children":804},{"x":772,"y":803,"textAnchor":774},"54.0",[805],{"type":33,"value":806},"9",{"type":28,"tag":33,"props":808,"children":811},{"x":290,"y":809,"textAnchor":810},"240","middle",[812],{"type":33,"value":813},"500",{"type":28,"tag":33,"props":815,"children":817},{"x":816,"y":809,"textAnchor":810},"172",[818],{"type":33,"value":410},{"type":28,"tag":33,"props":820,"children":822},{"x":821,"y":809,"textAnchor":810},"260",[823],{"type":33,"value":415},{"type":28,"tag":33,"props":825,"children":827},{"x":826,"y":809,"textAnchor":810},"348",[828],{"type":33,"value":420},{"type":28,"tag":33,"props":830,"children":832},{"x":831,"y":821,"textAnchor":810},"216",[833],{"type":33,"value":834},"One-page PDFs a month",{"type":28,"tag":252,"props":836,"children":840},{"x":837,"y":799,"width":837,"height":838,"rx":839,"fill":280},"56","170.0","4",[],{"type":28,"tag":252,"props":842,"children":846},{"x":843,"y":844,"width":837,"height":845,"rx":839,"fill":280},"144","68.9","151.1",[],{"type":28,"tag":252,"props":848,"children":852},{"x":849,"y":850,"width":837,"height":851,"rx":839,"fill":280},"232","125.6","94.4",[],{"type":28,"tag":252,"props":854,"children":857},{"x":855,"y":779,"width":837,"height":856,"rx":839,"fill":280},"320","56.7",[],{"type":28,"tag":233,"props":859,"children":861},{"style":860,"fill":267},"font-size:14px;font-weight:600",[862,868,874,880],{"type":28,"tag":33,"props":863,"children":865},{"x":290,"y":864,"textAnchor":810},"42.0",[866],{"type":33,"value":867},"9 of 9",{"type":28,"tag":33,"props":869,"children":871},{"x":816,"y":870,"textAnchor":810},"60.9",[872],{"type":33,"value":873},"8 of 9",{"type":28,"tag":33,"props":875,"children":877},{"x":821,"y":876,"textAnchor":810},"117.6",[878],{"type":33,"value":879},"5 of 9",{"type":28,"tag":33,"props":881,"children":883},{"x":826,"y":882,"textAnchor":810},"155.3",[884],{"type":33,"value":885},"3 of 9",{"type":28,"tag":29,"props":887,"children":888},{},[889,891,897],{"type":33,"value":890},"You shouldn't need a sales call to know what your next invoice run costs. Every PDFShift plan, up to 1,000,000 credits for $999 a month, is on the ",{"type":28,"tag":36,"props":892,"children":894},{"href":893},"/pricing/",[895],{"type":33,"value":896},"pricing page",{"type":33,"value":898},".",{"type":28,"tag":45,"props":900,"children":902},{"id":901},"webhooks-async-and-batch-pdf-generation",[903],{"type":33,"value":904},"Webhooks, async and batch PDF generation",{"type":28,"tag":29,"props":906,"children":907},{},[908,910,916,918,924,926,932],{"type":33,"value":909},"By default, your request waits until the PDF is ready. For long documents or big runs, add a ",{"type":28,"tag":57,"props":911,"children":913},{"className":912},[],[914],{"type":33,"value":915},"webhook",{"type":33,"value":917}," URL: the API answers at once with ",{"type":28,"tag":57,"props":919,"children":921},{"className":920},[],[922],{"type":33,"value":923},"202",{"type":33,"value":925}," and a queued status, then POSTs the result to your webhook with a link to the file. To skip our storage, set ",{"type":28,"tag":57,"props":927,"children":929},{"className":928},[],[930],{"type":33,"value":931},"s3_destination",{"type":33,"value":933}," and the PDF goes straight to your own S3 bucket.",{"type":28,"tag":29,"props":935,"children":936},{},[937],{"type":33,"value":938},"A batch job is just more of the same calls: one request per document, in parallel, up to 250 a minute, with a webhook to collect the results. One conversion can run for up to 15 minutes on a paid plan.",{"type":28,"tag":45,"props":940,"children":942},{"id":941},"hipaa-baa-and-gdpr-pdfs-generated-in-the-eu",[943],{"type":33,"value":944},"HIPAA, BAA and GDPR: PDFs generated in the EU",{"type":28,"tag":29,"props":946,"children":947},{},[948,950,956,958,963,965,971],{"type":33,"value":949},"PDFShift is a French company, and conversions run on our servers in France. We don't keep your documents by default. A PDF is stored only when you ask for a link (",{"type":28,"tag":57,"props":951,"children":953},{"className":952},[],[954],{"type":33,"value":955},"filename",{"type":33,"value":957}," or ",{"type":28,"tag":57,"props":959,"children":961},{"className":960},[],[962],{"type":33,"value":915},{"type":33,"value":964},"), on AWS S3 in Paris, and it's deleted after 2 days. For GDPR, our ",{"type":28,"tag":36,"props":966,"children":968},{"href":967},"/legal/dpa/",[969],{"type":33,"value":970},"data processing agreement",{"type":33,"value":972}," is public.",{"type":28,"tag":29,"props":974,"children":975},{},[976,978,984,986,992,994,999,1000,1005,1007,1012],{"type":33,"value":977},"For health data, set ",{"type":28,"tag":57,"props":979,"children":981},{"className":980},[],[982],{"type":33,"value":983},"is_hipaa: true",{"type":33,"value":985}," on the request and sign our ",{"type":28,"tag":36,"props":987,"children":989},{"href":988},"/legal/hipaa/",[990],{"type":33,"value":991},"BAA",{"type":33,"value":993},". With it on, ",{"type":28,"tag":57,"props":995,"children":997},{"className":996},[],[998],{"type":33,"value":955},{"type":33,"value":176},{"type":28,"tag":57,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":33,"value":915},{"type":33,"value":1006}," need your own ",{"type":28,"tag":57,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":33,"value":931},{"type":33,"value":1013},", so the file never sits in our storage.",{"type":28,"tag":45,"props":1015,"children":1017},{"id":1016},"frequently-asked-questions",[1018],{"type":33,"value":1019},"Frequently asked questions",{"type":28,"tag":354,"props":1021,"children":1023},{"id":1022},"is-there-a-free-pdf-generator-api",[1024],{"type":33,"value":13},{"type":28,"tag":29,"props":1026,"children":1027},{},[1028,1030,1036],{"type":33,"value":1029},"Yes. PDFShift's free plan gives you 50 credits a month with no credit card, for files up to 15 MB and conversions up to 30 seconds. For testing, add ",{"type":28,"tag":57,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":33,"value":1035},"\"sandbox\": true",{"type":33,"value":1037}," to a request: the PDF gets a watermark and uses no credits, up to 10 documents a minute.",{"type":28,"tag":354,"props":1039,"children":1041},{"id":1040},"how-do-i-automate-pdf-generation-without-writing-a-backend",[1042],{"type":33,"value":16},{"type":28,"tag":29,"props":1044,"children":1045},{},[1046,1048,1054,1056,1062],{"type":33,"value":1047},"Use a no-code tool that can call PDFShift, such as ",{"type":28,"tag":36,"props":1049,"children":1051},{"href":1050},"/agents/n8n/",[1052],{"type":33,"value":1053},"n8n",{"type":33,"value":1055},", Make or Zapier, or give an AI agent our ",{"type":28,"tag":36,"props":1057,"children":1059},{"href":1058},"/agents/mcp/",[1060],{"type":33,"value":1061},"hosted MCP server",{"type":33,"value":1063},". Each one calls the same API as the code on this page.",{"type":28,"tag":354,"props":1065,"children":1067},{"id":1066},"which-browser-engine-renders-my-html",[1068],{"type":33,"value":19},{"type":28,"tag":29,"props":1070,"children":1071},{},[1072,1074,1080],{"type":33,"value":1073},"Chromium. New accounts get the latest version PDFShift offers, and the ",{"type":28,"tag":57,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":33,"value":1079},"X-Processor-Version",{"type":33,"value":1081}," header lets you pin one of the accepted versions, 116 or 142.",{"type":28,"tag":354,"props":1083,"children":1085},{"id":1084},"can-the-same-api-make-images-instead-of-pdfs",[1086],{"type":33,"value":22},{"type":28,"tag":29,"props":1088,"children":1089},{},[1090],{"type":33,"value":23},{"title":5,"searchDepth":1092,"depth":1092,"links":1093},2,[1094,1098,1099,1100,1101],{"id":47,"depth":1092,"text":50,"children":1095},[1096],{"id":356,"depth":1097,"text":359},3,{"id":367,"depth":1092,"text":370},{"id":901,"depth":1092,"text":904},{"id":941,"depth":1092,"text":944},{"id":1016,"depth":1092,"text":1019,"children":1102},[1103,1104,1105,1106],{"id":1022,"depth":1097,"text":13},{"id":1040,"depth":1097,"text":16},{"id":1066,"depth":1097,"text":19},{"id":1084,"depth":1097,"text":22},"markdown","content:pdf-generator-api.md","content","pdf-generator-api.md","md",1794330361441]