Manage Templates
Required arguments:
containerDiskInGb
dockerArgs
env
imageName
name
volumeInGb
All other arguments are optional.
If your container image is private, you can also specify Docker login credentials with a containerRegistryAuthId
argument, which takes the ID (not the name) of the container registry credentials you saved in your RunPod user settings as a string.
Template names must be unique as well; if you try to create a new template with the same name as an existing one, your call will fail.
Create a Pod Template
Create GPU Template
- cURL
- GraphQL
- Output
curl --request POST \
--header 'content-type: application/json' \
--url 'https://api.runpod.io/graphql?api_key=${YOUR_API_KEY}' \
--data '{"query": "mutation { saveTemplate(input: { containerDiskInGb: 5, dockerArgs: \"sleep infinity\", env: [ { key: \"key1\", value: \"value1\" }, { key: \"key2\", value: \"value2\" } ], imageName: \"ubuntu:latest\", name: \"Generated Template\", ports: \"8888/http,22/tcp\", readme: \"## Hello, World!\", volumeInGb: 15, volumeMountPath: \"/workspace\" }) { containerDiskInGb dockerArgs env { key value } id imageName name ports readme volumeInGb volumeMountPath } }"}'
mutation {
saveTemplate(input: {
containerDiskInGb: 5,
dockerArgs: "sleep infinity",
env: [
{
key: "key1",
value: "value1"
},
{
key: "key2",
value: "value2"
}
],
imageName: "ubuntu:latest",
name: "Generated Template",
ports: "8888/http,22/tcp",
readme: "## Hello, World!",
volumeInGb: 15,
volumeMountPath: "/workspace"
}) {
containerDiskInGb
dockerArgs
env {
key
value
}
id
imageName
name
ports
readme
volumeInGb
volumeMountPath
}
}
{
"data": {
"saveTemplate": {
"containerDiskInGb": 5,
"dockerArgs": "sleep infinity",
"env": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key2",
"value": "value2"
}
],
"id": "wphkv67a0p",
"imageName": "ubuntu:latest",
"name": "Generated Template",
"ports": "8888/http,22/tcp",
"readme": "## Hello, World!",
"volumeInGb": 15,
"volumeMountPath": "/workspace"
}
}
}
Create Serverless Template
For Serverless templates, always pass 0
for volumeInGb
, since Serverless workers don't have persistent storage (other than those with network volumes).
- cURL
- GraphQL
- Output
curl --request POST \
--header 'content-type: application/json' \
--url 'https://api.runpod.io/graphql?api_key=${YOUR_API_KEY}' \
--data '{"query": "mutation { saveTemplate(input: { containerDiskInGb: 5, dockerArgs: \"python handler.py\", env: [ { key: \"key1\", value: \"value1\" }, { key: \"key2\", value: \"value2\" } ], imageName: \"runpod/serverless-hello-world:latest\", isServerless: true, name: \"Generated Serverless Template\", readme: \"## Hello, World!\", volumeInGb: 0 }) { containerDiskInGb dockerArgs env { key value } id imageName isServerless name readme } }"}'
mutation {
saveTemplate(input: {
containerDiskInGb: 5,
dockerArgs: "python handler.py",
env: [
{
key: "key1",
value: "value1"
},
{
key: "key2",
value: "value2"
}
],
imageName: "runpod/serverless-hello-world:latest",
isServerless: true,
name: "Generated Serverless Template",
readme: "## Hello, World!",
volumeInGb: 0
}) {
containerDiskInGb
dockerArgs
env {
key
value
}
id
imageName
isServerless
name
readme
}
}
{
"data": {
"saveTemplate": {
"containerDiskInGb": 5,
"dockerArgs": "python handler.py",
"env": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key2",
"value": "value2"
}
],
"id": "xkhgg72fuo",
"imageName": "runpod/serverless-hello-world:latest",
"isServerless": true,
"name": "Generated Serverless Template",
"readme": "## Hello, World!"
}
}
}
Modify a Template
Modify a GPU Pod Template
- cURL
- GraphQL
- Output
curl --request POST \
--header 'content-type: application/json' \
--url 'https://api.runpod.io/graphql?api_key=${YOUR_API_KEY}' \
--data '{"query": "mutation { saveTemplate(input: { id: \"wphkv67a0p\", containerDiskInGb: 5, dockerArgs: \"sleep infinity\", env: [ { key: \"key1\", value: \"value1\" }, { key: \"key2\", value: \"value2\" } ], imageName: \"ubuntu:latest\", name: \"Generated Template\", volumeInGb: 15, readme: \"## Goodbye, World!\" }) { id containerDiskInGb dockerArgs env { key value } imageName name volumeInGb readme } }"}'
mutation {
saveTemplate(input: {
id: "wphkv67a0p",
containerDiskInGb: 5,
dockerArgs: "sleep infinity",
env: [
{
key: "key1",
value: "value1"
},
{
key: "key2",
value: "value2"
}
],
imageName: "ubuntu:latest",
name: "Generated Template",
volumeInGb: 15,
readme: "## Goodbye, World!"
}) {
id
containerDiskInGb
dockerArgs
env {
key
value
}
imageName
name
volumeInGb
readme
}
}
{
"data": {
"saveTemplate": {
"id": "wphkv67a0p",
"containerDiskInGb": 5,
"dockerArgs": "sleep infinity",
"env": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key2",
"value": "value2"
}
],
"imageName": "ubuntu:latest",
"name": "Generated Template",
"volumeInGb": 15,
"readme": "## Goodbye, World!"
}
}
}
Modify a Serverless Template
- cURL
- GraphQL
- Output
curl --request POST \
--header 'content-type: application/json' \
--url 'https://api.runpod.io/graphql?api_key=${YOUR_API_KEY}' \
--data '{"query": "mutation { saveTemplate(input: { id: \"xkhgg72fuo\", containerDisk
InGb: 5, dockerArgs: \"python handler.py\", env: [ { key: \"key1\", value: \"value1\" }, { key: \"key2\", value: \"value2\" } ], imageName: \"runpod/serverless-hello-world:latest\", name: \"Generated Serverless Template\", volumeInGb: 0, readme: \"## Goodbye, World!\" }) { id containerDiskInGb dockerArgs env { key value } imageName name readme } }"}'
mutation {
saveTemplate(input: {
id: "xkhgg72fuo",
containerDiskInGb: 5,
dockerArgs: "python handler.py",
env: [
{
key: "key1",
value: "value1"
},
{
key: "key2",
value: "value2"
}
],
imageName: "runpod/serverless-hello-world:latest",
name: "Generated Serverless Template",
volumeInGb: 0,
readme: "## Goodbye, World!"
}) {
id
containerDiskInGb
dockerArgs
env {
key
value
}
imageName
name
readme
}
}
{
"data": {
"saveTemplate": {
"id": "xkhgg72fuo",
"containerDiskInGb": 5,
"dockerArgs": "python handler.py",
"env": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key2",
"value": "value2"
}
],
"imageName": "runpod/serverless-hello-world:latest",
"name": "Generated Serverless Template",
"readme": "## Goodbye, World!"
}
}
}
Delete a Template
Note that the template you'd like to delete must not be in use by any Pods or assigned to any Serverless endpoints. It can take up to 2 minutes to be able to delete a template after its most recent use by a Pod or Serverless endpoint, too.
The same mutation is used for deleting both Pod and Serverless templates.
- cURL
- GraphQL
- Output
curl --request POST \
--header 'content-type: application/json' \
--url 'https://api.runpod.io/graphql?api_key=${YOUR_API_KEY}' \
--data '{"query": "mutation { deleteTemplate(templateName: \"Generated Template\") }"}'
mutation {
deleteTemplate(templateName: "Generated Template")
}
{
"data": {
"deleteTemplate": null
}
}
Create a Secret
To create a secret, you need to send a GraphQL mutation request. This request will include the secretCreate
mutation with the required input fields value
and name
. The value
represents the actual secret, and the name
is a unique identifier for the secret.
- cURL
- GraphQL
curl --request POST \
--header 'content-type: application/json' \
--url 'https://api.runpod.io/graphql?api_key=${YOUR_API_KEY}' \
--data '{"query": "mutation { secretCreate(input: { value: \"i am a test secret\", name: \"i-am-a-secret\" }) { id name description } }"}'
mutation {
secretCreate(input: {
value: "i am a test secret",
name: "i-am-a-secret"
}) {
id
name
description
}
}