Logo Prefeitura  de Poços de Caldas

Guia Técnico de Integração

Voltar
Publicação: 16/02/2024 17:16
Última atualização: 16/09/2026 09:47
Compartilhe:

1. Introdução

Este guia estabelece as diretrizes técnicas e especificações para que desenvolvedores, pesquisadores, analistas de BI, sistemas externos e agentes de Inteligência Artificial possam consumir de forma autônoma os dados abertos governamentais do município de Poços de Caldas / MG.

A API adota o padrão RESTful, respondendo a requisições HTTP GET com payloads estruturados em JSON (codificação UTF-8), além de disponibilizar exportações diretas em formatos abertos (CSV e XML).

2. Autenticação (Headers)

Todas as chamadas à API de Dados Abertos devem conter um token de autenticação válido transmitido nos cabeçalhos (Headers) da requisição HTTP. A API suporta dois formatos de envio:

Opção 1 (Recomendado): X-API-Token: SEU_TOKEN_AQUI
Opção 2 (Padrão Bearer): Authorization: Bearer SEU_TOKEN_AQUI

Nota: O token pode ser gerado diretamente pelo portal na página principal de Dados Abertos ou na documentação interativa da API.

3. Tipos de Tokens e Limites de Requisição (Rate Limiting)

Os limites operacionais e os prazos de validade são determinados pela categoria da credencial gerada:

Categoria Validade Limite de Requisições Finalidade / Público
Visitante (Guest) 1 Hora Máximo de 50 requisições totais Prototipagem rápida, testes pontuais e desenvolvimento
Sessão (Usuário Logado) 3 Horas Máximo de 500 requisições totais Consultas analíticas e integrações temporárias
Longa Duração (Usuário Logado) De 1 a 180 dias 500 requisições/hora e 2.000 requisições/dia Aplicações em produção, dashboards PowerBI e rotinas batch

4. Especificação do Endpoint e Parâmetros de Consulta

URL Base: https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos?modulo=ID_DO_MODULO

O parâmetro modulo é obrigatório e deve conter o ID numérico do módulo desejado (ex: modulo=32 para Legislação, modulo=12 para Convênios/Parcerias, modulo=6 para Carta de Serviços).

Parâmetros Opcionais de Filtragem e Paginação:
  • tab - Especifica o sub-módulo dinâmico ou aba a consultar. Exemplo em Legislação: &tab=leis-ordinarias, &tab=decretos. Exemplo em Convênios: &tab=recebidos, &tab=realizados.
  • page - Número da página (de 1 até 1000). A API retorna até 100 registros por página. Padrão: 1. Exemplo: &page=2 (retorna registros de 101 a 200).
  • campos - Projeção seletiva de colunas separadas por vírgula para otimização de tráfego. Exemplo: &campos=id,numero,ementa,link_lei. Se omitido, todas as propriedades são retornadas.
  • q - Busca textual multi-termo abrangente (máx. 200 caracteres). Realiza pesquisa inteligente sobre todos os campos textuais (`"searchable": true`). Cada palavra digitada é tratada individualmente com lógica AND contextual, com suporte completo e simultâneo a acentos, sem acento, entidades HTML e números. Exemplo: &q=transporte%20escolar%202024.
  • exercicio - Filtra registros por um ano ou lista de anos separados por vírgula (em módulos que possuem campo de ano/exercício). Exemplo: &exercicio=2023,2024.
  • campo_periodo e periodo - Filtro por intervalo de datas. O parâmetro campo_periodo indica a coluna de data (ex: data_publicacao) e periodo recebe o intervalo no formato DD/MM/AAAA ate DD/MM/AAAA ou uma data única DD/MM/AAAA. Exemplo: &campo_periodo=data_publicacao&periodo=01/01/2024 ate 31/01/2024.
Exemplo Completo de Requisição:
https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos?modulo=32&tab=decretos&page=1&campos=id,numero,data_publicacao,ementa,link_lei&q=educacao

5. Formato de Retorno e Estruturas de Dados

O corpo da resposta é estruturado em JSON nativo UTF-8. Cada registro retornado possui tipagem padronizada:

Tipos de Dados Primitivos:
  • string - Textos, títulos, ementas e descrições. Entidades HTML são convertidas para texto limpo legível.
  • int - Identificadores e números inteiros (ex: id, numero, ano).
  • float - Valores monetários e decimais de dupla precisão (ex: valor_total, valor_repasse).
  • date / datetime - Datas e carimbos de tempo no padrão internacional ISO-8601 (YYYY-MM-DD ou YYYY-MM-DD HH:MM:SS).
Tipos de Dados Estruturados e Arquivos:
  • file - URL absoluta pronta para visualização e download direto do arquivo (ex: PDFs de leis com resolução dinâmica de pastas anuais). Exemplo: "https://www.servicos.pocosdecaldas.mg.gov.br/uploads/leis/2024/decreto1234.pdf".
  • file_array - Lista contendo as URLs públicas de todos os anexos ou fotos associadas ao registro. Exemplo: ["https://www.servicos.pocosdecaldas.mg.gov.br/uploads/servicos/capa.jpg"].
  • array (Sub-listas Relacionais / Loaders) - Estruturas aninhadas com relacionamentos um-para-muitos (ex: atos incidentes e decorrentes em Legislação, execuções financeiras em Parcerias).

6. Exemplos de Implementação

Abaixo estão exemplos prontos para consumo da API nas principais linguagens e ferramentas analíticas:

cURL (Terminal / Bash)
curl -X GET "https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos?modulo=32&page=1" \
  -H "X-API-Token: SEU_TOKEN_AQUI" \
  -H "Accept: application/json"
PHP (cURL)
<?php
$url = 'https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos?modulo=32&page=1';
$token = 'SEU_TOKEN_AQUI';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'X-API-Token: ' . $token,
    'Accept: application/json'
));

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code === 200) {
    $dados = json_decode($response, true);
    print_r($dados);
} else {
    echo "Erro HTTP: $http_code - Resposta: $response";
}
?>
JavaScript (Fetch / Node.js / Browser)
async function consultarDadosAbertos() {
  const url = 'https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos?modulo=32&page=1';
  const token = 'SEU_TOKEN_AQUI';

  try {
    const response = await fetch(url, {
      method: 'GET',
      headers: {
        'X-API-Token': token,
        'Accept': 'application/json'
      }
    });

    if (!response.ok) {
      const erro = await response.json();
      console.error(`Erro ${response.status}:`, erro.mensagem);
      return;
    }

    const dados = await response.json();
    console.log('Dados recebidos:', dados);
  } catch (err) {
    console.error('Falha na requisicao:', err);
  }
}

consultarDadosAbertos();
Python (requests)
import requests

url = 'https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos'
params = {'modulo': 32, 'page': 1}
headers = {'X-API-Token': 'SEU_TOKEN_AQUI', 'Accept': 'application/json'}

response = requests.get(url, headers=headers, params=params)

if response.status_code == 200:
    dados = response.json()
    print(f"Recebidos {len(dados)} registros.")
    print(dados)
else:
    print(f"Erro {response.status_code}: {response.text}")
Power Query (M) - Power BI & Microsoft Excel

Cole o código abaixo no Editor Avançado do Power Query para carregar os dados diretamente no modelo analítico:

let
    Url = "https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos?modulo=32&page=1",
    Fonte = Json.Document(Web.Contents(Url, [Headers=[#"X-API-Token"="SEU_TOKEN_AQUI", #"Accept"="application/json"]])),
    Tabela = Table.FromList(Fonte, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    Expandido = Table.ExpandRecordColumn(Tabela, "Column1", Record.FieldNames(Fonte{0}))
in
    Expandido

7. Revalidação de Tokens Ativos

Caso possua uma credencial de sessão ou de longa duração ativa próxima do vencimento, é possível renovar sua validade por período equivalente ao original de forma transparente, sem a necessidade de reautenticar com senha ou credenciais mestras. A operação emite um novo token e invalida o anterior com segurança.

A revalidação é realizada enviando uma requisição POST:

Método: POST
URL: https://www.servicos.pocosdecaldas.mg.gov.br/api/dados_abertos
Header: X-API-Token: SEU_TOKEN_ATIVO_ATUAL
Body (form-data / x-www-form-urlencoded): acao=revalidar_token
Exemplo de Resposta de Sucesso:
[
  {
    "Situacao": "event",
    "Resposta": "sucesso",
    "token": "NOVO_TOKEN_CRIPTOGRAFADO_GERADO",
    "id": 150,
    "id_antigo": 149,
    "tipo": "long",
    "expiracao": "2026-12-31 23:59:59"
  }
]

8. Códigos de Retorno HTTP e Tratamento de Erros

A API de Dados Abertos utiliza códigos de status HTTP padronizados para indicar o sucesso ou o motivo de falha em cada requisição. Todas as mensagens de erro retornam um objeto JSON explicativo com as propriedades status e mensagem.

Código HTTP Descrição Causa / Diagnóstico
200 OK Sucesso A requisição foi processada com êxito. O corpo contém o array JSON com os registros encontrados ou [] caso nenhum registro atenda aos filtros aplicados.
400 Bad Request Parâmetro Inválido Parâmetro obrigatório ausente ou inválido na requisição (ex: modulo não informado, ID menor ou igual a zero, ou formato incorreto).
401 Unauthorized Não Autorizado Falha na autenticação. Ocorre quando:
  • Token ausente nos cabeçalhos (X-API-Token ou Bearer);
  • Token expirou o prazo limite (1h para Visitante, 3h para Sessão);
  • Token revogado ou inexistente no banco de dados;
  • Senha do usuário alterada no portal (invalidação da chave criptográfica).
403 Forbidden Acesso Proibido Acesso negado. A conta do usuário emissor do token está desativada ou bloqueada no sistema municipal.
404 Not Found Não Encontrado O identificador de módulo solicitado não existe ou não possui conjunto de dados abertos configurado no portal.
429 Too Many Requests Limite Excedido Taxa máxima de requisições (Rate Limit) excedida para a categoria do token:
  • Visitante: excedeu 50 requisições totais;
  • Sessão: excedeu 500 requisições totais;
  • Longa Duração: excedeu 500 req/hora ou 2.000 req/dia.
500 Server Error Erro Interno Falha interna no servidor ao executar a consulta ou indisponibilidade temporária de banco de dados.
501 Not Implemented Não Implementado A estrutura de dados abertos do módulo configurado não possui um esquema válido implementado no motor da API.
Exemplos de Resposta de Erro (JSON):
HTTP 401 - Token Expirado
{
  "status": "erro",
  "mensagem": "Este token expirou."
}
HTTP 400 - Módulo Inválido
{
  "status": "erro",
  "mensagem": "Parametro \"modulo\" (ID valido) nao fornecido."
}
HTTP 429 - Limite de Taxa
{
  "status": "erro",
  "mensagem": "Limite de requisicoes por hora atingido para este token de longa duracao (maximo de 500 requisicoes/hora)."
}
HTTP 404 - Módulo Não Encontrado
{
  "status": "erro",
  "mensagem": "Modulo nao encontrado ou sem dados abertos configurados."
}

Telefone

(35) 3697-5000

Endereço

Av. Mansur Frayha, n° 1677, Bortolan, Poços de Caldas - MG, CEP: 37704-722

Funcionamento

09:00 às 17:00h de seg. a sex.

Órgão Responsável

Secretaria Municipal de Transparência e Comunicação Social

A sessão será encerrada
Você tem certeza que deseja encerrar sua sessão neste navegador?
...
Carregando...