v1ESTÁVEL

Documentação da API

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)
1

Visão Geral

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.

URL Base

https://suntrace3d.com/api/v1
REST API
Pedido/resposta JSON
Autenticação Bearer
Autenticação por chave de API
Qualidade HD
Todos os modelos da API são HD

Endpoints Disponíveis

POST/api/v1/modelsGerar um novo modelo 3D HD
GET/api/v1/models/:idVerificar estado da geração do modelo
POST/api/solar/calculateCalcular produção de energia solar
GET/embedVisualizador 3D incorporável (iframe)
GET/api/healthVerificação de saúde (sem autenticação)
Partner portal showing API keys and usage statistics
O Portal de Parceiros — gira chaves de API, veja estatísticas de utilização e obtenha código de incorporação
2

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.

Obter uma chave de API

  1. 1
    Criar uma conta
    Registe-se em /auth/signup se ainda não o fez.
  2. 2
    Atualizar para Pro
    É necessária uma subscrição Pro para acesso à API. Atualize nas definições da sua conta.
  3. 3
    Gerar uma chave de API
    Visite o Portal de Parceiros e clique em "Criar Chave". Copie a sua chave imediatamente — não será mostrada novamente.
  4. 4
    Usar nos pedidos
    Inclua a chave em todos os pedidos à API como token Bearer.
Cabeçalho de Autenticaçãobash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Mantenha a sua chave de API secreta

Nunca 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.

3

Gerar um Modelo 3D

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.

POST/api/v1/models

Corpo do Pedido

latitudenumberrequiredLatitude do ponto central (-90 a 90)
longitudenumberrequiredLongitude do ponto central (-180 a 180)
radiusKmnumberRaio da área a modelar em km (padrão: 0.3)

Resposta

idstringrequiredIdentificador único do modelo para consulta de estado
statusstringrequired"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ção
Pedidobash
curl -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
  }'
Resposta (pendente)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Resposta (pronto)json
{
  "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"
}

Cache de modelos

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.

API request generating a 3D model
A API gera modelos 3D HD de forma assíncrona — consulte o endpoint de estado até estar pronto
4

Verificar Estado do Modelo

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.

GET/api/v1/models/:id
Pedidobash
curl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
  -H "Authorization: Bearer YOUR_API_KEY"
Resposta (em processamento)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "processing",
  "progress": 65,
  "step": "Generating textures..."
}
Resposta (pronto)json
{
  "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
}

Valores de Estado

pendingO trabalho está na fila e aguarda ser processado por um worker
processingO modelo está a ser gerado. Consulte o campo progress para a percentagem.
readyO modelo está pronto. O campo modelUrl contém o URL de download.
failedA geração falhou. Pode tentar novamente criando um novo pedido.

Recomendação de polling

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.

5

Calcular Energia Solar

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.

POST/api/solar/calculate

Corpo do Pedido

latitudenumberrequiredLatitude do local
longitudenumberrequiredLongitude do local
tiltDegnumberrequiredÂ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 quadrados
panelEfficiencynumberrequiredEficiência do painel (0.0 - 1.0, tipicamente 0.18-0.22)
shadingLossFractionnumberFator de perda por sombreamento (0.0-1.0, padrão: 0)

Resposta

annualYieldKwhnumberrequiredProdução anual estimada de energia em kWh
peakPowerKwnumberrequiredPotência de pico em kW
specificYieldnumberrequiredProdução específica em kWh/kWp
monthlyKwhnumber[]requiredMatriz de 12 valores mensais em kWh
sourcestringrequiredIdentificador da fonte de dados ("pvgis")
Pedidobash
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
  }'
Respostajson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Sem autenticação necessária

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.

Solar energy calculation API response
A API de cálculo solar devolve produção anual, potência de pico e decomposição mensal
6

Incorporar Visualizador

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.

Parâmetros do URL de Incorporação

latnumberrequiredLatitude do local a apresentar
lngnumberrequiredLongitude do local a apresentar
keystringrequiredA sua chave de API para autenticação
Código de Incorporação Básicohtml
<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>
Incorporação Responsiva (recomendado)html
<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>

Funcionalidades da incorporação

Órbita, deslocamento e zoom 3D interativos
Controlo de tempo para simulação de sombras
Responsivo — funciona em telemóveis
Modelos fotorrealistas Google 3D Tiles
Sem JavaScript adicional necessário
Suporte a ecrã inteiro
Embedded 3D viewer in an iframe
O visualizador incorporável inclui controlos de tempo e funciona em desktop e telemóvel
7

Limites de Taxa

A API aplica limites de taxa para garantir utilização justa e estabilidade do sistema.

Geração de Modelos
POST /api/v1/models
10 pedidos
por hora, por chave de API
Consulta de Estado
GET /api/v1/models/:id
Sem limite
Consulte conforme necessário
Cálculo Solar
POST /api/solar/calculate
Sem limite
Endpoint público
Visualizações Incorporadas
GET /embed
Sem limite
Visualizações ilimitadas
Resposta de Limite de Taxa Excedido (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Tratamento de Erros

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.

Códigos de Estado HTTP

200Sucesso — pedido concluído com sucesso
400Pedido Inválido — parâmetros em falta ou inválidos
401Não Autorizado — chave de API em falta ou inválida
404Não Encontrado — o ID do modelo não existe
429Demasiados Pedidos — limite de taxa excedido
503Serviço Indisponível — serviço externo (PVGIS) está indisponível
Exemplo de Resposta de Errojson
{
  "error": "latitude and longitude are required"
}
Erro de Autenticaçãojson
{
  "error": "Invalid or revoked API key"
}
9

Webhooks

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.

Em Breve

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.

10

Exemplos Completos

Exemplos completos, prontos a copiar, para cenários comuns de integração.

Gerar um modelo e aguardar conclusão

Bash — fluxo de trabalho completobash
#!/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"
fi

Integração JavaScript/Node.js

Node.js — gerar e consultarjavascript
const 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));

Integração Python

Python — gerar e calcular solarpython
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']}")
API integration code examples in multiple languages
Exemplos de código completos em Bash, JavaScript e Python para integração com a API

Novo no SunTrace3D?

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