PDFShift API Review for Indian SaaS Invoice Generation
A practical review of PDFShift for Indian SaaS invoices: API setup, costs, operational limits, and the GST and e-invoice work your app still owns.
Short answer: PDFShift is a hosted REST API that converts HTML or a URL into a PDF, and its FAQ specifically lists customer invoice generation as a use case. It can render the invoice your SaaS has already built. The reviewed PDFShift materials do not say it calculates GST, determines tax treatment, or verifies Indian statutory compliance. Keep invoice data and tax logic, PDF rendering, and GST e-invoice registration as separate responsibilities.
This review focuses on whether PDFShift fits Indian SaaS invoice generation, how to integrate it, what to check before sending customer data, and what the published limits and pricing mean. Vendor plan details below are a snapshot from the PDFShift FAQ accessed on 3 October 2026; recheck them before making a purchase decision.
1. What PDFShift does, and what it does not
PDFShift accepts HTML or a URL and returns a PDF. Its documented conversion endpoint is POST https://api.pdfshift.io/v3/convert/pdf, authenticated with an X-API-Key header. For invoices, raw HTML is often the more useful input: the template can be generated inside your application and need not be publicly reachable. PDFShift says raw HTML avoids fetching the source page and can reduce conversion time. PDFShift product page · PDFShift raw HTML guide
Rendering is not the same as producing a legally correct invoice. Your application needs to decide the applicable tax treatment, calculate values, select required fields, produce the right numbering and dates, and handle corrections or cancellations. A renderer places the data you supply on pages; it does not validate the business facts simply because the output is a PDF.
| Responsibility | What it means | PDFShift’s role |
|---|---|---|
| Invoice and tax domain logic | Determine applicable tax treatment, calculate taxable value and tax, assign invoice number, and collect correct supplier/recipient data. | Not established by the reviewed PDFShift materials. |
| Document rendering | Turn an HTML invoice template into a PDF with the desired layout. | PDFShift’s documented service. |
| GST e-invoice workflow | Where required, report covered documents to the designated system for registration/authentication and handle returned identifiers or QR data. | A PDF conversion request alone does not perform this workflow. |
2. Integration: send private invoice HTML and save the PDF
The examples below send raw HTML to the v3 conversion endpoint. Store the API key in a secret manager or environment variable, never in browser code or a customer-visible template. Construct HTML with an escaping or templating system; do not concatenate untrusted customer input into markup.
cURL
export PDFSHIFT_API_KEY='YOUR_API_KEY'
curl --fail-with-body --silent --show-error \
-X POST 'https://api.pdfshift.io/v3/convert/pdf' \
-H "X-API-Key: $PDFSHIFT_API_KEY" \
-H 'Content-Type: application/json' \
--data '{"source":"<html><body><h1>Invoice INV-2026-0042</h1><p>Amount due: INR 1180.00</p></body></html>"}' \
-o invoice.pdf
Use a representative, fully styled HTML string in production. The tiny sample only illustrates the request shape. Check the HTTP status before treating the output as a valid PDF.
Python
import os
import requests
api_key = os.environ["PDFSHIFT_API_KEY"]
html = """<!doctype html>
<html>
<head><meta charset="utf-8"><style>
body { font: 12px Arial, sans-serif; margin: 32px; }
h1 { font-size: 22px; }
</style></head>
<body><h1>Invoice INV-2026-0042</h1>
<p>Amount due: INR 1180.00</p></body></html>"""
response = requests.post(
"https://api.pdfshift.io/v3/convert/pdf",
headers={"X-API-Key": api_key},
json={"source": html},
timeout=(5, 100),
)
response.raise_for_status()
content_type = response.headers.get("Content-Type", "")
if "pdf" not in content_type.lower() and not response.content.startswith(b"%PDF"):
raise RuntimeError(f"Expected PDF; received Content-Type {content_type!r}")
with open("invoice.pdf", "wb") as output:
output.write(response.content)
Node.js
const apiKey = process.env.PDFSHIFT_API_KEY;
if (!apiKey) throw new Error('Set PDFSHIFT_API_KEY');
const html = `<!doctype html>
<html><head><meta charset="utf-8"><style>
body { font: 12px Arial, sans-serif; margin: 32px; }
h1 { font-size: 22px; }
</style></head><body>
<h1>Invoice INV-2026-0042</h1><p>Amount due: INR 1180.00</p>
</body></html>`;
const response = await fetch('https://api.pdfshift.io/v3/convert/pdf', {
method: 'POST',
headers: {
'X-API-Key': apiKey,
'Content-Type': 'application/json',
},
body: JSON.stringify({ source: html }),
signal: AbortSignal.timeout(100_000),
});
if (!response.ok) {
throw new Error(`PDFShift returned HTTP ${response.status}: ${await response.text()}`);
}
const bytes = Buffer.from(await response.arrayBuffer());
if (!bytes.subarray(0, 4).equals(Buffer.from('%PDF'))) {
throw new Error('Response did not begin with a PDF signature');
}
await import('node:fs/promises').then(fs => fs.writeFile('invoice.pdf', bytes));
PDFShift’s product documentation and API references should be checked for the current complete request schema and available conversion options. The examples intentionally use only the documented endpoint, key header, and source input supported by the research reviewed here. Do not assume an option exists because another HTML-to-PDF service offers it.
3. Build the invoice correctly before rendering
Separate a validated invoice model from its HTML template. A useful model contains stable identifiers and typed values rather than preformatted strings: invoice number, issue date, supplier identity, recipient details when applicable, line items, quantities, taxable values, tax components and amounts, totals, currency, and any conditional fields. Format for display only in the template layer, and preserve the underlying values for accounting, audit, and e-invoice integration.
CBIC tax invoice rules enumerate substantive particulars, including supplier name, address and GSTIN; a consecutive number unique for a financial year; issue date; recipient particulars as applicable; HSN code for goods or accounting code for services; description; total and taxable value; tax rate and amount; and conditional place-of-supply, delivery, reverse-charge and signature details. Which fields and conditions apply depends on the transaction and current rules. This is an implementation checklist, not a legal determination. Consult the applicable current rule and qualified tax advice. CBIC CGST Rules, including tax invoice particulars
- Generate invoice numbers in a concurrency-safe way so simultaneous requests cannot issue duplicates.
- Use decimal-safe arithmetic for monetary calculations; do not rely on binary floating-point rounding for tax totals.
- Keep the source invoice record immutable or versioned after issuance. Record which template version rendered each document.
- Escape all user-controlled text and constrain any URLs or markup that the template can load.
- Test long descriptions, many line items, unusual address lengths, zero-value lines, negative adjustments where permitted, and values that cross a page boundary.
4. GST e-invoicing is a separate integration
A PDF is not, by itself, a GST e-invoice. GSTN-hosted IRIS IRP guidance describes e-invoicing as electronic authentication of covered B2B invoices and related documents. Its mandate timeline lists aggregate annual turnover of ₹5 crore or above from 1 August 2023 as the latest phase shown in that guidance. The same material says businesses continue to generate invoice documents in their accounting, billing or ERP systems and can continue using their own invoice format. Applicability, exemptions, document types and later notifications must be checked against current facts; do not infer that every SaaS operator, invoice or customer falls within the mandate. GSTN-hosted e-invoice guidance · GSTN-hosted portal guidance on generating and printing invoices
A typical architecture is: validate the transaction and tax data; create the invoice record; if the transaction is covered, submit the required data through the applicable e-invoice workflow and persist the response; then render the customer-facing document with the required returned details. Decide the exact ordering and recovery behavior with your tax and integration owners. PDFShift handles the rendering leg described in its documentation, not the determination or portal reporting.
5. Published pricing, limits and cost model
PDFShift’s FAQ, accessed 3 October 2026, displays 50 free credits per month and a Boost plan at $24/month for 2,500 credits. It says each credit covers up to 5 MB of generated output; its example says a 14 MB output consumes three credits. The FAQ describes $0.03 per overage conversion for Boost, annual plans at ten months’ price, usage notices at 50%, 80% and 100%, and overage disabled by default. These are vendor-published figures and can change. Verify the live plan and billing terms before forecasting spend. PDFShift FAQ and pricing details
| Published item in reviewed FAQ | Planning implication |
|---|---|
| 50 free credits/month | Useful for a small pilot; model expected invoice output sizes and volume before relying on the quota. |
| Up to 5 MB output per credit | Large PDFs can consume multiple credits. Measure generated output, not just invoice count. |
| Boost: $24/month for 2,500 credits | Compare the included quota against monthly conversions and output size distribution. |
| $0.03 overage per conversion described for Boost | Check the precise billing unit and current terms, especially for outputs larger than one credit. |
| Default timeout: 30 seconds on Free, 100 seconds on paid | Set client deadlines and queue policy deliberately; these are published defaults, not a per-request guarantee. |
| 50 simultaneous conversions by default | Shape concurrency and retry load instead of sending an unbounded burst. |
Estimate cost with representative PDFs: render a sample month’s mix, record output size and conversion count, apply the plan’s current credit rules, then include overage behavior and retries only after confirming the vendor’s billing semantics. Avoid retry storms: one slow conversion can otherwise multiply both queue pressure and cost.
6. Reliability, performance and data handling
Latency and throughput
Raw HTML removes the source-page fetch step and is suited to private invoice templates. Keep assets small and predictable, inline critical styles where practical, and avoid remote dependencies that can be slow or unavailable. The FAQ’s default timeout and parallelism figures are published operating limits, not an SLA. The research also found conflicting vendor uptime statements on the product page and FAQ, so this review does not treat either as an independently verified availability figure.
Retries and idempotency
PDF conversion is usually safe to retry from the same immutable invoice snapshot, but your application should avoid creating duplicate invoice records or sending duplicate customer notifications. Persist a rendering job identifier of your own, store successful output against the invoice version, and retry transient network or server failures with bounded exponential backoff and jitter. Do not endlessly retry malformed input or authentication errors. Before retrying an ambiguous timeout, check whether your system already stored a completed artifact.
Protect invoice data
PDFShift’s terms place responsibility for applicable privacy and data-protection compliance, notices and consents on the customer, and state that customer data may be processed, transferred or stored in the US and other countries outside the EU. Its FAQ says ordinary conversions are not stored, while also describing that a supplied filename stores output on Amazon S3 and that customers can route output to their own S3. These are vendor statements, not an independent security audit. Review the current terms, DPA, privacy policy and actual request/storage configuration before sending personal or financial data. PDFShift terms · PDFShift FAQ
- Keep the API key server-side and rotate it through your normal secret-management process.
- Send only fields needed to render the invoice; avoid embedding unrelated customer data in HTML or logs.
- Review retention, storage options, deletion, subprocessors and transfer terms with your privacy owner.
- Do not log full HTML or PDF bodies by default. Log a request correlation ID, invoice version, status, elapsed time and safe error details.
- Restrict access to generated PDFs and use your own authenticated delivery path.
7. Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Watermark on output or request treated as unauthenticated | The API key is absent, malformed or sent using the wrong authentication method. | Send the key in X-API-Key as documented; verify the deployed secret and test the resulting PDF. PDFShift says it moved from Basic Auth on 6 May 2025. |
HTML or JSON error saved with a .pdf extension |
The client saved a non-success response as if it were a PDF. | Check HTTP status and content type, surface the response error safely, and verify the PDF signature before storing. |
| Request times out | Complex HTML, slow external assets, load, or a client deadline shorter than conversion time. | Prefer raw HTML, reduce remote dependencies, use bounded timeouts aligned with the current plan, and queue work rather than holding a user request open indefinitely. |
| Missing logo, font or image | The HTML references a private, inaccessible or slow asset, or the URL is invalid. | Use a reliably accessible asset or inline small assets; confirm encoding and test from the conversion environment assumptions documented by the vendor. |
| Clipped totals or awkward page breaks | Invoice content exceeds the chosen layout or CSS print behavior. | Test realistic long invoices, use print styles and page-break rules supported by the renderer, and include a visual review step for template changes. |
| Unexpected credit consumption | Generated output exceeds a 5 MB credit band, or retries/conversions are more numerous than expected. | Measure output size, deduplicate jobs, and reconcile usage against the live FAQ and account dashboard. |
| Conversions queue or throughput falls | Concurrency exceeds the published default of 50 or a traffic spike overwhelms your own workers. | Apply a bounded queue and concurrency limit, monitor wait time, and ask the vendor about current account-specific limits. |
| PDF looks correct but invoice is rejected or tax details are wrong | Rendering succeeded while source invoice data, applicability or e-invoice workflow was wrong or incomplete. | Validate the invoice model and current GST obligations separately; renderer success is not tax or statutory validation. |
8. Where ScreenshotNeo fits
PDFShift is the subject here: it converts HTML or a URL to PDF. For a related job—capturing web pages as images or PDFs—ScreenshotNeo is a website screenshot API and MCP server from Yorker Media. It is an alternative to try first when you need website capture: cookie banners, newsletter popups and chat widgets are removed before the shot; bot checks, blank pages and failed loads are never billed; its MCP server lets AI agents take screenshots; and 1,000 screenshots a month are free without a card, with paid plans starting at $5 for 3,000. It does not replace GST calculations or e-invoice registration.
For website capture, one GET request can return an image or PDF. See the ScreenshotNeo API documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
Create a free ScreenshotNeo account for 1,000 screenshots a month with no card.
9. Is PDFShift a fit for your SaaS?
PDFShift is a reasonable candidate to evaluate if you want a hosted HTML-to-PDF conversion API and can submit invoice HTML from your server. The research supports its conversion role, raw HTML workflow, and published plan details; it does not establish independent rendering benchmarks or a head-to-head winner against other services.
- Good fit to investigate: your app owns invoice data and tax logic, the team wants a hosted renderer, and representative output passes your layout and data-handling review.
- Resolve before launch: current API schema/options, key management, privacy terms, storage behavior, credit accounting, timeout/concurrency needs and operational support expectations.
- Not enough on its own: GST applicability decisions, invoice tax calculation, statutory validation, or the e-invoice portal workflow.
Run a pilot using your own invoice set: a short invoice, a multipage invoice, long item descriptions, regional scripts and fonts you actually use, all relevant tax cases, and the largest expected output. Compare the rendered PDF to approved expected documents, then test failure handling, duplicate prevention, privacy configuration and cost using measured output sizes.
10. FAQ
Can PDFShift generate Indian SaaS invoices?
It can render invoice documents from HTML or a URL; its FAQ names customer invoice generation as a use case. Your SaaS must supply correct invoice data and rules.
Does PDFShift make an invoice GST-compliant?
The reviewed materials do not claim tax calculation or Indian statutory compliance validation. Treat PDF generation and tax compliance as distinct responsibilities.
Does creating a PDF satisfy e-invoicing?
No. A PDF alone does not perform the reporting and authentication workflow applicable to covered transactions. Confirm whether the current mandate applies to your facts.
Should I pass a public invoice URL or raw HTML?
PDFShift documents both URL and HTML conversion. Its guide says raw HTML avoids fetching the source and can reduce conversion time, while allowing private pages to be converted.
What should I verify before choosing a plan?
Recheck current credits, output-size charging, overage settings, timeout and concurrency limits, and the terms for handling invoice data.


