Create a knowledge base
curl --request POST \
--url https://api.reply.io/v3/ai-sdr/knowledge-bases \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Product knowledge base v3",
"instructions": "Reference internal launch deck before answering pricing questions."
}
'import requests
url = "https://api.reply.io/v3/ai-sdr/knowledge-bases"
payload = {
"name": "Product knowledge base v3",
"instructions": "Reference internal launch deck before answering pricing questions."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Product knowledge base v3',
instructions: 'Reference internal launch deck before answering pricing questions.'
})
};
fetch('https://api.reply.io/v3/ai-sdr/knowledge-bases', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Product knowledge base v3',
'instructions' => 'Reference internal launch deck before answering pricing questions.'
]),
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"
payload := strings.NewReader("{\n \"name\": \"Product knowledge base v3\",\n \"instructions\": \"Reference internal launch deck before answering pricing questions.\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.reply.io/v3/ai-sdr/knowledge-bases")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Product knowledge base v3\",\n \"instructions\": \"Reference internal launch deck before answering pricing questions.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/knowledge-bases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Product knowledge base v3\",\n \"instructions\": \"Reference internal launch deck before answering pricing questions.\"\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": "/name",
"detail": "'name' must not be empty."
}
]
}{
"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": "Bad Gateway",
"status": 502,
"detail": "Upstream service returned an unexpected error",
"code": "knowledgeBase.upstreamFailure"
}AI SDR Knowledge Bases
Create a knowledge base
Requires the
ai-sdr:write scope (or a broader one that includes it).
Creates a new knowledge base. Only name is required.
Requires the AI SDR feature on the caller’s team.
POST
/
v3
/
ai-sdr
/
knowledge-bases
Create a knowledge base
curl --request POST \
--url https://api.reply.io/v3/ai-sdr/knowledge-bases \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Product knowledge base v3",
"instructions": "Reference internal launch deck before answering pricing questions."
}
'import requests
url = "https://api.reply.io/v3/ai-sdr/knowledge-bases"
payload = {
"name": "Product knowledge base v3",
"instructions": "Reference internal launch deck before answering pricing questions."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Product knowledge base v3',
instructions: 'Reference internal launch deck before answering pricing questions.'
})
};
fetch('https://api.reply.io/v3/ai-sdr/knowledge-bases', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Product knowledge base v3',
'instructions' => 'Reference internal launch deck before answering pricing questions.'
]),
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"
payload := strings.NewReader("{\n \"name\": \"Product knowledge base v3\",\n \"instructions\": \"Reference internal launch deck before answering pricing questions.\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.reply.io/v3/ai-sdr/knowledge-bases")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Product knowledge base v3\",\n \"instructions\": \"Reference internal launch deck before answering pricing questions.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/ai-sdr/knowledge-bases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Product knowledge base v3\",\n \"instructions\": \"Reference internal launch deck before answering pricing questions.\"\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": "/name",
"detail": "'name' must not be empty."
}
]
}{
"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": "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.
Body
application/json
Response
Knowledge base created 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.
⌘I