API de Dados Hidrometeorológicos
da Defesa Civil do Estado do Rio Grande do Sul
Visão geral
A API entrega os dados das estações da Defesa Civil RS em blocos de 5 minutos, por duas consultas GraphQL: tags_data (situação mais recente de cada estação) e historic (série de uma estação num período).
| Ambiente | Endereço da API |
|---|---|
| Produção | https://redehidrometeorologica.defesacivil.rs.gov.br/graphql |
Pontos de atenção:
- Os dados são atualizados a cada 5 minutos e lidos com
tags_data.
- Consultas fixas. A API só aceita o texto exato das consultas deste guia. Pedir outros campos é recusado.
- Limite de uso. Cada endereço IP pode fazer até 120 requisições por minuto.
- Limiares de rio. Cada estação traz o nível de alerta de inundação: normalidade, atenção, alerta ou inundação.
- Histórico limitado. A consulta
historicsó busca dados dos últimos 3 meses.
Preparando o Postman
O Postman é o jeito mais simples de fazer as consultas sem programar.
- Instale o Postman: postman.com/downloads.
- Abra o Postman e entre com sua conta, ou use o modo convidado.
- Clique em New (ou no + para abrir uma aba) e escolha GraphQL.
- No campo Enter URL, cole o endereço da API do ambiente que você vai usar (tabela acima).
- Copie uma das consultas deste guia, cole no campo Query e clique em Query (ou Send).
A API não publica o esquema (schema). Por isso o Postman não vai autocompletar os nomes dos campos e pode mostrar um aviso de que não conseguiu carregar o esquema. Também poderá ser ignorado bastando colar as consultas exatamente como estão aqui.
Regras de uso
A API recusa qualquer consulta fora das duas deste guia e limita cada IP a 120 requisições por minuto.
| Regra | Limite | O que acontece se passar |
|---|---|---|
| Consultas permitidas | Só Tags_data e Historic, com o texto exato deste guia | Erro QUERY_NOT_ALLOWED, mensagem "Operação bloqueada." |
| Requisições por IP | 120 por minuto | Erro "ThrottlerException: Too Many Requests" até o minuto virar |
| Cliente | Somente casa-militar-defesa-civil-rs | Erro FORBIDDEN |
| Período do histórico | Data inicial dentro dos últimos 3 meses | Erro BAD_REQUEST com a data mínima aceita |
| Formato de data | AAAA-MM-DD HH:MM:SS, horário de Brasília | Erro BAD_REQUEST: "Datas inválidas" |
O texto da consulta precisa ser o mesmo, campo por campo. Espaços, quebras de linha e o campo __typename não fazem diferença. Tirar ou acrescentar um campo, ou trocar a ordem dos campos, faz a consulta ser recusada.
Na consulta historic, os valores que mudam (estação, datas e intervalo) vão na aba Variables do Postman, nunca dentro do texto da consulta.
Consulta tags_data (dados atuais)
A tags_data devolve a leitura mais recente de todas as 130 estações de uma vez. Cole o texto abaixo inteiro no campo Query, sem variáveis.
query Tags_data {
tags_data(clients: ["casa-militar-defesa-civil-rs"]) {
qualle_meteorologia {
codigo
name {
prefix
general
local
}
show
timestamp
position {
bacia
latitude
longitude
regiao
altitude
filtros {
outros {
crepdec {
nome {
value
}
codigo {
value
}
}
}
}
}
data {
rio {
rio_alarmes {
inundacao {
ativo {
value
}
status {
value
}
}
}
rio_nome {
value
}
rio_nivel {
value
}
rio_nivel_tendencia {
value
}
rio_area_drenagem {
value
}
homologacao {
relacao {
valido {
value
}
}
}
}
chuva {
acumulado {
min005 {
value
}
h001 {
value
}
h003 {
value
}
h006 {
value
}
h012 {
value
}
h024 {
value
}
h048 {
value
}
h168 {
value
}
}
homologacao {
relacao {
valido {
value
}
}
}
}
pressaoatmos {
atual {
value
}
historico {
diaanterior {
media {
value
}
}
diaatual {
media {
value
}
}
}
tendencia {
value
}
homologacao {
relacao {
valido {
value
}
}
}
}
senstermica {
atual {
value
}
historico {
diaatual {
media {
value
}
}
diaanterior {
media {
value
}
}
}
tendencia {
value
}
homologacao {
relacao {
valido {
value
}
}
}
}
radiacaosolar {
atual {
value
}
homologacao {
relacao {
valido {
value
}
}
}
}
temperatura {
atual {
value
}
historico {
diaanterior {
media {
value
}
}
diaatual {
media {
value
}
maxima {
value
}
minima {
value
}
}
}
tendencia {
value
}
homologacao {
relacao {
valido {
value
}
}
}
}
umidade {
atual {
value
}
historico {
diaanterior {
media {
value
}
}
diaatual {
media {
value
}
}
}
tendencia {
value
}
homologacao {
relacao {
valido {
value
}
}
}
}
vento {
direcao {
value
}
velocidade_maxima {
value
}
velocidade_media {
value
}
homologacao {
relacao {
valido {
value
}
}
}
}
}
type
filter {
relacao {
tem_chuva_acumulada
tem_nivel_do_rio
tem_pressao_atmosferica
tem_sensacao_termica
tem_umidade
tem_vazao_do_rio
tem_vento
}
}
resource {
estacao {
estado {
manutencao {
value
}
}
}
}
}
proximaAtualizacaoEm
}
}Como ler a resposta:
qualle_meteorologiaé a lista de estações. Procure a estação pelocodigo, por exemploDCRS-00001.
timestampé o início do bloco de 5 minutos da última leitura, em horário de Brasília (ex.:2026-10-14T08:40:00.000).
value: nullquer dizer que a estação não mandou essa medida nos últimos 20 minutos.
proximaAtualizacaoEmé o horário, em UTC, em que vale a pena consultar de novo.
homologacao.relacao.validoigual afalseindica sensor com dado não homologado.
resource.estacao.estado.manutencaoigual atrueindica estação em manutenção.
Não existe filtro por estação nem por localização: a consulta sempre traz todas as estações. Os parâmetros station e filters do guia antigo são recusados.
Consulta historic (série de uma estação)
A historic devolve as medidas de uma estação num período dos últimos 3 meses, agrupadas no intervalo escolhido e em ordem cronológica.
No campo Query, cole sempre este texto, sem mudar nada:
query Historic($stationCode: String!, $startDate: String!, $endDate: String!, $interval: QueryInterval) {
historic(
system: Qualle_Hidrometeorologia
client: "casa-militar-defesa-civil-rs"
stationCode: $stationCode
startDate: $startDate
endDate: $endDate
interval: $interval
opts: { ordenacao: ASC }
)
}Na aba Variables, informe a estação, o período e o intervalo:
{
"stationCode": "DCRS-00001",
"startDate": "2026-10-13 12:00:00",
"endDate": "2026-10-13 18:00:00",
"interval": "HOUR_1"
}| Variável | Obrigatória | Como preencher |
|---|---|---|
stationCode | sim | Código da estação, ex.: DCRS-00001 |
startDate | sim | AAAA-MM-DD HH:MM:SS, horário de Brasília, no máximo 3 meses atrás |
endDate | sim | Mesmo formato. Se for depois de agora, a API usa o horário atual |
interval | não | MIN_5, MIN_10, HOUR_1, HOUR_3, HOUR_6 ou HOUR_12. Sem ela, usa MIN_5 |
Exemplo de resposta (DCRS-00001, intervalo de 1 hora):
{
"data": {
"historic": {
"items": [
{
"ts": "2026-10-14T09:00:00.000",
"codigo": "DCRS-00001",
"rio_nivel": 27.24,
"rio_variacao": 0,
"chuva_mm": 0,
"chuva_total": 0,
"chuva_taxa_med": 0,
"chuva_taxa_max": 0,
"temp_media": 22.425,
"sens_termica": 24.79,
"umid_rel": 72.39,
"pres_atmos": 1010.21,
"vento_vel_med": 1.61,
"vento_vel_max": 4.14,
"vento_dir": 268.31,
"radiacao": 250.75
}
],
"totalCount": 1
}
}
}ts é o horário do bloco em horário de Brasília e totalCount é o número de itens. Uma medida que a estação não tem vem como null. A mesma consulta repetida em menos de 30 segundos devolve a resposta guardada em cache.
Limiares de nível do rio
Cada estação com sensor de rio traz em data.rio.rio_alarmes.inundacao a situação do nível em relação às cotas de inundação definidas pela Defesa Civil. A API compara a cota medida (rio_nivel) com as cotas de atenção, alerta e inundação de cada estação.
ativo | status | Situação | Cor no mapa |
|---|---|---|---|
true | 0 | Normalidade | verde #69a82f |
true | 1 | Atenção Inundação | amarelo #faba00 |
true | 2 | Alerta Inundação | laranja #e67819 |
true | 3 | Inundação | vermelho #e20228 |
true | null | Sem leitura de nível recente | branco |
false | 0 | Estação sem limiar cadastrado | branco |
- O
statusé o nível mais alto já atingido.
- Os valores das cotas de cada estação não fazem parte da consulta permitida. Hoje eles só aparecem no mapa do site, pela cor da estação.
Ciclo de atualização
Os dados mudam uma vez a cada 5 minutos, normalmente entre 1 e 2 minutos depois de cada marco (:00, :05, :10…). Consultar mais vezes do que isso não traz dado novo e gasta o limite de 120 requisições por minuto.
Dicionário
Métricas e unidades
| Métrica | Campo em tags_data | Campo em historic | Unidade |
|---|---|---|---|
| Nível do rio | rio.rio_nivel | rio_nivel | metro (m) |
| Variação do nível | rio.rio_nivel_tendencia | rio_variacao | metro (m) |
| Chuva | chuva.acumulado.* | chuva_mm (no bloco), chuva_total | milímetro (mm) |
| Intensidade da chuva | — | chuva_taxa_med, chuva_taxa_max | milímetro por hora (mm/h) |
| Temperatura | temperatura | temp_media | grau Celsius (°C) |
| Sensação térmica | senstermica | sens_termica | grau Celsius (°C) |
| Umidade relativa | umidade | umid_rel | por cento (%) |
| Pressão atmosférica | pressaoatmos | pres_atmos | hectopascal (hPa) |
| Vento: velocidade | vento.velocidade_media, vento.velocidade_maxima | vento_vel_med, vento_vel_max | quilômetro por hora (km/h) |
| Vento: direção | vento.direcao | vento_dir | grau (°), 0 = norte |
| Radiação solar | radiacaosolar | radiacao | watt por metro quadrado (W/m²) |
Nas métricas de tags_data:
atualé o valor do último bloco de 5 minutos.
historico.diaatualehistorico.diaanteriortrazem a média (e, na temperatura, a máxima e a mínima) de hoje e de ontem.
tendenciaé o valor atual menos a média da última hora: positivo subindo, negativo descendo.
Intervalos da consulta historic
Valor de interval | Agrupamento |
|---|---|
MIN_5 | 5 minutos |
MIN_10 | 10 minutos (padrão) |
HOUR_1 | 1 hora |
HOUR_3 | 3 horas |
HOUR_6 | 6 horas |
HOUR_12 | 12 horas |