curl --request GET \
--url https://app.base44.com/api/agents/{agent_id}/webhooks \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/agents/{agent_id}/webhooks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/agents/{agent_id}/webhooks', 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://app.base44.com/api/agents/{agent_id}/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://app.base44.com/api/agents/{agent_id}/webhooks"
req, _ := http.NewRequest("GET", 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.get("https://app.base44.com/api/agents/{agent_id}/webhooks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/agents/{agent_id}/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "68a1d0f4f0b9d3002e7a5c52",
"target_url": "https://example.com/hooks/agent",
"events": [
"message.completed"
],
"description": "CRM sync",
"has_secret": true,
"last_trigger_time": "2026-08-02T14:30:00Z",
"last_error": {
"message": "Non-2xx response: 500",
"attempted_at": "2026-08-02T14:30:00+00:00",
"status_code": 500,
"response_body": "Internal Server Error",
"error_type": "ConnectTimeout"
},
"consecutive_failures": 0,
"disabled_at": "2026-08-03T08:00:00Z",
"created_date": "2026-08-01T09:15:00Z",
"updated_date": "2026-08-02T14:30:00Z"
}
]List Superagent webhooks
Lists a Superagent’s webhooks, newest first.
Each webhook shows whether deliveries are signed (has_secret), never the secret itself.
curl --request GET \
--url https://app.base44.com/api/agents/{agent_id}/webhooks \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/agents/{agent_id}/webhooks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/agents/{agent_id}/webhooks', 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://app.base44.com/api/agents/{agent_id}/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://app.base44.com/api/agents/{agent_id}/webhooks"
req, _ := http.NewRequest("GET", 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.get("https://app.base44.com/api/agents/{agent_id}/webhooks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/agents/{agent_id}/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "68a1d0f4f0b9d3002e7a5c52",
"target_url": "https://example.com/hooks/agent",
"events": [
"message.completed"
],
"description": "CRM sync",
"has_secret": true,
"last_trigger_time": "2026-08-02T14:30:00Z",
"last_error": {
"message": "Non-2xx response: 500",
"attempted_at": "2026-08-02T14:30:00+00:00",
"status_code": 500,
"response_body": "Internal Server Error",
"error_type": "ConnectTimeout"
},
"consecutive_failures": 0,
"disabled_at": "2026-08-03T08:00:00Z",
"created_date": "2026-08-01T09:15:00Z",
"updated_date": "2026-08-02T14:30:00Z"
}
]Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the Superagent. It's the agent's app ID, shown in the agent's developer settings.
Response
The agent's webhooks.
ID of the webhook.
"68a1d0f4f0b9d3002e7a5c52"
HTTPS URL Base44 sends the events to.
"https://example.com/hooks/agent"
Events the webhook receives. message.created fires when a message is added to a conversation, and message.completed when the agent finishes a reply.
message.created, message.completed ["message.completed"]
Your label for the webhook, or null when it has none.
"CRM sync"
Whether deliveries are signed. When true, each delivery carries an X-Base44-Signature header, an HMAC-SHA256 of the body.
true
Time of the last delivery attempt, successful or not, as a UTC timestamp in ISO 8601 format, or null before the first one.
"2026-08-02T14:30:00Z"
What went wrong on the last failed delivery, or null when the last delivery succeeded or none has failed.
Show child attributes
Show child attributes
Deliveries that failed in a row. After 20, Base44 turns the webhook off and sets disabled_at.
0
Time the webhook was turned off, as a UTC timestamp in ISO 8601 format, or null while it's on. Turn it back on with enabled: true in Update Superagent webhook.
"2026-08-03T08:00:00Z"
Time the webhook was created, as a UTC timestamp in ISO 8601 format.
"2026-08-01T09:15:00Z"
Time the webhook last changed, as a UTC timestamp in ISO 8601 format.
"2026-08-02T14:30:00Z"
Was this page helpful?