Link Search Menu Expand Document

Image Templates

Create reusable templates to make image generation easy.

Get an API Key


What are Templates?

A template defines reusable image markup with variables that are replaced when an image is created.

You can create templates by sending HTML and CSS to the API, or by building a template visually in the Template Editor. Templates created in the editor are still rendered through the same template API.

If you are building templates visually, start with the Template Editor Quick Start. For API-only templates, continue below.

Handlebars variables

Templates support Handlebars variables. Add {{title_text}} to your HTML, then pass a value for title_text when creating the image.

Common use cases

  • Define a reusable template, then pass variables to it to generate unique images.
  • Use the Template Editor to build a reusable image from blocks instead of writing all of the HTML and CSS by hand.
  • Create images using signed URLs in a GET request.
  • Generate social sharing images, such as og:image or twitter:image.

Example

This image was generated with a template.

{ 
  "text": "With templates, you can use variables to replace parts of your image.",
  "avatar_url": "https://avataaars.io/?avatarStyle=Transparent&topType=ShortHairDreads01&accessoriesType=Round&hairColor=BrownDark&facialHairType=BeardLight&facialHairColor=BrownDark&clotheType=BlazerShirt&eyeType=Happy&eyebrowType=DefaultNatural&mouthType=Eating&skinColor=Brown",
  "name": "Freddy",
  "username": "@freddy",
}
Example of an image template use for converting html to an image

HTML:


<div class="p-4 text-center mt-4" style="width: 500px">
  <span class="tweet-text mb-4">
    {{text}}
  </span>
  <div class="mt-2 p-4">
    <img src="{{avatar_url}}" class="rounded-circle shadow border mt-4" width="100px">
  </div>
  <h4 class="mt-2">
    {{name}}
  </h4>
  <span class="text-muted">{{username}}</span>
</div>

Creating a Template

To generate a template, make an HTTP request to the API.

  post https://hcti.io/v1/template

Parameters

The create template endpoint accepts the following parameters. Accepted as either json or formdata.

Name Type Description
html* String This is the HTML you want to render. You can send an HTML snippet (<div>Your content</div>) or an entire webpage.
css String The CSS for your image.
name String A short name to identify your template max length 64
description String Description to elaborate on the use of your template max length 1024

Required params

For creating a template, html is required while css is optional.
name and description are optional, but may be useful to help you differentiate your templates in the future.

Additional parameters

Optional parameters for greater control over your image.

Name Type Description
color_scheme String Set Chrome to render in light or dark mode.
device_scale Double Adjust the pixel ratio for the screenshot. Minimum: 0.1, Maximum: 3.
disable_twemoji Boolean Set to true to use native emoji fonts instead of Twemoji.
google_fonts String Google fonts to be loaded. Example: Roboto. Load multiple fonts with Roboto|Open Sans.
jumbo_max_height Integer Maximum output height in jumbo mode, up to 80,000 pixels. Must be set with jumbo_max_width. Consumes additional image credits.
jumbo_max_width Integer Maximum output width in jumbo mode, up to 80,000 pixels. Must be set with jumbo_max_height. Consumes additional image credits.
max_wait_ms Integer Set a maximum time limit (50010000 milliseconds) for waiting before taking the screenshot.
media_type String Set Chrome to render using screen or print CSS media styles.
ms_delay Integer Delay before generating the image. Useful when waiting for JavaScript. We recommend starting with 500 milliseconds.
proxy_id String Route the render through one of your organization’s configured HTTP proxies. Available on the 10k images/month plan or higher.
render_when_ready Boolean Wait to generate the image until JavaScript calls ScreenshotReady().
selector String Crop the image to an element matching this CSS selector. For example: section#complete-toolkit.container-lg.
storage_destination_id String Save images created from this template to one of your organization’s configured storage destinations. Available on the 10,000 images/month plan or higher.
timezone String Set Chrome’s timezone using an IANA timezone identifier.
transparent_background Boolean Set to true to render images created from this template with a transparent background.
viewport_height Integer Set the height of Chrome’s viewport. Both dimensions must be set if using either.
viewport_landscape Boolean Set Chrome’s viewport to landscape mode.
viewport_mobile Boolean Set Chrome’s viewport to emulate a mobile device.
viewport_touch Boolean Set Chrome’s viewport to support touch events.
viewport_width Integer Set the width of Chrome’s viewport. Both dimensions must be set if using either.

Example responses

STATUS: 201 CREATED
{
    "template_id": "t-b0354248-e7f6-4cca-81c6-2b4a70a16388",
    "template_version": 1594409399761
}
STATUS: 400 BAD REQUEST
{
  "error": "Bad Request",
  "statusCode": 400,
  "message": "HTML is Required"
}
STATUS: 429 TOO MANY REQUESTS
{
    "error": "Plan limit exceeded",
    "statusCode": 429,
    "message": "The tryit plan is limited to 1 template"
}

Plan Limits

Free plans can create 1 template. Paid plans can create 1,000. You can edit your existing templates an unlimited number of times.


Editing a Template

To edit a template you’ve already made, make an HTTP request to the API with the template_id listed in the CREATE response.

  post https://hcti.io/v1/template/:template_id

Parameters

The edit template endpoint accepts the following parameters. Accepted as either json or formdata.

Name Type Description
html* String This is the HTML you want to render. You can send an HTML snippet (<div>Your content</div>) or an entire webpage.
css String The CSS for your image.
name String A short name to identify your template max length 64
description String Description to elaborate on the use of your template max length 1024

Required params

For creating a template, html is required while css is optional.
name and description are optional, but may be useful to help you differentiate your templates in the future.

Additional parameters

Optional parameters for greater control over your image.

Name Type Description
color_scheme String Set Chrome to render in light or dark mode.
device_scale Double Adjust the pixel ratio for the screenshot. Minimum: 0.1, Maximum: 3.
disable_twemoji Boolean Set to true to use native emoji fonts instead of Twemoji.
google_fonts String Google fonts to be loaded. Example: Roboto. Load multiple fonts with Roboto|Open Sans.
jumbo_max_height Integer Maximum output height in jumbo mode, up to 80,000 pixels. Must be set with jumbo_max_width. Consumes additional image credits.
jumbo_max_width Integer Maximum output width in jumbo mode, up to 80,000 pixels. Must be set with jumbo_max_height. Consumes additional image credits.
max_wait_ms Integer Set a maximum time limit (50010000 milliseconds) for waiting before taking the screenshot.
media_type String Set Chrome to render using screen or print CSS media styles.
ms_delay Integer Delay before generating the image. Useful when waiting for JavaScript. We recommend starting with 500 milliseconds.
proxy_id String Route the render through one of your organization’s configured HTTP proxies. Available on the 10k images/month plan or higher.
render_when_ready Boolean Wait to generate the image until JavaScript calls ScreenshotReady().
selector String Crop the image to an element matching this CSS selector. For example: section#complete-toolkit.container-lg.
storage_destination_id String Save images created from this template to one of your organization’s configured storage destinations. Available on the 10,000 images/month plan or higher.
timezone String Set Chrome’s timezone using an IANA timezone identifier.
transparent_background Boolean Set to true to render images created from this template with a transparent background.
viewport_height Integer Set the height of Chrome’s viewport. Both dimensions must be set if using either.
viewport_landscape Boolean Set Chrome’s viewport to landscape mode.
viewport_mobile Boolean Set Chrome’s viewport to emulate a mobile device.
viewport_touch Boolean Set Chrome’s viewport to support touch events.
viewport_width Integer Set the width of Chrome’s viewport. Both dimensions must be set if using either.

Creating an image with a template

To generate a templated image, make an HTTP request to the API using the template_id listed in the CREATE response.

  post https://hcti.io/v1/image/:template_id

You can also generate a templated image with a signed GET URL that renders on demand. See Creating a templated image URL.

Template Versions

When you create an image using a template_id, it will automatically use the most recent version of that template. If you want to create an image from a specific template_version you can append /:template_version to your POST: hcti.io/v1/image/:template_id/:template_version

Parameters

The create templated image endpoint accepts the following parameters, accepted as either json or formdata.

  • If you use formdata, your template_values need to be JSON encoded.
Name Type Description
template_values* JSON Values for the variables in your template. For editor templates, see the Variables guide.

Listing your templates

To list all of your templates, send a get to v1/template. Authentication is required.

  get https://hcti.io/v1/template

Example responses

STATUS: 200 OK
{
  "data": [
    {
      "css": null,
      "created_at": "2020-07-19T17:16:43.987+00:00",
      "description": null,
      "device_scale": 2.0,
      "google_fonts": null,
      "html": "<blockquote class=\"twitter-tweet\" style=\"width: 400px;\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\"></p>\n\n<a href=\"\"></a>\n\n</blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
      "id": "t-5ff7b966-d32c-4143-bda3-57a440e97a80",
      "max_wait_ms": null,
      "ms_delay": 1500,
      "name": null,
      "render_when_ready": null,
      "render_count": 142,
      "storage_destination_id": "your-storage-destination-id",
      "color_scheme": null,
      "timezone": null,
      "updated_at": "2020-07-19T17:16:43.987+00:00",
      "version": 1595179003987,
      "viewport_height": null,
      "viewport_width": null
    }
  ],
  "pagination": {
    "next_page_start": null
  }
}

Response fields

Field Type Description
render_count Integer Number of times this template has been used to generate images.
storage_destination_id String or null Storage destination inherited by images created from this template.
color_scheme String Light or dark mode setting, if configured.
timezone String Timezone setting, if configured.

Listing your template versions

To list all versions of a template, send a get to v1/template/:template_id. Authentication is required.

  get https://hcti.io/v1/template/:template_id

Example responses

STATUS: 200 OK
{
  "data": [
    {
      "css": null,
      "created_at": "2020-07-19T17:16:43.987+00:00",
      "description": null,
      "device_scale": 2.0,
      "google_fonts": null,
      "html": "<blockquote class=\"twitter-tweet\" style=\"width: 400px;\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\"></p>\n\n<a href=\"\"></a>\n\n</blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
      "id": "t-5ff7b966-d32c-4143-bda3-57a440e97a80",
      "max_wait_ms": null,
      "ms_delay": 1500,
      "name": null,
      "render_when_ready": null,
      "render_count": 142,
      "storage_destination_id": "your-storage-destination-id",
      "color_scheme": null,
      "timezone": null,
      "updated_at": "2020-07-19T17:16:43.987+00:00",
      "version": 1595179003987,
      "viewport_height": null,
      "viewport_width": null,      
    }
  ],
  "pagination": {
    "next_page_start": null
  }
}

Need help?

We’re always looking to improve this documentation. Please send us an email: support@htmlcsstoimage.com. We respond fast.


Back to top

Built with extensive integration tests and serious care for developer happiness.
© 2018-2026 Code Happy, LLC.

Page last modified: Aug 5 2026 at 08:34 PM.

Edit this page on GitHub.