curl \
-X POST 'MEILISEARCH_URL/render-template' \
-H 'Content-Type: application/json' \
--data-binary '{
"template": {
"kind": "inlineDocumentTemplate",
"inline": "An inline document template rendered on {{doc.id}}"
},
"input": {
"kind": "inlineDocument",
"inline": { "id": "this document" }
}
}'import requests
url = "http://localhost:7700/render-template"
payload = {
"template": {
"indexUid": "movies",
"embedder": "<string>",
"fragment": "<string>",
"inline": "<unknown>",
"documentTemplateMaxBytes": 1
},
"input": {
"indexUid": "movies",
"id": "<string>",
"inline": "<unknown>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
template: {
indexUid: 'movies',
embedder: '<string>',
fragment: '<string>',
inline: '<unknown>',
documentTemplateMaxBytes: 1
},
input: {indexUid: 'movies', id: '<string>', inline: '<unknown>'}
})
};
fetch('http://localhost:7700/render-template', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "7700",
CURLOPT_URL => "http://localhost:7700/render-template",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'template' => [
'indexUid' => 'movies',
'embedder' => '<string>',
'fragment' => '<string>',
'inline' => '<unknown>',
'documentTemplateMaxBytes' => 1
],
'input' => [
'indexUid' => 'movies',
'id' => '<string>',
'inline' => '<unknown>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:7700/render-template"
payload := strings.NewReader("{\n \"template\": {\n \"indexUid\": \"movies\",\n \"embedder\": \"<string>\",\n \"fragment\": \"<string>\",\n \"inline\": \"<unknown>\",\n \"documentTemplateMaxBytes\": 1\n },\n \"input\": {\n \"indexUid\": \"movies\",\n \"id\": \"<string>\",\n \"inline\": \"<unknown>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:7700/render-template")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"template\": {\n \"indexUid\": \"movies\",\n \"embedder\": \"<string>\",\n \"fragment\": \"<string>\",\n \"inline\": \"<unknown>\",\n \"documentTemplateMaxBytes\": 1\n },\n \"input\": {\n \"indexUid\": \"movies\",\n \"id\": \"<string>\",\n \"inline\": \"<unknown>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:7700/render-template")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"template\": {\n \"indexUid\": \"movies\",\n \"embedder\": \"<string>\",\n \"fragment\": \"<string>\",\n \"inline\": \"<unknown>\",\n \"documentTemplateMaxBytes\": 1\n },\n \"input\": {\n \"indexUid\": \"movies\",\n \"id\": \"<string>\",\n \"inline\": \"<unknown>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"template": "{{ doc.breed }} called {{ doc.name }}",
"rendered": "A Jack Russell called Iko"
}{
"message": "cannot find embedder `default` in index `movies`",
"code": "invalid_render_template",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_render_template_id"
}{
"message": "The Authorization header is missing. It must use the bearer authorization method.",
"code": "missing_authorization_header",
"type": "auth",
"link": "https://docs.meilisearch.com/errors#missing_authorization_header"
}{
"message": "Document with ID `9999` not found in index `movies`.",
"code": "render_document_not_found",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#render_document_not_found"
}Render template
Render a template, either fetched from the settings of an index (embedder document template, chat document template, indexing or search fragment) or provided inline, by injecting the given input (a document from an index, an inline document, or a search query).
Returns the template and the rendered result, allowing to preview how Meilisearch renders templates without indexing any document.
This route is only available when the renderRoute experimental feature is enabled.
curl \
-X POST 'MEILISEARCH_URL/render-template' \
-H 'Content-Type: application/json' \
--data-binary '{
"template": {
"kind": "inlineDocumentTemplate",
"inline": "An inline document template rendered on {{doc.id}}"
},
"input": {
"kind": "inlineDocument",
"inline": { "id": "this document" }
}
}'import requests
url = "http://localhost:7700/render-template"
payload = {
"template": {
"indexUid": "movies",
"embedder": "<string>",
"fragment": "<string>",
"inline": "<unknown>",
"documentTemplateMaxBytes": 1
},
"input": {
"indexUid": "movies",
"id": "<string>",
"inline": "<unknown>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
template: {
indexUid: 'movies',
embedder: '<string>',
fragment: '<string>',
inline: '<unknown>',
documentTemplateMaxBytes: 1
},
input: {indexUid: 'movies', id: '<string>', inline: '<unknown>'}
})
};
fetch('http://localhost:7700/render-template', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "7700",
CURLOPT_URL => "http://localhost:7700/render-template",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'template' => [
'indexUid' => 'movies',
'embedder' => '<string>',
'fragment' => '<string>',
'inline' => '<unknown>',
'documentTemplateMaxBytes' => 1
],
'input' => [
'indexUid' => 'movies',
'id' => '<string>',
'inline' => '<unknown>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:7700/render-template"
payload := strings.NewReader("{\n \"template\": {\n \"indexUid\": \"movies\",\n \"embedder\": \"<string>\",\n \"fragment\": \"<string>\",\n \"inline\": \"<unknown>\",\n \"documentTemplateMaxBytes\": 1\n },\n \"input\": {\n \"indexUid\": \"movies\",\n \"id\": \"<string>\",\n \"inline\": \"<unknown>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:7700/render-template")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"template\": {\n \"indexUid\": \"movies\",\n \"embedder\": \"<string>\",\n \"fragment\": \"<string>\",\n \"inline\": \"<unknown>\",\n \"documentTemplateMaxBytes\": 1\n },\n \"input\": {\n \"indexUid\": \"movies\",\n \"id\": \"<string>\",\n \"inline\": \"<unknown>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:7700/render-template")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"template\": {\n \"indexUid\": \"movies\",\n \"embedder\": \"<string>\",\n \"fragment\": \"<string>\",\n \"inline\": \"<unknown>\",\n \"documentTemplateMaxBytes\": 1\n },\n \"input\": {\n \"indexUid\": \"movies\",\n \"id\": \"<string>\",\n \"inline\": \"<unknown>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"template": "{{ doc.breed }} called {{ doc.name }}",
"rendered": "A Jack Russell called Iko"
}{
"message": "cannot find embedder `default` in index `movies`",
"code": "invalid_render_template",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_render_template_id"
}{
"message": "The Authorization header is missing. It must use the bearer authorization method.",
"code": "missing_authorization_header",
"type": "auth",
"link": "https://docs.meilisearch.com/errors#missing_authorization_header"
}{
"message": "Document with ID `9999` not found in index `movies`.",
"code": "render_document_not_found",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#render_document_not_found"
}Authorizations
An API key is a token that you provide when making API calls. Read more about how to secure your project.
Include the API key to the Authorization header, for instance:
-H 'Authorization: Bearer 6436fc5237b0d6e0d64253fbaac21d135012ecf1'
If you use a SDK, ensure you instantiate the client with the API key, for instance with JS SDK:
const client = new MeiliSearch({
host: 'MEILISEARCH_URL',
apiKey: '6436fc5237b0d6e0d64253fbaac21d135012ecf1'
});
Body
Template/fragment to fetch for rendering.
Use its kind parameter to determine the type of template or fragment to fetch.
Show child attributes
Show child attributes
Input for the template to fetch.
Input is injected in the template to render the final string/JSON object.
If null or missing, the template will not be rendered.
Use its kind parameter to determine the type of document to fetch.
Show child attributes
Show child attributes
Response
The rendered result is returned along with the template
Was this page helpful?