# PDFShift — Full Content > Complete text of pdfshift.io, generated from the site's source Markdown. PDFShift is a developer-first API that converts HTML, URLs, and raw markup into pixel-perfect PDFs, screenshots, and Open Graph images. Source: https://pdfshift.io — see also https://pdfshift.io/llms.txt for a curated index. Pricing details: https://pdfshift.io/pricing.md OpenAPI Specification: https://api.pdfshift.io/openapi.json Documents: 646. Each is delimited by a rule and prefixed with its canonical URL. --- # PDFShift FAQ Source: https://pdfshift.io/faq/ # PDFShift FAQ ## Trying PDFShift **Can I try PDFShift for free?** Yes. Follow this link to create an account and get 50 credits per month for free. You won’t be charged, and you don’t need to enter credit card details to get started. Once you’ve created your account and logged in, access our API to convert up to 50 documents for free. **What can I do with PDFShift?** This covers a broad range of tasks involving converting documents to PDF, grabbing screenshots, and generating Open Graph images. You can use PDFShift for invoice generation for your customers, export images from a graphics editor, and much more. **Can I try PDFShift without creating an account?** Yes. Head to our Playground to see how you can customize your document conversion output with code samples, whether it’s an image or a PDF. ## Using PDFShift **What types of content can I convert with PDFShift?** For starters, PDFShift supports HTML documents of any kind. That means web pages from your site or anywhere else on the internet, Canvas objects like image editing output, and more. You can also work with non-HTML libraries like React, VueJS, ChartJS, D3.js, and many more. **How do you ensure high-quality conversions and service uptime?** PDFShift runs on Chromium, which enables perfect rendering every time. As for uptime, our server infrastructure is structured to perform at its best even under high stress, and has several redundancies built in. As a result, our customers experience 99.9% uptime. You can track our service availability on [our Status page](https://status.pdfshift.io/). **What sort of support can I expect as a PDFShift customer?** If you face any problems running PDFShift, you can consult our extensive and simple documentation, flip through our guides for working with various programming languages, or contact us directly via this form. We respond to Business plan users’ requests within hours of receiving a support ticket; for all our other paid plans, we respond within 12 hours. We respond to Free plan users’ tickets within 2 days. You can track our uptime on [our Status page](https://status.pdfshift.io/). **What if I have custom requirements?** Contact us via our form or email us, and we’ll do our best to accommodate your needs with the most suitable implementation. **What about the privacy of my data?** We take privacy seriously. We do not store requests or generated documents. As such, it's impossible for us to view the content you convert using PDFShift, so you can rest assured that your documents are entirely private. **Is PDFShift GDPR compliant?** Yes. You can read our [Data Processing Agreement](https://pdfshift.io/legal/dpa/) along with our [Privacy Policy](https://pdfshift.io/legal/privacy/) for more details. ## Pricing and payments **How do credits work, and how are conversions counted?** PDFShift’s free and paid plans count usage on the basis of credits; each credit is good for one conversion of up to 5MB. That means if you convert one document that generates, say, a 200KB or 2MB PDF, it’ll be count as a single credit against your quota. If you convert a document that exceeds 5MB, you’ll use additional credits towards the same document. For example, if a single document conversion works out to 9MB, that’ll count as 2 credits against your quota. Similarly, a single 14MB document will count as 3 credits. **How much does PDFShift typically cost?** The average PDFShift customer uses 1,300 credits a month. The plan that matches this usage pattern is the Boost plan at $24 a month. This plan includes 2,500 monthly credits, as well as a low overage cost of just $0.03 per conversion. PDFShift can meet your needs with higher volume plans. Contact us to ask for a dedicated plan. **Which payment methods are supported?** We accept payments through Visa, Mastercard, American Express, Discover, JCB, and Diner's Club cards via Stripe. **Do you offer annual plans?** Yes, indeed. If you sign up for an annual plan, you’ll only pay for 10 months. Head to our Pricing page to learn more. **What happens if I exceed my API request volume?** We will automatically notify you at 50%, 80% and 100% of your credit usage. You can also enable our overage system to not be blocked after hitting 100% of your quota. **How does your API request overage system work?** Every plan has an ‘overage’ cost associated with it. When you go over the plan’s limit (say, 1,000 credits in a single month), all the credits you use above that limit will be multiplied by the overage cost, and you’ll be billed for that usage specifically in a separate invoice when your subscription comes up for renewal. For example, let’s say you’re on the $24/month Boost plan which includes 2,500 monthly credits. If you use 2,700 credits in a given month, you’ll pay: - $24 for the 2,500 credits - 200 credits x $0.03 for conversions above your credit limit, which works out to $6 That comes to a total of $30 for that month. ## Integrating and implementing PDFShift **Do I need to make a page publicly available to use PDFShift?** No, you don't need to put the page you want to convert publicly on the web. You can simply send the HTML to PDFShift instead by following this guide. ## I forgot to set the `sandbox` parameter while testing and used up all my credits. What now? No problem! [Contact us](/contact/) and we’ll top up your account with more credits during your first month for free. **What is the timeout for conversions?** We wait up to 30 seconds by default for free plans, and 100 seconds for paid plans. If your document needs longer timeouts and you’re on one of PDFShift’s premium plans, contact us and we'll adjust it accordingly for your account. **What happens when requests time out?** When a conversion takes too long, PDFShift returns a JSON response along with a 408 status message to inform you that your request has timed out. **How many parallel conversions can I run? Is it different for each plan?** You can make up to 50 parallel conversions at the same time. This limit applies to all plans by default but if you need more parallel conversions, contact us for a custom solution. **Do I have to pass a "webhook" parameter when using parallel conversion?** Yes. When you carry out parallel conversions, PDFShift queues up each request to be processed independently. For this reason, your POST request is treated almost instantly with a 202 status code (’Accepted’). You will then receive a POST response at your Webhook URL for **each** source that is converted. **I use Amazon S3 storage for my converted documents; how is my data privacy maintained?** When you pass the "filename" parameter while processing HTML content, we store your resulting documents at our Amazon's S3 storage. In this case, the PDF's content is subject to Amazon's privacy policy. For increased privacy, PDFShift supports sending your documents straight to your own S3 storage. Find our documentation here. **What if I have other questions?** Feel free to [reach out to us via email](/contact/), and we'll be happy to answer to all your questions. --- # Fast, Easy Website and HTML to PDF Converter via API | PDFShift Source: https://pdfshift.io/ Description: An API to convert HTML/CSS documents to PDF. Fast, reliable, and pixel-perfect conversions for developers. Start with 50 free credits per month. # PDFShift - HTML to PDF Conversion API ## From HTML to pixel-perfect PDFs in seconds Our always-up-to-date API for developers automates your document conversion tasks - effortlessly. [Register for free](/register/) ## Key Statistics - **300+ Million** Conversions made - **15,000+** Developers - **1.5s** Average conversion time - **99.99%** Uptime ## Trusted by Leading Companies PDFShift is used by thousands of companies worldwide for their PDF generation needs. ## Powerful Features for High-Fidelity Documents ### Full CSS Support Our powerful engine supports all the latest CSS features, including custom web fonts, flexbox, grid layouts, and responsive design. ### JavaScript Execution Execute JavaScript before converting your pages to capture dynamic content and single-page applications. ### Headers & Footers Add custom headers and footers with page numbers, dates, and dynamic content. ### Watermarks Protect your documents with text or image watermarks, positioned precisely where you need them. ### Password Protection Secure your PDFs with password protection and encryption. ### Screenshot Capture Generate high-quality screenshots of web pages in various formats (PNG, JPEG, WebP). ## API-First Design Built for developers, by developers. Our RESTful API integrates seamlessly with any programming language or framework: - Node.js - Python - PHP - Ruby - Go - C# ## Features ### Perfect Rendering Powered by Chromium for pixel-perfect rendering every time. ### Custom Page Sizes Support for standard sizes (A4, Letter) and custom dimensions. ### Landscape & Portrait Convert in any orientation. ### Webhooks Get notified when conversions complete via webhooks. ### Cloud Storage Integration Save directly to Amazon S3 or get a temporary URL. ### Custom HTTP Headers Send custom headers for authenticated pages. ### CSS & JavaScript Injection Load additional CSS or JavaScript from strings or URLs. ### Page Selection Export specific pages or page ranges from your document. ### Full-Height Documents Generate PDFs with full page height without pagination. ### Timeout Control Set custom timeouts for complex page rendering. ## Pricing Flexible plans to suit your needs: - **Free**: 50 credits/month, no credit card required - **Starter**: Ideal for small projects - **Business**: For growing companies - **Enterprise**: Custom solutions with SLA [View detailed pricing](/pricing/) ## Resources - [API Documentation](https://docs.pdfshift.io) - [API Status](https://status.pdfshift.io) - [Guides & Tutorials](/guides/) - [FAQ](/faq/) ## Start Converting Today Get started in minutes with our comprehensive documentation and code examples. No credit card required for the free tier. [Create your free account](/register/) --- **Support**: Available for all plans with response times based on your subscription level. **Privacy**: GDPR compliant. We don't store your documents or requests. **Reliability**: 99.9% uptime with multiple redundancies. --- # PDFShift Pricing Source: https://pdfshift.io/pricing/ # PDFShift Pricing Start for free and scale from a handful of documents to millions of conversions with simple, credit-based plans. No credit card required to get started. ## Plans | Plan | Price | Per year | Credits / mo | Overage (per credit) | | ---------- | --------- | ---------- | ------------ | -------------------- | | Free | $0/mo | - | 50 | - | | Starter | $9/mo | $90/yr | 500 | $0.04 | | Boost | $24/mo | $240/yr | 2,500 | $0.03 | | Growth | $39/mo | $390/yr | 5,000 | $0.025 | | Business | $99/mo | $990/yr | 25,000 | $0.02 | | Shift 50k | $149/mo | $1,490/yr | 50,000 | $0.015 | | Shift 100k | $249/mo | $2,490/yr | 100,000 | $0.01 | | Shift 250k | $499/mo | $4,990/yr | 250,000 | $0.005 | | Shift 500k | $799/mo | $7,990/yr | 500,000 | $0.003 | | Shift 1M | $999/mo | $9,990/yr | 1,000,000 | $0.001 | | Custom | Custom | Custom | 1,000,000+ | Custom | Annual billing is 10 months for the price of 12 (two months free). The overage rate applies only to credits used beyond your included monthly volume. ## Pricing API The full list of plans is also available programmatically through a public JSON endpoint, so you can always display up-to-date pricing without hardcoding it: `GET https://api.pdfshift.io/v3/credits/pricing` This endpoint requires no authentication. If you send your secret key in the `X-API-Key` header, the response additionally includes any custom plan specific to your account, alongside the standard public plans. Each entry returns the plan's `display` name, its internal `name` (used when subscribing or estimating), the included `credits`, the maximum `filesize` (in MB) and `timeout` (in seconds), the `price` (in USD for the billing period), whether it is billed `yearly`, the `overage` cost (in cents per extra credit), and its `position` in the ordered list. Example response: ```json { "success": true, "prices": [ { "display": "Startup", "name": "shift05", "credits": 500, "filesize": 250, "timeout": 100, "price": 9, "yearly": false, "overage": 40, "position": 1 }, { "display": "Growth", "name": "shift5k", "credits": 5000, "filesize": 250, "timeout": 100, "price": 39, "yearly": false, "overage": 25, "position": 3 } ] } ``` ## What is a credit? One credit is consumed per document, counted per 5 MB of generated data. A conversion that produces a 14 MB PDF counts as 3 credits. Unused credits do not roll over from month to month. ## Cost Examples To illustrate costs at common volumes, here are the recommended plans and their effective per-document rate: - **500 documents/mo**: Starter at $9/mo - effective rate of $0.018 per document. - **5,000 documents/mo**: Growth at $39/mo - effective rate of $0.0078 per document. - **25,000 documents/mo**: Business at $99/mo - effective rate of $0.00396 per document. - **50,000 documents/mo**: Shift 50k at $149/mo - effective rate of $0.00298 per document. - **500,000 documents/mo**: Shift 500k at $799/mo - effective rate of $0.0016 per document. - **1,000,000 documents/mo**: Shift 1M at $999/mo - effective rate of $0.001 per document. ## Feature Highlights - **Free**: 50 credits / mo, CSS & JavaScript injection, advanced header & footer, encryption & watermark, max file size 15 MB, 30 second timeout. - **Paid (Starter and above)**: Everything in Free, plus no file size limit, timeout up to 15 minutes, AWS S3 delivery, and parallel & asynchronous responses. All plans include: RESTful API, CSS & JavaScript injection, advanced headers & footers, PDF encryption and watermarking, and access to our full guides and documentation. ## Enterprise / High Volume We easily support more than 1 million conversions per month. For teams with high-volume or custom needs, reach out and we'll put together a tailored quote. [Contact us for a custom quote](/contact/). ## Get Started Start converting HTML to PDF for free; 50 credits every month, no credit card required. [Register for free](/register/) --- # Accessing secured pages - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/accessing-secured-pages/ Description: Learn how to access secured pages using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, highlighting how you can access page protected by basic authentication to convert them to PDF using PDFShift's API. In this guide, we'll show you how to access secured page (protected by basic authentication) using C# and the HttpClient library to convert them to PDF using PDFShift's API. When you're converting a document, you might want to access a secured page (protected by basic authentication) to convert it to PDF. This can be done by setting the `auth` parameter to the request. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // You can set a basic authentication by passing the "auth" property which contains a username and password auth = new { username = "user", password = "password" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to protect your documents from any visitors while allowing PDFShift to access the page and convert it to PDF. --- # Adding a custom header or footer - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/adding-a-custom-header-or-footer/ Description: Learn how to add custom headers and footers to your PDFs using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to customize PDF appearance with headers and footers. In this guide, we'll show you how to add custom headers and footers to your PDFs using C# and the HttpClient library. When generating PDFs, you might want to add custom headers and footers to your documents for branding or informational purposes. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Add custom header and footer header = new { content = "
Header Content
", height = "20mm" }, footer = new { content = "
Footer Content
", height = "20mm" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to add consistent branding elements to all your generated PDF documents. --- # Adding a text watermark - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/adding-a-text-watermark/ Description: Learn how to add text watermarks to your PDFs using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to apply text watermarks to protect your documents. In this guide, we'll show you how to add text watermarks to your PDFs using C# and the HttpClient library. When generating PDFs, you might want to add text watermarks to your documents for protection or branding purposes. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Add text watermark watermark = new { text = "CONFIDENTIAL", opacity = 0.3, size = "20px", color = "#000000" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to add textual protection to your documents with customizable text. --- # Adding an image watermark - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/adding-an-image-watermark/ Description: Learn how to add image watermarks to your PDFs using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to apply image watermarks to protect your documents. In this guide, we'll show you how to add image watermarks to your PDFs using C# and the HttpClient library. When generating PDFs, you might want to add image watermarks to your documents for protection or branding purposes. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Add image watermark watermark = new { image = "https://example.com/watermark.png", opacity = 0.5, position = "center" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to add visual protection to your documents with custom images. --- # Avoid conversion on error - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/avoid-conversion-on-error/ Description: Learn how to avoid conversion on error using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to handle conversion errors gracefully. In this guide, we'll show you how to avoid conversion on error using C# and the HttpClient library. When converting documents to PDF, you might want to prevent conversion if certain errors occur to avoid generating invalid PDFs. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Prevent conversion on error continue_on_error = false }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to fail fast when conversion issues occur. --- # Convert HTML to PDF from a URL - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/convert-html-to-pdf-from-a-url/ Description: Learn how to convert HTML from a URL to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to convert online HTML content to PDF. In this guide, we'll show you how to convert HTML from a URL to PDF using C# and the HttpClient library. Converting HTML from a URL to PDF is a common requirement when you want to generate PDFs from existing web content. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to easily convert any webpage to a PDF document. --- # Convert HTML to PDF from raw HTML - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/convert-html-to-pdf-from-raw-html/ Description: Learn how to convert raw HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to convert HTML content directly to PDF. In this guide, we'll show you how to convert raw HTML to PDF using C# and the HttpClient library. Converting raw HTML content to PDF is useful when you have HTML content that isn't hosted on a web server. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "

Hello World

" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to convert HTML content directly to PDF without needing a URL. --- # Define a time limit - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/define-a-time-limit/ Description: Learn how to define a time limit for PDF conversions using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to set timeouts to prevent long-running conversions. In this guide, we'll show you how to define a time limit for PDF conversions using C# and the HttpClient library. When converting documents to PDF, you might want to set a timeout to prevent long-running conversions from blocking your application. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Set a timeout in seconds timeout = 30 }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to control how long a conversion can take before timing out. --- # Exporting only a specific set of pages - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/exporting-only-a-specific-set-of-pages/ Description: Learn how to export only specific pages from a document when converting to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to select specific pages for export. In this guide, we'll show you how to export only specific pages from a document when converting to PDF using C# and the HttpClient library. When converting documents, you might want to export only a specific range of pages rather than the entire document. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Export only pages 1-3 pages = "1-3" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to selectively export pages from multi-page documents. --- # Generate a document with full height - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/generate-a-document-with-full-height/ Description: Learn how to generate a document with full height using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to create full-height PDFs. In this guide, we'll show you how to generate a document with full height using C# and the HttpClient library. When converting documents to PDF, you might want to ensure the entire document height is preserved. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Generate document with full height full_height = true }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This ensures the entire document content is included in the PDF. --- # Loading CSS from a string - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/loading-css-from-a-string/ Description: Learn how to load CSS from a string when converting HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to apply inline CSS styling. In this guide, we'll show you how to load CSS from a string when converting HTML to PDF using C# and the HttpClient library. When converting HTML to PDF, you might want to apply CSS styling using inline CSS rather than external stylesheets. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load CSS from a string css = "body { font-family: Arial; } h1 { color: blue; }" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to apply custom styling directly to your PDFs. --- # Loading CSS from a URL - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/loading-css-from-a-url/ Description: Learn how to load CSS from a URL when converting HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to reference external CSS files. In this guide, we'll show you how to load CSS from a URL when converting HTML to PDF using C# and the HttpClient library. When converting HTML to PDF, you might want to reference external CSS files to maintain consistent styling. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load CSS from a URL css = "https://example.com/styles.css" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to apply external stylesheets to your PDFs. --- # Loading JavaScript from a string - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/loading-javascript-from-a-string/ Description: Learn how to load JavaScript from a string when converting HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to include inline JavaScript. In this guide, we'll show you how to load JavaScript from a string when converting HTML to PDF using C# and the HttpClient library. When converting HTML to PDF, you might want to include JavaScript functionality using inline code. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load JavaScript from a string javascript = "document.body.style.backgroundColor = 'red';" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This enables dynamic behavior in your PDFs. --- # Loading JavaScript from a URL - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/loading-javascript-from-a-url/ Description: Learn how to load JavaScript from a URL when converting HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to reference external JavaScript files. In this guide, we'll show you how to load JavaScript from a URL when converting HTML to PDF using C# and the HttpClient library. When converting HTML to PDF, you might want to reference external JavaScript files to include dynamic functionality. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load JavaScript from a URL javascript = "https://example.com/script.js" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to include external JavaScript libraries in your PDFs. --- # Protecting the generated PDF - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/protecting-the-generated-pdf/ Description: Learn how to protect generated PDFs with passwords using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to secure your PDF documents. In this guide, we'll show you how to protect generated PDFs with passwords using C# and the HttpClient library. When generating PDFs, you might want to add password protection to restrict access. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Protect the PDF with a password protection = new { user_password = "user123", owner_password = "owner123" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to secure your PDF documents with passwords. --- # Receive a webhook event - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/receive-a-webhook-event/ Description: Learn how to receive webhook events when PDF conversion is complete using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to handle asynchronous conversion notifications. In this guide, we'll show you how to receive webhook events when PDF conversion is complete using C# and the HttpClient library. When converting documents asynchronously, you might want to be notified when the conversion is complete via a webhook. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Set up webhook notification webhook = new { url = "https://your-server.com/webhook", secret = "your-secret-key" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to be notified when conversions are complete without polling. --- # Save your PDF online and get back a URL - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/save-your-pdf-online-and-get-back-a-url/ Description: Learn how to save your PDF online and get back a URL using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to store PDFs in cloud storage and retrieve URLs. In this guide, we'll show you how to save your PDF online and get back a URL using C# and the HttpClient library. When generating PDFs, you might want to store them in cloud storage and get a URL to access them later. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Save PDF to cloud storage and get URL output = new { type = "url", url = "https://your-storage.com/" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to store PDFs in cloud storage and access them via URLs. --- # Save your PDF to your Amazon S3 bucket - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/save-your-pdf-to-your-amazon-s3-bucket/ Description: Learn how to save your PDF to your Amazon S3 bucket using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to store PDFs directly in AWS S3. In this guide, we'll show you how to save your PDF to your Amazon S3 bucket using C# and the HttpClient library. When generating PDFs, you might want to store them directly in Amazon S3 for easy access and management. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Save PDF to Amazon S3 bucket output = new { type = "s3", bucket = "your-bucket-name", key = "path/to/document.pdf" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to store PDFs directly in your AWS S3 buckets. --- # Send custom HTTP headers - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/send-custom-http-headers/ Description: Learn how to send custom HTTP headers when converting HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to customize request headers. In this guide, we'll show you how to send custom HTTP headers when converting HTML to PDF using C# and the HttpClient library. When converting HTML to PDF, you might need to send custom HTTP headers to access protected resources or provide additional information. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Send custom HTTP headers headers = new { authorization = "Bearer token123", "user-agent" = "MyApp/1.0" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to customize the HTTP requests sent to the source URL. --- # Using cookies - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/using-cookies/ Description: Learn how to use cookies when converting HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to manage cookies during conversion. In this guide, we'll show you how to use cookies when converting HTML to PDF using C# and the HttpClient library. When converting HTML to PDF, you might need to send cookies to access authenticated content or maintain session state. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Send cookies with the request cookies = new { sessionid = "abc123", user = "john_doe" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to maintain session state when accessing protected content. --- # Waiting for a custom element to be ready - C# / HttpClient Source: https://pdfshift.io/guides/csharp/httpclient/waiting-for-a-custom-element-to-be-ready/ Description: Learn how to wait for a custom element to be ready when converting HTML to PDF using C# and the HttpClient library. This guide offers detailed steps with code samples in C# and the HttpClient library, showing how to handle dynamic content. In this guide, we'll show you how to wait for a custom element to be ready when converting HTML to PDF using C# and the HttpClient library. When converting HTML containing dynamic content, you might need to wait for specific elements to be rendered before generating the PDF. ```csharp using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Wait for a specific element to be ready wait_for = "#dynamic-content.loaded" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://api.pdfshift.io/v3/convert/pdf", content); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } var result = await response.Content.ReadAsByteArrayAsync(); System.IO.File.WriteAllBytes("result.pdf", result); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to ensure dynamic content is fully loaded before PDF generation. --- # Accessing secured pages - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/accessing-secured-pages/ Description: Learn how to access secured pages using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, highlighting how you can access page protected by basic authentication to convert them to PDF using PDFShift's API. In this guide, we'll show you how to access secured page (protected by basic authentication) using C# and the HTTPWebRequest library to convert them to PDF using PDFShift's API. When you're converting a document, you might want to access a secured page (protected by basic authentication) to convert it to PDF. This can be done by setting the `auth` parameter to the request. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // You can set a basic authentication by passing the "auth" property which contains a username and password auth = new { username = "user", password = "password" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to protect your documents from any visitors while allowing PDFShift to access the page and convert it to PDF. --- # Adding a custom header or footer - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/adding-a-custom-header-or-footer/ Description: Learn how to add custom headers and footers to your PDFs using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to customize PDF appearance with headers and footers. In this guide, we'll show you how to add custom headers and footers to your PDFs using C# and the HTTPWebRequest library. When generating PDFs, you might want to add custom headers and footers to your documents for branding or informational purposes. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Add custom header and footer header = new { content = "
Header Content
", height = "20mm" }, footer = new { content = "
Footer Content
", height = "20mm" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to add consistent branding elements to all your generated PDF documents. --- # Adding a text watermark - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/adding-a-text-watermark/ Description: Learn how to add text watermarks to your PDFs using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to apply text watermarks to protect your documents. In this guide, we'll show you how to add text watermarks to your PDFs using C# and the HTTPWebRequest library. When generating PDFs, you might want to add text watermarks to your documents for protection or branding purposes. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Add text watermark watermark = new { text = "CONFIDENTIAL", opacity = 0.3, size = "20px", color = "#000000" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to add textual protection to your documents with customizable text. --- # Adding an image watermark - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/adding-an-image-watermark/ Description: Learn how to add image watermarks to your PDFs using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to apply image watermarks to protect your documents. In this guide, we'll show you how to add image watermarks to your PDFs using C# and the HTTPWebRequest library. When generating PDFs, you might want to add image watermarks to your documents for protection or branding purposes. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Add image watermark watermark = new { image = "https://example.com/watermark.png", opacity = 0.5, position = "center" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to add visual protection to your documents with custom images. --- # Avoid conversion on error - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/avoid-conversion-on-error/ Description: Learn how to avoid conversion on error using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to handle conversion errors gracefully. In this guide, we'll show you how to avoid conversion on error using C# and the HTTPWebRequest library. When converting documents to PDF, you might want to prevent conversion if certain errors occur to avoid generating invalid PDFs. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Prevent conversion on error continue_on_error = false }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to fail fast when conversion issues occur. --- # Convert HTML to PDF from a URL - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/convert-html-to-pdf-from-a-url/ Description: Learn how to convert HTML from a URL to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to convert online HTML content to PDF. In this guide, we'll show you how to convert HTML from a URL to PDF using C# and the HTTPWebRequest library. Converting HTML from a URL to PDF is a common requirement when you want to generate PDFs from existing web content. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to easily convert any webpage to a PDF document. --- # Convert HTML to PDF from raw HTML - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/convert-html-to-pdf-from-raw-html/ Description: Learn how to convert raw HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to convert HTML content directly to PDF. In this guide, we'll show you how to convert raw HTML to PDF using C# and the HTTPWebRequest library. Converting raw HTML content to PDF is useful when you have HTML content that isn't hosted on a web server. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "

Hello World

" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to convert HTML content directly to PDF without needing a URL. --- # Define a time limit - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/define-a-time-limit/ Description: Learn how to define a time limit for PDF conversions using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to set timeouts to prevent long-running conversions. In this guide, we'll show you how to define a time limit for PDF conversions using C# and the HTTPWebRequest library. When converting documents to PDF, you might want to set a timeout to prevent long-running conversions from blocking your application. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); // Set a timeout in milliseconds request.Timeout = 30000; var payload = new { source = "https://www.example.com", // Set a timeout in seconds timeout = 30 }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to control how long a conversion can take before timing out. --- # Exporting only a specific set of pages - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/exporting-only-a-specific-set-of-pages/ Description: Learn how to export only specific pages from a document when converting to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to select specific pages for export. In this guide, we'll show you how to export only specific pages from a document when converting to PDF using C# and the HTTPWebRequest library. When converting documents, you might want to export only a specific range of pages rather than the entire document. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Export only pages 1-3 pages = "1-3" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to selectively export pages from multi-page documents. --- # Generate a document with full height - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/generate-a-document-with-full-height/ Description: Learn how to generate a document with full height using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to create full-height PDFs. In this guide, we'll show you how to generate a document with full height using C# and the HTTPWebRequest library. When converting documents to PDF, you might want to ensure the entire document height is preserved. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Generate document with full height full_height = true }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This ensures the entire document content is included in the PDF. --- # Loading CSS from a string - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/loading-css-from-a-string/ Description: Learn how to load CSS from a string when converting HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to apply inline CSS styling. In this guide, we'll show you how to load CSS from a string when converting HTML to PDF using C# and the HTTPWebRequest library. When converting HTML to PDF, you might want to apply CSS styling using inline CSS rather than external stylesheets. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load CSS from a string css = "body { font-family: Arial; } h1 { color: blue; }" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to apply custom styling directly to your PDFs. --- # Loading CSS from a URL - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/loading-css-from-a-url/ Description: Learn how to load CSS from a URL when converting HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to reference external CSS files. In this guide, we'll show you how to load CSS from a URL when converting HTML to PDF using C# and the HTTPWebRequest library. When converting HTML to PDF, you might want to reference external CSS files to maintain consistent styling. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load CSS from a URL css = "https://example.com/styles.css" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to apply external stylesheets to your PDFs. --- # Loading JavaScript from a string - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/loading-javascript-from-a-string/ Description: Learn how to load JavaScript from a string when converting HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to include inline JavaScript. In this guide, we'll show you how to load JavaScript from a string when converting HTML to PDF using C# and the HTTPWebRequest library. When converting HTML to PDF, you might want to include JavaScript functionality using inline code. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load JavaScript from a string javascript = "document.body.style.backgroundColor = 'red';" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This enables dynamic behavior in your PDFs. --- # Loading JavaScript from a URL - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/loading-javascript-from-a-url/ Description: Learn how to load JavaScript from a URL when converting HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to reference external JavaScript files. In this guide, we'll show you how to load JavaScript from a URL when converting HTML to PDF using C# and the HTTPWebRequest library. When converting HTML to PDF, you might want to reference external JavaScript files to include dynamic functionality. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Load JavaScript from a URL javascript = "https://example.com/script.js" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to include external JavaScript libraries in your PDFs. --- # Protecting the generated PDF - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/protecting-the-generated-pdf/ Description: Learn how to protect generated PDFs with passwords using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to secure your PDF documents. In this guide, we'll show you how to protect generated PDFs with passwords using C# and the HTTPWebRequest library. When generating PDFs, you might want to add password protection to restrict access. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Protect the PDF with a password protection = new { user_password = "user123", owner_password = "owner123" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to secure your PDF documents with passwords. --- # Receive a webhook event - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/receive-a-webhook-event/ Description: Learn how to receive webhook events when PDF conversion is complete using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to handle asynchronous conversion notifications. In this guide, we'll show you how to receive webhook events when PDF conversion is complete using C# and the HTTPWebRequest library. When converting documents asynchronously, you might want to be notified when the conversion is complete via a webhook. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Set up webhook notification webhook = new { url = "https://your-server.com/webhook", secret = "your-secret-key" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to be notified when conversions are complete without polling. --- # Save your PDF online and get back a URL - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/save-your-pdf-online-and-get-back-a-url/ Description: Learn how to save your PDF online and get back a URL using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to store PDFs in cloud storage and retrieve URLs. In this guide, we'll show you how to save your PDF online and get back a URL using C# and the HTTPWebRequest library. When generating PDFs, you might want to store them in cloud storage and get a URL to access them later. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Save PDF to cloud storage and get URL output = new { type = "url", url = "https://your-storage.com/" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to store PDFs in cloud storage and access them via URLs. --- # Save your PDF to your Amazon S3 bucket - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/save-your-pdf-to-your-amazon-s3-bucket/ Description: Learn how to save your PDF to your Amazon S3 bucket using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to store PDFs directly in AWS S3. In this guide, we'll show you how to save your PDF to your Amazon S3 bucket using C# and the HTTPWebRequest library. When generating PDFs, you might want to store them directly in Amazon S3 for easy access and management. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Save PDF to Amazon S3 bucket output = new { type = "s3", bucket = "your-bucket-name", key = "path/to/document.pdf" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to store PDFs directly in your AWS S3 buckets. --- # Send custom HTTP headers - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/send-custom-http-headers/ Description: Learn how to send custom HTTP headers when converting HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to customize request headers. In this guide, we'll show you how to send custom HTTP headers when converting HTML to PDF using C# and the HTTPWebRequest library. When converting HTML to PDF, you might need to send custom HTTP headers to access protected resources or provide additional information. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Send custom HTTP headers headers = new { authorization = "Bearer token123", "user-agent" = "MyApp/1.0" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to customize the HTTP requests sent to the source URL. --- # Using cookies - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/using-cookies/ Description: Learn how to use cookies when converting HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to manage cookies during conversion. In this guide, we'll show you how to use cookies when converting HTML to PDF using C# and the HTTPWebRequest library. When converting HTML to PDF, you might need to send cookies to access authenticated content or maintain session state. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Send cookies with the request cookies = new { sessionid = "abc123", user = "john_doe" } }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to maintain session state when accessing protected content. --- # Waiting for a custom element to be ready - C# / HTTPWebRequest Source: https://pdfshift.io/guides/csharp/httpwebrequest/waiting-for-a-custom-element-to-be-ready/ Description: Learn how to wait for a custom element to be ready when converting HTML to PDF using C# and the HTTPWebRequest library. This guide offers detailed steps with code samples in C# and the HTTPWebRequest library, showing how to handle dynamic content. In this guide, we'll show you how to wait for a custom element to be ready when converting HTML to PDF using C# and the HTTPWebRequest library. When converting HTML containing dynamic content, you might need to wait for specific elements to be rendered before generating the PDF. ```csharp using System; using System.Net; using System.Text; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var request = (HttpWebRequest)WebRequest.Create("https://api.pdfshift.io/v3/convert/pdf"); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("X-API-Key", apiKey); var payload = new { source = "https://www.example.com", // Wait for a specific element to be ready wait_for = "#dynamic-content.loaded" }; var json = System.Text.Json.JsonSerializer.Serialize(payload); byte[] data = Encoding.UTF8.GetBytes(json); request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } try { var response = (HttpWebResponse)request.GetResponse(); // Handle errors: if (response.StatusCode >= HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } using (var reader = new StreamReader(response.GetResponseStream())) { var result = reader.ReadToEnd(); File.WriteAllText("result.pdf", result); } Console.WriteLine("The PDF document was generated and saved to result.pdf"); } catch (WebException ex) { Console.WriteLine($"Error: {ex.Message}"); } ``` This allows you to ensure dynamic content is fully loaded before PDF generation. --- # Accessing secured pages - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/accessing-secured-pages/ Description: Learn how to access secured pages using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, highlighting how you can access page protected by basic authentication to convert them to PDF using PDFShift's API. In this guide, we'll show you how to access secured page (protected by basic authentication) using C# and the RestSharp library to convert them to PDF using PDFShift's API. When you're converting a document, you might want to access a secured page (protected by basic authentication) to convert it to PDF. This can be done by setting the `auth` parameter to the request. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // You can set a basic authentication by passing the "auth" property which contains a username and password auth = new { username = "user", password = "password" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to protect your documents from any visitors while allowing PDFShift to access the page and convert it to PDF. --- # Adding a custom header or footer - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/adding-a-custom-header-or-footer/ Description: Learn how to add custom headers and footers to your PDFs using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to customize PDF appearance with headers and footers. In this guide, we'll show you how to add custom headers and footers to your PDFs using C# and the RestSharp library. When generating PDFs, you might want to add custom headers and footers to your documents for branding or informational purposes. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Add custom header and footer header = new { content = "
Header Content
", height = "20mm" }, footer = new { content = "
Footer Content
", height = "20mm" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to add consistent branding elements to all your generated PDF documents. --- # Adding a text watermark - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/adding-a-text-watermark/ Description: Learn how to add text watermarks to your PDFs using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to apply text watermarks to protect your documents. In this guide, we'll show you how to add text watermarks to your PDFs using C# and the RestSharp library. When generating PDFs, you might want to add text watermarks to your documents for protection or branding purposes. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Add text watermark watermark = new { text = "CONFIDENTIAL", opacity = 0.3, size = "20px", color = "#000000" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to add textual protection to your documents with customizable text. --- # Adding an image watermark - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/adding-an-image-watermark/ Description: Learn how to add image watermarks to your PDFs using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to apply image watermarks to protect your documents. In this guide, we'll show you how to add image watermarks to your PDFs using C# and the RestSharp library. When generating PDFs, you might want to add image watermarks to your documents for protection or branding purposes. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Add image watermark watermark = new { image = "https://example.com/watermark.png", opacity = 0.5, position = "center" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to add visual protection to your documents with custom images. --- # Avoid conversion on error - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/avoid-conversion-on-error/ Description: Learn how to avoid conversion on error using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to handle conversion errors gracefully. In this guide, we'll show you how to avoid conversion on error using C# and the RestSharp library. When converting documents to PDF, you might want to prevent conversion if certain errors occur to avoid generating invalid PDFs. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Prevent conversion on error continue_on_error = false }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to fail fast when conversion issues occur. --- # Convert HTML to PDF from a URL - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/convert-html-to-pdf-from-a-url/ Description: Learn how to convert HTML from a URL to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to convert online HTML content to PDF. In this guide, we'll show you how to convert HTML from a URL to PDF using C# and the RestSharp library. Converting HTML from a URL to PDF is a common requirement when you want to generate PDFs from existing web content. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to easily convert any webpage to a PDF document. --- # Convert HTML to PDF from raw HTML - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/convert-html-to-pdf-from-raw-html/ Description: Learn how to convert raw HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to convert HTML content directly to PDF. In this guide, we'll show you how to convert raw HTML to PDF using C# and the RestSharp library. Converting raw HTML content to PDF is useful when you have HTML content that isn't hosted on a web server. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "

Hello World

" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to convert HTML content directly to PDF without needing a URL. --- # Define a time limit - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/define-a-time-limit/ Description: Learn how to define a time limit for PDF conversions using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to set timeouts to prevent long-running conversions. In this guide, we'll show you how to define a time limit for PDF conversions using C# and the RestSharp library. When converting documents to PDF, you might want to set a timeout to prevent long-running conversions from blocking your application. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); client.Timeout = 30000; // 30 seconds timeout var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Set a timeout in seconds timeout = 30 }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to control how long a conversion can take before timing out. --- # Exporting only a specific set of pages - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/exporting-only-a-specific-set-of-pages/ Description: Learn how to export only specific pages from a document when converting to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to select specific pages for export. In this guide, we'll show you how to export only specific pages from a document when converting to PDF using C# and the RestSharp library. When converting documents, you might want to export only a specific range of pages rather than the entire document. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Export only pages 1-3 pages = "1-3" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to selectively export pages from multi-page documents. --- # Generate a document with full height - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/generate-a-document-with-full-height/ Description: Learn how to generate a document with full height using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to create full-height PDFs. In this guide, we'll show you how to generate a document with full height using C# and the RestSharp library. When converting documents to PDF, you might want to ensure the entire document height is preserved. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Generate document with full height full_height = true }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This ensures the entire document content is included in the PDF. --- # Loading CSS from a string - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/loading-css-from-a-string/ Description: Learn how to load CSS from a string when converting HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to apply inline CSS styling. In this guide, we'll show you how to load CSS from a string when converting HTML to PDF using C# and the RestSharp library. When converting HTML to PDF, you might want to apply CSS styling using inline CSS rather than external stylesheets. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Load CSS from a string css = "body { font-family: Arial; } h1 { color: blue; }" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to apply custom styling directly to your PDFs. --- # Loading CSS from a URL - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/loading-css-from-a-url/ Description: Learn how to load CSS from a URL when converting HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to reference external CSS files. In this guide, we'll show you how to load CSS from a URL when converting HTML to PDF using C# and the RestSharp library. When converting HTML to PDF, you might want to reference external CSS files to maintain consistent styling. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Load CSS from a URL css = "https://example.com/styles.css" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to apply external stylesheets to your PDFs. --- # Loading JavaScript from a string - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/loading-javascript-from-a-string/ Description: Learn how to load JavaScript from a string when converting HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to include inline JavaScript. In this guide, we'll show you how to load JavaScript from a string when converting HTML to PDF using C# and the RestSharp library. When converting HTML to PDF, you might want to include JavaScript functionality using inline code. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Load JavaScript from a string javascript = "document.body.style.backgroundColor = 'red';" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This enables dynamic behavior in your PDFs. --- # Loading JavaScript from a URL - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/loading-javascript-from-a-url/ Description: Learn how to load JavaScript from a URL when converting HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to reference external JavaScript files. In this guide, we'll show you how to load JavaScript from a URL when converting HTML to PDF using C# and the RestSharp library. When converting HTML to PDF, you might want to reference external JavaScript files to include dynamic functionality. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Load JavaScript from a URL javascript = "https://example.com/script.js" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to include external JavaScript libraries in your PDFs. --- # Protecting the generated PDF - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/protecting-the-generated-pdf/ Description: Learn how to protect generated PDFs with passwords using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to secure your PDF documents. In this guide, we'll show you how to protect generated PDFs with passwords using C# and the RestSharp library. When generating PDFs, you might want to add password protection to restrict access. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Protect the PDF with a password protection = new { user_password = "user123", owner_password = "owner123" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to secure your PDF documents with passwords. --- # Receive a webhook event - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/receive-a-webhook-event/ Description: Learn how to receive webhook events when PDF conversion is complete using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to handle asynchronous conversion notifications. In this guide, we'll show you how to receive webhook events when PDF conversion is complete using C# and the RestSharp library. When converting documents asynchronously, you might want to be notified when the conversion is complete via a webhook. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Set up webhook notification webhook = new { url = "https://your-server.com/webhook", secret = "your-secret-key" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to be notified when conversions are complete without polling. --- # Save your PDF online and get back a URL - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/save-your-pdf-online-and-get-back-a-url/ Description: Learn how to save your PDF online and get back a URL using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to store PDFs in cloud storage and retrieve URLs. In this guide, we'll show you how to save your PDF online and get back a URL using C# and the RestSharp library. When generating PDFs, you might want to store them in cloud storage and get a URL to access them later. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Save PDF to cloud storage and get URL output = new { type = "url", url = "https://your-storage.com/" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to store PDFs in cloud storage and access them via URLs. --- # Save your PDF to your Amazon S3 bucket - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/save-your-pdf-to-your-amazon-s3-bucket/ Description: Learn how to save your PDF to your Amazon S3 bucket using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to store PDFs directly in AWS S3. In this guide, we'll show you how to save your PDF to your Amazon S3 bucket using C# and the RestSharp library. When generating PDFs, you might want to store them directly in Amazon S3 for easy access and management. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Save PDF to Amazon S3 bucket output = new { type = "s3", bucket = "your-bucket-name", key = "path/to/document.pdf" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to store PDFs directly in your AWS S3 buckets. --- # Send custom HTTP headers - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/send-custom-http-headers/ Description: Learn how to send custom HTTP headers when converting HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to customize request headers. In this guide, we'll show you how to send custom HTTP headers when converting HTML to PDF using C# and the RestSharp library. When converting HTML to PDF, you might need to send custom HTTP headers to access protected resources or provide additional information. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Send custom HTTP headers headers = new { authorization = "Bearer token123", "user-agent" = "MyApp/1.0" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to customize the HTTP requests sent to the source URL. --- # Using cookies - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/using-cookies/ Description: Learn how to use cookies when converting HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to manage cookies during conversion. In this guide, we'll show you how to use cookies when converting HTML to PDF using C# and the RestSharp library. When converting HTML to PDF, you might need to send cookies to access authenticated content or maintain session state. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Send cookies with the request cookies = new { sessionid = "abc123", user = "john_doe" } }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to maintain session state when accessing protected content. --- # Waiting for a custom element to be ready - C# / RestSharp Source: https://pdfshift.io/guides/csharp/restsharp/waiting-for-a-custom-element-to-be-ready/ Description: Learn how to wait for a custom element to be ready when converting HTML to PDF using C# and the RestSharp library. This guide offers detailed steps with code samples in C# and the RestSharp library, showing how to handle dynamic content. In this guide, we'll show you how to wait for a custom element to be ready when converting HTML to PDF using C# and the RestSharp library. When converting HTML containing dynamic content, you might need to wait for specific elements to be rendered before generating the PDF. ```csharp using RestSharp; using System.IO; using System.Threading.Tasks; // You can get an API key at https://pdfshift.io var apiKey = "sk_xxxxxxxxxxxx"; var client = new RestClient("https://api.pdfshift.io/v3/convert/pdf"); var request = new RestRequest(Method.Post); request.AddHeader("X-API-Key", apiKey); request.AddHeader("Content-Type", "application/json"); var payload = new { source = "https://www.example.com", // Wait for a specific element to be ready wait_for = "#dynamic-content.loaded" }; request.AddJsonBody(payload); var response = await client.ExecuteAsync(request); // Handle errors: if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest) { throw new Exception($"Request failed with status code {response.StatusCode}"); } File.WriteAllBytes("result.pdf", response.RawBytes); Console.WriteLine("The PDF document was generated and saved to result.pdf"); ``` This allows you to ensure dynamic content is fully loaded before PDF generation. --- # Accessing secured pages - cUrl Source: https://pdfshift.io/guides/curl/accessing-secured-pages/ Description: Learn how to access secured pages when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to access secured pages when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Access a secured page curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com/secured", "auth": {"username": "user", "password": "pass"}}' \ -o "result.pdf" ``` With this cUrl command, you can access secured pages by providing authentication credentials. Happy coding! ``` --- # Adding a custom header or footer - cUrl Source: https://pdfshift.io/guides/curl/adding-a-custom-header-or-footer/ Description: Learn how to add custom headers and footers to your PDF documents when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to add custom headers and footers to your PDF documents when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Add a custom header and footer curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "header": {"html": "
Page Header
"}, "footer": {"html": "
Page Footer
"}}' \ -o "result.pdf" ``` With this cUrl command, you can add custom headers and footers to your PDF documents. Happy coding! ``` --- # Adding a text watermark - cUrl Source: https://pdfshift.io/guides/curl/adding-a-text-watermark/ Description: Learn how to add a text watermark to your PDF documents when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to add a text watermark to your PDF documents when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Add a text watermark curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "watermark": {"text": "CONFIDENTIAL"}}' \ -o "result.pdf" ``` With this cUrl command, you can add text watermarks to protect your PDF documents. Happy coding! ``` --- # Adding an image watermark - cUrl Source: https://pdfshift.io/guides/curl/adding-an-image-watermark/ Description: Learn how to add an image watermark to your PDF documents when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to add an image watermark to your PDF documents when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Add an image watermark curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "watermark": {"image": "https://example.com/logo.png"}}' \ -o "result.pdf" ``` With this cUrl command, you can add image watermarks to protect your PDF documents. Happy coding! ``` --- # Avoid conversion on error - cUrl Source: https://pdfshift.io/guides/curl/avoid-conversion-on-error/ Description: Learn how to prevent PDF conversion from happening when there are errors in the source HTML or CSS using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to avoid conversion on error using PDFShift's API. This allows you to prevent PDF generation when there are issues with the source content. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Convert HTML from a URL with error handling curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "avoid_conversion_on_error": true}' \ -o "result.pdf" ``` With this cUrl command, you can prevent PDF generation when errors occur in the source HTML or CSS. Happy coding! ``` --- # Convert an HTML document to PDF from a URL - cUrl Source: https://pdfshift.io/guides/curl/convert-html-to-pdf-from-a-url/ Description: Learn how to easily convert HTML documents to PDF from a URL using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to convert HTML documents to PDFs using PDFShift's API. This is a straightforward process that can be accomplished with just a few lines of cUrl code. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Convert HTML from a URL to PDF curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com"}' \ -o "result.pdf" ``` With this cUrl command, you can effortlessly convert HTML documents from a URL to PDF files using PDFShift's API. Happy coding! ``` --- # Convert an HTML document to PDF from raw HTML - cUrl Source: https://pdfshift.io/guides/curl/convert-html-to-pdf-from-raw-html/ Description: Learn how to easily convert HTML documents to PDF from raw HTML using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to convert HTML documents to PDFs using PDFShift's API by providing raw HTML content. This is a straightforward process that can be accomplished with just a few lines of cUrl code. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Convert raw HTML to PDF curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"html": "

Hello World

This is a test document.

"}' \ -o "result.pdf" ``` With this cUrl command, you can effortlessly convert raw HTML to PDF files using PDFShift's API. Happy coding! ``` --- # Define a time limit - cUrl Source: https://pdfshift.io/guides/curl/define-a-time-limit/ Description: Learn how to define a time limit for PDF conversion using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to define a time limit for PDF conversion using PDFShift's API. This helps prevent long-running conversions from impacting your application. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Convert HTML with a time limit of 30 seconds curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "time_limit": 30}' \ -o "result.pdf" ``` With this cUrl command, you can set a time limit for PDF conversions to prevent long-running processes. Happy coding! ``` --- # Exporting only a specific set of pages - cUrl Source: https://pdfshift.io/guides/curl/exporting-only-a-specific-set-of-pages/ Description: Learn how to export only a specific set of pages when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to export only specific pages when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Export only pages 1 through 3 curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "pages": "1-3"}' \ -o "result.pdf" ``` With this cUrl command, you can selectively export specific pages from multi-page documents. Happy coding! ``` --- # Generate a document with full height - cUrl Source: https://pdfshift.io/guides/curl/generate-a-document-with-full-height/ Description: Learn how to generate PDF documents with full height using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to generate PDF documents with full height using PDFShift's API. This ensures your content spans the entire page height. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Generate a document with full height curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "full_height": true}' \ -o "result.pdf" ``` With this cUrl command, you can generate PDF documents that expand to fill the full height of the page. Happy coding! ``` --- # Loading CSS from a string - cUrl Source: https://pdfshift.io/guides/curl/loading-css-from-a-string/ Description: Learn how to provide CSS styles directly as a string when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to provide CSS styles directly as a string when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Provide CSS as a string curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "css": "body { font-family: Arial; } h1 { color: blue; }"}' \ -o "result.pdf" ``` With this cUrl command, you can provide inline CSS styles for your PDF documents. Happy coding! ``` --- # Loading CSS from a URL - cUrl Source: https://pdfshift.io/guides/curl/loading-css-from-a-url/ Description: Learn how to load external CSS stylesheets when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to load external CSS stylesheets when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Load CSS from a URL curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "css": "https://example.com/styles.css"}' \ -o "result.pdf" ``` With this cUrl command, you can load external CSS files for styling your PDF documents. Happy coding! ``` --- # Loading JavaScript from a string - cUrl Source: https://pdfshift.io/guides/curl/loading-javascript-from-a-string/ Description: Learn how to provide JavaScript directly as a string when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to provide JavaScript directly as a string when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Provide JavaScript as a string curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "javascript": "document.body.style.backgroundColor = \"red\";"}' \ -o "result.pdf" ``` With this cUrl command, you can provide inline JavaScript for dynamic content in your PDF documents. Happy coding! ``` --- # Loading JavaScript from a URL - cUrl Source: https://pdfshift.io/guides/curl/loading-javascript-from-a-url/ Description: Learn how to load external JavaScript files when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to load external JavaScript files when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Load JavaScript from a URL curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "javascript": "https://example.com/script.js"}' \ -o "result.pdf" ``` With this cUrl command, you can load external JavaScript files for dynamic content in your PDF documents. Happy coding! ``` --- # Protecting the generated PDF - cUrl Source: https://pdfshift.io/guides/curl/protecting-the-generated-pdf/ Description: Learn how to protect the generated PDF with a password using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to protect the generated PDF with a password using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Protect the PDF with a password curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "protect": {"password": "mypassword"}}' \ -o "result.pdf" ``` With this cUrl command, you can password-protect your generated PDF documents. Happy coding! ``` --- # Receive a webhook event - cUrl Source: https://pdfshift.io/guides/curl/receive-a-webhook-event/ Description: Learn how to receive webhook events when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to receive webhook events when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Receive a webhook event upon completion curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "webhook": {"url": "https://yourdomain.com/webhook"}}' \ -o "result.pdf" ``` With this cUrl command, you can receive webhook notifications when PDF conversion is complete. Happy coding! ``` --- # Save your PDF online and get back a URL - cUrl Source: https://pdfshift.io/guides/curl/save-your-pdf-online-and-get-back-a-url/ Description: Learn how to save your PDF online and get back a URL when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to save your PDF online and get back a URL when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Save PDF online and get a URL curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "filename": "my-document.pdf", "webhook": {"url": "https://yourdomain.com/webhook"}}' \ -o "result.pdf" ``` With this cUrl command, you can save your PDF online and receive a URL to access it. Happy coding! ``` --- # Save your PDF to your Amazon S3 bucket - cUrl Source: https://pdfshift.io/guides/curl/save-your-pdf-to-your-amazon-s3-bucket/ Description: Learn how to save your PDF directly to an Amazon S3 bucket when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to save your PDF directly to an Amazon S3 bucket when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Save PDF to Amazon S3 bucket curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "filename": "my-document.pdf", "s3": {"bucket": "my-bucket", "key": "documents/my-document.pdf"}}' \ -o "result.pdf" ``` With this cUrl command, you can directly save your PDF to an Amazon S3 bucket. Happy coding! ``` --- # Send custom HTTP headers - cUrl Source: https://pdfshift.io/guides/curl/send-custom-http-headers/ Description: Learn how to send custom HTTP headers when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to send custom HTTP headers when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Send custom HTTP headers curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -H "User-Agent: MyCustomAgent/1.0" \ -d '{"source": "https://www.example.com"}' \ -o "result.pdf" ``` With this cUrl command, you can send custom HTTP headers to the source URL. Happy coding! ``` --- # Using cookies - cUrl Source: https://pdfshift.io/guides/curl/using-cookies/ Description: Learn how to use cookies when converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to use cookies when converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Use cookies for authentication curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "cookies": [{"name": "session", "value": "abc123"}]}' \ -o "result.pdf" ``` With this cUrl command, you can pass cookies to authenticate with protected content. Happy coding! ``` --- # Waiting for a custom element to be ready - cUrl Source: https://pdfshift.io/guides/curl/waiting-for-a-custom-element-to-be-ready/ Description: Learn how to wait for a custom element to be ready before converting HTML to PDF using cUrl. This how-to guide offers clear cUrl code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to wait for a custom element to be ready before converting HTML to PDF using PDFShift's API. ```bash # You can get an API key at https://pdfshift.io API_KEY="sk_xxxxxxxxxxxx" # Wait for a custom element to be ready curl -X POST "https://api.pdfshift.io/v3/convert/pdf" \ -H "Content-Type: application/json" \ -H "X-API-Key: ${API_KEY}" \ -d '{"source": "https://www.example.com", "wait_for": "#dynamic-content"}' \ -o "result.pdf" ``` With this cUrl command, you can delay PDF conversion until specific elements are ready. Happy coding! ``` --- # Accessing secured pages - Go / Go-Resty Source: https://pdfshift.io/guides/go/go-resty/accessing-secured-pages/ Description: Learn how to access secured pages using Go and the Go-Resty library. This guide offers detailed steps with code samples in Go and the Go-Resty library, highlighting how you can acces page protected by basic authentication to convert them to PDF using PDFShift's API. In this guide, we'll show you how to access secured page (protected by basic authentication) using Go and the Go-Resty library to convert them to PDF using PDFShift's API. When you're converting a document, you might want to access a secured page (protected by basic authentication) to convert it to PDF. This can be done by setting the `auth` parameter to the request. ```go package main import ( "encoding/json" "fmt" "io/ioutil" "github.com/go-resty/resty/v2" ) func main() { // You can get an API key at https://pdfshift.io apiKey := "sk_xxxxxxxxxxxx" // You can set a basic authentication by passing the "auth" property which contains a username and password params := map[string]interface{}{ "source": "https://www.example.com", "auth": map[string]string{ "username": "user", "password": "password", }, } // Marshal the parameters into JSON jsonParams, err := json.Marshal(params) if err != nil { fmt.Println("Error marshaling JSON:", err) return } // Create a new Resty client client := resty.New() // Perform the request resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("X-API-Key", apiKey). SetBody(jsonParams). Post("https://api.pdfshift.io/v3/convert/pdf") if err != nil { fmt.Println("Error performing request:", err) return } // Check response status code if resp.StatusCode() >= 400 { fmt.Printf("Request failed with status code %d: %s\n", resp.StatusCode(), string(resp.Body())) return } // Save the PDF document err = ioutil.WriteFile("result.pdf", resp.Body(), 0644) if err != nil { fmt.Println("Error saving PDF document:", err) return } fmt.Println("The PDF document was generated and saved to result.pdf") } ``` This allows you to protect your documents from any visitors while allowing PDFShift to access the page and convert it to PDF. --- # Adding a custom header or footer - Go / Go-Resty Source: https://pdfshift.io/guides/go/go-resty/adding-a-custom-header-or-footer/ Description: Discover how to add custom headers or footers to a PDF using Go and the Go-Resty library. This in-depth guide includes Go codes that you can easily follow and quickly generate documents with PDFShift's API. In this guide, we'll show you how to add custom headers or footers to a PDF using Go and the Go-Resty library. We'll focus this guide on the `header` parameter, but know that the `footer` parameter works _exactly_ the same way. The `header` parameter is an object that accepts the following parameters: * `source`: The source of the header. It can be a URL or a raw HTML document. You can also provide some variables that we'll explain at the bottom of this guide. * `height`: The height of the header. By default, the height is in pixels, but you can also use `mm`, `cm` or `in` as units, like `10mm`. * `start_at`: The page number where the header should start. By default, the header will start at the first page. **NOTE**: You must provide the full data in the header/footer, and not via a network request. Loading files such as external CSS, Js or Fonts won't work in the header or footer. Instead, we recommend you to embed them in Base64. Here's an example: ```go package main import ( "encoding/json" "fmt" "io/ioutil" "github.com/go-resty/resty/v2" ) func main() { // You can get an API key at https://pdfshift.io apiKey := "sk_xxxxxxxxxxxx" // Define the request parameters params := map[string]interface{}{ "source": "https://en.wikipedia.org/wiki/PDF", "header": map[string]interface{}{ "source": "
Page {{ page }} over a total of {{ total }}. Made on {{ date }}
", "height": 150, "start_at": 2, }, } // Marshal the parameters into JSON jsonParams, err := json.Marshal(params) if err != nil { fmt.Println("Error marshaling JSON:", err) return } // Create a new Resty client client := resty.New() // Perform the request resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("X-API-Key", apiKey). SetBody(jsonParams). Post("https://api.pdfshift.io/v3/convert/pdf") if err != nil { fmt.Println("Error performing request:", err) return } // Check response status code if resp.StatusCode() >= 400 { fmt.Printf("Request failed with status code %d: %s\n", resp.StatusCode(), string(resp.Body())) return } // Save the PDF document err = ioutil.WriteFile("result.pdf", resp.Body(), 0644) if err != nil { fmt.Println("Error saving PDF document:", err) return } fmt.Println("The PDF document was generated and saved to result.pdf") } ``` The `source` parameter present in the header/footer accepts a set of variables that will be translated when converting the document. Here are the properties you can use: * `{{ title }}`: The title of the document. * `{{ url }}`: The URL of the document. * `{{ page }}`: The current page number. * `{{ total }}`: The total number of pages in the document. * `{{ date }}`: The current date in the format `M/D/YY-H:MM am/pm` such as "3/16/24, 2:04 PM". This will allow you to generate a document that looks more like a printable version of a website, with page number and customized header and footer. --- # Adding a text watermark - Go / Go-Resty Source: https://pdfshift.io/guides/go/go-resty/adding-a-text-watermark/ Description: Learn how to add text watermarks to your generated PDF document using Go and the Go-Resty library. With this guide, you'll be able to add watermarks on top of your generated PDFs easily with a quick request to PDFShift's API. In this guide, we'll walk you through the process of adding text watermarks to your PDF files, using PDFShift's API. Adding a watermark to your PDF can be done by adding the `watermark` object to your query. Adding a text allows you to customize its content and PDFShift's API provides a few properties to help you customize the visual aspect, such as the font size, color, and position. ```go package main import ( "encoding/json" "fmt" "io/ioutil" "github.com/go-resty/resty/v2" ) func main() { // You can get an API key at https://pdfshift.io apiKey := "sk_xxxxxxxxxxxx" params := map[string]interface{}{ "source": "https://www.example.com", "watermark": map[string]string{ "text": "PROTECTED DOCUMENT", "offset_x": "center", "offset_top": "top", }, } // Marshal the parameters into JSON jsonParams, err := json.Marshal(params) if err != nil { fmt.Println("Error marshaling JSON:", err) return } // Create a new Resty client client := resty.New() // Perform the request resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("X-API-Key", apiKey). SetBody(jsonParams). Post("https://api.pdfshift.io/v3/convert/pdf") if err != nil { fmt.Println("Error performing request:", err) return } // Check response status code if resp.StatusCode() >= 400 { fmt.Printf("Request failed with status code %d: %s\n", resp.StatusCode(), string(resp.Body())) return } // Save the PDF document err = ioutil.WriteFile("result.pdf", resp.Body(), 0644) if err != nil { fmt.Println("Error saving PDF document:", err) return } fmt.Println("The PDF document was generated and saved to result.pdf") } ``` You can customize the text watermark by applying the following properties: * `font_size`: The size of the text. An integer value in pixels. Defaults to 16. * `font_family` : The font family to be used. Defaults to Helvetica. * `font_color` : The color of the text. A hexadecimal color value. Defaults to '000000'. * `font_opacity` : The opacity of the text. A float value between 0 and 100. Defaults to 100. * `font_bold`: A boolean to set the text as bold. Defaults to false. * `font_italic`: A boolean to set the text as italic. Defaults to false. You can also customize the position of the text watermark by applying the following properties: * `offset_x`: The horizontal position of the text. Can be 'left', 'center', 'right', or a specific value in pixels. Defaults to 'center'. * `offset_y`: The vertical position of the text. Can be 'top', 'middle', 'bottom', or a specific value in pixels. Defaults to 'center'. For the offset positions, we accept a value in integer which will be translated to pixels, but you can also pass a unit such as 'px', 'in', 'cm', 'mm', 'pt'. For example: ```go params = { "source": "https://www.example.com", "watermark": { "text": "PROTECTED DOCUMENT", "offset_x": "5cm", "offset_top": "15mm" } } ``` --- # Adding an image watermark - Go / Go-Resty Source: https://pdfshift.io/guides/go/go-resty/adding-an-image-watermark/ Description: Discover how to effortlessly add image watermarks to PDFs using Go and the Go-Resty library. Our guide shows you how to add images on top of your PDF to protect your document easily. This is easily done with a simple request to PDFShift's API. In this guide, we'll walk you through the process of adding text watermarks to your PDF files, using PDFShift's API. Adding a watermark to your PDF can be done by adding the `watermark` object to your query. The advantage of providing an image is that you can add a visual stamp on top of each of your pages that are generated through PDFShift. ```go package main import ( "encoding/json" "fmt" "io/ioutil" "github.com/go-resty/resty/v2" ) func main() { // You can get an API key at https://pdfshift.io apiKey := "sk_xxxxxxxxxxxx" params := map[string]interface{}{ "source": "https://www.example.com", "watermark": map[string]string{ "image": "https://placekitten.com/200/300", "offset_x": "center", "offset_top": "top", }, } // Marshal the parameters into JSON jsonParams, err := json.Marshal(params) if err != nil { fmt.Println("Error marshaling JSON:", err) return } // Create a new Resty client client := resty.New() // Perform the request resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("X-API-Key", apiKey). SetBody(jsonParams). Post("https://api.pdfshift.io/v3/convert/pdf") if err != nil { fmt.Println("Error performing request:", err) return } // Check response status code if resp.StatusCode() >= 400 { fmt.Printf("Request failed with status code %d: %s\n", resp.StatusCode(), string(resp.Body())) return } // Save the PDF document err = ioutil.WriteFile("result.pdf", resp.Body(), 0644) if err != nil { fmt.Println("Error saving PDF document:", err) return } fmt.Println("The PDF document was generated and saved to result.pdf") } ``` The "image" parameter for the watermark can be used in two different values: * URL : A full URL to an image that will be used as the watermark. * Base64 : A base64 encoded image that will be used as the watermark. Note that you can also rotate the image by passing the `rotate` parameter as a degree (or negative degree) You can also customize the position of the text watermark by applying the following properties: * `offset_x`: The horizontal position of the text. Can be 'left', 'center', 'right', or a specific value in pixels. Defaults to 'center'. * `offset_y`: The vertical position of the text. Can be 'top', 'middle', 'bottom', or a specific value in pixels. Defaults to 'center'. For the offset positions, we accept a value in integer which will be translated to pixels, but you can also pass a unit such as 'px', 'in', 'cm', 'mm', 'pt'. For example: ```json params = { "source": "https://www.example.com", "watermark": { "text": "PROTECTED DOCUMENT", "offset_x": "5cm", "offset_top": "15mm" } } ``` --- # Avoid the conversion on error when loading the document - Go / Go-Resty Source: https://pdfshift.io/guides/go/go-resty/avoid-conversion-on-error/ Description: Learn how to avoid the conversion on error when loading the document using Go and the Go-Resty library and relies on the PDFShift's API. In this guide, we'll show you how to abort the conversion when loading the distant source does not return a 2XX response. When you're converting a document, you might want to avoid the conversion on error when loading the document. This can be done by setting the `raise_for_status` parameter to `True` in the request. ```go package main import ( "encoding/json" "fmt" "io/ioutil" "github.com/go-resty/resty/v2" ) func main() { // You can get an API key at https://pdfshift.io apiKey := "sk_xxxxxxxxxxxx" params := map[string]interface{}{ "source": "https://www.httpstat.us/404", "raise_for_status": true, } // Marshal the parameters into JSON jsonParams, err := json.Marshal(params) if err != nil { fmt.Println("Error marshaling JSON:", err) return } // Create a new Resty client client := resty.New() // Perform the request resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("X-API-Key", apiKey). SetBody(jsonParams). Post("https://api.pdfshift.io/v3/convert/pdf") if err != nil { fmt.Println("Error performing request:", err) return } // Check response status code if resp.StatusCode() >= 400 { fmt.Printf("Request failed with status code %d: %s\n", resp.StatusCode(), string(resp.Body())) return } // Save the PDF document err = ioutil.WriteFile("result.pdf", resp.Body(), 0644) if err != nil { fmt.Println("Error saving PDF document:", err) return } fmt.Println("The PDF document was generated and saved to result.pdf") } ``` Passing `raise_for_status` to `true` will ensure that if PDFShift can not load your document, the conversion will fail with an error. --- # Convert an HTML document to PDF from a URL - Go / Go-Resty Source: https://pdfshift.io/guides/go/go-resty/convert-html-to-pdf-from-a-url/ Description: Learn how to easily convert HTML documents to PDF from a URL using Go and the Go-Resty library. This how-to guide offers clear Go code examples that show developers how to implement this using the PDFShift API. In this guide, we'll show you how to convert HTML documents to PDFs using PDFShift's API. This is a straightforward process that can be accomplished with just a few lines of Go code. ```go package main import ( "encoding/json" "fmt" "io/ioutil" "github.com/go-resty/resty/v2" ) func main() { // You can get an API key at https://pdfshift.io apiKey := "sk_xxxxxxxxxxxx" params := map[string]interface{}{ "source": "https://www.exemple.com", } // Marshal the parameters into JSON jsonParams, err := json.Marshal(params) if err != nil { fmt.Println("Error marshaling JSON:", err) return } // Create a new Resty client client := resty.New() // Perform the request resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("X-API-Key", apiKey). SetBody(jsonParams). Post("https://api.pdfshift.io/v3/convert/pdf") if err != nil { fmt.Println("Error performing request:", err) return } // Check response status code if resp.StatusCode() >= 400 { fmt.Printf("Request failed with status code %d: %s\n", resp.StatusCode(), string(resp.Body())) return } // Save the PDF document err = ioutil.WriteFile("result.pdf", resp.Body(), 0644) if err != nil { fmt.Println("Error saving PDF document:", err) return } fmt.Println("The PDF document was generated and saved to result.pdf") } ``` With this Go script, you can effortlessly convert HTML documents from a URL to PDF files using PDFShift's API. Happy coding! --- # Convert an HTML document to PDF from raw HTML - Go / Go-Resty Source: https://pdfshift.io/guides/go/go-resty/convert-html-to-pdf-from-raw-html/ Description: Learn how to to convert raw HTML document to PDF using Go and the Go-Resty library. Our guide will explain you how to quickly convert documents with PDFShift's API. In this guide, we'll show you how to convert an HTML document to PDF using Go and the Go-Resty library. Providing the HTML document as raw as a lot of great advantages : * It avoids PDFShift to make a network request to fetch the HTML document. * It allows you to convert HTML documents that are not publicly accessible. * It improves the speed of the conversion If, on top of that, you can provide the styles and javascript also inline in the document (`

Invoice #1234

Customer: Acme Inc.

Total: €149.00

``` In a real Bubble application, these values can come from dynamic Bubble data. Your HTML could contain the equivalent of: ```html

Invoice #Current Invoice's Number

Customer: Current Invoice's Customer's Name

Total: Current Invoice's Total

``` Bubble builds the final HTML before sending it to PDFShift. ### 6. Let the user download the PDF The `Generate PDF` action returns a `url`. In the next workflow action, use: ``` Navigation → Open an external website ``` and use: ``` Result of step 1's url ``` The browser will open the generated PDF. You can also display the URL in your application, email it to the user, or store it in your database. ### 7. Save the PDF permanently in Bubble PDFShift URLs generated using `filename` remain available for two days. To keep a PDF permanently, save it into Bubble's own file storage. When assigning the PDF URL to a field of type **file**, use Bubble's: ``` :saved to Bubble Storage ``` operator. For example: ``` Result of step 1's url :saved to Bubble Storage ``` Bubble will download the external file and store its own copy. Bubble supports saving files from external APIs this way, with a maximum file size of 50 MB for the `:saved to Bubble Storage` operator. Your workflow can therefore look like: ``` User clicks "Generate invoice" ↓ Bubble builds HTML ↓ PDFShift generates PDF ↓ PDFShift returns URL ↓ Bubble saves PDF to Bubble Storage ↓ Invoice's PDF field is updated ``` ## Generate a PDF from a Bubble page PDFShift can also generate PDFs from URLs. Instead of sending HTML, set `source` to the URL of the page: ```json { "source": "https://myapp.com/report/1234", "filename": "bubble-report" } ``` PDFShift will load the webpage and convert it to PDF. This is useful when the document already exists as a Bubble page. For pages that require authentication or aren't publicly accessible, sending the HTML directly is usually easier, though PDFShift also supports HTTP headers, cookies, and HTTP authentication when you need to convert protected URLs. ## Customize the generated PDF You can add additional PDFShift options to your API Connector request. For example: ```json { "source": "", "filename": "bubble-document", "landscape": false, "use_print": true, "margin": "20px" } ``` You can make any of these values dynamic by turning them into Bubble parameters: ```json { "source": "", "filename": "", "landscape": } ``` This lets you control PDFShift from your Bubble workflows. PDFShift also supports page formats, margins, headers and footers, custom CSS, custom JavaScript, delayed rendering, cookies, authentication, PDF protection, and webhooks. ## Turn it into a Bubble plugin Once the API Connector version works, you can turn it into a reusable Bubble plugin. Bubble's Plugin Editor supports API connections directly, so the PDFShift plugin can expose actions such as: ``` Generate PDF Generate PNG Generate JPEG Get recent conversions ``` Users would install **PDFShift** from the Bubble Marketplace, enter their PDFShift API key once, and then see actions such as: ``` Plugins → PDFShift - Generate PDF ``` in their Bubble workflows. Bubble's documentation also supports converting an existing API Connector setup into a plugin, making it practical to build and test the integration in a normal Bubble application first. ### PDF URLs are temporary When you use the `filename` parameter, the generated document is stored by PDFShift and its URL remains available for two days. To keep it permanently, save it to Bubble Storage as shown above. If you don't want PDFShift to store the document at all, omit `filename` and PDFShift returns the PDF directly instead. ## Related Resources - [Bubble API Connector](https://manual.bubble.io): Learn how Bubble's API Connector calls external APIs securely. - [PDFShift API Doc](https://docs.pdfshift.io): Complete API reference with every parameter, option, and example. --- # PDFShift + Clay Integration Source: https://pdfshift.io/agents/clay/ Description: Generate a PDF for every row in your Clay tables with the PDFShift HTTP API enrichment — reports, proposals, invoices, and more. # PDFShift + Clay Generate a PDF for every row in your Clay tables with PDFShift's HTTP API enrichment. Turn reports, proposals, invoices, and more into documents, straight from your data. ## Step-by-Step Setup Guide PDFShift lets you generate PDF documents directly from your Clay tables. Each row can generate its own PDF using data from that row, wired up through Clay's **HTTP API** enrichment. ### 1. Get your PDFShift API key Create a PDFShift account and retrieve your API key from the [dashboard](https://app.pdfshift.io/). You'll add this key securely to Clay rather than putting it directly inside your HTTP request. ### 2. Add an HTTP API enrichment In your Clay table: 1. Click **Add enrichment**. 2. Search for **HTTP API**. 3. Select **HTTP API**. Clay's HTTP API integration can connect to any service that exposes an HTTP API, including PDFShift. ### 3. Add your PDFShift API key In the HTTP API configuration, open **Select header account** and click **Add account**. Add the following header: ``` X-API-Key: YOUR_PDFSHIFT_API_KEY ``` Give the connection a name such as: ``` PDFShift ``` Clay stores the credentials at the workspace level, so your API key never appears directly in the table configuration. ### 4. Configure the PDFShift request Configure the HTTP API enrichment with: ``` Method: POST Endpoint: api.pdfshift.io/v3/convert/pdf ``` PDFShift accepts either a URL or raw HTML through the `source` property. If your Clay table has a column named **HTML**, use a JSON body similar to: ```json { "source": "/HTML", "filename": "document.pdf" } ``` When editing the request in Clay, select your **HTML** column using Clay's column picker rather than typing the column reference manually. The `filename` option matters here. Without it, PDFShift returns the PDF as binary data. With `filename`, PDFShift stores the generated document temporarily and returns a JSON response containing the PDF URL instead, which is much easier to work with in Clay. ### 5. Store the generated PDF URL A successful PDFShift response contains information similar to: ```json { "success": true, "url": "PDF_URL", "filesize": 34980, "duration": 1237, "pdf_pages": 1 } ``` In Clay's **Field paths to return** setting, select: ``` url ``` Clay will then create a column containing the generated PDF URL for every row. Your workflow becomes: ``` Clay row ↓ HTML or URL ↓ PDFShift ↓ PDF generated ↓ PDF URL added to Clay ``` ## Generate personalized PDFs The HTML sent to PDFShift can contain any information from your Clay table. Create an HTML column that assembles the document, for example: ```html

Company Report

Acme Inc.

Industry: SaaS

Employees: 125

This report was automatically generated using Clay and PDFShift.

``` Use Clay formulas or AI columns to generate this HTML dynamically for every row, and PDFShift converts each version into its own PDF. ### Generate PDFs from URLs PDFShift can also convert an existing web page. If your Clay table contains a column named **Website**, your request can simply use that URL: ```json { "source": "/Website", "filename": "website.pdf" } ``` PDFShift will load the page and return its PDF version. ### Use Clay AI to configure PDFShift Clay's HTTP API integration includes an AI-assisted configuration mode. You can ask it something similar to: ``` Configure an API call to PDFShift that converts the HTML from my HTML column into a PDF. Send a POST request to the PDFShift PDF conversion endpoint. Authenticate using the X-API-Key header from my PDFShift connection. Send the HTML column as the "source" parameter and use "document.pdf" as the filename. Return the "url" property from the JSON response. ``` Review the generated configuration and test it on one row before running it across the entire table. ## Customize & Automate You can pass additional PDFShift parameters in the request body. For example: ```json { "source": "/HTML", "filename": "document.pdf", "landscape": true, "use_print": true } ``` PDFShift also supports features such as: - Custom page formats - Margins - Headers and footers - Custom CSS - Custom JavaScript - Delayed rendering - Authentication and cookies - Webhooks These parameters can also be populated dynamically from Clay columns. ### Automatically generate PDFs for new rows Once your HTTP API enrichment works correctly, enable Clay's **Auto-update** option. Clay can then automatically call PDFShift whenever the input data for a row changes. Use **Only run if** to control which rows should generate a PDF, which prevents unnecessary conversions. For example, generate the PDF only when: ``` Status = Ready ``` ### PDF URLs are temporary When using the `filename` parameter, PDFShift stores the generated PDF temporarily and returns its URL. The file is automatically deleted after two days. If the PDF needs to remain available permanently, download it or copy it to your own storage as part of your workflow. ## Related Resources - [Clay HTTP API](https://www.clay.com): Learn how Clay's HTTP API enrichment connects to any external service. - [PDFShift API Doc](https://docs.pdfshift.io): Complete API reference with every parameter, option, and example. --- # PDFShift + FlowMattic Integration Source: https://pdfshift.io/agents/flowmattic/ Description: Generate PDFs from HTML or webpages inside your FlowMattic workflows with PDFShift — use the API Module or build a reusable Custom App. # PDFShift + FlowMattic Generate PDFs from HTML or webpages directly inside your FlowMattic workflows with PDFShift. Connect it in minutes with the API Module, or build a reusable Custom App. ## Option 1: Use the API Module This is the quickest way to get started. FlowMattic's API module can send POST requests to any external REST API, including PDFShift. ### 1. Get your PDFShift API key Create a PDFShift account and copy your API key from the [dashboard](https://app.pdfshift.io/). PDFShift authenticates requests using the HTTP header: ``` X-API-Key: YOUR_API_KEY ``` [Register for Free](/register/) ### 2. Add an API action to FlowMattic Open your FlowMattic workflow, add a new action, and select: ``` API → POST ``` Set the endpoint to: ``` https://api.pdfshift.io/v3/convert/pdf ``` ### 3. Configure the headers Add: ``` X-API-Key: YOUR_PDFSHIFT_API_KEY Content-Type: application/json ``` Your PDFShift API key should be treated as a secret and never exposed to visitors on your WordPress site. ### 4. Configure the request body PDFShift requires a `source`, which can contain either HTML or a URL. For example: ```json { "source": "

Hello from FlowMattic!

", "filename": "flowmattic-document" } ``` Using `filename` tells PDFShift to temporarily store the generated document and return a JSON response containing its URL instead of the raw PDF binary, which makes the response particularly easy to use in FlowMattic. ### 5. Use dynamic FlowMattic data The HTML doesn't need to be static. Map values from previous workflow steps into your HTML. For example, a WooCommerce workflow could generate: ```html

Order #1234

Customer: Jane Doe

Total: $149.00

``` The order number, customer name, total, products, address, and other information can all come from previous FlowMattic steps. Your workflow might look like: ``` WooCommerce: New Order ↓ Prepare HTML ↓ PDFShift Generate PDF ↓ PDF URL ↓ Email / Google Drive / WordPress / CRM ``` ### 6. Get the generated PDF URL When `filename` is supplied, PDFShift returns JSON containing information about the conversion, including a URL for the generated document. Map the returned `url` field into subsequent FlowMattic actions: ``` PDFShift ↓ Generated PDF URL ↓ Send Email (or save to Google Drive) ``` PDFShift keeps files generated using `filename` for two days before automatically deleting them. If the document must remain available permanently, copy it to your own storage. ### Generate a PDF from a webpage PDFShift can also convert an existing webpage. Instead of passing HTML, simply pass its URL: ```json { "source": "https://example.com/report/1234", "filename": "customer-report" } ``` PDFShift will load the page and convert it to PDF. This is useful for workflows involving WordPress posts, WooCommerce pages, reports, dashboards, or other dynamically generated webpages. ### Customize the PDF You can add PDFShift options directly to the JSON payload. For example: ```json { "source": "...", "filename": "customer-report", "landscape": true, "use_print": true, "delay": 1000 } ``` PDFShift also supports options such as page formats, margins, headers and footers, custom CSS, JavaScript, watermarks, cookies, HTTP headers, authentication, delayed rendering, webhooks, and sandbox conversions. These values can also be populated dynamically from previous FlowMattic workflow steps. ## Option 2: Create a Custom App If you use PDFShift frequently, a FlowMattic Custom App gives you a cleaner integration. Instead of configuring an API request each time, PDFShift appears as its own app inside the workflow builder. Custom Apps support REST APIs and API-key authentication. Create an app named `PDFShift` and configure authentication as: ``` Type: API Key Header: X-API-Key ``` Then create a `Generate PDF` action using: ``` POST https://api.pdfshift.io/v3/convert/pdf ``` The action can expose fields such as: - Source - Filename - Landscape - Use print CSS - Delay - Page format - Margin - Header - Footer - Sandbox The workflow editor can then display: ``` PDFShift → Generate PDF ``` rather than requiring users to manually configure an HTTP request. ### Import PDFShift's OpenAPI specification FlowMattic can also generate Custom Apps from OpenAPI specifications. PDFShift provides one, so you can import it instead of defining every endpoint manually: ``` https://api.pdfshift.io/openapi.json ``` This can give you actions such as: ``` PDFShift ├── Generate PDF ├── Generate PNG ├── Generate JPEG └── List Recent Conversions ``` After importing the specification, review the generated actions and keep only the endpoints and parameters you want to expose. For most users, starting with just **Generate PDF** is sufficient. ## Example Workflows ### Generate a WooCommerce invoice A simple FlowMattic workflow could be: ``` WooCommerce: Order Created ↓ Build invoice HTML ↓ PDFShift: Generate PDF ↓ Email: Send invoice to customer ``` The invoice HTML can include dynamic WooCommerce values such as: - Order number - Customer - Billing address - Products - Quantity - Price - Taxes - Total Every WooCommerce order can therefore generate its own PDF automatically. ### Turn form submissions into PDFs You can also use PDFShift with Gravity Forms, Fluent Forms, Elementor Forms, Contact Form 7, or other form integrations. For example: ``` Gravity Forms Form Submitted ↓ Create HTML report ↓ PDFShift Generate PDF ↓ Google Drive Save document ↓ Email: Send PDF link ``` Each form submission produces its own personalized PDF. ### PDF URLs are temporary When using the `filename` parameter, PDFShift temporarily stores the generated document and returns a URL that is automatically deleted after two days. For permanent storage, save the document to WordPress, Google Drive, Amazon S3, or another service as part of your FlowMattic workflow. If you don't want PDFShift to store the document at all, omit `filename` and PDFShift returns the PDF directly. ## Related Resources - [FlowMattic](https://support.flowmattic.com/) — Learn how FlowMattic connects your WordPress workflows to external APIs. - [PDFShift API Doc](https://docs.pdfshift.io) — Complete API reference with every parameter, option, and example. --- # PDFShift for AI Agents & Automation Tools Source: https://pdfshift.io/agents/index/ Description: Generate PDFs from N8N, Lovable, Base44, Zapier, Make, MCP, Clay, Bubble, FlowMattic, and your own AI agents with PDFShift. # PDFShift for AI Agents & Automation Tools Powerful PDF generation for your automated workflows. Convert HTML to PDF seamlessly in your favorite automation tools and AI agents. ## Why Choose PDFShift for Automation - **No Code Required**: Use your favorite interface: N8n, Lovable, Base44, ... or via our MCP. No programming knowledge needed. - **API First**: RESTful API that works with any automation tool or AI agent framework. - **Always Reliable**: 99.99% uptime guarantee. Your workflows run smoothly without interruptions. - **Async Processing**: Webhook support for large jobs. Process documents in the background efficiently. ## Popular Integrations for PDFShift Connect PDFShift with your favorite tools and start automating PDF generation today. - [MCP](/agents/mcp/): Give AI agents access to PDFShift through the Model Context Protocol. - [N8N](/agents/n8n/): Generate PDFs automatically from your N8N workflows. - [Lovable](/agents/lovable/): Add secure, server-side PDF export to your Lovable app in one prompt. - [Base44](/agents/base44/): Connect PDFShift from its OpenAPI spec or a backend function in Base44. - [Clay](/agents/clay/): Generate personalized PDFs from your Clay workflow data. - [Make](/agents/make/): Generate PDFs automatically from your Make scenarios. - [Bubble](/agents/bubble/): Add automated PDF generation to your Bubble applications. - [FlowMattic](/agents/flowmattic/): Generate PDFs automatically from your WordPress workflows. - [Zapier](/agents/zapier/): Create Zaps that generate PDFs from your triggers and data. Can't find your tool? [Suggest an integration](/contact/). ## What You Can Build Real-world use cases for automated PDF generation: - **Invoice & Receipt Generation**: Turn payment or order webhooks into branded invoices and receipts, emailed to customers instantly. - **Report Creation**: Convert spreadsheet, database, or API data into polished PDF reports on a schedule. - **Contract Automation**: Merge CRM data into contract templates and generate signature-ready agreements. - **On-Demand Agent Exports**: Let an AI agent produce a PDF from a chat or MCP call: summaries, briefs, or generated content. - **Web & Email Archiving**: Snapshot web pages, emails, or dashboards as PDFs into your cloud storage automatically. - **Certificates & Documents at Scale**: Generate personalized certificates, tickets, or letters in bulk from a single template. ## Developer Resources - [API Documentation](https://docs.pdfshift.io): Comprehensive API reference with all parameters, options, and examples. - [Language Guides](/guides/): Step-by-step guides for Go, Node, PHP, Python, Java, Ruby, and more. --- # PDFShift + Lovable Integration Source: https://pdfshift.io/agents/lovable/ Description: Add PDF generation to your Lovable app with PDFShift. Copy the one-shot prompt or click Build with Lovable to set up a secure server-side PDF export in minutes. # PDFShift + Lovable Add PDF generation to any application built with Lovable. Generate invoices, reports, receipts, or certificates directly from the HTML your app produces, with your API key kept safely server-side. ## Quick Start: the one-shot prompt The fastest way to integrate PDFShift into your Lovable app is to paste the prompt below into your Lovable project, or click **Build with Lovable** to open Lovable with it pre-filled. It sets up the secret, the server-side Edge Function, and the "Export as PDF" button in a single pass. ```text Add PDF export to my app using PDFShift (an HTML-to-PDF API). Keep my PDFShift API key secret and make every PDFShift call from the server, never from the browser. 1. Secret Add a secret in Lovable Cloud named PDFSHIFT_API_KEY. Never expose it in frontend code or return it to the client. 2. Edge Function "generate-pdf" Create a server-side Edge Function named "generate-pdf" that: - Accepts a POST request with a JSON body: { "source": "", "options": { ...optional PDFShift options } }. - Calls the PDFShift API: - URL: https://api.pdfshift.io/v3/convert/pdf - Method: POST - Headers: "X-API-Key: " and "Content-Type: application/json" - JSON body: { "source": , "sandbox": true, ...options } - When no "filename" or "webhook" is set, PDFShift returns the binary PDF in the response body. - Return that binary PDF to the client with "Content-Type: application/pdf". - If PDFShift returns a non-2xx status, read its JSON error and return the same status code and message to the client. Never leak the API key. - Enable CORS so the frontend can call the function. 3. "Export as PDF" button Add an "Export as PDF" button to the main document view. When clicked, it: - Builds a complete, self-contained HTML string for the current document, with all CSS inlined so the PDF renders correctly. - POSTs { "source": html } to the generate-pdf function. - Receives the response as a Blob and triggers a browser download named "document.pdf". - Shows a loading state while generating and a friendly error message if it fails. PDFShift notes: - "source" can be raw HTML or a publicly accessible URL. - Keep "sandbox": true while testing (free, watermarked). Remove it for production. - Options you can add to the JSON body later: "landscape", "format" (e.g. "A4"), "margin", "header", "footer", "css", "filename", "webhook". ``` Lovable pre-fills the prompt but never sends it automatically. You review it and click send. Add your own project details first if you have any. ## Step-by-Step Guide ### 1. Get your PDFShift API key Create a PDFShift account and copy your API key. Do not paste it into your Lovable prompt. [Register for Free](/register/) ### 2. Ask Lovable to integrate PDFShift Open your Lovable project and enter the one-shot prompt from the Quick Start section above. Lovable will detect that PDFShift is an authenticated third-party API and prompt you to configure a secret. ### 3. Add your PDFShift API key as a secret In your Lovable project, open **Cloud → Secrets** and create a secret named: `PDFSHIFT_API_KEY` Set its value to your PDFShift API key. The key is then available to the server-side function without being exposed to visitors using your application. ### 4. Generate the HTML PDFShift accepts either a publicly accessible URL or raw HTML through the `source` parameter. For dynamically generated documents, sending raw HTML is usually best as it also lets you convert content that isn't public. Your app might build something like this: ```html

Invoice #1234

Customer: Acme Inc.

Total: $149.00

``` That HTML becomes the `source` passed to PDFShift. Inline your CSS so the document renders exactly as you expect. ### 5. Download the PDF Your Lovable frontend calls the `generate-pdf` function rather than PDFShift directly. The flow looks like this: ```text Lovable application | generate-pdf Edge Function | PDFShift API | PDF document | Browser download ``` This separation matters because the browser never receives your PDFShift API key. ## Customizing the generated PDF Once the basic integration works, ask Lovable to expose more PDFShift options. For example: ```text Update the PDFShift integration so generated PDFs use A4 pages and include our custom header and footer. ``` PDFShift supports a wide range of options you can wire into your app: - Headers and footers - Custom CSS - Page margins and formats - Landscape documents - Custom JavaScript - Delayed rendering - Saving generated files - Webhooks for async jobs Just tell Lovable which options you want the application to use. ## Generating a PDF from an existing page PDFShift can also convert a publicly accessible URL. Ask Lovable: ```text Change the PDF export feature so it sends the URL of the current document page to PDFShift instead of building the HTML manually. ``` PDFShift will load the page and convert it. For authenticated or private pages, sending raw HTML is usually preferable as PDFShift can't reach a page that requires a login without additional configuration. ## Related Resources - [Lovable Documentation](https://docs.lovable.dev): Learn about Lovable Cloud, secrets, and Edge Functions to power your integration. - [PDFShift API Doc](https://docs.pdfshift.io): Complete API reference with every parameter, option, and example. --- # PDFShift + Make Integration Source: https://pdfshift.io/agents/make/ Description: Generate PDFs automatically from your Make scenarios with PDFShift — convert raw HTML or a URL to PDF and route it anywhere Make connects. # PDFShift + Make Generate PDFs automatically from your Make scenarios with PDFShift. Convert raw HTML or an existing URL into a document, then route it anywhere Make connects. ## Step-by-Step Setup Guide PDFShift lets you generate PDF documents automatically from your Make scenarios, using Make's **HTTP** module to call the PDFShift API. ### 1. Get your PDFShift API key Create a PDFShift account and retrieve your API key from the [dashboard](https://app.pdfshift.io/). You'll store the key securely in Make rather than adding it directly to your scenario. ### 2. Add the HTTP module Create or open a scenario in Make, add a new module, and select **HTTP → Make a request**. Make's HTTP module can connect to APIs that don't yet have their own native Make integration. ### 3. Add your PDFShift API key For **Authentication type**, select `API key`, then create a new credential with: ``` Name: PDFShift Key: YOUR_PDFSHIFT_API_KEY API key placement: Header API key parameter name: X-API-Key ``` Make securely stores the API key in its keychain, so you don't need to manually add `X-API-Key` to the Headers section. ### 4. Configure the PDFShift request Configure the HTTP request as follows: ``` URL: https://api.pdfshift.io/v3/convert/pdf Method: POST Body content type: application/json ``` For the body input method, using a **data structure** is recommended because Make automatically escapes values such as HTML correctly. Add a field named `source` and map your HTML or URL into it. The resulting request is equivalent to: ```json { "source": "

Hello from Make!

" } ``` PDFShift will convert the HTML into a PDF. ### 5. Return a PDF URL For many Make workflows, working with a URL is convenient. Add another string field named `filename` to your request: ```json { "source": "

Hello from Make!

", "filename": "document.pdf" } ``` When `filename` is provided, PDFShift stores the generated file temporarily and returns JSON instead of the PDF itself. The response contains information similar to: ```json { "success": true, "url": "https://...", "filesize": 34980, "duration": 1237, "pdf_pages": 1 } ``` The generated file is stored by PDFShift for two days and then automatically deleted. ### 6. Parse the response Set **Parse response** to `Yes` and run the module once. Make will detect the PDFShift response fields, including: ``` url filesize duration pdf_pages ``` You can then map the `url` value into any following module. For example: ``` Order created ↓ Generate HTML ↓ PDFShift ↓ PDF URL ↓ Send email ``` ### 7. Download the PDF as a Make file If another module requires an actual file rather than a URL, add **HTTP → Download a file** and map the `url` returned by PDFShift into the URL field. Your scenario then becomes: ``` Generate HTML ↓ PDFShift ↓ PDF URL ↓ HTTP: Download a file ↓ PDF file ↓ Google Drive / Email / Dropbox / S3 / etc. ``` This is useful when you want to attach the generated PDF to an email or save it permanently. ## Generate personalized PDFs The `source` parameter can contain HTML built from data in previous Make modules. Instead of hard-coding values: ```html

Invoice #1234

Customer: Acme Inc.

Total: €149.00

``` Map values from previous modules into the HTML: ```html

Invoice #{{Invoice Number}}

Customer: {{Customer Name}}

Total: {{Total}}

``` Make replaces these values on every scenario execution before sending the HTML to PDFShift, giving you completely personalized PDFs. ### Generate a PDF from a website You don't have to generate HTML yourself. If a previous module provides a URL, map it directly into `source`: ```json { "source": "https://example.com/invoices/1234", "filename": "invoice-1234.pdf" } ``` PDFShift will load the webpage and convert it to PDF. For private pages, you can also use PDFShift's authentication, cookies, or custom HTTP headers options. ## Customize & Automate You can add any supported PDFShift option to the JSON request. For example: ```json { "source": "...", "filename": "invoice.pdf", "landscape": false, "use_print": true, "margin": "20px" } ``` PDFShift also supports options including: - Page size and margins - Headers and footers - Custom CSS - Custom JavaScript - Delayed rendering - Cookies and HTTP authentication - PDF protection - Sandbox mode and webhooks All of these values can be mapped dynamically from previous Make modules. ### Example: automatically generate invoices A typical Make scenario could look like: ``` Stripe Watch Payments ↓ Create HTML invoice ↓ HTTP PDFShift conversion ↓ HTTP Download PDF ↓ Google Drive Upload PDF ↓ Gmail Send invoice ``` Every new payment can automatically generate and send its own personalized PDF invoice. ### Example: generate reports from Airtable Another workflow could be: ``` Airtable Watch Records ↓ Generate HTML report ↓ PDFShift Generate PDF ↓ Download PDF ↓ Upload to storage ↓ Update Airtable record with PDF URL ``` The same principle works with Notion, Google Sheets, CRMs, databases, webhooks, or any other Make integration. ### PDF URLs are temporary When you use the `filename` parameter, the generated document is stored by PDFShift and its URL remains available for two days. To keep it permanently, add a module to download and save it to your own storage. If you don't want PDFShift to store the document at all, omit `filename` and PDFShift returns the PDF directly. ## Related Resources - [Make HTTP Module](https://apps.make.com/http) - Learn how Make's HTTP module connects to any API without a native integration. - [PDFShift API Doc](https://docs.pdfshift.io) - Complete API reference with every parameter, option, and example. --- # PDFShift MCP Server - PDFs for AI Agents Source: https://pdfshift.io/agents/mcp/ Description: Connect any Model Context Protocol client to the hosted PDFShift MCP server at https://api.pdfshift.io/mcp. Convert HTML or URLs to PDF, manage templates, and check credits from Claude, Cursor, and more. # PDFShift MCP Server The PDFShift MCP server exposes conversion, templates, credits, and logs to Claude, Cursor, and any Model Context Protocol client over a single hosted endpoint. ## Connecting your client All clients need the same three things: the endpoint URL, the HTTP transport, and your API key sent as a header. ``` Endpoint: https://api.pdfshift.io/mcp Transport: Streamable HTTP Auth header: X-API-Key: YOUR_PDFSHIFT_API_KEY ``` You can send the key as `X-API-Key`. Discovery (listing tools) works without a key; running a tool requires one. ### Claude Code Add the server in one command, then restart your session: ```bash claude mcp add --transport http pdfshift https://api.pdfshift.io/mcp \ --header "X-API-Key: YOUR_PDFSHIFT_API_KEY" ``` ### Cursor & other HTTP-native clients Add PDFShift to your MCP configuration (for Cursor, `~/.cursor/mcp.json`): ```json { "mcpServers": { "pdfshift": { "type": "http", "url": "https://api.pdfshift.io/mcp", "headers": { "X-API-Key": "YOUR_PDFSHIFT_API_KEY" } } } } ``` ### Claude Desktop & stdio-only clients For clients that only speak stdio, bridge to the remote server with `mcp-remote`: ```json { "mcpServers": { "pdfshift": { "command": "npx", "args": [ "mcp-remote", "https://api.pdfshift.io/mcp", "--header", "X-API-Key:YOUR_PDFSHIFT_API_KEY" ] } } } ``` Restart the client afterwards so it picks up the new server. ## Available tools The server exposes 11 tools. Your agent picks the right one automatically; you just describe what you want. - **convert**: Convert an HTML document or a URL to PDF, PNG, JPEG, or WEBP. Returns a temporary download URL. - **list_templates**: List all saved HTML templates for the account. - **get_template**: Get the raw HTML content of a template by its slug. - **create_template**: Create a new reusable HTML template. - **update_template**: Update the name and/or HTML content of an existing template. - **delete_template**: Delete a template by its slug. - **generate_from_template**: Render a saved template to HTML, PDF, PNG, JPEG, or WEBP with template variables. - **credits_usage**: Get current credit usage for the account (remaining, total, used). - **pricing**: List available PDFShift plans and their pricing. - **list_logs**: List recent conversion logs, with optional status and key filters. - **get_log**: Get a single conversion log by its request id. The `convert` and `generate_from_template` tools accept any documented PDFShift option (margins, headers & footers, watermarks, protection, cookies, and more) as extra parameters. ## Example prompts Once connected, just ask your agent in plain language. For example: ``` "Convert https://example.com to a PDF in landscape." "Turn this HTML into a PNG:

Hello

" "Create a template called invoice, then render it to PDF with customer 'Acme Inc.' and total '$149.00'." "How many PDFShift credits do I have left?" "Show my last 10 failed conversions." ``` Conversions return a temporary download URL, valid for about 2 days. Add `sandbox` while experimenting to generate free, watermarked documents that don't consume credits. ## Related Resources - [Model Context Protocol](https://modelcontextprotocol.io): Learn how MCP works and which clients support remote servers. - [PDFShift API Doc](https://docs.pdfshift.io): Complete API reference with every parameter, option, and example. --- # PDFShift + n8n Integration Source: https://pdfshift.io/agents/n8n/ Description: Generate PDFs and screenshots in your n8n workflows with the official n8n-nodes-pdfshift community node. # PDFShift + n8n Generate PDFs and screenshots inside your n8n workflows with the official, n8n-verified [PDFShift](https://n8n.io/integrations/pdfshift/) community node, no HTTP wiring required. ## Step-by-Step Setup Guide ### 1. Get your PDFShift API key Create a PDFShift account and grab your API key from the [dashboard](https://app.pdfshift.io/) under "API Keys". Keep it private! You'll paste it into n8n's credential store, which encrypts it for you. [Register for Free](/register/) ### 2. Install the verified node PDFShift is a [verified community node](https://docs.n8n.io/integrations/community-nodes/installation-and-management/install-verified-community-nodes/), so you can install it straight from the canvas without having to install any external npm package. An instance owner or admin needs to install it once, then it's available to everyone on the instance: 1. Open a workflow and select **+** (or press n) to open the nodes panel. 2. Search for **PDFShift**. It appears under **More from the community**. 3. Select it to review its details and supported actions. 4. Select **Install** to enable it across your instance. On n8n Cloud, instance owners enable verified community nodes from the Cloud admin panel; on self-hosted instances they're controlled with environment variables. ### 3. Add your PDFShift credentials Once the node is installed, connect it to your PDFShift account: 1. Add and use the **PDFShift** node in your workflow. 2. Under "Credential to connect with", click **Create New Credential**. 3. Paste the API key you copied from your dashboard, then test and save. ### 4. Choose an operation Drop the PDFShift node after any trigger, pick an operation, and provide your source (a URL or raw HTML). The node handles authentication and the API call for you. ## Available Operations The PDFShift node exposes 3 operations to cover the most common document tasks: - **Convert to PDF**: Turn any HTML source — a URL or raw HTML — into a polished PDF document. - **Generate a Screenshot**: Capture any website or HTML as an image, perfect for OG:images, thumbnails, and previews. - **View Credits Usage**: Check your remaining credits to manage your account and plan ahead. ## Available Response Types Depending on the options you set, the PDFShift node returns the result in one of two formats. When you provide a `filename` or an `s3_destination`, you get a JSON payload with a hosted URL and metadata: ```json { "data": { "success": true, "url": "https://s3.amazonaws.com/pdfshift/.../generated.pdf", "filesize": 259972, "duration": 1500, "executed": "2025-12-02T12:34:56.789Z", "pdf_pages": 5 }, "filename": "generated.pdf", "mimetype": "application/pdf" } ``` Otherwise, the raw file is returned as binary data you can pass straight to the next node: ```json { "binary": "... raw pdf data ..." } ``` ## Related Resources - [PDFShift on n8n.io](https://n8n.io/integrations/pdfshift/): The verified PDFShift node on the n8n integrations directory. - [n8n-nodes-pdfshift](https://www.npmjs.com/package/n8n-nodes-pdfshift): The official community node on npm, with installation and usage details. - [PDFShift API Doc](https://docs.pdfshift.io): Complete API reference with every parameter, option, and example. --- # PDFShift + Zapier Integration Source: https://pdfshift.io/agents/zapier/ Description: Generate PDFs automatically inside your Zapier workflows with PDFShift — convert HTML, dynamic Zap data, or webpages to PDF and route them anywhere. # PDFShift + Zapier Generate PDF documents automatically inside your Zapier workflows with PDFShift. Convert raw HTML, dynamic Zap data, or an existing webpage into a PDF and route it anywhere Zapier connects. ## Step-by-Step Setup Guide PDFShift accepts either raw HTML or a URL and converts it into a PDF. You'll wire it into Zapier using the **API by Zapier** app. ### 1. Get your PDFShift API key Create a PDFShift account and retrieve your API key from the [dashboard](https://app.pdfshift.io/). PDFShift authenticates requests using: ``` X-API-Key: YOUR_PDFSHIFT_API_KEY ``` Your API key should be kept private and never stored directly inside normal Zap fields. ### 2. Create an API by Zapier connection In Zapier, go to **Apps → Add connection** and search for `API by Zapier`. Choose: ``` Static Headers (API key) ``` For the authentication header, enter: ``` X-API-Key: YOUR_PDFSHIFT_API_KEY ``` For the domain filter, use: ``` api.pdfshift.io ``` You can optionally test the connection with: ``` https://api.pdfshift.io/v3/credits/usage ``` Once created, Zapier stores your PDFShift API key separately from your Zap and adds it automatically to PDFShift requests. ### 3. Add PDFShift to your Zap Create or open a Zap, add an **Action**, and select `API by Zapier`, then choose: ``` API by Zapier → API Request ``` Select the PDFShift connection you created previously. ### 4. Configure the PDF conversion Set: ``` Method: POST URL: https://api.pdfshift.io/v3/convert/pdf ``` Then provide a JSON body such as: ```json { "source": "

Hello from Zapier!

", "filename": "zapier-document" } ``` You don't need to add the `X-API-Key` header manually because Zapier adds it from your connection. When the request body is valid JSON, Zapier automatically sends it as JSON. ### 5. Test the PDF generation Run the Zapier action. Because the request contains `filename`, PDFShift returns JSON with a URL to the generated document instead of the PDF binary, and you can use that URL in subsequent Zap steps. Your workflow might look like: ``` New order ↓ Create HTML ↓ PDFShift: Generate PDF ↓ PDF URL ↓ Send Email ``` ### 6. Use data from previous Zap steps Your HTML can contain dynamic information from any previous Zap step. For example, if a Stripe payment triggered the Zap, your HTML could contain: ```html

Invoice #1234

Customer: Acme Inc.

Total: $149.00

``` Instead of hard-coding those values, use Zapier's field picker to insert values from previous steps: ``` Invoice # [Stripe → Invoice Number] Customer: [Stripe → Customer Name] Total: [Stripe → Amount] ``` Zapier inserts the values before sending the HTML to PDFShift, so every Zap execution generates its own personalized PDF. ### 7. Attach the generated PDF to an email Many Zapier actions that accept files can use a downloadable file URL. After PDFShift generates the document, map the returned `url` into the attachment field of your email action: ``` Stripe Payment received ↓ PDFShift Generate invoice ↓ Gmail Send email Attachment: PDFShift URL ``` Zapier will retrieve the document from the URL when the following action expects a file. ### 8. Save the PDF to cloud storage You can also send the generated URL to storage applications such as: ``` Google Drive Dropbox OneDrive Amazon S3 ``` A typical workflow is: ``` Form submitted ↓ Generate HTML ↓ PDFShift Generate PDF ↓ Google Drive: Upload PDF ↓ Gmail: Send confirmation ``` Saving the document elsewhere is particularly useful because PDFShift's temporary URL is automatically removed after two days. ## Generate a PDF from a webpage PDFShift can also convert an existing webpage. Instead of providing HTML, provide the page URL as `source`: ```json { "source": "https://example.com/report/1234", "filename": "customer-report" } ``` PDFShift loads the page and generates the PDF. This is useful when a previous Zap step provides a page URL, such as: ``` WordPress post Customer portal page Invoice URL Report URL Order summary ``` ## Customize the generated PDF You can add any supported PDFShift parameters to the JSON body. For example: ```json { "source": "...", "filename": "customer-report", "landscape": true, "use_print": true, "delay": 1000 } ``` PDFShift supports options including: - Page formats and margins - Landscape mode - Print CSS and custom CSS - Headers and footers - Custom JavaScript - Delayed rendering - Cookies, HTTP headers, and authentication - Sandbox conversions and webhooks Values can also come dynamically from previous Zap steps. ## Example Workflows ### Generate an invoice after a Stripe payment A Zap could look like: ``` Stripe New Payment ↓ Formatter / Template Create invoice HTML ↓ PDFShift Generate PDF ↓ Google Drive Store invoice ↓ Gmail Email invoice to customer ``` Every successful Stripe payment automatically generates its own PDF invoice. ### Turn form responses into PDF reports You could also create: ``` Typeform New Response ↓ OpenAI Generate report content ↓ PDFShift Generate PDF ↓ Google Drive Upload PDF ↓ Slack Notify team ``` This works with any Zapier trigger that provides data you can include in HTML. ### PDF URLs are temporary When `filename` is provided, PDFShift temporarily stores the generated document and returns a downloadable URL that is automatically deleted after two days. For permanent storage, use another Zapier action to copy the PDF into Google Drive, Dropbox, S3, or another service. If you don't want PDFShift to store the document at all, omit `filename` and PDFShift returns the PDF directly. ## Native PDFShift integration For an even simpler experience, PDFShift can be used as a native Zapier integration. Users would install **PDFShift**, connect their API key once, and then use actions such as: ``` PDFShift ├── Generate PDF ├── Generate PNG ├── Generate JPEG └── List Recent Conversions ``` The main action could expose friendly fields such as: - HTML or URL - Filename - Page format - Landscape - Margins - Use print CSS - Header - Footer - Delay - Sandbox Instead of configuring an API request, users could simply select: ``` PDFShift → Generate PDF ``` and map data from previous Zap steps into the fields. ## Related Resources - [API by Zapier](https://help.zapier.com/hc/en-us/sections/44386003111693-API): Learn how the API by Zapier app calls external services from your Zaps. - [PDFShift API Doc](https://docs.pdfshift.io): Complete API reference with every parameter, option, and example. --- # Data Processing Agreement Source: https://pdfshift.io/legal/dpa/ Description: PDFShift is GDPR compliant. Here is our Data Processing Agreement. This Data Processing Agreement (the "Agreement") is entered into between the Customer and PDFShift. This Agreement forms an integral part of the Contract for Services under the PDFShift Terms and Conditions (the "Principal Agreement"). This Agreement is entered into for the same term as the Principal Agreement governing the Services provided by PDFShift. Given the interdependence of this Agreement and the Principal Agreement, termination of the Principal Agreement, for any reason whatsoever, shall result in the termination of this Agreement. The term of this Agreement shall follow the term of the Principal Agreement. Terms not defined herein shall have the meaning as set forth in the Principal Agreement. # **WHEREAS** * **(a)** The Customer has entered into the Principal Agreement under which PDFShift undertakes to provide the Services. * **(b)** The provision of the Services involves the Processing of Company Personal Data by PDFShift on behalf of, and on the documented instructions of, the Customer. In this context, the Customer acts as a Data Controller (the «Controller») and PDFShift acts as a Data Processor (the «Processor»). * **(c)** The Parties seek to implement a data processing agreement that complies with the requirements of the current legal framework in relation to data processing, and in particular with the Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC (General Data Protection Regulation). * **(d)** As part of their contractual relations, each Party undertakes to comply with applicable Data Protection Laws, and the Parties wish to set out their respective rights and obligations in this Agreement. **IT IS AGREED AS FOLLOWS:** ## 1. Definitions and Interpretation * **1.1** - Unless otherwise defined herein, capitalized terms and expressions used in this Agreement shall have the following meaning: * **1.1.1** - "Company Personal Data" means any Personal Data Processed by a Processor on Controller's behalf pursuant to or in connection with the Principal Agreement; * **1.1.2** - "Data Protection Laws" means all privacy and data protection legislation applicable to Processor in its provision of the Services, including: (i) Regulation (EU) 2016/679 (the **"GDPR"**) ; (ii) the French Act No. 78-17 of 6 January 1978 on Information Technology, Data Files and Civil Liberties (as amended) ; (iii) any other applicable data protection laws directly binding on Processor in connection with the performance of the Services. * **1.1.3** - "EEA" means the European Economic Area; * **1.1.4** - "GDPR" means EU General Data Protection Regulation 2016/679; * **1.1.5** - "Services" means the document conversion services provided by PDFShift, as further described in Schedule 1. * **1.1.6** - "Subprocessor" means any third party appointed by or on behalf of Processor to process Company Personal Data on behalf of Controller in connection with the Agreement. * **1.2** - The terms, "Commission", "Controller", "Data Subject", "Member State", "Personal Data", "Personal Data Breach", "Processing" and "Supervisory Authority" shall have the same meaning as in the GDPR, and their cognate terms shall be construed accordingly. * **1.3** - This Agreement applies solely to Company Personal Data Processed by Processor on behalf of Controller in connection with the Services. This Agreement does not apply to Personal Data for which Processor acts as an independent Controller, including business contact data, account and user administration data, billing and payment data, fraud-prevention and security data, website analytics data, and service-usage or telemetry data, in each case to the extent Processed by Processor for its own legitimate business purposes and as described in Processor’s Privacy Policy. For the avoidance of doubt, any Personal Data Processed by Processor on Controller’s behalf remains Company Personal Data and is subject to this Agreement, regardless of the system or service through which it is Processed. ## 2. Processing of Company Personal Data * **2.1** - Processor shall comply with all applicable Data Protection Laws in the Processing of Company Personal Data. * **2.2** - Processor shall process Company Personal Data only on documented instructions from Controller, including with regard to transfers of Company Personal Data to a third country or an international organisation, unless required to do so by Union or Member State law to which Processor is subject. In such case, Processor shall inform Controller of that legal requirement before Processing, unless such law prohibits such information on important grounds of public interest. * **2.3** - Controller instructs Processor to process Company Personal Data to provide the Services and related technical support in accordance with the processing details set out in Annex B. * **2.4** - Controller shall, in its use of the Services and in its instructions to Processor, comply with applicable Data Protection Laws. Controller represents, warrants, and undertakes that: (i) it shall be solely responsible for the accuracy, quality and lawfulness of Company Personal Data; (ii) it has and will maintain a valid legal basis for the Processing of Company Personal Data and for its provision to Processor for collecting, using and providing such Company Personal Data to Processor and its Subprocessors, and for their Processing as contemplated by this Agreement and the Principal Agreement; (iii) it has provided all required notices and obtained all necessary consents and rights under applicable Data Protection Laws to enable such lawful Processing; (iv) its instructions to Processor comply with applicable Data Protection Laws; (v) it shall not submit through the Services any Personal Data that is irrelevant, excessive, or unnecessary in relation to the provision of the Services; (vi) it maintains a record of processing activities carried out under its responsibility in accordance with Article 30 GDPR. * **2.5** - Processor shall immediately inform Controller if, in Processor's opinion, an instruction from Controller infringes applicable Data Protection Laws. In such case, Processor may suspend the affected Processing until Controller confirms, modifies or withdraws the relevant instruction, without incurring any liability and without giving rise to any refund for the period of suspension. If Controller maintains an instruction that Processor reasonably considers to infringe applicable Data Protection Laws, Processor may terminate this Agreement and the affected Services immediately, without charge or penalty. * **2.6** - Where Controller submits through the Services any special categories of Personal Data within the meaning of Article 9 GDPR or Personal Data relating to criminal convictions and offences within the meaning of Article 10 GDPR, Controller shall ensure that it has an appropriate legal basis and complies with all additional requirements applicable to such Personal Data, and shall implement any prior information, consent and security measures required. Controller acknowledges that the Services are not specifically designed for the Processing of such categories of Personal Data and that Controller determines, at its sole responsibility, whether to include such Personal Data in content submitted to the Services. ## 3. Processor Personnel Processor shall ensure that any person authorised to process Company Personal Data has committed themselves to confidentiality or is under an appropriate statutory obligation of confidentiality, and that access to Company Personal Data is limited to persons who require such access for the provision of the Services. ## 4. Security * **4.1** - Taking into account the state of the art, the costs of implementation and the nature, scope, context and purposes of Processing as well as the risk of varying likelihood and severity for the rights and freedoms of natural persons, Processor shall in relation to the Company Personal Data implement appropriate technical and organizational measures to ensure a level of security appropriate to that risk, including, as appropriate, the measures referred to in Article 32(1) of the GDPR (including measures to ensure data confidentiality, backup, and the restoration of data availability in the event of a physical or technical incident). * **4.2** - In assessing the appropriate level of security, Processor shall take account in particular of the risks that are presented by Processing, in particular from a Personal Data Breach. * **4.3** - Processor’s technical and organizational security measures as of the effective date of this Agreement are set out in Annex C. Processor may update or modify these measures from time to time, provided that such updates or modifications do not result in a material degradation of the overall level of security provided for Company Personal Data. ## 5. Subprocessing * **5.1** - Authorized Subprocessors. Controller agrees that Processor may engage Subprocessors to process Company Personal Data on Controller’s behalf. The Subprocessors currently engaged by Processor and authorized by Controller are listed in Annex A. * **5.2** - Subprocessor Obligations. Processor shall: (i) enter into a written agreement with the Subprocessor imposing data protection terms that require the Subprocessor to protect the Company Personal Data to the standard required by Data Protection Laws and to provide the same sufficient guarantees regarding the implementation of appropriate technical and organizational measures in such manner that Processing meets the requirements of applicable Data Protection Laws; and (ii) remain responsible for its compliance with the obligations of this Agreement, and for any acts or omissions of the Subprocessor that cause Processor to breach any of its obligations under this Agreement. * **5.3** – Changes to Subprocessors. Processor shall notify Controller in writing at least 15 days before authorizing any new Subprocessor or replacing an existing Subprocessor. This information must clearly indicate which processing activities are concerned, the name and contact details of the Subprocessor. * **5.4** – Objection Mechanism and Resolution. Controller may object to the appointment or replacement of a Subprocessor solely on legitimate, documented and justifiable data-protection grounds by submitting its written objections to the Processor within fifteen (15) days from the date of receipt of Processor’s notification. If Controller does not submit a written objection within such fifteen (15) day period, Controller shall be irrevocably deemed to have authorized the appointment and use of the relevant Subprocessor. In the event of Controller’s continuing objections, the Parties shall meet in good faith and use their best efforts to discuss a resolution. Processor may choose to (i) not hire the Subprocessor or (ii) take the corrective action requested by Controller in connection with the objections before hiring the Subprocessor. If neither option is reasonably possible, and if Processor cannot for legitimate reasons hire another Subprocessor for the intended processing, either Party may terminate this Agreement and the Principal Agreement upon a thirty (30) days' written notice, without incurring any liability, fee, or penalty solely from such termination. ## 6. Data Subject Rights * **6.1** - Taking into account the nature of the Processing, Processor shall assist Controller by implementing appropriate technical and organisational measures, insofar as this is possible, for the fulfilment of Controller’s obligations, as reasonably understood by Controller, to respond to requests to exercise Data Subject rights under the Data Protection Laws. * **6.2** – If Processor receives a request directly from a Data Subject in respect of Company Personal Data, Processor shall: * **6.2.1** - promptly notify Controller by email sent to Controller’s registered contact email address; * **6.2.2** - not respond to the Data Subject’s request, except on the documented written instructions of Controller or as required by applicable Data Protection Laws to which the Processor is subject. In this latter case, Processor shall to the extent permitted by Data Protection Laws inform Controller of that legal requirement before responding to the request. ## 7. Personal Data Breach * **7.1** - Processor shall notify Controller without undue delay, and in any event within forty-eight (48) hours, upon Processor becoming aware of a Personal Data Breach affecting Company Personal Data, providing Controller with sufficient information to allow Controller to meet any obligations to report or inform Data Subjects of the Personal Data Breach under the Data Protection Laws. Where, and in so far as, it is not possible to provide all information at the same time, the information may be provided in phases without undue further delay. * **7.2** - Processor shall co-operate with Controller and take reasonable measures, determined by Processor in light of the circumstances, to investigate, mitigate and remediate any Personal Data Breach affecting Company Personal Data. Processor shall provide reasonable information and assistance to enable Controller to comply with its obligations under applicable Data Protection Laws in relation to such Personal Data Breach. ## 8. Compliance Assistance * **8.1** - Processor shall provide reasonable assistance to Controller in ensuring compliance with Controller’s obligations pursuant Articles 32 to 36 of the GPDR (including data protection impact assessments, and prior consultations with Supervisory Authorities or other competent data protection authorities), in each case solely in relation to Processing of Company Personal Data by, and taking into account the nature of the Processing and information available to, the Processor. Where such assistance requires material effort beyond the ordinary provision of the Services, Processor may charge Controller reasonable fees based on the time and resources required, provided that Processor informs Controller of such fees in advance. ## 9. Deletion or return of Company Personal Data * **9.1** - Subject to Section 9.2, upon termination or expiration of the Services involving Processing of Company Personal Data, the Controller shall notify the Processor, within 1 month, whether the Company Personal Data is to be returned or securely deleted. The Processor shall give effect to that instruction, and delete all remaining copies, within 30 days of its receipt. Failing such notification within that period, the Processor shall securely delete all Company Personal Data. . Where Company Personal Data has already been returned or deleted through the normal operation of the Services and is no longer retained by Processor as set out in Annex B, the return or deletion obligation shall be considered fulfilled. * **9.2** - Processor may retain Company Personal Data where required by applicable Data Protection Laws or other statutory legal obligations, provided that Processor continues to protect such Personal Data and limits Processing to the purposes required by such law. * **9.3** - Upon Controller's reasonable written request, Processor shall confirm completion of the deletion required under this Section. ## 10. Audit rights * **10.1** - Subject to this section 10, Processor shall make available to Controller, upon reasonable request, information and documentation necessary to demonstrate compliance with this Agreement and applicable Data Protection Laws. Controller shall first review any existing audit reports, certifications, or documentation provided by Processor before requesting an audit or inspection. Audit requests must be reasonable, proportionate, and limited to information necessary to verify such compliance. * **10.2** - The Controller may exercise its audit rights under this Agreement no more than once per calendar year, at its own expense, unless: **(a)** a Personal Data Breach affecting Company Personal Data caused by the Processor has occurred; **(b)** the Controller has a reasonable and documented basis to suspect a material breach of this Agreement or applicable Data Protection Laws by the Processor; or **(c)** such audit is explicitly required by applicable Data Protection Laws or a competent Supervisory Authority. * **10.3** – Any audit shall be conducted by an independent and impartial third-party auditor designated by Controller, provided that Processor may object to the identity of the selected auditor if such auditor is, in Processor’s reasonable opinion, a competitor of Processor or lacks appropriate professional qualifications. The auditor shall be bound by appropriate strict confidentiality obligations. * **10.4** - Any audits involving on-site inspections or the engagement of third-party auditors shall be subject to at least fifteen (15) days’ prior written notice to Processor. The Parties shall agree in advance on the scope, timing, duration, and operational framework of the audit. * **10.5** - All costs associated with the audit, including any costs of third-party auditors, shall be borne by the Controller. Notwithstanding the foregoing, if an audit reveals a material breach of this Agreement by the Processor or is conducted following a Personal Data Breach caused by the Processor, the Processor shall reimburse the Controller for the reasonable and documented costs of such audit. * **10.6** - All audits shall be conducted exclusively during Processor’s normal business hours, and in a manner that minimizes disruption to the Processor’s business operations. The audit shall not threaten or compromise in any way whatsoever: (a) the technical and organizational security measures implemented by Processor ; (b) the trade secrets, proprietary information, and business confidentiality of Processor ; (c) the security, privacy, and confidentiality of the data of Processor’s other customers ; or (d) the proper functioning, continuity, and organization of Processor's operations and business. * **10.7** - The draft audit report shall be submitted to Processor prior to finalization to allow Processor to make any written comments, which shall be attached to and incorporated into the final version of the audit report. Each audit report and its findings shall be treated as confidential information. ## 11. International Data Transfers * **11.1** - The Processor may transfer Company Personal Data outside the EEA where permitted by applicable Data Protection Laws, including where the recipient is located in a country subject to an adequacy decision, participates in an applicable adequacy framework, or where appropriate safeguards such as the European Commission Standard Contractual Clauses are implemented. * **11.2** - Processor shall ensure that any Subprocessor receiving Company Personal Data in a third country is subject to appropriate contractual and technical safeguards as required by applicable Data Protection Laws. * **11.3** - **Standard Contractual Clauses (SCCs)**
Where Processor transfers Company Personal Data to a Subprocessor located outside the EEA and such transfer is subject to Chapter V of the GDPR and cannot rely on an adequacy decision or another valid transfer mechanism, Processor shall ensure that the transfer is subject to appropriate safeguards in accordance with Article 46 GDPR

Where the European Commission Standard Contractual Clauses adopted pursuant to Commission Implementing Decision (EU) 2021/914 (the "EU SCCs") are used as the applicable transfer mechanism, Processor shall enter into the EU SCCs with the relevant Subprocessor using the module applicable to the relationship between the parties, including Module Three (Processor to Processor) where Processor transfers Company Personal Data to a Subprocessor.

Processor shall ensure that the information required by the EU SCCs, including the description of the transfer, categories of Personal Data, categories of Data Subjects, frequency and nature of the Processing, applicable retention periods, competent supervisory authority and technical and organisational measures, is completed or otherwise incorporated into the applicable agreement with the relevant Subprocessor.

Where required by applicable Data Protection Laws, Processor shall assess whether the laws and practices of the destination country affect the effectiveness of the safeguards provided by the EU SCCs and shall implement supplementary measures where reasonably necessary.

Controller hereby authorizes Processor to enter into Module Three EU SCCs with Subprocessors in the name and on behalf of Controller. * **11.4** - **United Kingdom Transfers**
Where Processor transfers Company Personal Data that is subject to the UK GDPR to a recipient outside the United Kingdom and the transfer cannot rely on UK adequacy regulations or another valid transfer mechanism, Processor shall implement an appropriate safeguard recognised under applicable UK Data Protection Laws.

Where the EU SCCs are relied upon for such transfer, the Parties shall apply the then-current

UK International Data Transfer Addendum to the EU SCCs issued by the UK Information Commissioner's Office, or any replacement mechanism approved under applicable UK Data Protection Laws.

Processor shall ensure that the information required by the applicable UK transfer mechanism is completed or incorporated by reference into the relevant agreement. * **11.5** - **Switzerland Transfers**
Where Processor transfers Company Personal Data that is subject to the Swiss Federal Act on Data Protection outside Switzerland and the transfer cannot rely on an adequacy determination or another valid transfer mechanism, Processor shall implement appropriate safeguards as required under Swiss Data Protection Laws.

Where the EU SCCs are used, they shall apply with any adaptations required under Swiss Data Protection Laws, including references to the Swiss Federal Data Protection and Information Commissioner where applicable. ## 12. General Terms * **12.1** - Confidentiality. Each Party must keep any information it receives about the other Party and its business in connection with this Agreement ("Confidential Information”) confidential and must not use or disclose that Confidential Information without the prior written consent of the other Party except to the extent that: 1) disclosure is required by law; 2) the relevant information is already in the public domain; 3) the relevant information was lawfully received from a third party without any obligation of confidentiality; 4) the relevant information was independently developed by the receiving Party without use of the other Party’s Confidential Information; or 5) disclosure is made to a Party’s employees, advisers, auditors or Subprocessors who are bound by confidentiality obligations, to the extent necessary for the performance of this Agreement. * **12.2** - Notices. All notices and communications given under this Agreement must be in writing and will be sent by email. Controller shall be notified by email sent to the address related to its use of the Service under the Principal Agreement. Processor shall be notified by email sent to the address: [support@pdfshift.io](mailto:support@pdfshift.io) * **12.3** – Liability. The liability caps and exclusions set out in the Principal Agreement shall apply to each Party’s liability arising out of or in connection with this Agreement and applicable Data Protection Laws. The Parties’ total aggregate liability under the Principal Agreement and this Agreement taken together shall not exceed the liability cap set out in the Principal Agreement, and such cap shall not apply separately or cumulatively to this Agreement. * **12.4** – Order of precedence. In the event of any conflict or inconsistency between this Agreement and the Principal Agreement, this Agreement shall prevail with respect to the subject matter of the Processing of Company Personal Data. ## 13. Governing Law and Jurisdiction * **13.1** - This Agreement shall be governed by and construed in accordance with French law. * **13.2** - Any dispute arising out of or in connection with this Agreement that cannot be resolved amicably shall be subject to the exclusive jurisdiction of the competent courts of Paris, France * **13.3** - Notwithstanding Sections 13.1 and 13.2, where the EU SCCs, UK International Data Transfer Addendum or another mandatory international data-transfer mechanism applies, any governing-law, supervisory-authority or jurisdiction provisions required by that mechanism shall prevail to the extent of any conflict with this Section 13.
 
## Schedule 1: Service Description **Services** means the receipt, loading, rendering and conversion of Controller-provided HTML, including optional header and footer content, URLs and related resources into PDF, JPEG, PNG or WEBP files, together with the transmission, optional temporary storage and delivery of generated files and any optional template or support functionality enabled by Controller. ## **Parties** ### **Customer (the “Controller”)** | Company Name | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | :---- | :---- | | Company Address | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | Registration Number | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | Represented By | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | Title | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | Email | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | Date | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | Signature | | ### **Provider (the “Processor”)** | Company Name | SASU PDFShift | | :---- | :---- | | Company Address | 128 rue la Boétie
75008 PARIS
FRANCE | | Registration Number | 843 913 807 | | Represented By | Cyril NICODEME | | Title | President | | Date | \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ | | Signature | |
 
## Annex A ### List of Processor Subprocessors The Subprocessors listed below may provide infrastructure hosting and storage, communications, customer support, monitoring, incident management, and other services necessary for the provision of the Services. --- **Name**: Amazon Web Services - [https://aws.amazon.com](https://aws.amazon.com) **Purpose**: Where Controller provides the filename parameter, PDFShift uses AWS S3 infrastructure located in Paris, France to store the generated output file for up to two (2) days, after which it is automatically deleted. Submitted HTML source, header and footer content are not stored in S3 as part of this functionality. **Location**: France **Appropriate safeguards implemented in case of transfer of personal data outside the EU**: Non applicable --- **Name**: OVH - [https://www.ovhcloud.com/](https://www.ovhcloud.com/) **Purpose**: Our servers are managed by OVH in France in two regions: Gravelines and Strasbourg. **Location**: France **Appropriate safeguards implemented in case of transfer of personal data outside the EU**: Non applicable --- **Name**: Sentry - [https://sentry.io](https://sentry.io) **Purpose**: PDFShift uses Sentry for application error monitoring and incident diagnostics. HTML source, header/footer content and generated documents are not intentionally transmitted to Sentry. Incidental Company Personal Data, such as IP addresses, request metadata or technical identifiers, may be processed where included in technical error information. Sentry is contractually prohibited from using such Company Personal Data for purposes other than providing its services to PDFShift. Where applicable, transfers are subject to an appropriate mechanism under Chapter V GDPR, including the EU Standard Contractual Clauses. **Location**: United-States **Appropriate safeguards implemented in case of transfer of personal data outside the EU**: EU-US. Data Privacy Framework / EU SCCs.
 
## Annex B **Details of processing of Company Personal Data** This Annex includes certain details of the Processing of Company Personal Data as required by Article 28(3) GDPR. #### Subject matter and duration of the Processing of Company Personal Data The subject matter of the Processing is the provision of the Services described in Schedule 1. Company Personal Data submitted for conversion is, by default, Processed only for the duration necessary to perform and return the requested conversion and is not intentionally retained after completion of the request. Where Controller provides the `filename` parameter, the generated output file may be retained for up to two (2) days following the conversion and is then automatically deleted. Any other Processing shall continue only for the duration necessary to provide the Services or as otherwise required by applicable law. #### Special categories of Personal Data Controller acknowledges that, depending solely on the content submitted through the Services, Company Personal Data may include special categories of Personal Data within the meaning of Article 9 GDPR or Personal Data relating to criminal convictions and offences within the meaning of Article 10 GDPR. Controller is responsible for ensuring that it has an appropriate legal basis for such Processing and complies with any additional requirements applicable to such categories of Personal Data. #### The nature and purpose of the Processing of Company Personal Data Processing Company Personal Data as necessary to receive, render, convert and return content submitted by Controller through the Services, including HTML-to-PDF and other supported document or image conversion operations, and to provide related technical support where requested by Controller. #### The types of Company Personal Data to be Processed Company Personal Data may include any Personal Data contained in HTML source, header or footer content, URLs, remotely loaded resources, or other content submitted by Controller to the Services for conversion, as well as Personal Data contained in the resulting PDF, JPEG, PNG or WEBP file. Such Personal Data is determined solely by Controller and may include identification data, contact information, financial information, employment information, health information, and any other Personal Data that Controller chooses to include in submitted content, including special categories of Personal Data within the meaning of Article 9 GDPR and Personal Data relating to criminal convictions and offences within the meaning of Article 10 GDPR. Processor processes such Company Personal Data solely for the purpose of performing the requested conversion and providing related Services. By default, submitted HTML source, header and footer content and other conversion inputs are processed transiently in volatile memory for the duration of the conversion request and are not intentionally written to persistent storage or retained by Processor following completion of the request. Where Controller provides the `filename` parameter, the generated output file may be stored using Amazon S3 infrastructure located in France for up to two (2) days and is then automatically deleted. The submitted HTML source, header and footer content are not stored as part of this optional storage functionality. #### The categories of Data Subject to whom the Company Personal Data relates Any individuals whose Personal Data may be included by Controller in HTML source, header or footer content, URLs, remotely loaded resources or other content submitted to the Services, or whose Personal Data appears in the generated output. Such Data Subjects may include, without limitation, Controller's customers, prospective customers, employees, contractors, users, suppliers or other individuals. Processor does not determine or control the categories of Data Subjects whose Personal Data may be included in such content. #### The obligations and rights of Controller The obligations and rights of Controller are set out in the Principal Agreement and this Agreement.
 
## Annex C **Technical and Organisational Security Measures** Processor maintains technical and organisational measures appropriate to the nature of the Processing and the risks presented by the Processing, including where applicable: #### 1 - Encryption in transit Communications between Controller and the Services are protected using encrypted HTTPS/TLS connections. #### 2 - Encryption at rest. Where Controller enables the optional storage functionality described in Annex B, generated output files stored during the applicable retention period (up to two (2) days) are encrypted at rest using Amazon S3 server-side encryption with AES-256 or another encryption mechanism providing an equivalent or greater level of protection. #### 3 - Access control Access to production systems and Company Personal Data is restricted to authorised personnel with a legitimate business need and is granted according to the principle of least privilege. Production access permissions are limited to the minimum level required for the relevant role and are revoked when no longer required. #### 4 - Authentication Processor implements appropriate authentication controls for administrative and production access, including multi-factor authentication where appropriate and technically supported. #### 5 - Confidentiality Personnel authorised to access Company Personal Data are subject to confidentiality obligations. #### 6 - Infrastructure and network security Processor uses network segmentation, firewalls and other technical controls designed to restrict unauthorised access to production systems. #### 7 - Monitoring and logging Processor maintains appropriate infrastructure, logging, security and application monitoring designed to detect operational and security incidents. #### 8 - Backup and recovery Processor maintains backups of systems and configuration data where appropriate and maintains procedures designed to restore availability following a significant technical or physical incident. Company Personal Data submitted for conversion, including HTML source and generated conversion output, is not intentionally included in Processor's ordinary backup systems. Generated files stored through the filename functionality remain subject to the two (2) day retention period described in Annex B. #### 9 - Storage By default, Company Personal Data submitted for conversion is processed transiently in volatile memory and is not intentionally persisted following completion of the conversion request. Where Controller provides the filename parameter, the generated output file may be stored using Amazon S3 infrastructure located in France for up to two (2) days and is then automatically deleted. Stored generated files are encrypted at rest and access is restricted through appropriate technical access controls. #### 10 - Data isolation Processor implements logical and/or technical controls designed to prevent unauthorised access between customer environments and Company Personal Data. #### 11 - Incident response Processor maintains processes for identifying, investigating, mitigating and responding to security incidents affecting Company Personal Data. #### 12 - Data minimisation and retention Processor limits retention of Company Personal Data to the period necessary to provide the Services or comply with applicable legal obligations. #### 13 - Subprocessors Processor evaluates Subprocessors that Process Company Personal Data and contractually requires such Subprocessors to implement appropriate data-protection and security measures. Processor may update these measures from time to time, provided that such updates do not materially decrease the overall level of protection provided to Company Personal Data. --- # General Data Protection Regulation(GDPR) compliance Source: https://pdfshift.io/legal/gdpr/ Description: Everything you need to know about PDFShift's GDPR compliance.

Everything you need to know about PDFShift's GDPR compliance.

PDFShift is committed to privacy, security, compliance and transparency. This approach includes supporting our customers’ compliance with EU data protection requirements, including those set out in the General Data Protection Regulation (“GDPR”), which becomes enforceable on May 25, 2018. ## What is GDPR? The General Data Protection Regulation (GDPR) (Regulation (EU) 2016/679) is a regulation by which the European Parliament, the Council of the European Union and the European Commission intend to strengthen and unify data protection for all individuals within the European Union (EU). ## To Whom Does the GDPR Apply? One way in which the personal data of an EU citizen could be collected when using PDFShift is when you build a database of contacts, their information, and business dealings with them (i.e. a CRM system). Not all customers will be "data subjects", as data subjects are only individuals. Some of your customers may be businesses or government organizations, which the GDPR does not apply to. ## Is PDFShift GDPR compliant? Yes, PDFShift is compliant with the GDPR. ## Information We Hold **Registration and Contact Information.** We collect information about you when you (a) register to use the Services and (b) otherwise provide contact information to us via email, mail, or through our Service. This information you provide may include your username, first and last name, email address. **Payment Information.** When you purchase the Services, we will also collect transaction information, which may include your company name, company VAT (when applicable), credit card information, billing and mailing address. We describe [how Payment Information are collected and processed](/legal/privacy/#payment-information) later in this document. **Technical, Usage and Location Information.** We automatically collect information on how you interact with the Service, such as the IP address from which you access the Service, date and time, referrer website and campaigns informations ("utm" fields). We may also collect location information, including location information automatically provided by your computer or device. We use cookies and similar technologies to collect some of this information. For more information, please see PDFShift's [Cookie Policy.](/legal/privacy/#cookies) **Third Party Platforms.** We may collect information when you interact with our service on third-party sites or platforms, such as analyticals sites. This may include information such as actions or the fact that you viewed or interacted with our content. **Other Information.**We may collect other information from you that is not specifically listed here. We may use any such information in accordance with this Privacy Policy or as otherwise permitted by you. ## Data security and data breaches We take data protection and security very seriously at PDFShift. We constantly monitor for security flaws and unauthorized access and we will take action immediately if something suspicious is been detected. In an unlikely case of a data breach, we willl notify all of our customers within 72 hours after the breach was detected. Some of the preventive measures we take include: * Encrypted HTTPS communication layers for all data transfers * Isolated data containers and data network * Multiple encrypted backups at database and disk level, stored for one week * Data retention for expired trial and cancelled users of 2 years ## Data subject rights All individual rights regarding GDPR will be enforced by our PDFShift team. If you want to exercise yur GDPR rights, you can reach out to us with your request at [support@pdfshift.io](/contact/). Those rights include: * **Right To Be Informed**: for the parties where we act as a controller, we inform our users what we do with their data. * **Right To Access**: we can show all data stored. * **Right To Object**: you can use the form above for any objection you or a user has about how PDFShift is processing your/their personal data. * **Right To Be Forgotten**: we can erase data we hold about any individual. * **Right To Data Portability**: we can export data held by an individual as a CSV on request. * **Right To Rectification**: a person's data can be updated either by API, from the user account or manually by us on request. ## Data Processing Agreements We act as a data processor for our customers (see "Information we hold") which means we need to provide a signed Data Processing Agreement on request. If you are a customer (paid user) of PDFShift and you need the DPA, please contact us via email and we'll send it to you ASAP. We also requested and signed DPAs from our sub-processors and made sure they are GDPR compliant. ## GDPR-ready Privacy and Cookie Policy We updated our [privacy policy and cookies policy](/legal/privacy/ "Read our privacy policy") to be GDPR compliant. ## GDPR FAQ * **How will you verify to customers that you are in compliance with the new regulation?**
_If you wish for formal verification, you can provide us with your Data Processing Agreement template, which we can returned filled and signed._ * **How is sensitive information stored, and do you have processes in place in the event of a data breach?**
_Sensitive information is stored securely, with limited access. We react to Data breaches immediately, by notifying affected parties._ * **For how long do you store customer data?**
_We store customers' data only for the time of using our services or until they request to delete their data._ * **Where is your customer data physically stored?**
_Data of our EU customers are stored in our FR (French) datacenters hosted by OVH._ * **Which of your teams will have access to customer personal information**
_We access customer's personal information only based on prior request by the customer or with the customer's approval. In most common cases, it is the customer support team, development team or marketing team._ * **How does your organization handle instances when customers request their data be removed from your system(s)?**
_When a customer requests deletion of their data, we proceed with the deletion immediately, with no further delay._ * **How you handle data protection requirements with any of your sub-processors?**
_We sign Data Processing Agreements with each of our sub-processors or subcontractors._ * **What third party organizations (sub-processors) do you work with that may also have access to the data we share with you?**
_See list of [PDFShift sub-processors and subcontractors](/legal/subprocessors/)._ * **What processing operations are done by the Data Processor (PDFShift)?**
_All actions necessary to provide adequate customer support and reliable service._ ## Additional security measures * **HTTPS Encryption**
_All PDFShift hosted accounts run over a secure connection using the HTTPS protocol. Hyper Text Transfer Protocol Secure (HTTPS) is the secure version of HTTP, the protocol over which data is sent between your browser and the website that you are connected to. It means all communication between your browser and PDFShift is encrypted, including your chat and email communication._ * **Secure credential storage**
_We follow latest best practices to store and protect user login credentials and passwords in the cloud._ * **API Security**
_PDFShift REST API is restricted to accredited users based API tokens._ ## Additional resources * [PDFShift Privacy Policy](/legal/privacy/) * [PDFShift Terms & Conditions](/legal/terms/) * [List of Sub-processors & Subcontractors](/legal/subprocessors/) ## Do you have questions? Contact us at [support@pdfshift.io](/contact/) --- # HIPAA compliance Source: https://pdfshift.io/legal/hipaa/ Description: PDFShift is fully HIPAA compliant We are committed to maintaining the highest standards of privacy and security to protect your sensitive information. Our platform complies with the Health Insurance Portability and Accountability Act (HIPAA), ensuring that your healthcare data is handled with the utmost care and confidentiality. ## HIPAA Compliance Assurance: * **Data Security**: We employ robust security measures to safeguard your protected health information (PHI) against unauthorized access, disclosure, or alteration. Our systems are designed to meet HIPAA's stringent security requirements to ensure the integrity and confidentiality of your data. * **Privacy Protection**: We adhere to HIPAA's Privacy Rule, which governs the use and disclosure of PHI. Our policies and procedures are designed to protect the privacy of your healthcare information and ensure compliance with HIPAA regulations. * **Business Associate Agreement (BAA)**: As part of our commitment to HIPAA compliance, we offer a Business Associate Agreement (BAA) to our customers. The BAA outlines the responsibilities of both parties concerning the handling and protection of PHI. You can find a link to our BAA below: ## Your Responsibilities: While we take every precaution to secure your data, HIPAA compliance is a shared responsibility. We urge you to familiarize yourself with your obligations under HIPAA and ensure that you adhere to all applicable laws and regulations when using our services. Mainly, in order to be fully HIPAA compliant, **you must add** the `is_hipaa` parameter to your request. This will ensure that your data is handled in accordance with HIPAA regulations. By adding the `is_hipaa` parameter, you ensure that we won't store the generated document in any way. ## Why the "is_hipaa" parameter is important: **By default, PDFShift does not store any generated document**, but you can request PDFShift to store your generated document by adding the following parameters: * `filename`: By setting this parameter, the document will be stored on our S3 storage and will be available for 2 days. * `webhook`: When using a webhook, we send you a POST request with an URL to our same S3 storage. In these case, PDFShift will store the generated document in our S3 storage for a 2 days. This behavior is not compliant with HIPAA. By setting the `is_hipaa` parameter to `true`, we will ensure that any document generated are **NOT** stored on our servers. `filename` and `webhook` parameter can still be made under the `is_hippa: true` parameter if you also provide a `s3_destination`. In that case, the document will be stored on **your S3 storage** and not on ours, making full compliance of our HIPAA policy. ## Contact Us: If you have any questions or concerns about our HIPAA compliance or the security of your data, please don't hesitate to contact us. Your privacy and security are our top priorities, and we are here to assist you in any way we can. --- # Imprint Source: https://pdfshift.io/legal/imprint/ Description: Legal information about the company operating PDFShift This website, [pdfshift.io](https://pdfshift.io), is operated by **S.A.S.U PDFShift**. ## Company Information: * **Company name**: S.A.S.U PDFShift * **Address**: 128 rue la Boétie, 75008 Paris, France * **Commercial registration**: 843 913 807 * **VAT identification**: FR14843913807 * **Managing director**: Cyril Nicodème ## Contact: For any question or inquiry, please reach out to us at [support@pdfshift.io](mailto:support@pdfshift.io). --- # Privacy Policy Source: https://pdfshift.io/legal/privacy/ Description: Our Privacy Policy is designed to help you understand what information we collect and how we use and share that information. SASU PDFShift, a company organized under the laws of France (hereafter, “pdfshift”, “pdfshift.io”, “we”, “our” and/or “us”) is a technology company that provides an online software-as-a-service (SaaS) platform (the “Service”) on its website at [https://pdfshift.io](https://pdfshift.io) containing instruction, tools, applications and other materials designed to assist individuals and companies throughout the world in converting HTML documents into PDF documents. SASU PDFShift markets and promotes the Service under the trademarks and trade names “pdfshift” and “pdfshift.io”. SASU PDFShift has always recognized data protection as an important topic for its stakeholders in the digital age and understands the responsibility that comes with the handling of personal data. This Privacy Policy describes the privacy practices of SASU PDFShift related to personal data collected, used, stored and otherwise processed in connection with the PDFShit.io Service. Please be aware that some supplemental country terms may be applicable as detailed at the end of this Privacy Policy. ## What this privacy policy covers This privacy policy applies to the personal data PDFShift processes as a data controller, i.e. as the party that determines what personal data to collect online (including in connection with mobile apps) or offline and to what end. The PDFShift Service is not intended for use by persons under the age of 18. If PDFShift has reason to believe that a user is under the age of 18, PDFShift will promptly block and/or terminate that user’s account and delete all personal information previously submitted by that user, with or without notice to the user or his or her parents or guardians. If PDFShift learns that it has collected personal data from a person under the age of 18, it will delete that information as quickly as possible. For your convenience, hyperlinks may be posted on the PDFShift websites or apps that link to other websites or apps that PDFShift does not own or control. This privacy policy is not applicable to them and PDFShift has no liability for the content of third-party websites nor the personal data they collect. ## What personal data is collected and processed by PDFShift Personal data means any information relating to an identified or identifiable person. An identifiable person is a person who can be identified, directly or indirectly, in particular by reference to an identification number or to one or more factors specific to the natural person. Depending on the purposes detailed below, personal data processed by PDFShift includes: * Personal and Business contact information such as first and last name, postal address, email address, telephone number(s) and job title; * Profile information such as user ID, login and password, profile picture, organization name, organization address, country, and, if applicable, VAT number; * Transaction information details related to purchases you make, including through PDFShift websites and apps, event registrations and billing data (such as credit card details, bank account information), via our third-praty service, Stripe); * Operation and usage data (IP Addresses, logs, etc.) on how you use PDFShift websites, apps and services, including data from cookies as described below. In any event, the personal data processed by PDFShift is limited to data necessary for the purposes described in this Privacy Policy. PDFShift will only process personal data from a parent or guardian of a minor child for purposes of obtaining their consent to collect the child’s personal data. If they do not provide that consent within a reasonable period of time, PDFShift will delete this personal data. ## Payment information When you make a purchase on the Service, any credit card information you provide as part of your Payment Information is collected and processed directly by our payment processor Stripe through their Stripe Checkout service. We never receive or store your full credit card information. Stripe commits to complying with the Payment Card Industry Data Security Standard (PCI-DSS) and using industry standard security. Stripe may use your Payment Information in accordance with their own Privacy Policy here: [https://stripe.com/us/checkout/legal](https://stripe.com/us/checkout/legal). ## Why your personal data is processed by PDFShift PDFShift will process your personal data for one or several of the following purposes; ### With your Consent * To communicate with you, including when you request information related to PDFShift products and services, and more generally to manage PDFShift marketing activities; * To ascertain your requirements and interests and provide you with the most suitable products and/or services; * To provide you with a personalized, interactive use of PDFShift websites and apps and allow you to access all their features; * To enable you to display certain of your personal information related to your profile while exchanging ideas and other information about PDFShift products and services with other users of PDFShift websites and apps. ### To provide you with PDFShift products or services * To enable you to * register for an event, seminar or webinar; * enter a contest; or * create a user profile. * To enable PDFShift to manage its business relationships with you (including sales opportunities, commercial offers, purchasing, contracts, orders, invoices, which may include conversational data triggered via chat functionalities on PDFShift websites and apps, contact forms, emails, and voice messaging data, delivery of PDFShift products, support or professional services); * To manage your training and/or certification on PDFShift products and services, which may include tracking your learning progress in order to make this information available to you. ### To comply with the following legitimate interests: PDFShift takes into consideration and balances any potential impact on you (both positive and negative) and your rights before processing your personal data for legitimate interest purposes. Unless PDFShift has your consent or is otherwise required or permitted to do so by law, PDFShift will not use your personal data in situations where the impact on you outweighs its legitimate interest in processing your personal data: * To improve your experience; * To remember your settings; * To provide you with information related to marketing activities for similar goods and products if you are already using PDFShift products and services; * To enable PDFShift to manage its business relationships when you are acting on behalf of a PDFShift prospect or customer (including sales opportunities, commercial offers, purchasing, contracts, orders, invoices, which may include conversational data triggered via chat functionalities on PDFShift websites or apps, contact forms, emails, and voice messaging data, deliver of PDFShift products, support or professional services); * To create anonymous data for analytics and for compliance, fraud prevention and safety. ### To comply with law * To manage PDFShift legal obligations related to applicable export laws, trade sanctions, and embargoes issued, by the European Union and its member states, and of the United States of America and other countries, if any. This may include (i) conducting automated checks of any user registration data identified in this Privacy Policy and other information you provide about your identity against applicable sanctioned-party lists; (ii) regular repetition of such checks whenever a sanctioned-party list is updated or when you update your information; (iii) blocking of access to PDFShift services and systems in case of a potential match; and (iv) contacting you to confirm your identity in case of a potential match; * To keep your financial data with a third party payment provider. ## How long your personal data is retained PDFShift does not store your personal data for more time than necessary and only as long as required to fulfill the purposes set out above. Retention periods may vary depending on the data categories and the processing activities. To determine the appropriate retention period for personal data, PDFShift considers the amount, nature, and sensitivity of the personal data, the potential risk of harm from unauthorized use or disclosure of your personal information, the purposes for which PDFShift processes your personal data and whether PDFShift can achieve those purposes through other means, and the applicable legal requirements: * where PDFShift is required to comply with a legal obligation, the retention period will be determined according to the applicable law; * where you gave your consent, until you withdraw it; * where PDFShift has entered into an agreement with you or your employer, as long as the agreement is into force plus the applicable local statutes of limitations; * where PDFShift has a legitimate interest in using your personal data, for a limited period of time appropriate to ensure a fair processing of your personal data or until you object to PDFShift’s use of your personal data. Where your personal data is required to assert or defend against legal claims, PDFShift will retain your personal data until the end of the relevant retention period or until the claims in question have been settled. ## With whom PDFShift shares your personal data **PDFShift does not rent or sell information** but may share your necessary personal data for certain business purposes with the following categories of organizations: * Within the PDFShift group: PDFShift may need to share your personal data with its affiliated companies and websites, for example to provide you with support services. * Event or marketing sponsors: PDFShift may share your personal data with trusted sponsors such as PDFShift resellers with which PDFShift organizes events or marketing promotions. When you register for an event, PDFShift may share your name, company, and email address with other participants and sponsors of the same event for the purpose of communication about the event and the exchange of ideas. * PDFShift business partners: PDFShift may share your personal data with PDFShift business partners such as resellers assigned to you to provide you or your employer with appropriate offers or services. * Third parties acting on PDFShift behalf: PDFShift may share your personal data with third party vendors, consultants and other service providers that PDFShift employs to perform tasks on its behalf (such as hosting services by a third-party or payment services to enable you to purchase from PDFShift products or services) or to protect PDFShift’s legal interests (such as in the event of a sale of assets to a third company, or a change of control or a total or partial liquidation of PDFShift). * Law enforcement: Under certain circumstances, PDFShift may also disclose your personal data if required by law or if PDFShift believes in good faith that such disclosure is reasonably necessary to comply with legal process (for example, a warrant, a subpoena, or other court order) or protect the rights, property, or personal safety of PDFShift, PDFShift’s customers, or the public. ## International data transfers When accessing a PDFShift website or app, please note that through your continued use of it, if you are located in a different country than the PDFShift website or app, you consent to the transfer of your personal data to a country outside of your own. PDFShift may transfer your personal data from Europe (or a country that is considered as offering an adequate level of protection as adopted by the European Commission on the basis of Article 45 of the General Data Protection Regulation 2016/679 (GDPR)) to another country. This can for example happen when PDFShift provides you with training, support services or cloud offerings. PDFShift continually monitors the circumstances surrounding any transfer in order to ensure that these transfers maintain, in practice, a level of protection that is essentially equivalent to the one guaranteed by the GDPR and relies on the Standard Contractual Clauses issued by the European Commission in the absence of an adequacy designation. ## What are your rights Depending on the applicable data protection laws, you may have some or all of the following rights with regard to your personal data: * access your personal data; * request the rectification, completion, update or erasure of your personal data; * restrict processing; * obtain a copy of your personal data stored by PDFShift; * object to specific processing of your personal data if that processing is based on legitimate interests; and * data portability. If the processing of your personal data is based on your consent, you have a right to withdraw that consent at any time. If you have an account, you can exercise your rights by logging on to your account. Otherwise, you may exercise your rights by submitting your request here: [support@pdfshift.io](mailto:support@pdfshift.io). Parents can exercise these rights if allowed by applicable law on behalf of their minor children by this same method. Depending on the scope of the request, and if permitted under applicable law, PDFShift may charge a reasonable fee to cover costs incurred in connection with such request. PDFShift may deny access to your personal data in limited circumstances in accordance with applicable laws and regulations or if PDFShift’s legal grounds override your legitimate interest to privacy. ### Data security PDFShift maintains appropriate technical and organizational measures to protect your personal data from loss, misuse and unauthorized access, disclosure, alteration and destruction during transmission and once in its possession. However, while PDFShift strives to protect your personal data, in light of the inevitable risks linked to the Internet, PDFShift cannot guarantee full protection against any leak. It is important for you to exercise caution to prevent unauthorized access to your personal data. You are responsible for the confidentiality of your password and information appearing on your account. Consequently, you must ensure that you log out of your session in the event of shared use of a computer. ### Limitations on Use by Minors Our Service is generally intended for use by individuals who are at least eighteen (18) years of age or such older age as may be required by applicable laws in the jurisdiction in which an individual utilizes the Service. If PDFShift has reason to believe that a user is under the age of 18, PDFShift will promptly block and/or terminate that user’s account and delete all personal information previously submitted by that user, with or without notice to the user or his or her parents or guardians. If PDFShift learns that it has collected personal data from a person under the age of 18, it will delete that information as quickly as possible. Furthermore, if you are under eighteen (18) years of age, then you (or your parent or legal guardian) may at any time request that we remove content or information about you that is posted on the Service. Please submit any such request ("Request for Removal of Minor Information") to either of the following: * By mail: SASU PDFShift, 128 rue la Boetie, 75008 Paris, France, with a subject line of "Removal of Minor Information”. If you send by mail, please send by registered mail or overnight courier service to allow for confirmation of mailing, delivery and tracking. * By email: [contact@pdfshift.io](mailto:contact@pdfshift.io), with a subject line of "Removal of Minor Information" For each Request for Removal of Minor Information, please state "Removal of Minor Information" in the email or letter subject line, and clearly state the following in the body of the request: * The nature of your request * The identity of the content or information to be removed * The location of the content or information on the Service (e.g. by providing the URL) * That the request is related to the "Removal of Minor Information" * Your name, street address, city, state, postal code and email address, and whether you prefer to receive a response to your request by mail or email. We will not accept any Request for Removal of Minor Information via telephone, facsimile, or text message. PDFShift™ is not responsible for failing to comply with any Request for Removal of Minor Information that is incomplete, incorrectly labeled or incorrectly sent. Please note that we are not required to erase or otherwise eliminate, or enable erasure or elimination of such content or information in certain circumstances, such as, for example, when an international, federal, state, or local law, rule or regulation requires PDFShift™ to maintain the content or information; when the content or information is stored on or posted to the Site by a third party other than you (including any content or information posted by you that was stored, republished or reposted by the third party); when PDFShift™ anonymizes the content or information, so that you cannot be individually identified; when you do not follow the aforementioned instructions for requesting the removal of the content or information; and when you have received compensation or other consideration for providing the content or information. The foregoing is a description of PDFShift™'s voluntary practices concerning the collection of personal information through the Service from certain minors and is not intended to be an admission that PDFShift™ is subject to the U.S. Children's Online Privacy Protection Act, the U.S. Federal Trade Commission's Children's Online Privacy Protection Rule(s), or any similar international, European Union, federal, state, or local laws, rules, or regulations. ### Cookies In order to improve your browsing experience on PDFShift.io websites and apps, PDFShift.io uses cookies or other similar technologies that may process your personal data. Depending on the website or app, PDFShift uses different types of cookies: * Strictly necessary cookies are always used, are essential for you to properly browse the PDFShift website or app and cannot be switched off. For example, they allow you to save your personalization settings (choice of language, presentation of a service, saving your shopping cart). * Functional cookies are used in order to improve the performance of the PDFShift websites and apps, to provide you with optimized features and a more personal experience by collecting information when you visit a PDFShift website or app. Some of them, that are solely performance cookies, collect aggregated information that are therefore anonymous. * Advertising cookies are implemented by PDFShift or third parties, in order to build a profile of your interests, to provide you with personalized and targeted content. They do not store personal information directly, but are based on uniquely identifying your browser and internet device. The following third parties serve cookies through PDFShift for analytics and other purposes NAME | PURPOSE --- | --- [Amazon Web Services](https://aws.amazon.com) | We use Amazon S3 to store the generated PDF when the "filename" parameter is provided (automatically deleted after 2 days). We also use Cloudwatch to monitor the health of our servers (with no sensitive data provided) [OVH](https://ovhcloud.com) | Our servers are managed by OVH in France in various regions. [Stripe](https://stripe.com) | Our payment gateway. This allows us to accept credit card payments securely. The sole purpose is to increase security regarding the handle of sensible payments informations such as your credit cards details. [Plausible](https://plausible.io) | We use this service to understand general usage, traffic sources and to measure campaign success. We choose Plausible for its focus on privacy (no cookies or trackers are installed on our visitor’s computer) [Customer.io](https://customer.io) | We use Customer.io to send you emails related to your account and general messages like newsletters. [Amplitude](https://amplitude.com) | We track a few key metrics on our service and Amplitude help us visualize them. All the data are anonymized. [Sentry](https://sentry.io) | We use sentry to track any issues that occurs in order to better debug them and improve the service faster. [Profitwell](https://profitwell.com) | We use Profitwell to have an overview of our revenues Here is a list of the cookies we use in PDFShift: VENDOR | COOKIE NAME | PURPOSE --- | --- | --- **PDFShift** | \_t | Session tracking cookie. **Stripe** | \_\_lc.visitor\_id.XXXXXXX, \_\_stripe\_mid,
\_\_stripe\_orig\_props, stripe.csrf,
cid, lang, machine\_identifier,
merchant, mp\_{token}\_mixpanel,
private\_machine\_identifier, lc\_window\_state | We rely on Stripe to handle payments made on PDFShift. You can remove or reject functional and advertising cookies. However, if you do not accept certain cookies, some functionalities and features of the sites and apps may not function properly and you may experience some inconvenience in their use. ## Do Not Track signals Your Web browser may have a “do not track” setting which, when enabled, causes your browser to send a do not track HTTP header file or “signal” to each site you visit. At present, the Service does not respond to this type of signal. ## Contact - Dispute resolution PDFShift is committed to ensuring the privacy of personal data: You can contact the PDFShift Data Protection Officer at [support@pdfshift.io](mailto:support@pdfshift.io) if: * you have any questions about this Privacy Policy; * you encounter any issue when having access to your personal data or related to your rights as described above; * you believe that PDFShift is not complying with the GDPR or the applicable local data protection laws; * you have a reason to believe that the security of your personal data has been compromised or misused. When you want to report a claim by lodging a complaint to the PDFShift Global Data Protection Officer, you will need to send a letter to the address mentioned at the end of this Policy or submit your claim using the form referenced above containing (in addition to the information required by the form and depending on the type of rights) the name or reference of the concerned processing and any additional information as reasonably requested by the PDFShift Global Data Protection Officer. If your usual place of residence is in European Union, Lichtenstein, Norway or Iceland, you have a right to file a complaint with your local data protection authority. ## Date of entry into force of the Privacy statement and changes to it This Privacy Policy may be updated from time to time in accordance with PDFShift requirements and circumstances, or where required by applicable laws and regulations so please check back periodically for updates. If major changes occur to this Privacy Policy, PDFShift may inform you via email or by posting a notice on PDFShift websites or apps. Last modification: February 28, 2022 ## Additional privacy notices for certain geographies Depending on where you are living, some additional terms as detailed below may be applicable to you. Where the Privacy Policy refers to “personal data”, it shall be interpreted, as applicable, to mean “personal information” as defined by the applicable data protection law. ## USA - Privacy notice for California residents ### California “Shine the Light” Act The California “Shine the Light” Act, section 1798.83 of the California Civil Code, requires a business with whom a California resident has an established business relationship to disclose to such residents, upon their request: (1) the types of personal data the business shares with third parties for the third party’s marketing purposes, and (2) the identities of the third parties with whom the business has shared this information during the immediately preceding calendar year. If you are a California resident, and would like to make such a request, please submit your request via e-mail to [support@pdfshift.io](mailto:support@pdfshift.io). ### California Consumer Privacy Act of 2018 Under the California Consumer Privacy Act of 2018 (“CCPA”) applicable to California residents, you are entitled to benefit from the following additional provisions regarding your personal information. ### What are the Categories of Personal Information Collected The categories of personal information PDFShift collects about California residents are identifiers (e.g. name, address, email,, and transactional information), and internet or other electronic network activity information (e.g. usage information, IP address, cookie information, and customer feedback). ### What Are Your Rights And Choices You have the right to request that PDFShift discloses to you certain information about PDFShift’s collection and use of your personal information over the past 12 months. That information includes: * The categories of personal information PDFShift collected about you; * The categories of sources from which PDFShift collected your personal information; * PDFShift’ business or commercial purpose for collecting, or sharing your personal information; * The categories of third parties with whom PDFShift shares your personal information, if any; * A copy of your personal information and a list of recipients, as applicable. To exercise the rights described in the Privacy Policy you may either contact PDFShift at [support@pdfshift.io](mailto:support@pdfshift.io) or contacting: ``` SASU PDFShift 128 rue la Boétie 75008 Paris France ``` Only you, or a person, or a business entity registered with the California Secretary of State to conduct business in California that you authorize to act on your behalf, may make a request related to your Personal Information. The request must provide enough information to allow PDFShift to 1) reasonably verify you are the person about whom PDFShift collected Personal Information or an authorized representative and 2) enable PDFShift to properly understand, evaluate, and respond to it. Making such a request does not require you to create an account with us. PDFShift will only use personal information provided in a request to verify the requestor's identity or authority to make the request. ## Non-Discrimination PDFShift will not discriminate against you (for example by denying you products or services, charging you a higher price or giving you a different level or quality of service) for exercising any of your CCPA rights. ## Contact Information If you have any questions or comments about this Privacy Policy, the ways in which PDFShift collects and processes your personal information, your privacy choices and rights under California law or wish to exercise your privacy rights, please do not hesitate to contact PDFShift at: ``` SASU PDFShift 128 rue la Boétie 75008 Paris France ``` Or by contacting the PDFShift Data Protection Officer at [support@pdfshift.io](mailto:support@pdfshift.io). --- # PDFShift's subprocessors Source: https://pdfshift.io/legal/subprocessors/ Description: PDFShift is relying on other third party services to provide a full experience. These are the list of subprocessors we work with.

We use the following 3rd party services to improve, understand troubleshoot, report bugs and provide support for you:

* **Amazon Web Services** Where Controller provides the filename parameter, PDFShift uses AWS S3 infrastructure located in Paris, France to store the generated output file for up to two (2) days, after which it is automatically deleted. Submitted HTML source, header and footer content are not stored in S3 as part of this functionality. * **OVH** Our servers are managed by OVH in France in two regions: Gravelines and Strasbourg. * **Sentry** PDFShift uses Sentry for application error monitoring and incident diagnostics. HTML source, header/footer content and generated documents are not intentionally transmitted to Sentry. Incidental Company Personal Data, such as IP addresses, request metadata or technical identifiers, may be processed where included in technical error information. Sentry is contractually prohibited from using such Company Personal Data for purposes other than providing its services to PDFShift. Where applicable, transfers are subject to an appropriate mechanism under Chapter V GDPR, including the EU Standard Contractual Clauses. **REMEMBER**: We use these services only to provide you with a fantastic product that gives you easy access to things you like and to improve our general look and feel. If you choose to block, global opt out from some of the services that we use to deliver our product, you may run into errors, product bugs and other failures that influence your general experience and quality of our service. We are ok with that and respect your choice. --- # Terms of Service Source: https://pdfshift.io/legal/terms/ Description: We've crafted our Terms of Service to ensure a secure and mutually beneficial experience for all users. BY ACCESSING, USING THE PDFSHIFT.IO™ APPLICATION AND/OR SIGNIFYING YOUR ACCEPTANCE TO THESE TERMS OF SERVICE, YOU AGREE TO THE TERMS OF THIS ELECTRONIC AGREEMENT ON YOUR OWN BEHALF AND ON BEHALF OF THE PERSON LISTED IN THE ORDER, REGISTRATION, SIGN UP OR SIMILAR FORM (“ORDER FORM”). YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY TO BIND THE ENTITY THAT YOU WORK FOR AND YOURSELF TO THESE TERMS OF SERVICE. IF YOU DO NOT AGREE TO THESE TERMS OF SERVICE AND DO NOT HAVE THE AUTHORITY AS PROVIDED HEREIN, DO NOT ACCESS, OR USE THE SERVICE (AS DEFINED IN THESE TERMS OF SERVICE). SASU PDFShift, a company organized under the laws of France (hereafter, “PDFShift”, “we”, “our” and/or “us”) is a technology company that provides an online software-as-a-service (SaaS) platform (the “Service”) containing instruction, tools, applications and other materials designed to assist individuals and companies throughout the world in converting HTML documents to PDF documents via its API located at [https://api.pdfshift.io](https://api.pdfshift.io). PDFShift markets and promotes the Service under the trademarks and trade names “pdfshift” and “pdfshift.io”. We will provide you (“you” or “User”) with use of the Service, including a browser interface and data transmission, access and storage. Your registration for, or use of, the Service shall be deemed to be your agreement to abide by this Agreement including any materials available on the pdfshift.io website at [https://pdfshift.io](https://pdfshift.io) incorporated by reference herein, including but not limited to our privacy policy. For reference, a Definitions section is included at the end of this Agreement. NOTICE OF ARBITRATION AGREEMENT AND CLASS ACTION WAIVER: THIS AGREEMENT INCLUDES A BINDING ARBITRATION CLAUSE AND A CLASS ACTION WAIVER, SET FORTH BELOW, WHICH AFFECT YOUR RIGHTS ABOUT RESOLVING ANY DISPUTE WITH US. PLEASE READ IT CAREFULLY. THE SERVICE IS INTENDED TO BE USED FOR LEGAL ACTIVITIES ONLY. PLEASE READ SECTION 3A OF THESE TERMS AND CONDITIONS CAREFULLY ABOUT YOUR LIABILITY IN THE EVENT YOU USE THE SERVICE, OR CAUSE IT TO BE USED, IN VIOLATION OF APPLICABLE LAW OR THESE TERMS AND CONDITIONS. **Note to Social Media Users.** When accessing and using services from this Website or our other social media pages, and when posting information to or otherwise communicating via those pages or your own social media page, your activities online are subject to the Terms of Service, User’s Agreement or other terms and conditions imposed by that social media website, which may contain terms and conditions different from these Terms of Service. Please see the following pages for further details: * https://twitter.com/tos (Twitter’s Terms of Service); and * [http://www.google.com/intl/en/policies/terms](http://www.google.com/intl/en/policies/terms) (Google’s Terms of Service). ## 1. Privacy and Security: Disclosure Our Privacy Policy, which may be viewed at [https://pdfshift.io/legal/privacy/](/legal/privacy/), describes how we use and share Personal Information (as such term is defined in the Privacy Policy), including any payment account information you may provide to us either for purposes of creating an Account, submitting an inquiry or to receive further information, updates and promotions about or related to the Service. It is your responsibility to comply with all applicable privacy and data protection laws and to ensure that you have provided all required notices and obtained all necessary consents from your Users and clients (including with respect to third parties’ access), and that your clients have agreed to the collection of their Customer Data and the access of their Customer Data by you, by us, and, where applicable, other third parties. Any sample documentation that is provided by PDFShift.io for obtaining consent is for illustration only, and you alone (and not PDFShift.io) are responsible to ensure that such documentation is adequate and enforceable to obtain requisite consent (including with respect to clients who are under 18 years of age, consent from their parents or legal guardians). In the event that we receive a subpoena or other legal or court order compelling the disclosure of any of your clients’ Customer Data or any of your data, unless ordered to not do so by a court of competent jurisdiction, or unless our legal counsel advises us that prior notification is not required or in violation of applicable law, we will notify you of the subpoena or other legal or court order prior to disclosing the Customer Data or other data. We will make commercially reasonable efforts to maintain the Service in a manner that includes appropriate administrative, technical, and physical security measures designed to protect the confidentiality, availability, and integrity of Customer Data that is in our possession, as required by applicable law. PDFShift.io reserves the right to modify its privacy policy in its reasonable discretion from time to time. Note that because the Service is a hosted, online application, PDFShift.io occasionally may need to notify all users of the Service of important announcements regarding the operation of the Service. ## 2. License Grant & Restrictions PDFShift.io hereby grants you a non-exclusive, non-transferable, worldwide right to use the Service, solely for your own internal business purposes, subject to the terms and conditions of this Agreement. All rights not expressly granted to you are reserved by PDFShift.io and its licensors. You shall not (i) license, sublicense, sell, resell, transfer, assign, distribute or otherwise commercially exploit or make available to any third party the Service or the Content in any way; (ii) modify or make derivative works based upon the Service or the Content; (iii) create Internet "links" to the Service or "frame" or "mirror" any Content on any other server or wireless or Internet-based device; or (iv) reverse engineer or access the Service in order to (a) build a competitive product or service, (b) build a product using similar ideas, features, functions or graphics of the Service, or (c) copy any ideas, features, functions or graphics of the Service. You may use the Service only for your internal business purposes and shall not: (i) send spam or otherwise duplicative or unsolicited messages in violation of applicable laws; (ii) send or store infringing, obscene, threatening, libelous, or otherwise unlawful or tortuous material, including material harmful to children or violative of third party privacy rights; (iii) send or store material containing software viruses, worms, Trojan horses or other harmful computer code, files, scripts, agents or programs; (iv) interfere with or disrupt the integrity or performance of the Service or the data contained therein; or (v) attempt to gain unauthorized access to the Service or its related systems or networks. ## 3. Your Responsibilities; Prohibited Conduct and Content You are responsible for all activity occurring under your User accounts and shall abide by all applicable local, state, national, European Union and foreign laws, treaties and regulations in connection with your use of the Service, including those related to data privacy, international communications and the transmission of technical or personal data. You shall: (i) notify PDFShift.io immediately of any unauthorized use of any password or account or any other known or suspected breach of security; (ii) report to PDFShift.io immediately and use reasonable efforts to stop immediately any copying or distribution of Content that is known or suspected by you or your Users; and (iii) not impersonate another PDFShift.io user or provide false identity information to gain access to or use the Service. You will not violate any applicable law, contract, intellectual property or other third-party right or commit a tort, and you are solely responsible for your conduct while accessing or using the Service. Without limiting the foregoing, you will not: * Engage in any harassing, threatening, intimidating, predatory or stalking conduct; * Attempt to circumvent any content-filtering techniques we employ or attempt to access any feature or area of the Service that you are not authorized to access; or * Use the Service for any illegal or unauthorized purpose, or engage in, encourage or promote any activity that violates these Terms of Service. * You may only upload or otherwise share Customer Data that you have all necessary rights to disclose. You may not upload, store or share any Customer Data that: * Is unlawful, libelous, defamatory, obscene, pornographic, indecent, lewd, suggestive, harassing, threatening, invasive of privacy or publicity rights, abusive, inflammatory or fraudulent; * Would constitute, encourage or provide instructions for a criminal offense, violate the rights of any party or otherwise create liability or violate any local, state, national or international law; * May infringe any patent, trademark, trade secret, copyright or other intellectual or proprietary right of any party; or * Contains any private or personal information of a third party, a client without such third party’s consent. In addition, although we have no obligation to screen, edit or monitor Customer Data, we may delete or remove or suspend the use of Customer Data at any time and for any reason. By accessing or using the Service, you consent to the processing, transfer and storage of information about you and your Users in and to the United States and other countries outside the European Union, where you may not have the same rights and protections as you do under local law. ### 3A. HTML document conversion to PDF PDFShift.io is a platform for converting HTML documents to PDF documents via its API. PDFShift.io does not monitor, review, or edit HTML documents using the Service. By using the Service, you represent and warrant that any activities you may engage in using the software and other tools available as part of the Service will comply with all applicable laws, rules and regulations of the European Union, all member nations of the European Union, and (if you are based outside the European Union), the country, province and/or state or municipality in which you reside or conduct your business. Neither PDFShift nor any of its affiliates will provide you with legal advice, and you must consult your own legal counsel prior to using the Service or engaging in any particular documents conversion. You agree that you are solely liable for any activities that violate, are alleged to violate or that PDFShift has reason to believe violate applicable law or this Section 3A, and you hereby indemnify PDFShift, its owners, shareholders, directors, managers, employees, agents and affiliates, and hold each of them harmless from and against any activity you conduct or engage in that violates or is alleged to violate or that PDFShift has reason to believe violate applicable law or this Section 3A. Without limiting the generality of the foregoing, you agree that all documents you convert and link via the Service are bona fide documents you either own or control, and that you will not use the Service in any way to facilitate unlawful or illegal activity, including but not limited to “denial of service” attacks on websites or multiple registrations for a product or service that is not authorized by the vendor or provider of such product or service. In the event it is brought to PDFShift’s attention that any User has engaged in documents conversion activity in violation of this Section or applicable law, PDFShift may, in addition to any other remedies PDFShift may have at law or in equity, seek indemnification or redress against you (including but not limited to recovery of PDFShift’s legal fees and expenses), take down any User Content and other data and information you have posted on PDFShift.io or the Service, terminate your membership rights for the Service without notice to you, and forever ban you, your owners, employees, agents and affiliates, from using the Service. PDFShift’s policy is to cooperate with all law enforcement agencies and other third parties (including but not limited to social media platforms) in investigating improper or illegal activity involving the software and other tools available as part of the Service, and such cooperation may involve the disclosure of Customer Data, User Content and all other information about you in PDFShift’s possession. You hereby irrevocably and unconditionally release PDFShift, its shareholders, directors, managers, employees, agents and affiliates from any liability to you caused by or resulting from such cooperation and disclosure. Without limiting the generality of the foregoing, responses to inquiries posted on PDFShift.io’s “live chat service” or submitted to PDFShift.io via e-mail are not to be construed or interpreted as guaranties, warranties or assurance that your activities using the Service comply with all applicable laws, rules and regulations that may apply to those activities. ## 4. Account Information and Data; Compliance with HIPAA PDFShift.io does not own any data, information or material that you submit to the Service in the course of using the Service ("Customer Data"). You, not PDFShift.io, shall have sole responsibility for the accuracy, quality, integrity, legality, reliability, appropriateness, and intellectual property ownership or right to use of all Customer Data, and PDFShift.io shall not be responsible or liable for the deletion, correction, destruction, damage, loss or failure to store any Customer Data. In the event this Agreement is terminated (other than by reason of your breach), PDFShift.io will make available to you a file of the Customer Data within 30 days of termination if you so request at the time of termination. PDFShift.io reserves the right to withhold, remove and/or discard Customer Data without notice for any breach, including, without limitation, your non-payment. Upon termination for cause, your right to access or use Customer Data immediately ceases, and PDFShift.io shall have no obligation to maintain or forward any Customer Data. If you are a provider of medical services within the United States of America or are otherwise a “covered entity” for purposes of the U.S. Health Insurance Portability and Accountability Act of 1996, Public Law 104-191, and all corresponding regulations as the same may be amended from time to time (collectively, “HIPAA”), then any and all “Personal Health Information” or “Electronic Personal Health Information” you submit to PDFShift.io in the course of using the Service shall be subject to PDFShift.io’s Business Associate and Qualified Service Organization Agreement (“BAA”), a copy of which can be found here: Download our BAA. By accessing or using the Service and/or signifying your acceptance to these Terms of Service, you agree to the terms of the BAA without further act or instrument. If you have questions about the BAA or PDFShift.io’s compliance with HIPAA, please send an email to [support@pdfshift.io](mailto:support@pdfshift.io). ## 5. Intellectual Property Ownership PDFShift.io alone (and its licensors, where applicable) shall own all right, title and interest, including all related Intellectual Property Rights to PDFShift.io’s Technology, Content and the Service and any suggestions, ideas, enhancement requests, feedback, recommendations or other information provided by you or any other party relating to the Service. This Agreement is not a sale and does not convey to you any rights of ownership in or related to the Service, PDFShift.io’s Technology or the Intellectual Property Rights owned by PDFShift.io. The “PDFShift” name, the PDFShift.io logo, and the product names associated with the Service are trademarks of PDFShift or third parties, and no right or license is granted to use them. ## 6. Third Party Interactions During use of the Service, you may enter into correspondence with, purchase goods and/or services from, or participate in promotions of advertisers or sponsors showing their goods and/or services through the Service. Any such activity, and any terms, conditions, warranties or representations associated with such activity, is solely between you and the applicable third-party. PDFShift.io and its licensors shall have no liability, obligation or responsibility for any such correspondence, purchase or promotion between you and any such third-party. PDFShift.io does not endorse any sites on the Internet that are linked through the Service. PDFShift.io provides these links to you only as a matter of convenience, and in no event shall PDFShift.io or its licensors be responsible for any content, products, or other materials on or available from such sites. PDFShift.io provides the Service to you pursuant to the terms and conditions of this Agreement. You recognize, however, that certain third-party providers of ancillary software, hardware or services may require your agreement to additional or different licenses or other terms prior to your use of or access to such software, hardware or services. ## 7. Charges and Payment of Fees The PDFShift.io service is a Software-as-a-Service application that is offered in both free and paid versions. The free version offers only some of the features and benefits of the PDFShift.io service; by subscribing to the free version you agree to be bound by all provisions of these Terms of Service except those relating to payment and billing. To obtain the full benefit of the PDFShift.io service, you must subscribe to the paid version of the PDFShift.io application, which is offered as either a monthly or an annual subscription. If you choose a monthly account for the Service, subscription fees will be paid monthly in advance on the first day of each calendar month by charging your Stripe® account. If you choose an annual account for the Service, subscription fees will be paid annually in advance on the anniversary of your account opening date by charging your Stripe® account. If you no longer wish to subscribe to the PDFShift.io service, you must terminate your free or paid account in the manner provided in Section 10 below; any such termination will be effective on the next renewal date, and PDFShift.io will have no obligation to refund any fees previously paid by you. You shall pay all fees or charges to your account in accordance with the Order Form which outlines fees, charges, and billing terms that are in effect at the time a fee or charge is due and payable. You must provide PDFShift.io with valid Stripe® information as a condition to signing up for a paid account, including but not limited all information necessary for PDFShift.io to debit your account automatically when payments are due. PDFShift.io reserves the right to modify its fees and charges for future billing periods and to introduce new charges at any time, upon at least 30 days prior notice to you, which notice may be provided by e-mail. ## 8. Billing and Renewal PDFShift.io charges and collects in advance for use of the paid version of the Service. PDFShift.io will automatically renew and bill your Stripe® account or issue an invoice to you every month or year, depending upon the subscription you select. Fee increases will be effective the billing period immediately following notice to you. Fees for other services will be charged on an as-quoted basis. PDFShift.io’s fees are exclusive of all taxes, levies, or duties imposed by taxing authorities, and you shall be responsible for payment of all such taxes, levies, or duties, excluding only European Union, national, state and local taxes based solely on PDFShift’s income. You agree to provide PDFShift.io with complete and accurate Stripe® information, billing and contact information, including but not limited all information necessary for PDFShift.io to debit your account automatically when payments are due. This information includes your e-mail address. You agree to update this information within 30 days of any change to it. If the contact information you have provided is false or fraudulent, PDFShift.io reserves the right to terminate your access to the Service in addition to any other legal remedies. Unless PDFShift.io in its discretion determines otherwise: (i) entities with headquarters and a majority of users resident in the European Union will be billed in U.S. dollars and subject to European Union payment terms and pricing schemes; all other entities will be billed in U.S. dollars and be subject to either European Union or non-European Union payment terms and pricing schemes at the discretion of PDFShift.io. If you believe your bill is incorrect, you must contact us in writing within 60 days of the invoice date of the invoice containing the amount in question to be eligible to receive an adjustment or credit. ## 9. Non-Payment and Suspension In addition to any other rights granted to PDFShift.io herein, PDFShift.io reserves the right to suspend or terminate this Agreement and your access to the Service if your account becomes delinquent (falls into arrears), or if you initiate a chargeback or other dispute on Stripe® not authorized in advance by PDFShift.io. Delinquent invoices (accounts in arrears) are subject to interest of 1.0% per month (compounding) on any outstanding balance, or the maximum permitted by law, whichever is less, plus all expenses of collection. You will continue to be charged for subscriptions during any period of suspension. If you or PDFShift.io initiates termination of this Agreement, you will be obligated to pay the balance due on your account computed in accordance with the Charges and Payment of Fees section above. You agree that PDFShift.io may charge such unpaid fees to you or otherwise bill you for such unpaid fees. PDFShift.io reserves the right to impose a reconnection fee in the event you are suspended and thereafter request access to the Service. You agree and acknowledge that PDFShift.io has no obligation to retain Customer Data and that such Customer Data may be irretrievably deleted if your account is 30 days or more delinquent. ## 10. Term of Subscription; Termination upon Expiration/Reduction in Number of Subscriptions This Agreement commences on the Effective Date in the Order Form, or the date of your registration to use the Service if earlier. Your Stripe® account will be charged automatically on the first day of each calendar month (for monthly subscriptions) or on the anniversary of your account upgrading date (for annual subscriptions until you cancel your subscription on the PDFShift.io website, which must be done not later than the next renewal date (for monthly or annual subscriptions) to avoid further charges. In the event this Agreement is terminated (other than by reason of your breach), PDFShift.io will make available to you a file of the Customer Data within 30 days of termination if you so request at the time of termination. You agree and acknowledge that PDFShift.io has no obligation to retain the Customer Data, and may delete such Customer Data, more than 30 days after termination, unless required to retain the Customer Data by applicable law. ## 11. Termination for Cause Any breach of your payment obligations or unauthorized use of the PDFShift.io’s Technology or Service will be deemed a material breach of this Agreement. PDFShift.io, in its sole discretion, may block and/or terminate your account or use of the Service if you breach or otherwise fail to comply with this Agreement. In addition, PDFShift.io may terminate a free account at any time in its sole discretion. You agree and acknowledge that PDFShift.io has no obligation to retain the Customer Data, and may delete such Customer Data, if you have materially breached this Agreement, including but not limited to failure to pay outstanding fees, and such breach has not been cured within 30 days of notice of such breach. ## 12. Intellectual Property Rights Service Content, Software and Trademarks: You acknowledge and agree that the Service may contain images and descriptions of documents conversion and processing, and other content (collectively, "Service Content") that is protected by copyright, patent, trademark, trade secret or other proprietary rights and laws. Except as expressly authorized by PDFShift.io, you agree not to modify, copy, frame, scrape, rent, lease, loan, sell, distribute or create derivative works based on the Service or the Service Content, in whole or in part, except that the foregoing does not apply to your own User Content (as defined below) that you legally upload to the Service. In connection with your use of the Service you shall not engage in or use any data mining, robots, scraping or similar data gathering or extraction methods. Any use of the Service or the Service Content other than as specifically authorized herein is strictly prohibited. The technology underlying the Service (including the Software distributed in connection therewith) is the property of PDFShift.io, our affiliates and our partners. You agree not to copy, modify, create a derivative work of, reverse engineer, reverse assemble or otherwise attempt to discover any source code, sell, assign, sublicense, or otherwise transfer any right in the Service (including the Software). Any rights not expressly granted herein are reserved by PDFShift. The PDFShift.io name and logos are trademarks and service marks of PDFShift.io (collectively the "PDFShift.io Trademarks"). Other company, product, and service names and logos used and displayed via the Service may be trademarks or service marks of their respective owners who may or may not endorse or be affiliated with or connected to PDFShift.io. Nothing in these Terms or the Service should be construed as granting, by implication, estoppel, or otherwise, any license or right to use any of PDFShift.io Trademarks displayed on the Service, without our prior written permission in each instance. All goodwill generated from the use of PDFShift.io Trademarks will inure to our exclusive benefit. Third Party Material: Under no circumstances will PDFShift.io be liable in any way for any items or content posted by third parties or at the direction of users, including, but not limited to, for any errors or omissions in any content, or for any loss or damage of any kind incurred as a result of the use of any items or content posted, sold, purchased or otherwise transmitted via the Service. You acknowledge that PDFShift.io does not pre-screen items or content, but that PDFShift.io and its designees shall have the right (but not the obligation) in their sole discretion to refuse or remove any items or content that is available via the Service. Without limiting the foregoing, PDFShift.io and its designees shall have the right to remove any item or content that violates these Terms or is deemed by PDFShift.io, in its sole discretion, to be otherwise objectionable. You agree that you must evaluate, and bear all risks associated with, the use of any items or content, including any reliance on the safety, condition, accuracy, completeness, or usefulness of such items or content. User Content Posted on the Site: You are solely responsible for the content you post or transmit on or through the Service (collectively, "User Content"). You will not post any content that you did not create or that you do not own all right, title and interest in and to, including, without limitation, all copyright and rights of publicity contained therein. By posting or otherwise transmitting any User Content you hereby grant and will grant to PDFShift.io and its affiliated companies a nonexclusive, worldwide, royalty free, fully paid up, transferable, sublicensable, perpetual, irrevocable license to copy, display, transmit, perform, distribute, store, modify, make derivative works of and otherwise use in any manner your User Content in connection with the operation of the Service or any other products or services of PDFShift.io, or the promotion, advertising or marketing thereof, in any form, medium or technology now known or later developed (including without limitation publishing your User Content on the Internet or on Third Party Services such as Facebook, sharing it with blogs, etc., and allowing other users to share listings that include your User Content). You acknowledge and agree that any questions, comments, suggestions, ideas, feedback or other information about the Site or the Service ("Submissions"), provided by you to PDFShift.io are non-confidential and PDFShift.io shall be entitled to the unrestricted use and dissemination of these Submissions for any purpose, commercial or otherwise, without acknowledgment or compensation to you. You acknowledge and agree that PDFShift.io may preserve content and may also disclose content if required to do so by law or in the good faith belief that such preservation or disclosure is reasonably necessary to: (a) comply with legal process, applicable laws or government requests; (b) enforce these Terms; (c) respond to claims that any content violates the rights of third parties; or (d) protect the rights, property, or personal safety of PDFShift.io, its users and the public. You understand that the technical processing and transmission of the Service, including your content, may involve (a) transmissions over various networks; and (b) changes to conform and adapt to technical requirements of connecting networks or devices. Infringement Policy: PDFShift.io respects the intellectual property of others, and we ask our users to do the same. PDFShift.io will promptly process and investigate notices of alleged infringement and will take appropriate actions under the copyright laws of the European Union and its member states and other applicable intellectual property laws with respect to any alleged or actual infringement. If you believe that your work has been copied in a way that constitutes copyright infringement, or that your intellectual property rights have been otherwise violated, please provide our Copyright Agent with the following information: * an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright or other intellectual property interest; * a description of the copyrighted work or other intellectual property that you claim has been infringed; * a description of where the material that you claim is infringing is located on the Service, with enough detail that we may find it on the Service; * your address, telephone number, and email address; * a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright or intellectual property owner, its agent, or the law; * a statement by you, made under penalty of perjury, that the above information in your Notice is accurate and that you are the copyright or intellectual property owner or authorized to act on the copyright or intellectual property owner’s behalf. If you believe that your User Content that was removed (or to which access was disabled) is not infringing, or that you have the authorization from the copyright owner, the copyright owner's agent, or pursuant to the law, to post and use the content in your User Content, you may send a written counter-notice containing the following information to the Copyright Agent: * your physical or electronic signature; * identification of the content that has been removed or to which access has been disabled and the location at which the content appeared before it was removed or disabled; * a statement that you have a good faith belief that the content was removed or disabled as a result of mistake or a misidentification of the content; and * your name, address, telephone number, and email address, a statement that you consent to the jurisdiction of the federal court located within the State of New York and a statement that you will accept service of process from the person who provided notification of the alleged infringement. If a counter-notice is received by the Copyright Agent, PDFShift.io will send a copy of the counter-notice to the original complaining party informing that person that it may replace the removed content or cease disabling it in ten (10) business days. Unless the copyright owner files an action seeking a court order against the content provider, member or user, the removed content may be replaced, or access to it restored, in ten (10) to fourteen (14) business days or more after receipt of the counter-notice, at our sole discretion. The above information should be sent to PDFShift.io's Copyright Agent for Notice of claims of copyright or other intellectual property infringement by email to the following address: [support@pdfshift.io](mailto:support@pdfshift.io) (Subject line: "Copyright Infringement"). You may also contact us by mail at: ``` SASU PDFShift 128 rue la Boétie 75008 Paris, France ``` ## 13. Representations & Warranties Each party represents and warrants that it has the legal power and authority to enter into this Agreement. PDFShift.io represents and warrants that it will provide the Service in a manner consistent with general industry standards reasonably applicable to the provision thereof and that the Service will perform substantially in accordance with the online PDFShift.io help documentation under normal use and circumstances. You represent and warrant that you have not falsely identified yourself nor provided any false information to gain access to the Service and that your contact information is correct. ## 14. Indemnification You shall indemnify and hold PDFShift.io, its licensors and each such party's parent organizations, subsidiaries, affiliates, officers, directors, employees, attorneys and agents harmless from and against any and all claims, costs, damages, losses, liabilities and expenses (including attorneys' fees and costs) arising out of or in connection with: (i) a claim alleging that use of the Customer Data infringes the rights of, or has caused harm to, a third party; (ii) a claim, which if true, would constitute a violation by you of your representations and warranties; or (iii) a claim arising from the breach by you or your Users of this Agreement, provided in any such case that PDFShift.io(a) gives written notice of the claim promptly to you; (b) gives you sole control of the defense and settlement of the claim (provided that you may not settle or defend any claim unless you unconditionally release PDFShift.io of all liability and such settlement does not affect PDFShift.io’s business or Service); (c) provides to you all available information and assistance; and (d) has not compromised or settled such claim. ## 15. Disclaimer of Warranties PDFSHIFT.IO AND ITS LICENSORS MAKE NO REPRESENTATION, WARRANTY, OR GUARANTY AS TO THE RELIABILITY, TIMELINESS, QUALITY, SUITABILITY, TRUTH, AVAILABILITY, ACCURACY OR COMPLETENESS OF THE SERVICE OR ANY CONTENT. PDFSHIFT.IO AND ITS LICENSORS DO NOT REPRESENT OR WARRANT THAT (A) THE USE OF THE SERVICE WILL BE SECURE, TIMELY, UNINTERRUPTED OR ERROR-FREE OR OPERATE IN COMBINATION WITH ANY OTHER HARDWARE, SOFTWARE, SYSTEM OR DATA, (B) THE SERVICE WILL MEET YOUR REQUIREMENTS OR EXPECTATIONS, (C) ANY STORED DATA WILL BE ACCURATE OR RELIABLE, (D) THE QUALITY OF ANY PRODUCTS, SERVICES, INFORMATION, OR OTHER MATERIAL PURCHASED OR OBTAINED BY YOU THROUGH THE SERVICE WILL MEET YOUR REQUIREMENTS OR EXPECTATIONS, (E) ERRORS OR DEFECTS WILL BE CORRECTED, OR (F) THE SERVICE OR THE SERVER(S) THAT MAKE THE SERVICE AVAILABLE ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. THE SERVICE AND ALL CONTENT IS PROVIDED TO YOU STRICTLY ON AN "AS IS" BASIS. ALL CONDITIONS, REPRESENTATIONS AND WARRANTIES, WHETHER EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT OF THIRD PARTY RIGHTS, ARE HEREBY DISCLAIMED TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW BY PDFSHIFT.IO AND ITS LICENSORS. ## 16. Internet Delays PDFSHIFT.IO’S SERVICES MAY BE SUBJECT TO LIMITATIONS, DELAYS, AND OTHER PROBLEMS INHERENT IN THE USE OF THE INTERNET AND ELECTRONIC COMMUNICATIONS. PDFSHIFT.IO IS NOT RESPONSIBLE FOR ANY DELAYS, DELIVERY FAILURES, OR OTHER DAMAGE RESULTING FROM SUCH PROBLEMS. ## 17. Limitation of Liability IN NO EVENT SHALL EITHER PARTY'S AGGREGATE LIABILITY EXCEED THE AMOUNTS ACTUALLY PAID BY AND/OR DUE FROM YOU IN THE TWELVE (12) MONTH PERIOD IMMEDIATELY PRECEDING THE EVENT GIVING RISE TO SUCH CLAIM. IN NO EVENT SHALL EITHER PARTY AND/OR ITS LICENSORS BE LIABLE TO ANYONE FOR ANY INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY, INCIDENTAL, CONSEQUENTIAL OR OTHER DAMAGES OF ANY TYPE OR KIND (INCLUDING LOSS OF DATA, REVENUE, PROFITS, USE OR OTHER ECONOMIC ADVANTAGE) ARISING OUT OF, OR IN ANY WAY CONNECTED WITH THIS SERVICE, INCLUDING BUT NOT LIMITED TO THE USE OR INABILITY TO USE THE SERVICE, OR FOR ANY CONTENT OBTAINED FROM OR THROUGH THE SERVICE, ANY INTERRUPTION, INACCURACY, ERROR OR OMISSION, REGARDLESS OF CAUSE IN THE CONTENT, EVEN IF THE PARTY FROM WHICH DAMAGES ARE BEING SOUGHT OR SUCH PARTY'S LICENSORS HAVE BEEN PREVIOUSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ## 18. Additional Rights Certain jurisdictions do not allow the exclusion of implied warranties or limitation of liability for incidental, consequential or certain other types of damages, so the exclusions set forth above may not apply to you. ## 19. Disclaimer of Warranties as to Use Outside of the European Union PDFShift.io is a service based in France. We make no representation that any aspect of the Service is appropriate or available for use outside of the European Union or may be used for persons who are not citizens of the European Union or residents of other countries. Those who access the Service from other locations are responsible for compliance with applicable local laws. The Service is subject to applicable export laws and restrictions. ## 20. Releases You agree not to hold PDFShift.io liable for the Content, actions, or inactions of you or other Users of the Service or of other third parties. As a condition of access to the Service, you release PDFShift.io (and its officers, directors, shareholders, agents, subsidiaries, and employees) from claims, demands, losses, liabilities and damages (actual and consequential) of every kind and nature, known and unknown, arising out of or in any way connected with any dispute you have or claim to have with one or more other users of the Service or with other third parties, including whether or not PDFShift.io becomes involved in any resolution or attempted resolution of the dispute. If you are a resident of the State of California, U.S.A., you waive California Civil Code Section 1542, which says: “A general release does not extend to claims which the creditor does not know or suspect to exist in his favor at the time of executing the release, which if known by him must have materially affected his settlement with the debtor.” If you are a resident of another jurisdiction, you waive any comparable statute or doctrine. ## 21. Notices PDFShift.io may give notice by means of a general notice on the Service, electronic mail to your e-mail address on record in PDFShift.io’s account information. Such notice shall be deemed to have been given upon the expiration of 12 hours after sending. You may give notice to PDFShift.io (such notice shall be deemed given when received by PDFShift.io) at any time by any of the following: through the website at [https://pdfshift.io](https://pdfshift.io); by electronic mail to [contact@pdfshift.io](mailto:contact@pdfshift.io); or by letter delivered by nationally recognized overnight delivery service or first class postage prepaid mail to PDFShift.io at the following address: SASU PDFShift, 128 rue la Boétie, 75008 PARIS, France, in either case, addressed to the attention of: Managing Director. ## 22. Modification to Terms PDFShift.io reserves the right to modify the terms and conditions of these Terms of Services or its policies relating to the Service at any time, effective upon posting of an updated version of these Terms of Service on the Service and notification to you as provided in Section 20. Continued use of the Service after any such changes shall constitute your consent to such changes. ## 23. Assignment; Change in Control This Agreement may not be assigned by you without the prior written approval of PDFShift.io but may be assigned without your consent by PDFShift.io to (i) a parent or subsidiary, (ii) an acquirer of assets, or (iii) a successor by merger. Any purported assignment in violation of this section shall be void. Any actual or proposed change in control of you that results or would result in a direct competitor of PDFShift.io directly or indirectly owning or controlling 50% or more of you shall entitle PDFShift.io to terminate this Agreement for cause immediately upon written notice. ## 24. Dispute Resolution In the event of a Dispute between you and PDFShift.io (including any dispute over the validity, enforceability, or scope of this dispute resolution provision), other than with respect to claims for injunctive relief, the Dispute will be resolved by binding arbitration pursuant to the rules of the International Chamber of Commerce. The place of the arbitration shall be in Paris, France. In the event that there is any Dispute between you and PDFShift.io that is determined not to be subject to arbitration pursuant to the preceding sentence, you agree to submit in that event to the exclusive jurisdiction and venue of the courts of France located in Paris. You agree that this Agreement and the relationship between you and PDFShift.io shall be governed by the laws of France without regard to conflict of law principles or the United Nations Convention on the International Sale of Goods. Notwithstanding this, either party shall still be allowed to apply for injunctive or other equitable relief to protect or enforce that party’s Intellectual Property Rights in any court of competent jurisdiction where the other party resides or has its principal place of business. ## 25. Class Action Waiver Any proceedings to resolve or litigate any Dispute in any forum will be conducted solely on an individual basis. Class arbitrations, class actions, private attorney general actions, consolidation of your Dispute with other arbitrations, or any other proceeding in which either party acts or proposes to act in a representative capacity or as a private attorney general are not permitted and are waived by you, and an arbitrator will have no jurisdiction to hear such claims. If a court or arbitrator finds that the class action waiver in this section is unenforceable as to all or some parts of a Dispute, then the class action waiver will not apply to those parts. Instead, those parts will be severed and proceed in a court of law, with the remaining parts proceeding in arbitration. If any other provision of this Dispute resolution section is found to be illegal or unenforceable, that provision will be severed with the remainder of this section remaining in full force and effect. ## 26. Note to Users Outside the European Union and Switzerland If you reside in a country other than the European Union or Switzerland, you represent and warrant that your use of PDFShift.io, including but not limited to any data scraping activities you engage in using the Service, its software, tools and applications will not violate any applicable law, rule or regulation in your home country, or the professional rules of any association or body in your home country with which you are affiliated, and that your use of the PDFShift.io service will not breach or violate any of same. You indemnify SASU PDFShift, its shareholders, directors, members, employees and agents, from and against any loss, claim, damage, liability, cost or expense which any of them may incur arising from or in connection with your knowing or unknowing violation of the foregoing representation and warranty. SASU PDFShift reserves the right to terminate your subscription without notice, among other things, in the event it learns or suspects that your use of the Service violates any applicable law, rule or regulation in any country in which PDFShift.io’s users reside or work. ## 27. General This Agreement shall be governed by the laws of France and controlling federal law of the European Union, without regard to the choice or conflicts of law provisions of any jurisdiction, and any disputes, actions, claims or causes of action arising out of or in connection with this Agreement or the Service shall be subject to the exclusive jurisdiction and venue of the courts of France located in Paris. If any provision of this Agreement is held by a court of competent jurisdiction to be invalid or unenforceable, then such provision(s) shall be construed, as nearly as possible, to reflect the intentions of the invalid or unenforceable provision(s), with all other provisions remaining in full force and effect. No joint venture, partnership, employment, or agency relationship exists between you and PDFShift.io as a result of this agreement or use of the Service. The failure of PDFShift.io to enforce any right or provision in this Agreement shall not constitute a waiver of such right or provision unless acknowledged and agreed to by PDFShift.io in writing. This Agreement, together with any applicable Order Form and policies, comprises the entire agreement between you and PDFShift.io and supersedes all prior or contemporaneous negotiations, discussions or agreements, whether written or oral, between the parties regarding the subject matter contained herein. ## 28. Translation In the event these Terms of Service are translated into multiple languages, the English translation shall prevail and be deemed controlling. ## 29. Definitions As used in this Agreement and in any Order or Forms now or hereafter associated herewith: "Agreement" means these online terms of use, any Order Forms, whether written or submitted online via the Online Web Site, and any materials available on the PDFShift.io website specifically incorporated by reference herein, as such materials, including the terms of this Agreement, may be updated by PDFShift.io from time to time in its sole discretion; "Content" means the audio and visual information, documents, software, products and services contained or made available to you in the course of using the Service; "Customer Data" means any data, User Content, information or material provided or submitted by you to the Service in the course of using the Service; "Effective Date" means the earlier of either the date this Agreement is accepted by selecting the "I Accept" option presented on the screen after this Agreement is displayed, the Effective date on the Order Form or the date you begin using the Service; “Free Trial Period” means a period of fourteen (14) days beginning on the Effective Date, during which you will not be charged for the Service. "Intellectual Property Rights" means unpatented inventions, patent applications, patents, design rights, copyrights, trademarks, service marks, trade names, domain name rights, mask work rights, know-how and other trade secret rights, and all other intellectual property rights, derivatives thereof, and forms of protection of a similar nature anywhere in the world; "Order Form(s)" means the form evidencing the initial subscription for the Service and any subsequent order forms submitted online or in written form, specifying, among other things, the applicable fees, the billing period, and other charges as agreed to between the parties, each such Order Form to be incorporated into and to become a part of this Agreement (in the event of any conflict between the terms of this Agreement and the terms of any such Order Form, the terms of this Agreement shall prevail); “PDFShift”, “PDFShift.io,” “we”, “our” and/or “us” means SASU PDFShift, a company organized and existing under the laws of France having an address at 128 rue la Boétie, 75008 Paris, France. "PDFShift.io" means the software application PDFShift makes available for subscription on its website at [https://pdfshift.io](https://pdfshift.io); "PDFShift.io’s Technology" means all of our proprietary technology (including software, hardware, products, processes, algorithms, user interfaces, know-how, techniques, designs and other tangible or intangible technical material or information) made available to you by PDFShift.io in providing the Service; "Service(s)" means the specific modules of PDFShift.io’s online subscription-based tools and services identified during the ordering process, developed, operated, and maintained by PDFShift.io, accessible via [https://pdfshift.io](https://pdfshift.io) or another designated web site or IP address, or ancillary online or offline products and services provided to you by PDFShift.io, to which you are being granted access under this Agreement, including PDFShift.io’s Technology and the Content; "User(s)" means you and your employees, representatives, consultants, contractors or agents who are authorized to use the Service and have been supplied user identifications and passwords by you (or by PDFShift.io at your request). Questions and Suggestions If you have questions or suggestions, please contact us at: ``` SASU PDFShift 128 rue la Boétie 75008 Paris, France E-Mail: contact@pdfshift.io ```