API-ul SunTrace3D pentru Parteneri îți permite să generezi modele 3D HD ale orașelor, să calculezi producția de energie solară și să integrezi vizualizatoare 3D interactive pe site-ul tău. Toate endpoint-urile folosesc JSON și metode HTTP standard.
Vizualizează ca Markdown (format pentru mașini)API-ul SunTrace3D este un serviciu RESTful pentru acces programatic la generarea modelelor 3D ale orașelor și calculele de energie solară. API-ul este conceput pentru parteneri care doresc să integreze analiza solară în propriile aplicații, site-uri web sau fluxuri de lucru.
https://suntrace3d.com/api/v1/api/v1/modelsGenerează un nou model 3D HD/api/v1/models/:idVerifică starea generării modelului/api/solar/calculateCalculează producția de energie solară/embedVizualizator 3D integrabil (iframe)/api/healthVerificare funcționalitate (fără autentificare necesară)
Toate cererile API necesită autentificare prin token Bearer în antetul Authorization. Cheile API sunt gestionate prin Portalul pentru Parteneri.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsNu expune niciodată cheia API în JavaScript client-side, depozite publice sau cod front-end. Dacă cheia ta este compromisă, revoc-o imediat din Portalul pentru Parteneri și creează una nouă.
Solicită generarea unui model 3D HD al orașului pentru o locație geografică specifică. Modelul este generat asincron — interoghează endpoint-ul de stare pentru a verifica când este gata.
/api/v1/modelslatitudenumberrequiredLatitudinea punctului central (-90 la 90)longitudenumberrequiredLongitudinea punctului central (-180 la 180)radiusKmnumberRaza zonei de modelat în km (implicit: 0.3)idstringrequiredIdentificator unic al modelului pentru interogarea stăriistatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL-ul fișierului GLB al modelului (când este gata)progressnumberProgresul generării 0-100 (în procesare)stepstringDescrierea pasului curent de generarecurl -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"
}Dacă un model pentru aceeași locație și rază a fost deja generat, API-ul returnează rezultatul din cache imediat cu status: "ready". Modelele sunt stocate în cache în S3 timp de 30 de zile. Nu ești taxat pentru rezultatele din cache.

Interoghează acest endpoint pentru a verifica starea unei cereri de generare a modelului. Modelul parcurge mai multe etape: 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
}Recomandăm interogarea la fiecare 5-10 secunde. Timpii tipici de generare sunt de 30-120 secunde în funcție de dimensiunea zonei și încărcarea serverului. Câmpul progress oferă un procentaj (0-100) pentru a afișa un indicator de progres în interfața ta.
Calculează producția anuală de energie solară pentru o configurație specifică a panoului și o locație. Acest endpoint folosește datele prin satelit PVGIS (Photovoltaic Geographical Information System) pentru valori precise de irradiere.
/api/solar/calculatelatitudenumberrequiredLatitudinea locațieilongitudenumberrequiredLongitudinea locațieitiltDegnumberrequiredUnghiul de înclinare al panoului în grade (0-90)azimuthDegnumberrequiredAzimutul panoului în grade (0=Nord, 180=Sud)panelAreaM2numberrequiredSuprafața totală a panoului în metri pătrațipanelEfficiencynumberrequiredEficiența panoului (0.0 - 1.0, de obicei 0.18-0.22)shadingLossFractionnumberFactorul pierderilor de umbrire (0.0-1.0, implicit: 0)annualYieldKwhnumberrequiredProducția anuală estimată de energie în kWhpeakPowerKwnumberrequiredPuterea de vârf în kWspecificYieldnumberrequiredProducția specifică în kWh/kWpmonthlyKwhnumber[]requiredVector cu 12 valori lunare în kWhsourcestringrequiredIdentificatorul sursei de date ("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"
}Endpoint-ul de calcul solar este disponibil public și nu necesită o cheie API. Folosește API-ul public PVGIS menținut de Centrul Comun de Cercetare al Comisiei Europene.

Integrează un vizualizator 3D solar interactiv pe site-ul tău folosind un iframe. Vizualizatorul integrat include controale de timp pentru simularea umbrelor și funcționează atât pe desktop, cât și pe mobil.
latnumberrequiredLatitudinea locației de afișatlngnumberrequiredLongitudinea locației de afișatkeystringrequiredCheia ta API pentru autentificare<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>
API-ul impune limite de rată pentru a asigura utilizarea echitabilă și stabilitatea sistemului.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}API-ul folosește coduri de stare HTTP standard. Toate răspunsurile de eroare includ un corp JSON cu un câmp error care descrie problema.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}Suportul webhook pentru notificări la finalizarea modelului este planificat pentru o versiune viitoare. În prezent, folosește interogarea endpoint-ului de stare pentru a verifica când modelele sunt gata.
Callback-urile webhook vor trimite o cerere POST la URL-ul tău specificat când generarea modelului se finalizează, eliminând necesitatea interogării. Această funcționalitate este pe lista noastră de dezvoltare.
Exemple complete, gata de copiat, pentru scenarii comune de integrare.
#!/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']}")
Consultă Ghidul Utilizatorului pentru un tur complet al vizualizatorului 3D, simularea umbrelor și funcționalitățile de analiză a panourilor solare.
Ghidul Utilizatorului