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,
"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,
"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,
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,
'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 \"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 \"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 \"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
},
"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.
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,
"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,
"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,
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,
'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 \"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 \"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 \"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
},
"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.
BYOK 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?
