Permit Scouter

Novas licenças de construção de seis jurisdições da região de Tampa Bay, Flórida, com valor do serviço, contratante, licença e área de atuação (telhados, HVAC, solar, piscina...). Duas ferramentas gratuitas; ferramentas pagas custam de US$ 0,01 a US$ 0,10 por chamada em USDC via x402.

Servidor MCP hospedado

npx add-mcp 'https://api.permitscouter.com/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

Permissões de construção da região de Tampa Bay, Flórida, coletadas todas as manhãs e padronizadas em um único formato. Cada chamada paga é liquidada com x402: sem conta e sem chave de API, apenas uma carteira com USDC na Base.

Começando

A API está disponível em https://api.permitscouter.com. Todas as respostas são em JSON. Experimente uma rota gratuita primeiro:

curl https://api.permitscouter.com/sample

Uma referência interativa com todos os parâmetros está em /docs na API. Agentes e ferramentas podem ler o mesmo conteúdo como um documento OpenAPI em /openapi.json, com o preço de cada rota paga em x-payment-info.

Pagando com x402

Chame uma rota paga sem pagar e você recebe 402 Payment Required. O cabeçalho PAYMENT-REQUIRED contém o preço, a rede e o endereço para pagamento. Seu cliente assina uma autorização USDC para esse valor e repete a solicitação com ela no cabeçalho PAYMENT-SIGNATURE. O cabeçalho PAYMENT-RESPONSE da resposta contém o recibo de liquidação, incluindo o hash da transação.

Você não precisa de ETH para gás: o pagamento é liquidado para você. Qualquer cliente x402 funciona. Em Python:

pip install "x402[httpx,evm]"
import asyncio
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm.exact import register_exact_evm_client
from x402.mechanisms.evm.signers import EthAccountSigner

async def main():
    client = x402Client()
    register_exact_evm_client(client, EthAccountSigner(Account.from_key("0xYOUR_PRIVATE_KEY")))
    async with x402HttpxClient(client) as http:
        response = await http.get(
            "https://api.permitscouter.com/permits/search",
            params={"trade": "roofing", "since": "2026-10-01", "min_value": 10000},
        )
        print(response.json())

asyncio.run(main())

Mantenha a carteira de gastos do seu agente separada de qualquer carteira que guarde economias, e carregue-a apenas com o que for necessário.

GET /permits/search $0,02

Novas permissões, das mais recentes para as mais antigas. Dentro de cada dia, permissões com valor de obra e contratante vêm primeiro. Até 25 por chamada; pagine com offset.

ParâmetroO que faz
tradeUm de roofing, hvac, solar, pool, electrical, plumbing, windows_doors, new_construction, remodel, demolition
since, untilProtocolado em ou após / em ou antes de uma data, YYYY-MM-DD
min_valueValor mínimo da obra em dólares americanos
zip, cityLimitar a um código postal ou cidade
jurisdictionUma chave de fonte de /coverage, como tampa ou pinellas
qPalavras na descrição do trabalho, como heat pump
include_applicationstrue para também retornar solicitações ainda sem número de permissão emitido (desativado por padrão)
limit, offsetTamanho da página (1 a 25) e ponto de partida
{
  "total": 21,
  "next_offset": 5,
  "results": [
    {
      "permit_key": "tampa:BTR-27-0633248",
      "jurisdiction": "City of Tampa",
      "permit_number": "BTR-27-0633248",
      "record_type": "Residential Roof Trade Permit",
      "status": "Issued",
      "description": "re-roof",
      "address": "4202 W CLEVELAND ST",
      "city": "TAMPA",
      "zip": "33609",
      "applied_date": "2026-10-10",
      "valuation": 16998.05,
      "contractor_name": "EXCEL EXTERIORS, INC.",
      "contractor_license": "CCC1331677",
      "contractor_key": "ccc1331677",
      "trades": ["roofing"],
      "source_url": "https://aca-prod.accela.com/TAMPA/…",
      "first_seen": "2026-10-11T00:06:09+00:00",
      "last_changed": "2026-10-11T00:07:40+00:00"
    }
  ]
}

GET /permits/{source}/{permit_number} $0,01

Uma permissão e todas as alterações que registramos em seu status, valor ou data de emissão, das mais antigas para as mais recentes. Exemplo: /permits/tampa/BTR-27-0633248.

GET /properties/history?address=…&zip=… $0,05

Todas as permissões em um endereço, das mais recentes para as mais antigas. Use o endereço como aparece nos resultados, como 4202 W CLEVELAND ST. Adicionar zip restringe a correspondência.

GET /contractors/{contractor_key}/history $0,10

Todas as permissões que um contratante obteve em nossa área de cobertura, com o valor total da obra, datas da primeira e da última permissão e uma contagem por ofício. O contractor_key está em cada registro de permissão; geralmente é o número da licença estadual em minúsculas.

Ferramentas MCP

Os mesmos dados estão disponíveis como ferramentas MCP, para assistentes de IA e frameworks de agentes. Conecte-se via HTTP transmissível a https://api.permitscouter.com/mcp. Não é necessário cadastro.

FerramentaO que retornaPor chamada
coverageCidades cobertas, contagens de permissões e horário da última atualizaçãoGrátis
sample_permitsTrês permissões recentes, para ver o formato do registroGrátis
search_permitsA mesma busca que GET /permits/search$0,02
get_permitUma permissão com seu histórico registrado$0,01
property_historyTodas as permissões em um endereço$0,05
contractor_historyO registro completo de permissões de um contratante$0,10

As ferramentas gratuitas funcionam em qualquer cliente MCP. Uma ferramenta paga chamada sem pagamento retorna um resultado de erro cujo texto é a solicitação de pagamento x402; um cliente MCP compatível com x402 paga e chama novamente com o pagamento em _meta["x402/payment"]. O recibo volta em _meta["x402/payment-response"], e uma chamada que falha não é cobrada.

Em Python, com a biblioteca MCP oficial e o cliente MCP do x402, o pagamento é automático:

pip install "x402[mcp,evm]" "mcp>=1.20,<2"
import asyncio
from datetime import timedelta
from eth_account import Account
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
from x402 import x402Client
from x402.mcp import wrap_mcp_client_with_payment
from x402.mechanisms.evm.exact import register_exact_evm_client
from x402.mechanisms.evm.signers import EthAccountSigner

class SessionAdapter:
    """x402's MCP client passes one params dict; the MCP session takes the parts separately."""
    def __init__(self, session):
        self.session = session

    async def call_tool(self, params, read_timeout_seconds=None, **_):
        if isinstance(read_timeout_seconds, (int, float)):
            read_timeout_seconds = timedelta(seconds=read_timeout_seconds)
        return await self.session.call_tool(params["name"], params.get("arguments"),
                                            read_timeout_seconds=read_timeout_seconds,
                                            meta=params.get("_meta"))

async def main():
    payments = x402Client()
    register_exact_evm_client(payments, EthAccountSigner(Account.from_key("0xYOUR_PRIVATE_KEY")))
    async with streamablehttp_client("https://api.permitscouter.com/mcp") as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()
            paid = wrap_mcp_client_with_payment(SessionAdapter(session), payments, auto_payment=True)
            result = await paid.call_tool("search_permits", {"trade": "roofing", "min_value": 10000})
            print(result.content)

asyncio.run(main())

Rotas gratuitas

GET /coverage Grátis

As cidades cobertas hoje, contagens de permissões, intervalo de datas e quando cada uma foi atualizada pela última vez. Verifique antes de confiar em uma cidade.

GET /sample Grátis

Três permissões recentes, para você ver o formato do registro antes de pagar.

GET /health Grátis

status indica se a API está no ar; collection indica se os dados estão atualizados, com quaisquer problemas listados.

O registro de permissão

  • Atualização. Cada fonte é coletada todas as manhãs e os últimos três dias são reverificados, então mudanças de status são capturadas. last_changed mostra quando um registro mudou pela última vez.
  • Valor da obra e contratante são lidos da própria página de cada permissão, geralmente dentro de um dia após o protocolo. No início da vida de uma permissão, qualquer um deles pode ser null.
  • Privacidade. Nomes de proprietários e solicitantes nunca são coletados. Contratantes são empresas com licenças estaduais públicas.
  • Precisão. Os registros são dados públicos conforme publicados por cada departamento de construção. source_url aponta para a origem de cada um.

Erros

O pagamento só é liquidado quando uma chamada é bem-sucedida. Se uma chamada paga retornar um erro, seu pagamento assinado não é cobrado.

CódigoSignificado
402Pagamento necessário. Leia o cabeçalho PAYMENT-REQUIRED, pague e tente novamente.
400Um parâmetro não é válido, como um ofício desconhecido. A mensagem lista os valores permitidos.
404Nenhuma permissão ou contratante com essa chave.
422Um parâmetro tem o formato errado, como limit acima de 25.