A Partner API do SunTrace3D permite gerar modelos 3D HD de cidades, calcular produção de energia solar e incorporar visualizadores 3D interativos no seu website. Todos os endpoints utilizam JSON e métodos HTTP padrão.
Ver como Markdown (leitura automática)A API do SunTrace3D é um serviço RESTful para acesso programático à geração de modelos 3D de cidades e cálculos de energia solar. A API foi concebida para parceiros que pretendem integrar análise solar nas suas próprias aplicações, websites ou fluxos de trabalho.
https://suntrace3d.com/api/v1/api/v1/modelsGerar um novo modelo 3D HD/api/v1/models/:idVerificar estado da geração do modelo/api/solar/calculateCalcular produção de energia solar/embedVisualizador 3D incorporável (iframe)/api/healthVerificação de saúde (sem autenticação)
Todos os pedidos à API requerem autenticação via token Bearer no cabeçalho Authorization. As chaves de API são geridas através do Portal de Parceiros.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsNunca exponha a sua chave de API em JavaScript do lado do cliente, repositórios públicos ou código front-end. Se a sua chave for comprometida, revogue-a imediatamente no Portal de Parceiros e crie uma nova.
Solicite a geração de um modelo 3D HD de cidade para uma localização geográfica específica. O modelo é gerado de forma assíncrona — consulte o endpoint de estado para verificar quando está pronto.
/api/v1/modelslatitudenumberrequiredLatitude do ponto central (-90 a 90)longitudenumberrequiredLongitude do ponto central (-180 a 180)radiusKmnumberRaio da área a modelar em km (padrão: 0.3)idstringrequiredIdentificador único do modelo para consulta de estadostatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL do ficheiro GLB do modelo (quando pronto)progressnumberProgresso da geração 0-100 (durante processamento)stepstringDescrição do passo atual de geraçãocurl -X POST https://suntrace3d.com/api/v1/models \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"latitude": 44.8699,
"longitude": 13.8420,
"radiusKm": 0.3
}'{
"id": "hd_44.8699_13.8420_0.3",
"status": "pending"
}{
"id": "hd_44.8699_13.8420_0.3",
"status": "ready",
"modelUrl": "https://s3.eu-central-1.amazonaws.com/suntrace-models/hd_44.8699_13.8420_0.3/scene.glb"
}Se um modelo para a mesma localização e raio já foi gerado, a API devolve o resultado em cache imediatamente com status: "ready". Os modelos ficam em cache no S3 durante 30 dias. Não é cobrado por resultados em cache.

Consulte este endpoint para verificar o estado de um pedido de geração de modelo. O modelo passa por várias fases: pending → processing → ready.
/api/v1/models/:idcurl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
-H "Authorization: Bearer YOUR_API_KEY"{
"id": "hd_44.8699_13.8420_0.3",
"status": "processing",
"progress": 65,
"step": "Generating textures..."
}{
"id": "hd_44.8699_13.8420_0.3",
"status": "ready",
"modelUrl": "https://s3.eu-central-1.amazonaws.com/suntrace-models/hd_44.8699_13.8420_0.3/scene.glb",
"progress": 100,
"step": null
}Recomendamos polling a cada 5-10 segundos. Os tempos típicos de geração são de 30-120 segundos dependendo do tamanho da área e carga do servidor. O campo progress fornece uma percentagem (0-100) para mostrar um indicador de progresso na sua UI.
Calcule a produção anual de energia solar para uma configuração específica de painéis e localização. Este endpoint utiliza dados de satélite PVGIS (Photovoltaic Geographical Information System) para valores precisos de irradiância.
/api/solar/calculatelatitudenumberrequiredLatitude do locallongitudenumberrequiredLongitude do localtiltDegnumberrequiredÂngulo de inclinação do painel em graus (0-90)azimuthDegnumberrequiredAzimute do painel em graus (0=Norte, 180=Sul)panelAreaM2numberrequiredÁrea total do painel em metros quadradospanelEfficiencynumberrequiredEficiência do painel (0.0 - 1.0, tipicamente 0.18-0.22)shadingLossFractionnumberFator de perda por sombreamento (0.0-1.0, padrão: 0)annualYieldKwhnumberrequiredProdução anual estimada de energia em kWhpeakPowerKwnumberrequiredPotência de pico em kWspecificYieldnumberrequiredProdução específica em kWh/kWpmonthlyKwhnumber[]requiredMatriz de 12 valores mensais em kWhsourcestringrequiredIdentificador da fonte de dados ("pvgis")curl -X POST https://suntrace3d.com/api/solar/calculate \
-H "Content-Type: application/json" \
-d '{
"latitude": 44.8699,
"longitude": 13.8420,
"tiltDeg": 35,
"azimuthDeg": 180,
"panelAreaM2": 20,
"panelEfficiency": 0.20,
"shadingLossFraction": 0.05
}'{
"annualYieldKwh": 4982,
"peakPowerKw": 4.0,
"specificYield": 1246,
"monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
"source": "pvgis"
}O endpoint de cálculo solar está disponível publicamente e não requer chave de API. Utiliza a API pública PVGIS mantida pelo Centro Comum de Investigação da Comissão Europeia.

Incorpore um visualizador 3D solar interativo no seu website usando um iframe. O visualizador incorporado inclui controlos de tempo para simulação de sombras e funciona em desktop e telemóvel.
latnumberrequiredLatitude do local a apresentarlngnumberrequiredLongitude do local a apresentarkeystringrequiredA sua chave de API para autenticação<iframe
src="https://suntrace3d.com/embed?lat=44.8699&lng=13.8420&key=YOUR_API_KEY"
width="100%"
height="500"
frameborder="0"
allow="fullscreen"
style="border-radius: 12px; border: 1px solid #e5e7eb;">
</iframe><div style="position: relative; width: 100%; padding-bottom: 56.25%; overflow: hidden; border-radius: 12px;">
<iframe
src="https://suntrace3d.com/embed?lat=44.8699&lng=13.8420&key=YOUR_API_KEY"
style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none;"
allow="fullscreen">
</iframe>
</div>
A API aplica limites de taxa para garantir utilização justa e estabilidade do sistema.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}A API utiliza códigos de estado HTTP padrão. Todas as respostas de erro incluem um corpo JSON com um campo error descrevendo o problema.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}O suporte a webhooks para notificações de conclusão de modelos está planeado para uma versão futura. Atualmente, use polling no endpoint de estado para verificar quando os modelos estão prontos.
Os callbacks de webhook enviarão um pedido POST para o URL especificado quando a geração do modelo for concluída, eliminando a necessidade de polling. Esta funcionalidade está no nosso roteiro.
Exemplos completos, prontos a copiar, para cenários comuns de integração.
#!/bin/bash
API_KEY="YOUR_API_KEY"
BASE_URL="https://suntrace3d.com"
# 1. Request model generation
echo "Requesting model generation..."
RESPONSE=$(curl -s -X POST "$BASE_URL/api/v1/models" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"latitude": 44.8699, "longitude": 13.8420, "radiusKm": 0.3}')
MODEL_ID=$(echo $RESPONSE | jq -r '.id')
STATUS=$(echo $RESPONSE | jq -r '.status')
echo "Model ID: $MODEL_ID (status: $STATUS)"
# 2. Poll until ready
while [ "$STATUS" != "ready" ] && [ "$STATUS" != "failed" ]; do
sleep 5
RESPONSE=$(curl -s "$BASE_URL/api/v1/models/$MODEL_ID" \
-H "Authorization: Bearer $API_KEY")
STATUS=$(echo $RESPONSE | jq -r '.status')
PROGRESS=$(echo $RESPONSE | jq -r '.progress // 0')
echo "Status: $STATUS ($PROGRESS%)"
done
# 3. Get the model URL
if [ "$STATUS" = "ready" ]; then
MODEL_URL=$(echo $RESPONSE | jq -r '.modelUrl')
echo "Model ready: $MODEL_URL"
else
echo "Generation failed"
ficonst API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://suntrace3d.com';
async function generateModel(lat, lng) {
// 1. Request generation
const res = await fetch(`${BASE_URL}/api/v1/models`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ latitude: lat, longitude: lng }),
});
const { id, status, modelUrl } = await res.json();
// If already cached, return immediately
if (status === 'ready') return { id, modelUrl };
// 2. Poll until ready
return pollStatus(id);
}
async function pollStatus(modelId) {
while (true) {
await new Promise(r => setTimeout(r, 5000)); // Wait 5s
const res = await fetch(`${BASE_URL}/api/v1/models/${modelId}`, {
headers: { 'Authorization': `Bearer ${API_KEY}` },
});
const data = await res.json();
console.log(`Status: ${data.status} (${data.progress || 0}%)`);
if (data.status === 'ready') return data;
if (data.status === 'failed') throw new Error('Generation failed');
}
}
// Usage
generateModel(44.8699, 13.8420)
.then(data => console.log('Model URL:', data.modelUrl))
.catch(err => console.error(err));import requests
import time
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://suntrace3d.com"
def generate_model(lat: float, lng: float) -> dict:
"""Generate an HD 3D model and wait for completion."""
# Request generation
res = requests.post(
f"{BASE_URL}/api/v1/models",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"latitude": lat, "longitude": lng, "radiusKm": 0.3},
)
data = res.json()
if data["status"] == "ready":
return data
# Poll until ready
model_id = data["id"]
while True:
time.sleep(5)
res = requests.get(
f"{BASE_URL}/api/v1/models/{model_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = res.json()
print(f"Status: {data['status']} ({data.get('progress', 0)}%)")
if data["status"] == "ready":
return data
if data["status"] == "failed":
raise Exception("Generation failed")
def calculate_solar(lat: float, lng: float, tilt: float = 35, azimuth: float = 180) -> dict:
"""Calculate solar energy yield for a panel configuration."""
res = requests.post(
f"{BASE_URL}/api/solar/calculate",
json={
"latitude": lat,
"longitude": lng,
"tiltDeg": tilt,
"azimuthDeg": azimuth,
"panelAreaM2": 20,
"panelEfficiency": 0.20,
},
)
return res.json()
# Usage
model = generate_model(44.8699, 13.8420)
print(f"Model URL: {model['modelUrl']}")
solar = calculate_solar(44.8699, 13.8420)
print(f"Annual yield: {solar['annualYieldKwh']} kWh")
print(f"Monthly: {solar['monthlyKwh']}")
Consulte o Guia do Utilizador para um passo-a-passo completo do visualizador 3D, simulação de sombras e funcionalidades de análise de painéis solares.
Guia do Utilizador