Template to Image
Use a predefined or custom template and populate it using JSON data that gets passed into the request to generate high-quality and professional Images such as PodCast Covers, Testimonials, Banners, and more.
Endpoints
POST /template/image
https://api.cloudlayer.io/v2/template/image
Request types
When using templates, you have a couple of options to choose from on how you send the request. You can use an inline request, where you specify everything in the JSON data, or you can use a multipart request and send the options as JSON, the template as a file, and the data as a file.
- Inline Request
- Multipart Request
Inline Request
An inline request is where you send the entire request as a single JSON string. The template and data are part of the JSON string.
Multipart Request
A multipart request is where you send multiple parts of the request—also known as multipart/form-data
. Which can allow for greater flexibility as you can use files or binary blobs to represent the data instead of having to base64 encode or deal with large JSON strings.
The following form fields are required:
options
- This is where all of the parameters are defined.template
- The template (does not need to be base64 encoded when using multipart form data)data
- The data parameter
curl --request POST \
--url 'https://api.cloudlayer.io/v2/template/pdf?=' \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <API-KEY>' \
--form 'options={
"name": "test",
}' \
--form 'template=@<PATH-TO-TEMPLATE>\template.njk' \
--form 'data=@\<PATH-TO-DATA>\sample-data.json'
curl --request POST \
--url 'https://api.cloudlayer.io/v2/template/image?=' \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <API-KEY>' \
--form 'options={
"name": "test",
}' \
--form 'template=@<PATH-TO-TEMPLATE>\template.njk' \
--form 'data=@\<PATH-TO-DATA>\sample-data.json'
Template types
There are two template types you can use with the template API.
Predefined Template
A predefined template is already created, which you choose from the PDF or Image Template Library use by providing the templateId
parameter and providing the correct data parameter for the template.
{
"templateId": "<template-id>",
"data": "..."
}
Custom Template
A custom template is one you create yourself and pass in through the template
parameter. When using a custom template, you may want to read the Templating Reference
{
"template": "PGh0bWw+CiAgPGJvZHk+CiAgICBIZWxsbyB7e25hbWV9fSEKICA8L2JvZHk+CjwvaHRtbD4=",
"data": {
"name": "Bob"
}
}
Template Parameters
Parameters that exist on Template services.
templateId
Required when the template
is not specified.
The string indicating the template to use from the PDF or Image template gallery. In this example it's using the PDF Template, the same format and options are used for Image templates.
{
"templateId": "professional-invoice",
"data": "..."
}
Data was left out for brevity in this example, to see a full example of data being used take a look at the data parameter.
template
Required when the templateId
is not specified.
The base64 encoded HTML Nunjucks template string.
(Used for custom templates.)
string
Default: ""
- HTML
- Base64String
<html>
<body>
Hello {{name}}!
</body>
</html>
PGh0bWw+CiAgPGJvZHk+CiAgICBIZWxsbyB7e25hbWV9fSEKICA8L2JvZHk+CjwvaHRtbD4=
data
Required
JSON string representing the data for the template.
string
Default: ""
{
"templateId": "professional-invoice",
"data": {
"__auto_calculate": true,
"address1": "1711 Bushnell Avenue",
"amount": null,
"bill_to_address1": "1680 Ralph Drive",
"bill_to_city": "Cleveland",
"bill_to_country": "United States",
"bill_to_fullname": "Terry G. Brown",
"bill_to_state_province_region": "OH",
"bill_to_zip_postal_code": "44114",
"city": "South Pasadena",
"company_name": "Acme Inc.",
"country": "United States",
"currency": "EUR",
"due_date": "04/04/2020",
"email": "email@gmail.com",
"invoice_date": "27 March, 2020",
"invoice_no": "000ABC123",
"items": [
{
"amount": null,
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Undedeleniti minus blanditiis repudiandae provident, hic laborum eaiure doloremque ipsum, obcaecati, dicta dignissimos optio. Porrodolores voluptatum consequuntur ab doloremque?",
"quantity": 40,
"title": "Home Page",
"unit_price": 150.1
},
{
"amount": null,
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit.",
"quantity": 40,
"title": "Home Page 2",
"unit_price": 150
},
{
"amount": null,
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Undedeleniti minus blanditiis repudiandae provident.",
"quantity": 10,
"title": "Home Page 3",
"unit_price": 10
}
],
"locale": "en-GB",
"logo_href": "https://cloudlayerio.nyc3.digitaloceanspaces.com/cdn/logo1.svg",
"notes": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Undedeleniti minus blanditiis repudiandae provident, hic laborum eaiure doloremque ipsum, obcaecati, dicta dignissimos optio. Porrodolores voluptatum consequuntur ab doloremque?",
"phone_number": "555-555-5555",
"product_service_title": "Web Design Services",
"reference_no": "INV-621",
"state_province_region": "California",
"subTotal": null,
"tax_label": "Tax",
"tax_percentage": 6,
"terms": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore, debitis vitae autem pariatur sunt eligendi error accusantium deserunt dolorem atque beatae quasi eaque repudiandae, ex, quaerat deleniti dignissimos? Cupiditate, explicabo. dolorem atque beatae quasi eaque repudiandae, ex, quaerat deleniti dignissimos? Cupiditate, explicabo.",
"totalTax": null,
"website": "https://acmeinc.com",
"zip_postal_code": "91030"
}
}
Any values that are null
are auto-calculated fields. If you wish to populate those fields instead, set __auto_calculate: false
and pass data into the fields instead.
Base Parameters
Parameters that exist on all services.
autoScroll
Will auto-scroll the page down to the very end. Helpful in forcing lazy-loaded content to load.
boolean
Default: false
{ "autoScroll": true }
delay
The amount of time in milliseconds to wait for the page to complete rendering before conversion.
number
Default: 0ms
{ "delay": 1000 }
filename
If used with the inline: false
, will set the Content-Disposition
filename so that the downloaded file will assign to this value in the user's browser. For inline: true
, it has no effect.
string
Default: ""
{ "filename": "filename.ext" }
generatePreview
Generates an image preview (thumbnail) of the image or first page of the PDF document. Storage must be enabled.
All parameters are optional, if you pass in true
to generatePreview instead of options it will use defaults.
{
"width": 600,
"height": 776,
"type": "webp",
"quality": 75
}
height
Height of the image to generate for the preview
number Optional - Either width or height must be provided. If maintainAspectRatio is being used, you may specify either one or the other.
"height": 600
width
Width of the image to generate for the preview
number Optional - Either width or height must be provided. If maintainAspectRatio is being used, you may specify either one or the other.
{
"width": 300
}
type
Optional
string Default: "webp"
Type of image to generate for the preview.
Must be one of the following:
png
jpg
webp
{
"type": "webp"
}
maintainAspectRatio
boolean Default: true
Either true
or false
to indicate if the image generated should maintain aspect ratio based on width/height.
Can result in a blurry and skewed image if the aspect ratio is not maintained
{
"maintainAspectRatio": true
}
quality
string Default: 80
Optional
Specifies the quality of the generated preview.
Must be a number between 0-100.
{
"quality": 80
}
Generating a preview can add significant processing time depending on the quality and size of the preview image and PDF document. It's important to balance quality and rendering time.
height / width
height
Paper height. Must be supported type of units or number.
string|number
Default: <null>
{ "height": 100 }
{ "height": "1.25in" }
width
Paper width. Must be supported type of units or number.
string|number
Default: <null>
{ "width": 100 }
{ "width": "1.25in" }
inline
If set to true, the Content-Disposition
gets set to inline
. If set to false, it gets set to attachment
. See filename property if you want to set the filename value for the attachment.
boolean
Default: false
{ "inline": true }
landscape
Paper orientation, false sets it to portrait and true to landscape.
boolean
`Default: false
{ "landscape": true }
preferCSSPageSize
Give any CSS @page
size declared in the page priority over what is declared in width and height or format options.
boolean
Default: false
{ "preferCSSPageSize": true }
projectId
The project's id you would like the job and any assets the job generates to be a member.
string
Default: ""
{ "projectId": "N77VCoAVTHHwgmUfCYlD" }
height
Page height in pixels only. Required
number
Default: <null>
{
"viewPort": {
"height": 768
}
}
deviceScaleFactor
Specify device scale factor (DPR). Height and Width are always required.
number
Default: 1
{
"viewPort": {
"width": 640,
"height": 480,
"deviceScaleFactor": 1
}
}
isMobile
Whether the meta viewport
tag is taken into account. Height and Width are always required.
boolean
Default: false
{
"viewPort": {
"width": 640,
"height": 480,
"isMobile": true
}
}
hasTouch
Specifies if viewport supports touch events. Height and Width are always required.
boolean
Default: false
{
"viewPort": {
"width": 640,
"height": 480,
"hasTouch": true
}
}
isLandscape
Specifies if viewport is in landscape mode. Height and Width are always required.
boolean
Default: false
{
"viewPort": {
"width": 640,
"height": 480,
"isLandscape": true
}
}
scale
Scale of the webpage rendering. Must be between 0.1 and 2.
number
Default: 0
{ "scale": 0.5 }
timeout
Amount of time that Chrome is allowed to run. If exceeded, your job will terminate.
number
Default: 30000ms
{ "timeout": 30000 }
timeZone
Changes the timezone of the page. See ICU's metaZones.txt for a list of supported timezone IDs.
string
Default: <null>
{ "timeZone": "Europe/Rome" }
viewPort
Set the Viewport of the page before navigation.
{
"viewPort": {
"width": 1024,
"height": 768,
"deviceScaleFactor": 2
}
}
width
Page width in pixels only. Required
number
Default: <null>
{
"viewPort": {
"width": 1024
}
}
waitForSelector
Allows for more complex wait behavior to control when the Chrome rendering engine decides when a page has finished before the conversion.
selector
The selector of an element to wait for before performing the conversion.
string
Default: <null>
{
"waitForSelector": {
"selector": "img"
}
}
options
The selector of an element to wait for before performing the conversion.
visible
Wait for the selector element to be present in the DOM and to be visible, i.e. to not have display:none
or visibility:hidden
CSS properties. Not to be combined with the hidden property.
boolean
Default: false
{
"waitForSelector": {
"selector": "img",
"options": {
"visible": true
}
}
}
hidden
Wait for the selector element to be present in the DOM and to be hidden, i.e. to have display: none
or visibility: hidden
CSS properties. Not to be combined with the visible property.
boolean
Default: false
{
"waitForSelector": {
"selector": "img",
"options": {
"hidden": true
}
}
}
timeout
Maximum amount of time to wait in milliseconds for the selector to meet the visible or hidden criteria.
number
Default: 30000
{
"waitForSelector": {
"selector": "img",
"options": {
"visible": true,
"timeout": 30000
}
}
}
{
"waitForSelector": {
"selector": "img",
"options": {
"hidden": true,
"timeout": 30000
}
}
}
waitUntil
When to consider the navigation has been completed and begin the conversion.
string
Default: "networkidle2"
Accepted Values
load
- consider navigation to be finished when theload
event is fired.domcontentloaded
- consider navigation to be finsihed when theDOMContentLoaded
event is fired.networkidle0
- consider navigation to be finished when there are no more than 0 network connections for at least500
ms.networkidle2
- consider navigation to be finished when there are no more than 2 network connections for at least `500' ms.
{ "waitUntil": "load" }
Image Parameters
Parameters that exist on all image service endpoints.
imageType
string Default: "png"
Type of image to generate for the preview.
Must be one of the following:
png
jpg
webp
{
"imageType": "webp"
}
transparent
boolean Default: false
Either true
or false
to indicate if the background should be transparent.
Note: Has no effect if the image type does not support transparency.
{
"transparent": true
}
trim
boolean Default: false
Either true
or false
to indicate if whitespace around the image should be trimmed.
{
"trim": true
}