Cadastro Rapido
Gere sua API key em segundos
Faca sua primeira chamada
curl -H "X-API-Key: SUA_API_KEY" \ "https://atavigente.org/api/v1/estatisticas"
Receba dados estruturados em JSON
{
"success": true,
"data": {
"total_atas_vigentes": 41476,
"total_itens": 145360,
"total_fornecedores": 18045,
"estados_cobertos": 27,
"valor_total_disponivel": 51876782563.02,
"por_uf": { "DF": 16009, "SP": 4674, "RJ": 2124,... },
"top_categorias": { "Saude": 14593, ... }
}
}Autenticacao
Todas as chamadas exigem uma API key valida. Envie via header ou query parameter:
Via Header (recomendado)
GET /api/v1/atas HTTP/1.1 Host: atavigente.org X-API-Key: atv1_sua_key_aqui
Via Query Parameter
GET /api/v1/atas?api_key=atv1_sua_key_aqui
Rate Limiting
Cada plano tem um limite diario de requests. O contador reseta a meia-noite (UTC-3). Toda resposta inclui headers de controle:
X-RateLimit-Limit — Limite total do planoX-RateLimit-Remaining — Requests restantesX-RateLimit-Reset — Timestamp Unix do resetEndpoints
Exemplos por Linguagem
Python
import requests
API_KEY = "SUA_API_KEY"
BASE_URL = "https://atavigente.org/api/v1"
headers = {"X-API-Key": API_KEY}
# Buscar atas de informatica em SP
resp = requests.get(f"{BASE_URL}/atas", headers=headers, params={
"uf": "SP",
"categoria": "informatica",
"por_pagina": 10
})
data = resp.json()
for ata in data["data"]:
print(f"{ata['numero_ata']} - {ata['objeto'][:60]}")
print(f" Valor disponivel: R$ {ata['valor_disponivel']:,.2f}")
print(f" Vence em: {ata['dias_restantes']} dias")JavaScript / Node.js
const API_KEY = "SUA_API_KEY";
const BASE_URL = "https://atavigente.org/api/v1";
const resp = await fetch(`${BASE_URL}/atas?uf=SP&por_pagina=5`, {
headers: { "X-API-Key": API_KEY }
});
const { data, total } = await resp.json();
console.log(`${total} atas encontradas`);
data.forEach(ata => {
console.log(`${ata.numero_ata}: ${ata.objeto}`);
});Codigos de Erro
| HTTP | Codigo | Descricao |
|---|---|---|
| 401 | api_key_required | API key nao enviada |
| 401 | invalid_key | API key invalida |
| 403 | key_disabled | Key desativada pelo admin |
| 404 | not_found | Recurso nao encontrado |
| 429 | rate_limit_exceeded | Limite diario atingido |
| 500 | internal_error | Erro interno |
Todos os erros retornam JSON: {"error": "codigo", "message": "descricao"}
Planos
Comece gratis. Faca upgrade quando precisar.
Basic
Pequenas integracoes
R$47/mes
3.000 req/dia
R$0,016/req
- Tudo do Free
- 30x mais requests
- Prioridade no cache
- Suporte por email
Pro
Sistemas em producao
R$97/mes
15.000 req/dia
R$0,006/req
- Tudo do Basic
- 150x mais requests
- Cache dedicado
- Suporte prioritario
Scale
Alto volume e ERPs
R$297/mes
100.000 req/dia
R$0,003/req
- Tudo do Pro
- 1.000x mais requests
- SLA 99.5%
- Suporte dedicado
Para fazer upgrade, gere sua API key primeiro. O upgrade e aplicado automaticamente na key cadastrada.
Posso mudar de plano depois?
Sim. Faca upgrade a qualquer momento. O novo limite entra em vigor na hora.
O que acontece ao atingir o limite?
A API retorna 429. Seu acesso volta automaticamente no dia seguinte.
Preciso de mais de 100k req/dia?
Fale conosco: contato@atavigente.org para um plano personalizado.
Formas de pagamento?
Cartao de credito, boleto e Pix via Stripe. Cancele quando quiser.
Seguranca e LGPD
API Keys
- Hash SHA-256 (nunca em texto puro)
- CPF/CNPJ validado com digitos verificadores
- Prefixo visivel para identificacao
- Revogaveis a qualquer momento
Dados
- Somente leitura (zero escrita)
- Email/telefone nunca expostos
- Apenas dados publicos do PNCP
- Cache Redis (2-5 min)
LGPD
- Dados pessoais protegidos
- Apenas razao social e CNPJ expostos
- Sem rastreamento de usuarios
- Lei 13.709/2018
Infraestrutura
- Rate limit por key via Redis
- Atualizacao 4x/dia via PNCP
- IA com 98% de precisao
- 27 UFs cobertas
Dicas de Implantacao
Boas praticas para integrar a API no seu sistema.
Use variaveis de ambiente. Nunca no codigo-fonte.
# .env (NUNCA commitar) ATAVIGENTE_API_KEY=atv_sua_chave_aqui # .gitignore .env
import requests, time
def buscar_atas(params, max_retries=3):
for tentativa in range(max_retries):
resp = requests.get("https://atavigente.org/api/v1/atas",
headers={"X-API-Key": API_KEY}, params=params, timeout=30)
if resp.status_code == 200:
return resp.json()
if resp.status_code == 429: # Limite atingido
time.sleep(int(resp.headers.get("Retry-After", 60)))
continue
resp.raise_for_status()
raise Exception("Max retries")def coletar_todas_atas(uf="SP"):
todas, pagina = [], 1
while True:
data = buscar_atas({"uf": uf, "pagina": pagina, "por_pagina": 50})
todas.extend(data["data"])
if pagina >= data["total_paginas"]:
break
pagina += 1
return todas# Headers em cada resposta
resp = requests.get(url, headers={"X-API-Key": API_KEY})
print(f"Usado: {resp.headers['X-RateLimit-Used']}")
print(f"Restante: {resp.headers['X-RateLimit-Remaining']}")AtaVigente API v1.0 — atavigente.org · Duvidas? contato@atavigente.org
