curl --request PUT \
--url https://console.vast.ai/api/v0/machines/create_bids \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"machine": 12345,
"price_gpu": 0.5,
"price_inetu": 0.1,
"price_inetd": 0.1,
"image": "vastai/tensorflow",
"args": [
"--arg1",
"--arg2"
],
"args_str": "--train --epochs 10",
"use_ssh": false,
"onstart": "bash /start.sh",
"env": {
"MY_VAR": "value"
}
}
'import requests
url = "https://console.vast.ai/api/v0/machines/create_bids"
payload = {
"machine": 12345,
"price_gpu": 0.5,
"price_inetu": 0.1,
"price_inetd": 0.1,
"image": "vastai/tensorflow",
"args": ["--arg1", "--arg2"],
"args_str": "--train --epochs 10",
"use_ssh": False,
"onstart": "bash /start.sh",
"env": { "MY_VAR": "value" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
machine: 12345,
price_gpu: 0.5,
price_inetu: 0.1,
price_inetd: 0.1,
image: 'vastai/tensorflow',
args: ['--arg1', '--arg2'],
args_str: '--train --epochs 10',
use_ssh: false,
onstart: 'bash /start.sh',
env: {MY_VAR: 'value'}
})
};
fetch('https://console.vast.ai/api/v0/machines/create_bids', 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://console.vast.ai/api/v0/machines/create_bids",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'machine' => 12345,
'price_gpu' => 0.5,
'price_inetu' => 0.1,
'price_inetd' => 0.1,
'image' => 'vastai/tensorflow',
'args' => [
'--arg1',
'--arg2'
],
'args_str' => '--train --epochs 10',
'use_ssh' => false,
'onstart' => 'bash /start.sh',
'env' => [
'MY_VAR' => 'value'
]
]),
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 := "https://console.vast.ai/api/v0/machines/create_bids"
payload := strings.NewReader("{\n \"machine\": 12345,\n \"price_gpu\": 0.5,\n \"price_inetu\": 0.1,\n \"price_inetd\": 0.1,\n \"image\": \"vastai/tensorflow\",\n \"args\": [\n \"--arg1\",\n \"--arg2\"\n ],\n \"args_str\": \"--train --epochs 10\",\n \"use_ssh\": false,\n \"onstart\": \"bash /start.sh\",\n \"env\": {\n \"MY_VAR\": \"value\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://console.vast.ai/api/v0/machines/create_bids")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"machine\": 12345,\n \"price_gpu\": 0.5,\n \"price_inetu\": 0.1,\n \"price_inetd\": 0.1,\n \"image\": \"vastai/tensorflow\",\n \"args\": [\n \"--arg1\",\n \"--arg2\"\n ],\n \"args_str\": \"--train --epochs 10\",\n \"use_ssh\": false,\n \"onstart\": \"bash /start.sh\",\n \"env\": {\n \"MY_VAR\": \"value\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.vast.ai/api/v0/machines/create_bids")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"machine\": 12345,\n \"price_gpu\": 0.5,\n \"price_inetu\": 0.1,\n \"price_inetd\": 0.1,\n \"image\": \"vastai/tensorflow\",\n \"args\": [\n \"--arg1\",\n \"--arg2\"\n ],\n \"args_str\": \"--train --epochs 10\",\n \"use_ssh\": false,\n \"onstart\": \"bash /start.sh\",\n \"env\": {\n \"MY_VAR\": \"value\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"machine_id": 12345,
"user_id": 9876,
"you_sent": {
"machine": 12345,
"image": "pytorch/pytorch:latest"
}
}{
"error": "<string>",
"msg": "<string>"
}Create Host Background Jobs
Creates host-owned background (bid) container jobs on a specified machine, replacing any existing host default jobs.
curl --request PUT \
--url https://console.vast.ai/api/v0/machines/create_bids \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"machine": 12345,
"price_gpu": 0.5,
"price_inetu": 0.1,
"price_inetd": 0.1,
"image": "vastai/tensorflow",
"args": [
"--arg1",
"--arg2"
],
"args_str": "--train --epochs 10",
"use_ssh": false,
"onstart": "bash /start.sh",
"env": {
"MY_VAR": "value"
}
}
'import requests
url = "https://console.vast.ai/api/v0/machines/create_bids"
payload = {
"machine": 12345,
"price_gpu": 0.5,
"price_inetu": 0.1,
"price_inetd": 0.1,
"image": "vastai/tensorflow",
"args": ["--arg1", "--arg2"],
"args_str": "--train --epochs 10",
"use_ssh": False,
"onstart": "bash /start.sh",
"env": { "MY_VAR": "value" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
machine: 12345,
price_gpu: 0.5,
price_inetu: 0.1,
price_inetd: 0.1,
image: 'vastai/tensorflow',
args: ['--arg1', '--arg2'],
args_str: '--train --epochs 10',
use_ssh: false,
onstart: 'bash /start.sh',
env: {MY_VAR: 'value'}
})
};
fetch('https://console.vast.ai/api/v0/machines/create_bids', 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://console.vast.ai/api/v0/machines/create_bids",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'machine' => 12345,
'price_gpu' => 0.5,
'price_inetu' => 0.1,
'price_inetd' => 0.1,
'image' => 'vastai/tensorflow',
'args' => [
'--arg1',
'--arg2'
],
'args_str' => '--train --epochs 10',
'use_ssh' => false,
'onstart' => 'bash /start.sh',
'env' => [
'MY_VAR' => 'value'
]
]),
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 := "https://console.vast.ai/api/v0/machines/create_bids"
payload := strings.NewReader("{\n \"machine\": 12345,\n \"price_gpu\": 0.5,\n \"price_inetu\": 0.1,\n \"price_inetd\": 0.1,\n \"image\": \"vastai/tensorflow\",\n \"args\": [\n \"--arg1\",\n \"--arg2\"\n ],\n \"args_str\": \"--train --epochs 10\",\n \"use_ssh\": false,\n \"onstart\": \"bash /start.sh\",\n \"env\": {\n \"MY_VAR\": \"value\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://console.vast.ai/api/v0/machines/create_bids")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"machine\": 12345,\n \"price_gpu\": 0.5,\n \"price_inetu\": 0.1,\n \"price_inetd\": 0.1,\n \"image\": \"vastai/tensorflow\",\n \"args\": [\n \"--arg1\",\n \"--arg2\"\n ],\n \"args_str\": \"--train --epochs 10\",\n \"use_ssh\": false,\n \"onstart\": \"bash /start.sh\",\n \"env\": {\n \"MY_VAR\": \"value\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.vast.ai/api/v0/machines/create_bids")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"machine\": 12345,\n \"price_gpu\": 0.5,\n \"price_inetu\": 0.1,\n \"price_inetd\": 0.1,\n \"image\": \"vastai/tensorflow\",\n \"args\": [\n \"--arg1\",\n \"--arg2\"\n ],\n \"args_str\": \"--train --epochs 10\",\n \"use_ssh\": false,\n \"onstart\": \"bash /start.sh\",\n \"env\": {\n \"MY_VAR\": \"value\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"machine_id": 12345,
"user_id": 9876,
"you_sent": {
"machine": 12345,
"image": "pytorch/pytorch:latest"
}
}{
"error": "<string>",
"msg": "<string>"
}Authorizations
API key must be provided in the Authorization header
Body
ID of the machine to create jobs for.
12345
Price per GPU per day.
0.5
Price for internet upload.
0.1
Price for internet download.
0.1
Docker image to use for the job.
"vastai/tensorflow"
Arguments for the Docker image.
["--arg1", "--arg2"]
Command-line arguments as a single shell-quoted string (parsed via shlex). Mutually exclusive with args.
"--train --epochs 10"
Whether to enable SSH access on the created background job containers.
false
Shell command to run when the container starts.
"bash /start.sh"
Key-value pairs of environment variables to inject into the container.
{ "MY_VAR": "value" }
Response
Returns {success: false, msg: "only the owner can create default bid contracts for a machine."} if not machine owner (no HTTP error code set)