v1STABIL

Documentație API

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

Prezentare Generală

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.

URL de Bază

https://suntrace3d.com/api/v1
API REST
Cerere/răspuns JSON
Autentificare Bearer
Autentificare cu cheie API
Calitate HD
Toate modelele API sunt HD

Endpoint-uri Disponibile

POST/api/v1/modelsGenerează un nou model 3D HD
GET/api/v1/models/:idVerifică starea generării modelului
POST/api/solar/calculateCalculează producția de energie solară
GET/embedVizualizator 3D integrabil (iframe)
GET/api/healthVerificare funcționalitate (fără autentificare necesară)
Partner portal showing API keys and usage statistics
Portalul pentru Parteneri — gestionează cheile API, vizualizează statisticile de utilizare și obține codul de integrare
2

Autentificare

Toate cererile API necesită autentificare prin token Bearer în antetul Authorization. Cheile API sunt gestionate prin Portalul pentru Parteneri.

Obținerea unei chei API

  1. 1
    Creează un cont
    Înregistrează-te la /auth/signup dacă nu ai făcut-o deja.
  2. 2
    Fă upgrade la Pro
    Un abonament Pro este necesar pentru accesul la API. Fă upgrade din setările contului.
  3. 3
    Generează o cheie API
    Vizitează Portalul pentru Parteneri și dă clic pe „Creează Cheie”. Copiază cheia imediat — nu va mai fi afișată din nou.
  4. 4
    Folosește în cereri
    Include cheia în toate cererile API ca token Bearer.
Antet de Autentificarebash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Păstrează cheia API secretă

Nu 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ă.

3

Generarea unui Model 3D

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.

POST/api/v1/models

Corpul Cererii

latitudenumberrequiredLatitudinea punctului central (-90 la 90)
longitudenumberrequiredLongitudinea punctului central (-180 la 180)
radiusKmnumberRaza zonei de modelat în km (implicit: 0.3)

Răspuns

idstringrequiredIdentificator unic al modelului pentru interogarea stării
statusstringrequired"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 generare
Cererebash
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
  }'
Răspuns (în așteptare)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Răspuns (gata)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"
}

Cache-ul modelelor

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.

API request generating a 3D model
API-ul generează modele 3D HD asincron — interoghează endpoint-ul de stare până este gata
4

Verificarea Stării Modelului

Interoghează acest endpoint pentru a verifica starea unei cereri de generare a modelului. Modelul parcurge mai multe etape: pending → processing → ready.

GET/api/v1/models/:id
Cererebash
curl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
  -H "Authorization: Bearer YOUR_API_KEY"
Răspuns (în procesare)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "processing",
  "progress": 65,
  "step": "Generating textures..."
}
Răspuns (gata)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
}

Valori de Stare

pendingSarcina este în coadă și așteaptă să fie preluată de un worker
processingModelul este în curs de generare. Verifică câmpul progress pentru procentaj.
readyModelul este gata. Câmpul modelUrl conține URL-ul de descărcare.
failedGenerarea a eșuat. Poți reîncerca creând o nouă cerere.

Recomandare de interogare

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.

5

Calculul Energiei Solare

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.

POST/api/solar/calculate

Corpul Cererii

latitudenumberrequiredLatitudinea locației
longitudenumberrequiredLongitudinea locației
tiltDegnumberrequiredUnghiul 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ți
panelEfficiencynumberrequiredEficiența panoului (0.0 - 1.0, de obicei 0.18-0.22)
shadingLossFractionnumberFactorul pierderilor de umbrire (0.0-1.0, implicit: 0)

Răspuns

annualYieldKwhnumberrequiredProducția anuală estimată de energie în kWh
peakPowerKwnumberrequiredPuterea de vârf în kW
specificYieldnumberrequiredProducția specifică în kWh/kWp
monthlyKwhnumber[]requiredVector cu 12 valori lunare în kWh
sourcestringrequiredIdentificatorul sursei de date ("pvgis")
Cererebash
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
  }'
Răspunsjson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Nu necesită autentificare

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.

Solar energy calculation API response
API-ul de calcul solar returnează producția anuală, puterea de vârf și defalcarea lunară
6

Integrarea Vizualizatorului

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.

Parametrii URL-ului de Integrare

latnumberrequiredLatitudinea locației de afișat
lngnumberrequiredLongitudinea locației de afișat
keystringrequiredCheia ta API pentru autentificare
Cod de Integrare de Bazăhtml
<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>
Integrare Responsivă (recomandat)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>

Funcționalitățile integrării

Orbitare, panoramare și zoom 3D interactiv
Cursor de timp pentru simularea umbrelor
Responsiv — funcționează pe mobil
Modele fotorealiste Google 3D Tiles
Nu necesită JavaScript suplimentar
Suport pentru ecran complet
Embedded 3D viewer in an iframe
Vizualizatorul integrabil include controale de timp și funcționează atât pe desktop, cât și pe mobil
7

Limite de Rată

API-ul impune limite de rată pentru a asigura utilizarea echitabilă și stabilitatea sistemului.

Generarea Modelelor
POST /api/v1/models
10 cereri
pe oră, per cheie API
Interogarea Stării
GET /api/v1/models/:id
Fără limită
Interoghează după necesitate
Calculul Solar
POST /api/solar/calculate
Fără limită
Endpoint public
Vizualizări Integrate
GET /embed
Fără limită
Vizualizări nelimitate
Răspuns Limită de Rată Depășită (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Gestionarea Erorilor

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.

Coduri de Stare HTTP

200Succes — cererea s-a finalizat cu succes
400Cerere Invalidă — parametri lipsă sau invalizi
401Neautorizat — cheie API lipsă sau invalidă
404Negăsit — ID-ul modelului nu există
429Prea Multe Cereri — limita de rată depășită
503Serviciu Indisponibil — serviciul extern (PVGIS) este nefuncțional
Exemplu Răspuns Eroarejson
{
  "error": "latitude and longitude are required"
}
Eroare de Autentificarejson
{
  "error": "Invalid or revoked API key"
}
9

Webhook-uri

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.

În Curând

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.

10

Exemple Complete

Exemple complete, gata de copiat, pentru scenarii comune de integrare.

Generează un model și așteaptă finalizarea

Bash — flux complet de lucrubash
#!/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

Integrare JavaScript/Node.js

Node.js — generare și interogarejavascript
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));

Integrare Python

Python — generare și calcul solarpython
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
Exemple complete de cod în Bash, JavaScript și Python pentru integrarea API

Ești nou pe SunTrace3D?

Consultă Ghidul Utilizatorului pentru un tur complet al vizualizatorului 3D, simularea umbrelor și funcționalitățile de analiză a panourilor solare.

Ghidul Utilizatorului