Follow-Ups
Send sequenced follow-up emails to leads or contacts on a schedule.
Authorization: Bearer <token> header.Core Endpoints
Returns topics visible to the current user based on scope: - `mine` — only the user's own topics - `team` — topics where the creator is the user's manager - `company` — all topics in the org
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| scope | string | Optional | Values: mine, team, company |
| is_active | integer | Optional | Values: 0, 1 |
| search | string | Optional | |
| page | integer | Optional | Default: 1 |
Code Examples
curl -X GET "https://crm.revorbit.com/api/follow-up-topics" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Optional `interview_template_id` links a qualifying-interview template to the topic, enabling the `{{Interview.link}}` merge tag in its emails. On first send each recipient gets a personal invite (pre-filled from lead data); all steps reuse the same link and the sequence auto-pauses when the interview is submitted.
Code Examples
curl -X POST "https://crm.revorbit.com/api/follow-up-topics" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X GET "https://crm.revorbit.com/api/follow-up-topics/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics/{id}",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Accepts the same fields as create, including `interview_template_id` (nullable) which enables the `{{Interview.link}}` merge tag.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X PUT "https://crm.revorbit.com/api/follow-up-topics/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics/{id}",
{
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X DELETE "https://crm.revorbit.com/api/follow-up-topics/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics/{id}",
{
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X POST "https://crm.revorbit.com/api/follow-up-topics/{id}/copy" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics/{id}/copy",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X POST "https://crm.revorbit.com/api/follow-up-topics/{topicId}/templates" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics/{topicId}/templates",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X PUT "https://crm.revorbit.com/api/follow-up-topics/{topicId}/templates/reorder" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-topics/{topicId}/templates/reorder",
{
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X GET "https://crm.revorbit.com/api/follow-up-templates/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-templates/{id}",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X PUT "https://crm.revorbit.com/api/follow-up-templates/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-templates/{id}",
{
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X DELETE "https://crm.revorbit.com/api/follow-up-templates/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-templates/{id}",
{
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X POST "https://crm.revorbit.com/api/follow-up-templates/{id}/test-send" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-templates/{id}/test-send",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional | ||
| string | Optional | ||
| string | Optional | ||
| string | Optional |
Code Examples
curl -X GET "https://crm.revorbit.com/api/follow-up-assignments" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/follow-up-assignments",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Body shape — single: `{topic_id, recipient_type, recipient_id, override_unsubscribed?}`. Body shape — bulk: `{topic_id, recipients: [{type, id}, ...], override_unsubscribed?}`. Returns `{created: [...], skipped: [{type, id, reason, ...}]}` — skipped includes `not_found`, `no_email`, `already_assigned`, `suppressed:hard_bounce`, `unsubscribed:topic`, etc.
Code Examples
curl -X POST "https://crm.revorbit.com/api/follow-up-assignments" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/follow-up-assignments",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Returns `{ok: [...], blocked: [{reason, ...}]}` so the UI can show what will be skipped before confirming.
Code Examples
curl -X POST "https://crm.revorbit.com/api/follow-up-assignments/preflight" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/follow-up-assignments/preflight",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X GET "https://crm.revorbit.com/api/follow-up-assignments/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-assignments/{id}",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X PUT "https://crm.revorbit.com/api/follow-up-assignments/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-assignments/{id}",
{
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X DELETE "https://crm.revorbit.com/api/follow-up-assignments/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/follow-up-assignments/{id}",
{
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| string | Optional |
Code Examples
curl -X GET "https://crm.revorbit.com/api/public/follow-up-unsubscribe" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/public/follow-up-unsubscribe",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();Used by Gmail/Outlook one-click List-Unsubscribe headers (RFC 8058) and by the manage-preferences form. Marks active assignments for this email as 'unsubscribed' and adds to follow_up_unsubscribes.
Code Examples
curl -X POST "https://crm.revorbit.com/api/public/follow-up-unsubscribe" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/public/follow-up-unsubscribe",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();