Die SunTrace3D Partner-API ermöglicht es Ihnen, HD-3D-Stadtmodelle zu generieren, den Solarenergieertrag zu berechnen und interaktive 3D-Viewer auf Ihrer Website einzubetten. Alle Endpunkte verwenden JSON und Standard-HTTP-Methoden.
Als Markdown anzeigen (maschinenlesbar)Die SunTrace3D API ist ein RESTful-Dienst für den programmatischen Zugriff auf 3D-Stadtmodellgenerierung und Solarenergieberechnungen. Die API ist für Partner konzipiert, die Solaranalysen in ihre eigenen Anwendungen, Websites oder Arbeitsabläufe integrieren möchten.
https://suntrace3d.com/api/v1/api/v1/modelsNeues HD-3D-Modell generieren/api/v1/models/:idModellgenerierungsstatus prüfen/api/solar/calculateSolarenergieertrag berechnen/embedEinbettbarer 3D-Viewer (iframe)/api/healthStatusprüfung (keine Authentifizierung erforderlich)
Alle API-Anfragen erfordern Authentifizierung über einen Bearer-Token im Authorization-Header. API-Schlüssel werden über das Partner-Portal verwaltet.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsGeben Sie Ihren API-Schlüssel niemals in clientseitigem JavaScript, öffentlichen Repositories oder Frontend-Code preis. Wenn Ihr Schlüssel kompromittiert wurde, widerrufen Sie ihn sofort im Partner-Portal und erstellen Sie einen neuen.
Fordern Sie die Generierung eines HD-3D-Stadtmodells für einen bestimmten geografischen Standort an. Das Modell wird asynchron generiert — fragen Sie den Status-Endpunkt ab, um zu prüfen, wann es bereit ist.
/api/v1/modelslatitudenumberrequiredBreitengrad des Mittelpunkts (-90 bis 90)longitudenumberrequiredLängengrad des Mittelpunkts (-180 bis 180)radiusKmnumberRadius des zu modellierenden Bereichs in km (Standard: 0,3)idstringrequiredEindeutige Modellkennung für Statusabfragenstatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL zur GLB-Modelldatei (wenn bereit)progressnumberGenerierungsfortschritt 0–100 (bei Verarbeitung)stepstringBeschreibung des aktuellen Generierungsschrittscurl -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"
}Wenn ein Modell für denselben Standort und Radius bereits generiert wurde, gibt die API sofort das zwischengespeicherte Ergebnis mit status: "ready" zurück. Modelle werden 30 Tage in S3 zwischengespeichert. Für zwischengespeicherte Ergebnisse fallen keine Kosten an.

Fragen Sie diesen Endpunkt ab, um den Status einer Modellgenerierungsanfrage zu prüfen. Das Modell durchläuft mehrere Phasen: 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
}Wir empfehlen, alle 5–10 Sekunden abzufragen. Typische Generierungszeiten liegen bei 30–120 Sekunden, abhängig von der Gebietsgröße und Serverauslastung. Das Fortschrittsfeld liefert einen Prozentsatz (0–100), um einen Fortschrittsbalken in Ihrer Benutzeroberfläche anzuzeigen.
Berechnen Sie den jährlichen Solarenergieertrag für eine bestimmte Panel-Konfiguration und einen Standort. Dieser Endpunkt verwendet PVGIS-Satellitendaten (Photovoltaic Geographical Information System) für genaue Einstrahlungswerte.
/api/solar/calculatelatitudenumberrequiredBreitengrad des StandortslongitudenumberrequiredLängengrad des StandortstiltDegnumberrequiredPanel-Neigungswinkel in Grad (0–90)azimuthDegnumberrequiredPanel-Azimut in Grad (0=Nord, 180=Süd)panelAreaM2numberrequiredGesamte Panelfläche in QuadratmeternpanelEfficiencynumberrequiredPanel-Wirkungsgrad (0,0–1,0, typisch 0,18–0,22)shadingLossFractionnumberVerschattungsverlustfaktor (0,0–1,0, Standard: 0)annualYieldKwhnumberrequiredGeschätzter jährlicher Energieertrag in kWhpeakPowerKwnumberrequiredSpitzenleistung in kWspecificYieldnumberrequiredSpezifischer Ertrag in kWh/kWpmonthlyKwhnumber[]requiredArray mit 12 monatlichen kWh-WertensourcestringrequiredDatenquellenkennung ("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"
}Der Solar-Berechnungsendpunkt ist öffentlich zugänglich und erfordert keinen API-Schlüssel. Er nutzt die öffentliche PVGIS-API, die von der Gemeinsamen Forschungsstelle der Europäischen Kommission betrieben wird.

Betten Sie einen interaktiven 3D-Solar-Viewer mit einem iframe auf Ihrer Website ein. Der eingebettete Viewer enthält Zeitsteuerungen für die Schattensimulation und funktioniert auf Desktop und Mobilgeräten.
latnumberrequiredBreitengrad des anzuzeigenden StandortslngnumberrequiredLängengrad des anzuzeigenden StandortskeystringrequiredIhr API-Schlüssel zur Authentifizierung<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>
Die API setzt Ratelimits durch, um faire Nutzung und Systemstabilität sicherzustellen.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}Die API verwendet Standard-HTTP-Statuscodes. Alle Fehlerantworten enthalten einen JSON-Body mit einem Fehlerfeld, das das Problem beschreibt.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}Webhook-Unterstützung für Modellfertigstellungs-Benachrichtigungen ist für ein zukünftiges Release geplant. Verwenden Sie derzeit Polling auf dem Status-Endpunkt, um zu prüfen, wann Modelle bereit sind.
Webhook-Callbacks senden eine POST-Anfrage an Ihre angegebene URL, wenn die Modellgenerierung abgeschlossen ist, wodurch Polling entfällt. Diese Funktion steht auf unserer Roadmap.
Vollständige, kopierbare Beispiele für gängige Integrationsszenarien.
#!/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']}")
Lesen Sie das Benutzerhandbuch für eine vollständige Einführung in den 3D-Viewer, die Schattensimulation und die Solarpanel-Analysefunktionen.
Benutzerhandbuch