Document Generation
Generate PDF, DOCX, EPUB, and PPTX documents from a single API call. Send a structured document definition with metadata, page settings, styles, and content blocks, and receive the rendered document as base64-encoded JSON in the response.
Key Features
- Multi-Format Output – Generate PDF, DOCX, EPUB, and PPTX from one unified document structure.
- Rich Content Blocks – Paragraphs with rich text runs, headlines (h1-h6), images, tables, grids, lists, QR codes, barcodes, and more.
- 12-Column Grid Layout – Arrange content blocks side by side using a flexible 12-column grid system.
- Two-Layer Style System – Define document-wide default styles, then override per block for full control.
- Headers and Footers – Repeating headers and footers with the same block types as body content, plus page numbers.
- Custom Fonts – Upload font files (base64-encoded) with weight and style metadata for full typographic control.
- Page Size Presets – 19 built-in presets (A0-A6, B0-B6, Letter, Legal, Tabloid, Executive, Statement) plus custom dimensions.
- Table of Contents – Auto-generated from headlines with configurable levels and dot leaders.
- PPTX Slide Support – Each page-break creates a new slide in PowerPoint output.
Overview
The Document Generation API renders structured documents from a JSON definition. You send a format, document metadata, page settings, styles, and an ordered list of content blocks, and receive the rendered document as base64-encoded JSON.
Endpoint: POST /document-generation/v1/generate
Supported output formats: PDF, DOCX, EPUB, PPTX
Request Format
curl -X POST https://api.iterationlayer.com/document-generation/v1/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "pdf",
"document": {
"metadata": {
"title": "Quarterly Report",
"author": "Acme Corp",
"language": "en"
},
"page": {
"size": { "preset": "A4" },
"margins": {
"top_in_pt": 72.0,
"right_in_pt": 72.0,
"bottom_in_pt": 72.0,
"left_in_pt": 72.0
}
},
"styles": {
"text": {
"font_family": "Helvetica",
"font_size_in_pt": 12.0,
"line_height": 1.5,
"color": "#000000"
},
"headline": {
"font_family": "Helvetica",
"font_size_in_pt": 24.0,
"color": "#111111",
"spacing_before_in_pt": 12.0,
"spacing_after_in_pt": 6.0,
"is_bold": true
},
"link": { "color": "#0066CC", "is_underlined": true },
"list": {
"text_style": {
"font_family": "Helvetica",
"font_size_in_pt": 12.0,
"line_height": 1.5,
"color": "#000000"
},
"marker_color": "#000000",
"marker_gap_in_pt": 8.0
},
"table": {
"header": {
"background_color": "#333333",
"text_color": "#FFFFFF",
"font_size_in_pt": 12.0,
"is_bold": true
},
"body": {
"background_color": "#FFFFFF",
"text_color": "#000000",
"font_size_in_pt": 11.0
},
"border": {
"outer": {
"top": { "color": "#CCCCCC", "width_in_pt": 1.0 },
"right": { "color": "#CCCCCC", "width_in_pt": 1.0 },
"bottom": { "color": "#CCCCCC", "width_in_pt": 1.0 },
"left": { "color": "#CCCCCC", "width_in_pt": 1.0 }
},
"inner": {
"horizontal": { "color": "#EEEEEE", "width_in_pt": 0.5 },
"vertical": { "color": "#EEEEEE", "width_in_pt": 0.5 }
}
}
},
"grid": {
"background_color": "#FFFFFF",
"border_color": "#CCCCCC",
"border_width_in_pt": 0.0,
"gap_in_pt": 12.0
},
"separator": {
"color": "#CCCCCC",
"thickness_in_pt": 1.0,
"spacing_before_in_pt": 12.0,
"spacing_after_in_pt": 12.0
},
"image": {
"border_color": "#000000",
"border_width_in_pt": 0.0
}
},
"content": [
{ "type": "headline", "level": "h1", "text": "Quarterly Report" },
{
"type": "paragraph",
"runs": [
{ "text": "This is " },
{ "text": "bold text", "is_bold": true },
{ "text": " in a paragraph." }
]
}
]
}
}'import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({ apiKey: "YOUR_API_KEY" });
const result = await client.generateDocument({
format: "pdf",
document: {
metadata: {
title: "Quarterly Report",
author: "Acme Corp",
language: "en",
},
page: {
size: { preset: "A4" },
margins: {
top_in_pt: 72.0,
right_in_pt: 72.0,
bottom_in_pt: 72.0,
left_in_pt: 72.0,
},
},
styles: {
text: {
font_family: "Helvetica",
font_size_in_pt: 12.0,
line_height: 1.5,
color: "#000000",
},
headline: {
font_family: "Helvetica",
font_size_in_pt: 24.0,
color: "#111111",
spacing_before_in_pt: 12.0,
spacing_after_in_pt: 6.0,
is_bold: true,
},
link: { color: "#0066CC", is_underlined: true },
list: {
text_style: {
font_family: "Helvetica",
font_size_in_pt: 12.0,
line_height: 1.5,
color: "#000000",
},
marker_color: "#000000",
marker_gap_in_pt: 8.0,
},
table: {
header: {
background_color: "#333333",
text_color: "#FFFFFF",
font_size_in_pt: 12.0,
is_bold: true,
},
body: {
background_color: "#FFFFFF",
text_color: "#000000",
font_size_in_pt: 11.0,
},
border: {
outer: {
top: { color: "#CCCCCC", width_in_pt: 1.0 },
right: { color: "#CCCCCC", width_in_pt: 1.0 },
bottom: { color: "#CCCCCC", width_in_pt: 1.0 },
left: { color: "#CCCCCC", width_in_pt: 1.0 },
},
inner: {
horizontal: { color: "#EEEEEE", width_in_pt: 0.5 },
vertical: { color: "#EEEEEE", width_in_pt: 0.5 },
},
},
},
grid: {
background_color: "#FFFFFF",
border_color: "#CCCCCC",
border_width_in_pt: 0.0,
gap_in_pt: 12.0,
},
separator: {
color: "#CCCCCC",
thickness_in_pt: 1.0,
spacing_before_in_pt: 12.0,
spacing_after_in_pt: 12.0,
},
image: {
border_color: "#000000",
border_width_in_pt: 0.0,
},
},
content: [
{ type: "headline", level: "h1", text: "Quarterly Report" },
{
type: "paragraph",
runs: [
{ text: "This is " },
{ text: "bold text", is_bold: true },
{ text: " in a paragraph." },
],
},
],
},
});
// result.data.buffer is base64-encoded, result.data.mime_type is "application/pdf"from iterationlayer import IterationLayer
client = IterationLayer(api_key="YOUR_API_KEY")
result = client.generate_document(
format="pdf",
document={
"metadata": {
"title": "Quarterly Report",
"author": "Acme Corp",
"language": "en",
},
"page": {
"size": {"preset": "A4"},
"margins": {
"top_in_pt": 72.0,
"right_in_pt": 72.0,
"bottom_in_pt": 72.0,
"left_in_pt": 72.0,
},
},
"styles": {
"text": {
"font_family": "Helvetica",
"font_size_in_pt": 12.0,
"line_height": 1.5,
"color": "#000000",
},
"headline": {
"font_family": "Helvetica",
"font_size_in_pt": 24.0,
"color": "#111111",
"spacing_before_in_pt": 12.0,
"spacing_after_in_pt": 6.0,
"is_bold": True,
},
"link": {"color": "#0066CC", "is_underlined": True},
"list": {
"text_style": {
"font_family": "Helvetica",
"font_size_in_pt": 12.0,
"line_height": 1.5,
"color": "#000000",
},
"marker_color": "#000000",
"marker_gap_in_pt": 8.0,
},
"table": {
"header": {
"background_color": "#333333",
"text_color": "#FFFFFF",
"font_size_in_pt": 12.0,
"is_bold": True,
},
"body": {
"background_color": "#FFFFFF",
"text_color": "#000000",
"font_size_in_pt": 11.0,
},
"border": {
"outer": {
"top": {"color": "#CCCCCC", "width_in_pt": 1.0},
"right": {"color": "#CCCCCC", "width_in_pt": 1.0},
"bottom": {"color": "#CCCCCC", "width_in_pt": 1.0},
"left": {"color": "#CCCCCC", "width_in_pt": 1.0},
},
"inner": {
"horizontal": {"color": "#EEEEEE", "width_in_pt": 0.5},
"vertical": {"color": "#EEEEEE", "width_in_pt": 0.5},
},
},
},
"grid": {
"background_color": "#FFFFFF",
"border_color": "#CCCCCC",
"border_width_in_pt": 0.0,
"gap_in_pt": 12.0,
},
"separator": {
"color": "#CCCCCC",
"thickness_in_pt": 1.0,
"spacing_before_in_pt": 12.0,
"spacing_after_in_pt": 12.0,
},
"image": {
"border_color": "#000000",
"border_width_in_pt": 0.0,
},
},
"content": [
{"type": "headline", "level": "h1", "text": "Quarterly Report"},
{
"type": "paragraph",
"runs": [
{"text": "This is "},
{"text": "bold text", "is_bold": True},
{"text": " in a paragraph."},
],
},
],
},
)
# result["data"]["buffer"] is base64-encoded, result["data"]["mime_type"] is "application/pdf"import il "github.com/iterationlayer/sdk-go"
client := il.NewClient("YOUR_API_KEY")
result, err := client.GenerateDocument(il.GenerateDocumentRequest{
Format: "pdf",
Document: il.DocumentDefinition{
Metadata: il.DocumentMetadata{Title: "Quarterly Report", Author: "Acme Corp", Language: "en"},
Page: il.DocumentPage{
Size: il.DocPageSize{Preset: "A4"},
Margins: il.DocMargins{TopInPt: 72, RightInPt: 72, BottomInPt: 72, LeftInPt: 72},
},
Styles: il.DocumentStyles{
Text: il.TextStyle{FontFamily: "Helvetica", FontSizeInPt: 12, Color: "#000000", LineHeight: 1.5},
Headline: il.HeadlineStyle{FontFamily: "Helvetica", FontSizeInPt: 24, Color: "#111111", SpacingBeforeInPt: 12, SpacingAfterInPt: 6, IsBold: true},
},
Content: []il.ContentBlock{
il.NewHeadlineBlock("h1", "Quarterly Report"),
il.ParagraphBlock{Type: "paragraph", Runs: []il.TextRun{
{Text: "This is "},
{Text: "bold text", IsBold: true},
{Text: " in a paragraph."},
}},
},
},
})
// result.Data.Buffer is base64-encoded, result.Data.MimeType is "application/pdf"Document Structure
The top-level request has the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
format |
string | Yes |
Output format: pdf, docx, epub, or pptx |
document |
object | Yes | The full document definition (see below) |
webhook_url |
string | No | HTTPS URL to receive results asynchronously. If provided, returns 201 immediately. See Webhooks. |
Async Mode
Add a webhook_url parameter to process the request in the background. The API returns 201 Accepted immediately and delivers the result to your webhook URL when processing completes. See Webhooks for payload format and retry behavior.
The document object contains:
| Field | Type | Required | Description |
|---|---|---|---|
metadata |
object | Yes | Document metadata (title, author, language) |
page |
object | Yes | Page size and margins |
fonts |
array | No | Custom font definitions (base64-encoded font files) |
styles |
object | Yes | Document-wide default styles |
header |
array | No | Content blocks rendered at the top of every page |
footer |
array | No | Content blocks rendered at the bottom of every page |
header_distance_from_edge_in_pt |
float | No | Distance from the page edge to the header |
footer_distance_from_edge_in_pt |
float | No | Distance from the page edge to the footer |
content |
array | Yes | Ordered list of content blocks |
Metadata
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | Yes | Document title (min 1 character) |
author |
string | No | Document author |
language |
string | No |
Language code (min 2 characters, e.g., "en") |
{
"metadata": {
"title": "Annual Report 2025",
"author": "Acme Corp",
"language": "en"
}
}
Page Settings
The page object controls page dimensions, margins, and background color.
| Field | Type | Required | Description |
|---|---|---|---|
size |
object | Yes | Page size (preset or custom dimensions) |
margins |
object | Yes | Page margins |
background_color |
string | No |
Hex color for the page background (e.g., #FFFFFF) |
Page size – use a preset or provide custom dimensions:
| Field | Type | Required | Description |
|---|---|---|---|
preset |
string | No |
One of: A0-A6, B0-B6, Letter, Legal, Tabloid, Executive, Statement |
width_in_pt |
float | No | Custom width in points (>= 1) |
height_in_pt |
float | No | Custom height in points (>= 1) |
Use either preset or both width_in_pt and height_in_pt.
Margins:
| Field | Type | Required | Description |
|---|---|---|---|
top_in_pt |
float | Yes | Top margin in points (>= 0) |
right_in_pt |
float | Yes | Right margin in points (>= 0) |
bottom_in_pt |
float | Yes | Bottom margin in points (>= 0) |
left_in_pt |
float | Yes | Left margin in points (>= 0) |
{
"page": {
"size": { "preset": "A4" },
"margins": {
"top_in_pt": 72.0,
"right_in_pt": 72.0,
"bottom_in_pt": 72.0,
"left_in_pt": 72.0
},
"background_color": "#FFFFFF"
}
}
Custom Fonts
Upload custom fonts as base64-encoded buffers. Each font definition requires a name, weight, style, and the font file data.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Font family name (min 1 character) |
weight |
string | Yes |
One of: thin, extralight, light, regular, medium, semibold, bold, extrabold, black |
style |
string | Yes |
One of: normal, italic |
buffer |
string | Yes | Base64-encoded font file (TTF, OTF, WOFF, or WOFF2) |
{
"fonts": [
{
"name": "CustomFont",
"weight": "regular",
"style": "normal",
"buffer": "<base64-encoded-font-file>"
},
{
"name": "CustomFont",
"weight": "bold",
"style": "normal",
"buffer": "<base64-encoded-font-file>"
}
]
}
Style System
The style system uses a two-layer merge approach: you define document-wide default styles in the styles object, and optionally override any property per content block using the block’s styles field.
The styles object contains defaults for all block types:
| Field | Type | Required | Description |
|---|---|---|---|
text |
object | Yes | Default text/paragraph style |
headline |
object | Yes | Default headline style |
link |
object | Yes | Default link style |
list |
object | Yes | Default list style |
table |
object | Yes | Default table style |
grid |
object | Yes | Default grid style |
separator |
object | Yes | Default separator style |
image |
object | Yes | Default image style |
Text Style
| Field | Type | Required | Description |
|---|---|---|---|
font_family |
string | Yes | Font family name |
font_size_in_pt |
float | Yes | Font size in points (>= 1) |
line_height |
float | Yes | Line height multiplier (>= 0.5) |
color |
string | Yes |
Text color as hex (e.g., #000000) |
is_bold |
boolean | No | Bold text |
is_italic |
boolean | No | Italic text |
Headline Style
| Field | Type | Required | Description |
|---|---|---|---|
font_family |
string | Yes | Font family name |
font_size_in_pt |
float | Yes | Font size in points (>= 1) |
color |
string | Yes | Headline color as hex |
spacing_before_in_pt |
float | Yes | Space before the headline (>= 0) |
spacing_after_in_pt |
float | Yes | Space after the headline (>= 0) |
is_bold |
boolean | No | Bold text |
is_italic |
boolean | No | Italic text |
Link Style
| Field | Type | Required | Description |
|---|---|---|---|
color |
string | Yes | Link color as hex |
is_underlined |
boolean | No | Whether links are underlined |
List Style
| Field | Type | Required | Description |
|---|---|---|---|
text_style |
object | Yes | Text style for list items (same fields as text style) |
marker_color |
string | Yes | Bullet/number color as hex |
marker_gap_in_pt |
float | Yes | Gap between marker and text (>= 0) |
Table Style
| Field | Type | Required | Description |
|---|---|---|---|
header |
object | Yes |
Header row style: background_color, text_color, font_size_in_pt, is_bold |
body |
object | Yes |
Body row style: background_color, text_color, font_size_in_pt |
border |
object | Yes |
Border style with outer (top, right, bottom, left) and inner (horizontal, vertical) – each with color and width_in_pt |
Grid Style
| Field | Type | Required | Description |
|---|---|---|---|
background_color |
string | Yes | Grid background color as hex |
border_color |
string | Yes | Grid border color as hex |
border_width_in_pt |
float | Yes | Border width in points (>= 0) |
gap_in_pt |
float | Yes | Gap between columns in points (>= 0) |
Separator Style
| Field | Type | Required | Description |
|---|---|---|---|
color |
string | Yes | Line color as hex |
thickness_in_pt |
float | Yes | Line thickness in points (>= 0) |
spacing_before_in_pt |
float | Yes | Space before the separator (>= 0) |
spacing_after_in_pt |
float | Yes | Space after the separator (>= 0) |
Image Style
| Field | Type | Required | Description |
|---|---|---|---|
border_color |
string | Yes | Border color as hex |
border_width_in_pt |
float | Yes | Border width in points (>= 0) |
Content Blocks
Content blocks are the building blocks of your document. They are provided as an ordered array in the content field and rendered sequentially.
paragraph
A text paragraph composed of one or more rich text runs. Each run can have independent bold, italic, and link formatting. Alternatively, use markdown for simple Markdown-formatted text.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"paragraph" |
runs |
array | No | Array of text runs (see below) |
markdown |
string | No |
Markdown-formatted text (alternative to runs) |
text_alignment |
string | No |
One of: left, center, right, justify |
styles |
object | No | Text style overrides |
Text run:
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | The text content (min 1 character) |
is_bold |
boolean | No | Bold formatting |
is_italic |
boolean | No | Italic formatting |
link_url |
string | No | Makes the run a hyperlink |
{
"type": "paragraph",
"runs": [
{ "text": "Visit our " },
{ "text": "website", "is_bold": true, "link_url": "https://example.com" },
{ "text": " for details." }
],
"text_alignment": "justify"
}
headline
A heading from level h1 to h6. Optionally participates in the table of contents.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"headline" |
level |
string | Yes |
One of: h1, h2, h3, h4, h5, h6 |
text |
string | Yes | Headline text (min 1 character) |
styles |
object | No | Headline style overrides |
table_of_contents |
object | No | Table of contents settings (see below) |
Table of contents options:
| Field | Type | Required | Description |
|---|---|---|---|
is_included |
boolean | No | Whether this headline appears in the TOC |
label_override |
string | No | Custom label in the TOC (min 1 character) |
level_override |
string | No |
Override the TOC indentation level (h1-h6) |
{
"type": "headline",
"level": "h2",
"text": "Chapter 1: Introduction",
"table_of_contents": { "is_included": true }
}
image
An inline image with specified dimensions.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"image" |
buffer |
string | Yes | Base64-encoded image data |
width_in_pt |
float | Yes | Display width in points (>= 1) |
height_in_pt |
float | Yes | Display height in points (>= 1) |
fit |
string | No |
One of: cover, contain |
styles |
object | No | Image style overrides |
{
"type": "image",
"buffer": "<base64-encoded-image>",
"width_in_pt": 400.0,
"height_in_pt": 300.0,
"fit": "contain"
}
table
A data table with optional header row, column widths, and cell-level formatting.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"table" |
header |
object | No |
Header row with cells array |
rows |
array | Yes |
Array of row objects, each with a cells array |
column_widths_in_percent |
array | No | Column width percentages (each >= 1) |
styles |
object | No | Table style overrides |
Table cell:
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | Cell content (min 1 character) |
horizontal_alignment |
string | No |
One of: left, center, right |
column_span |
integer | No | Number of columns to span (>= 1) |
row_span |
integer | No | Number of rows to span (>= 1) |
styles |
object | No |
Cell-level style overrides: background_color, text_color, font_size_in_pt, is_bold, is_italic |
{
"type": "table",
"header": {
"cells": [
{ "text": "Product" },
{ "text": "Qty", "horizontal_alignment": "right" },
{ "text": "Price", "horizontal_alignment": "right" }
]
},
"rows": [
{
"cells": [
{ "text": "Widget A" },
{ "text": "100", "horizontal_alignment": "right" },
{ "text": "$9.99", "horizontal_alignment": "right" }
]
}
],
"column_widths_in_percent": [50.0, 25.0, 25.0]
}
grid
A 12-column grid layout for placing content blocks side by side. Each column specifies a column_span (1-12) and contains its own array of content blocks.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"grid" |
columns |
array | Yes | Array of column objects (see below) |
horizontal_alignment |
string | No |
One of: left, center, right |
vertical_alignment |
string | No |
One of: top, center, bottom |
styles |
object | No | Grid style overrides |
Grid column:
| Field | Type | Required | Description |
|---|---|---|---|
column_span |
integer | Yes | Number of columns to span (1-12) |
horizontal_alignment |
string | No |
One of: left, center, right |
vertical_alignment |
string | No |
One of: top, center, bottom |
blocks |
array | Yes | Content blocks within the column |
{
"type": "grid",
"columns": [
{
"column_span": 6,
"blocks": [
{ "type": "headline", "level": "h3", "text": "Left Column" },
{ "type": "paragraph", "runs": [{ "text": "Content on the left." }] }
]
},
{
"column_span": 6,
"blocks": [
{ "type": "headline", "level": "h3", "text": "Right Column" },
{ "type": "paragraph", "runs": [{ "text": "Content on the right." }] }
]
}
]
}
list
An ordered or unordered list with support for nested items.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"list" |
variant |
string | Yes |
"ordered" or "unordered" |
items |
array | Yes | Array of list items (see below) |
styles |
object | No | List style overrides |
List item:
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | Item text (min 1 character) |
children |
array | No | Nested list items |
{
"type": "list",
"variant": "unordered",
"items": [
{ "text": "First item" },
{
"text": "Second item",
"children": [
{ "text": "Nested item A" },
{ "text": "Nested item B" }
]
},
{ "text": "Third item" }
]
}
table-of-contents
An auto-generated table of contents built from headline blocks that have table_of_contents.is_included set to true.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"table-of-contents" |
levels |
array | Yes |
Which headline levels to include (e.g., ["h1", "h2", "h3"]) |
leader |
string | Yes |
Leader style between title and page number: "dots" or "none" |
text_alignment |
string | No |
One of: left, center, right, justify |
styles |
object | No | Text style overrides |
{
"type": "table-of-contents",
"levels": ["h1", "h2", "h3"],
"leader": "dots"
}
page-break
Forces a page break at this point. In PPTX output, each page-break creates a new slide.
{ "type": "page-break" }
separator
A horizontal rule/divider line.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"separator" |
styles |
object | No | Separator style overrides |
{ "type": "separator" }
page-number
Renders the current page number. Only valid in headers and footers.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"page-number" |
text_alignment |
string | No |
One of: left, center, right, justify |
styles |
object | No | Text style overrides |
{ "type": "page-number", "text_alignment": "center" }
qr-code
Renders a QR code from a string value.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"qr-code" |
value |
string | Yes | Data to encode (min 1 character) |
width_in_pt |
integer | Yes | Width in points (>= 1) |
height_in_pt |
integer | Yes | Height in points (>= 1) |
fg_hex_color |
string | Yes |
Foreground color as hex (e.g., #000000) |
bg_hex_color |
string | Yes |
Background color as hex (e.g., #FFFFFF) |
{
"type": "qr-code",
"value": "https://example.com",
"width_in_pt": 100,
"height_in_pt": 100,
"fg_hex_color": "#000000",
"bg_hex_color": "#FFFFFF"
}
barcode
Renders a barcode in one of several standard formats.
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | Yes |
"barcode" |
value |
string | Yes | Data to encode (min 1 character) |
format |
string | Yes |
One of: code128, ean13, ean8, code39, itf, codabar |
width_in_pt |
integer | Yes | Width in points (>= 1) |
height_in_pt |
integer | Yes | Height in points (>= 1) |
fg_hex_color |
string | Yes | Foreground color as hex |
bg_hex_color |
string | Yes | Background color as hex |
{
"type": "barcode",
"value": "1234567890128",
"format": "ean13",
"width_in_pt": 200,
"height_in_pt": 80,
"fg_hex_color": "#000000",
"bg_hex_color": "#FFFFFF"
}
Headers and Footers
Headers and footers accept the same content block types as the document body, with the addition of page-number and the exclusion of table-of-contents and page-break. They are rendered on every page.
Supported block types in headers/footers: paragraph, headline, image, table, grid, list, page-number, separator, qr-code, barcode
{
"header": [
{
"type": "paragraph",
"runs": [{ "text": "Acme Corp -- Confidential" }],
"text_alignment": "right"
}
],
"footer": [
{
"type": "grid",
"columns": [
{
"column_span": 6,
"blocks": [
{ "type": "paragraph", "runs": [{ "text": "Acme Corp" }] }
]
},
{
"column_span": 6,
"blocks": [
{ "type": "page-number", "text_alignment": "right" }
]
}
]
}
],
"header_distance_from_edge_in_pt": 36.0,
"footer_distance_from_edge_in_pt": 36.0
}
PPTX Notes
When generating PPTX (PowerPoint) output:
-
The initial content before the first
page-breakbecomes the first slide. -
Each
page-breakblock creates a new slide. - All content blocks between page breaks are placed on the same slide.
- Page size settings map to slide dimensions.
Format Compatibility
Not all features are supported equally across output formats. The table below shows per-format feature support:
| Feature | DOCX | PPTX | EPUB | |
|---|---|---|---|---|
| Paragraph (rich text) | ✅ | ✅ | ✅ | ✅ |
| Headline (h1-h6 sizes) | ✅ | ✅ | ✅ | ✅ |
| Image | ✅ | ✅ | ✅ | ✅ |
| QR Code | ✅ | ✅ | ✅ | ✅ |
| Barcode | ✅ | ✅ | ✅ | ✅ |
| Table | ✅ | ✅ | ✅ | ✅ |
| Grid (columns) | ✅ | ✅ | ✅ | ✅ |
| List (ordered/unordered) | ✅ | ✅ | ✅ | ✅ |
| Nested lists | ✅ | ✅ | ✅ | ✅ |
| Table of Contents | ✅ | ✅ | ✅ | ✅ |
| Page Break | ✅ | ✅ | ✅ | ✅ |
| Separator | ✅ | ✅ | ✅ | ✅ |
| Page Number | ✅ | ✅ | ✅ | ❌ |
| Header / Footer | ✅ | ✅ | ❌ | ❌ |
| Custom Fonts | ✅ | ✅ | ✅ | ✅ |
| Page Background Color | ✅ | ✅ | ✅ | ❌ |
| Table Cell Backgrounds | ✅ | ✅ | ✅ | ✅ |
Error Responses
| Status | Description |
|---|---|
| 400 | Invalid request (validation errors, missing required fields, invalid base64 font data) |
| 401 | Missing or invalid API key |
| 422 | Processing error (document rendering failure) |
| 429 | Rate limit exceeded |