API de recordatorios
API para listar recordatorios
Obtén los recordatorios de tu espacio de trabajo, de 50 en 50, del más reciente al más antiguo. Úsala para encontrar los IDs de los recordatorios, revisar tus automatizaciones o hacer una copia de seguridad.
https://wbiztool.com/api/v1/reminder/list/Cuerpo: JSON o campos de formulario
Este endpoint solo acepta POST. Una solicitud GET, incluso con query string, devuelve HTTP 400 con Invalid JSON format: Expecting value….
La lista incluye los recordatorios activos y pausados de todo el espacio de trabajo, tanto si se crearon a través de la API como en la página de Recordatorios. Los recordatorios cancelados no se incluyen.
Ejemplo rápido#
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'];
}Sustituye 12345 y YOUR_API_KEY por tus propios valores. Consulta Autenticación para saber dónde encontrarlos.
Parámetros de la solicitud#
client_idintegerobligatorioTu ID de cliente de la API, de Configuración → Claves API.
api_keystringobligatorioTu clave API, de esa misma página.
pageintegeropcionalNúmero de página, empezando en
1(valor predeterminado). Cada página contiene 50 recordatorios y el tamaño de página no se puede cambiar. Un valor que no sea un número entero de 1 o más se trata como1.
Respuesta#
Una solicitud correcta devuelve 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
}
| Campo | Tipo | Descripción |
|---|---|---|
status | integer | 1 si todo va bien, 0 si la solicitud falló. |
message | string | Success; en caso contrario, el error. |
reminders | array | Los recordatorios de esta página, del más reciente al más antiguo. Vacío si la página está más allá del final. |
total | integer | Recordatorios del espacio de trabajo, en todas las páginas. |
page | integer | La página devuelta. |
page_size | integer | Siempre 50. |
Campos de cada recordatorio#
| Campo | Tipo | Descripción |
|---|---|---|
id | integer | El ID del recordatorio. Úsalo con Cancelar recordatorio. |
name | string | El nombre del recordatorio, o Unnamed Reminder si no tiene. |
to_number | string | Número de teléfono o nombre del grupo al que se envía el recordatorio. |
message_template | string | El mensaje, con las variables de plantilla aún sin rellenar. |
msg_type | integer | 0 texto, 1 imagen, 2 archivo. |
msg_type_display | string | Text, Image o File. |
img_url | string or null | URL de la imagen en los recordatorios con imagen, o la URL del archivo en los recordatorios con archivo creados a través de la API. En los demás casos puede estar vacío o ser null. |
file_name | string or null | En los recordatorios con archivo: la URL del archivo (recordatorios creados en el panel) o el nombre del archivo (recordatorios creados a través de la API, cuya URL está en img_url). En los demás casos puede estar vacío o ser null. |
cron_expression | string | La programación. Consulta Expresiones cron. |
next_run | string | La próxima vez que se cumple la programación, como YYYY-MM-DD HH:MM:SS UTC, o Invalid cron si la expresión no se puede leer. Consulta el aviso de abajo. |
is_active | boolean | true si el recordatorio está en marcha, false si está pausado. |
whatsapp_client_id | integer or null | El número de WhatsApp desde el que se envía, o null si usa el primer número conectado. |
created_at | string | Cuándo se creó el recordatorio, en UTC, como YYYY-MM-DD HH:MM:SS. |
Errores#
Los errores devuelven HTTP 400 con status con valor 0, salvo que se indique lo contrario:
{ "status": 0, "message": "Upgrade your plan to use reminders feature" }
| Mensaje | Cómo solucionarlo |
|---|---|
Invalid JSON format: … | El cuerpo JSON no es válido. También recibes este error en una solicitud GET o en una solicitud de formulario sin client_id. |
Auth Error - Please send correct API key and Client id | Envía client_id y api_key. |
Invalid client id | Envía client_id como número. |
Auth Error: invalid api key | La clave pertenece a otro client_id. |
Auth Error: please check client id | La clave no está vinculada a ningún espacio de trabajo. Crea una clave nueva en el espacio de trabajo que quieras usar. |
Demo Account cannot access APIs | Usa una cuenta normal. |
Upgrade your plan to use reminders feature | Tu plan no incluye recordatorios. Mejora tu plan. Los recordatorios existentes siguen ejecutándose y consumiendo créditos después de bajar de plan, y no se pueden listar, cancelar ni pausar hasta que mejores tu plan. |
Error fetching reminders: … (HTTP 500) | Algo falló por nuestra parte. Vuelve a intentarlo. |
Si el api_key no existe o se ha eliminado, la respuesta es una página de error HTML con HTTP 500 en lugar de JSON. Prueba tu clave con Comprobar credenciales.
Leer todas las páginas#
Sigue pidiendo la página siguiente hasta que una página tenga menos de 50 recordatorios.
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");Consejos#
- Guarda tu propia copia de la
timezonede cada recordatorio al crearlo, ya que este endpoint no la devuelve. - Encuentra los recordatorios pausados filtrando por
is_activeigual afalse. Reanúdalos en la página de Recordatorios. - Limpia las automatizaciones antiguas: primero reúne en todas las páginas los IDs que quieras cancelar y luego llama a Cancelar recordatorio para cada uno. Si cancelas mientras recorres las páginas, los recordatorios posteriores se desplazan a páginas anteriores y algunos se omiten.
