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.

Zobrazit jako Markdown (strojově čitelné)
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
    Upgradujte na Pro
    Pro přístup k API je vyžadováno Pro předplatné. Upgradujte v nastavení účtu.
  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

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