API de lembretes
API para listar lembretes
Obtenha os lembretes do seu espaço de trabalho, 50 de cada vez, dos mais recentes para os mais antigos. Use-a para encontrar IDs de lembretes, auditar suas automações ou fazer backup delas.
https://wbiztool.com/api/v1/reminder/list/Corpo: JSON ou campos de formulário
Este endpoint aceita apenas POST. Uma requisição GET, mesmo com query string, retorna HTTP 400 com Invalid JSON format: Expecting value….
A lista inclui lembretes ativos e pausados de todo o espaço de trabalho, criados pela API ou pela página Lembretes. Lembretes cancelados não são incluídos.
Exemplo 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'];
}Substitua 12345 e YOUR_API_KEY pelos seus próprios valores. Veja em Autenticação onde encontrá-los.
Parâmetros da requisição#
client_idintegerobrigatórioSeu ID do Cliente da API, em Configurações → Chaves API.
api_keystringobrigatórioSua chave de API, na mesma página.
pageintegeropcionalNúmero da página, começando em
1(padrão). Cada página contém 50 lembretes, e o tamanho da página não pode ser alterado. Um valor que não seja um número inteiro igual ou maior que 1 é tratado como1.
Resposta#
Uma requisição bem-sucedida retorna 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 | Descrição |
|---|---|---|
status | integer | 1 em caso de sucesso, 0 se a requisição falhou. |
message | string | Success; caso contrário, o erro. |
reminders | array | Os lembretes desta página, dos mais recentes para os mais antigos. Vazio se a página estiver além do fim. |
total | integer | Lembretes no espaço de trabalho, somando todas as páginas. |
page | integer | A página retornada. |
page_size | integer | Sempre 50. |
Campos do lembrete#
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | O ID do lembrete. Use-o com Cancelar lembrete. |
name | string | O nome do lembrete, ou Unnamed Reminder se ele não tiver nome. |
to_number | string | Número de telefone ou nome do grupo para o qual o lembrete é enviado. |
message_template | string | A mensagem, com as variáveis de modelo ainda não preenchidas. |
msg_type | integer | 0 texto, 1 imagem, 2 arquivo. |
msg_type_display | string | Text, Image ou File. |
img_url | string ou null | URL da imagem, para lembretes com imagem, ou URL do arquivo, para lembretes com arquivo criados pela API. Caso contrário, pode estar vazio ou ser null. |
file_name | string ou null | Para lembretes com arquivo: a URL do arquivo (lembretes criados no painel) ou o nome do arquivo (lembretes criados pela API, cuja URL fica em img_url). Caso contrário, pode estar vazio ou ser null. |
cron_expression | string | O agendamento. Veja Expressões cron. |
next_run | string | Próximo horário em que o agendamento corresponde, no formato YYYY-MM-DD HH:MM:SS UTC, ou Invalid cron se a expressão não puder ser lida. Veja o aviso abaixo. |
is_active | boolean | true se o lembrete está em execução, false se está pausado. |
whatsapp_client_id | integer ou null | O número de WhatsApp a partir do qual ele é enviado, ou null se usa o primeiro número conectado. |
created_at | string | Quando o lembrete foi criado, em UTC, no formato YYYY-MM-DD HH:MM:SS. |
Erros#
Os erros retornam HTTP 400 com status igual a 0, salvo indicação em contrário:
{ "status": 0, "message": "Upgrade your plan to use reminders feature" }
| Mensagem | Como corrigir |
|---|---|
Invalid JSON format: … | O corpo JSON não é válido. Você também recebe esta mensagem em uma requisição GET ou em uma requisição de formulário sem client_id. |
Auth Error - Please send correct API key and Client id | Envie client_id e api_key. |
Invalid client id | Envie client_id como número. |
Auth Error: invalid api key | A chave pertence a outro client_id. |
Auth Error: please check client id | A chave não está vinculada a um espaço de trabalho. Crie uma nova chave no espaço de trabalho que você quer usar. |
Demo Account cannot access APIs | Use uma conta normal. |
Upgrade your plan to use reminders feature | Seu plano não inclui lembretes. Faça upgrade do seu plano. Lembretes existentes continuam sendo executados e consumindo créditos após um downgrade, e não podem ser listados, cancelados nem pausados até você fazer upgrade. |
Error fetching reminders: … (HTTP 500) | Algo deu errado do nosso lado. Tente novamente. |
Se a api_key não existir ou tiver sido excluída, a resposta é uma página de erro HTML com HTTP 500 em vez de JSON. Teste sua chave com Verificar credenciais.
Ler todas as páginas#
Continue solicitando a próxima página até que uma página tenha menos de 50 lembretes.
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");Dicas#
- Guarde sua própria cópia do
timezonede cada lembrete ao criá-lo, já que este endpoint não o retorna. - Encontre lembretes pausados filtrando por
is_activeigual afalse. Retome-os na página Lembretes. - Remova automações antigas: primeiro reúna, em todas as páginas, os IDs que você quer cancelar e depois chame Cancelar lembrete para cada um. Cancelar enquanto você pagina desloca os lembretes seguintes para páginas anteriores, e alguns acabam sendo pulados.
