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.

Bekijk als Markdown (machineleesbaar)
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 Pro
    Een Pro-abonnement is vereist voor API-toegang. Upgrade vanuit uw accountinstellingen.
  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

Nieuw bij SunTrace3D?

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

Handleiding