v1СТАБИЛЬНАЯ

Документация API

Партнёрский API SunTrace3D позволяет генерировать HD 3D-модели городов, рассчитывать выработку солнечной энергии и встраивать интерактивные 3D-просмотрщики на ваш сайт. Все конечные точки используют JSON и стандартные методы HTTP.

Просмотреть как Markdown (машиночитаемый формат)
1

Обзор

API SunTrace3D — это RESTful-сервис для программного доступа к генерации 3D-моделей городов и расчётам солнечной энергии. API предназначен для партнёров, которые хотят интегрировать солнечный анализ в свои приложения, сайты или рабочие процессы.

Базовый URL

https://suntrace3d.com/api/v1
REST API
JSON запрос/ответ
Bearer-аутентификация
Аутентификация по API-ключу
HD качество
Все модели API в формате HD

Доступные конечные точки

POST/api/v1/modelsГенерация новой HD 3D-модели
GET/api/v1/models/:idПроверка статуса генерации модели
POST/api/solar/calculateРасчёт выработки солнечной энергии
GET/embedВстраиваемый 3D-просмотрщик (iframe)
GET/api/healthПроверка работоспособности (аутентификация не требуется)
Partner portal showing API keys and usage statistics
Портал партнёров — управление API-ключами, просмотр статистики использования и получение кода встраивания
2

Аутентификация

Все API-запросы требуют аутентификации через Bearer-токен в заголовке Authorization. API-ключи управляются через портал партнёров.

Получение API-ключа

  1. 1
    Создайте аккаунт
    Зарегистрируйтесь на /auth/signup, если ещё не сделали этого.
  2. 2
    Обновите до Pro
    Для доступа к API требуется подписка Pro. Обновите из настроек аккаунта.
  3. 3
    Сгенерируйте API-ключ
    Перейдите на портал партнёров и нажмите «Создать ключ». Скопируйте ключ сразу — он больше не будет показан.
  4. 4
    Используйте в запросах
    Включайте ключ во все API-запросы как Bearer-токен.
Заголовок аутентификацииbash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Храните ваш API-ключ в секрете

Никогда не раскрывайте ваш API-ключ в клиентском JavaScript, публичных репозиториях или фронтенд-коде. Если ваш ключ скомпрометирован, немедленно отзовите его через портал партнёров и создайте новый.

3

Генерация 3D-модели

Запросите генерацию HD 3D-модели города для определённого географического местоположения. Модель генерируется асинхронно — опрашивайте конечную точку статуса, чтобы проверить готовность.

POST/api/v1/models

Тело запроса

latitudenumberrequiredШирота центральной точки (от -90 до 90)
longitudenumberrequiredДолгота центральной точки (от -180 до 180)
radiusKmnumberРадиус моделируемой области в км (по умолчанию: 0,3)

Ответ

idstringrequiredУникальный идентификатор модели для опроса статуса
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringURL к файлу модели GLB (когда готова)
progressnumberПрогресс генерации 0-100 (при обработке)
stepstringОписание текущего этапа генерации
Запросbash
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
  }'
Ответ (ожидание)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Ответ (готово)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"
}

Кэширование моделей

Если модель для того же местоположения и радиуса уже была сгенерирована, API возвращает кэшированный результат немедленно со статусом: "ready". Модели кэшируются в S3 на 30 дней. За кэшированные результаты плата не взимается.

API request generating a 3D model
API генерирует HD 3D-модели асинхронно — опрашивайте конечную точку статуса до готовности
4

Проверка статуса модели

Опрашивайте эту конечную точку для проверки статуса запроса генерации модели. Модель проходит несколько этапов: pending → processing → ready.

GET/api/v1/models/:id
Запросbash
curl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
  -H "Authorization: Bearer YOUR_API_KEY"
Ответ (обработка)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "processing",
  "progress": 65,
  "step": "Generating textures..."
}
Ответ (готово)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
}

Значения статуса

pendingЗадание в очереди и ожидает обработки воркером
processingМодель генерируется. Проверяйте поле progress для процента.
readyМодель готова. Поле modelUrl содержит URL для скачивания.
failedГенерация не удалась. Вы можете повторить, создав новый запрос.

Рекомендации по опросу

Рекомендуем опрашивать каждые 5-10 секунд. Типичное время генерации — 30-120 секунд в зависимости от размера области и нагрузки сервера. Поле progress предоставляет процент (0-100) для отображения индикатора прогресса в вашем интерфейсе.

5

Расчёт солнечной энергии

Рассчитайте годовую выработку солнечной энергии для определённой конфигурации панели и местоположения. Эта конечная точка использует спутниковые данные PVGIS (Photovoltaic Geographical Information System) для точных значений облучённости.

POST/api/solar/calculate

Тело запроса

latitudenumberrequiredШирота местоположения
longitudenumberrequiredДолгота местоположения
tiltDegnumberrequiredУгол наклона панели в градусах (0-90)
azimuthDegnumberrequiredАзимут панели в градусах (0=Север, 180=Юг)
panelAreaM2numberrequiredОбщая площадь панелей в квадратных метрах
panelEfficiencynumberrequiredКПД панели (0.0 - 1.0, обычно 0.18-0.22)
shadingLossFractionnumberКоэффициент потерь от затенения (0.0-1.0, по умолчанию: 0)

Ответ

annualYieldKwhnumberrequiredРасчётная годовая выработка энергии в kWh
peakPowerKwnumberrequiredПиковая выходная мощность в кВт
specificYieldnumberrequiredУдельная выработка в kWh/kWp
monthlyKwhnumber[]requiredМассив из 12 помесячных значений kWh
sourcestringrequiredИдентификатор источника данных ("pvgis")
Запросbash
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
  }'
Ответjson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Аутентификация не требуется

Конечная точка расчёта солнечной энергии общедоступна и не требует API-ключа. Она использует публичный API PVGIS, поддерживаемый Объединённым исследовательским центром Европейской комиссии.

Solar energy calculation API response
API расчёта солнечной энергии возвращает годовую выработку, пиковую мощность и помесячную разбивку
6

Встраивание просмотрщика

Встройте интерактивный 3D-просмотрщик солнечной энергии на свой сайт с помощью iframe. Встраиваемый просмотрщик включает элементы управления временем для моделирования теней и работает на компьютере и мобильных устройствах.

Параметры URL встраивания

latnumberrequiredШирота отображаемого местоположения
lngnumberrequiredДолгота отображаемого местоположения
keystringrequiredВаш API-ключ для аутентификации
Базовый код встраивания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>
Адаптивное встраивание (рекомендуется)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>

Возможности встраивания

Интерактивное 3D-вращение, панорамирование и масштабирование
Слайдер времени для моделирования теней
Адаптивный — работает на мобильных устройствах
Фотореалистичные модели Google 3D Tiles
Дополнительный JavaScript не требуется
Поддержка полноэкранного режима
Embedded 3D viewer in an iframe
Встраиваемый просмотрщик включает элементы управления временем и работает на компьютере и мобильных устройствах
7

Ограничения запросов

API применяет ограничения запросов для обеспечения справедливого использования и стабильности системы.

Генерация моделей
POST /api/v1/models
10 запросов
в час, на API-ключ
Опрос статуса
GET /api/v1/models/:id
Без ограничений
Опрашивайте по необходимости
Расчёт солнечной энергии
POST /api/solar/calculate
Без ограничений
Публичная конечная точка
Просмотры встраивания
GET /embed
Без ограничений
Неограниченные просмотры
Ответ при превышении лимита (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Обработка ошибок

API использует стандартные коды состояния HTTP. Все ответы об ошибках содержат JSON-тело с полем error, описывающим проблему.

Коды состояния HTTP

200Успех — запрос выполнен успешно
400Неверный запрос — отсутствуют или недопустимы параметры
401Не авторизован — отсутствует или недействителен API-ключ
404Не найдено — ID модели не существует
429Слишком много запросов — превышен лимит запросов
503Сервис недоступен — внешний сервис (PVGIS) не работает
Пример ответа об ошибкеjson
{
  "error": "latitude and longitude are required"
}
Ошибка аутентификацииjson
{
  "error": "Invalid or revoked API key"
}
9

Вебхуки

Поддержка вебхуков для уведомлений о завершении генерации моделей запланирована в будущем обновлении. В настоящее время используйте опрос конечной точки статуса, чтобы проверить готовность моделей.

Скоро

Обратные вызовы вебхуков будут отправлять POST-запрос на указанный вами URL при завершении генерации модели, устраняя необходимость в опросе. Эта функция включена в наш план развития.

10

Полные примеры

Полные примеры для копирования для распространённых сценариев интеграции.

Генерация модели и ожидание завершения

Bash — полный рабочий процессbash
#!/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

Интеграция JavaScript/Node.js

Node.js — генерация и опрос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));

Интеграция Python

Python — генерация и расчёт солнечной энергииpython
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
Полные примеры кода на Bash, JavaScript и Python для интеграции с API

Впервые в SunTrace3D?

Ознакомьтесь с руководством пользователя для полного обзора 3D-просмотрщика, моделирования теней и функций анализа солнечных панелей.

Руководство пользователя