Skip to main content
PATCH
/
v3
/
ai-sdr
/
knowledge-bases
/
{knowledge_base_id}
/
reengagement-cards
/
{reengagement_card_id}
Update a reengagement card
curl --request PATCH \
  --url https://api.reply.io/v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "isEnabled": false,
  "sendAfter": 45
}
'
import requests

url = "https://api.reply.io/v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_id}"

payload = {
"isEnabled": False,
"sendAfter": 45
}
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({isEnabled: false, sendAfter: 45})
};

fetch('https://api.reply.io/v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_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/{knowledge_base_id}/reengagement-cards/{reengagement_card_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([
'isEnabled' => false,
'sendAfter' => 45
]),
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/{knowledge_base_id}/reengagement-cards/{reengagement_card_id}"

payload := strings.NewReader("{\n \"isEnabled\": false,\n \"sendAfter\": 45\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/{knowledge_base_id}/reengagement-cards/{reengagement_card_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"isEnabled\": false,\n \"sendAfter\": 45\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.reply.io/v3/ai-sdr/knowledge-bases/{knowledge_base_id}/reengagement-cards/{reengagement_card_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 \"isEnabled\": false,\n \"sendAfter\": 45\n}"

response = http.request(request)
puts response.read_body
{
  "id": "9c1f8a7e-0b3a-4d11-9b9c-2c4f8a7e0b3a",
  "name": "30-day silent prospect",
  "instructions": "Gentle nudge with new case study; no hard ask.",
  "sampleAnswer": "Hi {{firstName}}, just sharing a quick case study...",
  "sendAfter": 30,
  "toneOfVoice": "empathetic",
  "responseLength": "short",
  "links": [
    "https://example.com/case-study-northstar"
  ],
  "media": [
    {
      "id": 12345,
      "fileName": "case-study-thumbnail.png",
      "size": 248
    }
  ],
  "isEnabled": true,
  "deliveryMode": "draft",
  "createdAt": "2026-05-10T14:32:11Z"
}
{
"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": "Reengagement card '9c1f8a7e-0b3a-4d11-9b9c-2c4f8a7e0b3a' not found",
"code": "knowledgeBase.notFound"
}
{
"title": "Bad Gateway",
"status": 502,
"detail": "Upstream service returned an unexpected error",
"code": "knowledgeBase.upstreamFailure"
}

Authorizations

Authorization
string
header
required

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
integer<int64>
required
Required range: x >= 1
reengagement_card_id
string<uuid>
required

Body

application/json

Partial update for a reengagement card. Send only the fields you want to change; absent fields retain their current value. At least one field must be present. Media is not patched here — manage it via the /media sub-resource.

name
string
Required string length: 1 - 256
instructions
string
Required string length: 1 - 2048
sampleAnswer
string
Maximum string length: 1024
sendAfter
integer
Required range: x >= 1
toneOfVoice
enum<string>

Tone applied to generated replies and reengagement messages.

Available options:
confident,
persuasive,
witty,
straightforward,
empathetic
responseLength
enum<string>

Target length of generated replies and reengagement messages.

Available options:
superShort,
short,
medium,
long
Maximum array length: 10
Required string length: 1 - 256
isEnabled
boolean
deliveryMode
enum<string>

How generated reengagement messages for this card are delivered

Available options:
draft,
auto

Response

Reengagement card updated successfully

Detailed representation of a reengagement card.

id
string<uuid>
read-only

Unique identifier for the reengagement card

name
string

Display name of the card

instructions
string

Instructions for what the reengagement message should say

sampleAnswer
string

Optional sample reengagement message used as a few-shot example

sendAfter
integer

Number of days after the last contact before this card fires

Required range: x >= 1
toneOfVoice
enum<string>

Tone applied to generated replies and reengagement messages.

Available options:
confident,
persuasive,
witty,
straightforward,
empathetic
responseLength
enum<string>

Target length of generated replies and reengagement messages.

Available options:
superShort,
short,
medium,
long

Reference URLs the AI SDR can quote when generating a reengagement message

media
KnowledgeBaseMedia · object[]
read-only

Media items attached to this card. Managed via the /media sub-resource.

isEnabled
boolean

Whether the card is currently active

deliveryMode
enum<string>

How generated reengagement messages for this card are delivered

Available options:
draft,
auto
createdAt
string<date-time>
read-only

Timestamp when the card was created