PDF: Private pages
Many real PDF workflows involve private content: invoices, dashboards, internal documentation, and user-specific views. The general patterns for headers, secrets, endpoint selection, and proxy are covered in private pages patterns.
This page shows the PDF-specific setup.
PDF with non-sensitive headers PRO
The following examples show how to use the Microlink API with CLI, cURL, JavaScript, Python, Ruby, PHP & Golang, targeting 'https://example.com' URL with 'pdf', 'meta', 'headers' & 'apiKey' API parameters:
CLI Microlink API example
microlink https://example.com&pdf&headers.Accept-Language=es-ES --api-key YOUR_API_TOKENcURL Microlink API example
curl -G "https://pro.microlink.io" \
-H "x-api-key: YOUR_API_TOKEN" \
-d "url=https://example.com" \
-d "pdf=true" \
-d "meta=false" \
-d "headers.Accept-Language=es-ES"JavaScript Microlink API example
import createClient from 'microlink.io'
const microlink = createClient({ apiKey: "YOUR_API_TOKEN" })
const data = await microlink.pdf('https://example.com', {
headers: {
"x-api-header-accept-language": "es-ES"
}
})Python Microlink API example
import requests
url = "https://pro.microlink.io/"
querystring = {
"url": "https://example.com",
"pdf": "true",
"meta": "false",
"headers.Accept-Language": "es-ES"
}
headers = {
"x-api-key": "YOUR_API_TOKEN"
}
response = requests.get(url, params=querystring, headers=headers)
print(response.json())Ruby Microlink API example
require 'uri'
require 'net/http'
base_url = "https://pro.microlink.io/"
params = {
url: "https://example.com",
pdf: "true",
meta: "false",
headers.Accept-Language: "es-ES"
}
uri = URI(base_url)
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['x-api-key'] = "YOUR_API_TOKEN"
response = http.request(request)
puts response.bodyPHP Microlink API example
<?php
$baseUrl = "https://pro.microlink.io/";
$params = [
"url" => "https://example.com",
"pdf" => "true",
"meta" => "false",
"headers.Accept-Language" => "es-ES"
];
$query = http_build_query($params);
$url = $baseUrl . '?' . $query;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: YOUR_API_TOKEN"
]
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #: " . $err;
} else {
echo $response;
}Golang Microlink API example
package main
import (
"fmt"
"net/http"
"net/url"
"io"
)
func main() {
baseURL := "https://pro.microlink.io"
u, err := url.Parse(baseURL)
if err != nil {
panic(err)
}
q := u.Query()
q.Set("url", "https://example.com")
q.Set("pdf", "true")
q.Set("meta", "false")
q.Set("headers.Accept-Language", "es-ES")
u.RawQuery = q.Encode()
req, err := http.NewRequest("GET", u.String(), nil)
if err != nil {
panic(err)
}
req.Header.Set("x-api-key", "YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}import createClient from 'microlink.io'
const microlink = createClient({ apiKey: "YOUR_API_TOKEN" })
const data = await microlink.pdf('https://example.com', {
headers: {
"x-api-header-accept-language": "es-ES"
}
})Good for locale and request shaping. For cookies or authorization tokens, use the
x-api-header-* pattern described in private pages patterns.PDF with sensitive credentials
Use
x-api-header-* to forward secrets without exposing them in the URL:curl -G https://pro.microlink.io \
-d url=https://example.com/dashboard \
-d pdf=true \
-d meta=false \
-H 'x-api-key: YOUR_API_TOKEN' \
-H 'x-api-header-cookie: session=abc123'When private PDFs still fail
If the page is authenticated and protected by antibot systems, CAPTCHAs, or geofencing, you may also need proxy
PRO
. If you see EPROXYNEEDED, that confirms it.For other errors, continue with troubleshooting.
Next step
Learn how to debug missing content, wrong layout, blocked sites, and common PDF errors in troubleshooting.
See also
- PDF invoices from authenticated pages — forward the session and print.