PrismaData API (1.0.0)

Download OpenAPI specification:

Documentação agregada das APIs PrismaData, cobrindo localização, roteamento, autenticação e consulta de precatórios/RPVs.

Quick Start

Visão Geral

A PrismaData API fornece dados geoespaciais e socioeconômicos do Brasil através de endpoints REST. Com uma única coordenada (latitude/longitude) você obtém informações sobre favelas, renda, presídios, fronteiras, setor censitário e mais.

Base URL: https://api.prismadata.io/v1

Pré-requisitos

  1. Conta PrismaData ativa
  2. API Key (formato ak_xxxxxxxxxxxxxxxx) — obtida no painel ou via suporte

Primeira chamada em 3 passos

1. Autenticar

Use sua API Key diretamente no header X-Apikey de cada requisição. O gateway valida a chave e gerencia o token JWT internamente — não é necessário chamar /auth/token separadamente.

2. Chamar um endpoint

Envie uma coordenada para qualquer endpoint de localização. Exemplo: consultar o presídio mais próximo de um ponto.

3. Parsear a resposta

A resposta é um JSON com campos prefixados por prismadata__<serviço>__. Veja a seção Formato de Resposta para detalhes.

Exemplos

curl:

curl "https://api.prismadata.io/v1/location/prison?lat=-25.5&lng=-54.5" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Python (httpx):

import httpx

resp = httpx.get(
    "https://api.prismadata.io/v1/location/prison",
    params={"lat": -25.5, "lng": -54.5},
    headers={"X-Apikey": "ak_xxxxxxxxxxxxxxxx"},
)
dados = resp.json()
nome = dados["prismadata__prison__nome_estabelecimento"]
print(nome or "Nenhum presídio próximo")

JavaScript (fetch):

const resp = await fetch(
  "https://api.prismadata.io/v1/location/prison?lat=-25.5&lng=-54.5",
  { headers: { "X-Apikey": "ak_xxxxxxxxxxxxxxxx" } }
);
const dados = await resp.json();
const nome = dados.prismadata__prison__nome_estabelecimento;
console.log(nome ?? "Nenhum presídio próximo");

Rate Limiting & Quota

Rate Limiting

Todas as respostas da API incluem headers de rate limiting que informam o estado atual da sua cota de requisições.

Header Tipo Descrição
X-RateLimit-Limit integer Número máximo de requisições permitidas por minuto para o usuário
X-RateLimit-Remaining integer Número de requisições restantes na janela atual
X-RateLimit-Reset integer Unix timestamp (segundos) indicando quando a janela de rate limit será reiniciada

O rate limit é aplicado por usuário (identificado via token JWT) no API Gateway (KrakenD).

Quota

Além do rate limit por minuto, cada tenant pode possuir uma quota que limita o número total de requisições em um período maior (diário, semanal, mensal ou anual). Quando o tenant possui uma política de quota ativa, todas as respostas incluem os seguintes headers:

Header Tipo Descrição
X-Quota-Limit integer Limite total de requisições da quota do tenant no período
X-Quota-Used integer Número de requisições já consumidas no período atual
X-Quota-Remaining integer Número de requisições restantes no período atual
X-Quota-Period string Período da quota: daily, weekly, monthly, yearly ou custom
X-Quota-Reset integer Unix timestamp (segundos) indicando quando a quota será reiniciada

Quando a quota é excedida, a API retorna HTTP 429.

Quotas podem ser configuradas por endpoint ou globalmente para o tenant. Consulte seu contrato ou entre em contato com o suporte para detalhes sobre sua quota.

Resposta 429 — Too Many Requests

Quando o rate limit ou a quota são excedidos, a API retorna HTTP 429 com uma mensagem em texto plano indicando o motivo:

  • Rate limit excedido: rate limit exceeded
  • Quota excedida: limit exceeded: 1000 requests used, limit is 1000

Dica: Monitore o header X-Quota-Remaining nas respostas para evitar o 429 proativamente — quando o valor estiver baixo, reduza a taxa de requisições.

Estratégia de Retry

Ao receber um 429, o cliente deve:

  1. Ler o header X-RateLimit-Reset ou X-Quota-Reset para saber quando a janela será reiniciada.
  2. Aguardar até o timestamp indicado antes de reenviar a requisição.
  3. Caso nenhum header de reset esteja disponível, usar backoff exponencial com jitter.

Exemplo em Python:

import time, random, httpx

def request_com_retry(client, method, url, **kwargs):
    for tentativa in range(5):
        resp = client.request(method, url, **kwargs)
        if resp.status_code != 429:
            return resp
        reset = (
            resp.headers.get("X-RateLimit-Reset")
            or resp.headers.get("X-Quota-Reset")
        )
        if reset:
            wait = max(0, int(reset) - int(time.time())) + 1
        else:
            wait = (2 ** tentativa) + random.uniform(0, 1)
        time.sleep(wait)
    return resp

Formato de Resposta

Convenção de nomes

Todos os campos de resposta seguem o padrão prismadata__<serviço>__<campo>, facilitando a identificação da origem de cada dado.

Prefixos por serviço

Serviço Prefixo Exemplo
Geocoder prismadata__geocoder__ prismadata__geocoder__latitude
Favelas prismadata__slum__ prismadata__slum__favela_nome
Renda Estática prismadata__personal_income_static__ prismadata__personal_income_static__percentil_br
Renda PDF prismadata__personal_income_pdf__ prismadata__personal_income_pdf__mean
Presídios prismadata__prison__ prismadata__prison__nome_estabelecimento
Fronteiras prismadata__border__ prismadata__border__faixa_fronteira
InfoSC prismadata__infosc__ prismadata__infosc__cod_setor
Rotas prismadata__routing_route__ prismadata__routing_route__distancia_m
Isocronas prismadata__routing_isochrone__ prismadata__routing_isochrone__geometria
Validação de Endereços prismadata__addr_validation__ prismadata__addr_validation__score

Tipos de resposta

Objeto único (GET)

Endpoints GET retornam um objeto JSON plano com os campos do serviço:

{
  "prismadata__prison__nome_estabelecimento": "Unidade Penal X",
  "prismadata__prison__distancia_borda_m": 1010.79,
  "prismadata__prison__uf": "MS"
}

Dicionário indexado (batch POST)

Endpoints batch retornam um dicionário onde as chaves são os identificadores enviados na requisição e os valores são os objetos de resposta:

{
  "ponto_1": { "prismadata__prison__nome_estabelecimento": "...", ... },
  "ponto_2": { "prismadata__prison__nome_estabelecimento": "...", ... }
}

Valores nulos

Quando um ponto está fora da área de cobertura de um serviço, os campos de detalhe retornam null. Isso indica ausência de dados, não um erro.

Porém, indicadores de proximidade ou pertencimento podem ter valor mesmo quando os campos de detalhe são null. Exemplo para um ponto longe de qualquer presídio:

{
  "prismadata__prison__ponto_dentro_presidio": false,
  "prismadata__prison__distancia_borda_m": 85000.5,
  "prismadata__prison__nome_estabelecimento": null,
  "prismadata__prison__uf": null,
  "prismadata__prison__tipo_estabelecimento": null
}

O padrão é: campos booleanos e de distância indicam relação espacial e geralmente têm valor; campos de detalhe (nome, tipo, UF) dependem de haver uma entidade próxima o suficiente.

Content-Type

Todas as respostas utilizam Content-Type: application/json.

Headers de resposta

Todas as respostas incluem os headers X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Veja a seção Rate Limiting & Quota para detalhes.

Tratamento de Erros

Códigos HTTP

Código Significado Content-Type Ação recomendada
200 Sucesso application/json
401 Não autenticado text/plain Verificar API Key ou token JWT
403 Sem permissão text/plain Verificar roles do token
404 Não encontrado text/plain Verificar URL do endpoint
422 Validação falhou application/json ou vazio Corrigir parâmetros (ver abaixo)
429 Rate limit / quota text/plain Ver seção Rate Limiting & Quota
500 Erro interno text/plain Retry com backoff, contatar suporte

Formato do corpo de erro

Erros 401, 403, 404, 429 e 500 retornam texto plano — use resp.text, não resp.json(). Exemplos de mensagens reais:

Código Mensagem
401 failed to fetch JWT: auth service returned status: 401 Unauthorized
404 404 page not found

Erro 422 possui dois cenários distintos:

  1. Gateway (KrakenD) — quando o tipo do query parameter é inválido (ex: lat=abc), o gateway rejeita a requisição antes de encaminhá-la ao serviço. Neste caso o corpo da resposta é vazio (content-length: 0).
  2. Serviço (FastAPI) — quando o parâmetro tem tipo correto mas valor inválido (ex: lat ausente), o serviço retorna JSON no formato ValidationError.

Importante: sempre verifique se o corpo da resposta 422 tem conteúdo antes de fazer parse JSON.

Formato do erro 422 (ValidationError)

Quando os parâmetros enviados são inválidos e a requisição chega ao serviço, a API retorna um 422 com o formato padrão do FastAPI:

{
  "detail": [
    {
      "type": "missing",
      "loc": ["query", "lat"],
      "msg": "Field required",
      "input": null
    }
  ]
}

Cada item em detail contém:

  • type: tipo do erro (ex: missing, value_error, type_error)
  • loc: localização do parâmetro (ex: ["query", "lat"], ["body", "coordenadas"])
  • msg: mensagem descritiva do erro
  • input: valor recebido (ou null se ausente)

Exemplos de tratamento

Python (httpx):

import httpx

resp = httpx.get(
    "https://api.prismadata.io/v1/location/prison",
    params={"lat": -25.5, "lng": -54.5},
    headers={"X-Apikey": "ak_xxxxxxxxxxxxxxxx"},
)

if resp.status_code == 200:
    dados = resp.json()
elif resp.status_code == 422:
    # Gateway pode retornar 422 com body vazio
    if resp.headers.get("content-type", "").startswith("application/json") and resp.text:
        erros = resp.json()["detail"]
        for erro in erros:
            print(f"Erro em {erro['loc']}: {erro['msg']}")
    else:
        print("Parâmetro com tipo inválido (rejeitado pelo gateway)")
elif resp.status_code == 429:
    reset = resp.headers.get("X-RateLimit-Reset")
    print(f"Rate limit. Retry após timestamp {reset}")
else:
    # 401, 403, 404, 500 — corpo é texto plano
    print(f"Erro {resp.status_code}: {resp.text}")

JavaScript (fetch):

const resp = await fetch(
  "https://api.prismadata.io/v1/location/prison?lat=-25.5&lng=-54.5",
  { headers: { "X-Apikey": "ak_xxxxxxxxxxxxxxxx" } }
);

if (resp.ok) {
  const dados = await resp.json();
} else if (resp.status === 422) {
  // Gateway pode retornar 422 com body vazio
  const contentType = resp.headers.get("content-type") || "";
  const body = await resp.text();
  if (contentType.includes("application/json") && body) {
    const { detail } = JSON.parse(body);
    detail.forEach(e => console.error(`Erro em ${e.loc}: ${e.msg}`));
  } else {
    console.error("Parâmetro com tipo inválido (rejeitado pelo gateway)");
  }
} else if (resp.status === 429) {
  const reset = resp.headers.get("X-RateLimit-Reset");
  console.warn(`Rate limit. Retry após timestamp ${reset}`);
} else {
  // 401, 403, 404, 500 — corpo é texto plano
  console.error(`Erro ${resp.status}: ${await resp.text()}`);
}

Token JWT expirado

O token JWT tem validade configurável de 1 a 15 minutos (default: 15 min), definida pelo administrador da conta por usuário. O campo exp no payload do JWT contém o timestamp Unix de expiração.

Com X-Apikey (recomendado)

O gateway renova o token automaticamente a cada requisição. Nenhum tratamento especial é necessário.

Com username/password via /auth/token

Ao gerenciar o JWT diretamente, extraia o campo exp dos claims e renove o token antes da expiração:

import httpx
import json
import base64
import time

BASE = "https://api.prismadata.io/v1"

class TokenManager:
    def __init__(self, username: str, password: str):
        self.username = username
        self.password = password
        self.token = None
        self.exp = 0

    def _obter_token(self):
        resp = httpx.post(
            f"{BASE}/auth/token",
            data={"username": self.username, "password": self.password},
        )
        resp.raise_for_status()
        self.token = resp.json()["access_token"]
        # Extrair exp do payload JWT (segunda parte, base64)
        payload = self.token.split(".")[1]
        payload += "=" * (-len(payload) % 4)  # padding
        claims = json.loads(base64.urlsafe_b64decode(payload))
        self.exp = claims["exp"]

    def get_headers(self) -> dict:
        if time.time() >= self.exp - 30:  # renova 30s antes
            self._obter_token()
        return {"Authorization": f"Bearer {self.token}"}

mgr = TokenManager("user@email.com", "senha")
resp = httpx.get(
    f"{BASE}/location/prison",
    params={"lat": -25.5, "lng": -54.5},
    headers=mgr.get_headers(),
)

Modo Sandbox

O que é

O modo sandbox permite testar a integração com a API usando dados sintéticos. As respostas mantêm a mesma estrutura e tipos de dados da produção, mas com valores fictícios.

Como funciona

Sandbox é uma propriedade da conta do usuário, configurada pelo administrador no Portal Administrativo. Não é algo que o desenvolvedor ativa por requisição.

  1. O administrador marca a conta como sandbox via Portal Administrativo
  2. O token JWT emitido para essa conta inclui o claim sandbox
  3. O API Gateway injeta automaticamente o header X-Sandbox em todas as requisições
  4. Os serviços retornam dados sintéticos em vez de consultar as bases reais

Nenhuma ação é necessária no código de integração. Se a conta é sandbox, todas as respostas já serão sintéticas automaticamente.

Comportamento

  • Retorna dados com tipos e estrutura idênticos à produção
  • Valores são fictícios mas plausíveis
  • Não consome quota nem rate limit
  • Funciona em todos os endpoints de localização e roteamento

Quando usar

  • Desenvolvimento e prototipação
  • Testes de integração
  • Pipelines de CI/CD
  • Validação de parsing de resposta

Solicite ao administrador a ativação do modo sandbox na sua conta para começar a receber dados sintéticos.

SDK

O SDK Python detecta automaticamente quando a conta está em modo sandbox e exibe um aviso durante a inicialização:

[PrismaData] Atenção: conta em modo sandbox — respostas contêm dados sintéticos.

Operações em Lote

Quando usar

Use operações em lote quando precisar consultar múltiplos pontos ou endereços em uma única chamada. Isso reduz latência e simplifica a integração.

Endpoints disponíveis

Endpoint Método Descrição
/location/batch POST Consulta de localização em lote (presídios, favelas, etc.)
/location/batch/aggregator POST Agregador de múltiplos serviços em lote
/routing/batch/route POST Cálculo de múltiplas rotas
/routing/batch/isochrone POST Cálculo de múltiplas isocronas

Formato de entrada (localização)

Envie um JSON onde as chaves são identificadores únicos (strings) e os valores são arrays [latitude, longitude]:

{
  "ponto_1": [-23.550520, -46.633308],
  "ponto_2": [-22.906847, -43.172897]
}

Formato de saída

A resposta é um dicionário com as mesmas chaves enviadas na requisição, mapeando para os objetos de resposta do serviço:

{
  "ponto_1": {
    "prismadata__prison__nome_estabelecimento": "...",
    "prismadata__prison__distancia_borda_m": 1500.0
  },
  "ponto_2": {
    "prismadata__prison__nome_estabelecimento": "...",
    "prismadata__prison__distancia_borda_m": 3200.0
  }
}

Formato de entrada (roteamento)

Para rotas, cada item contém coordenadas de origem e destino:

{
  "rotas": [
    {
      "origem": {"lat": -19.9191, "lng": -43.9378},
      "destino": {"lat": -19.9498, "lng": -43.9477}
    }
  ]
}

Limites

Serviço Máx. itens por batch
Localização (/location/batch) 1024
Agregador (/location/batch/aggregator) 1024
Roteamento (/routing/batch/route) 16
Isocronas (/routing/batch/isochrone) 16

Sem falha parcial: cada ponto é processado independentemente. Todos os pontos retornam resultado — pontos fora de cobertura recebem campos de detalhe null (veja seção Formato de Resposta).

Agregador sem serviços habilitados: se nenhum flag de serviço for informado via query parameter (slum, prison, border, etc.), a resposta contém objetos vazios {} para cada ponto.

Cobrança

A cobrança de chamadas batch é feita por número de itens no lote. Um batch com 10 pontos equivale a 10 chamadas individuais.

Exemplos

Python (httpx):

import httpx

coordenadas = {
    "ponto_1": [-23.550520, -46.633308],
    "ponto_2": [-22.906847, -43.172897],
}

resp = httpx.post(
    "https://api.prismadata.io/v1/location/batch",
    json=coordenadas,
    headers={"X-Apikey": "ak_xxxxxxxxxxxxxxxx"},
)
resultados = resp.json()

for chave, dados in resultados.items():
    print(f"{chave}: {dados}")

curl:

curl -X POST "https://api.prismadata.io/v1/location/batch" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"ponto_1": [-23.55, -46.63], "ponto_2": [-22.90, -43.17]}'

JavaScript (fetch):

const coordenadas = {
  ponto_1: [-23.550520, -46.633308],
  ponto_2: [-22.906847, -43.172897]
};

const resp = await fetch(
  "https://api.prismadata.io/v1/location/batch",
  {
    method: "POST",
    headers: {
      "X-Apikey": "ak_xxxxxxxxxxxxxxxx",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(coordenadas)
  }
);
const resultados = await resp.json();
Object.entries(resultados).forEach(([chave, dados]) => {
  console.log(`${chave}:`, dados);
});

Python SDK

Instalacao

Requer Python >= 3.10.

pip install prismadata

Extras opcionais:

pip install prismadata[pandas]     # enriquecimento de DataFrames
pip install prismadata[sklearn]    # transformer scikit-learn
pip install prismadata[cache]      # cache local em disco
pip install prismadata[progress]   # barra de progresso (tqdm)
pip install prismadata[all]        # todos os extras

Quick Start

from prismadata import Client

client = Client(api_key="ak_xxxxxxxxxxxxxxxx")

# Consultar favela mais proxima
result = client.slum(lat=-23.55, lng=-46.63)
print(result)

# Geocodificar um endereco
geo = client.geocode(full_address="Av Paulista 1000, Sao Paulo")
print(geo)

Autenticacao

O SDK aceita 3 formas de credencial (em ordem de prioridade):

1. API Key direta:

client = Client(api_key="ak_xxxxxxxxxxxxxxxx")

2. Usuario e senha:

client = Client(username="user@email.com", password="senha")

3. Variaveis de ambiente:

export PRISMADATA_APIKEY=ak_xxxxxxxxxxxxxxxx
# ou
export PRISMADATA_USERNAME=user@email.com
export PRISMADATA_PASSWORD=senha
client = Client()  # detecta automaticamente

A renovacao do token JWT e automatica — o SDK cuida internamente.

Uso Assincrono

from prismadata import AsyncClient

async with await AsyncClient.create(api_key="ak_xxxxxxxxxxxxxxxx") as client:
    result = await client.slum(lat=-23.55, lng=-46.63)
    print(result)

    # Enriquecimento de DataFrames tambem funciona
    enriched = await client.enrich(df, services=["slum", "income_static"])

O AsyncClient usa factory pattern — note o await antes de AsyncClient.create(). Todos os metodos do Client possuem equivalente assincrono no AsyncClient.

Operacoes em Lote

Para consultas em volume, use os metodos *_batch:

points = {
    "p1": [-23.55, -46.63],
    "p2": [-22.90, -43.17],
    "p3": [-19.92, -43.94],
}

# Batch de favelas
result = client.slum_batch(points)

# Batch de presídios
result = client.prison_batch(points)

# Batch de renda estatica
result = client.personal_income_static_batch(points)

# Batch de renda PDF (distribuicao de probabilidade)
result = client.personal_income_pdf_batch(points)

# Batch de renda PDF com parametros demograficos
result = client.personal_income_pdf_batch_detailed({
    "p1": {"lat": -23.55, "lng": -46.63, "gender": "M", "age": 50},
    "p2": {"lat": -22.90, "lng": -43.17, "gender": "F", "age": 30, "is_responsible": True},
})

# Batch com multiplos servicos (agregador)
result = client.aggregate_batch(
    points,
    services=["slum", "prison", "infosc"],
)

O SDK divide automaticamente lotes grandes em chunks e reenvia com retry em caso de erro.

Geocodificacao em Lote

# Geocodificar enderecos em lote (max 512 por chunk)
addresses = {
    "p1": {"endereco_completo": "Av Paulista 1000, Sao Paulo, SP"},
    "p2": {"cep": "30130-165", "numero": "100", "logradouro": "Rua da Bahia"},
}
result = client.geocode_batch(addresses)

# Geocodificacao reversa em lote (max 1024 por chunk)
points = {"p1": [-23.55, -46.63], "p2": [-22.90, -43.17]}
result = client.reverse_geocode_batch(points)

# Geocodificacao + agregacao em lote
result = client.geocode_aggregate_batch(
    addresses,
    services=["slum", "infosc"],
)
# Cada resultado contem campos do geocoder + dos servicos solicitados

Enriquecimento de DataFrames

Com o extra pandas, enriqueca DataFrames diretamente:

import pandas as pd
from prismadata import Client

client = Client(api_key="ak_xxxxxxxxxxxxxxxx")

df = pd.DataFrame({
    "lat": [-23.55, -22.90, -19.92],
    "lng": [-46.63, -43.17, -43.94],
})

enriched = client.enrich(
    df,
    services=["slum", "prison", "income_static"],
)
print(enriched.columns.tolist())

Pipeline Scikit-learn

Com o extra sklearn, use o transformer em pipelines de ML:

from sklearn.pipeline import Pipeline
from prismadata import Client

client = Client(api_key="ak_xxxxxxxxxxxxxxxx")

transformer = client.get_transformer(
    services=["slum", "income_static"],
    lat_col="latitude",
    lng_col="longitude",
)

pipe = Pipeline([
    ("prismadata", transformer),
    ("model", your_model),
])

Tratamento de Erros

from prismadata import Client
from prismadata.exceptions import (
    AuthenticationError,
    BatchError,
    RateLimitError,
    PrismaDataError,
)

try:
    client = Client(api_key="ak_xxxxxxxxxxxxxxxx")
    result = client.slum(lat=-23.55, lng=-46.63)
except AuthenticationError:
    print("Credenciais invalidas")
except RateLimitError:
    print("Rate limit excedido, aguarde e tente novamente")
except PrismaDataError as e:
    print(f"Erro da API: {e}")

Falhas Parciais em Batch

Quando um lote grande falha parcialmente, o SDK coleta os resultados dos chunks que deram certo e levanta BatchError com os dados parciais:

try:
    result = client.slum_batch(large_point_dict)
except BatchError as e:
    # Resultados dos chunks que deram certo
    for key, value in e.partial_results.items():
        process(key, value)

    # Chaves dos chunks que falharam (para retry manual)
    print(f"Falhou: {e.failed_keys}")

O SDK implementa retry automatico com backoff exponencial para erros transientes (429, 500, 502, 503, 504). Alem disso, respeita os headers Retry-After e X-RateLimit-Reset do servidor.

R SDK

Guia do Usuario -- pacote prismadata para R

SDK oficial em R para a API de inteligencia geoespacial da PrismaData (https://api.prismadata.io/v1). Este guia cobre instalacao, autenticacao, consultas individuais e em lote, enriquecimento de data.frames, integracao com tidymodels e tratamento de erros.


1. Instalacao

Via CRAN

Quando disponivel no CRAN, basta executar:

install.packages("prismadata")

Via GitHub (versao de desenvolvimento)

Para instalar a versao mais recente diretamente do repositorio:

# Instale o pacote remotes caso ainda nao tenha
install.packages("remotes")

# Instale o prismadata a partir do GitHub
remotes::install_github("prismadata/prismadata-r")

Dependencias opcionais

O pacote possui dependencias opcionais que habilitam funcionalidades extras. Instale conforme a necessidade:

# Cache em disco (para evitar chamadas repetidas a API)
install.packages("cachem")

# Enriquecimento de tibbles e manipulacao com dplyr
install.packages(c("tibble", "dplyr"))

# Integracao com tidymodels (step_prismadata)
install.packages("recipes")

2. Quick Start

Exemplo minimo para comecar a usar o pacote: criar um cliente, consultar a proximidade de favela para um par de coordenadas e inspecionar o resultado.

library(prismadata)

# Cria o cliente com sua chave de API
client <- prismadata_client(api_key = "ak_xxxxxxxxxxxxxxxx")

# Consulta a favela mais proxima de um ponto em Sao Paulo
resultado <- client$slum(lat = -23.55, lng = -46.63)

# Inspeciona o retorno
str(resultado)
# $ prismadata__favela__nome        : chr "Paraisopolis"
# $ prismadata__favela__distancia_m : num 3420
# $ prismadata__favela__area_ha     : num 102.3
# ...

O objeto client expoe metodos para todos os servicos da API: geocodificacao, inteligencia de localizacao, roteamento, validacao de enderecos e consultas de credito.

# Geocodificacao
geo <- client$geocode(full_address = "Av Paulista 1000, Sao Paulo, SP")

# Geocodificacao reversa
endereco <- client$reverse_geocode(lat = -23.5632, lng = -46.6542)

# Proximidade de presidio
presidio <- client$prison(lat = -23.55, lng = -46.63)

# Proximidade de fronteira
fronteira <- client$border(lat = -23.55, lng = -46.63)

# Informacoes do setor censitario (IBGE)
setor <- client$infosc(lat = -23.55, lng = -46.63)

# Estimativa de renda estatica
renda <- client$income_static(lat = -23.55, lng = -46.63)

# Calculo de rota entre dois pontos
rota <- client$route(
  points = list(c(-23.55, -46.63), c(-22.90, -43.17)),
  profile = "car"
)

# Isocrona (area alcancavel em 10 minutos de carro)
iso <- client$isochrone(lat = -23.55, lng = -46.63, time_limit = 600, profile = "car")

3. Autenticacao

O pacote suporta tres formas de autenticacao, avaliadas na seguinte ordem de prioridade:

Metodo 1 -- Chave de API (api_key)

A forma mais simples. Voce recebe a chave no painel da PrismaData.

client <- prismadata_client(api_key = "ak_xxxxxxxxxxxxxxxx")

Metodo 2 -- Usuario e senha (username / password)

Autentica via endpoint /auth/token, obtendo um JWT que e renovado automaticamente.

client <- prismadata_client(
  username = "usuario@empresa.com",
  password = "minha_senha_segura"
)

Metodo 3 -- Variaveis de ambiente

Quando nenhum argumento e passado, o pacote busca credenciais automaticamente nas variaveis de ambiente. Isso e ideal para ambientes de producao, CI/CD e containers.

# Opcao A: defina a variavel PRISMADATA_APIKEY
Sys.setenv(PRISMADATA_APIKEY = "ak_xxxxxxxxxxxxxxxx")

# Opcao B: defina PRISMADATA_USERNAME e PRISMADATA_PASSWORD
Sys.setenv(PRISMADATA_USERNAME = "usuario@empresa.com")
Sys.setenv(PRISMADATA_PASSWORD = "minha_senha_segura")

# O cliente detecta as credenciais automaticamente
client <- prismadata_client()

A ordem de resolucao e:

  1. Argumento api_key explicito
  2. Argumentos username + password explicitos
  3. Variavel de ambiente PRISMADATA_APIKEY
  4. Variaveis de ambiente PRISMADATA_USERNAME + PRISMADATA_PASSWORD

Se nenhuma credencial for encontrada, o pacote emite um erro do tipo prismadata_authentication_error com instrucoes de configuracao.

Opcoes adicionais do cliente

client <- prismadata_client(
  api_key = "ak_xxxxxxxxxxxxxxxx",
  timeout = 60,                # Timeout de requisicao em segundos (padrao: 30)
  cache = TRUE,                # Habilita cache em disco (requer pacote cachem)
  cache_ttl = 86400,           # Tempo de vida do cache em segundos (padrao: 24h)
  clean_columns = TRUE,        # Remove prefixo "prismadata__" dos nomes de colunas
  show_progress = TRUE,        # Exibe barra de progresso em operacoes batch
  app_name = "meu_app"        # Nome da aplicacao enviado no header X-App
)

Verificando a autenticacao

# Retorna informacoes do usuario autenticado
info <- client$me()
print(info)
# $username
# [1] "usuario@empresa.com"
# $roles
# [1] "admin" "full_reader"

4. Operacoes em Lote

Para consultar muitos pontos de uma vez, use os metodos *_batch(). O pacote faz o auto-chunking automaticamente: listas com mais de 1024 pontos sao divididas em blocos e enviadas sequencialmente, com barra de progresso.

slum_batch() -- Proximidade de favela em lote

# Cria uma lista nomeada de coordenadas (lat, lng)
pontos <- list(
  "sp_centro"  = c(-23.5505, -46.6333),
  "rj_centro"  = c(-22.9068, -43.1729),
  "bh_centro"  = c(-19.9191, -43.9386),
  "poa_centro" = c(-30.0346, -51.2177),
  "recife"     = c(-8.0476, -34.8770)
)

# Consulta em lote
resultados <- client$slum_batch(pontos)

# Cada resultado e acessado pela chave do ponto
resultados$sp_centro$prismadata__favela__distancia_m
# [1] 2145.7

resultados$rj_centro$prismadata__favela__nome
# [1] "Morro da Providencia"

aggregate_batch() -- Multiplos servicos em lote

Consulta varios servicos simultaneamente para cada ponto (favela, presidio, fronteira, setor censitario).

pontos <- list(
  "loc_1" = c(-23.55, -46.63),
  "loc_2" = c(-22.90, -43.17)
)

resultados <- client$aggregate_batch(
  points = pontos,
  services = c("slum", "prison", "infosc")
)

# O resultado de cada ponto contem campos de todos os servicos solicitados
resultados$loc_1$prismadata__favela__distancia_m
resultados$loc_1$prismadata__presidio__distancia_m
resultados$loc_1$prismadata__info_sc__cod_setor

route_batch() -- Rotas em lote

Calcula multiplas rotas de uma vez. O limite por chunk para roteamento e de 16 itens.

# Cada item deve conter um elemento "points" com a lista de coordenadas
itens_rota <- list(
  list(points = list(c(-23.55, -46.63), c(-23.56, -46.65))),
  list(points = list(c(-22.90, -43.17), c(-22.91, -43.20))),
  list(points = list(c(-19.92, -43.94), c(-19.93, -43.96)))
)

resultados <- client$route_batch(itens_rota, profile = "car")

# Estrutura do retorno
resultados$TOTAL       # Total de rotas solicitadas
resultados$SUCESSOS    # Quantidade de rotas calculadas com sucesso
resultados$FALHAS      # Quantidade de falhas
resultados$RESULTADOS  # Lista com os dados de cada rota

Geocodificacao em lote

# Geocodificar enderecos em lote (max 512 por chunk)
enderecos <- list(
  "p1" = list(endereco_completo = "Av Paulista 1000, Sao Paulo, SP"),
  "p2" = list(cep = "30130-165", numero = "100", logradouro = "Rua da Bahia")
)
resultados <- client$geocode_batch(enderecos)

# Geocodificacao reversa em lote (max 1024 por chunk)
pontos <- list("p1" = c(-23.55, -46.63), "p2" = c(-22.90, -43.17))
resultados <- client$reverse_geocode_batch(pontos)

# Geocodificacao + agregacao em lote
resultados <- client$geocode_aggregate_batch(
  enderecos,
  services = c("slum", "infosc")
)
# Cada resultado contem campos do geocoder + dos servicos solicitados
resultados$p1$prismadata__geocoder__latitude
resultados$p1$prismadata__slum__favela_distancia_m

Outros metodos batch disponiveis

# Proximidade de presidio em lote
client$prison_batch(pontos)

# Proximidade de fronteira em lote
client$border_batch(pontos)

# Setor censitario em lote
client$infosc_batch(pontos)

# Isocronas em lote
itens_iso <- list(
  list(lat = -23.55, lng = -46.63, time_limit = 600),
  list(lat = -22.90, lng = -43.17, time_limit = 300)
)
client$isochrone_batch(itens_iso, profile = "car", direction = "outgoing")

Nota sobre auto-chunking

  • Servicos de localizacao (slum_batch, prison_batch, border_batch, infosc_batch, aggregate_batch): limite de 1024 pontos por chunk.
  • Servicos de roteamento (route_batch, isochrone_batch): limite de 16 itens por chunk.

Quando a quantidade de pontos excede o limite, o pacote divide automaticamente em chunks, envia cada um separadamente e consolida os resultados. A barra de progresso e exibida quando ha mais de um chunk (desative com show_progress = FALSE no construtor do cliente).


5. Enriquecimento de Data.Frames

O metodo client$enrich() recebe um data.frame com colunas de latitude e longitude e retorna o mesmo data.frame acrescido de colunas com dados geoespaciais da PrismaData.

# Data.frame de entrada com coordenadas
df <- data.frame(
  id  = c("loja_sp", "loja_rj", "loja_bh"),
  lat = c(-23.5505, -22.9068, -19.9191),
  lng = c(-46.6333, -43.1729, -43.9386)
)

# Enriquece com dados de favela, setor censitario e renda
enriquecido <- client$enrich(
  df,
  lat_col = "lat",
  lng_col = "lng",
  services = c("slum", "infosc", "income_static")
)

# O data.frame agora possui colunas adicionais
names(enriquecido)
# [1] "id"  "lat"  "lng"
# [4] "prismadata__favela__distancia_m"  "prismadata__favela__nome"
# [7] "prismadata__info_sc__cod_setor"   "prismadata__renda__mediana"
# ...

# Visualiza o resultado
head(enriquecido)

Usando com dplyr e tibbles

library(dplyr)

enriquecido <- client$enrich(df, services = c("slum", "prison")) |>
  as_tibble() |>
  filter(prismadata__favela__distancia_m < 5000) |>
  arrange(prismadata__favela__distancia_m)

Limpando nomes de colunas

Para remover o prefixo prismadata__ e simplificar os nomes, crie o cliente com clean_columns = TRUE:

client <- prismadata_client(
  api_key = "ak_xxxxxxxxxxxxxxxx",
  clean_columns = TRUE
)

enriquecido <- client$enrich(df, services = c("slum"))
names(enriquecido)
# [1] "id"  "lat"  "lng"  "favela_distancia_m"  "favela_nome"  ...

Voce tambem pode limpar nomes manualmente em qualquer momento:

# Limpa nomes de um vetor de caracteres
clean_columns(c("prismadata__favela__distancia_m", "prismadata__geocoder__latitude"))
# [1] "favela_distancia_m"  "geocoder_latitude"

# Limpa nomes de um data.frame
df_limpo <- clean_columns(enriquecido)

6. Pipeline tidymodels

O pacote oferece o step step_prismadata() para integracao direta com o framework tidymodels/recipes. Ele permite adicionar features geoespaciais ao seu pipeline de machine learning de forma declarativa.

Exemplo completo

library(recipes)
library(prismadata)

# Suponha um dataset de treino com coordenadas e uma variavel alvo
dados_treino <- data.frame(
  lat    = c(-23.55, -22.90, -19.92, -30.03, -8.05),
  lng    = c(-46.63, -43.17, -43.94, -51.22, -34.88),
  valor  = c(1500, 2300, 1800, 1200, 900),
  target = c(1, 0, 1, 0, 1)
)

dados_teste <- data.frame(
  lat    = c(-23.56, -22.91),
  lng    = c(-46.64, -43.18),
  valor  = c(1600, 2100),
  target = c(1, 0)
)

# Define a receita com o step de enriquecimento PrismaData
receita <- recipe(target ~ ., data = dados_treino) |>
  step_prismadata(
    lat, lng,
    services = c("slum", "income_static"),
    api_key = "ak_xxxxxxxxxxxxxxxx"
  )

# Prepara a receita (faz as chamadas a API para os dados de treino)
receita_preparada <- prep(receita, training = dados_treino)

# Aplica a receita nos dados de teste (faz as chamadas para os dados de teste)
dados_enriquecidos <- bake(receita_preparada, new_data = dados_teste)

# O resultado e um tibble com as colunas originais + colunas de enriquecimento
print(dados_enriquecidos)

Combinando com outros steps

library(recipes)
library(prismadata)

receita <- recipe(target ~ ., data = dados_treino) |>
  step_prismadata(
    lat, lng,
    services = c("slum", "prison", "infosc"),
    api_key = "ak_xxxxxxxxxxxxxxxx",
    clean_columns = TRUE
  ) |>
  step_normalize(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors())

Notas sobre step_prismadata

  • O step requer exatamente 2 colunas (latitude e longitude, nessa ordem).
  • Durante o prep(), uma chamada e feita com a primeira linha dos dados de treino para descobrir os nomes das colunas de enriquecimento. Em seguida, o dataset completo e enriquecido durante o bake().
  • O parametro skip = TRUE pode ser usado para pular o step durante o bake() (util para debug).
  • Autenticacao via username/password tambem e suportada no step.

7. Tratamento de Erros

O pacote define uma hierarquia de condicoes (errors) customizadas, todas herdando de prismadata_error. Isso permite capturar erros especificos com tryCatch.

Hierarquia de erros

Classe Descricao Status HTTP
prismadata_error Erro generico da API Qualquer
prismadata_authentication_error Falha de autenticacao (credenciais invalidas, token expirado) 401, 403
prismadata_rate_limit_error Limite de requisicoes excedido 429
prismadata_quota_error Cota de uso esgotada 402
prismadata_validation_error Parametros de entrada invalidos 422
prismadata_batch_error Falha parcial em operacao batch --

Exemplo: capturando erros especificos

tryCatch(

{
    resultado <- client$slum(lat = -23.55, lng = -46.63)
    print(resultado)
  },

  # Erro de autenticacao (credencial invalida ou expirada)
  prismadata_authentication_error = function(e) {
    message("Erro de autenticacao: ", conditionMessage(e))
    message("Status HTTP: ", e$status_code)
  },

  # Limite de requisicoes por segundo excedido
  prismadata_rate_limit_error = function(e) {
    message("Rate limit excedido. Aguarde antes de tentar novamente.")
    message("Status HTTP: ", e$status_code)
  },

  # Cota de uso esgotada (creditos insuficientes)
  prismadata_quota_error = function(e) {
    message("Cota esgotada: ", conditionMessage(e))
  },

  # Parametros de entrada invalidos
  prismadata_validation_error = function(e) {
    message("Dados de entrada invalidos: ", conditionMessage(e))
  },

  # Qualquer outro erro da API PrismaData
  prismadata_error = function(e) {
    message("Erro da API: ", conditionMessage(e))
    message("Status HTTP: ", e$status_code)
    message("Corpo da resposta: ", paste(e$body, collapse = ", "))
  }
)

Exemplo: retry manual apos rate limit

consulta_com_retry <- function(client, lat, lng, tentativas = 3) {
  for (i in seq_len(tentativas)) {
    resultado <- tryCatch(
      client$slum(lat = lat, lng = lng),

      prismadata_rate_limit_error = function(e) {
        if (i < tentativas) {
          tempo_espera <- 2^i
          message(sprintf("Rate limit atingido. Tentativa %d/%d. Aguardando %ds...",
                          i, tentativas, tempo_espera))
          Sys.sleep(tempo_espera)
          NULL
        } else {
          stop("Rate limit excedido apos ", tentativas, " tentativas.")
        }
      }
    )

    if (!is.null(resultado)) return(resultado)
  }
}

resultado <- consulta_com_retry(client, lat = -23.55, lng = -46.63)

Nota sobre retries automaticos

O pacote ja implementa retry automatico com backoff exponencial para os seguintes status HTTP: 429 (rate limit), 500, 502, 503 e 504 (erros de servidor). Sao feitas ate 3 tentativas antes de emitir o erro. O header Retry-After e respeitado quando presente na resposta.


8. Falhas Parciais em Batch

Operacoes em lote podem falhar parcialmente: parte dos chunks retorna com sucesso enquanto outros falham (por timeout, erro de servidor etc.). Nesses casos, o pacote emite um erro do tipo prismadata_batch_error que carrega tanto os resultados parciais quanto as chaves que falharam.

Estrutura do prismadata_batch_error

O erro prismadata_batch_error possui dois campos extras acessiveis no handler:

  • e$partial_results: lista nomeada com os resultados dos chunks que tiveram sucesso.
  • e$failed_keys: vetor de caracteres com as chaves (IDs dos pontos) que falharam.

Exemplo: recuperando resultados parciais

# Lista grande de pontos
pontos <- list(
  "p001" = c(-23.55, -46.63),
  "p002" = c(-22.90, -43.17),
  "p003" = c(-19.92, -43.94),
  "p004" = c(-30.03, -51.22),
  "p005" = c(-8.05,  -34.88)
  # ... imagine centenas de pontos
)

resultados <- tryCatch(
  client$slum_batch(pontos),

  # Captura falha parcial
  prismadata_batch_error = function(e) {
    message(sprintf(
      "Falha parcial: %d resultados obtidos, %d chaves falharam",
      length(e$partial_results),
      length(e$failed_keys)
    ))

    # Exibe quais chaves falharam
    message("Chaves com falha: ", paste(e$failed_keys, collapse = ", "))

    # Retorna os resultados parciais para nao perder o que ja foi processado
    e$partial_results
  },

  # Outros erros da API
  prismadata_error = function(e) {
    message("Erro geral da API: ", conditionMessage(e))
    NULL
  }
)

# Processa os resultados parciais (se houver)
if (!is.null(resultados)) {
  message(sprintf("Processando %d resultados parciais...", length(resultados)))

  for (chave in names(resultados)) {
    distancia <- resultados[[chave]]$prismadata__favela__distancia_m
    message(sprintf("  %s: %.1f metros da favela mais proxima", chave, distancia))
  }
}

Exemplo: retry das chaves que falharam

consulta_batch_resiliente <- function(client, pontos, max_tentativas = 3) {
  resultados_finais <- list()
  pendentes <- pontos

  for (tentativa in seq_len(max_tentativas)) {
    if (length(pendentes) == 0) break

    resultado <- tryCatch(
      client$slum_batch(pendentes),

      prismadata_batch_error = function(e) {
        # Acumula resultados parciais
        resultados_finais <<- c(resultados_finais, e$partial_results)

        # Filtra apenas os pontos que falharam para retry
        chaves_falha <- e$failed_keys
        message(sprintf(
          "Tentativa %d: %d sucessos, %d falhas. Retentando falhas...",
          tentativa,
          length(e$partial_results),
          length(chaves_falha)
        ))
        pendentes <<- pontos[chaves_falha]
        NULL
      }
    )

    if (!is.null(resultado)) {
      # Tudo funcionou nesta tentativa
      resultados_finais <- c(resultados_finais, resultado)
      pendentes <- list()
    }
  }

  if (length(pendentes) > 0) {
    warning(sprintf(
      "%d pontos nao puderam ser processados apos %d tentativas: %s",
      length(pendentes),
      max_tentativas,
      paste(names(pendentes), collapse = ", ")
    ))
  }

  resultados_finais
}

# Uso
todos_resultados <- consulta_batch_resiliente(client, pontos)

Exemplo: falha parcial em route_batch

Para operacoes de roteamento em lote, a estrutura do partial_results e diferente -- segue o formato com TOTAL, SUCESSOS, FALHAS e RESULTADOS:

itens_rota <- list(
  list(points = list(c(-23.55, -46.63), c(-23.56, -46.65))),
  list(points = list(c(-22.90, -43.17), c(-22.91, -43.20)))
)

resultado <- tryCatch(
  client$route_batch(itens_rota, profile = "car"),

  prismadata_batch_error = function(e) {
    parcial <- e$partial_results

    message(sprintf(
      "Rotas: %d total, %d sucessos, %d falhas",
      parcial$TOTAL,
      parcial$SUCESSOS,
      parcial$FALHAS
    ))

    message("Indices com falha: ", paste(e$failed_keys, collapse = ", "))

    # Retorna os resultados parciais
    parcial
  }
)

Referencia Rapida

Metodo Descricao
client$geocode() Geocodificacao de endereco
client$reverse_geocode() Geocodificacao reversa
client$slum() Proximidade de favela
client$prison() Proximidade de presidio
client$border() Proximidade de fronteira
client$infosc() Setor censitario (IBGE)
client$income_static() Estimativa de renda estatica
client$income_pdf() Funcao densidade de probabilidade de renda
client$route() Calculo de rota
client$isochrone() Calculo de isocrona
client$compare_address() Comparacao de endereco vs coordenadas
client$validate_address() Validacao de endereco via GPS
client$cluster_locations() Clusterizacao de localizacoes historicas
client$precatory() Consulta de precatorios/RPV
client$precatory_detail() Detalhamento de precatorios/RPV
client$aggregate() Multiplos servicos em uma chamada
client$slum_batch() Favela em lote
client$prison_batch() Presidio em lote
client$border_batch() Fronteira em lote
client$infosc_batch() Setor censitario em lote
client$aggregate_batch() Multiplos servicos em lote
client$geocode_batch() Geocodificacao em lote
client$reverse_geocode_batch() Geocodificacao reversa em lote
client$geocode_aggregate_batch() Geocodificacao + agregacao em lote
client$route_batch() Rotas em lote
client$isochrone_batch() Isocronas em lote
client$enrich() Enriquecimento de data.frame
client$me() Informacoes do usuario autenticado
step_prismadata() Step para recipes/tidymodels
clean_columns() Limpeza de nomes de colunas

Para mais informacoes, consulte a documentacao da API em https://docs.prismadata.io ou abra uma issue no repositorio GitHub.

Autenticacao

O servico de autenticacao PrismaData gerencia credenciais, tokens JWT e API Keys para acesso as APIs de dados PrismaData.

Metodos de Autenticacao

Existem duas formas de autenticar nas APIs PrismaData. Recomendamos o uso de API Key por sua simplicidade e menor latencia.

1. API Key (recomendado)

A API Key e a forma mais simples de autenticacao. Basta envia-la no header X-Apikey em qualquer request ao gateway:

curl https://api.prismadata.io/v1/location/prison?lat=-25.5&lng=-54.5 \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Vantagens da API Key:

  • Nao expira (a menos que seja revogada pelo administrador)
  • O gateway gerencia o token JWT automaticamente (gera, cacheia e renova)
  • Nenhum controle de validade necessario pelo cliente
  • Menor latencia: o token e cacheado no gateway e reutilizado entre requests

2. Login com usuario e senha

Para obter um token JWT diretamente, envie suas credenciais via POST /token:

curl -X POST https://api.prismadata.io/v1/auth/token \
  -d "username=seu_usuario&password=sua_senha"

Em seguida, use o token retornado no header Authorization:

curl https://api.prismadata.io/v1/location/prison?lat=-25.5&lng=-54.5 \
  -H "Authorization: Bearer eyJ..."

Importante sobre tokens JWT:

  • O token possui um tempo de expiracao (claim exp), tipicamente 15 minutos
  • O cliente deve controlar a validade do token e renova-lo antes da expiracao
  • Apos expirado, o token e rejeitado pelo gateway e um novo deve ser obtido via POST /token

Comparativo

API Key Token JWT
Obtencao Fornecida pelo administrador POST /token com usuario/senha
Expiracao Nao expira Expira (claim exp, tipicamente 15min)
Renovacao Automatica pelo gateway Manual pelo cliente
Uso Header X-Apikey Header Authorization: Bearer
Latencia Menor (token cacheado no gateway) Maior (requer chamada ao /token a cada expiracao)
Recomendado para Integracao backend-to-backend, scripts, automacoes Browsers, apps com login de usuario

Endpoint POST /token

O endpoint /token aceita dois modos de autenticacao via application/x-www-form-urlencoded:

Com API Key (campo api_key):

curl -X POST https://api.prismadata.io/v1/auth/token \
  -d "api_key=ak_xxxxxxxxxxxxxxxx"

Com usuario e senha (campos username e password):

curl -X POST https://api.prismadata.io/v1/auth/token \
  -d "username=seu_usuario&password=sua_senha"

Estrutura do Token JWT

O token JWT contém os seguintes claims:

Claim Tipo Descricao
sub string Username do usuario
roles string[] Roles atribuidos ao usuario
rate_limit float Limite de requisicoes por minuto
allowed_network string CIDR permitido (vazio = sem restricao)
sandbox bool Modo sandbox (dados sinteticos)
tenant_id int/null ID do tenant
quota_limit int/null Limite global de quota
quota_limits object/null Limites por endpoint
quota_expiry int/null Unix timestamp de expiracao da quota
exp int Unix timestamp de expiracao do token

Headers do JWT: kid (Key ID), iss ("PrismaDataAuth"), alg (RS256).

Rate Limiting

Os endpoints de autenticacao possuem rate limiting de 5 requisicoes por minuto por IP.

Contato

Credenciais de acesso sao fornecidas pela equipe PrismaData. Para solicitar acesso, entre em contato pelo portal.

/token

Autentica via usuario/senha ou API Key e retorna um token JWT assinado com RS256. O token e retornado no body e tambem em um cookie httpOnly para uso em browsers.

Login com API Key (recomendado): envie no campo api_key. A API Key nao expira e o gateway gerencia o token automaticamente, sem necessidade de controle de validade pelo cliente.

curl -X POST .../token -d "api_key=ak_xxxxxxxx"

Login com senha: envie username e password como form-urlencoded. O token JWT retornado possui expiracao (claim exp) e o cliente deve controlar sua validade, renovando-o antes da expiracao.

curl -X POST .../token -d "username=user&password=pass"
Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/x-www-form-urlencoded
username
string (Username)
Default: ""

Nome de usuario (usado apenas no login com senha).

password
string (Password)
Default: ""

Senha do usuario (usado apenas no login com senha).

api_key
string (Api Key)
Default: ""

API Key para autenticacao (recomendado). Quando informado, os campos username e password sao ignorados.

Responses

Request samples

curl -X POST "https://api.prismadata.io/v1/auth/token" \
  -d "api_key=ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByaXNtYWRhdGEtMSIsImlzcyI6IlByaXNtYURhdGFBdXRoIn0...",
  • "token_type": "bearer"
}

/me

Retorna os dados do usuario autenticado extraidos do token JWT. O token e obtido do cookie httpOnly ou do header Authorization: Bearer <token>.

Authorizations:
BearerAuthX-Apikeyapi_key

Responses

Request samples

curl "https://api.prismadata.io/v1/auth/me" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "username": "usuario_exemplo",
  • "roles": [
    ],
  • "tenant_id": 1,
  • "sandbox": false,
  • "rate_limit": 60
}

Identity

Identity - GeoIP Compliance API

API de Identificacao de Pais por IP/Coordenada para Compliance PLD/FT.

Identifica o pais de origem de um acesso a partir de endereco IP ou coordenada geografica, retornando classificacao de risco, status em listas de sancoes internacionais (GAFI, OFAC, UE), paraisos fiscais (RFB, UE), deteccao de VPN/Proxy/TOR/Datacenter/Satelite, ASN (Autonomous System Number) e indice de confianca da geolocalizacao.

Cada resposta inclui assinatura digital Ed25519, funcionando como laudo tecnico verificavel por terceiros (auditores, BACEN, PF).

Casos de Uso

  • Monitoramento de pais de acesso para compliance com Circular BACEN 3.978/2020
  • Deteccao de acessos via VPN, TOR, proxy ou satelite em plataformas financeiras
  • Identificacao de ASN e organizacao responsavel pelo IP
  • Avaliacao de confianca da geolocalizacao (reduzida para conexoes via satelite)
  • Enriquecimento de dados para analise de risco PLD/FT
  • Geracao de evidencias auditaveis para o BACEN

/ipinfo

Identifica o pais a partir de IP ou coordenada.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
input_type
required
string (Input Type)

Tipo de entrada: 'ip' ou 'coordinate'

Ip (string) or Ip (null) (Ip)

Endereco IP

Latitude (number) or Latitude (null) (Latitude)

Latitude

Longitude (number) or Longitude (null) (Longitude)

Longitude

enrich
boolean (Enrich)
Default: true

Ativa retorno de VPN/proxy/TOR/datacenter

check_sanctions
boolean (Check Sanctions)
Default: true

Verifica listas de sancoes e paraisos fiscais

Responses

Request samples

curl "https://api.prismadata.io/v1/identity/ipinfo?input_type=valor" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__ipinfo__input_type": "ip",
  • "prismadata__ipinfo__input_ip": "185.220.101.42",
  • "prismadata__ipinfo__resolved_latitude": 52.52,
  • "prismadata__ipinfo__resolved_longitude": 13.405,
  • "prismadata__ipinfo__country_code": "DE",
  • "prismadata__ipinfo__country_name": "Germany",
  • "prismadata__ipinfo__continent": "Europe",
  • "prismadata__ipinfo__risk_level": "low",
  • "prismadata__ipinfo__is_sanctioned": false,
  • "prismadata__ipinfo__gafi_status": "not_listed",
  • "prismadata__ipinfo__ofac_status": "not_listed",
  • "prismadata__ipinfo__eu_status": "not_listed",
  • "prismadata__ipinfo__bacen_alert": false,
  • "prismadata__ipinfo__is_tax_haven_rfb": false,
  • "prismadata__ipinfo__is_tax_haven_eu": false,
  • "prismadata__ipinfo__is_vpn": true,
  • "prismadata__ipinfo__is_proxy": false,
  • "prismadata__ipinfo__is_tor_exit_node": true,
  • "prismadata__ipinfo__is_datacenter": true,
  • "prismadata__ipinfo__connection_type": "tor",
  • "prismadata__ipinfo__asn": 51167,
  • "prismadata__ipinfo__asn_org": "Contabo GmbH",
  • "prismadata__ipinfo__geoip_confidence": 0.95,
  • "prismadata__ipinfo__country_timezone": "Europe/Berlin",
  • "prismadata__ipinfo__country_utc_offset": "+01:00",
  • "prismadata__ipinfo__local_time": "2026-03-01T14:32:05+01:00",
  • "prismadata__ipinfo__is_business_hours": true,
  • "prismadata__ipinfo__query_id": "550e8400-e29b-41d4-a716-446655440000",
  • "prismadata__ipinfo__timestamp": "2026-03-01T13:32:05.123Z",
  • "prismadata__ipinfo__requester_ip": "203.0.113.42",
  • "prismadata__ipinfo__requester_razao_social": "Toro Investimentos S.A.",
  • "prismadata__ipinfo__requester_cnpj": "18.631.838/0001-46",
  • "prismadata__ipinfo__query_time_ms": 7,
  • "prismadata__ipinfo__signature_algorithm": "Ed25519",
  • "prismadata__ipinfo__signature_value": "base64_encoded_signature_here",
  • "prismadata__ipinfo__signature_key_id": "prismadata-signing-key-2026-01"
}

/batch/ipinfo

Identifica o pais para um lote de IPs ou coordenadas (max 1024).

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
input_type
required
string (Input Type)

Tipo de entrada: 'ip' ou 'coordinate'

enrich
boolean (Enrich)
Default: true

Ativa retorno de VPN/proxy/TOR/datacenter

check_sanctions
boolean (Check Sanctions)
Default: true

Verifica listas de sancoes e paraisos fiscais

Request Body schema: application/json
required
<= 1024 properties
additional property
object (BatchItem)

Item individual do lote.

Responses

Request samples

Content type
application/json
{
  • "property1": {
    },
  • "property2": {
    }
}

Response samples

Content type
application/json
null

Verificacao

Verificacao publica de assinaturas digitais Ed25519.

/ipinfo/verify

Verifica a assinatura digital de uma resposta da API.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
required
object (Signed Response)

Resposta completa com assinatura

Responses

Request samples

Content type
application/json
{
  • "signed_response": { }
}

Response samples

Content type
application/json
null

/ipinfo/signing-keys

Retorna chaves publicas disponiveis para verificacao.

Authorizations:
BearerAuthX-Apikeyapi_key

Responses

Request samples

curl "https://api.prismadata.io/v1/identity/ipinfo/signing-keys" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
null

Reports

Laudos e relatorios de consultas de compliance.

/ipinfo/reports

Listagem paginada de consultas com filtros.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
Date From (string) or Date From (null) (Date From)

Data inicio (ISO 8601)

Date To (string) or Date To (null) (Date To)

Data fim (ISO 8601)

Risk Level (string) or Risk Level (null) (Risk Level)

Filtro por nivel de risco

Country Code (string) or Country Code (null) (Country Code)

Filtro por pais (ISO 3166-1)

Is Vpn (boolean) or Is Vpn (null) (Is Vpn)

Filtro por VPN detectada

Is Sanctioned (boolean) or Is Sanctioned (null) (Is Sanctioned)

Filtro por sancao

page
integer (Page) >= 1
Default: 1

Pagina

page_size
integer (Page Size) [ 1 .. 200 ]
Default: 50

Itens por pagina

Responses

Request samples

curl "https://api.prismadata.io/v1/identity/ipinfo/reports" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
null

/ipinfo/report/{query_id}

Retorna laudo PDF auditavel de uma consulta.

Authorizations:
BearerAuthX-Apikeyapi_key
path Parameters
query_id
required
string (Query Id)

Responses

Request samples

curl "https://api.prismadata.io/v1/identity/ipinfo/report/{query_id}" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
null

/ipinfo/reports/download

Download em lote de laudos PDF em formato ZIP (max 100).

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
Date From (string) or Date From (null) (Date From)

Data inicio (ISO 8601)

Date To (string) or Date To (null) (Date To)

Data fim (ISO 8601)

Risk Level (string) or Risk Level (null) (Risk Level)

Filtro por nivel de risco

Country Code (string) or Country Code (null) (Country Code)

Filtro por pais (ISO 3166-1)

Is Vpn (boolean) or Is Vpn (null) (Is Vpn)

Filtro por VPN detectada

Is Sanctioned (boolean) or Is Sanctioned (null) (Is Sanctioned)

Filtro por sancao

Responses

Request samples

curl "https://api.prismadata.io/v1/identity/ipinfo/reports/download" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
null

Fronteiras

O dado de fronteiras indica se um ponto está localizado em uma faixa de fronteira e traz algumas informações desta fronteira, como proximidade da fronteira, qual é o país mais próximo e se a mancha urbana do município que o ponto se encontra está próximo da faixa de fronteira.

A faixa de fronteira, segundo o IBGE, é uma faixa de até 150 km de largura ao longo das fronteiras terrestres do Brasil, considerada importante para a defesa nacional. Essa área abrange 16,7% do território brasileiro.

Maiores informações podem ser encontradas na documentação de produto. Testes manuais com o fim de se compreender melhor o dado podem ser feitos aqui.

/batch/border

Busca as informações de fronteiras em lote. A cobrança desta api é feita em função do número de coordenadas contidas no lote.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
<= 1024 properties
property name*
additional property
Array of numbers (Coordinates) = 2 items

Encapsula as coordenadas geográficas

Responses

Request samples

Content type
application/json
{
  • "point1": [
    ],
  • "point2": [
    ]
}

Response samples

Content type
application/json
{
  • "1": {
    },
  • "2": {
    }
}

/border

Endpoint para consultar a proximidade do ponto às fronteiras brasileiras.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )
Example: lat=-25.52568655357868

Latitude do ponto de consulta.

lng
required
number (Lng) ( -180 .. 180 )
Example: lng=-54.59273323017718

Longitude do ponto de consulta.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/border?lat=-25.52568655357868&lng=-54.59273323017718" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__border__area_municipio_integrada_faixa_de_fronteira_km2": 609.19,
  • "prismadata__border__area_total_municipio_km2": 609.19,
  • "prismadata__border__distancia_geodesica_pais_mais_proximo_pt_km": 1.112,
  • "prismadata__border__distancia_geodesica_pais_mais_proximo_sede_municipio_km": 1.014,
  • "prismadata__border__distancia_geodesica_ponto_borda_faixa_de_fronteira_km": 0.757,
  • "prismadata__border__municipio_possui_cidade_gemea": true,
  • "prismadata__border__nome_municipio_de_fronteira": "Foz do Iguaçu",
  • "prismadata__border__pais_mais_proximo": "PARAGUAI",
  • "prismadata__border__pais_mais_proximo_pt": "PARAGUAI",
  • "prismadata__border__ponto_contido_na_faixa_de_fronteira": true,
  • "prismadata__border__porcentagem_area_municipio_faixa_de_fronteira": 100,
  • "prismadata__border__sede_municipio_dentro_da_faixa_de_fronteira": true
}

Favelas

Existem 3 entidades que compõem o dado de favelas: Favelas, complexos e ilhas.

As favelas propriamente ditas que são regiões que são classificadas desta forma pelo IBGE em função das características construtivas do domicílios contidos nesta região. Note que favelas, em conjunto, quando se encontram próximas, podem formar complexos de favelas.

Além disso, é possível a existência de regiões dentro de favelas ou complexos nas quais os aspectos construtivos dos domicílios não se enquadram dentro do conceito do IBGE para que um domicílio seja considerado de favela, contudo são regiões que estão cercadas por regiões de favela. Neste caso, denominou-se esta região de ilha, já que ela se encontra rodeada por favela apesar dela própria não ser uma região de favela. Frequentemente as ilhas, são regiões que contêm domicilios de conjuntos habitacionais.

Caso o ponto se encontre distante mais de 5000 metros de uma entidade valores vazios são retornados.

Maiores informações podem ser encontradas na documentação de produto. Testes manuais com o fim de se compreender melhor o dado podem ser feitos aqui.

/batch/slum

Busca as informações de favelas em lote. A cobrança desta api é feita em função do número de coordenadas contidas no lote.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
<= 1024 properties
property name*
additional property
Array of numbers (Coordinates) = 2 items

Encapsula as coordenadas geográficas

Responses

Request samples

Content type
application/json
{
  • "point1": [
    ],
  • "point2": [
    ]
}

Response samples

Content type
application/json
{
  • "prismadata__slum__complexo_area_m2": 1755169.882444958,
  • "prismadata__slum__complexo_distancia_centroid_m": 847.28,
  • "prismadata__slum__complexo_distancia_m": 132.96,
  • "prismadata__slum__complexo_dompp_total": 13901,
  • "prismadata__slum__complexo_hash_id": 6146791748692800000,
  • "prismadata__slum__complexo_municipio": "Belo Horizonte",
  • "prismadata__slum__complexo_perimetro_m": 10054.86267269001,
  • "prismadata__slum__complexo_total_favelas": 9,
  • "prismadata__slum__complexo_uf": "Minas Gerais",
  • "prismadata__slum__favela_area_m2": 114306.97,
  • "prismadata__slum__favela_distancia_centroid_m": 280.37,
  • "prismadata__slum__favela_distancia_m": 132.96,
  • "prismadata__slum__favela_dompp_total": 1394,
  • "prismadata__slum__favela_hash_id": 6476692552498676000,
  • "prismadata__slum__favela_municipio": "Belo Horizonte",
  • "prismadata__slum__favela_perimetro_m": 1992.69,
  • "prismadata__slum__favela_uf": "Minas Gerais",
  • "prismadata__slum__ilha_area_m2": 64746.69,
  • "prismadata__slum__ilha_distancia_centroid_m": 1527.42,
  • "prismadata__slum__ilha_distancia_m": 1369.38,
  • "prismadata__slum__ilha_hash_id": -3871855200304948700,
  • "prismadata__slum__ilha_perimetro_m": 1772.35,
  • "prismadata__slum__ilha_tipo_geom_contenedora": "COMPLEXO"
}

/slum

Endpoint para consultar a favela mais próxima a determinada coordenada geográfica.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )
Example: lat=-19.933284645466298

Latitude do ponto de origem.

lng
required
number (Lng) ( -180 .. 180 )
Example: lng=-43.9191946695413

Longitude do ponto de origem.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/slum?lat=-19.933284645466298&lng=-43.9191946695413" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__slum__complexo_area_m2": 1755169.882444958,
  • "prismadata__slum__complexo_distancia_centroid_m": 847.28,
  • "prismadata__slum__complexo_distancia_m": 132.96,
  • "prismadata__slum__complexo_dompp_total": 13901,
  • "prismadata__slum__complexo_hash_id": 6146791748692800000,
  • "prismadata__slum__complexo_municipio": "Belo Horizonte",
  • "prismadata__slum__complexo_perimetro_m": 10054.86267269001,
  • "prismadata__slum__complexo_total_favelas": 9,
  • "prismadata__slum__complexo_uf": "Minas Gerais",
  • "prismadata__slum__favela_area_m2": 114306.97,
  • "prismadata__slum__favela_distancia_centroid_m": 280.37,
  • "prismadata__slum__favela_distancia_m": 132.96,
  • "prismadata__slum__favela_dompp_total": 1394,
  • "prismadata__slum__favela_hash_id": 6476692552498676000,
  • "prismadata__slum__favela_municipio": "Belo Horizonte",
  • "prismadata__slum__favela_perimetro_m": 1992.69,
  • "prismadata__slum__favela_uf": "Minas Gerais",
  • "prismadata__slum__ilha_area_m2": 64746.69,
  • "prismadata__slum__ilha_distancia_centroid_m": 1527.42,
  • "prismadata__slum__ilha_distancia_m": 1369.38,
  • "prismadata__slum__ilha_hash_id": -3871855200304948700,
  • "prismadata__slum__ilha_perimetro_m": 1772.35,
  • "prismadata__slum__ilha_tipo_geom_contenedora": "COMPLEXO"
}

Geocoder

O Geocoder é o sistema responsável por realizar a conversão de informações de uma localização (textos) em uma coordenada geográfica. Assim, ele converte um endereço para uma latitude/longitude quando opera diretamente. Pode, também, realizar a geocodificação reversa, que consiste em converter uma coordenada geográfica (latitude/longitude) para um endereço.

Maiores informações podem ser encontradas na documentação de produto. Testes manuais com o fim de se compreender melhor o dado podem ser feitos aqui.

/geocoder

Endpoint para se obter a latitude e longitude de um endereço.

Há duas formas de se realizar a geocodificação:

  1. Fornecendo o endereço completo em uma única string (endereco_completo).
  2. Fornecendo os campos do endereço de forma individualizada.

Caso o endereço completo seja fornecido, ele é quebrado nos campos internamente e se os campos forém fornecidos também, estes têm preferência sobre os campos extraídos do endereço completo. Por isso, sugere-se que, se possível, a geocodificação seja feita pelos campos individualizados e não pelo endereço completo.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
Endereco Completo (string) or Endereco Completo (null) (Endereco Completo)

Endereço completo a ser a ser geocodificado. Não é necessário informá-lo caso os campos que compõem o endereço sejam fornecidos separadamente

(Cep (Cep (string) or Cep (integer))) or Cep (null) (Cep)
Example: cep=30130-165

CEP do endereço a ser geocodificado.

(Numero (Numero (string) or Numero (integer))) or Numero (null) (Numero)

Numero do endereço a ser geocodificado

Tipo Logradouro (string) or Tipo Logradouro (null) (Tipo Logradouro)

Tipo do logradouro a ser geocodificado.Ex: Rua, Avenida, etc.

Titulo Logradouro (string) or Titulo Logradouro (null) (Titulo Logradouro)

Ex: Coronel, Senhor, Senhora, Professor, São, etc

Logradouro (string) or Logradouro (null) (Logradouro)

O logradouro a ser geocodificado

Localidade (string) or Localidade (null) (Localidade)

Localidade do endereço. Frequentemente a localidade é o Bairro do endereço

Municipio (string) or Municipio (null) (Municipio)

Município do endereço

Estado (string) or Estado (null) (Estado)

Unidade Federativa ou Estado do endereço

Responses

Request samples

curl "https://api.prismadata.io/v1/location/geocoder?cep=30130-165" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__geocoder__cep": "30130-165",
  • "prismadata__geocoder__classificao_qualidade_geocodificacao": "MEDIA",
  • "prismadata__geocoder__endereco_completo": "RUA ALAGOAS, 686 - SAVASSI, BELO HORIZONTE - MG, 30130-165",
  • "prismadata__geocoder__latitude": -19.93292236328125,
  • "prismadata__geocoder__localidade": "SAVASSI",
  • "prismadata__geocoder__logradouro": "RUA ALAGOAS",
  • "prismadata__geocoder__longitude": -43.935611724853516,
  • "prismadata__geocoder__municipio": "BELO HORIZONTE",
  • "prismadata__geocoder__numero": 686,
  • "prismadata__geocoder__score_qualidade_geocodificacao": 75,
  • "prismadata__geocoder__uf": "MG"
}

/reverse_geocoder

Realiza a geocodificação reversa de um ponto, isto é, retorna o endereço de uma latitude e longitude. Se não for encontrado um endereço próximo ao ponto, retorna OUTPUT vazio.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )

Latitude do ponto que se deseja realizar a geocodificação reversa

lng
required
number (Lng) ( -180 .. 180 )

Longitude do ponto que se deseja realizar a geocodificação reversa

Responses

Request samples

curl "https://api.prismadata.io/v1/location/reverse_geocoder?lat=-25.5&lng=-25.5" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__reverse_geocoder__cep": "22420-008",
  • "prismadata__reverse_geocoder__distancia_m": 7.02674626,
  • "prismadata__reverse_geocoder__endereco_completo": "AVENIDA VIEIRA SOUTO, 516 - IPANEMA, RIO DE JANEIRO - RJ, 22420-008",
  • "prismadata__reverse_geocoder__latitude_endereco": -22.986234664916992,
  • "prismadata__reverse_geocoder__latitude_input": -22.98627572993613,
  • "prismadata__reverse_geocoder__localidade": "IPANEMA",
  • "prismadata__reverse_geocoder__logradouro": "AVENIDA VIEIRA SOUTO",
  • "prismadata__reverse_geocoder__longitude_endereco": -43.2088508605957,
  • "prismadata__reverse_geocoder__longitude_input": -43.208798617447684,
  • "prismadata__reverse_geocoder__municipio": "RIO DE JANEIRO",
  • "prismadata__reverse_geocoder__numero": 516,
  • "prismadata__reverse_geocoder__uf": "RJ"
}

/geocoder/batch

Endpoint para geocodificacao em batch.

Recebe um dict de ate 512 enderecos indexados por chaves definidas pelo cliente e retorna as coordenadas de cada um, preservando as mesmas chaves na resposta.

Authorizations:
BearerAuthX-Apikeyapi_key

Responses

Request samples

curl "https://api.prismadata.io/v1/location/geocoder/batch" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "1": {
    },
  • "2": {
    }
}

/reverse_geocoder/batch

Endpoint para geocodificacao reversa em batch.

Recebe um dict de ate 1024 coordenadas indexadas por chaves definidas pelo cliente e retorna o endereco mais proximo de cada uma, preservando as mesmas chaves na resposta.

Authorizations:
BearerAuthX-Apikeyapi_key

Responses

Request samples

curl "https://api.prismadata.io/v1/location/reverse_geocoder/batch" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "1": {
    },
  • "2": {
    }
}

Renda

A API de renda fornece estimativas da renda na região próxima de determinada coordenada geográfica. Veja que esta informação de renda não se refere à uma pessoa específica, mas sim a uma região em que ela mora ou se encontra em determinado momento.

Se a coordenada geográfica de entrada (latitude/longitude) não for localizada no Brasil, valores nulos serão retornados.

Maiores informações podem ser encontradas na documentação de produto:

  1. Renda Pessoal Estática
  2. Renda Pessoal Dinâmica (PDF)

Testes manuais com o fim de se compreender melhor o dado podem ser feitos aqui.

personal_income_static

Endpoint para se consultar o endereço mais próximo à uma coordenada geográfica (latitude/longitude). Caso a coordenada não possua nenhum endereço próximo à vizinhança de 100 metros, valores nulos são retornados.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )
Example: lat=-19.932378368680315

Latitude do ponto a ser estudado.

lng
required
number (Lng) ( -180 .. 180 )
Example: lng=-43.9351245162891

Longitude do ponto a ser estudado.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/query_personal_income_static?lat=-19.932378368680315&lng=-43.9351245162891" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__personal_income_static__faixa_sm_min": 5,
  • "prismadata__personal_income_static__faixa_sm_max": 10,
  • "prismadata__personal_income_static__percentil_br": 98,
  • "prismadata__personal_income_static__percentil_mun": 90,
  • "prismadata__personal_income_static__percentil_uf": 99
}

personal_income_pdf

Endpoint para se consultar a renda na coordenada geográfica. As informações retornadas são gerados por um modelo que é uma função de densidade de probabilidade (Probability Density Function - PDF). Opcionalmente, pode-se definir um perfil detalhado do indivíduo que se deseja estimar a renda.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )
Example: lat=-19.932378368680315

Latitude do ponto de origem.

lng
required
number (Lng) ( -180 .. 180 )
Example: lng=-43.9351245162891

Longitude do ponto de origem

Genero (string) or Gender (null) (Gender)
Example: gender=M

Gênero da pessoa que se deseja analisar a renda. [M, F, male, female]

Age (number) or Age (null) (Age)
Example: age=50

Idade da pessoa que se deseja analisar a renda

AtributosBooleanos (string) or Is Responsible (null) (Is Responsible)
Example: is_responsible=false

Indicador se as pessoas que se deseja analisar a renda são responsáveis pelo domicílio

Income Compared (number) or Income Compared (null) (Income Compared)
Example: income_compared=10000

Renda a ser comparada com a renda da região.

Date Income (string) or Date Income (null) (Date Income)
Example: date_income=2025-01-25

Data a ser consultada a renda no formato YYYY-MM-DD. Somente datas após 2022-01-01 são válidas.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/query_personal_income_pdf?lat=-19.932378368680315&lng=-43.9351245162891&gender=M&age=50&is_responsible=false&income_compared=10000&date_income=2025-01-25" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__personal_income_pdf__qtde_pessoas": 475,
  • "prismadata__personal_income_pdf__qtde_pessoas_sem_renda": 61,
  • "prismadata__personal_income_pdf__renda_comparada_cdf": 69.58161423037396,
  • "prismadata__personal_income_pdf__renda_comparada_pdf": 0.00004347742504677703,
  • "prismadata__personal_income_pdf__renda_comparada_z_score": 0.5124048241824011,
  • "prismadata__personal_income_pdf__renda_media_pessoas": 7977.094543374305,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_desvio_padrao": 8734.869682287694,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_maxima": 61487.85959498082,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_media": 9152.463546142017,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_mediana": 6781.762582549223,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_minima": 697.1449013796515,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_primeiro_quartil": 3582.7074159885547,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_qtde": 414,
  • "prismadata__personal_income_pdf__renda_pessoas_com_renda_terceiro_quartil": 11412.45045466984,
  • "prismadata__personal_income_pdf__renda_total": 3789119.908102795,
  • "prismadata__personal_income_pdf__renda_total_m2": 95.5377576127026
}

/batch/personal_income_static

Endpoint batch para consulta de renda estática. Recebe múltiplos pontos e retorna percentis e faixa salarial para cada um.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
<= 1024 properties
property name*
additional property
Array of numbers (Coordinates) = 2 items

Encapsula as coordenadas geográficas

Responses

Request samples

Content type
application/json
{
  • "point1": [
    ],
  • "point2": [
    ]
}

Response samples

Content type
application/json
{
  • "SUCESSO": true,
  • "EXCEPTION": "string",
  • "OUTPUT": {
    }
}

/batch/personal_income_pdf

Endpoint batch para consulta de renda via PDF (Probability Density Function). Recebe múltiplos pontos, cada um com seus próprios parâmetros demográficos.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
additional property
PdfPointInput (object) or Array of CoordPair (numbers)

Responses

Request samples

Content type
application/json
{
  • "property1": {
    },
  • "property2": {
    }
}

Response samples

Content type
application/json
{
  • "SUCESSO": true,
  • "EXCEPTION": "string",
  • "OUTPUT": {
    }
}

Validação de Endereços

O validador de endereços consiste em validar um ou mais endereços com um ou mais sinais de localização (frequentemente obtidos por GPS). Os endereços são comparados com os sinais indicando a concordância ou não da localização do(s) sinal(is) com o(s) endereço(s).

Maiores informações podem ser encontradas na documentação de produto. Testes manuais com o fim de se compreender melhor o dado podem ser feitos aqui.

/addr_validation/compare_address

Realiza a comparação de um endereço com determinada coordenada geográfica para avaliar a concordância (proximidade) entre eles.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )

Latitude do ponto que se deseja realizar a geocodificação reversa

lng
required
number (Lng) ( -180 .. 180 )

Longitude do ponto que se deseja realizar a geocodificação reversa

Endereco Completo (string) or Endereco Completo (null) (Endereco Completo)

Endereço completo a ser geocodificado. Não é necessário informá-lo caso os campos que compõem o endereço sejam fornecidos separadamente

(Cep (Cep (string) or Cep (integer))) or Cep (null) (Cep)
Example: cep=30130-165

CEP do endereço a ser geocodificado.

(Numero (Numero (string) or Numero (integer))) or Numero (null) (Numero)

Numero do endereço a ser geocodificado

Tipo Logradouro (string) or Tipo Logradouro (null) (Tipo Logradouro)

Tipo do logradouro a ser geocodificado.Ex: Rua, Avenida, etc.

Titulo Logradouro (string) or Titulo Logradouro (null) (Titulo Logradouro)

Ex: Coronel, Senhor, Senhora, Professor, São, etc

Logradouro (string) or Logradouro (null) (Logradouro)

O logradouro a ser geocodificado

Localidade (string) or Localidade (null) (Localidade)

Localidade do endereço. Frequentemente a localidade é o bairro ou região do endereço.

Municipio (string) or Municipio (null) (Municipio)

Município do endereço.

Estado (string) or Estado (null) (Estado)

Unidade Federativa ou Estado do endereço.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/compare_address?lat=-25.5&lng=-25.5&cep=30130-165" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__valida_endereco_compare__classificacao_campos_endereco": "MUITO_PROXIMO",
  • "prismadata__valida_endereco_compare__classificacao_cep": "PROXIMO",
  • "prismadata__valida_endereco_compare__classificacao_distancia_geodesica": "IGUAL",
  • "prismadata__valida_endereco_compare__classificacao_final": "MUITO_PROXIMO",
  • "prismadata__valida_endereco_compare__classificacao_localidade": "IGUAL",
  • "prismadata__valida_endereco_compare__classificacao_logradouro": "MUITO_DISTANTE",
  • "prismadata__valida_endereco_compare__classificacao_municipio": "IGUAL",
  • "prismadata__valida_endereco_compare__classificacao_numero": "PROXIMO",
  • "prismadata__valida_endereco_compare__classificacao_uf": "IGUAL",
  • "prismadata__valida_endereco_compare__distancia_geodesica_m": 62.926660837194,
  • "prismadata__valida_endereco_compare__score_campos_endereco": 88.29072803942488,
  • "prismadata__valida_endereco_compare__score_cep": 46.24072803942488,
  • "prismadata__valida_endereco_compare__score_distancia_geodescia": 100,
  • "prismadata__valida_endereco_compare__score_final": 94.14536401971245,
  • "prismadata__valida_endereco_compare__score_localidade": 5,
  • "prismadata__valida_endereco_compare__score_logradouro": 0.6,
  • "prismadata__valida_endereco_compare__score_municipio": 20,
  • "prismadata__valida_endereco_compare__score_numero": 6.45,
  • "prismadata__valida_endereco_compare__score_uf": 10,
  • "prismadata__valida_endereco_compare__sucesso_geocodificacao_direta": "True",
  • "prismadata__valida_endereco_compare__sucesso_geocodificacao_reversa": "True"
}

/addr_validation/validate_location_historic

Valida uma lista de endereços com base no histórico de localização de um dispositivo. A validação indica se cada endereço da lista possui alguma relação com o dispositivo, como "MORADIA", "TRABALHO", "ATIPICO", etc.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
required
Array of items (Locations) [ items = 3 items ]

Lista de tuplas contendo sinais de localização.

enderecos
required
Array of strings (Enderecos) <= 5 items

Lista de endereços a serem validados

Responses

Request samples

Content type
application/json
{
  • "locations": [
    ],
  • "enderecos": [
    ]
}

Response samples

Content type
application/json
{
  • "items": [
    ]
}

/addr_validation/cluster_location_historic

Realiza uma clusterização espacial dos pontos para identificar locais em que os sinais de localização são frequentes ou prolongados. Além disso, com as informações de timestamp classifica em diferentes graus, qual a afinidade do cluster com as seguintes classificações para o centróide do cluster:

  1. MORADIA
  2. TRABALHO
  3. VISITA_FREQUENTE
  4. VISITA_EVENTUAL
Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
Array
[0]
number
[1]
number
[2]
number

Responses

Request samples

Content type
application/json
[
  • [
    ]
]

Response samples

Content type
application/json
{
  • "items": [
    ]
}

InfoSC

O dado de informações do setor censitário retorna, a partir de uma coordenada geográfica, as informações básicas acerca da proximidade do ponto.

Maiores informações podem ser encontradas na documentação de produto. Testes manuais com o fim de se compreender melhor o dado podem ser feitos aqui.

/infosc

Busca as informações da região que o ponto se encontra

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )

Latitude do ponto de consulta

lng
required
number (Lng) ( -180 .. 180 )

Longitude do ponto de consulta

Responses

Request samples

curl "https://api.prismadata.io/v1/location/query?lat=-25.5&lng=-25.5" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__infosc__area_km2": 0.140840328651949,
  • "prismadata__infosc__municipio": "Ribeirão Pires",
  • "prismadata__infosc__regiao": "Sudeste",
  • "prismadata__infosc__situacao": "Urbana",
  • "prismadata__infosc__tipo_sc": "NAO_ESPECIAL",
  • "prismadata__infosc__tipo_situacao": "AREA_URBANA_ALTA_DENSIDADE",
  • "prismadata__infosc__uf": "São Paulo"
}

/batch/infosc

Busca as informações dos setores censitários em lote. A cobrança desta api é feita em função do número de coordenadas contidas no lote.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
<= 1024 properties
property name*
additional property
Array of numbers (Coordinates) = 2 items

Encapsula as coordenadas geográficas

Responses

Request samples

Content type
application/json
{
  • "point1": [
    ],
  • "point2": [
    ]
}

Response samples

Content type
application/json
{
  • "1": {
    },
  • "2": {
    }
}

Prisões

Os dados do sistema penitenciário avalia a proximidade de determinada coordenada geográfica à um presídio do sistema penitenciário brasileiro. Além da indicação de proximidade do sinal de localização à um presídio, também são fornecidas informações que indicam o porte do presídio e a quantidade de estelionatários cumprindo pena no local.

Maiores informações podem ser encontradas na documentação de produto. Testes manuais com o fim de se compreender melhor o dado podem ser feitos aqui.

/batch/prison

Busca as informações de proximidade a presídios em lote. A cobrança desta api é feita em função do número de coordenadas contidas no lote.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
<= 1024 properties
property name*
additional property
Array of numbers (Coordinates) = 2 items

Encapsula as coordenadas geográficas

Responses

Request samples

Content type
application/json
{
  • "point1": [
    ],
  • "point2": [
    ]
}

Response samples

Content type
application/json
{
  • "1": {
    },
  • "2": {
    }
}

/prison

Endpoint para consultar a proximidade do ponto ao presídio mais próximo do sistema penitenciário brasileiro.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )
Example: lat=-25.52568655357868

Latitude do ponto de consulta.

lng
required
number (Lng) ( -180 .. 180 )
Example: lng=-54.59273323017718

Longitude do ponto de consulta.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/prison?lat=-25.52568655357868&lng=-54.59273323017718" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__prison__ambito": "ESTADUAL",
  • "prismadata__prison__area_m2": 13732.882376760244,
  • "prismadata__prison__distancia_borda_m": 1010.79,
  • "prismadata__prison__distancia_centroide_m": 1076.73,
  • "prismadata__prison__indice_lotacao_feminino": 0,
  • "prismadata__prison__indice_lotacao_masculino": 2.0308641975308643,
  • "prismadata__prison__indice_lotacao_total": 0.49240121580547114,
  • "prismadata__prison__municipio": "Ponta Porã",
  • "prismadata__prison__nome_estabelecimento": "Unidade Penal \"Ricardo Brandão\"",
  • "prismadata__prison__percentual_estelionato_feminino": 0,
  • "prismadata__prison__percentual_estelionato_masculino": 0.001519756838905775,
  • "prismadata__prison__percentual_estelionato_total": 0.001519756838905775,
  • "prismadata__prison__perimetro_m": 473.57341193471495,
  • "prismadata__prison__ponto_dentro_presidio": false,
  • "prismadata__prison__pop_feminino_total": 0,
  • "prismadata__prison__pop_masculino_total": 658,
  • "prismadata__prison__tipo_estabelecimento": "PRESOS_PROVISORIOS",
  • "prismadata__prison__total_terceirizacoes": 5,
  • "prismadata__prison__uf": "MS"
}

Gateway Agregador

Endpoints do API Gateway (KrakenD) que agregam múltiplas APIs de localização em uma única chamada. Permite consultar informações de favelas, renda, fronteiras, presídios e setores censitários simultaneamente.

O agregador é útil quando você precisa de múltiplas informações sobre uma mesma coordenada geográfica, reduzindo o número de requisições necessárias.

/aggregator

Endpoint que agrega múltiplas APIs de localização em uma única chamada.

Habilite os dados desejados através dos parâmetros booleanos:

  • slum=true: retorna informações de favelas
  • infosc=true: retorna informações do setor censitário
  • prison=true: retorna informações de presídios
  • border=true: retorna informações de fronteiras
  • personal_income_static=true: retorna renda estática
  • personal_income_pdf=true: retorna renda dinâmica (PDF)

A resposta contém apenas os campos dos serviços habilitados.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat) ( -90 .. 90 )
Example: lat=-19.932378368680315

Latitude do ponto de consulta.

lng
required
number (Lng) ( -180 .. 180 )
Example: lng=-43.9351245162891

Longitude do ponto de consulta.

slum
boolean (Slum)
Default: false

Habilita retorno de informações de favelas (prismadata__slum__*).

infosc
boolean (InfoSC)
Default: false

Habilita retorno de informações do setor censitário (prismadata__infosc__*).

prison
boolean (Prison)
Default: false

Habilita retorno de informações de presídios (prismadata__prison__*).

border
boolean (Border)
Default: false

Habilita retorno de informações de fronteiras (prismadata__border__*).

personal_income_static
boolean (Personal Income Static)
Default: false

Habilita retorno de renda estática (prismadata__personal_income_static__*).

personal_income_pdf
boolean (Personal Income PDF)
Default: false

Habilita retorno de renda dinâmica (prismadata__personal_income_pdf__*).

Date Income (string) or Date Income (null) (Date Income)
Example: date_income=2025-01-25

Data para consulta de renda PDF (YYYY-MM-DD). Requer personal_income_pdf=true.

Gender (string) or Gender (null) (Gender)
Example: gender=M

Gênero para filtro de renda PDF (M ou F). Requer personal_income_pdf=true.

Age (number) or Age (null) (Age)
Example: age=50

Idade para filtro de renda PDF (15-90). Requer personal_income_pdf=true.

Is Responsible (string) or Is Responsible (null) (Is Responsible)

Indica se é responsável pelo domicílio. Requer personal_income_pdf=true.

Income Compared (number) or Income Compared (null) (Income Compared)
Example: income_compared=10000

Renda a ser comparada com a renda da região. Requer personal_income_pdf=true.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/aggregator?lat=-19.932378368680315&lng=-43.9351245162891&date_income=2025-01-25&gender=M&age=50&income_compared=10000" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__slum__favela_distancia_m": 132.96,
  • "prismadata__slum__favela_municipio": "Belo Horizonte",
  • "prismadata__infosc__municipio": "Belo Horizonte",
  • "prismadata__infosc__situacao": "Urbana",
  • "prismadata__personal_income_static__faixa_sm_min": 5,
  • "prismadata__personal_income_static__faixa_sm_max": 10,
  • "prismadata__personal_income_static__percentil_br": 98
}

/batch/aggregator

Endpoint batch que agrega múltiplas APIs de localização para vários pontos em uma única chamada.

Envie um JSON com pontos no formato {"id": [lat, lng]} e habilite os dados desejados via query parameters:

  • slum=true: retorna informações de favelas
  • infosc=true: retorna informações do setor censitário
  • prison=true: retorna informações de presídios
  • border=true: retorna informações de fronteiras
  • personal_income_static=true: retorna renda estática
  • personal_income_pdf=true: retorna renda dinâmica (PDF)

Quando personal_income_pdf=true, os pontos podem opcionalmente usar o formato de dicionário com parâmetros demográficos individuais: {"id": {"lat": -23.55, "lng": -46.63, "gender": "M", "age": 35}}. Pontos no formato [lat, lng] também são aceitos (sem filtros demográficos). Os demais serviços normalizam automaticamente ambos os formatos para coordenadas.

A resposta contém um objeto com os mesmos IDs do request, cada um com os campos prefixados por prismadata__<categoria>__.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
slum
boolean
Default: false

Habilita retorno de informações de favelas (prismadata__slum__*).

infosc
boolean
Default: false

Habilita retorno de informações do setor censitário (prismadata__infosc__*).

prison
boolean
Default: false

Habilita retorno de informações de presídios (prismadata__prison__*).

border
boolean
Default: false

Habilita retorno de informações de fronteiras (prismadata__border__*).

personal_income_static
boolean
Default: false

Habilita retorno de renda estática (prismadata__personal_income_static__*).

personal_income_pdf
boolean
Default: false

Habilita retorno de renda dinâmica PDF (prismadata__personal_income_pdf__*). Quando habilitado, os pontos podem usar formato de dicionário com parâmetros demográficos individuais (lat, lng, date_income, gender, age, is_responsible, income_compared).

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "ponto_1": [
    ],
  • "ponto_2": [
    ]
}

Response samples

Content type
application/json
{
  • "ponto_1": {
    },
  • "ponto_2": {
    }
}

/geocoder/aggregator

Endpoint que primeiro geocodifica um endereço e depois agrega múltiplas APIs de localização usando as coordenadas obtidas.

Útil quando você tem um endereço (não coordenadas) e precisa de múltiplas informações sobre essa localização.

Habilite os dados desejados através dos parâmetros booleanos (igual ao /aggregator).

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
Endereco Completo (string) or Endereco Completo (null) (Endereco Completo)

Endereço completo a ser geocodificado.

(Cep (Cep (string) or Cep (integer))) or Cep (null) (Cep)
Example: cep=30130-165

CEP do endereço.

(Numero (Numero (string) or Numero (integer))) or Numero (null) (Numero)

Número do endereço.

Tipo Logradouro (string) or Tipo Logradouro (null) (Tipo Logradouro)

Tipo do logradouro (ex: Rua, Avenida).

Titulo Logradouro (string) or Titulo Logradouro (null) (Titulo Logradouro)

Título do logradouro (ex: Coronel, Professor).

Logradouro (string) or Logradouro (null) (Logradouro)

Nome do logradouro.

Localidade (string) or Localidade (null) (Localidade)

Localidade (bairro) do endereço.

Municipio (string) or Municipio (null) (Municipio)

Município do endereço.

Estado (string) or Estado (null) (Estado)

Estado do endereço.

slum
boolean
Default: false

Habilita retorno de informações de favelas.

infosc
boolean
Default: false

Habilita retorno de informações do setor censitário.

prison
boolean
Default: false

Habilita retorno de informações de presídios.

border
boolean
Default: false

Habilita retorno de informações de fronteiras.

Responses

Request samples

curl "https://api.prismadata.io/v1/location/geocoder/aggregator?cep=30130-165" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__geocoder__latitude": -19.93292236328125,
  • "prismadata__geocoder__longitude": -43.935611724853516,
  • "prismadata__geocoder__municipio": "BELO HORIZONTE",
  • "prismadata__slum__favela_distancia_m": 132.96,
  • "prismadata__infosc__municipio": "Belo Horizonte"
}

/batch/geocoder/aggregator

Endpoint batch que primeiro geocodifica endereços e depois agrega múltiplas APIs de localização usando as coordenadas obtidas.

Combina o /geocoder/aggregator com processamento em lote, permitindo enviar até 1024 endereços de uma vez.

Envie um JSON com endereços no formato {"id": {"endereco_completo": "..."}} e habilite os dados desejados via query parameters:

  • slum=true: retorna informações de favelas
  • infosc=true: retorna informações do setor censitário
  • prison=true: retorna informações de presídios
  • border=true: retorna informações de fronteiras
  • personal_income_static=true: retorna renda estática
  • personal_income_pdf=true: retorna renda dinâmica (PDF)

A resposta contém um objeto com os mesmos IDs do request, cada um com campos prismadata__geocoder__* (resultado da geocodificação) + campos das APIs habilitadas prefixados por prismadata__<categoria>__.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
slum
boolean
Default: false

Habilita retorno de informações de favelas (prismadata__slum__*).

infosc
boolean
Default: false

Habilita retorno de informações do setor censitário (prismadata__infosc__*).

prison
boolean
Default: false

Habilita retorno de informações de presídios (prismadata__prison__*).

border
boolean
Default: false

Habilita retorno de informações de fronteiras (prismadata__border__*).

personal_income_static
boolean
Default: false

Habilita retorno de renda estática (prismadata__personal_income_static__*).

personal_income_pdf
boolean
Default: false

Habilita retorno de renda dinâmica PDF (prismadata__personal_income_pdf__*).

Request Body schema: application/json
required
additional property
object

Responses

Request samples

Content type
application/json
{
  • "ponto_1": {
    },
  • "ponto_2": {
    }
}

Response samples

Content type
application/json
{
  • "ponto_1": {
    },
  • "ponto_2": {
    }
}

Rotas

Calculo de rotas entre pontos (simples e batch)

/route

Calcula rota entre pontos.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
points
required
Array of strings (Points) >= 2 items

Pontos no formato 'lat,lon' (minimo 2)

profile
string (Profile)
Default: "car"
Enum: "car" "foot" "bike"

Perfil de roteamento

Responses

Request samples

curl "https://api.prismadata.io/v1/routing/route?points=valor" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__routing_route__geometria": "LINESTRING (-43.9378 -19.9191, -43.94 -19.93, -43.9477 -19.9498)",
  • "prismadata__routing_route__distancia_m": 1500.5,
  • "prismadata__routing_route__subida_m": 50,
  • "prismadata__routing_route__descida_m": 30,
  • "prismadata__routing_route__tempo_s": 180
}

/batch/route

Calcula multiplas rotas em batch.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
required
Array of objects (Items) [ 1 .. 16 ] items

Lista de rotas a calcular

profile
string (Profile)
Default: "car"
Enum: "car" "foot" "bike"

Perfil de roteamento

Responses

Request samples

Content type
application/json
{
  • "items": [
    ],
  • "profile": "car"
}

Response samples

Content type
application/json
{
  • "TOTAL": 2,
  • "SUCESSOS": 2,
  • "FALHAS": 0,
  • "RESULTADOS": [
    ]
}

Isocronas

Calculo de areas de alcance (isocronas simples e batch)

/isochrone

Calcula isocrona a partir de um ponto.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
lat
required
number (Lat)

Latitude do ponto central

lng
required
number (Lng)

Longitude do ponto central

time_limit
integer (Time Limit) [ 60 .. 7200 ]
Default: 600

Limite de tempo em segundos

profile
string (Profile)
Default: "car"
Enum: "car" "foot" "bike"

Perfil de roteamento

sentido
string (Sentido)
Default: "SAINDO"
Enum: "INDO" "SAINDO"

SAINDO (do ponto) ou INDO (para o ponto)

Responses

Request samples

curl "https://api.prismadata.io/v1/routing/isochrone?lat=-25.5&lng=-25.5" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__routing_isochrone__geometria": "POLYGON ((-43.9451043 -19.9496498, -43.94461115 -19.9496419, -43.94442885 -19.9491917, -43.9446328 -19.94891865, -43.945189150000004 -19.948811399999997, -43.945164500000004 -19.94856045, -43.94541065 -19.94774005, -43.946264299999996 -19.9471244, -43.946252900000005 -19.9469946, -43.947168649999995 -19.946969350000003, -43.94784435 -19.946944950000002, -43.948170399999995 -19.94692055, -43.9484147 -19.94660355, -43.94901205 -19.946596, -43.94911175 -19.94653495, -43.9491483 -19.94645745, -43.949202 -19.94647325, -43.9495532 -19.94705915, -43.9494535 -19.9471202, -43.949256649999995 -19.9474569, -43.94910625 -19.9476669, -43.949082950000005 -19.94770545, -43.9488786 -19.94805365, -43.9486399 -19.9484125, -43.9490493 -19.9490143, -43.9492774 -19.949322950000003, -43.9491091 -19.949637250000002, -43.94933965 -19.949893, -43.94933755 -19.95043145, -43.9491304 -19.95082245, -43.9490105 -19.951194450000003, -43.94945225 -19.9518588, -43.9491771 -19.9522937, -43.94897625 -19.9526379, -43.94911385 -19.9527755, -43.9491419 -19.95280355, -43.94933265 -19.9529459, -43.94894265 -19.95314595, -43.94890655 -19.9531764, -43.9488425 -19.953222150000002, -43.948709699999995 -19.953293000000002, -43.948685049999995 -19.95322065, -43.9484217 -19.953190900000003, -43.948363400000005 -19.95307105, -43.9482972 -19.95292135, -43.948255450000005 -19.9528635, -43.9480538 -19.9525668, -43.94752 -19.95277285, -43.9466847 -19.9522477, -43.94632905 -19.9518918, -43.945943150000005 -19.9518414, -43.945677849999996 -19.9518755, -43.945598399999994 -19.95167915, -43.94566365 -19.9513085, -43.9456223 -19.95131655, -43.94577495 -19.9510953, -43.945816300000004 -19.95108725, -43.94555630000001 -19.9507194, -43.94548195 -19.95070785, -43.94540845 -19.950728599999998, -43.9449527 -19.9508106, -43.9448027 -19.9506266, -43.944881800000005 -19.950203549999998, -43.94537495 -19.950211449999998, -43.9457438 -19.9499237, -43.94566065 -19.949542549999997, -43.9451043 -19.9496498))",
  • "prismadata__routing_isochrone__limite_tempo_s": 300,
  • "prismadata__routing_isochrone__perfil": "foot",
  • "prismadata__routing_isochrone__sentido": "SAINDO",
  • "prismadata__routing_isochrone__area_m2": 248412
}

/batch/isochrone

Calcula multiplas isocronas em batch.

Authorizations:
BearerAuthX-Apikeyapi_key
Request Body schema: application/json
required
required
Array of objects (Items) [ 1 .. 16 ] items

Lista de isocronas a calcular

profile
string (Profile)
Default: "car"
Enum: "car" "foot" "bike"

Perfil de roteamento

sentido
string (Sentido)
Default: "SAINDO"
Enum: "INDO" "SAINDO"

SAINDO (do ponto) ou INDO (para o ponto)

Responses

Request samples

Content type
application/json
{
  • "items": [
    ],
  • "profile": "car",
  • "sentido": "INDO"
}

Response samples

Content type
application/json
{
  • "TOTAL": 2,
  • "SUCESSOS": 2,
  • "FALHAS": 0,
  • "RESULTADOS": [
    ]
}

Ofício Requisitório

A API de Oficios Requisitorios permite consultar informacoes sobre precatorios e RPVs (Requisicoes de Pequeno Valor) vinculados a credores identificados por CPF ou CNPJ.

A consulta pode ser feita por identificador do credor (CPF/CNPJ) ou por nome do credor (busca por similaridade utilizando trigramas).

Dois endpoints estao disponiveis:

  • Consulta de credito: retorna um resumo consolidado dos creditos do credor (quantidade e valor estimado de precatorios e RPVs).
  • Detalha credito: retorna a lista completa de oficios requisitorios com informacoes detalhadas de cada credito.

/consulta_credito

Retorna um resumo consolidado dos creditos (precatorios e RPVs) de determinado credor, incluindo quantidades e valores estimados atualizados.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
Id Credor (string) or Id Credor (null) (Id Credor)

CPF ou CNPJ do credor que se deseja consultar

Nome Credor (string) or Nome Credor (null) (Nome Credor)

Nome do credor que se deseja consultar os creditos

Responses

Request samples

curl "https://api.prismadata.io/v1/credit/precatorio_rpv/consulta_credito" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "prismadata__precatorio_rpv__id_credor": 24880102865,
  • "prismadata__precatorio_rpv__nome_credor": "Geraldo Soares de Oliveira Junior",
  • "prismadata__precatorio_rpv__tipo_id_credor": "CPF",
  • "prismadata__precatorio_rpv__quantidade_creditos_precatorio": 4,
  • "prismadata__precatorio_rpv__valor_estimado_creditos_precatorio": 177865.15,
  • "prismadata__precatorio_rpv__quantidade_creditos_rpv": 0,
  • "prismadata__precatorio_rpv__valor_estimado_creditos_rpv": 0
}

/detalha_credito

Retorna a lista completa de oficios requisitorios com informacoes detalhadas de cada credito, incluindo numeros de processo, tribunal, valores e datas de expedicao.

Authorizations:
BearerAuthX-Apikeyapi_key
query Parameters
Id Credor (string) or Id Credor (null) (Id Credor)

CPF ou CNPJ do credor que se deseja consultar

Nome Credor (string) or Nome Credor (null) (Nome Credor)

Nome do credor que se deseja consultar os creditos

Responses

Request samples

curl "https://api.prismadata.io/v1/credit/precatorio_rpv/detalha_credito" \
  -H "X-Apikey: ak_xxxxxxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "items": [
    ]
}