Skip to main content
PUT
/
jobs
/
{jobId}
Update batch job
curl --request PUT \
  --url https://api.blaxel.ai/v0/jobs/{jobId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "metadata": {
    "name": "my-resource",
    "displayName": "My Resource",
    "externalId": "my-session-123",
    "labels": {}
  },
  "spec": {
    "enabled": true,
    "githubRunner": {
      "repositories": "[\"my-org/repo-a\", \"my-org/repo-b\"]"
    },
    "policies": [
      "<string>"
    ],
    "region": "us-was-1",
    "revision": {
      "active": "rev-abc123",
      "canary": "<string>",
      "canaryPercent": 10,
      "stickySessionTtl": 0,
      "traffic": 100
    },
    "runtime": {
      "diskPercent": 80,
      "envs": [
        {
          "name": "MY_ENV_VAR",
          "secret": true,
          "value": "my-value"
        }
      ],
      "generation": "mk3",
      "image": "<string>",
      "maxRetries": 3,
      "memory": 2048,
      "ports": [
        {
          "target": 8080,
          "name": "http",
          "protocol": "HTTP"
        }
      ],
      "timeout": 3600
    },
    "triggers": [
      {
        "configuration": {
          "authenticationType": "blaxel",
          "callbackUrl": "https://myapp.com/webhook",
          "path": "/invoke",
          "retry": 3,
          "schedule": "0 * * * *",
          "tasks": [
            {}
          ],
          "timeout": 300
        },
        "enabled": true,
        "id": "trigger-1",
        "type": "http"
      }
    ],
    "volumes": [
      {
        "mountPath": "/mnt/data",
        "name": "scratch",
        "sizeMb": 102400,
        "type": "ephemeral",
        "readOnly": false
      }
    ]
  }
}
'
import requests

url = "https://api.blaxel.ai/v0/jobs/{jobId}"

payload = {
"metadata": {
"name": "my-resource",
"displayName": "My Resource",
"externalId": "my-session-123",
"labels": {}
},
"spec": {
"enabled": True,
"githubRunner": { "repositories": "[\"my-org/repo-a\", \"my-org/repo-b\"]" },
"policies": ["<string>"],
"region": "us-was-1",
"revision": {
"active": "rev-abc123",
"canary": "<string>",
"canaryPercent": 10,
"stickySessionTtl": 0,
"traffic": 100
},
"runtime": {
"diskPercent": 80,
"envs": [
{
"name": "MY_ENV_VAR",
"secret": True,
"value": "my-value"
}
],
"generation": "mk3",
"image": "<string>",
"maxRetries": 3,
"memory": 2048,
"ports": [
{
"target": 8080,
"name": "http",
"protocol": "HTTP"
}
],
"timeout": 3600
},
"triggers": [
{
"configuration": {
"authenticationType": "blaxel",
"callbackUrl": "https://myapp.com/webhook",
"path": "/invoke",
"retry": 3,
"schedule": "0 * * * *",
"tasks": [{}],
"timeout": 300
},
"enabled": True,
"id": "trigger-1",
"type": "http"
}
],
"volumes": [
{
"mountPath": "/mnt/data",
"name": "scratch",
"sizeMb": 102400,
"type": "ephemeral",
"readOnly": False
}
]
}
}
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({
metadata: {
name: 'my-resource',
displayName: 'My Resource',
externalId: 'my-session-123',
labels: {}
},
spec: {
enabled: true,
githubRunner: {repositories: '["my-org/repo-a", "my-org/repo-b"]'},
policies: ['<string>'],
region: 'us-was-1',
revision: {
active: 'rev-abc123',
canary: '<string>',
canaryPercent: 10,
stickySessionTtl: 0,
traffic: 100
},
runtime: {
diskPercent: 80,
envs: [{name: 'MY_ENV_VAR', secret: true, value: 'my-value'}],
generation: 'mk3',
image: '<string>',
maxRetries: 3,
memory: 2048,
ports: [{target: 8080, name: 'http', protocol: 'HTTP'}],
timeout: 3600
},
triggers: [
{
configuration: {
authenticationType: 'blaxel',
callbackUrl: 'https://myapp.com/webhook',
path: '/invoke',
retry: 3,
schedule: '0 * * * *',
tasks: [{}],
timeout: 300
},
enabled: true,
id: 'trigger-1',
type: 'http'
}
],
volumes: [
{
mountPath: '/mnt/data',
name: 'scratch',
sizeMb: 102400,
type: 'ephemeral',
readOnly: false
}
]
}
})
};

fetch('https://api.blaxel.ai/v0/jobs/{jobId}', 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.blaxel.ai/v0/jobs/{jobId}",
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([
'metadata' => [
'name' => 'my-resource',
'displayName' => 'My Resource',
'externalId' => 'my-session-123',
'labels' => [

]
],
'spec' => [
'enabled' => true,
'githubRunner' => [
'repositories' => '["my-org/repo-a", "my-org/repo-b"]'
],
'policies' => [
'<string>'
],
'region' => 'us-was-1',
'revision' => [
'active' => 'rev-abc123',
'canary' => '<string>',
'canaryPercent' => 10,
'stickySessionTtl' => 0,
'traffic' => 100
],
'runtime' => [
'diskPercent' => 80,
'envs' => [
[
'name' => 'MY_ENV_VAR',
'secret' => true,
'value' => 'my-value'
]
],
'generation' => 'mk3',
'image' => '<string>',
'maxRetries' => 3,
'memory' => 2048,
'ports' => [
[
'target' => 8080,
'name' => 'http',
'protocol' => 'HTTP'
]
],
'timeout' => 3600
],
'triggers' => [
[
'configuration' => [
'authenticationType' => 'blaxel',
'callbackUrl' => 'https://myapp.com/webhook',
'path' => '/invoke',
'retry' => 3,
'schedule' => '0 * * * *',
'tasks' => [
[

]
],
'timeout' => 300
],
'enabled' => true,
'id' => 'trigger-1',
'type' => 'http'
]
],
'volumes' => [
[
'mountPath' => '/mnt/data',
'name' => 'scratch',
'sizeMb' => 102400,
'type' => 'ephemeral',
'readOnly' => false
]
]
]
]),
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://api.blaxel.ai/v0/jobs/{jobId}"

payload := strings.NewReader("{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"externalId\": \"my-session-123\",\n \"labels\": {}\n },\n \"spec\": {\n \"enabled\": true,\n \"githubRunner\": {\n \"repositories\": \"[\\\"my-org/repo-a\\\", \\\"my-org/repo-b\\\"]\"\n },\n \"policies\": [\n \"<string>\"\n ],\n \"region\": \"us-was-1\",\n \"revision\": {\n \"active\": \"rev-abc123\",\n \"canary\": \"<string>\",\n \"canaryPercent\": 10,\n \"stickySessionTtl\": 0,\n \"traffic\": 100\n },\n \"runtime\": {\n \"diskPercent\": 80,\n \"envs\": [\n {\n \"name\": \"MY_ENV_VAR\",\n \"secret\": true,\n \"value\": \"my-value\"\n }\n ],\n \"generation\": \"mk3\",\n \"image\": \"<string>\",\n \"maxRetries\": 3,\n \"memory\": 2048,\n \"ports\": [\n {\n \"target\": 8080,\n \"name\": \"http\",\n \"protocol\": \"HTTP\"\n }\n ],\n \"timeout\": 3600\n },\n \"triggers\": [\n {\n \"configuration\": {\n \"authenticationType\": \"blaxel\",\n \"callbackUrl\": \"https://myapp.com/webhook\",\n \"path\": \"/invoke\",\n \"retry\": 3,\n \"schedule\": \"0 * * * *\",\n \"tasks\": [\n {}\n ],\n \"timeout\": 300\n },\n \"enabled\": true,\n \"id\": \"trigger-1\",\n \"type\": \"http\"\n }\n ],\n \"volumes\": [\n {\n \"mountPath\": \"/mnt/data\",\n \"name\": \"scratch\",\n \"sizeMb\": 102400,\n \"type\": \"ephemeral\",\n \"readOnly\": false\n }\n ]\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://api.blaxel.ai/v0/jobs/{jobId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"externalId\": \"my-session-123\",\n \"labels\": {}\n },\n \"spec\": {\n \"enabled\": true,\n \"githubRunner\": {\n \"repositories\": \"[\\\"my-org/repo-a\\\", \\\"my-org/repo-b\\\"]\"\n },\n \"policies\": [\n \"<string>\"\n ],\n \"region\": \"us-was-1\",\n \"revision\": {\n \"active\": \"rev-abc123\",\n \"canary\": \"<string>\",\n \"canaryPercent\": 10,\n \"stickySessionTtl\": 0,\n \"traffic\": 100\n },\n \"runtime\": {\n \"diskPercent\": 80,\n \"envs\": [\n {\n \"name\": \"MY_ENV_VAR\",\n \"secret\": true,\n \"value\": \"my-value\"\n }\n ],\n \"generation\": \"mk3\",\n \"image\": \"<string>\",\n \"maxRetries\": 3,\n \"memory\": 2048,\n \"ports\": [\n {\n \"target\": 8080,\n \"name\": \"http\",\n \"protocol\": \"HTTP\"\n }\n ],\n \"timeout\": 3600\n },\n \"triggers\": [\n {\n \"configuration\": {\n \"authenticationType\": \"blaxel\",\n \"callbackUrl\": \"https://myapp.com/webhook\",\n \"path\": \"/invoke\",\n \"retry\": 3,\n \"schedule\": \"0 * * * *\",\n \"tasks\": [\n {}\n ],\n \"timeout\": 300\n },\n \"enabled\": true,\n \"id\": \"trigger-1\",\n \"type\": \"http\"\n }\n ],\n \"volumes\": [\n {\n \"mountPath\": \"/mnt/data\",\n \"name\": \"scratch\",\n \"sizeMb\": 102400,\n \"type\": \"ephemeral\",\n \"readOnly\": false\n }\n ]\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.blaxel.ai/v0/jobs/{jobId}")

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 \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"externalId\": \"my-session-123\",\n \"labels\": {}\n },\n \"spec\": {\n \"enabled\": true,\n \"githubRunner\": {\n \"repositories\": \"[\\\"my-org/repo-a\\\", \\\"my-org/repo-b\\\"]\"\n },\n \"policies\": [\n \"<string>\"\n ],\n \"region\": \"us-was-1\",\n \"revision\": {\n \"active\": \"rev-abc123\",\n \"canary\": \"<string>\",\n \"canaryPercent\": 10,\n \"stickySessionTtl\": 0,\n \"traffic\": 100\n },\n \"runtime\": {\n \"diskPercent\": 80,\n \"envs\": [\n {\n \"name\": \"MY_ENV_VAR\",\n \"secret\": true,\n \"value\": \"my-value\"\n }\n ],\n \"generation\": \"mk3\",\n \"image\": \"<string>\",\n \"maxRetries\": 3,\n \"memory\": 2048,\n \"ports\": [\n {\n \"target\": 8080,\n \"name\": \"http\",\n \"protocol\": \"HTTP\"\n }\n ],\n \"timeout\": 3600\n },\n \"triggers\": [\n {\n \"configuration\": {\n \"authenticationType\": \"blaxel\",\n \"callbackUrl\": \"https://myapp.com/webhook\",\n \"path\": \"/invoke\",\n \"retry\": 3,\n \"schedule\": \"0 * * * *\",\n \"tasks\": [\n {}\n ],\n \"timeout\": 300\n },\n \"enabled\": true,\n \"id\": \"trigger-1\",\n \"type\": \"http\"\n }\n ],\n \"volumes\": [\n {\n \"mountPath\": \"/mnt/data\",\n \"name\": \"scratch\",\n \"sizeMb\": 102400,\n \"type\": \"ephemeral\",\n \"readOnly\": false\n }\n ]\n }\n}"

response = http.request(request)
puts response.read_body
{
  "metadata": {
    "name": "my-resource",
    "createdAt": "<string>",
    "updatedAt": "<string>",
    "createdBy": "<string>",
    "updatedBy": "<string>",
    "displayName": "My Resource",
    "externalId": "my-session-123",
    "labels": {},
    "plan": "<string>",
    "url": "<string>",
    "workspace": "<string>"
  },
  "spec": {
    "enabled": true,
    "githubRunner": {
      "repositories": "[\"my-org/repo-a\", \"my-org/repo-b\"]"
    },
    "policies": [
      "<string>"
    ],
    "region": "us-was-1",
    "revision": {
      "active": "rev-abc123",
      "canary": "<string>",
      "canaryPercent": 10,
      "stickySessionTtl": 0,
      "traffic": 100
    },
    "runtime": {
      "diskPercent": 80,
      "envs": [
        {
          "name": "MY_ENV_VAR",
          "secret": true,
          "value": "my-value"
        }
      ],
      "generation": "mk3",
      "image": "<string>",
      "maxRetries": 3,
      "memory": 2048,
      "ports": [
        {
          "target": 8080,
          "name": "http",
          "protocol": "HTTP"
        }
      ],
      "timeout": 3600
    },
    "triggers": [
      {
        "configuration": {
          "authenticationType": "blaxel",
          "callbackSecret": "<string>",
          "callbackUrl": "https://myapp.com/webhook",
          "path": "/invoke",
          "retry": 3,
          "schedule": "0 * * * *",
          "tasks": [
            {}
          ],
          "timeout": 300
        },
        "enabled": true,
        "id": "trigger-1",
        "type": "http"
      }
    ],
    "volumes": [
      {
        "mountPath": "/mnt/data",
        "name": "scratch",
        "sizeMb": 102400,
        "type": "ephemeral",
        "readOnly": false
      }
    ]
  },
  "events": [
    {
      "canaryRevision": "<string>",
      "message": "Deployment successful",
      "revision": "rev-abc123",
      "status": "DEPLOYED",
      "time": "2025-01-15T10:30:00Z",
      "type": "deployment"
    }
  ]
}

Authorizations

Authorization
string
header
required

OAuth2 authentication with JWT tokens

Path Parameters

jobId
string
required

Unique name identifier of the batch job

Body

application/json

Batch processing job definition for running parallel AI tasks. Jobs can execute multiple tasks concurrently with configurable parallelism, retries, and timeouts.

metadata
object
required

Common metadata fields shared by all Blaxel resources including name, labels, timestamps, and ownership information

spec
object
required

Configuration for a batch job including execution parameters, parallelism settings, and deployment region

Response

200 - application/json

successful operation

Batch processing job definition for running parallel AI tasks. Jobs can execute multiple tasks concurrently with configurable parallelism, retries, and timeouts.

metadata
object
required

Common metadata fields shared by all Blaxel resources including name, labels, timestamps, and ownership information

spec
object
required

Configuration for a batch job including execution parameters, parallelism settings, and deployment region

events
object[]
read-only

Events happening on a resource deployed on Blaxel

status
enum<string>
read-only

Deployment status of a resource deployed on Blaxel

Available options:
DELETING,
TERMINATED,
FAILED,
DEACTIVATED,
DEACTIVATING,
UPLOADING,
BUILDING,
DEPLOYING,
DEPLOYED,
BUILT
Last modified on June 25, 2026