O que é
A API do Plant Reminder permite que outras ferramentas leiam suas plantas e registrem os cuidados: ler o que está pendente e agir registrando regas e adubações ou desfazendo-as. O Home Assistant e a Alexa usam essa API, e qualquer script seu também pode usá-la.
Ela está incluída no Premium, ou você pode obter um passe de 30 dias por 30 tokens (os tokens são comprados no app). O passe não é renovado automaticamente.
A API nunca permite excluir plantas, fotos nem histórico.
Crie o token no app
Cada integração usa um token pessoal. Para criá-lo:
- Abra a aba Mais e entre em Home Assistant e Alexa.
- Toque em Ativar.
- Toque em Criar token.
- Toque em Copiar.
O token só é mostrado uma vez, então copie-o na hora. Você pode revogá-lo a qualquer momento e criar outro.
A opção Permitir registrar regas e adubações vem marcada por padrão. Se você desmarcá-la, o token fica somente leitura e qualquer escrita retorna insufficient_scope.
Home Assistant
Tudo o que segue pode ser colado no seu configuration.yaml. Troque SEU_TOKEN pelo token que você copiou.
Sensor: plantas para regar
Um sensor rest que consulta a API a cada 300 segundos. O estado dele é o número de plantas para regar hoje ou atrasadas. O atributo plants lista tudo o que está previsto, cada item com o seu kind: watering (rega), fertilization (adubação) ou transplant (transplante).
rest:
- resource: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due?days=1
scan_interval: 300
headers:
Authorization: "Bearer SEU_TOKEN"
sensor:
- name: "Plantas para regar"
value_template: "{{ value_json.plants | selectattr('kind', 'eq', 'watering') | list | count }}"
json_attributes:
- plants
- overdue_count
- today
- as_of
Comandos: regar, adubar e desfazer
Um rest_command por ação. plant_reminder_water e plant_reminder_fertilize recebem um plant_id; os identificadores vêm de GET /v1/plants ou do atributo plants do sensor.
rest_command:
plant_reminder_water:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/water"
method: POST
headers:
Authorization: "Bearer SEU_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_fertilize:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/fertilize"
method: POST
headers:
Authorization: "Bearer SEU_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_water_all_due:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due/water"
method: POST
headers:
Authorization: "Bearer SEU_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_undo:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/actions/undo"
method: POST
headers:
Authorization: "Bearer SEU_TOKEN"
content_type: "application/json"
payload: "{}"
Dica: em vez de escrever o token no arquivo, guarde-o em secrets.yaml e referencie-o com !secret.
Automação: avisar quando houver plantas para regar
Envia uma notificação com os nomes das plantas sempre que o sensor passa de zero. Usa a sintaxe do Home Assistant 2024.10 ou posterior (triggers: e actions:); troque notify.notify pelo seu próprio serviço de notificações.
automation:
- alias: "Plant Reminder: plantas para regar"
triggers:
- trigger: numeric_state
entity_id: sensor.plantas_para_regar
above: 0
actions:
- action: notify.notify
data:
title: "Plantas para regar"
message: >-
{{ state_attr('sensor.plantas_para_regar', 'plants') | selectattr('kind', 'eq', 'watering') | map(attribute='name') | join(', ') }}
Este exemplo ainda não foi verificado em uma versão específica do Home Assistant; a sintaxe segue a documentação da 2024.10 em diante. Se algo não funcionar na sua versão, escreva para nós dizendo qual você usa. O identificador da entidade vem do nome do sensor: confira-o nas Ferramentas do desenvolvedor se o seu for diferente.
Referência dos endpoints
Todas as rotas partem da URL base abaixo e exigem o cabeçalho Authorization: Bearer SEU_TOKEN. Os corpos das requisições são JSON.
URL base: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api
| Endpoint | O que faz |
|---|---|
GET /v1/due?days=0..7 | Cuidados previstos nos próximos N dias (de 0 a 7, padrão 1), incluindo os atrasados: rega, adubação e transplante. Cada item tem o seu kind. |
GET /v1/plants | Lista suas plantas. |
GET /v1/plants/{id} | Detalhes de uma planta. |
GET /v1/plants/{id}/waterings?since=&limit= | Histórico de regas de uma planta. since (data ISO) e limit (de 1 a 500, padrão 100) são opcionais. |
GET /v1/plants/{id}/fertilizations | Histórico de adubações de uma planta. Os mesmos parâmetros opcionais. |
GET /v1/actions | Ações registradas com o seu token. limit é opcional (de 1 a 100, padrão 20). |
GET /v1/rooms | Lista seus cômodos com quantas plantas cada um tem (só as que são regadas). |
POST /v1/plants/{id}/water{at?} | Registra uma rega. at é uma data ISO (padrão: agora; não pode ser futura). |
POST /v1/plants/{id}/fertilize{at?, fertilizer_form?, application_method?} | Registra uma adubação. at funciona do mesmo jeito. fertilizer_form aceita liquid ou solid, e application_method aceita soil, foliar ou root_drench; se você não enviar, são usados os da última adubação da planta. |
POST /v1/due/water{dry_run?} | Rega todas as plantas pendentes. Com dry_run: true só faz uma simulação e não registra nada. Um lote conta como uma escrita. |
POST /v1/rooms/{id}/water{at?, dry_run?} | Registra uma rega em todas as plantas desse cômodo. at funciona do mesmo jeito; com dry_run: true só devolve a lista. Conta como uma escrita e é desfeito por inteiro. |
POST /v1/actions/undo{action_id?} | Desfaz uma ação. Sem action_id, desfaz a última. |
- Nas escritas você pode enviar o cabeçalho opcional
Idempotency-Key: repetir uma requisição com a mesma chave retorna o resultado original em vez de registrá-lo duas vezes. - As datas são ISO 8601 em UTC.
- Cada resposta traz
api_version(atualmente"1"). - Os erros têm o formato
{"error": "código", "message": "..."}.
Erros e limites
| Status | Código | Significado |
|---|---|---|
| 400 | bad_request | A requisição está malformada (por exemplo, um parâmetro fora do intervalo). |
| 400 | invalid_date | A data não é válida: é futura, anterior à adoção da planta ou não está em ISO 8601. |
| 401 | invalid_token | O token não foi enviado, está errado ou foi revogado. |
| 401 | token_expired | O token de acesso expirou e precisa ser renovado (a Alexa faz isso sozinha). |
| 402 | api_access_expired | O acesso à API terminou (Premium ou passe). Renove no app. |
| 403 | insufficient_scope | O token não tem permissão para registrar cuidados. |
| 403 | write_disabled | As escritas estão temporariamente desativadas do nosso lado. A leitura continua funcionando. |
| 404 | not_found | A rota, a planta ou a ação não existe. |
| 404 | nothing_to_undo | Não há nada do seu token para desfazer. |
| 409 | already_gone | O que você tentou desfazer já tinha sido removido. |
| 410 | expired | A ação tem mais de 24 horas e não pode mais ser desfeita. |
| 429 | rate_limited | Requisições demais. Aguarde os segundos indicados no cabeçalho Retry-After. |
| 503 | api_disabled | A API está temporariamente desativada. |
Limites
- 10 requisições por minuto e 5.000 por dia por token.
- 60 escritas por dia por token (um lote conta como uma).
- Desfazer só remove o que a sua própria integração registrou nas últimas 24 horas.
Alexa Em breve
A skill do Plant Reminder para a Alexa ainda está em processo de certificação, então ainda não está disponível. Veja como vai funcionar:
Você poderá dizer:
Em inglês
- Alexa, open my plants
- Alexa, ask my plants what needs watering today
- Alexa, ask my plants if the monstera needs water
- Alexa, tell my plants I watered the ficus
- Alexa, tell my plants I watered the ficus yesterday
- Alexa, tell my plants to water the plants in the living room
- Alexa, tell my plants to water everything due today
- Alexa, tell my plants to undo the last one
Em espanhol
- Alexa, abre mis plantas
- Alexa, pregunta a mis plantas qué toca regar hoy
- Alexa, pregunta a mis plantas si toca regar la monstera
- Alexa, dile a mis plantas que he regado el ficus
- Alexa, dile a mis plantas que regué el ficus ayer
- Alexa, dile a mis plantas que riegue las plantas del salón
- Alexa, dile a mis plantas que riegue todas las de hoy
- Alexa, dile a mis plantas que deshaga lo último
Você vai vincular sua conta pelo app Alexa. A skill estará disponível em inglês e espanhol. Depois de registrar uma planta, a skill pergunta se você quer registrar outra: diga o nome ou «that's all» / «ya está». As listas longas são lidas de cinco em cinco. Se você perguntar por uma planta («does the monstera need water?» / «¿toca regar la monstera?»), ela diz se é para hoje, quantos dias de atraso tem ou em que dia é; se for a hora, se oferece para registrar a rega.
Privacidade
De cada token guardamos a data do último uso e uma contagem diária de requisições, para aplicar os limites e mostrar a você se ele está em uso.
O token em si só é guardado na forma de hash, nunca em texto puro: ninguém, nem nós, consegue lê-lo de novo. Por isso ele só é mostrado uma vez.
Suporte
Para dúvidas, erros ou ajuda com a sua conta, escreva para [email protected].
Tempo de resposta habitual: 24–48 horas úteis.