Skip to main content
GET
/
api
/
v2
/
interview-templates
/
{template_id}
Get an interview template
curl --request GET \
  --url https://api.heymilo.ai/api/v2/interview-templates/{template_id} \
  --header 'X-API-KEY: <api-key>'
import requests

url = "https://api.heymilo.ai/api/v2/interview-templates/{template_id}"

headers = {"X-API-KEY": "<api-key>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};

fetch('https://api.heymilo.ai/api/v2/interview-templates/{template_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.heymilo.ai/api/v2/interview-templates/{template_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.heymilo.ai/api/v2/interview-templates/{template_id}"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("X-API-KEY", "<api-key>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.heymilo.ai/api/v2/interview-templates/{template_id}")
.header("X-API-KEY", "<api-key>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.heymilo.ai/api/v2/interview-templates/{template_id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'

response = http.request(request)
puts response.read_body
{
  "data": {
    "id": "<string>",
    "template_code": "<string>",
    "name": "<string>",
    "posting_id": "<string>",
    "created_at": 123,
    "updated_at": 123,
    "object": "interview_template",
    "description": "Standard 3-stage interview for senior backend roles.",
    "is_default": false
  },
  "meta": {}
}
{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "<string>",
"message": "<string>",
"param": "title"
}
]
}
}
{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "<string>",
"message": "<string>",
"param": "title"
}
]
}
}
{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}
{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"errors": [
{
"code": "<string>",
"message": "<string>",
"param": "title"
}
]
}
}

Authorizations

X-API-KEY
string
header
required

API key for authentication. Pass your key in the X-API-KEY header.

Headers

X-API-KEY
string | null
Authorization
string | null
X-Workspace-Id
string | null

Path Parameters

template_id
string
required

Response

Successful Response

data
InterviewTemplateResponse · object
required

A reusable interview agent configuration.

Interview templates capture a blueprint posting's full agentic workflow (questions, criteria, agent settings) so it can be cloned onto new postings or used as the seed for new agents. Each template references its blueprint posting via posting_id.

meta
Meta · object | null

Optional metadata. Shape varies by endpoint.