API de integração
Consulta do cadastro territorial multifinalitário por sistemas da prefeitura, como o tributário (IPTU): lotes, unidades imobiliárias, titulares, transferências e o registro de tudo o que mudou. A API é somente leitura; as alterações continuam sendo feitas no geoportal, com auditoria.
Visão geral
- Endereço base:
https://geometodo.tech/api/v1/{cidade}, onde{cidade}é o identificador do município no geoportal (ex.:araguainha). - Somente HTTPS. Respostas em JSON (UTF-8).
- Inscrições como no cadastro municipal (ex.: lote
01.002.0001, unidade01.002.0001.001). - Geometrias em SIRGAS 2000 geográfico (EPSG:4674), em GeoJSON ou WKT, quando pedidas.
curl -H "Authorization: Bearer $CHAVE" \
"https://geometodo.tech/api/v1/araguainha/lotes?por_pagina=2"Autenticação
Cada sistema usa uma chave própria, criada pelo administrador do município no geoportal (Administração → API). A chave aparece uma única vez, na criação; guarde-a como senha. Envie-a em todas as requisições:
Authorization: Bearer gm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| Escopo | Dá acesso a |
|---|---|
cadastro | Lotes, unidades (sem titulares) e o feed de alterações. Toda chave tem. |
titulares | Titulares das unidades (nome, CPF/CNPJ, vínculo, percentual, responsável tributário), alterações de pessoas e transferências. Dado pessoal: conceda só a quem precisa (ex.: lançamento do IPTU). |
Uma chave vale só para o seu município. Para trocar uma chave, crie a nova, atualize o sistema e revogue a antiga.
Convenções
- Datas:
AAAA-MM-DD; datas e horas: ISO 8601 com fuso (ex.:2026-09-01T00:00:00-03:00). Números decimais com ponto. - Áreas em m², extensões em metros. Campo sem informação vem como
null. - Listas paginadas:
pagina(a partir de 1) epor_pagina(padrão 100, máximo 500). A resposta trazpaginacao.proximacom o caminho da página seguinte, ounullna última. - Feeds (alterações, transferências) usam cursor: guarde o
proximo_apos_ide peçaapos_idcom ele na próxima vez. situacao:ativo(padrão),extintooutodos. Lotes e unidades extintos (desmembramento, unificação) continuam consultáveis.
{
"dados": [ ... ],
"paginacao": { "pagina": 1, "por_pagina": 100, "total": 139, "proxima": "/api/v1/araguainha/lotes?pagina=2" }
}Erros e limites
{ "erro": { "codigo": "chave_invalida", "mensagem": "Chave inválida ou revogada." } }| Status | Código | Quando |
|---|---|---|
| 400 | parametro_invalido | Parâmetro em formato inválido (data, cursor). |
| 401 | sem_chave, chave_invalida | Sem cabeçalho Authorization, chave inexistente ou revogada. |
| 403 | outra_cidade, sem_escopo | Chave de outro município ou sem o escopo necessário. |
| 404 | nao_encontrado, cidade_inexistente | Inscrição ou município inexistente. |
| 429 | limite | Mais de 120 requisições por minuto na mesma chave. Respeite o cabeçalho Retry-After. |
Lotes
GET/{cidade}/lotesescopo cadastro
GET/{cidade}/lotes/{inscricao}escopo cadastro
| Parâmetro | Tipo | Descrição |
|---|---|---|
alterados_desde | data/hora | Só lotes alterados a partir deste momento. |
situacao | texto | ativo (padrão), extinto ou todos. |
geometria | texto | nenhuma (padrão), geojson ou wkt. |
matricula | texto | Filtra pela matrícula do Registro de Imóveis; pontuação é ignorada (45.678 = 45678). |
cartorio_cns | texto | CNS da serventia (6 dígitos), para distinguir matrículas de mesmo número em cartórios diferentes. O lote traz também o cnm (Código Nacional de Matrícula). |
pagina, por_pagina | inteiro | Paginação (só na lista). |
curl -H "Authorization: Bearer $CHAVE" \
"https://geometodo.tech/api/v1/araguainha/lotes/01.002.0001?geometria=geojson"{
"dados": {
"inscricao": "01.002.0001",
"situacao": "ativo",
"setor": "01", "quadra": "002", "numero": "1",
"loteamento": "Núcleo Cohab",
"bairro": "Núcleo Cohab",
"endereco": { "logradouro": "Rua Ricardo Franco", "numero": null },
"testadas": [
{ "logradouro": "Rua Ricardo Franco", "extensao_m": 13.24, "principal": true },
{ "logradouro": "Avenida João Ponce de Arruda", "extensao_m": 26.76, "principal": false }
],
"area_medida_m2": 360.21,
"area_matricula_m2": null,
"matricula": null, "cartorio_cns": null, "cib": null,
"edificacoes": { "quantidade": 0, "area_construida_m2": null, "pavimentos_max": null },
"unidades": 0,
"versao": 1,
"atualizado_em": "2026-09-24T18:10:12.345Z",
"extinto_em": null,
"geometria": { "type": "MultiPolygon", "coordinates": [ ... ] },
"srid": 4674
}
}area_medida_m2 é calculada da geometria do levantamento (elipsoide GRS80); area_matricula_m2 é a área declarada na matrícula do Registro de Imóveis.
Unidades imobiliárias
A unidade é a base do lançamento do IPTU: casa, apartamento, sala ou terreno. O campo cib traz o código do Cadastro Imobiliário Brasileiro atribuído pelo SINTER (Receita Federal) à unidade, quando o município já fez a remessa; é nulo antes disso.
GET/{cidade}/unidadesescopo cadastro
GET/{cidade}/unidades/{inscricao}escopo cadastro
| Parâmetro | Tipo | Descrição |
|---|---|---|
alterados_desde | data/hora | Unidades alteradas (ou com titularidade alterada) a partir deste momento. |
incluir=titulares | texto | Acrescenta os titulares vigentes. Exige o escopo titulares. |
situacao | texto | ativo (padrão), extinto ou todos. |
pagina, por_pagina | inteiro | Paginação (só na lista). |
curl -H "Authorization: Bearer $CHAVE" \
"https://geometodo.tech/api/v1/demonstracao/unidades/01.001.0001.001?incluir=titulares"{
"dados": {
"inscricao": "01.001.0001.001",
"inscricao_lote": "01.001.0001",
"situacao": "ativo",
"cib": "K7M2QX4P",
"uso": { "codigo": "RES", "descricao": "Residencial" },
"endereco": { "logradouro": "Avenida Brasil", "numero": "24", "complemento": null },
"area_privativa_m2": null,
"fracao_ideal": null,
"edificacao": { "pavimentos": 1, "ano_construcao": 2016, "area_construida_m2": 184.93 },
"titulares": [
{
"nome": "Compradora Demonstração", "tipo": "fisica", "cpf_cnpj": "52998224725",
"vinculo": "proprietario", "percentual": 100, "responsavel_tributario": true, "inicio": "2026-09-22"
}
],
"versao": 1,
"atualizado_em": "2026-09-24T20:17:31.000Z"
}
}Pessoas: busca por CPF/CNPJ e nome
Localiza o contribuinte e todos os imóveis em que ele é titular: pelo CPF/CNPJ (exato) ou pelo nome ou razão social (aproximado, sem acento e tolerante a erro de digitação). Útil para atendimento, certidões e conferência do cadastro de contribuintes do tributário.
GET/{cidade}/pessoas?cpf_cnpj={cpf_cnpj}escopo titulares
GET/{cidade}/pessoas?nome={nome}escopo titulares
GET/{cidade}/pessoas/{cpf_cnpj}escopo titulares
| Parâmetro | Tipo | Descrição |
|---|---|---|
cpf_cnpj | texto | CPF ou CNPJ completo, com ou sem pontuação (aceita o CNPJ alfanumérico). |
nome | texto | Nome ou razão social, pelo menos 4 letras. Resultados ordenados por relevancia (0 a 1). |
vinculos | texto | atuais (padrão na busca): só titularidades vigentes; todos (padrão em /pessoas/{cpf_cnpj}): inclui as encerradas. |
limite | inteiro | Busca por nome: até 50 pessoas (padrão 20). |
curl -H "Authorization: Bearer $CHAVE" "https://geometodo.tech/api/v1/demonstracao/pessoas?nome=joao%20almeda"{
"dados": [
{
"cpf_cnpj": "00729164004", "tipo": "fisica", "nome": "João Campos Almeida",
"contato": {
"email": null, "telefone": "+55 19 981234567", "telefone2": null,
"endereco_correspondencia": "Rua Tiradentes, 120 – Centro – Município de Demonstração/SP – CEP 13500-000",
"endereco": { "logradouro": "Rua Tiradentes", "numero": "120", "complemento": null, "bairro": "Centro",
"cidade": "Município de Demonstração", "uf": "SP", "cep": "13500000", "conferido_no_cadastro": true }
},
"relevancia": 0.45,
"atualizado_em": "2026-09-24T12:00:00.000Z",
"imoveis": [
{
"inscricao_unidade": "01.021.0011.002", "inscricao_lote": "01.021.0011",
"endereco": { "logradouro": "Avenida Rui Barbosa", "numero": "275", "complemento": "Apto 102" },
"vinculo": "proprietario", "percentual": 100, "responsavel_tributario": true,
"inicio": "2019-07-05", "fim": null, "vigente": true
}
]
}
]
}No exemplo, “joao almeda” (sem acento e com erro) encontra “João Campos Almeida”. A busca por CPF/CNPJ devolve no máximo uma pessoa (lista vazia se não houver). Pessoas sem CPF/CNPJ cadastrado aparecem na busca por nome, com cpf_cnpj nulo. Cada consulta é registrada como acesso a dado pessoal.
Alterações
Tudo o que mudou no cadastro, em ordem, a partir do log de auditoria: é o que permite ao sistema tributário atualizar só o necessário.
GET/{cidade}/alteracoesescopo cadastro
| Parâmetro | Tipo | Descrição |
|---|---|---|
apos_id | inteiro | Cursor: alterações com id maior que este (comece com 0). |
desde | data/hora | Opcional: só a partir deste momento. |
limite | inteiro | Até 1000 por chamada (padrão 500). |
{
"dados": [
{ "id": 3601, "quando": "2026-09-24T20:17:31Z", "entidade": "titularidade", "operacao": "inclusao",
"inscricao": "01.001.0001.001", "campos": ["unidade_id", "pessoa_id", "vinculo", "percentual", "..."] },
{ "id": 3602, "quando": "2026-09-24T20:17:31Z", "entidade": "lote", "operacao": "alteracao",
"inscricao": "01.001.0001", "campos": ["matricula", "cartorio_cns"] }
],
"cursor": { "proximo_apos_id": 3602, "ultimo_id": 3602, "tem_mais": false,
"proxima": "/api/v1/demonstracao/alteracoes?apos_id=3602" }
}| entidade | inscricao aponta para |
|---|---|
lote, testada, edificacao, transferencia | o lote |
unidade, titularidade | a unidade |
pessoa (só com escopo titulares) | nada; o campo unidades lista as unidades atuais da pessoa |
Transferências
Mudanças de titularidade registradas com a matrícula atualizada do Registro de Imóveis.
GET/{cidade}/transferenciasescopo titulares
| Parâmetro | Tipo | Descrição |
|---|---|---|
apos_id | inteiro | Cursor (comece com 0). |
desde | data/hora | Opcional: registradas no geoportal a partir deste momento. |
limite | inteiro | Até 500 por chamada (padrão 100). |
{
"dados": [
{
"id": 1, "inscricao_lote": "01.001.0001", "unidades": ["01.001.0001.001"],
"natureza": "compra_venda", "matricula": "45678", "cartorio_cns": "112233",
"ato_registro": "R-4/45.678", "data_registro": "2026-09-22", "processo": "PA 4.321/2026",
"registrada_em": "2026-09-24T20:17:31Z",
"adquirentes": [ { "nome": "Compradora Demonstração", "cpf_cnpj": "52998224725", "vinculo": "proprietario",
"percentual": 100, "responsavel_tributario": true } ],
"transmitentes": [ { "nome": "André Teixeira Pereira", "cpf_cnpj": "...", "vinculo": "proprietario" } ]
}
],
"cursor": { "proximo_apos_id": 1, "tem_mais": false }
}Naturezas: compra_venda, doacao, heranca, usucapiao, adjudicacao, permuta, dacao, regularizacao, outra.
Sincronização recomendada
- Carga inicial: antes de começar, chame
/alteracoes?limite=1e guardecursor.ultimo_id; depois percorra/unidades?incluir=titularese/lotespágina a página. O que mudar durante a carga aparece no feed a partir desse cursor. - Atualização periódica (ex.: de hora em hora): chame
/alteracoes?apos_id=o cursor guardado; para cada inscrição recebida, busque o registro atualizado em/lotes/{inscricao}ou/unidades/{inscricao}?incluir=titulares; grave o novo cursor só depois de processar tudo. - Transferências: para o cadastro de contribuintes, acompanhe
/transferencias?apos_id=da mesma forma.
cursor = ler_cursor() # 0 na primeira vez
repita:
r = GET /alteracoes?apos_id={cursor}&limite=1000
para cada a em r.dados:
se a.entidade em (unidade, titularidade): atualizar_unidade(GET /unidades/{a.inscricao}?incluir=titulares)
se a.entidade em (lote, testada, edificacao): atualizar_lote(GET /lotes/{a.inscricao})
cursor = r.cursor.proximo_apos_id; gravar_cursor(cursor)
até r.cursor.tem_mais == falsoSegurança e LGPD
- Toda chamada fica registrada (chave, sistema, endpoint, quantidade de resultados, IP), visível ao administrador do município.
- Consultas com titulares e as buscas de pessoas são registradas como acesso a dado pessoal.
- Guarde a chave no servidor do sistema, nunca em código de navegador ou aplicativo.
- Chave comprometida: o administrador revoga na hora (Administração → API) e cria outra.
- Laudos com código de verificação podem ser conferidos publicamente em /verificar.
Versões
v1 (atual). Campos novos podem ser acrescentados sem aviso; mudanças que quebrem a integração virão numa nova versão (/api/v2), mantendo a anterior por um período de transição.