Generate PDF
curl --request POST \
--url https://kliio.app/api/tools/generate-pdf \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"title": "<string>",
"number": "<string>",
"date": "<string>",
"clientName": "<string>",
"clientEmail": "<string>",
"partnerName": "<string>",
"partnerEmail": "<string>",
"amount": 123,
"lineItems": [
{
"id": "<string>",
"description": "<string>",
"qty": {},
"rate": {}
}
],
"dueDate": "<string>",
"expiryDate": "<string>",
"clientCompany": "<string>",
"partnerCompany": "<string>",
"logoUrl": "<string>",
"subtotal": 123,
"taxRate": 123,
"currencySymbol": "<string>",
"notes": "<string>",
"terms": "<string>",
"poNumber": "<string>",
"discountAmount": 123,
"shippingAmount": 123,
"fontStyle": "<string>",
"textScale": 123,
"showBanner": true,
"layoutType": "<string>",
"bannerUrl": "<string>",
"brandColor": "<string>",
"isQuote": true,
"quoteIntro": "<string>",
"bodyMarkdown": "<string>",
"requiresSignature": true,
"paymentDueDays": 123
}
'import requests
url = "https://kliio.app/api/tools/generate-pdf"
payload = {
"title": "<string>",
"number": "<string>",
"date": "<string>",
"clientName": "<string>",
"clientEmail": "<string>",
"partnerName": "<string>",
"partnerEmail": "<string>",
"amount": 123,
"lineItems": [
{
"id": "<string>",
"description": "<string>",
"qty": {},
"rate": {}
}
],
"dueDate": "<string>",
"expiryDate": "<string>",
"clientCompany": "<string>",
"partnerCompany": "<string>",
"logoUrl": "<string>",
"subtotal": 123,
"taxRate": 123,
"currencySymbol": "<string>",
"notes": "<string>",
"terms": "<string>",
"poNumber": "<string>",
"discountAmount": 123,
"shippingAmount": 123,
"fontStyle": "<string>",
"textScale": 123,
"showBanner": True,
"layoutType": "<string>",
"bannerUrl": "<string>",
"brandColor": "<string>",
"isQuote": True,
"quoteIntro": "<string>",
"bodyMarkdown": "<string>",
"requiresSignature": True,
"paymentDueDays": 123
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
title: '<string>',
number: '<string>',
date: '<string>',
clientName: '<string>',
clientEmail: '<string>',
partnerName: '<string>',
partnerEmail: '<string>',
amount: 123,
lineItems: [{id: '<string>', description: '<string>', qty: {}, rate: {}}],
dueDate: '<string>',
expiryDate: '<string>',
clientCompany: '<string>',
partnerCompany: '<string>',
logoUrl: '<string>',
subtotal: 123,
taxRate: 123,
currencySymbol: '<string>',
notes: '<string>',
terms: '<string>',
poNumber: '<string>',
discountAmount: 123,
shippingAmount: 123,
fontStyle: '<string>',
textScale: 123,
showBanner: true,
layoutType: '<string>',
bannerUrl: '<string>',
brandColor: '<string>',
isQuote: true,
quoteIntro: '<string>',
bodyMarkdown: '<string>',
requiresSignature: true,
paymentDueDays: 123
})
};
fetch('https://kliio.app/api/tools/generate-pdf', 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://kliio.app/api/tools/generate-pdf",
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([
'title' => '<string>',
'number' => '<string>',
'date' => '<string>',
'clientName' => '<string>',
'clientEmail' => '<string>',
'partnerName' => '<string>',
'partnerEmail' => '<string>',
'amount' => 123,
'lineItems' => [
[
'id' => '<string>',
'description' => '<string>',
'qty' => [
],
'rate' => [
]
]
],
'dueDate' => '<string>',
'expiryDate' => '<string>',
'clientCompany' => '<string>',
'partnerCompany' => '<string>',
'logoUrl' => '<string>',
'subtotal' => 123,
'taxRate' => 123,
'currencySymbol' => '<string>',
'notes' => '<string>',
'terms' => '<string>',
'poNumber' => '<string>',
'discountAmount' => 123,
'shippingAmount' => 123,
'fontStyle' => '<string>',
'textScale' => 123,
'showBanner' => true,
'layoutType' => '<string>',
'bannerUrl' => '<string>',
'brandColor' => '<string>',
'isQuote' => true,
'quoteIntro' => '<string>',
'bodyMarkdown' => '<string>',
'requiresSignature' => true,
'paymentDueDays' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$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://kliio.app/api/tools/generate-pdf"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"number\": \"<string>\",\n \"date\": \"<string>\",\n \"clientName\": \"<string>\",\n \"clientEmail\": \"<string>\",\n \"partnerName\": \"<string>\",\n \"partnerEmail\": \"<string>\",\n \"amount\": 123,\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"qty\": {},\n \"rate\": {}\n }\n ],\n \"dueDate\": \"<string>\",\n \"expiryDate\": \"<string>\",\n \"clientCompany\": \"<string>\",\n \"partnerCompany\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"subtotal\": 123,\n \"taxRate\": 123,\n \"currencySymbol\": \"<string>\",\n \"notes\": \"<string>\",\n \"terms\": \"<string>\",\n \"poNumber\": \"<string>\",\n \"discountAmount\": 123,\n \"shippingAmount\": 123,\n \"fontStyle\": \"<string>\",\n \"textScale\": 123,\n \"showBanner\": true,\n \"layoutType\": \"<string>\",\n \"bannerUrl\": \"<string>\",\n \"brandColor\": \"<string>\",\n \"isQuote\": true,\n \"quoteIntro\": \"<string>\",\n \"bodyMarkdown\": \"<string>\",\n \"requiresSignature\": true,\n \"paymentDueDays\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://kliio.app/api/tools/generate-pdf")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.body("{\n \"title\": \"<string>\",\n \"number\": \"<string>\",\n \"date\": \"<string>\",\n \"clientName\": \"<string>\",\n \"clientEmail\": \"<string>\",\n \"partnerName\": \"<string>\",\n \"partnerEmail\": \"<string>\",\n \"amount\": 123,\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"qty\": {},\n \"rate\": {}\n }\n ],\n \"dueDate\": \"<string>\",\n \"expiryDate\": \"<string>\",\n \"clientCompany\": \"<string>\",\n \"partnerCompany\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"subtotal\": 123,\n \"taxRate\": 123,\n \"currencySymbol\": \"<string>\",\n \"notes\": \"<string>\",\n \"terms\": \"<string>\",\n \"poNumber\": \"<string>\",\n \"discountAmount\": 123,\n \"shippingAmount\": 123,\n \"fontStyle\": \"<string>\",\n \"textScale\": 123,\n \"showBanner\": true,\n \"layoutType\": \"<string>\",\n \"bannerUrl\": \"<string>\",\n \"brandColor\": \"<string>\",\n \"isQuote\": true,\n \"quoteIntro\": \"<string>\",\n \"bodyMarkdown\": \"<string>\",\n \"requiresSignature\": true,\n \"paymentDueDays\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://kliio.app/api/tools/generate-pdf")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"title\": \"<string>\",\n \"number\": \"<string>\",\n \"date\": \"<string>\",\n \"clientName\": \"<string>\",\n \"clientEmail\": \"<string>\",\n \"partnerName\": \"<string>\",\n \"partnerEmail\": \"<string>\",\n \"amount\": 123,\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"qty\": {},\n \"rate\": {}\n }\n ],\n \"dueDate\": \"<string>\",\n \"expiryDate\": \"<string>\",\n \"clientCompany\": \"<string>\",\n \"partnerCompany\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"subtotal\": 123,\n \"taxRate\": 123,\n \"currencySymbol\": \"<string>\",\n \"notes\": \"<string>\",\n \"terms\": \"<string>\",\n \"poNumber\": \"<string>\",\n \"discountAmount\": 123,\n \"shippingAmount\": 123,\n \"fontStyle\": \"<string>\",\n \"textScale\": 123,\n \"showBanner\": true,\n \"layoutType\": \"<string>\",\n \"bannerUrl\": \"<string>\",\n \"brandColor\": \"<string>\",\n \"isQuote\": true,\n \"quoteIntro\": \"<string>\",\n \"bodyMarkdown\": \"<string>\",\n \"requiresSignature\": true,\n \"paymentDueDays\": 123\n}"
response = http.request(request)
puts response.read_bodyTools
Generate PDF
Generates a PDF document (invoice or quote) from structured data. Returns a downloadable PDF file.
POST
/
api
/
tools
/
generate-pdf
Generate PDF
curl --request POST \
--url https://kliio.app/api/tools/generate-pdf \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"title": "<string>",
"number": "<string>",
"date": "<string>",
"clientName": "<string>",
"clientEmail": "<string>",
"partnerName": "<string>",
"partnerEmail": "<string>",
"amount": 123,
"lineItems": [
{
"id": "<string>",
"description": "<string>",
"qty": {},
"rate": {}
}
],
"dueDate": "<string>",
"expiryDate": "<string>",
"clientCompany": "<string>",
"partnerCompany": "<string>",
"logoUrl": "<string>",
"subtotal": 123,
"taxRate": 123,
"currencySymbol": "<string>",
"notes": "<string>",
"terms": "<string>",
"poNumber": "<string>",
"discountAmount": 123,
"shippingAmount": 123,
"fontStyle": "<string>",
"textScale": 123,
"showBanner": true,
"layoutType": "<string>",
"bannerUrl": "<string>",
"brandColor": "<string>",
"isQuote": true,
"quoteIntro": "<string>",
"bodyMarkdown": "<string>",
"requiresSignature": true,
"paymentDueDays": 123
}
'import requests
url = "https://kliio.app/api/tools/generate-pdf"
payload = {
"title": "<string>",
"number": "<string>",
"date": "<string>",
"clientName": "<string>",
"clientEmail": "<string>",
"partnerName": "<string>",
"partnerEmail": "<string>",
"amount": 123,
"lineItems": [
{
"id": "<string>",
"description": "<string>",
"qty": {},
"rate": {}
}
],
"dueDate": "<string>",
"expiryDate": "<string>",
"clientCompany": "<string>",
"partnerCompany": "<string>",
"logoUrl": "<string>",
"subtotal": 123,
"taxRate": 123,
"currencySymbol": "<string>",
"notes": "<string>",
"terms": "<string>",
"poNumber": "<string>",
"discountAmount": 123,
"shippingAmount": 123,
"fontStyle": "<string>",
"textScale": 123,
"showBanner": True,
"layoutType": "<string>",
"bannerUrl": "<string>",
"brandColor": "<string>",
"isQuote": True,
"quoteIntro": "<string>",
"bodyMarkdown": "<string>",
"requiresSignature": True,
"paymentDueDays": 123
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
title: '<string>',
number: '<string>',
date: '<string>',
clientName: '<string>',
clientEmail: '<string>',
partnerName: '<string>',
partnerEmail: '<string>',
amount: 123,
lineItems: [{id: '<string>', description: '<string>', qty: {}, rate: {}}],
dueDate: '<string>',
expiryDate: '<string>',
clientCompany: '<string>',
partnerCompany: '<string>',
logoUrl: '<string>',
subtotal: 123,
taxRate: 123,
currencySymbol: '<string>',
notes: '<string>',
terms: '<string>',
poNumber: '<string>',
discountAmount: 123,
shippingAmount: 123,
fontStyle: '<string>',
textScale: 123,
showBanner: true,
layoutType: '<string>',
bannerUrl: '<string>',
brandColor: '<string>',
isQuote: true,
quoteIntro: '<string>',
bodyMarkdown: '<string>',
requiresSignature: true,
paymentDueDays: 123
})
};
fetch('https://kliio.app/api/tools/generate-pdf', 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://kliio.app/api/tools/generate-pdf",
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([
'title' => '<string>',
'number' => '<string>',
'date' => '<string>',
'clientName' => '<string>',
'clientEmail' => '<string>',
'partnerName' => '<string>',
'partnerEmail' => '<string>',
'amount' => 123,
'lineItems' => [
[
'id' => '<string>',
'description' => '<string>',
'qty' => [
],
'rate' => [
]
]
],
'dueDate' => '<string>',
'expiryDate' => '<string>',
'clientCompany' => '<string>',
'partnerCompany' => '<string>',
'logoUrl' => '<string>',
'subtotal' => 123,
'taxRate' => 123,
'currencySymbol' => '<string>',
'notes' => '<string>',
'terms' => '<string>',
'poNumber' => '<string>',
'discountAmount' => 123,
'shippingAmount' => 123,
'fontStyle' => '<string>',
'textScale' => 123,
'showBanner' => true,
'layoutType' => '<string>',
'bannerUrl' => '<string>',
'brandColor' => '<string>',
'isQuote' => true,
'quoteIntro' => '<string>',
'bodyMarkdown' => '<string>',
'requiresSignature' => true,
'paymentDueDays' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$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://kliio.app/api/tools/generate-pdf"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"number\": \"<string>\",\n \"date\": \"<string>\",\n \"clientName\": \"<string>\",\n \"clientEmail\": \"<string>\",\n \"partnerName\": \"<string>\",\n \"partnerEmail\": \"<string>\",\n \"amount\": 123,\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"qty\": {},\n \"rate\": {}\n }\n ],\n \"dueDate\": \"<string>\",\n \"expiryDate\": \"<string>\",\n \"clientCompany\": \"<string>\",\n \"partnerCompany\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"subtotal\": 123,\n \"taxRate\": 123,\n \"currencySymbol\": \"<string>\",\n \"notes\": \"<string>\",\n \"terms\": \"<string>\",\n \"poNumber\": \"<string>\",\n \"discountAmount\": 123,\n \"shippingAmount\": 123,\n \"fontStyle\": \"<string>\",\n \"textScale\": 123,\n \"showBanner\": true,\n \"layoutType\": \"<string>\",\n \"bannerUrl\": \"<string>\",\n \"brandColor\": \"<string>\",\n \"isQuote\": true,\n \"quoteIntro\": \"<string>\",\n \"bodyMarkdown\": \"<string>\",\n \"requiresSignature\": true,\n \"paymentDueDays\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://kliio.app/api/tools/generate-pdf")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.body("{\n \"title\": \"<string>\",\n \"number\": \"<string>\",\n \"date\": \"<string>\",\n \"clientName\": \"<string>\",\n \"clientEmail\": \"<string>\",\n \"partnerName\": \"<string>\",\n \"partnerEmail\": \"<string>\",\n \"amount\": 123,\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"qty\": {},\n \"rate\": {}\n }\n ],\n \"dueDate\": \"<string>\",\n \"expiryDate\": \"<string>\",\n \"clientCompany\": \"<string>\",\n \"partnerCompany\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"subtotal\": 123,\n \"taxRate\": 123,\n \"currencySymbol\": \"<string>\",\n \"notes\": \"<string>\",\n \"terms\": \"<string>\",\n \"poNumber\": \"<string>\",\n \"discountAmount\": 123,\n \"shippingAmount\": 123,\n \"fontStyle\": \"<string>\",\n \"textScale\": 123,\n \"showBanner\": true,\n \"layoutType\": \"<string>\",\n \"bannerUrl\": \"<string>\",\n \"brandColor\": \"<string>\",\n \"isQuote\": true,\n \"quoteIntro\": \"<string>\",\n \"bodyMarkdown\": \"<string>\",\n \"requiresSignature\": true,\n \"paymentDueDays\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://kliio.app/api/tools/generate-pdf")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"title\": \"<string>\",\n \"number\": \"<string>\",\n \"date\": \"<string>\",\n \"clientName\": \"<string>\",\n \"clientEmail\": \"<string>\",\n \"partnerName\": \"<string>\",\n \"partnerEmail\": \"<string>\",\n \"amount\": 123,\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"qty\": {},\n \"rate\": {}\n }\n ],\n \"dueDate\": \"<string>\",\n \"expiryDate\": \"<string>\",\n \"clientCompany\": \"<string>\",\n \"partnerCompany\": \"<string>\",\n \"logoUrl\": \"<string>\",\n \"subtotal\": 123,\n \"taxRate\": 123,\n \"currencySymbol\": \"<string>\",\n \"notes\": \"<string>\",\n \"terms\": \"<string>\",\n \"poNumber\": \"<string>\",\n \"discountAmount\": 123,\n \"shippingAmount\": 123,\n \"fontStyle\": \"<string>\",\n \"textScale\": 123,\n \"showBanner\": true,\n \"layoutType\": \"<string>\",\n \"bannerUrl\": \"<string>\",\n \"brandColor\": \"<string>\",\n \"isQuote\": true,\n \"quoteIntro\": \"<string>\",\n \"bodyMarkdown\": \"<string>\",\n \"requiresSignature\": true,\n \"paymentDueDays\": 123\n}"
response = http.request(request)
puts response.read_bodyHeaders
string
required
Bearer YOUR_API_KEYstring
required
application/jsonBody
string
required
Document type. Either
Invoice or Quote.string
required
Document number/ID (e.g.,
INV-0001 or QTE-0001).string
required
Issue date in
YYYY-MM-DD format.string
required
Client’s full name.
string
required
Client’s email address.
string
required
Your (partner’s) full name or business name.
string
required
Your email address.
number
required
Total amount to display on the document.
array
required
string
Due date in
YYYY-MM-DD format. Used for invoices.string
Expiry date in
YYYY-MM-DD format. Used for quotes/proposals.string
Client’s company name (optional).
string
Your company name (optional).
string
URL or base64 data URI of your logo image.
number
Subtotal amount. If omitted, it’s calculated from line items.
number
Tax rate as percentage (0–100). Defaults to
20.string
Currency symbol (e.g.,
$, £, €). Defaults to $.string
Additional notes to display on the document.
string
Terms and conditions text.
string
Purchase Order number to display on the invoice.
number
Discount amount to subtract from subtotal.
number
Shipping/delivery cost to add to the total.
string
Font style preset:
elegant (default), modern, or classic.number
Text size scale (0.8 to 1.2). Defaults to
1.boolean
Whether to show the hero banner image. Defaults to
true.string
Layout style:
standard (default) or overlay.string
URL of the hero banner image.
string
Hex color code for accent color (e.g.,
#1D4D4F).boolean
Whether this is a quote (changes labels like “Valid until” vs “Due date”).
string
Introduction text for quotes.
string
Markdown content for the document body (e.g., scope of work).
boolean
Whether the document requires a signature block.
number
Number of days until payment is due after signing (for quotes).
Response
Returns a binary PDF file withContent-Type: application/pdf.
Request Example
cURL
curl -X POST https://kliio.app/api/tools/generate-pdf \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Invoice",
"number": "INV-0001",
"date": "2025-03-20",
"dueDate": "2025-04-20",
"clientName": "Alice Johnson",
"clientEmail": "alice@example.com",
"clientCompany": "Acme Corp",
"partnerName": "Your Agency",
"partnerEmail": "hello@agency.com",
"partnerCompany": "Your Agency Ltd",
"amount": 1500,
"taxRate": 20,
"currencySymbol": "$",
"lineItems": [
{ "id": "1", "description": "Web Design", "qty": "1", "rate": "1200" },
{ "id": "2", "description": "Hosting (annual)", "qty": "1", "rate": "300" }
],
"notes": "Payment within 7 days please.",
"fontStyle": "elegant",
"layoutType": "standard"
}' -o invoice.pdf
```bash cURL (Quote)
curl -X POST https://kliio.app/api/tools/generate-pdf \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Quote",
"number": "QTE-0042",
"date": "2025-03-20",
"isQuote": true,
"clientName": "Bob Smith",
"clientEmail": "bob@example.com",
"partnerName": "Creative Studio",
"partnerEmail": "hello@studio.com",
"amount": 2500,
"lineItems": [
{ "id": "1", "description": "Brand Strategy", "qty": "1", "rate": "2500" }
],
"bodyMarkdown": "### Scope of Work\n* Logo Design\n* Brand Guidelines",
"requiresSignature": true,
"paymentDueDays": 7
}' -o quote.pdf
JavaScript
const res = await fetch('https://kliio.app/api/tools/generate-pdf', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Invoice',
number: 'INV-0001',
date: '2025-03-20',
dueDate: '2025-04-20',
clientName: 'Alice Johnson',
clientEmail: 'alice@example.com',
clientCompany: 'Acme Corp',
partnerName: 'Your Agency',
partnerEmail: 'hello@agency.com',
amount: 1500,
taxRate: 20,
currencySymbol: '$',
lineItems: [
{ id: '1', description: 'Web Design', qty: '1', rate: '1200' },
{ id: '2', description: 'Hosting', qty: '1', rate: '300' }
]
})
})
// Save the PDF
const blob = await res.blob()
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = 'invoice.pdf'
a.click()

