v1STABILE

Documentazione API

La Partner API di SunTrace3D ti permette di generare modelli 3D HD di città, calcolare la resa energetica solare e incorporare visori 3D interattivi nel tuo sito web. Tutti gli endpoint usano JSON e metodi HTTP standard.

Visualizza come Markdown (leggibile dalle macchine)
1

Panoramica

L'API di SunTrace3D è un servizio RESTful per l'accesso programmatico alla generazione di modelli 3D urbani e ai calcoli di energia solare. L'API è progettata per partner che desiderano integrare l'analisi solare nelle proprie applicazioni, siti web o flussi di lavoro.

URL base

https://suntrace3d.com/api/v1
API REST
Richiesta/risposta JSON
Bearer Auth
Autenticazione con chiave API
Qualità HD
Tutti i modelli API sono HD

Endpoint disponibili

POST/api/v1/modelsGenerare un nuovo modello 3D HD
GET/api/v1/models/:idControllare lo stato della generazione del modello
POST/api/solar/calculateCalcolare la resa energetica solare
GET/embedVisore 3D incorporabile (iframe)
GET/api/healthControllo stato (nessuna autenticazione richiesta)
Partner portal showing API keys and usage statistics
Il Portale Partner — gestisci le chiavi API, consulta le statistiche di utilizzo e ottieni il codice di incorporamento
2

Autenticazione

Tutte le richieste API richiedono autenticazione tramite un token Bearer nell'intestazione Authorization. Le chiavi API vengono gestite tramite il Portale Partner.

Ottenere una chiave API

  1. 1
    Crea un account
    Registrati su /auth/signup se non l'hai ancora fatto.
  2. 2
    Passa a Pro
    Un abbonamento Pro è richiesto per l'accesso API. Aggiorna dalle impostazioni del tuo account.
  3. 3
    Genera una chiave API
    Visita il Portale Partner e clicca su "Crea chiave". Copia la tua chiave immediatamente — non sarà più mostrata.
  4. 4
    Usa nelle richieste
    Includi la chiave in tutte le richieste API come token Bearer.
Intestazione di autenticazionebash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Mantieni segreta la tua chiave API

Non esporre mai la tua chiave API in JavaScript lato client, repository pubblici o codice front-end. Se la tua chiave è compromessa, revocala immediatamente dal Portale Partner e creane una nuova.

3

Generare un modello 3D

Richiedi la generazione di un modello 3D HD urbano per una posizione geografica specifica. Il modello viene generato in modo asincrono — interroga l'endpoint di stato per verificare quando è pronto.

POST/api/v1/models

Corpo della richiesta

latitudenumberrequiredLatitudine del punto centrale (-90 a 90)
longitudenumberrequiredLongitudine del punto centrale (-180 a 180)
radiusKmnumberRaggio dell'area da modellare in km (predefinito: 0,3)

Risposta

idstringrequiredIdentificatore unico del modello per il polling dello stato
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringURL del file GLB del modello (quando pronto)
progressnumberProgresso generazione 0-100 (durante l'elaborazione)
stepstringDescrizione del passo di generazione corrente
Richiestabash
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
  }'
Risposta (in attesa)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Risposta (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 dei modelli

Se un modello per la stessa posizione e raggio è già stato generato, l'API restituisce il risultato in cache immediatamente con status: "ready". I modelli sono in cache su S3 per 30 giorni. Non ti viene addebitato nulla per i risultati in cache.

API request generating a 3D model
L'API genera modelli 3D HD in modo asincrono — interroga l'endpoint di stato fino a quando è pronto
4

Controllare lo stato del modello

Interroga questo endpoint per verificare lo stato di una richiesta di generazione modello. Il modello attraversa diverse fasi: pending → processing → ready.

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

Valori di stato

pendingIl lavoro è in coda e in attesa di essere preso da un worker
processingIl modello è in fase di generazione. Controlla il campo progress per la percentuale.
readyIl modello è pronto. Il campo modelUrl contiene l'URL di download.
failedLa generazione è fallita. Puoi riprovare creando una nuova richiesta.

Raccomandazione per il polling

Consigliamo di interrogare ogni 5-10 secondi. I tempi tipici di generazione sono di 30-120 secondi a seconda della dimensione dell'area e del carico del server. Il campo progress fornisce una percentuale (0-100) per mostrare un indicatore di avanzamento nella tua interfaccia.

5

Calcolare l'energia solare

Calcola la resa energetica solare annuale per una configurazione di pannello e posizione specifiche. Questo endpoint utilizza dati satellitari PVGIS (Photovoltaic Geographical Information System) per valori di irradianza precisi.

POST/api/solar/calculate

Corpo della richiesta

latitudenumberrequiredLatitudine della posizione
longitudenumberrequiredLongitudine della posizione
tiltDegnumberrequiredAngolo di inclinazione del pannello in gradi (0-90)
azimuthDegnumberrequiredAzimut del pannello in gradi (0=Nord, 180=Sud)
panelAreaM2numberrequiredArea totale del pannello in metri quadri
panelEfficiencynumberrequiredEfficienza del pannello (0,0 - 1,0, tipicamente 0,18-0,22)
shadingLossFractionnumberFattore di perdita da ombreggiamento (0,0-1,0, predefinito: 0)

Risposta

annualYieldKwhnumberrequiredResa energetica annuale stimata in kWh
peakPowerKwnumberrequiredPotenza di picco in uscita in kW
specificYieldnumberrequiredResa specifica in kWh/kWp
monthlyKwhnumber[]requiredArray di 12 valori mensili in kWh
sourcestringrequiredIdentificatore della fonte dati ("pvgis")
Richiestabash
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
  }'
Rispostajson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Nessuna autenticazione richiesta

L'endpoint di calcolo solare è disponibile pubblicamente e non richiede una chiave API. Utilizza l'API pubblica PVGIS gestita dal Centro Comune di Ricerca della Commissione Europea.

Solar energy calculation API response
L'API di calcolo solare restituisce resa annuale, potenza di picco e dettaglio mensile
6

Visore incorporato

Incorpora un visore solare 3D interattivo nel tuo sito web usando un iframe. Il visore incorporato include controlli temporali per la simulazione delle ombre e funziona sia su desktop che su mobile.

Parametri URL di incorporamento

latnumberrequiredLatitudine della posizione da visualizzare
lngnumberrequiredLongitudine della posizione da visualizzare
keystringrequiredLa tua chiave API per l'autenticazione
Codice di incorporamento basehtml
<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>
Incorporamento responsive (consigliato)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>

Funzionalità del visore incorporato

Interazione 3D con orbita, panoramica e zoom
Cursore temporale per la simulazione delle ombre
Responsive — funziona su mobile
Modelli fotorealistici Google 3D Tiles
Nessun JavaScript aggiuntivo richiesto
Supporto schermo intero
Embedded 3D viewer in an iframe
Il visore incorporabile include controlli temporali e funziona sia su desktop che su mobile
7

Limiti di frequenza

L'API applica limiti di frequenza per garantire un utilizzo equo e la stabilità del sistema.

Generazione modelli
POST /api/v1/models
10 richieste
per ora, per chiave API
Polling dello stato
GET /api/v1/models/:id
Nessun limite
Interroga secondo necessità
Calcolo solare
POST /api/solar/calculate
Nessun limite
Endpoint pubblico
Visualizzazioni incorporate
GET /embed
Nessun limite
Visualizzazioni illimitate
Risposta limite di frequenza superato (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Gestione errori

L'API utilizza codici di stato HTTP standard. Tutte le risposte di errore includono un corpo JSON con un campo error che descrive il problema.

Codici di stato HTTP

200Successo — richiesta completata con successo
400Richiesta non valida — parametri mancanti o non validi
401Non autorizzato — chiave API mancante o non valida
404Non trovato — l'ID del modello non esiste
429Troppe richieste — limite di frequenza superato
503Servizio non disponibile — servizio esterno (PVGIS) non raggiungibile
Esempio di risposta errorejson
{
  "error": "latitude and longitude are required"
}
Errore di autenticazionejson
{
  "error": "Invalid or revoked API key"
}
9

Webhook

Il supporto webhook per le notifiche di completamento dei modelli è pianificato per una versione futura. Attualmente, usa il polling sull'endpoint di stato per verificare quando i modelli sono pronti.

Prossimamente

I callback webhook invieranno una richiesta POST al tuo URL specificato quando la generazione del modello è completata, eliminando la necessità del polling. Questa funzionalità è nella nostra roadmap.

10

Esempi completi

Esempi completi, pronti per copia e incolla, per scenari di integrazione comuni.

Generare un modello e attendere il completamento

Bash — flusso di lavoro 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

Integrazione JavaScript/Node.js

Node.js — genera e interrogajavascript
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));

Integrazione Python

Python — genera e calcola solarepython
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
Esempi di codice completi in Bash, JavaScript e Python per l'integrazione API

Nuovo su SunTrace3D?

Consulta la Guida utente per una panoramica completa del visore 3D, simulazione delle ombre e funzionalità di analisi dei pannelli solari.

Guida utente