Duplicate a knowledge base
curl --request POST \
--url https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate', 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}/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate"
req, _ := http.NewRequest("POST", 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.post("https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
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 contains validation errors.",
"errors": [
{
"pointer": "/id",
"detail": "'id' must be a positive integer."
}
]
}{
"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"
}Knowledge Bases
Duplicate a knowledge base
Requires the
ai-sdr:write scope (or a broader one that includes it).
Copy a knowledge base with its documents, links, reply handlers, and reengagement cards, so you can adapt it safely.
POST
/
v3
/
ai-sdr
/
knowledge-bases
/
{id}
/
duplicate
Duplicate a knowledge base
curl --request POST \
--url https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate', 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}/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate"
req, _ := http.NewRequest("POST", 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.post("https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/knowledge-bases/{id}/duplicate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
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 contains validation errors.",
"errors": [
{
"pointer": "/id",
"detail": "'id' must be a positive integer."
}
]
}{
"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 to duplicate
Required range:
x >= 1Response
Knowledge base duplicated 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.