Skip to main content
PUT
/
apps
/
annotations
/
{annotation_id}
Update Annotation
curl --request PUT \
  --url https://{api_base_url}/apps/annotations/{annotation_id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "question": "What is Dify?",
  "answer": "Dify is an open-source LLM application development platform for building AI-powered apps."
}
'
import requests

url = "https://{api_base_url}/apps/annotations/{annotation_id}"

payload = {
"question": "What is Dify?",
"answer": "Dify is an open-source LLM application development platform for building AI-powered apps."
}
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({
question: 'What is Dify?',
answer: 'Dify is an open-source LLM application development platform for building AI-powered apps.'
})
};

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([
'question' => 'What is Dify?',
'answer' => 'Dify is an open-source LLM application development platform for building AI-powered apps.'
]),
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 \"question\": \"What is Dify?\",\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\"\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 \"question\": \"What is Dify?\",\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\"\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 \"question\": \"What is Dify?\",\n \"answer\": \"Dify is an open-source LLM application development platform for building AI-powered apps.\"\n}"

response = http.request(request)
puts response.read_body
{
  "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
  "question": "What is Dify?",
  "answer": "Dify is an open-source LLM application development platform for building AI-powered apps.",
  "hit_count": 5,
  "created_at": 1705407629
}
{
"status": 404,
"code": "not_found",
"message": "Annotation not found"
}

Authorizations

Authorization
string
header
required

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

annotation_id
string<uuid>
required

ID of the annotation to update. Get annotation IDs from List Annotations.

Body

application/json

Request body for updating an annotation.

question
string
required

New question text for the annotation.

answer
string
required

New answer text for the annotation.

Response

Annotation updated successfully.

id
string<uuid>

Unique annotation identifier.

question
string | null

Question text that triggers this annotation.

answer
string | null

Predefined answer returned when the annotation is matched.

hit_count
integer | null

Number of times this annotation has been matched and returned as a reply.

created_at
integer<int64> | null

Creation timestamp (Unix epoch seconds).