Update an agent
curl --request PUT \
--url https://agp.eu.hcompany.ai/api/v2/agents/{agent_name} \
--header 'Authorization: Bearer <token>'import requests
url = "https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}"
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {Authorization: 'Bearer <token>'}};
fetch('https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}', 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://agp.eu.hcompany.ai/api/v2/agents/{agent_name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyAgents
Update an agent
Replace the whole configuration of an agent in your catalog. Later sessions pick up the new spec.
PUT
/
api
/
v2
/
agents
/
{agent_name}
Update an agent
curl --request PUT \
--url https://agp.eu.hcompany.ai/api/v2/agents/{agent_name} \
--header 'Authorization: Bearer <token>'import requests
url = "https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}"
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {Authorization: 'Bearer <token>'}};
fetch('https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}', 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://agp.eu.hcompany.ai/api/v2/agents/{agent_name}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://agp.eu.hcompany.ai/api/v2/agents/{agent_name}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyReplaces an agent’s whole configuration as a new revision. Later sessions pick up the new spec, except those pinned to an earlier revision with
name:N. Sending the current spec changes nothing. Renames are not supported. To change a few fields, use Patch.
Returns the updated agent object, with its new revision in the ETag header.
Headers
string
The
ETag of the revision you based this change on, for example "3". If the agent has moved past it, the write fails with 412. Omit it, or send *, to write regardless.Path parameters
string
required
The agent’s
name (e.g. my-research-bot or myorg/web-helper). Slash-containing names are supported.Query parameters
string
A note stored on the new revision, such as why you made the change. Up to 500 characters. Shown by List revisions.
Request body
The full agent, with the same fields and rules as Create an agent. Thename must equal the URL identifier. Omitted fields reset to their defaults, not their stored values: leaving out instructions, model, skills, or answer_format clears them.
Examples
curl -X PUT https://agp.eu.hcompany.ai/api/v2/agents/my-research-bot \
-H "Authorization: Bearer $HAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-research-bot",
"description": "Researches a topic and returns a sourced summary.",
"environments": ["h/browser"],
"instructions": "Always cite the page you took each claim from.",
"skills": ["web-browse", "extract-data"]
}'
from hai_agents import Client
client = Client()
agent = client.agents.update_agent(
agent_name="my-research-bot",
name="my-research-bot",
description="Researches a topic and returns a sourced summary.",
environments=["h/browser"],
instructions="Always cite the page you took each claim from.",
skills=["web-browse", "extract-data"],
)
print(agent.name)
import { HaiAgentsClient } from "hai-agents";
const client = new HaiAgentsClient();
const agent = await client.agents.updateAgent({
agentName: "my-research-bot",
body: {
name: "my-research-bot",
description: "Researches a topic and returns a sourced summary.",
environments: ["h/browser"],
instructions: "Always cite the page you took each claim from.",
skills: ["web-browse", "extract-data"],
},
});
console.log(agent.name);
Response
{
"name": "my-research-bot",
"description": "Researches a topic and returns a sourced summary.",
"environments": ["h/browser"],
"model": null,
"reasoning_effort": null,
"instructions": "Always cite the page you took each claim from.",
"subagents": null,
"skills": ["web-browse", "extract-data"],
"answer_format": null,
"tools": null
}
Errors
| Status | Cause |
|---|---|
400 | The name in the body does not match the URL identifier (renames are not supported), or If-Match is not a single revision tag. |
403 | The agent is reserved (h/) and read-only. |
404 | Agent not found or you don’t have access. |
412 | If-Match names a revision that is no longer current. The ETag header has the current one: read it, reapply your change, and retry. |
422 | Body failed validation. Common cases: environments empty on an agent with no subagents or tools, invalid name shape. |
Was this page helpful?