v1STABIEL

API-documentatie

De SunTrace3D Partner API stelt u in staat HD 3D-stadsmodellen te genereren, zonne-energieopbrengst te berekenen en interactieve 3D-viewers in te sluiten op uw website. Alle endpoints gebruiken JSON en standaard HTTP-methoden.

1

Overzicht

De SunTrace3D API is een RESTful service voor programmatische toegang tot 3D-stadsmodelgeneratie en zonne-energieberekeningen. De API is ontworpen voor partners die zonneanalyse willen integreren in hun eigen applicaties, websites of workflows.

Basis-URL

https://suntrace3d.com/api/v1
REST API
JSON verzoek/antwoord
Bearer Authenticatie
API-sleutel authenticatie
HD Kwaliteit
Alle API-modellen zijn HD

Beschikbare Endpoints

POST/api/v1/modelsEen nieuw HD 3D-model genereren
GET/api/v1/models/:idModelgeneratiestatus controleren
POST/api/solar/calculateZonne-energieopbrengst berekenen
GET/embedInsluitbare 3D-viewer (iframe)
GET/api/healthGezondheidscontrole (geen auth vereist)
Partner portal showing API keys and usage statistics
Het Partnerportaal — beheer API-sleutels, bekijk gebruiksstatistieken en verkrijg insluitcode
2

Authenticatie

Alle API-verzoeken vereisen authenticatie via een Bearer-token in de Authorization-header. API-sleutels worden beheerd via het Partnerportaal.

Een API-sleutel verkrijgen

  1. 1
    Een account aanmaken
    Registreer op /auth/signup als u dat nog niet heeft gedaan.
  2. 2
    Upgraden naar Business
    Een Business-abonnement (€99/maand) is vereist voor API-toegang. Upgrade via je accountinstellingen of de prijzenpagina.
  3. 3
    Een API-sleutel genereren
    Bezoek het Partnerportaal en klik op "Sleutel Aanmaken". Kopieer uw sleutel direct — deze wordt niet opnieuw getoond.
  4. 4
    Gebruik in verzoeken
    Neem de sleutel op in alle API-verzoeken als Bearer-token.
Authenticatie-headerbash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Houd uw API-sleutel geheim

Stel uw API-sleutel nooit bloot in client-side JavaScript, openbare repositories of front-end code. Als uw sleutel gecompromitteerd is, trek deze dan onmiddellijk in via het Partnerportaal en maak een nieuwe aan.

3

Een 3D-model Genereren

Vraag de generatie van een HD 3D-stadsmodel aan voor een specifieke geografische locatie. Het model wordt asynchroon gegenereerd — poll het statusendpoint om te controleren wanneer het klaar is.

POST/api/v1/models

Verzoekinhoud

latitudenumberrequiredBreedtegraad van het middelpunt (-90 tot 90)
longitudenumberrequiredLengtegraad van het middelpunt (-180 tot 180)
radiusKmnumberRadius van het te modelleren gebied in km (standaard: 0.3)

Antwoord

idstringrequiredUnieke model-ID voor statuspolling
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringURL naar het GLB-modelbestand (wanneer gereed)
progressnumberGeneratievoortgang 0-100 (tijdens verwerking)
stepstringHuidige generatiestapbeschrijving
Verzoekbash
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
  }'
Antwoord (in wachtrij)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Antwoord (gereed)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"
}

Model-caching

Als een model voor dezelfde locatie en radius al is gegenereerd, retourneert de API het gecachte resultaat direct met status: "ready". Modellen worden 30 dagen gecacht in S3. U wordt niet belast voor gecachte resultaten.

API request generating a 3D model
De API genereert HD 3D-modellen asynchroon — poll het statusendpoint totdat gereed
4

Modelstatus Controleren

Poll dit endpoint om de status van een modelgeneratieverzoek te controleren. Het model doorloopt verschillende fasen: pending → processing → ready.

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

Statuswaarden

pendingTaak staat in de wachtrij en wacht op verwerking door een worker
processingModel wordt gegenereerd. Controleer het progress-veld voor het percentage.
readyModel is gereed. Het modelUrl-veld bevat de download-URL.
failedGeneratie mislukt. U kunt opnieuw proberen door een nieuw verzoek aan te maken.

Polling-aanbeveling

We raden aan om elke 5-10 seconden te pollen. Typische generatietijden zijn 30-120 seconden, afhankelijk van de gebiedsgrootte en serverbelasting. Het progress-veld biedt een percentage (0-100) om een voortgangsindicator in uw UI te tonen.

5

Zonne-energie Berekenen

Bereken de jaarlijkse zonne-energieopbrengst voor een specifieke paneelconfiguratie en locatie. Dit endpoint gebruikt PVGIS (Photovoltaic Geographical Information System) satellietdata voor nauwkeurige instralingswaarden.

POST/api/solar/calculate

Verzoekinhoud

latitudenumberrequiredLocatie breedtegraad
longitudenumberrequiredLocatie lengtegraad
tiltDegnumberrequiredPaneelhellingshoek in graden (0-90)
azimuthDegnumberrequiredPaneelazimut in graden (0=Noord, 180=Zuid)
panelAreaM2numberrequiredTotaal paneeloppervlak in vierkante meters
panelEfficiencynumberrequiredPaneelefficiëntie (0.0 - 1.0, doorgaans 0.18-0.22)
shadingLossFractionnumberSchaduwverliesfactor (0.0-1.0, standaard: 0)

Antwoord

annualYieldKwhnumberrequiredGeschatte jaarlijkse energieopbrengst in kWh
peakPowerKwnumberrequiredPiekvermogen in kW
specificYieldnumberrequiredSpecifieke opbrengst in kWh/kWp
monthlyKwhnumber[]requiredArray van 12 maandelijkse kWh-waarden
sourcestringrequiredDatabron-identificatie ("pvgis")
Verzoekbash
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
  }'
Antwoordjson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Geen authenticatie vereist

Het zonneberekeningsendpoint is publiek beschikbaar en vereist geen API-sleutel. Het gebruikt de openbare PVGIS API onderhouden door het Gemeenschappelijk Centrum voor Onderzoek van de Europese Commissie.

Solar energy calculation API response
De zonneberekenings-API retourneert jaarlijkse opbrengst, piekvermogen en maandelijkse uitsplitsing
6

Viewer Insluiten

Sluit een interactieve 3D-zonneviewer in op uw website met een iframe. De ingebedde viewer bevat tijdbesturingen voor schaduwsimulatie en werkt op zowel desktop als mobiel.

Insluit-URL-parameters

latnumberrequiredBreedtegraad van de weer te geven locatie
lngnumberrequiredLengtegraad van de weer te geven locatie
keystringrequiredUw API-sleutel voor authenticatie
Basis Insluitcodehtml
<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>
Responsieve Insluiting (aanbevolen)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>

Insluitfuncties

Interactief 3D draaien, verschuiven en zoomen
Tijdschuif voor schaduwsimulatie
Responsief — werkt op mobiel
Fotorealistische Google 3D Tiles-modellen
Geen extra JavaScript vereist
Volledig scherm-ondersteuning
Embedded 3D viewer in an iframe
De insluitbare viewer bevat tijdbesturingen en werkt op zowel desktop als mobiel
7

Tarieflimieten

De API hanteert tarieflimieten om eerlijk gebruik en systeemstabiliteit te garanderen.

Modelgeneratie
POST /api/v1/models
10 verzoeken
per uur, per API-sleutel
Statuspolling
GET /api/v1/models/:id
Geen limiet
Poll naar behoefte
Zonneberekening
POST /api/solar/calculate
Geen limiet
Publiek endpoint
Insluitweergaven
GET /embed
Geen limiet
Onbeperkte weergaven
Tarieflimiet Overschreden Antwoord (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Foutafhandeling

De API gebruikt standaard HTTP-statuscodes. Alle foutantwoorden bevatten een JSON-body met een error-veld dat het probleem beschrijft.

HTTP-statuscodes

200Succes — verzoek succesvol voltooid
400Ongeldig Verzoek — ontbrekende of ongeldige parameters
401Niet Geautoriseerd — ontbrekende of ongeldige API-sleutel
404Niet Gevonden — model-ID bestaat niet
429Te Veel Verzoeken — tarieflimiet overschreden
503Service Niet Beschikbaar — externe service (PVGIS) is uitgevallen
Voorbeeld Foutantwoordjson
{
  "error": "latitude and longitude are required"
}
Authenticatiefoutjson
{
  "error": "Invalid or revoked API key"
}
9

Webhooks

Webhook-ondersteuning voor modelcompletionmeldingen is gepland voor een toekomstige release. Gebruik momenteel polling op het statusendpoint om te controleren wanneer modellen gereed zijn.

Binnenkort Beschikbaar

Webhook-callbacks sturen een POST-verzoek naar uw opgegeven URL wanneer modelgeneratie is voltooid, waardoor polling overbodig wordt. Deze functie staat op onze roadmap.

10

Volledige Voorbeelden

Volledige, kopieer-en-plak voorbeelden voor veelvoorkomende integratiescenario's.

Een model genereren en wachten op voltooiing

Bash — volledige workflowbash
#!/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 integratie

Node.js — genereren en pollenjavascript
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 integratie

Python — genereren en zonneberekeningpython
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
Volledige codevoorbeelden in Bash, JavaScript en Python voor API-integratie
11

AI-agent-integratie

AI-agenten (chatbots, virtuele assistenten) kunnen sessies aanmaken om gebruikers door te sturen naar SunTrace3D met vooraf geconfigureerde Solar Wizard-instellingen en optionele automatische dakdetectie. Het 3D-model wordt gegenereerd wanneer de gebruiker de link opent (~1-2 minuten).

Endpoints

POST/api/mcp-sessionsCreate agent session with wizard params
GET/api/mcp-sessions/:idCheck session & model status
POST/api/mcp-sessions

Request Parameters

agentNamestringrequiredAgent-identificatie (vereist)
latitudenumberrequiredLocation center latitude
longitudenumberrequiredLocation center longitude
wizardGoalstringVoorinstelling wizard-doel
wizardKwhnumberMaandelijkse kWh voor cover_bill
roofLatnumberDak-breedtegraad voor auto-klik
roofLngnumberDak-lengtegraad voor auto-klik
POST /api/mcp-sessionsjson
{
  "agentName": "ChatGPT",
  "latitude": 44.8699,
  "longitude": 13.8420,
  "wizardGoal": "cover_bill",
  "wizardKwh": 350,
  "roofLat": 44.8701,
  "roofLng": 13.8418
}
Responsejson
{
  "sessionId": "clxyz...",
  "viewerUrl": "https://suntrace3d.com/viewer?session=clxyz...&lat=44.869900&lng=13.842000&wizard=cover_bill&wizardKwh=350&roofLat=44.8701000&roofLng=13.8418000",
  "status": "created",
  "modelStatus": "not_generated",
  "agentName": "ChatGPT"
}

No pre-generation: Agent sessions do not trigger model generation. The 3D model generates when the user opens the viewer link (~1-2 minutes, loading animation shown). Pro users automatically get HD quality; free users get SD.

Recommended Workflows

Met dakcoördinaten
Precieze dakcoördinaten opgeven voor automatische paneelplaatsing. Beste UX — gebruiker klikt op de link, model wordt geladen, panelen worden automatisch geplaatst.
Handmatige dakselectie
De gebruiker de exacte daklocatie laten kiezen. De wizard opent en wacht tot de gebruiker op zijn dak klikt.
Directe URL
Een viewer-URL direct samenstellen zonder API-aanroep. Eenvoudigste integratie, geen sessietracking.

URL Parameters (Viewer)

wizardstringWizard-doel voorselecteren
wizardKwhnumberMaandelijkse kWh voor cover_bill
roofLatnumberAuto-klik dak-breedtegraad
roofLngnumberAuto-klik dak-lengtegraad
sessionstringMCP-sessie-ID (automatisch ingevoegd door API)

Python Example

Python — create session and send link to userpython
import requests

def create_solar_link(lat, lng, roof_lat=None, roof_lng=None, monthly_kwh=None):
    """Create an agent session and return the viewer URL."""
    payload = {
        "agentName": "MySolarBot",
        "latitude": lat,
        "longitude": lng,
        "wizardGoal": "cover_bill" if monthly_kwh else "maximize_energy",
    }
    if monthly_kwh:
        payload["wizardKwh"] = monthly_kwh
    if roof_lat is not None and roof_lng is not None:
        payload["roofLat"] = roof_lat
        payload["roofLng"] = roof_lng

    res = requests.post("https://suntrace3d.com/api/mcp-sessions", json=payload)
    res.raise_for_status()
    return res.json()["viewerUrl"]

# Usage — send this link to the user
url = create_solar_link(
    lat=44.8699, lng=13.8420,
    roof_lat=44.8701, roof_lng=13.8418,
    monthly_kwh=350,
)
print(f"Send this to your user: {url}")
# User clicks -> model generates (~1-2 min) -> wizard auto-opens -> panels placed

Important Notes

  • Elk API-verzoek moet een agentName bevatten die de aanroepende agent identificeert. Dit is vereist voor analyse en gebruiksregistratie.
  • roofLat/roofLng moeten zo nauwkeurig mogelijk naar het midden van het gewenste dakoppervlak wijzen. Het systeem voert een raycast naar beneden uit op dat GPS-punt.
  • Wanneer roofLat/roofLng worden opgegeven, probeert het systeem automatisch het dakoppervlak op die coördinaten te detecteren. Als de automatische detectie mislukt, kan de gebruiker handmatig klikken of "Opnieuw Beginnen" gebruiken.
  • Gebruikers kunnen altijd op "Opnieuw Beginnen" klikken om automatisch geplaatste panelen te verwijderen en een ander dak te selecteren.
  • De Solar Wizard vereist een Pro-abonnement. Gratis gebruikers zien een upgrade-verzoek.
  • Agent-sessies genereren geen modellen vooraf. Het 3D-model wordt gegenereerd wanneer de gebruiker de link opent (~1-2 minuten). Pro-gebruikers krijgen HD, gratis gebruikers krijgen SD.

Nieuw bij SunTrace3D?

Bekijk de Handleiding voor een volledig overzicht van de 3D-viewer, schaduwsimulatie en zonnepaneelanalysefuncties.

Handleiding