Create Follow-up
curl --request POST \
--url https://app.replyify.ai/api/follow-ups \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"due_at": "<string>",
"contact_id": "<string>",
"client_id": "<string>",
"reply_id": "<string>",
"action": "<string>",
"notes": "<string>",
"draft_message": "<string>"
}
'import requests
url = "https://app.replyify.ai/api/follow-ups"
payload = {
"due_at": "<string>",
"contact_id": "<string>",
"client_id": "<string>",
"reply_id": "<string>",
"action": "<string>",
"notes": "<string>",
"draft_message": "<string>"
}
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({
due_at: '<string>',
contact_id: '<string>',
client_id: '<string>',
reply_id: '<string>',
action: '<string>',
notes: '<string>',
draft_message: '<string>'
})
};
fetch('https://app.replyify.ai/api/follow-ups', 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://app.replyify.ai/api/follow-ups",
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([
'due_at' => '<string>',
'contact_id' => '<string>',
'client_id' => '<string>',
'reply_id' => '<string>',
'action' => '<string>',
'notes' => '<string>',
'draft_message' => '<string>'
]),
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://app.replyify.ai/api/follow-ups"
payload := strings.NewReader("{\n \"due_at\": \"<string>\",\n \"contact_id\": \"<string>\",\n \"client_id\": \"<string>\",\n \"reply_id\": \"<string>\",\n \"action\": \"<string>\",\n \"notes\": \"<string>\",\n \"draft_message\": \"<string>\"\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://app.replyify.ai/api/follow-ups")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"due_at\": \"<string>\",\n \"contact_id\": \"<string>\",\n \"client_id\": \"<string>\",\n \"reply_id\": \"<string>\",\n \"action\": \"<string>\",\n \"notes\": \"<string>\",\n \"draft_message\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.replyify.ai/api/follow-ups")
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 \"due_at\": \"<string>\",\n \"contact_id\": \"<string>\",\n \"client_id\": \"<string>\",\n \"reply_id\": \"<string>\",\n \"action\": \"<string>\",\n \"notes\": \"<string>\",\n \"draft_message\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyFollow-ups
Create Follow-up
Schedule a new follow-up email
POST
/
api
/
follow-ups
Create Follow-up
curl --request POST \
--url https://app.replyify.ai/api/follow-ups \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"due_at": "<string>",
"contact_id": "<string>",
"client_id": "<string>",
"reply_id": "<string>",
"action": "<string>",
"notes": "<string>",
"draft_message": "<string>"
}
'import requests
url = "https://app.replyify.ai/api/follow-ups"
payload = {
"due_at": "<string>",
"contact_id": "<string>",
"client_id": "<string>",
"reply_id": "<string>",
"action": "<string>",
"notes": "<string>",
"draft_message": "<string>"
}
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({
due_at: '<string>',
contact_id: '<string>',
client_id: '<string>',
reply_id: '<string>',
action: '<string>',
notes: '<string>',
draft_message: '<string>'
})
};
fetch('https://app.replyify.ai/api/follow-ups', 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://app.replyify.ai/api/follow-ups",
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([
'due_at' => '<string>',
'contact_id' => '<string>',
'client_id' => '<string>',
'reply_id' => '<string>',
'action' => '<string>',
'notes' => '<string>',
'draft_message' => '<string>'
]),
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://app.replyify.ai/api/follow-ups"
payload := strings.NewReader("{\n \"due_at\": \"<string>\",\n \"contact_id\": \"<string>\",\n \"client_id\": \"<string>\",\n \"reply_id\": \"<string>\",\n \"action\": \"<string>\",\n \"notes\": \"<string>\",\n \"draft_message\": \"<string>\"\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://app.replyify.ai/api/follow-ups")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"due_at\": \"<string>\",\n \"contact_id\": \"<string>\",\n \"client_id\": \"<string>\",\n \"reply_id\": \"<string>\",\n \"action\": \"<string>\",\n \"notes\": \"<string>\",\n \"draft_message\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.replyify.ai/api/follow-ups")
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 \"due_at\": \"<string>\",\n \"contact_id\": \"<string>\",\n \"client_id\": \"<string>\",\n \"reply_id\": \"<string>\",\n \"action\": \"<string>\",\n \"notes\": \"<string>\",\n \"draft_message\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyBody Parameters
string
required
ISO 8601 scheduled send time. Must be in the future (at least 1 minute from now).
string
required
The contact to send the follow-up to
string
required
The client account (used for AI context and connection routing)
string
Link to an existing reply thread (optional for manually created follow-ups)
string
default:"follow_up_message"
Follow-up type:
follow_up_message or linkedin_messagestring
Internal notes to guide AI generation. These are not sent to the contact.
string
The email content to send. If omitted, AI will generate the message before the scheduled time.
Response
Returns the created follow-up object.curl -X POST "https://app.replyify.ai/api/follow-ups" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contact_id": "contact_abc123",
"client_id": "client_xyz789",
"due_at": "2025-02-01T10:00:00Z",
"notes": "Follow up on pricing discussion from last week",
"action": "follow_up_message"
}'
const response = await fetch("https://app.replyify.ai/api/follow-ups", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
contact_id: "contact_abc123",
client_id: "client_xyz789",
due_at: "2025-02-01T10:00:00Z",
notes: "Follow up on pricing discussion",
}),
});
The
due_at must be in the future. Creating follow-ups with past dates returns a 400 error.If no
draft_message is provided, AI will automatically generate the message before the scheduled send time. This consumes 1 AI credit for generation + 1 for sending = 2 credits total.⌘I