Nutrient

SDK

Cloud

Low-Code

Workflow

URL to PDF API

Convert URL to PDF files with our URL to PDF API.

Accurate web-to-PDF rendering

Capture the full content, layout, and styling of any webpage — including HTML, CSS, images, and fonts — just like it appears in the browser.

Automate with Zapier

Automatically convert webpage URLs in Google Drive to PDF using our Zapier integration. A fast, no-code way to generate PDFs from URLs.

Perfect for automation and archiving

Create PDFs from URLs for invoices, blog posts, dashboards, terms of service, and more without opening a browser.

Nutrient is used by

Try it out

This example will download a file from a URL and convert it to a PDF.

1

Use Your Free API Calls

Sign up and receive 100 credits for free, or log in to automatically add your API key to sample code. If you are not sure how credits are consumed read more in our pricing documentation , or check out this guide on calculating credit usage.

Run the Code

Copy the code and run it. For more information, see our language-specific getting started guides.

View the Results

Open result.pdf in your project folder to view the results.

curl -X POST https://api.nutrient.io/build \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key_here" \
  -o result.pdf \
  --fail \
  -d '{
      "parts": [
        {
          "file": {
            "url": "https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx"
          }
        }
      ]
    }'
curl -X POST https://api.nutrient.io/build ^
  -H "Content-Type: application/json" ^
  -H "Authorization: Bearer your_api_key_here" ^
  -o result.pdf ^
  --fail ^
  -d "{\"parts\": [{\"file\": {\"url\": \"https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx\"}}]}"
package com.example.pspdfkit;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;

import org.json.JSONArray;
import org.json.JSONObject;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public final class PspdfkitApiExample {
  public static void main(final String[] args) throws IOException {
    final MediaType mediaType = MediaType.parse("application/json");
    final RequestBody body = RequestBody.create(
      mediaType,
      new JSONObject()
        .put("parts", new JSONArray()
          .put(new JSONObject()
            .put("file", new JSONObject()
              .put("url", "https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx")
            )
          )
        ).toString()
    );

    final Request request = new Request.Builder()
      .url("https://api.nutrient.io/build")
      .method("POST", body)
      .addHeader("Content-Type", "application/json")
      .addHeader("Authorization", "Bearer your_api_key_here")
      .build();

    final OkHttpClient client = new OkHttpClient()
      .newBuilder()
      .build();

    final Response response = client.newCall(request).execute();

    if (response.isSuccessful()) {
      Files.copy(
        response.body().byteStream(),
        FileSystems.getDefault().getPath("result.pdf"),
        StandardCopyOption.REPLACE_EXISTING
      );
    } else {
      // Handle the error
      throw new IOException(response.body().string());
    }
  }
}
using System;
using System.IO;
using System.Net;
using RestSharp;

namespace PspdfkitApiDemo
{
  class Program
  {
    static void Main(string[] args)
    {
      var client = new RestClient("https://api.nutrient.io/build");

      var request = new RestRequest(Method.POST)
        .AddHeader("Authorization", "Bearer your_api_key_here")
        .AddJsonBody(new JsonObject
          {
            ["parts"] = new JsonArray
            {
              new JsonObject
              {
                ["file"] = new JsonObject
                {
                  ["url"] = "https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx"
                }
              }
            }
          });

      request.AdvancedResponseWriter = (responseStream, response) =>
      {
        if (response.StatusCode == HttpStatusCode.OK)
        {
          using (responseStream)
          {
            using var outputFileWriter = File.OpenWrite("result.pdf");
            responseStream.CopyTo(outputFileWriter);
          }
        }
        else
        {
          var responseStreamReader = new StreamReader(responseStream);
          Console.Write(responseStreamReader.ReadToEnd());
        }
      };

      client.Execute(request);
    }
  }
}
// This code requires Node.js. Do not run this code directly in a web browser.

const axios = require('axios')
const FormData = require('form-data')
const fs = require('fs')

const body = JSON.stringify({
  parts: [
    {
      file: {
        url: "https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx"
      }
    }
  ]
})

;(async () => {
  try {
    const response = await axios.post('https://api.nutrient.io/build', body, {
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer your_api_key_here'
      },
      responseType: "stream"
    })

    response.data.pipe(fs.createWriteStream("result.pdf"))
  } catch (e) {
    const errorString = await streamToString(e.response.data)
    console.log(errorString)
  }
})()

function streamToString(stream) {
  const chunks = []
  return new Promise((resolve, reject) => {
    stream.on("data", (chunk) => chunks.push(Buffer.from(chunk)))
    stream.on("error", (err) => reject(err))
    stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")))
  })
}
import requests
import json

body = json.dumps({
  'parts': [
    {
      'file': {
        'url': 'https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx'
      }
    }
  ]
})

response = requests.request(
  'POST',
  'https://api.nutrient.io/build',
  headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_api_key_here'
  },
  data = body,
  stream = True
)

if response.ok:
  with open('result.pdf', 'wb') as fd:
    for chunk in response.iter_content(chunk_size=8096):
      fd.write(chunk)
else:
  print(response.text)
  exit()
<?php

$FileHandle = fopen('result.pdf', 'w+');

$curl = curl_init();

$body = '{
  "parts": [
    {
      "file": {
        "url": "https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx"
      }
    }
  ]
}';

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.nutrient.io/build',
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_POSTFIELDS => $body,
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer your_api_key_here'
  ),
  CURLOPT_FILE => $FileHandle,
));

$response = curl_exec($curl);

curl_close($curl);

fclose($FileHandle);

POST https://api.nutrient.io/build HTTP/1.1
Content-Type: application/json
Authorization: Bearer your_api_key_here

{
  "parts": [
    {
      "file": {
        "url": "https://www.nutrient.io/api/assets/downloads/samples/docx/document.docx"
      }
    }
  ]
}
Using Postman? Check out our Postman collection and start using the API with a single click. Read more 

Your API key

Security is our top priority

No document storage

No input or resulting documents are stored on our infrastructure. All files are deleted as soon as a request finishes. Alternatively, check out our self-hosted product.

HTTPS encryption

All communication between your application and Nutrient is done via HTTPS to ensure your data is encrypted when it’s sent to us.

Safe payment processing

All payments are handled by Paddle. Nutrient DWS Processor API never has direct access to any of your payment data.

Ready to try it?

Create an account to get your API key and start making API calls.