# oJo > Save a template. Fill it with data from anywhere. oJo turns an HTML template and your JSON data into a PDF or PNG at a hosted link, from the REST API, any MCP client or the editor. ## Docs - [Getting Started](https://ojo.so/docs/getting-started.md): Learn how to interact with the oJo API. - [MCP Server](https://ojo.so/docs/mcp-server.md): oJo ships an official [Model Context Protocol](https://modelcontextprotocol.io) server, so an AI agent can design and render images and PDFs directly instead of you writing HTTP calls on its behalf. There are two ways to connect it: - [Template Helpers](https://ojo.so/docs/template-helpers.md): oJo templates use [Handlebars](https://handlebarsjs.com/guide/) syntax, not Liquid: `{{name}}`, `{{#if paid}}…{{/if}}` and `{{#each items}}…{{/each}}`, and helpers take their arguments after the name, as in `{{uppercase name}}` rather than `{{ name | upcase }}`. The helpers below are built in. - [Safe Retries](https://ojo.so/docs/idempotency.md): A render can take up to about 95 seconds. If your connection drops or your client gives up before the answer arrives, you cannot tell whether the render was made and its credits spent. Send an `Idempotency-Key` header, and sending the request again gives you the first answer instead of a second render. - [Async Renders](https://ojo.so/docs/async-renders.md): A render request waits for the render, up to about 95 seconds. If your client cannot wait that long, such as a serverless function with a short timeout, ask for an async answer instead: oJo answers at once and you check back for the result. - [Self Hosting](https://ojo.so/docs/self-hosting.md): oJo has an open-source, self-hosted version that runs the HTML-to-image rendering on your own infrastructure, for personal and internal business use. - [Security](https://ojo.so/docs/security.md): This page describes what happens to the HTML you send and what oJo keeps. oJo is run by one person and holds no certification of its own. ## Guides - [Template from a PDF or image](https://ojo.so/docs/template-from-document.md): You already have the document: an invoice your accounting tool prints, a receipt, a certificate, or a design exported from Figma or Canva. An AI agent connected to oJo can rebuild it as an HTML template, so your code fills it with new data on every render. - [n8n](https://ojo.so/docs/n8n.md): Render a PDF or image from an oJo template in any n8n workflow, with the HTTP Request node and your API key. There is no oJo node to install. - [Zapier](https://ojo.so/docs/zapier.md): Render a PDF or image from an oJo template in a Zap, with the Webhooks by Zapier step and your API key. There is no oJo app in Zapier yet. - [Make](https://ojo.so/docs/make.md): Render a PDF or image from an oJo template in a Make scenario, with the HTTP app and your API key. There is no oJo app in Make yet. - [E-invoices](https://ojo.so/docs/e-invoices.md): oJo does not make e-invoices yet. This page describes what we would build, and the waitlist decides whether we build it. ## Image - [Create Image from HTML](https://ojo.so/docs/create-image-from-html.md): Send a POST request to this endpoint to create a new image using custom HTML. - [Create Image from Template](https://ojo.so/docs/create-image-from-template.md): Send a POST request to this endpoint to create a new image using a predefined template. - [Create Bulk Images](https://ojo.so/docs/create-bulk-images.md): Send a POST request to this endpoint to create multiple images at once using multiple templates. - [List Images](https://ojo.so/docs/list-images.md): Send a GET request to this endpoint to retrieve a list of generated images. - [Get Image](https://ojo.so/docs/get-image.md): Retrieve details of a specific image by its ID. - [Delete Image](https://ojo.so/docs/delete-image.md): Delete a specific image by its ID. - [Delete Images](https://ojo.so/docs/delete-images.md): Send a DELETE request to this endpoint to delete up to 50 generated images and their files at once. ## PDF - [Create PDF from HTML](https://ojo.so/docs/create-pdf-from-html.md): Send a POST request to this endpoint to render your HTML into a PDF document. - [Create PDF from Template](https://ojo.so/docs/create-pdf-from-template.md): Send a POST request to this endpoint to render one of your templates into a PDF document, or to build one PDF from many documents with `pages`. - [Preview PDF](https://ojo.so/docs/preview-pdf.md): Send a POST request to this endpoint to print your HTML as a PDF without storing it. The response is the PDF itself, stamped "Preview" on every page. - [Multi-page PDFs](https://ojo.so/docs/pdf-layout.md): oJo prints your HTML with Chromium, so CSS paged media controls how a long document breaks into pages. Everything here works with [Create PDF from HTML](/docs/create-pdf-from-html) and [Create PDF from Template](/docs/create-pdf-from-template). The `{{ }}` variables only work with templates. - [Starter templates](https://ojo.so/docs/pdf-starter-templates.md): Two complete templates that use the recipes from [Multi-page PDFs](/docs/pdf-layout). Save one with [Create Template](/docs/create-template), with the sample values as its `variables`, then render it with [Create PDF from Template](/docs/create-pdf-from-template) and your own values in `modify`. - [List PDFs](https://ojo.so/docs/list-pdfs.md): Send a GET request to this endpoint to retrieve a list of generated PDFs. Images are listed separately by [List Images](/docs/list-images). - [Get PDF](https://ojo.so/docs/get-pdf.md): Send a GET request to this endpoint to retrieve one generated PDF. - [Delete PDF](https://ojo.so/docs/delete-pdf.md): Send a DELETE request to this endpoint to delete a generated PDF and its file. ## Image Template - [Create Template](https://ojo.so/docs/create-template.md): Create a new image template that can be used for generating images. - [Update Template](https://ojo.so/docs/update-template.md): Update an existing image template. - [List Templates](https://ojo.so/docs/list-templates.md): Retrieve a list of image templates associated with your account. - [Get Template](https://ojo.so/docs/get-template.md): Retrieve details of a specific image template by its ID. - [Delete Template](https://ojo.so/docs/delete-template.md): Delete a specific image template by its ID. ## Account - [Get Credits](https://ojo.so/docs/get-credits.md): Send a GET request to this endpoint to see how many credits your account has left, for example before a bulk render. ## API - [OpenAPI description](https://api.ojo.so/openapi.json): every route of the API as an OpenAPI 3.1 document ## Templates - [Course Certificate (QR verification)](https://ojo.so/templates/course-certificate-qr-verification): Issue one per learner when your course platform marks a course complete, with the name, course, signatures and a QR code that opens your verification page. - [Invoice](https://ojo.so/templates/invoice): Render one per payment or billing period from your billing system, with line items over as many pages as they need, tax, amount due and a payment link. - [Receipt](https://ojo.so/templates/receipt): Render one per successful payment from your payment events, with what was paid, when, by which card, and the invoice it settles. - [Event Ticket](https://ojo.so/templates/event-ticket): Render one PDF per paid order from your ticketing events, with a page and a QR code for each ticket, the event, venue and attendee. - [Packing Slip](https://ojo.so/templates/packing-slip): Render one per shipped order from your fulfilment events, with the ship-to address, items by SKU and quantity, what follows later, and a barcode of the order number. - [Multifamily Investment Memo](https://ojo.so/templates/multifamily-investment-memo): Render one per deal from your underwriting model's output, with key returns, a cash flow projection for any hold period and IRR and DSCR sensitivity grids. - [Transit ADA and Title VI Report](https://ojo.so/templates/transit-ada-and-title-vi-report): Render the monthly board report from your transit data, with on-time charts, a route table, the Title VI comparison and the complaint log. - [Open Graph Image for Blog Posts](https://ojo.so/templates/open-graph-image): Render one per post your users publish, from your CMS or publish webhook, with the title, author, date and the site's logo. - [Map Visualizer](https://ojo.so/templates/map-visualizer): Render one per city or site from your location data, with the city name, a short description and the map centre and zoom you send. - [Product Showcase](https://ojo.so/templates/product-showcase): Render one per product from your catalogue, with the photo, name, price, original price, a badge and a QR code to the product page. - [Code Screenshot](https://ojo.so/templates/code-screenshot): Render one per snippet from your docs or changelog build, with the code, language, file name and author. - [Job Posting](https://ojo.so/templates/job-posting): Render one per opening from your applicant tracking system, with the title, location, salary range, experience, team size and your logo. - [Breaking News](https://ojo.so/templates/breaking-news): Render one per story from your publishing system, with the headline, text, cover image, source and a QR code to the follow-up page. - [Dynamic Product Comparison Table Generator](https://ojo.so/templates/product-comparison): Create and customize product comparison tables easily. Ideal for showcasing features, prices, and specifications for e-commerce, review sites, and blogs. - [Earthquake Alert Map](https://ojo.so/templates/earthquake-alert-map): Render one per earthquake from your alert feed, with magnitude, location, depth and a map centred on it. ## Compare - [Best HTML to PDF API in 2026, compared](https://ojo.so/compare/best-html-to-pdf-api): Nine ways to turn HTML into a PDF, from hosted APIs to running Chromium yourself, with features and limits read from each vendor's own pages. - [APITemplate.io alternatives in 2026](https://ojo.so/compare/apitemplate-alternatives): Where APITemplate.io fits, and which service to pick when you need PDF/A, an official MCP server, servers in the EU or to run it yourself. - [Bannerbear alternatives in 2026](https://ojo.so/compare/bannerbear-alternatives): Where Bannerbear fits, which service to pick when your templates are HTML or your output is multi-page PDFs, and what the same PDF job costs on each. ## Optional - [Pricing](https://ojo.so/pricing)