API напоминаний
API списка напоминаний
Получайте напоминания вашего рабочего пространства по 50 штук, начиная с самых новых. Используйте этот API, чтобы находить ID напоминаний, проверять свои автоматизации или создавать их резервные копии.
https://wbiztool.com/api/v1/reminder/list/Тело запроса: JSON или поля формы
Этот endpoint принимает только POST. Запрос GET, даже со строкой запроса, возвращает HTTP 400 с Invalid JSON format: Expecting value….
Список включает активные и приостановленные напоминания всего рабочего пространства — созданные как через API, так и на странице Напоминания. Отменённые напоминания не включаются.
Быстрый пример#
curl -X POST https://wbiztool.com/api/v1/reminder/list/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"page": 1
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/list/",
json={"client_id": 12345, "api_key": "YOUR_API_KEY", "page": 1},
timeout=60,
)
try:
result = response.json() # read the body even when the HTTP code is 400
except ValueError:
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check that your api_key exists.")
if result["status"] == 1:
print(f"{result['total']} reminders in total")
for reminder in result["reminders"]:
print(reminder["id"], reminder["name"], reminder["cron_expression"], reminder["is_active"])
else:
print("Failed:", result["message"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/reminder/list/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ client_id: 12345, api_key: "YOUR_API_KEY", page: 1 }),
});
// Read the body even when the HTTP code is 400. A non-JSON reply means the api_key wasn't found.
const text = await response.text();
let result;
try {
result = JSON.parse(text);
} catch {
throw new Error(`HTTP ${response.status}: not JSON. Check that your api_key exists.`);
}
if (result.status === 1) {
console.log(`${result.total} reminders in total`);
for (const reminder of result.reminders) {
console.log(reminder.id, reminder.name, reminder.cron_expression, reminder.is_active);
}
} else {
console.error("Failed:", result.message);
}<?php
$ch = curl_init('https://wbiztool.com/api/v1/reminder/list/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'page' => 1,
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($result === null) {
echo "HTTP $httpCode: not JSON. Check that your api_key exists.";
} elseif ($result['status'] === 1) {
foreach ($result['reminders'] as $reminder) {
echo $reminder['id'] . ' ' . $reminder['name'] . ' ' . $reminder['cron_expression'] . "\n";
}
} else {
echo 'Failed: ' . $result['message'];
}Замените 12345 и YOUR_API_KEY своими значениями. Где их найти, описано в разделе Аутентификация.
Параметры запроса#
client_idintegerобязательноВаш API Client ID из раздела Настройки → API ключи.
api_keystringобязательноВаш API-ключ с той же страницы.
pageintegerнеобязательноНомер страницы, начиная с
1(по умолчанию). На каждой странице 50 напоминаний, размер страницы изменить нельзя. Значение, не являющееся целым числом от 1 и больше, считается1.
Ответ#
Успешный запрос возвращает HTTP 200:
{
"reminders": [
{
"id": 3187,
"name": "Monthly rent reminder",
"to_number": "919876543210",
"message_template": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"msg_type": 0,
"msg_type_display": "Text",
"img_url": "",
"file_name": "",
"cron_expression": "0 10 1 * *",
"next_run": "2026-10-01 10:00:00 UTC",
"is_active": true,
"whatsapp_client_id": 678,
"created_at": "2026-09-16 04:45:12"
}
],
"total": 1,
"page": 1,
"page_size": 50,
"message": "Success",
"status": 1
}
| Поле | Тип | Описание |
|---|---|---|
status | integer | 1 при успехе, 0, если запрос не выполнен. |
message | string | Success, иначе текст ошибки. |
reminders | array | Напоминания на этой странице, начиная с самых новых. Пустой, если страница за пределами списка. |
total | integer | Число напоминаний в рабочем пространстве на всех страницах. |
page | integer | Возвращённая страница. |
page_size | integer | Всегда 50. |
Поля напоминания#
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID напоминания. Используйте его в API отмены напоминаний. |
name | string | Название напоминания или Unnamed Reminder, если названия нет. |
to_number | string | Номер телефона или название группы, куда отправляется напоминание. |
message_template | string | Текст сообщения с ещё не заполненными переменными шаблона. |
msg_type | integer | 0 — текст, 1 — изображение, 2 — файл. |
msg_type_display | string | Text, Image или File. |
img_url | string or null | URL изображения для напоминаний с изображением или URL файла для напоминаний с файлом, созданных через API. В остальных случаях может быть пустым или null. |
file_name | string or null | Для напоминаний с файлом: URL файла (напоминания, созданные в панели управления) или имя файла (напоминания, созданные через API, URL которых находится в img_url). В остальных случаях может быть пустым или null. |
cron_expression | string | Расписание. См. раздел Выражения cron. |
next_run | string | Следующее срабатывание расписания в формате YYYY-MM-DD HH:MM:SS UTC или Invalid cron, если выражение не удаётся разобрать. См. предупреждение ниже. |
is_active | boolean | true, если напоминание работает, false, если оно приостановлено. |
whatsapp_client_id | integer or null | Номер WhatsApp, с которого оно отправляется, или null, если используется первый подключённый номер. |
created_at | string | Когда напоминание было создано, в UTC, в формате YYYY-MM-DD HH:MM:SS. |
Ошибки#
Ошибки возвращаются с HTTP 400 и status, равным 0, если не указано иное:
{ "status": 0, "message": "Upgrade your plan to use reminders feature" }
| Сообщение | Как исправить |
|---|---|
Invalid JSON format: … | Тело JSON некорректно. Эта ошибка возвращается и для запроса GET или запроса с полями формы без client_id. |
Auth Error - Please send correct API key and Client id | Передайте и client_id, и api_key. |
Invalid client id | Передайте client_id числом. |
Auth Error: invalid api key | Ключ принадлежит другому client_id. |
Auth Error: please check client id | Ключ не привязан к рабочему пространству. Создайте новый ключ в нужном рабочем пространстве. |
Demo Account cannot access APIs | Используйте обычный аккаунт. |
Upgrade your plan to use reminders feature | Ваш тариф не включает напоминания. Повысьте тариф. После понижения тарифа существующие напоминания продолжают работать и расходовать кредиты, но их нельзя получить списком, отменить или приостановить, пока вы не повысите тариф. |
Error fetching reminders: … (HTTP 500) | Что-то пошло не так на нашей стороне. Повторите попытку. |
Если api_key не существует или удалён, ответом будет HTML-страница ошибки с HTTP 500 вместо JSON. Проверьте свой ключ через API проверки учётных данных.
Чтение всех страниц#
Запрашивайте следующую страницу, пока на странице не окажется меньше 50 напоминаний.
import requests
reminders, page = [], 1
while True:
response = requests.post(
"https://wbiztool.com/api/v1/reminder/list/",
json={"client_id": 12345, "api_key": "YOUR_API_KEY", "page": page},
timeout=60,
)
try:
result = response.json()
except ValueError:
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check that your api_key exists.")
if result["status"] != 1:
raise RuntimeError(result["message"])
reminders += result["reminders"]
if len(result["reminders"]) < result["page_size"]:
break
page += 1
print(len(reminders), "reminders")// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const reminders = [];
let page = 1;
while (true) {
const response = await fetch("https://wbiztool.com/api/v1/reminder/list/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ client_id: 12345, api_key: "YOUR_API_KEY", page }),
});
const text = await response.text();
let result;
try {
result = JSON.parse(text);
} catch {
throw new Error(`HTTP ${response.status}: not JSON. Check that your api_key exists.`);
}
if (result.status !== 1) throw new Error(result.message);
reminders.push(...result.reminders);
if (result.reminders.length < result.page_size) break;
page += 1;
}
console.log(reminders.length, "reminders");Советы#
- Храните собственную копию
timezoneкаждого напоминания при его создании, так как этот endpoint его не возвращает. - Приостановленные напоминания находите, фильтруя по
is_active, равномуfalse. Возобновить их можно на странице Напоминания. - Очистка старых автоматизаций: сначала соберите со всех страниц ID напоминаний, которые хотите отменить, а затем вызовите API отмены напоминаний для каждого из них. Если отменять напоминания во время перебора страниц, последующие напоминания сдвигаются на более ранние страницы, и часть из них будет пропущена.
