curl --request POST \
--url https://api.geekflare.com/url2pdf \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://example.com",
"device": "desktop",
"proxyCountry": "us",
"format": "a4",
"orientation": "portrait",
"margin": {
"top": 25.4,
"bottom": 25.4,
"right": 25.4,
"left": 25.4
},
"scale": 1.5,
"hideCookie": false,
"skipCaptcha": false,
"addTimestamp": false
}
'import requests
url = "https://api.geekflare.com/url2pdf"
payload = {
"url": "https://example.com",
"device": "desktop",
"proxyCountry": "us",
"format": "a4",
"orientation": "portrait",
"margin": {
"top": 25.4,
"bottom": 25.4,
"right": 25.4,
"left": 25.4
},
"scale": 1.5,
"hideCookie": False,
"skipCaptcha": False,
"addTimestamp": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://example.com',
device: 'desktop',
proxyCountry: 'us',
format: 'a4',
orientation: 'portrait',
margin: {top: 25.4, bottom: 25.4, right: 25.4, left: 25.4},
scale: 1.5,
hideCookie: false,
skipCaptcha: false,
addTimestamp: false
})
};
fetch('https://api.geekflare.com/url2pdf', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.geekflare.com/url2pdf",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://example.com',
'device' => 'desktop',
'proxyCountry' => 'us',
'format' => 'a4',
'orientation' => 'portrait',
'margin' => [
'top' => 25.4,
'bottom' => 25.4,
'right' => 25.4,
'left' => 25.4
],
'scale' => 1.5,
'hideCookie' => false,
'skipCaptcha' => false,
'addTimestamp' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.geekflare.com/url2pdf"
payload := strings.NewReader("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"proxyCountry\": \"us\",\n \"format\": \"a4\",\n \"orientation\": \"portrait\",\n \"margin\": {\n \"top\": 25.4,\n \"bottom\": 25.4,\n \"right\": 25.4,\n \"left\": 25.4\n },\n \"scale\": 1.5,\n \"hideCookie\": false,\n \"skipCaptcha\": false,\n \"addTimestamp\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.geekflare.com/url2pdf")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"proxyCountry\": \"us\",\n \"format\": \"a4\",\n \"orientation\": \"portrait\",\n \"margin\": {\n \"top\": 25.4,\n \"bottom\": 25.4,\n \"right\": 25.4,\n \"left\": 25.4\n },\n \"scale\": 1.5,\n \"hideCookie\": false,\n \"skipCaptcha\": false,\n \"addTimestamp\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geekflare.com/url2pdf")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"proxyCountry\": \"us\",\n \"format\": \"a4\",\n \"orientation\": \"portrait\",\n \"margin\": {\n \"top\": 25.4,\n \"bottom\": 25.4,\n \"right\": 25.4,\n \"left\": 25.4\n },\n \"scale\": 1.5,\n \"hideCookie\": false,\n \"skipCaptcha\": false,\n \"addTimestamp\": false\n}"
response = http.request(request)
puts response.read_body{
"timestamp": 1783943217189,
"apiStatus": "success",
"apiCode": 200,
"meta": {
"url": "https://example.com",
"device": "desktop",
"format": "letter",
"orientation": "landscape",
"scale": 1.5,
"test": {
"id": "mxqx9v9y0742lap6altwdteqd28t23nq"
},
"proxyCountry": "<string>",
"margin": {
"top": 25.4,
"bottom": 25.4,
"right": 25.4,
"left": 25.4
}
},
"data": "https://api-assets.example.com/tests/pdf/o5jiqf08bmp93jsll7vb24vs.pdf"
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 400,
"message": "INVALID_URL",
"details": "The URL must be a valid HTTP or HTTPS URL."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 422,
"message": "UNABLE_TO_CONNECT",
"details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 500,
"message": "PDF_CONVERSION_FAILED",
"details": "Our PDF conversion service encountered an error while fetching the target URL."
}PDF Generator
Convert any URL into a downloadable PDF document, with control over page orientation, margins, and scale. Useful for archiving pages or generating reports.
curl --request POST \
--url https://api.geekflare.com/url2pdf \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://example.com",
"device": "desktop",
"proxyCountry": "us",
"format": "a4",
"orientation": "portrait",
"margin": {
"top": 25.4,
"bottom": 25.4,
"right": 25.4,
"left": 25.4
},
"scale": 1.5,
"hideCookie": false,
"skipCaptcha": false,
"addTimestamp": false
}
'import requests
url = "https://api.geekflare.com/url2pdf"
payload = {
"url": "https://example.com",
"device": "desktop",
"proxyCountry": "us",
"format": "a4",
"orientation": "portrait",
"margin": {
"top": 25.4,
"bottom": 25.4,
"right": 25.4,
"left": 25.4
},
"scale": 1.5,
"hideCookie": False,
"skipCaptcha": False,
"addTimestamp": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://example.com',
device: 'desktop',
proxyCountry: 'us',
format: 'a4',
orientation: 'portrait',
margin: {top: 25.4, bottom: 25.4, right: 25.4, left: 25.4},
scale: 1.5,
hideCookie: false,
skipCaptcha: false,
addTimestamp: false
})
};
fetch('https://api.geekflare.com/url2pdf', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.geekflare.com/url2pdf",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://example.com',
'device' => 'desktop',
'proxyCountry' => 'us',
'format' => 'a4',
'orientation' => 'portrait',
'margin' => [
'top' => 25.4,
'bottom' => 25.4,
'right' => 25.4,
'left' => 25.4
],
'scale' => 1.5,
'hideCookie' => false,
'skipCaptcha' => false,
'addTimestamp' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.geekflare.com/url2pdf"
payload := strings.NewReader("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"proxyCountry\": \"us\",\n \"format\": \"a4\",\n \"orientation\": \"portrait\",\n \"margin\": {\n \"top\": 25.4,\n \"bottom\": 25.4,\n \"right\": 25.4,\n \"left\": 25.4\n },\n \"scale\": 1.5,\n \"hideCookie\": false,\n \"skipCaptcha\": false,\n \"addTimestamp\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.geekflare.com/url2pdf")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"proxyCountry\": \"us\",\n \"format\": \"a4\",\n \"orientation\": \"portrait\",\n \"margin\": {\n \"top\": 25.4,\n \"bottom\": 25.4,\n \"right\": 25.4,\n \"left\": 25.4\n },\n \"scale\": 1.5,\n \"hideCookie\": false,\n \"skipCaptcha\": false,\n \"addTimestamp\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geekflare.com/url2pdf")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"proxyCountry\": \"us\",\n \"format\": \"a4\",\n \"orientation\": \"portrait\",\n \"margin\": {\n \"top\": 25.4,\n \"bottom\": 25.4,\n \"right\": 25.4,\n \"left\": 25.4\n },\n \"scale\": 1.5,\n \"hideCookie\": false,\n \"skipCaptcha\": false,\n \"addTimestamp\": false\n}"
response = http.request(request)
puts response.read_body{
"timestamp": 1783943217189,
"apiStatus": "success",
"apiCode": 200,
"meta": {
"url": "https://example.com",
"device": "desktop",
"format": "letter",
"orientation": "landscape",
"scale": 1.5,
"test": {
"id": "mxqx9v9y0742lap6altwdteqd28t23nq"
},
"proxyCountry": "<string>",
"margin": {
"top": 25.4,
"bottom": 25.4,
"right": 25.4,
"left": 25.4
}
},
"data": "https://api-assets.example.com/tests/pdf/o5jiqf08bmp93jsll7vb24vs.pdf"
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 400,
"message": "INVALID_URL",
"details": "The URL must be a valid HTTP or HTTPS URL."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 422,
"message": "UNABLE_TO_CONNECT",
"details": "The destination server could not be resolved, refused the connection, timed out, or is redirecting indefinitely."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 500,
"message": "PDF_CONVERSION_FAILED",
"details": "Our PDF conversion service encountered an error while fetching the target URL."
}Authorizations
API Key required for all endpoints
Body
Target URL
"https://example.com"
Device type to emulate. Defaults to desktop.
desktop, mobile "desktop"
Proxy country code to route the request
"us"
Paper format
letter, legal, a0, a1, a2, a3, a4, a5, a6 "a4"
Orientation
portrait, landscape "portrait"
Margins in mm
Show child attributes
Show child attributes
Rendering scale between 0–2
1.5
Hide cookie popups
false
Try to skip captcha
false
Add timestamp watermark
false
Response
Successfully captured Url2Pdf
Timestamp of the request in milliseconds
1783943217189
API status message
success, failure "success"
API status code
200
Metadata about the request
Show child attributes
Show child attributes
Generated PDF URL
"https://api-assets.example.com/tests/pdf/o5jiqf08bmp93jsll7vb24vs.pdf"