Alertas e assinaturas
Cria alertas por limiar num card e envios agendados por e-mail de uma aba ou card, e liga, desliga, lista e apaga cada um.
Há dois tipos de assinatura. O alerta (mode: A) vigia o valor de um card e avisa quando ele cruza um limiar, por exemplo "receita abaixo de R$ 1.000". O agendamento (mode: S) envia por e-mail, de tempos em tempos, os dados de uma aba ou de um card. Listar exige apenas view_reports; criar, alterar, apagar exigem manage_dashboards, porque a assinatura envia e-mail em nome da loja. Para disparar uma assinatura agora e ver o histórico, veja Execuções.
Listar
/api/v1/admin/dashboards/subscriptionsAdminListar assinaturas
Parâmetros de consulta
dashboard_iduuidSó assinaturas desta aba.
card_iduuidSó assinaturas deste card.
Exemplo de requisição (listar)
bash
curl "$BASE_URL/api/v1/admin/dashboards/subscriptions?dashboard_id=8da0f9c1-b05b-4809-b07d-0b36573489e7" \
-H "Authorization: Bearer $TOKEN"Resposta (listar)
200Assinaturas
json
{
"subscriptions": [{
"id": "a7ad8ff8-a167-4922-a503-9e0a2d13aa68",
"card_id": "dd3470e6-dc16-4b41-9393-23797b50d7ba",
"mode": "A",
"schedule": "hourly",
"name": "Receita baixa",
"alert_rule": { "metric": "receita", "op": "lt", "value": 100000, "cooldown_minutes": 120, "channels": ["email"] },
"recipients": ["gestor@example.com"],
"is_active": true,
"alert_state": "N",
"created_by": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"created_at": "2026-10-11T21:10:56.156954Z"
}]
}Campos da resposta
subscriptionsarrayAssinaturas do painel do administrador, da mais nova para a mais antiga.
[] se não houver.subscriptions[].iduuidId da assinatura.
subscriptions[].dashboard_iduuidAba alvo (modo agendamento). Ausente se o alvo é um card.
subscriptions[].card_iduuidCard alvo. Obrigatório no alerta.
subscriptions[].modestringASA alerta, S agendamento.subscriptions[].schedulestringhourlydailyweeklymonthlyFrequência de verificação ou envio.
subscriptions[].namestringNome (até 160 caracteres).
subscriptions[].alert_ruleobjectRegra do alerta. Em agendamento vem
{"op":"","value":0} vazio.subscriptions[].recipientsarrayE-mails destinatários.
subscriptions[].vendor_iduuidPreenchido apenas em assinaturas do painel do seller.
subscriptions[].is_activebooleanSe está ligada.
subscriptions[].last_sent_atstringÚltimo envio, RFC 3339.
subscriptions[].last_valuenumberÚltimo valor medido (alertas).
subscriptions[].alert_statestringNFN normal ou F disparado (o limiar continua violado).subscriptions[].created_byuuidQuem criou.
subscriptions[].created_atstringCriação, RFC 3339.
Erros (listar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"view_reports"} |
| 404 | A aba ou o card alvo não existe ou não é visível para você. A mensagem vem em português (card não encontrado quando o card_id não existe). | {"error":"dashboard não encontrado"} ou {"error":"card não encontrado"} |
| 503 | O recurso de assinaturas não está configurado neste ambiente. | {"error":"assinaturas de dashboard não estão configuradas neste ambiente"} |
| 500 | Falha inesperada no servidor. | {"error":"failed to ..."} |
Criar
/api/v1/admin/dashboards/subscriptionsAdminCriar um alerta ou agendamento
Corpo da requisição
modestringobrigatórioASA alerta ou S agendamento.dashboard_iduuidAba alvo. Informe
dashboard_id ou card_id.card_iduuidCard alvo. Obrigatório no alerta.
schedulestringhourlydailyweeklymonthlyFrequência. Padrão:
hourly no alerta, daily no agendamento.namestringNome, até 160 caracteres (o excesso é cortado).
alert_ruleobjectRegra do alerta. Obrigatória no modo A.
opstringobrigatórioltltegtgteeqneComparação do valor medido com
value.valuenumberobrigatórioLimiar, na mesma unidade da coluna: dinheiro em centavos, percentuais em pontos-base.
metricstringid da métrica a comparar. Vazio usa a primeira métrica do card.windowstringPeríodo usado ao medir (
today, last7, last30, thisMonth...). Vazio usa o período do card, ou last30.cooldown_minutesintegerMinutos sem repetir o aviso enquanto o limiar segue violado.
0 ou omitido vale 60.channelsarrayinapp e/ou email. Vazio usa os dois.recipientsarrayE-mails, até 20, sem espaços nem vírgulas. Obrigatório no modo
S.Exemplo de requisição (criar)
bash
curl -X POST "$BASE_URL/api/v1/admin/dashboards/subscriptions" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"card_id": "dd3470e6-dc16-4b41-9393-23797b50d7ba", "mode": "A", "name": "Receita baixa", "alert_rule": {"metric": "receita", "op": "lt", "value": 100000, "cooldown_minutes": 120, "channels": ["email"]}, "recipients": ["gestor@example.com"]}'Resposta (criar)
201Assinatura criada
json
{
"id": "a7ad8ff8-a167-4922-a503-9e0a2d13aa68",
"card_id": "dd3470e6-dc16-4b41-9393-23797b50d7ba",
"mode": "A",
"schedule": "hourly",
"name": "Receita baixa",
"alert_rule": { "metric": "receita", "op": "lt", "value": 100000, "cooldown_minutes": 120, "channels": ["email"] },
"recipients": ["gestor@example.com"],
"is_active": true,
"alert_state": "N",
"created_by": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"created_at": "2026-10-11T21:10:56.156954Z"
}Campos da resposta
(objeto)objectA assinatura criada, com os campos de Listar.
Erros (criar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"manage_dashboards"} |
| 400 | Corpo inválido: não é JSON, tem campo desconhecido (a leitura rejeita campos que a API não conhece) ou passa de 1 MB. | {"error":"corpo da requisição inválido","detail":"json: unknown field \"foo\""} |
| 404 | A aba ou o card alvo não existe ou não é visível para você. A mensagem vem em português (card não encontrado quando o card_id não existe). | {"error":"dashboard não encontrado"} ou {"error":"card não encontrado"} |
| 400 | Nem dashboard_id nem card_id. | {"error":"informe um dashboard ou um card"} |
| 422 | Modo, frequência, operador ou e-mail inválido; alerta sem card_id; agendamento sem destinatário; mais de 20 destinatários. A mensagem vem em português. | {"error":"informe ao menos um destinatário"} |
| 503 | O recurso de assinaturas não está configurado neste ambiente. | {"error":"assinaturas de dashboard não estão configuradas neste ambiente"} |
Ligar ou desligar
/api/v1/admin/dashboards/subscriptions/{id}AdminLigar ou desligar uma assinatura
Parâmetros de caminho
iduuidobrigatórioId da assinatura.
Corpo da requisição
is_activebooleanobrigatóriotrue liga, false desliga. Obrigatório.Exemplo de requisição (alterar)
bash
curl -X PUT "$BASE_URL/api/v1/admin/dashboards/subscriptions/f9f99133-ba51-49df-8f85-30ae9fd90eac" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"is_active": false}'Resposta (alterar)
200Assinatura alterada
json
{
"id": "a7ad8ff8-a167-4922-a503-9e0a2d13aa68",
"card_id": "dd3470e6-dc16-4b41-9393-23797b50d7ba",
"mode": "A",
"schedule": "hourly",
"name": "Receita baixa",
"alert_rule": { "metric": "receita", "op": "lt", "value": 100000, "cooldown_minutes": 120, "channels": ["email"] },
"recipients": ["gestor@example.com"],
"is_active": false,
"alert_state": "N",
"created_by": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"created_at": "2026-10-11T21:10:56.156954Z"
}Campos da resposta
(objeto)objectA assinatura, com os campos de Listar.
Erros (alterar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"manage_dashboards"} |
| 400 | Corpo inválido: não é JSON, tem campo desconhecido (a leitura rejeita campos que a API não conhece) ou passa de 1 MB. | {"error":"corpo da requisição inválido","detail":"json: unknown field \"foo\""} |
| 400 | Falta is_active. | {"error":"informe is_active"} |
| 404 | A assinatura não existe ou o alvo dela não é visível para você. | {"error":"assinatura não encontrada"} |
| 503 | O recurso de assinaturas não está configurado neste ambiente. | {"error":"assinaturas de dashboard não estão configuradas neste ambiente"} |
Apagar
/api/v1/admin/dashboards/subscriptions/{id}AdminApagar uma assinatura
Parâmetros de caminho
iduuidobrigatórioId da assinatura.
Exemplo de requisição (apagar)
bash
curl -X DELETE "$BASE_URL/api/v1/admin/dashboards/subscriptions/f9f99133-ba51-49df-8f85-30ae9fd90eac" \
-H "Authorization: Bearer $TOKEN"Resposta (apagar)
200Assinatura apagada
json
{
"message": "assinatura removida"
}Campos da resposta
messagestringConfirmação em português do servidor. O histórico de execuções também é apagado.
Erros (apagar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O usuário não tem o privilégio exigido. | {"error":"insufficient privileges","required":"manage_dashboards"} |
| 404 | A assinatura não existe ou o alvo dela não é visível para você. | {"error":"assinatura não encontrada"} |
| 503 | O recurso de assinaturas não está configurado neste ambiente. | {"error":"assinaturas de dashboard não estão configuradas neste ambiente"} |