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âmetro | O que faz |
|---|---|
trade | Um de roofing, hvac, solar, pool, electrical, plumbing, windows_doors, new_construction, remodel, demolition |
since, until | Protocolado em ou após / em ou antes de uma data, YYYY-MM-DD |
min_value | Valor mínimo da obra em dólares americanos |
zip, city | Limitar a um código postal ou cidade |
jurisdiction | Uma chave de fonte de /coverage, como tampa ou pinellas |
q | Palavras na descrição do trabalho, como heat pump |
include_applications | true para também retornar solicitações ainda sem número de permissão emitido (desativado por padrão) |
limit, offset | Tamanho 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.
| Ferramenta | O que retorna | Por chamada |
|---|---|---|
coverage | Cidades cobertas, contagens de permissões e horário da última atualização | Grátis |
sample_permits | Três permissões recentes, para ver o formato do registro | Grátis |
search_permits | A mesma busca que GET /permits/search | $0,02 |
get_permit | Uma permissão com seu histórico registrado | $0,01 |
property_history | Todas as permissões em um endereço | $0,05 |
contractor_history | O 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_changedmostra 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_urlaponta 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ódigo | Significado |
|---|---|
402 | Pagamento necessário. Leia o cabeçalho PAYMENT-REQUIRED, pague e tente novamente. |
400 | Um parâmetro não é válido, como um ofício desconhecido. A mensagem lista os valores permitidos. |
404 | Nenhuma permissão ou contratante com essa chave. |
422 | Um parâmetro tem o formato errado, como limit acima de 25. |