# 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. - [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. ## 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. - [Transform Image](https://ojo.so/docs/transform-image.md): Send a GET request to this endpoint to transform an existing image with various options. ## 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`. - [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. ## 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. ## Optional - [Pricing](https://ojo.so/pricing)