Skip to main content
POST
/
templates
/
save
/templates/save
curl --request POST \
  --url https://api.shadeform.ai/v1/templates/save \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '
{
  "name": "My Template",
  "description": "A template for ML workloads",
  "public": true,
  "auto_delete": {
    "date_threshold": "2006-01-02T15:04:05-07:00",
    "spend_threshold": "3.14"
  },
  "alert": {
    "date_threshold": "2006-01-02T15:04:05-07:00",
    "spend_threshold": "3.14"
  },
  "volume_mount": {
    "auto": true
  },
  "tags": [
    "ml",
    "pytorch"
  ],
  "envs": [
    {
      "name": "HUGGING_FACE_HUB_TOKEN",
      "value": "hugging_face_api_token"
    }
  ],
  "networking": {
    "ufw_rules": [
      {
        "rule": "allow",
        "from_ip": "192.168.1.0/24",
        "to_ip": "10.0.0.0/8",
        "port": "80",
        "proto": "tcp"
      }
    ]
  }
}
'
import requests

url = "https://api.shadeform.ai/v1/templates/save"

payload = {
"name": "My Template",
"description": "A template for ML workloads",
"public": True,
"auto_delete": {
"date_threshold": "2006-01-02T15:04:05-07:00",
"spend_threshold": "3.14"
},
"alert": {
"date_threshold": "2006-01-02T15:04:05-07:00",
"spend_threshold": "3.14"
},
"volume_mount": { "auto": True },
"tags": ["ml", "pytorch"],
"envs": [
{
"name": "HUGGING_FACE_HUB_TOKEN",
"value": "hugging_face_api_token"
}
],
"networking": { "ufw_rules": [
{
"rule": "allow",
"from_ip": "192.168.1.0/24",
"to_ip": "10.0.0.0/8",
"port": "80",
"proto": "tcp"
}
] }
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'My Template',
description: 'A template for ML workloads',
public: true,
auto_delete: {date_threshold: '2006-01-02T15:04:05-07:00', spend_threshold: '3.14'},
alert: {date_threshold: '2006-01-02T15:04:05-07:00', spend_threshold: '3.14'},
volume_mount: {auto: true},
tags: ['ml', 'pytorch'],
envs: [{name: 'HUGGING_FACE_HUB_TOKEN', value: 'hugging_face_api_token'}],
networking: {
ufw_rules: [
{
rule: 'allow',
from_ip: '192.168.1.0/24',
to_ip: '10.0.0.0/8',
port: '80',
proto: 'tcp'
}
]
}
})
};

fetch('https://api.shadeform.ai/v1/templates/save', 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.shadeform.ai/v1/templates/save",
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([
'name' => 'My Template',
'description' => 'A template for ML workloads',
'public' => true,
'auto_delete' => [
'date_threshold' => '2006-01-02T15:04:05-07:00',
'spend_threshold' => '3.14'
],
'alert' => [
'date_threshold' => '2006-01-02T15:04:05-07:00',
'spend_threshold' => '3.14'
],
'volume_mount' => [
'auto' => true
],
'tags' => [
'ml',
'pytorch'
],
'envs' => [
[
'name' => 'HUGGING_FACE_HUB_TOKEN',
'value' => 'hugging_face_api_token'
]
],
'networking' => [
'ufw_rules' => [
[
'rule' => 'allow',
'from_ip' => '192.168.1.0/24',
'to_ip' => '10.0.0.0/8',
'port' => '80',
'proto' => 'tcp'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.shadeform.ai/v1/templates/save"

payload := strings.NewReader("{\n \"name\": \"My Template\",\n \"description\": \"A template for ML workloads\",\n \"public\": true,\n \"auto_delete\": {\n \"date_threshold\": \"2006-01-02T15:04:05-07:00\",\n \"spend_threshold\": \"3.14\"\n },\n \"alert\": {\n \"date_threshold\": \"2006-01-02T15:04:05-07:00\",\n \"spend_threshold\": \"3.14\"\n },\n \"volume_mount\": {\n \"auto\": true\n },\n \"tags\": [\n \"ml\",\n \"pytorch\"\n ],\n \"envs\": [\n {\n \"name\": \"HUGGING_FACE_HUB_TOKEN\",\n \"value\": \"hugging_face_api_token\"\n }\n ],\n \"networking\": {\n \"ufw_rules\": [\n {\n \"rule\": \"allow\",\n \"from_ip\": \"192.168.1.0/24\",\n \"to_ip\": \"10.0.0.0/8\",\n \"port\": \"80\",\n \"proto\": \"tcp\"\n }\n ]\n }\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("X-API-KEY", "<api-key>")
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("https://api.shadeform.ai/v1/templates/save")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My Template\",\n \"description\": \"A template for ML workloads\",\n \"public\": true,\n \"auto_delete\": {\n \"date_threshold\": \"2006-01-02T15:04:05-07:00\",\n \"spend_threshold\": \"3.14\"\n },\n \"alert\": {\n \"date_threshold\": \"2006-01-02T15:04:05-07:00\",\n \"spend_threshold\": \"3.14\"\n },\n \"volume_mount\": {\n \"auto\": true\n },\n \"tags\": [\n \"ml\",\n \"pytorch\"\n ],\n \"envs\": [\n {\n \"name\": \"HUGGING_FACE_HUB_TOKEN\",\n \"value\": \"hugging_face_api_token\"\n }\n ],\n \"networking\": {\n \"ufw_rules\": [\n {\n \"rule\": \"allow\",\n \"from_ip\": \"192.168.1.0/24\",\n \"to_ip\": \"10.0.0.0/8\",\n \"port\": \"80\",\n \"proto\": \"tcp\"\n }\n ]\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.shadeform.ai/v1/templates/save")

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

request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My Template\",\n \"description\": \"A template for ML workloads\",\n \"public\": true,\n \"auto_delete\": {\n \"date_threshold\": \"2006-01-02T15:04:05-07:00\",\n \"spend_threshold\": \"3.14\"\n },\n \"alert\": {\n \"date_threshold\": \"2006-01-02T15:04:05-07:00\",\n \"spend_threshold\": \"3.14\"\n },\n \"volume_mount\": {\n \"auto\": true\n },\n \"tags\": [\n \"ml\",\n \"pytorch\"\n ],\n \"envs\": [\n {\n \"name\": \"HUGGING_FACE_HUB_TOKEN\",\n \"value\": \"hugging_face_api_token\"\n }\n ],\n \"networking\": {\n \"ufw_rules\": [\n {\n \"rule\": \"allow\",\n \"from_ip\": \"192.168.1.0/24\",\n \"to_ip\": \"10.0.0.0/8\",\n \"port\": \"80\",\n \"proto\": \"tcp\"\n }\n ]\n }\n}"

response = http.request(request)
puts response.read_body
{
  "id": "d290f1ee-6c54-4b01-90e6-d701748f0851"
}

Authorizations

X-API-KEY
string
header
required

Body

application/json
name
string
required

Name of the template

Example:

"My Template"

description
string

Description of the template

Example:

"A template for ML workloads"

public
boolean

Whether the template is publicly available

Example:

true

launch_configuration
object

Defines automatic actions after the instance becomes active.

auto_delete
object

Set a date or spend threshold to automatically delete the instance

alert
object

Alert configuration

volume_mount
object

Volume mount configuration

tags
string[]

Tags associated with the template

Example:
["ml", "pytorch"]
envs
object[]

Environment variables for the template

networking
object

Network and firewall configuration

Response

200 - application/json

Returns a TemplateCreateResponse object

Response of the /templates/save API call

id
string<uuid>
required

The unique identifier for the instance. Used in the instances for the /instances/{id}/info and /instances/{id}/delete APIs.

Example:

"d290f1ee-6c54-4b01-90e6-d701748f0851"