API Konwersji Ebookow do PDF - Profesjonalne Generowanie PDF Ksiazek

Przeksztalc tresc ksiazek w profesjonalnie sformatowane pliki PDF z elegancka typografia, automatyczna numeracja stron, spisem tresci i ponad 150 opcjami personalizacji.

Co możesz zrobić?
Profesjonalne PDF Ksiazek

Konwertuj powiesci, rekopisy i tresci wielorozdzialowe na gotowe do druku PDF z elegancka typografia i automatyczna numeracja stron.

Jakosc Produkcyjna

Wysokiej jakosci wyjscie A4/A5/Letter ze strona tytulowa, strona adnotacji, spisem tresci i strona praw autorskich. Do 500 stron.

Ponad 150 Opcji Personalizacji

Kontroluj czcionki, odstepy, marginesy, kolory i uklad. Marginesy dostosowuja sie automatycznie na podstawie rozmiaru czcionki.

99.9 % Dostępność
4585.9ms Odpowiedź
5 req/s
2 Kredyty / żądanie

Convert to PDF

POST https://api.yeb.to/v1/ebooks/pdf/convert-from-file
Parametr Typ Wymagany Opis
api_key string Yes Your API authentication key (send in Authorization header or as parameter)
file_url string Yes Public URL to JSON file containing book data (metadata, chapters, options)
Why file URL? POST request size limits can truncate large book content. This endpoint accepts a URL to a JSON file hosted on your server, avoiding size restrictions.

JSON File Structure

Your JSON file at file_url should contain:

Parametr Typ Wymagany Opis
template string Yes Template name: elegant-novel
metadata object Yes Book metadata (title, author, etc.)
metadata.title string Yes Book title
metadata.author string Yes Author name
metadata.description string Optional Book description/blurb (supports multiple paragraphs with \n\n)
metadata.year integer Optional Publication year (default: current year)
metadata.publisher string Optional Publisher name
metadata.isbn string Optional ISBN number
metadata.series string Optional Book series name (shown on cover)
metadata.subtitle string Optional Book subtitle (shown on cover)
metadata.cover_image string Optional Cover image URL
chapters array Yes Array of chapter objects (min: 1)
chapters[].title string Yes Chapter title
chapters[].content string Yes Chapter content (supports multiple paragraphs with \n\n)
options object Optional Customization options (150+ available)
options.format string Optional A4 | A5 | Letter (default: A4)
options.chapter_content_font_size string Optional Font size (e.g., "12pt", "16pt") - margins auto-adjust (default: 12pt)
options.chapter_content_line_height string Optional Line height (e.g., "1.6", "1.8") (default: 1.6)
options.meta_fields array Optional Custom metadata fields: [{"key":"genre","label":"Genre"}]
texts object Optional Text customizations (e.g., copyright_text, publisher_text)

JSON File Example

1. Create book.json file on your server:
{
  "template": "elegant-novel",
  "metadata": {
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald",
    "subtitle": "A Novel of the Jazz Age",
    "series": "American Classics",
    "description": "A story of decadence and excess...\n\nSet in the summer of 1922...",
    "year": 1925,
    "publisher": "Charles Scribner's Sons",
    "genre": "Literary Fiction",
    "themes": "American Dream, wealth, love, betrayal",
    "language_name": "English",
    "edition": "First Edition"
  },
  "chapters": [
    {
      "title": "Chapter I",
      "content": "In my younger and more vulnerable years...\n\nAnd, after boasting this way..."
    },
    {
      "title": "Chapter II",
      "content": "About half way between West Egg and New York..."
    }
  ],
  "options": {
    "format": "A4",
    "chapter_content_font_size": "14pt",
    "chapter_content_line_height": "1.7",
    "chapter_title_font_size": "28pt",
    "meta_fields": [
      {"key": "genre", "label": "Genre"},
      {"key": "themes", "label": "Themes"},
      {"key": "language_name", "label": "Language"},
      {"key": "edition", "label": "Edition"}
    ]
  },
  "texts": {
    "annotation_heading_text": "About this book",
    "copyright_text": "Copyright © {year} {author}. All rights reserved.",
    "publisher_text": "Published by {publisher}"
  }
}
2. Upload to your server (e.g., https://yourdomain.com/books/book.json)
3. Call API with file_url:

Integration Examples

curl -X POST https://api.yeb.to/v1/ebooks/pdf/convert-from-file \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/books/book.json"}'
const response = await fetch('https://api.yeb.to/v1/ebooks/pdf/convert-from-file', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    file_url: 'https://yourdomain.com/books/book.json'
  })
});
const result = await response.json();
console.log(result.pdf_url);
$response = Http::withHeaders([
    'Authorization' => 'Bearer YOUR_API_KEY'
])->post('https://api.yeb.to/v1/ebooks/pdf/convert-from-file', [
    'file_url' => 'https://yourdomain.com/books/book.json'
]);
$pdf_url = $response->json()['pdf_url'];
import requests

headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "file_url": "https://yourdomain.com/books/book.json"
}
r = requests.post('https://api.yeb.to/v1/ebooks/pdf/convert-from-file', json=payload, headers=headers)
print(r.json()['pdf_url'])

Response Examples

{
  "success": true,
  "pdf_url": "https://yeb.to/storage/ebooks/ebook_abc123.pdf",
  "pdf_size": 860031,
  "template": "elegant-novel",
  "generated_at": "2026-01-07T14:30:00+02:00",
  "response_code": 200,
  "response_time_ms": 4773
}
{
  "error": "Metadata field 'title' is required",
  "response_code": 400,
  "response_time_ms": 45
}

Kody odpowiedzi

KodOpis
200 SuccessŻądanie przetworzone OK.
400 Bad RequestWalidacja danych wejściowych nie powiodła się.
401 UnauthorizedBrakujący / nieprawidłowy klucz API.
403 ForbiddenKlucz nieaktywny lub niedozwolony.
429 Rate LimitZbyt wiele żądań.
500 Server ErrorNieoczekiwany błąd.
Customization

The elegant-novel template supports 150+ customization options including:

  • Font sizes, families, and weights
  • Line heights and spacing
  • Colors and opacity
  • Margins and padding
  • Custom Google Fonts
  • Meta fields for annotation page
  • Auto-adjusting page margins
Full Customization Guide

ebooks/pdf/convert-from-file

ebooks/pdf/convert-from-file 2.0000 credits

Parameters

API Key
header · string · required
File URL
body · string · required

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

API Konwersji Ebookow do PDF - Profesjonalne Generowanie PDF Ksiazek — Practical Guide

A hands-on guide to API Konwersji Ebookow do PDF - Profesjonalne Generowanie PDF Ksiazek: converting book content into professional PDFs with customizable typography, automatic page numbering, table of contents, and elegant formatting. Perfect for ebook publishing, document generation, and print-ready manuscripts.

#What Ebooks to PDF solves

Send structured book content (metadata, chapters) and receive a professionally formatted PDF with automatic page numbering, table of contents, cover page, and annotation page. Ideal for self-publishing, manuscript generation, print-on-demand, and document archival. Supports 150+ customization options including fonts, spacing, margins that auto-adjust based on font size.

#Endpoint & when to use it

#POST https://api.yeb.to/v1/ebooks/pdf/convert-from-file

  • Best for: Converting novels, short stories, manuals, reports, or any multi-chapter content into print-ready PDFs.
  • How it works: We render your content using the elegant-novel template with Blade + Puppeteer/Chromium for pixel-perfect output.
  • Output format: High-quality A4/A5/Letter PDFs with professional typography and automatic layout.
  • Processing time: ~2-5 seconds depending on content length and customization complexity.

#Quick start

Step 1: Create a JSON file with your book data and upload it to a public URL

# book.json (minimal example)
{
  "template": "elegant-novel",
  "metadata": {
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald"
  },
  "chapters": [
    {
      "title": "Chapter I",
      "content": "In my younger and more vulnerable years..."
    }
  ]
}

Step 2: Call the API with the file URL

curl -X POST "https://api.yeb.to/v1/ebooks/pdf/convert-from-file" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/books/book.json"}'
Why file_url? Large books can exceed POST size limits. By hosting your JSON file and sending only the URL, you avoid size restrictions and can generate books up to 500 pages.

#Parameters that actually matter

ParamRequiredWhat to pass in practiceWhy it matters
api_key Yes Send in Authorization header: Bearer YOUR_KEY. Never expose in frontend code. Auth & credit tracking.
file_url Yes Public URL to your JSON file containing book data (template, metadata, chapters, options). Avoids POST size limits for large books.

#JSON file structure

Your JSON file at file_url must contain:

FieldRequiredWhat to passWhy it matters
template Yes Currently only elegant-novel is supported. Determines the PDF layout style.
metadata Yes Object with title and author at minimum. Can include description, year, publisher, etc. Populates cover page and document properties.
chapters Yes Array of objects, each with title and content. Minimum 1 chapter required. The actual book content to render.
options No 150+ customization options for fonts, spacing, colors, margins, etc. Fine-tune typography and layout.
texts No Override default text labels (e.g., copyright notice, publisher text). Localization and branding.

#Key metadata fields

FieldUse it forNotes
titleBook title (required)Shown on cover and headers.
authorAuthor name (required)Shown on cover and headers.
descriptionBook blurb/synopsisAppears on annotation page. Use \n\n for multiple paragraphs.
subtitleBook subtitleOptional subtitle on cover page.
seriesSeries nameShown on cover above title.
yearPublication yearDefaults to current year if omitted.
publisherPublisher nameShown on cover footer and copyright page.
isbnISBN numberOptional, shown on copyright page.
cover_imageCover illustration URLImage displayed on cover page.
Custom fieldsGenre, themes, etc.Add any custom fields; use options.meta_fields to display them.

#Chapter formatting

Each chapter object requires:

  • title — The chapter heading (e.g., "Chapter I", "Prologue").
  • content — The chapter text. Use \n\n to separate paragraphs.

Optional chapter fields:

  • subtitle — Chapter subtitle (shown below chapter title).
  • number — Chapter number (for display if using chapter_number_format).

#Customization options that matter

#Typography & spacing

OptionDefaultUse case
chapter_content_font_size12ptMain text size. Margins auto-adjust when changed (14pt, 16pt, etc.).
chapter_content_line_height1.6Line spacing. Higher values (1.8, 2.0) improve readability.
chapter_title_font_size28ptChapter heading size.
chapter_content_text_indent15ptFirst line indent for paragraphs.
chapter_content_paragraph_spacingAutoSpace between paragraphs (auto-calculated based on font size).

#Page format & orientation

OptionValuesUse case
formatA4, A5, LetterPage size. A4 is default (210×297mm).
orientationportrait, landscapePage orientation. Portrait is default.

#Custom metadata fields

Display additional information on the annotation page:

"metadata": {
  "title": "My Book",
  "author": "Jane Doe",
  "genre": "Science Fiction",
  "themes": "AI, humanity, future",
  "language_name": "English"
},
"options": {
  "meta_fields": [
    {"key": "genre", "label": "Genre"},
    {"key": "themes", "label": "Themes"},
    {"key": "language_name", "label": "Language"}
  ]
}

Any field in metadata can be displayed by adding it to meta_fields.

#Toggle sections on/off

OptionDefaultDescription
include_covertrueShow cover page with title, author, publisher.
include_annotationtrueShow annotation page with description and metadata.
include_copyrighttrueShow copyright page at the end.
chapter_show_titletrueShow chapter titles.
chapter_show_headertrueShow running headers on chapter pages.

#Reading & acting on responses

{
  "success": true,
  "pdf_url": "https://yeb.to/storage/ebooks/ebook_abc123.pdf",
  "pdf_size": 860031,
  "template": "elegant-novel",
  "generated_at": "2026-01-07T14:30:00+02:00",
  "response_code": 200,
  "response_time_ms": 4773
}
  • pdf_url — Direct download URL. Files are kept for 24 hours, then auto-deleted.
  • pdf_size — File size in bytes. Useful for bandwidth estimation.
  • template — Template used for generation (currently only elegant-novel).
  • generated_at — ISO 8601 timestamp. Use for cache invalidation or logging.
  • response_time_ms — Processing time. Typically 2-5 seconds for standard books.

#Typical errors & how to fix

{ "error": "Metadata field 'title' is required", "response_code": 400 }
{ "error": "At least one chapter is required", "response_code": 400 }
{ "error": "Template 'unknown' not found", "response_code": 404 }
  • 400 validation error: Check that metadata.title, metadata.author, and at least one chapter are provided.
  • 401 invalid key: Verify your API key is correct and has sufficient credits.
  • 404 template not found: Use elegant-novel as the template name.
  • 500 generation failed: Check for malformed JSON or extremely large content. Contact support if persists.

#Troubleshooting & field notes

  1. File URL not accessible: Ensure your JSON file is publicly accessible (no auth required). Test by opening the URL in a browser - it should download/display the JSON. Check CORS headers if serving from a different domain.
  2. Invalid JSON format: Validate your JSON file before uploading. Use a JSON validator or jq to check syntax. Common errors: trailing commas, unquoted keys, smart quotes instead of straight quotes.
  3. Text overlaps page numbers: The API auto-adjusts margins based on chapter_content_font_size. If using very large fonts (>20pt), verify the output. Margins scale automatically: 12pt = 22mm bottom, 16pt = 27mm bottom, 20pt = 32mm bottom.
  4. Fonts not loading: Ensure options.include_fonts is true (default). For custom fonts, use options.custom_fonts with Google Fonts URLs.
  5. Paragraphs not separating: Use \n\n (double newline) in chapter content to separate paragraphs, not single \n.
  6. Custom metadata not showing: Add the field to both metadata object AND options.meta_fields array with matching key.
  7. Processing timeout: Very long books (>500 pages) may timeout. Processing time: 10-50 pages = 5-15s, 50-200 pages = 30-60s, 200-500 pages = 2-3 minutes. Consider splitting into volumes if needed.
  8. PDF file expires: PDFs are auto-deleted after 24 hours. Download immediately after generation or store on your own CDN.
  9. Inconsistent spacing: Use the same chapter_content_line_height value for all requests to maintain consistency across documents.

#Best practices

  • Host JSON files reliably: Use a CDN or reliable hosting for your JSON files. Ensure files remain accessible for the duration of the API call (2-3 minutes for large books).
  • Validate JSON before upload: Use a JSON validator to catch syntax errors. Invalid JSON will fail immediately with a 400 error.
  • Use descriptive filenames: Name files clearly (e.g., book-{id}-{timestamp}.json) for easier debugging and tracking.
  • Cache responses: Same file_url = same output. Cache PDF URLs for 24h to avoid regenerating identical documents.
  • Pre-validate content: Check for required fields (title, author, chapters) before creating JSON files.
  • Use consistent font sizes: Pick one base font size (12pt, 14pt, or 16pt) for your brand and stick with it across all books.
  • Store original JSON: Keep the JSON file for regeneration if needed. PDFs expire after 24h but JSON can be reused indefinitely.
  • Test with real content: Short test chapters may not reveal pagination issues. Use realistic chapter lengths (2000+ words).
  • Monitor response times: Small books: 5-15s, Medium: 30-60s, Large: 2-3 minutes. If consistently slower, check file_url accessibility.
  • Handle 5xx errors gracefully: Implement retry logic with exponential backoff (wait 5s, then 10s, then 20s) for server errors.

#Real-world examples

Example 1: Self-publishing platform

Create mystery-novel.json:

{
  "template": "elegant-novel",
  "metadata": {
    "title": "Murder on the Orient Express",
    "author": "Agatha Christie",
    "series": "Hercule Poirot Mysteries",
    "description": "A luxurious train journey turns deadly...",
    "year": 1934,
    "publisher": "Collins Crime Club",
    "genre": "Mystery",
    "themes": "Murder, investigation, justice"
  },
  "chapters": [
    {"title": "Part I: The Facts", "content": "It was five o'clock on a winter's morning..."},
    {"title": "Part II: The Evidence", "content": "In a small room..."}
  ],
  "options": {
    "format": "A5",
    "chapter_content_font_size": "11pt",
    "meta_fields": [
      {"key": "genre", "label": "Genre"},
      {"key": "themes", "label": "Themes"}
    ]
  }
}

Call API:

curl -X POST "https://api.yeb.to/v1/ebooks/pdf/convert-from-file" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/books/mystery-novel.json"}'

Example 2: Technical manual with custom branding

Create tech-manual.json:

{
  "template": "elegant-novel",
  "metadata": {
    "title": "Product Installation Guide",
    "author": "TechCorp Engineering",
    "publisher": "TechCorp Inc.",
    "year": 2026
  },
  "chapters": [
    {"title": "1. System Requirements", "content": "Before installation..."},
    {"title": "2. Installation Steps", "content": "Follow these steps..."},
    {"title": "3. Troubleshooting", "content": "If you encounter issues..."}
  ],
  "options": {
    "chapter_content_font_size": "12pt",
    "include_annotation": false,
    "chapter_show_number": true
  },
  "texts": {
    "copyright_text": "© {year} TechCorp Inc. All rights reserved.",
    "chapter_number_format": "Section {n}"
  }
}

Call API:

curl -X POST "https://api.yeb.to/v1/ebooks/pdf/convert-from-file" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/manuals/tech-manual.json"}'

#API Changelog

2026-01-07
Auto-adjusting margins: Page margins now automatically scale based on chapter_content_font_size. Larger fonts get more top/bottom spacing to prevent overlap with headers and page numbers. Fixed: Text no longer overlaps page numbers on multi-page chapters.
2026-01-06
Custom metadata fields: Added options.meta_fields to display custom metadata on annotation page. Fixed: Custom metadata fields (genre, themes, etc.) now properly render when specified.
2026-01-05
Cleanup command: Added automatic cleanup of PDFs older than 24 hours. Files are now auto-deleted to save storage. Performance: Improved Puppeteer rendering speed by 30% for documents >50 pages.
2025-12-20
Typography improvements: Added 150+ customization options for fonts, spacing, colors, and margins. Google Fonts support with PT Serif, Bad Script, and Marck Script as defaults.
2025-12-01
Public v1 release with elegant-novel template. Support for cover page, annotation page, automatic page numbering, and copyright page.

Często zadawane pytania

Oferujemy szablon Elegant Novel - profesjonalny uklad ksiazki ze strona tytulowa, strona adnotacji, automatyczna numeracja stron i biezacymi naglowkami. Idealny do powiesci i tresci narracyjnych.

A4 (210x297mm), A5 (148x210mm) i Letter (215,9x279,4mm), wszystkie w orientacji pionowej.

Tak! Masz ponad 150 opcji personalizacji. Marginesy dostosowuja sie automatycznie na podstawie rozmiaru czcionki.

Mozesz generowac ksiazki do 500 stron. Krotkie ksiazki (10-50 stron) 5-15 sekund, srednie (50-200) 30-60 sekund, duze (200-500) 2-3 minuty.

Kazde generowanie PDF kosztuje 2 kredyty niezaleznie od liczby stron. Kredyty mozna kupic w pakietach od $10.

API jest ograniczone do 5 zadan na sekunde na klucz API.

Wygenerowane pliki PDF sa automatycznie usuwane po 24 godzinach. Pobierz PDF natychmiast lub przechowuj go na wlasnym CDN.

Wymagane: tytul i autor. Opcjonalne: opis, podtytul, nazwa serii, rok, wydawca, ISBN, obraz okladki i pola niestandardowe przez meta_fields.

Tak. Każde żądanie, nawet te zakończone błędem, zużywa kredyty. Twoje kredyty są powiązane z liczbą żądań, niezależnie od sukcesu lub niepowodzenia. Jeśli błąd jest wyraźnie spowodowany problemem platformy po naszej stronie, przywrócimy dotknięte kredyty (bez zwrotów gotówkowych).

Skontaktuj się z nami pod adresem [email protected]. Traktujemy opinie poważnie—jeśli Twój raport o błędzie lub prośba o funkcję jest sensowna, możemy szybko naprawić lub ulepszyć API i przyznać Ci 50 darmowych kredytów w podziękowaniu.

Zależy od API, a czasem nawet od endpointu. Niektóre endpointy korzystają z danych ze źródeł zewnętrznych, które mogą mieć surowsze limity. Wprowadzamy też limity, aby zapobiec nadużyciom i utrzymać stabilność platformy. Sprawdź dokumentację, aby poznać konkretny limit dla każdego endpointu.

Działamy w systemie kredytowym. Kredyty to przedpłacone, bezzwrotne jednostki, które wydajesz na wywołania API i narzędzia. Kredyty są zużywane metodą FIFO (najstarsze najpierw) i są ważne przez 12 miesięcy od daty zakupu. Panel wyświetla datę każdego zakupu i jego wygaśnięcia.

Tak. Wszystkie zakupione kredyty (w tym ułamkowe salda) są ważne przez 12 miesięcy od zakupu. Niewykorzystane kredyty automatycznie wygasają i są trwale usuwane na koniec okresu ważności. Wygasłych kredytów nie można przywrócić ani zamienić na gotówkę lub inną wartość. Reguła przejściowa: kredyty zakupione przed 22 wrz. 2025 traktowane są jako zakupione 22 wrz. 2025 i wygasają 22 wrz. 2026 (chyba że przy zakupie podano wcześniejszą datę wygaśnięcia).

Tak—w ramach okresu ważności. Niewykorzystane kredyty pozostają dostępne i są przenoszone z miesiąca na miesiąc, aż wygasną 12 miesięcy po zakupie.

Kredyty są bezzwrotne. Kupuj tylko to, czego potrzebujesz—zawsze możesz doładować później. Jeśli błąd platformy spowoduje nieudane obciążenie, możemy przywrócić dotknięte kredyty po zbadaniu sprawy. Bez zwrotów gotówkowych.

Ceny są ustalane w kredytach, nie w dolarach. Każdy endpoint ma własną cenę—zobacz odznakę „Kredyty / żądanie" powyżej. Zawsze będziesz dokładnie wiedzieć, ile wydajesz.
← Powrót do API