v1STABILNÍ

API dokumentace

SunTrace3D Partner API umožňuje generovat HD 3D modely měst, počítat výnos solární energie a vkládat interaktivní 3D prohlížeče na váš web. Všechny endpointy používají JSON a standardní HTTP metody.

1

Přehled

SunTrace3D API je RESTful služba pro programový přístup ke generování 3D modelů měst a výpočtům solární energie. API je navrženo pro partnery, kteří chtějí integrovat solární analýzu do svých aplikací, webů nebo pracovních postupů.

Základní URL

https://suntrace3d.com/api/v1
REST API
JSON požadavek/odpověď
Bearer Auth
Autentizace API klíčem
HD kvalita
Všechny API modely jsou HD

Dostupné endpointy

POST/api/v1/modelsVygenerovat nový HD 3D model
GET/api/v1/models/:idZkontrolovat stav generování modelu
POST/api/solar/calculateVypočítat výnos solární energie
GET/embedVložitelný 3D prohlížeč (iframe)
GET/api/healthKontrola stavu (bez autentizace)
Partner portal showing API keys and usage statistics
Partnerský portál — správa API klíčů, zobrazení statistik použití a získání kódu pro vložení
2

Autentizace

Všechny API požadavky vyžadují autentizaci pomocí Bearer tokenu v hlavičce Authorization. API klíče se spravují přes Partnerský portál.

Získání API klíče

  1. 1
    Vytvořte účet
    Zaregistrujte se na /auth/signup, pokud jste tak ještě neučinili.
  2. 2
    Upgrade na Business
    Pro přístup k API je vyžadováno předplatné Business (99 €/měsíc). Upgradujte v nastavení účtu nebo na stránce s cenami.
  3. 3
    Vygenerujte API klíč
    Navštivte Partnerský portál a klikněte na „Vytvořit klíč“. Zkopírujte klíč ihned — znovu se již nezobrazí.
  4. 4
    Použijte v požadavcích
    Použijte klíč ve všech API požadavcích jako Bearer token.
Autentizační hlavičkabash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Udržujte svůj API klíč v tajnosti

Nikdy nevystavujte svůj API klíč v klientském JavaScriptu, veřejných repozitářích ani front-endovém kódu. Pokud je váš klíč kompromitován, ihned ho zrušte v Partnerském portálu a vytvořte nový.

3

Generování 3D modelu

Požádejte o vygenerování HD 3D modelu města pro konkrétní geografickou polohu. Model se generuje asynchronně — dotazujte se na stavový endpoint, abyste zjistili, kdy je připraven.

POST/api/v1/models

Tělo požadavku

latitudenumberrequiredZeměpisná šířka středového bodu (-90 až 90)
longitudenumberrequiredZeměpisná délka středového bodu (-180 až 180)
radiusKmnumberPoloměr modelované oblasti v km (výchozí: 0.3)

Odpověď

idstringrequiredJedinečný identifikátor modelu pro dotazování stavu
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringURL k souboru GLB modelu (když je připraven)
progressnumberPrůběh generování 0–100 (při zpracování)
stepstringPopis aktuálního kroku generování
Požadavekbash
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
  }'
Odpověď (čekající)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Odpověď (připravená)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"
}

Cachování modelů

Pokud již byl model pro stejné místo a poloměr vygenerován, API okamžitě vrátí cachovaný výsledek se stavem: "ready". Modely jsou cachovány v S3 po dobu 30 dnů. Za cachované výsledky neplatíte.

API request generating a 3D model
API generuje HD 3D modely asynchronně — dotazujte se na stavový endpoint, dokud nebude připraven
4

Kontrola stavu modelu

Dotazujte se na tento endpoint pro kontrolu stavu generování modelu. Model prochází několika fázemi: pending → processing → ready.

GET/api/v1/models/:id
Požadavekbash
curl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
  -H "Authorization: Bearer YOUR_API_KEY"
Odpověď (zpracovává se)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "processing",
  "progress": 65,
  "step": "Generating textures..."
}
Odpověď (připravená)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
}

Hodnoty stavu

pendingÚloha je ve frontě a čeká na zpracování workerem
processingModel se generuje. Zkontrolujte pole progress pro procento.
readyModel je připraven. Pole modelUrl obsahuje URL ke stažení.
failedGenerování selhalo. Můžete to zkusit znovu vytvořením nového požadavku.

Doporučení pro dotazování

Doporučujeme dotazování každých 5–10 sekund. Typické časy generování jsou 30–120 sekund v závislosti na velikosti oblasti a zatížení serveru. Pole progress poskytuje procento (0–100) pro zobrazení ukazatele průběhu ve vašem UI.

5

Výpočet solární energie

Vypočítejte roční výnos solární energie pro konkrétní konfiguraci panelu a místo. Tento endpoint používá satelitní data PVGIS (Photovoltaic Geographical Information System) pro přesné hodnoty ožáření.

POST/api/solar/calculate

Tělo požadavku

latitudenumberrequiredZeměpisná šířka místa
longitudenumberrequiredZeměpisná délka místa
tiltDegnumberrequiredÚhel sklonu panelu ve stupních (0–90)
azimuthDegnumberrequiredAzimut panelu ve stupních (0=sever, 180=jih)
panelAreaM2numberrequiredCelková plocha panelů v metrech čtverečních
panelEfficiencynumberrequiredÚčinnost panelu (0.0–1.0, typicky 0.18–0.22)
shadingLossFractionnumberFaktor ztrát zastíněním (0.0–1.0, výchozí: 0)

Odpověď

annualYieldKwhnumberrequiredOdhadovaný roční energetický výnos v kWh
peakPowerKwnumberrequiredŠpičkový výkon v kW
specificYieldnumberrequiredSpecifický výnos v kWh/kWp
monthlyKwhnumber[]requiredPole 12 měsíčních hodnot kWh
sourcestringrequiredIdentifikátor zdroje dat ("pvgis")
Požadavekbash
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
  }'
Odpověďjson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Autentizace není vyžadována

Endpoint pro solární výpočty je veřejně dostupný a nevyžaduje API klíč. Používá veřejné API PVGIS spravované Společným výzkumným střediskem Evropské komise.

Solar energy calculation API response
API pro solární výpočty vrací roční výnos, špičkový výkon a měsíční rozpis
6

Vložitelný prohlížeč

Vložte interaktivní 3D solární prohlížeč na svůj web pomocí iframe. Vložený prohlížeč obsahuje ovládání času pro simulaci stínů a funguje na počítači i mobilu.

Parametry URL pro vložení

latnumberrequiredZeměpisná šířka místa k zobrazení
lngnumberrequiredZeměpisná délka místa k zobrazení
keystringrequiredVáš API klíč pro autentizaci
Základní kód pro vložení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>
Responzivní vložení (doporučené)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>

Funkce vložení

Interaktivní 3D orbit, posun a zoom
Posuvník času pro simulaci stínů
Responzivní — funguje na mobilu
Fotorealistické modely Google 3D Tiles
Není potřeba další JavaScript
Podpora celé obrazovky
Embedded 3D viewer in an iframe
Vložitelný prohlížeč obsahuje ovládání času a funguje na počítači i mobilu
7

Limity požadavků

API vynucuje limity požadavků pro zajištění spravedlivého používání a stability systému.

Generování modelů
POST /api/v1/models
10 požadavků
za hodinu, na API klíč
Dotazování stavu
GET /api/v1/models/:id
Bez limitu
Dotazujte se dle potřeby
Solární výpočet
POST /api/solar/calculate
Bez limitu
Veřejný endpoint
Zobrazení vložení
GET /embed
Bez limitu
Neomezený počet zobrazení
Odpověď při překročení limitu (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Zpracování chyb

API používá standardní HTTP stavové kódy. Všechny chybové odpovědi obsahují JSON tělo s polem error popisujícím problém.

HTTP stavové kódy

200Úspěch — požadavek úspěšně dokončen
400Chybný požadavek — chybějící nebo neplatné parametry
401Neautorizováno — chybějící nebo neplatný API klíč
404Nenalezeno — ID modelu neexistuje
429Příliš mnoho požadavků — limit překročen
503Služba nedostupná — externí služba (PVGIS) je nedostupná
Příklad chybové odpovědijson
{
  "error": "latitude and longitude are required"
}
Chyba autentizacejson
{
  "error": "Invalid or revoked API key"
}
9

Webhooky

Podpora webhooků pro oznámení o dokončení modelu je plánována pro budoucí verzi. Aktuálně používejte dotazování stavového endpointu pro kontrolu připravenosti modelů.

Již brzy

Webhook callbacky zašlou POST požadavek na vaši zadanou URL po dokončení generování modelu, čímž se eliminuje potřeba dotazování. Tato funkce je v našem plánu.

10

Úplné příklady

Kompletní příklady ke zkopírování pro běžné integrační scénáře.

Vygenerovat model a počkat na dokončení

Bash — kompletní pracovní postupbash
#!/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

Integrace JavaScript/Node.js

Node.js — generování a dotazováníjavascript
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));

Integrace Python

Python — generování a solární výpočetpython
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
Kompletní ukázky kódu v Bash, JavaScript a Python pro integraci API
11

Integrace AI agentů

AI agenti (chatboti, virtuální asistenti) mohou vytvářet relace pro přesměrování uživatelů do SunTrace3D s předkonfigurovaným nastavením Solar Wizard a volitelnou automatickou detekcí střechy. 3D model se generuje, když uživatel otevře odkaz (~1-2 minuty).

Endpoints

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

Request Parameters

agentNamestringrequiredIdentifikátor agenta (vyžadováno)
latitudenumberrequiredLocation center latitude
longitudenumberrequiredLocation center longitude
wizardGoalstringPřednastavení cíle wizardu
wizardKwhnumberMěsíční kWh pro cover_bill
roofLatnumberZeměpisná šířka střechy pro auto-klik
roofLngnumberZeměpisná délka střechy pro 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

Se souřadnicemi střechy
Poskytněte přesné souřadnice střechy pro automatické umístění panelů. Nejlepší UX — uživatel klikne na odkaz, model se načte, panely se umístí automaticky.
Ruční výběr střechy
Nechte uživatele vybrat přesné místo střechy. Průvodce se otevře a čeká, až uživatel klikne na svou střechu.
Přímá URL
Sestavit URL prohlížeče přímo bez volání API. Nejjednodušší integrace, bez sledování relací.

URL Parameters (Viewer)

wizardstringPředvybrat cíl wizardu
wizardKwhnumberMěsíční kWh pro cover_bill
roofLatnumberZeměpisná šířka střechy pro auto-klik
roofLngnumberZeměpisná délka střechy pro auto-klik
sessionstringID relace MCP (automaticky vloženo 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

  • Každý API požadavek musí obsahovat agentName identifikující volajícího agenta. To je vyžadováno pro analytiku a sledování využití.
  • roofLat/roofLng by měly ukazovat co nejpřesněji na střed požadovaného povrchu střechy. Systém provádí raycast směrem dolů v tomto GPS bodě.
  • Když jsou poskytnuty roofLat/roofLng, systém se automaticky pokusí detekovat povrch střechy na těchto souřadnicích. Pokud automatická detekce selže, uživatel může kliknout ručně nebo použít "Začít znovu".
  • Uživatelé mohou vždy kliknout na "Začít znovu" pro odstranění automaticky umístěných panelů a výběr jiné střechy.
  • Solar Wizard vyžaduje předplatné Pro. Bezplatní uživatelé uvidí výzvu k upgradu.
  • Agentní relace negenerují modely předem. 3D model se generuje, když uživatel otevře odkaz (~1-2 minuty). Pro uživatelé získají HD, bezplatní uživatelé získají SD.

Jste nový uživatel SunTrace3D?

Podívejte se na Uživatelský průvodce pro kompletní průchod 3D prohlížečem, simulací stínů a funkcemi analýzy solárních panelů.

Uživatelský průvodce