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)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.
https://suntrace3d.com/api/v1/api/v1/modelsEen nieuw HD 3D-model genereren/api/v1/models/:idModelgeneratiestatus controleren/api/solar/calculateZonne-energieopbrengst berekenen/embedInsluitbare 3D-viewer (iframe)/api/healthGezondheidscontrole (geen auth vereist)
Alle API-verzoeken vereisen authenticatie via een Bearer-token in de Authorization-header. API-sleutels worden beheerd via het Partnerportaal.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsStel 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.
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.
/api/v1/modelslatitudenumberrequiredBreedtegraad van het middelpunt (-90 tot 90)longitudenumberrequiredLengtegraad van het middelpunt (-180 tot 180)radiusKmnumberRadius van het te modelleren gebied in km (standaard: 0.3)idstringrequiredUnieke model-ID voor statuspollingstatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL naar het GLB-modelbestand (wanneer gereed)progressnumberGeneratievoortgang 0-100 (tijdens verwerking)stepstringHuidige generatiestapbeschrijvingcurl -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"
}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.

Poll dit endpoint om de status van een modelgeneratieverzoek te controleren. Het model doorloopt verschillende fasen: 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
}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.
Bereken de jaarlijkse zonne-energieopbrengst voor een specifieke paneelconfiguratie en locatie. Dit endpoint gebruikt PVGIS (Photovoltaic Geographical Information System) satellietdata voor nauwkeurige instralingswaarden.
/api/solar/calculatelatitudenumberrequiredLocatie breedtegraadlongitudenumberrequiredLocatie lengtegraadtiltDegnumberrequiredPaneelhellingshoek in graden (0-90)azimuthDegnumberrequiredPaneelazimut in graden (0=Noord, 180=Zuid)panelAreaM2numberrequiredTotaal paneeloppervlak in vierkante meterspanelEfficiencynumberrequiredPaneelefficiëntie (0.0 - 1.0, doorgaans 0.18-0.22)shadingLossFractionnumberSchaduwverliesfactor (0.0-1.0, standaard: 0)annualYieldKwhnumberrequiredGeschatte jaarlijkse energieopbrengst in kWhpeakPowerKwnumberrequiredPiekvermogen in kWspecificYieldnumberrequiredSpecifieke opbrengst in kWh/kWpmonthlyKwhnumber[]requiredArray van 12 maandelijkse kWh-waardensourcestringrequiredDatabron-identificatie ("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"
}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.

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.
latnumberrequiredBreedtegraad van de weer te geven locatielngnumberrequiredLengtegraad van de weer te geven locatiekeystringrequiredUw API-sleutel voor authenticatie<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>
De API hanteert tarieflimieten om eerlijk gebruik en systeemstabiliteit te garanderen.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}De API gebruikt standaard HTTP-statuscodes. Alle foutantwoorden bevatten een JSON-body met een error-veld dat het probleem beschrijft.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}Webhook-ondersteuning voor modelcompletionmeldingen is gepland voor een toekomstige release. Gebruik momenteel polling op het statusendpoint om te controleren wanneer modellen gereed zijn.
Webhook-callbacks sturen een POST-verzoek naar uw opgegeven URL wanneer modelgeneratie is voltooid, waardoor polling overbodig wordt. Deze functie staat op onze roadmap.
Volledige, kopieer-en-plak voorbeelden voor veelvoorkomende integratiescenario's.
#!/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']}")
Bekijk de Handleiding voor een volledig overzicht van de 3D-viewer, schaduwsimulatie en zonnepaneelanalysefuncties.
Handleiding