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)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.
https://suntrace3d.com/api/v1/api/v1/modelsGenerare un nuovo modello 3D HD/api/v1/models/:idControllare lo stato della generazione del modello/api/solar/calculateCalcolare la resa energetica solare/embedVisore 3D incorporabile (iframe)/api/healthControllo stato (nessuna autenticazione richiesta)
Tutte le richieste API richiedono autenticazione tramite un token Bearer nell'intestazione Authorization. Le chiavi API vengono gestite tramite il Portale Partner.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsNon 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.
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.
/api/v1/modelslatitudenumberrequiredLatitudine del punto centrale (-90 a 90)longitudenumberrequiredLongitudine del punto centrale (-180 a 180)radiusKmnumberRaggio dell'area da modellare in km (predefinito: 0,3)idstringrequiredIdentificatore unico del modello per il polling dello statostatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL del file GLB del modello (quando pronto)progressnumberProgresso generazione 0-100 (durante l'elaborazione)stepstringDescrizione del passo di generazione correntecurl -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 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.

Interroga questo endpoint per verificare lo stato di una richiesta di generazione modello. Il modello attraversa diverse fasi: 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
}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.
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.
/api/solar/calculatelatitudenumberrequiredLatitudine della posizionelongitudenumberrequiredLongitudine della posizionetiltDegnumberrequiredAngolo di inclinazione del pannello in gradi (0-90)azimuthDegnumberrequiredAzimut del pannello in gradi (0=Nord, 180=Sud)panelAreaM2numberrequiredArea totale del pannello in metri quadripanelEfficiencynumberrequiredEfficienza del pannello (0,0 - 1,0, tipicamente 0,18-0,22)shadingLossFractionnumberFattore di perdita da ombreggiamento (0,0-1,0, predefinito: 0)annualYieldKwhnumberrequiredResa energetica annuale stimata in kWhpeakPowerKwnumberrequiredPotenza di picco in uscita in kWspecificYieldnumberrequiredResa specifica in kWh/kWpmonthlyKwhnumber[]requiredArray di 12 valori mensili in kWhsourcestringrequiredIdentificatore della fonte dati ("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"
}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.

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.
latnumberrequiredLatitudine della posizione da visualizzarelngnumberrequiredLongitudine della posizione da visualizzarekeystringrequiredLa tua chiave API per l'autenticazione<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>
L'API applica limiti di frequenza per garantire un utilizzo equo e la stabilità del sistema.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}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.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}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.
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.
Esempi completi, pronti per copia e incolla, per scenari di integrazione comuni.
#!/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']}")
Consulta la Guida utente per una panoramica completa del visore 3D, simulazione delle ombre e funzionalità di analisi dei pannelli solari.
Guida utente