v1STABIL

API-Dokumentation

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

Übersicht

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.

Basis-URL

https://suntrace3d.com/api/v1
REST API
JSON-Anfrage/-Antwort
Bearer Auth
API-Schlüssel-Authentifizierung
HD-Qualität
Alle API-Modelle sind HD

Verfügbare Endpunkte

POST/api/v1/modelsNeues HD-3D-Modell generieren
GET/api/v1/models/:idModellgenerierungsstatus prüfen
POST/api/solar/calculateSolarenergieertrag berechnen
GET/embedEinbettbarer 3D-Viewer (iframe)
GET/api/healthStatusprüfung (keine Authentifizierung erforderlich)
Partner portal showing API keys and usage statistics
Das Partner-Portal — API-Schlüssel verwalten, Nutzungsstatistiken ansehen und Einbettungscode erhalten
2

Authentifizierung

Alle API-Anfragen erfordern Authentifizierung über einen Bearer-Token im Authorization-Header. API-Schlüssel werden über das Partner-Portal verwaltet.

Einen API-Schlüssel erhalten

  1. 1
    Konto erstellen
    Registrieren Sie sich unter /auth/signup, falls Sie noch kein Konto haben.
  2. 2
    Auf Pro upgraden
    Ein Pro-Abonnement ist für den API-Zugang erforderlich. Upgraden Sie über Ihre Kontoeinstellungen.
  3. 3
    API-Schlüssel generieren
    Besuchen Sie das Partner-Portal und klicken Sie auf "Schlüssel erstellen". Kopieren Sie Ihren Schlüssel sofort — er wird nicht erneut angezeigt.
  4. 4
    In Anfragen verwenden
    Fügen Sie den Schlüssel in alle API-Anfragen als Bearer-Token ein.
Authentifizierungs-Headerbash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Halten Sie Ihren API-Schlüssel geheim

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

3

3D-Modell generieren

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.

POST/api/v1/models

Anfragekörper

latitudenumberrequiredBreitengrad des Mittelpunkts (-90 bis 90)
longitudenumberrequiredLängengrad des Mittelpunkts (-180 bis 180)
radiusKmnumberRadius des zu modellierenden Bereichs in km (Standard: 0,3)

Antwort

idstringrequiredEindeutige Modellkennung für Statusabfragen
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringURL zur GLB-Modelldatei (wenn bereit)
progressnumberGenerierungsfortschritt 0–100 (bei Verarbeitung)
stepstringBeschreibung des aktuellen Generierungsschritts
Anfragebash
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
  }'
Antwort (ausstehend)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Antwort (bereit)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"
}

Modell-Caching

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.

API request generating a 3D model
Die API generiert HD-3D-Modelle asynchron — fragen Sie den Status-Endpunkt ab, bis das Modell bereit ist
4

Modellstatus prüfen

Fragen Sie diesen Endpunkt ab, um den Status einer Modellgenerierungsanfrage zu prüfen. Das Modell durchläuft mehrere Phasen: pending → processing → ready.

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

Statuswerte

pendingAuftrag ist in der Warteschlange und wartet auf Bearbeitung durch einen Worker
processingModell wird generiert. Prüfen Sie das Fortschrittsfeld für den Prozentsatz.
readyModell ist bereit. Das Feld modelUrl enthält die Download-URL.
failedGenerierung fehlgeschlagen. Sie können es mit einer neuen Anfrage erneut versuchen.

Abfrageempfehlung

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.

5

Solarenergie berechnen

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.

POST/api/solar/calculate

Anfragekörper

latitudenumberrequiredBreitengrad des Standorts
longitudenumberrequiredLängengrad des Standorts
tiltDegnumberrequiredPanel-Neigungswinkel in Grad (0–90)
azimuthDegnumberrequiredPanel-Azimut in Grad (0=Nord, 180=Süd)
panelAreaM2numberrequiredGesamte Panelfläche in Quadratmetern
panelEfficiencynumberrequiredPanel-Wirkungsgrad (0,0–1,0, typisch 0,18–0,22)
shadingLossFractionnumberVerschattungsverlustfaktor (0,0–1,0, Standard: 0)

Antwort

annualYieldKwhnumberrequiredGeschätzter jährlicher Energieertrag in kWh
peakPowerKwnumberrequiredSpitzenleistung in kW
specificYieldnumberrequiredSpezifischer Ertrag in kWh/kWp
monthlyKwhnumber[]requiredArray mit 12 monatlichen kWh-Werten
sourcestringrequiredDatenquellenkennung ("pvgis")
Anfragebash
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
  }'
Antwortjson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Keine Authentifizierung erforderlich

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.

Solar energy calculation API response
Die Solar-Berechnungs-API gibt jährlichen Ertrag, Spitzenleistung und monatliche Aufschlüsselung zurück
6

Viewer einbetten

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.

Einbettungs-URL-Parameter

latnumberrequiredBreitengrad des anzuzeigenden Standorts
lngnumberrequiredLängengrad des anzuzeigenden Standorts
keystringrequiredIhr API-Schlüssel zur Authentifizierung
Einfacher Einbettungscodehtml
<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>
Responsiver Einbettungscode (empfohlen)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>

Einbettungsfunktionen

Interaktives 3D-Orbit, Schwenken und Zoomen
Zeitschieberegler für Schattensimulation
Responsiv — funktioniert auf Mobilgeräten
Google 3D Tiles fotorealistische Modelle
Kein zusätzliches JavaScript erforderlich
Vollbildunterstützung
Embedded 3D viewer in an iframe
Der einbettbare Viewer enthält Zeitsteuerungen und funktioniert auf Desktop und Mobilgeräten
7

Ratelimits

Die API setzt Ratelimits durch, um faire Nutzung und Systemstabilität sicherzustellen.

Modellgenerierung
POST /api/v1/models
10 Anfragen
pro Stunde, pro API-Schlüssel
Statusabfragen
GET /api/v1/models/:id
Kein Limit
Nach Bedarf abfragen
Solarberechnung
POST /api/solar/calculate
Kein Limit
Öffentlicher Endpunkt
Einbettungsaufrufe
GET /embed
Kein Limit
Unbegrenzte Aufrufe
Ratelimit überschritten (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Fehlerbehandlung

Die API verwendet Standard-HTTP-Statuscodes. Alle Fehlerantworten enthalten einen JSON-Body mit einem Fehlerfeld, das das Problem beschreibt.

HTTP-Statuscodes

200Erfolg — Anfrage erfolgreich abgeschlossen
400Fehlerhafte Anfrage — fehlende oder ungültige Parameter
401Nicht autorisiert — fehlender oder ungültiger API-Schlüssel
404Nicht gefunden — Modell-ID existiert nicht
429Zu viele Anfragen — Ratelimit überschritten
503Dienst nicht verfügbar — externer Dienst (PVGIS) nicht erreichbar
Fehlerantwort-Beispieljson
{
  "error": "latitude and longitude are required"
}
Authentifizierungsfehlerjson
{
  "error": "Invalid or revoked API key"
}
9

Webhooks

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.

Demnächst verfügbar

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.

10

Vollständige Beispiele

Vollständige, kopierbare Beispiele für gängige Integrationsszenarien.

Modell generieren und auf Fertigstellung warten

Bash — vollständiger Arbeitsablaufbash
#!/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

JavaScript/Node.js-Integration

Node.js — Generieren und Abfragenjavascript
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));

Python-Integration

Python — Generieren und Solarberechnungpython
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
Vollständige Codebeispiele in Bash, JavaScript und Python für die API-Integration

Neu bei SunTrace3D?

Lesen Sie das Benutzerhandbuch für eine vollständige Einführung in den 3D-Viewer, die Schattensimulation und die Solarpanel-Analysefunktionen.

Benutzerhandbuch