curl --request PATCH \
--url https://api.reply.io/v3/ai-sdr/knowledge-bases/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"instructions": "Updated: reference Q3 launch deck instead of internal v2."
}
'import requests
url = "https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}"
payload = { "instructions": "Updated: reference Q3 launch deck instead of internal v2." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({instructions: 'Updated: reference Q3 launch deck instead of internal v2.'})
};
fetch('https://api.reply.io/v3/ai-sdr/knowledge-bases/{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.reply.io/v3/ai-sdr/knowledge-bases/{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([
'instructions' => 'Updated: reference Q3 launch deck instead of internal v2.'
]),
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.reply.io/v3/ai-sdr/knowledge-bases/{id}"
payload := strings.NewReader("{\n \"instructions\": \"Updated: reference Q3 launch deck instead of internal v2.\"\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.reply.io/v3/ai-sdr/knowledge-bases/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"instructions\": \"Updated: reference Q3 launch deck instead of internal v2.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/knowledge-bases/{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 \"instructions\": \"Updated: reference Q3 launch deck instead of internal v2.\"\n}"
response = http.request(request)
puts response.read_body{
"id": 4821,
"name": "Product knowledge base v3",
"instructions": "Reference internal launch deck before answering pricing questions.",
"updatedAt": "2026-05-10T14:32:11Z",
"ownerUserId": 1234
}{
"title": "Validation failed",
"status": 400,
"detail": "The request body contains validation errors.",
"errors": [
{
"pointer": "/",
"detail": "At least one field must be provided."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "AI SDR feature is not available for your team",
"code": "knowledgeBase.forbidden"
}{
"title": "Not Found",
"status": 404,
"detail": "Knowledge base '4821' not found",
"code": "knowledgeBase.notFound"
}{
"title": "Bad Gateway",
"status": 502,
"detail": "Upstream service returned an unexpected error",
"code": "knowledgeBase.upstreamFailure"
}Update a knowledge base
ai-sdr:write scope (or a broader one that includes it).
Rename a knowledge base or change its standing instructions. Send only what you’re changing; at least one field is required.
curl --request PATCH \
--url https://api.reply.io/v3/ai-sdr/knowledge-bases/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"instructions": "Updated: reference Q3 launch deck instead of internal v2."
}
'import requests
url = "https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}"
payload = { "instructions": "Updated: reference Q3 launch deck instead of internal v2." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({instructions: 'Updated: reference Q3 launch deck instead of internal v2.'})
};
fetch('https://api.reply.io/v3/ai-sdr/knowledge-bases/{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.reply.io/v3/ai-sdr/knowledge-bases/{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([
'instructions' => 'Updated: reference Q3 launch deck instead of internal v2.'
]),
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.reply.io/v3/ai-sdr/knowledge-bases/{id}"
payload := strings.NewReader("{\n \"instructions\": \"Updated: reference Q3 launch deck instead of internal v2.\"\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.reply.io/v3/ai-sdr/knowledge-bases/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"instructions\": \"Updated: reference Q3 launch deck instead of internal v2.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/knowledge-bases/{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 \"instructions\": \"Updated: reference Q3 launch deck instead of internal v2.\"\n}"
response = http.request(request)
puts response.read_body{
"id": 4821,
"name": "Product knowledge base v3",
"instructions": "Reference internal launch deck before answering pricing questions.",
"updatedAt": "2026-05-10T14:32:11Z",
"ownerUserId": 1234
}{
"title": "Validation failed",
"status": 400,
"detail": "The request body contains validation errors.",
"errors": [
{
"pointer": "/",
"detail": "At least one field must be provided."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "AI SDR feature is not available for your team",
"code": "knowledgeBase.forbidden"
}{
"title": "Not Found",
"status": 404,
"detail": "Knowledge base '4821' not found",
"code": "knowledgeBase.notFound"
}{
"title": "Bad Gateway",
"status": 502,
"detail": "Upstream service returned an unexpected error",
"code": "knowledgeBase.upstreamFailure"
}Authorizations
Authenticate every request with a Bearer token. Pass your Reply API key in the
Authorization header:
Authorization: Bearer <your-api-key>
Get your API key from the Reply dashboard: Settings → API Key.
Path Parameters
Knowledge base id
x >= 1Body
Partial update for a knowledge base. Send only the fields you want to change; absent fields retain their current value. At least one field must be present.
Response
Knowledge base updated successfully
Detailed representation of a knowledge base.
Unique identifier for the knowledge base
Display name of the knowledge base
Free-form instructions applied when the knowledge base is referenced by AI SDR generations.
Timestamp of the last modification
User ID of the owner. null when the owner has been removed from the team.