cURL
curl -X PATCH 'https://api.gumloop.com/api/v1/agents/abc123DEFghiJKL' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"description": "Researches enterprise accounts and drafts outreach",
"is_active": true
}'from gumloop import Gumloop
client = Gumloop(access_token="YOUR_ACCESS_TOKEN")
response = client.agents.update(
"abc123DEFghiJKL",
description="Researches enterprise accounts and drafts outreach",
is_active=True,
)
print(response.agent.description)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Researches enterprise accounts and drafts outreach',
is_active: true
})
};
fetch('https://api.gumloop.com/api/v1/agents/{agent_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://api.gumloop.com/api/v1/agents/{agent_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([
'description' => 'Researches enterprise accounts and drafts outreach',
'is_active' => true
]),
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.gumloop.com/api/v1/agents/{agent_id}"
payload := strings.NewReader("{\n \"description\": \"Researches enterprise accounts and drafts outreach\",\n \"is_active\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.gumloop.com/api/v1/agents/{agent_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Researches enterprise accounts and drafts outreach\",\n \"is_active\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gumloop.com/api/v1/agents/{agent_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Researches enterprise accounts and drafts outreach\",\n \"is_active\": true\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"id": "abc123DEFghiJKL",
"name": "Sales research agent",
"description": "Researches enterprise accounts and drafts outreach",
"team_id": "team_4f8c92ab",
"is_active": true,
"tools": [],
"metadata": {},
"model_name": "anthropic/claude-sonnet-4",
"system_prompt": "You are a B2B sales research assistant.",
"resources": [],
"folder_id": "folder_91ab",
"type": null,
"created_at": "2026-05-15T14:32:00Z",
"active_trigger_count": null,
"creator": {
"id": "user_8c2a1b",
"first_name": "Ada",
"last_name": "Lovelace",
"email": "ada@example.com",
"profile_picture": null
}
}
}Update agent
Update an existing agent. Only fields included in the request body are changed; omitted fields are left untouched.
This endpoint edits document fields only. To attach or detach skills, use PATCH /agents/{agent_id}/skills; to manage MCP servers, use the agent MCP server endpoints.
PATCH
/
agents
/
{agent_id}
cURL
curl -X PATCH 'https://api.gumloop.com/api/v1/agents/abc123DEFghiJKL' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"description": "Researches enterprise accounts and drafts outreach",
"is_active": true
}'from gumloop import Gumloop
client = Gumloop(access_token="YOUR_ACCESS_TOKEN")
response = client.agents.update(
"abc123DEFghiJKL",
description="Researches enterprise accounts and drafts outreach",
is_active=True,
)
print(response.agent.description)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Researches enterprise accounts and drafts outreach',
is_active: true
})
};
fetch('https://api.gumloop.com/api/v1/agents/{agent_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://api.gumloop.com/api/v1/agents/{agent_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([
'description' => 'Researches enterprise accounts and drafts outreach',
'is_active' => true
]),
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.gumloop.com/api/v1/agents/{agent_id}"
payload := strings.NewReader("{\n \"description\": \"Researches enterprise accounts and drafts outreach\",\n \"is_active\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.gumloop.com/api/v1/agents/{agent_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Researches enterprise accounts and drafts outreach\",\n \"is_active\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gumloop.com/api/v1/agents/{agent_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Researches enterprise accounts and drafts outreach\",\n \"is_active\": true\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"id": "abc123DEFghiJKL",
"name": "Sales research agent",
"description": "Researches enterprise accounts and drafts outreach",
"team_id": "team_4f8c92ab",
"is_active": true,
"tools": [],
"metadata": {},
"model_name": "anthropic/claude-sonnet-4",
"system_prompt": "You are a B2B sales research assistant.",
"resources": [],
"folder_id": "folder_91ab",
"type": null,
"created_at": "2026-05-15T14:32:00Z",
"active_trigger_count": null,
"creator": {
"id": "user_8c2a1b",
"first_name": "Ada",
"last_name": "Lovelace",
"email": "ada@example.com",
"profile_picture": null
}
}
}Authorizations
Path Parameters
ID of the agent to update.
Body
application/json
ID of the LLM the agent runs on. Use GET /models to discover valid values.
Example:
"anthropic/claude-sonnet-4"
Example:
"Researches enterprise accounts and drafts outreach"
When provided, replaces the agent's tool list.
When provided, replaces the agent's resource list.
When provided, transfers ownership of the agent to this team.
Response
The updated agent.
Show child attributes
Show child attributes
Was this page helpful?
⌘I
