curl --request PATCH \
--url https://compute.x402layer.cc/pods/v1/pods/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"model": "<string>",
"slug": "<string>",
"auto_renew": true,
"agent_identity": "<string>",
"agent_instructions": "<string>",
"heartbeat_prompt": "<string>",
"agent_heartbeat_minutes": 720,
"ai": {
"api_key": "<string>",
"base_url": "<string>",
"api": "<string>"
}
}
'import requests
url = "https://compute.x402layer.cc/pods/v1/pods/{id}"
payload = {
"name": "<string>",
"model": "<string>",
"slug": "<string>",
"auto_renew": True,
"agent_identity": "<string>",
"agent_instructions": "<string>",
"heartbeat_prompt": "<string>",
"agent_heartbeat_minutes": 720,
"ai": {
"api_key": "<string>",
"base_url": "<string>",
"api": "<string>"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
model: '<string>',
slug: '<string>',
auto_renew: true,
agent_identity: '<string>',
agent_instructions: '<string>',
heartbeat_prompt: '<string>',
agent_heartbeat_minutes: 720,
ai: {api_key: '<string>', base_url: '<string>', api: '<string>'}
})
};
fetch('https://compute.x402layer.cc/pods/v1/pods/{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://compute.x402layer.cc/pods/v1/pods/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'model' => '<string>',
'slug' => '<string>',
'auto_renew' => true,
'agent_identity' => '<string>',
'agent_instructions' => '<string>',
'heartbeat_prompt' => '<string>',
'agent_heartbeat_minutes' => 720,
'ai' => [
'api_key' => '<string>',
'base_url' => '<string>',
'api' => '<string>'
]
]),
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://compute.x402layer.cc/pods/v1/pods/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"slug\": \"<string>\",\n \"auto_renew\": true,\n \"agent_identity\": \"<string>\",\n \"agent_instructions\": \"<string>\",\n \"heartbeat_prompt\": \"<string>\",\n \"agent_heartbeat_minutes\": 720,\n \"ai\": {\n \"api_key\": \"<string>\",\n \"base_url\": \"<string>\",\n \"api\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://compute.x402layer.cc/pods/v1/pods/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"slug\": \"<string>\",\n \"auto_renew\": true,\n \"agent_identity\": \"<string>\",\n \"agent_instructions\": \"<string>\",\n \"heartbeat_prompt\": \"<string>\",\n \"agent_heartbeat_minutes\": 720,\n \"ai\": {\n \"api_key\": \"<string>\",\n \"base_url\": \"<string>\",\n \"api\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://compute.x402layer.cc/pods/v1/pods/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"slug\": \"<string>\",\n \"auto_renew\": true,\n \"agent_identity\": \"<string>\",\n \"agent_instructions\": \"<string>\",\n \"heartbeat_prompt\": \"<string>\",\n \"agent_heartbeat_minutes\": 720,\n \"ai\": {\n \"api_key\": \"<string>\",\n \"base_url\": \"<string>\",\n \"api\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"pod": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"slug": "<string>",
"external_ref": "<string>",
"status": "provisioning",
"tier": "starter",
"model": "<string>",
"ai": {
"mode": "managed"
},
"capabilities": {
"endpoint": true,
"wallet": true,
"platform_tools": true,
"connectors": true,
"channels": true,
"scheduler": true,
"backups": true
},
"endpoint": {
"base_url": "https://compute.x402layer.cc/pods/{id}/v1"
},
"billing": {
"expires_at": "2023-11-07T05:31:56Z",
"auto_renew": true,
"is_trial": true
},
"customization": {
"agent_identity": "<string>",
"agent_instructions": "<string>",
"heartbeat_prompt": "<string>"
},
"agent_heartbeat_minutes": 720,
"created_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Update a pod
Base URL https://compute.x402layer.cc/pods/v1. Auth is X-API-Key only. This is the PROGRAMMATIC surface and is NOT the same as the dashboard pod routes (POST /pods, PATCH /pods/{id}/settings, …), which take a wallet signature or a browser session and are free to change. Every response carries x-request-id.
Send any subset of the editable fields. This is an allowlist: fields not listed here are not settable from the public API.
Not atomic. name is applied before the rest, so a failure on the rest can leave the name already changed. When that happens the error carries details.partially_applied: ["name"] rather than letting you infer nothing happened.
Wallet spend controls live on PATCH /pods/v1/pods/{id}/wallet, not here. Rate limit: the shared write bucket, 60 requests/minute per account.
Customization fields are editable here too. Send "" or null for a custom text field to clear it. Raw AGENTS.md replacement is not exposed.
curl --request PATCH \
--url https://compute.x402layer.cc/pods/v1/pods/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"model": "<string>",
"slug": "<string>",
"auto_renew": true,
"agent_identity": "<string>",
"agent_instructions": "<string>",
"heartbeat_prompt": "<string>",
"agent_heartbeat_minutes": 720,
"ai": {
"api_key": "<string>",
"base_url": "<string>",
"api": "<string>"
}
}
'import requests
url = "https://compute.x402layer.cc/pods/v1/pods/{id}"
payload = {
"name": "<string>",
"model": "<string>",
"slug": "<string>",
"auto_renew": True,
"agent_identity": "<string>",
"agent_instructions": "<string>",
"heartbeat_prompt": "<string>",
"agent_heartbeat_minutes": 720,
"ai": {
"api_key": "<string>",
"base_url": "<string>",
"api": "<string>"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
model: '<string>',
slug: '<string>',
auto_renew: true,
agent_identity: '<string>',
agent_instructions: '<string>',
heartbeat_prompt: '<string>',
agent_heartbeat_minutes: 720,
ai: {api_key: '<string>', base_url: '<string>', api: '<string>'}
})
};
fetch('https://compute.x402layer.cc/pods/v1/pods/{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://compute.x402layer.cc/pods/v1/pods/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'model' => '<string>',
'slug' => '<string>',
'auto_renew' => true,
'agent_identity' => '<string>',
'agent_instructions' => '<string>',
'heartbeat_prompt' => '<string>',
'agent_heartbeat_minutes' => 720,
'ai' => [
'api_key' => '<string>',
'base_url' => '<string>',
'api' => '<string>'
]
]),
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://compute.x402layer.cc/pods/v1/pods/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"slug\": \"<string>\",\n \"auto_renew\": true,\n \"agent_identity\": \"<string>\",\n \"agent_instructions\": \"<string>\",\n \"heartbeat_prompt\": \"<string>\",\n \"agent_heartbeat_minutes\": 720,\n \"ai\": {\n \"api_key\": \"<string>\",\n \"base_url\": \"<string>\",\n \"api\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://compute.x402layer.cc/pods/v1/pods/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"slug\": \"<string>\",\n \"auto_renew\": true,\n \"agent_identity\": \"<string>\",\n \"agent_instructions\": \"<string>\",\n \"heartbeat_prompt\": \"<string>\",\n \"agent_heartbeat_minutes\": 720,\n \"ai\": {\n \"api_key\": \"<string>\",\n \"base_url\": \"<string>\",\n \"api\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://compute.x402layer.cc/pods/v1/pods/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"slug\": \"<string>\",\n \"auto_renew\": true,\n \"agent_identity\": \"<string>\",\n \"agent_instructions\": \"<string>\",\n \"heartbeat_prompt\": \"<string>\",\n \"agent_heartbeat_minutes\": 720,\n \"ai\": {\n \"api_key\": \"<string>\",\n \"base_url\": \"<string>\",\n \"api\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"pod": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"slug": "<string>",
"external_ref": "<string>",
"status": "provisioning",
"tier": "starter",
"model": "<string>",
"ai": {
"mode": "managed"
},
"capabilities": {
"endpoint": true,
"wallet": true,
"platform_tools": true,
"connectors": true,
"channels": true,
"scheduler": true,
"backups": true
},
"endpoint": {
"base_url": "https://compute.x402layer.cc/pods/{id}/v1"
},
"billing": {
"expires_at": "2023-11-07T05:31:56Z",
"auto_renew": true,
"is_trial": true
},
"customization": {
"agent_identity": "<string>",
"agent_instructions": "<string>",
"heartbeat_prompt": "<string>"
},
"agent_heartbeat_minutes": 720,
"created_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
A compute API key (x402c_...). Mint one in the dashboard under Settings -> API Keys. This is the ONLY auth /pods/v1/* accepts - wallet signatures are bound to method+path+body and do not survive the internal hop, so signature callers must use the dashboard routes instead. Two extra scopes gate the dangerous powers: pods:wallet:write (pod wallet money, backup passphrase) and pods:control:write (connectors, full-power control socket).
Path Parameters
Pod id, as returned by create/list.
Body
120Clamped to the pod's tier; an out-of-tier value is refused, not silently honoured.
Vanity endpoint slug, globally unique. null clears it back to the uuid form.
Owner/platform identity text layered into managed AGENTS.md and IDENTITY.md. Empty or null clears it on PATCH.
8000Owner/platform operating instructions layered into managed AGENTS.md. Empty or null clears it on PATCH.
8000Prompt for the agent quiet self-check heartbeat. Empty or null restores the default survival/check-work prompt on PATCH.
4000Self-check cadence in minutes. 0 disables it; otherwise use 15-1440.
0 <= x <= 1440BYOK only. Refused on a managed pod.
Show child attributes
Show child attributes
Response
The pod, re-read after the change. PATCH, GET and create all render through the same serializer, so they cannot disagree.
The public projection of a pod on /pods/v1. An allowlist: it never carries the engine, its version, the provider, the region, the machine plan, the IP, or any credential, so the pod's implementation can change without breaking your integration.
Show child attributes
Show child attributes
Was this page helpful?
