Update Annotation
Available for: Chatflow, Chatbot, Legacy Agent apps.
Updates an annotation’s question and answer.
curl --request PUT \
--url https://{api_base_url}/apps/annotations/{annotation_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"answer": "Dify is an open-source LLM application development platform for building AI-powered apps.",
"question": "What is Dify?"
}
'import requests
url = "https://{api_base_url}/apps/annotations/{annotation_id}"
payload = {
"answer": "Dify is an open-source LLM application development platform for building AI-powered apps.",
"question": "What is Dify?"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
answer: 'Dify is an open-source LLM application development platform for building AI-powered apps.',
question: 'What is Dify?'
})
};
fetch('https://{api_base_url}/apps/annotations/{annotation_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_base_url}/apps/annotations/{annotation_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'answer' => 'Dify is an open-source LLM application development platform for building AI-powered apps.',
'question' => 'What is Dify?'
]),
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_base_url}/apps/annotations/{annotation_id}"
payload := strings.NewReader("{\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\",\n \"question\": \"What is Dify?\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://{api_base_url}/apps/annotations/{annotation_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\",\n \"question\": \"What is Dify?\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/apps/annotations/{annotation_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\",\n \"question\": \"What is Dify?\"\n}"
response = http.request(request)
puts response.read_body{
"answer": "Dify is an open-source LLM application development platform for building AI-powered apps.",
"created_at": 1705407629,
"hit_count": 5,
"id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"question": "What is Dify?"
}{
"code": "not_found",
"message": "Annotation not found",
"status": 404
}Authorizations
Every request authenticates with an API key: Authorization: Bearer {API_KEY}. App endpoints take an app API key; knowledge endpoints take a knowledge base API key (Get Started).
Keep keys server-side; never embed them in client code. Requests with a missing or invalid key fail with HTTP 401 (unauthorized).
Path Parameters
ID of the annotation to update. Get annotation IDs from List Annotations.
Body
Response
Annotation updated successfully.
Predefined answer returned when the annotation is matched.
Creation timestamp (Unix epoch seconds).
Number of times this annotation has been matched and returned as a reply.
Unique annotation identifier.
Question text that triggers this annotation.
Was this page helpful?
curl --request PUT \
--url https://{api_base_url}/apps/annotations/{annotation_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"answer": "Dify is an open-source LLM application development platform for building AI-powered apps.",
"question": "What is Dify?"
}
'import requests
url = "https://{api_base_url}/apps/annotations/{annotation_id}"
payload = {
"answer": "Dify is an open-source LLM application development platform for building AI-powered apps.",
"question": "What is Dify?"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
answer: 'Dify is an open-source LLM application development platform for building AI-powered apps.',
question: 'What is Dify?'
})
};
fetch('https://{api_base_url}/apps/annotations/{annotation_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_base_url}/apps/annotations/{annotation_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'answer' => 'Dify is an open-source LLM application development platform for building AI-powered apps.',
'question' => 'What is Dify?'
]),
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_base_url}/apps/annotations/{annotation_id}"
payload := strings.NewReader("{\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\",\n \"question\": \"What is Dify?\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://{api_base_url}/apps/annotations/{annotation_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\",\n \"question\": \"What is Dify?\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/apps/annotations/{annotation_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\",\n \"question\": \"What is Dify?\"\n}"
response = http.request(request)
puts response.read_body{
"answer": "Dify is an open-source LLM application development platform for building AI-powered apps.",
"created_at": 1705407629,
"hit_count": 5,
"id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"question": "What is Dify?"
}{
"code": "not_found",
"message": "Annotation not found",
"status": 404
}