TELECOM TOWER POWER¶
We measure, with public data, the digital infrastructure Brazil needs to build at home — towers, power and edge data centres — and take that account to the regulatory debate. ANATEL's public licensing data (MOSAICO) becomes ready engineering: the regulatory twin of the shared site, co-site RF exposure triage, licensing support and network intelligence.
Portuguese-only pages
The method and operations pages — RF exposure triage method, private-radio leads, rural coverage draft, model validation, propagation models, observation ingestion, data sources, SLA tiers, security, reliability and subprocessors — are published in Portuguese for now (see the Portuguese site). The API reference below is in English.
Who it is for (and who it is not for)¶
The buyer is not the operator. Vivo, Claro and TIM outsource much of the work of licensing and changing stations to RF exposure assessors, licensing and engineering firms and tower companies. An operator only sees its own emitters. TTP builds, from ANATEL's MOSAICO registry, the inventory of every carrier on each shared site, sums across operators and shows what changed between two registry cuts.
- Co-site RF exposure triage under ANATEL Act 17.865: one site, in batch or straight from MOSAICO, in JSON and PDF. The PDF is a triage draft, not a survey report: a filed report needs a responsible engineer with CREA/ART.
- Site twin (
GET /planning/site-twin) and reassessment queue between two cuts (GET /planning/reassessment-queue). Both need a MOSAICO cut loaded in production; live state inGET /platform/maturity(regulatory_twin.loaded). - Screening-grade RF prediction (P.1812/ITM + ML residual) for coverage and links — to decide where to look first, not to license.
It does not replace ATOLL, Planet, Asset or CelPlan for ANATEL licensing or final RAN design, and it is not a signed assessment: TTP is not an assessment entity (ANATEL Res. 700/2018, art. 5).
Inside the drive-test-calibrated envelope (5G NR n78 3.5 GHz + LTE B28 700 MHz/B1/B3/B7 (Vivo, TIM, Claro), suburban/urban Brasília), TTP's learned model — trained on 76,139 real drive-test observations — reports 7.85 dB spatial-CV RMSE (h3_res8 group folds, k=5) with an artefact-calibrated band of ±12.54 dB — in production the band actually applied is ±16.12 to ±21.26 dB depending on signal class (field override, origin: automatic field recalibration, applied 2026-10-26; verify live: GET /coverage/effective-band) — screening grade, gates verifiable live at GET /coverage/promotion-readiness. Outside the envelope the same chain answers, with no accuracy measured there and the wider extrapolation band — there is no automatic refusal; the ridge fallback (~14.9 dB CV) only answers when the residual cannot (no coordinates in the request, or the artefact unavailable) (see the technical validation & limitations).
Data Privacy and Isolation¶
- Tower data: 100% public (ANATEL + OpenCellID).
- No carrier-proprietary data is stored, processed, or shared.
- Internal uploads require IP allowlist + MFA + full audit trail.
Interface and Access¶
- Modern React + Tailwind UI
- Automatic dark mode
- MFA and granular RBAC. OIDC SSO is not switched on in production yet (
GET /auth/oidc/config); it is switched on under contract.
What it is¶
A REST API over ANATEL's public licensing data. For each shared structure it builds the inventory of every emitter of every operator and sums them under ANATEL Act 17.865 (method). For any point, it returns the stations around it, with link, terrain and margin.
The base holds 179,344 geolocated towers (ANATEL + OpenCelliD; count from GET /health/ready on 2026-10-10). Terrain comes from the NASADEM/ALOS/SRTM chain and, optionally, the API writes a natural-language technical statement via AI.
In 30 seconds¶
The call below uses the public demo key and analyses the link of one point. Co-site RF exposure triage needs a Pro key or above (method and routes).
curl -X POST https://api.telecomtowerpower.com.br/analyze_link \
-H "X-API-Key: demo_ttp_free_2604" \
-H "Content-Type: application/json" \
-d '{
"receiver": {"lat": -20.5, "lon": -41.9, "height": 5},
"frequency_mhz": 700,
"max_distance_km": 30
}'
Trimmed response:
{
"best_tower": {
"operator": "VIVO",
"distance_km": 6.8,
"azimuth_deg": 142,
"los_clear": true,
"fresnel_ok": true,
"path_loss_db": 106.2,
"link_margin_db": 18.3
},
"alternatives": [ ... 5 more towers ... ]
}
Next¶
- Quickstart — first call in 5 minutes
- Authentication — how to get and use an API key
- API reference — every endpoint