v1STABLE

Documentation API

L’API Partenaire SunTrace3D vous permet de générer des modèles 3D HD de villes, de calculer le rendement énergétique solaire et d’intégrer des visualiseurs 3D interactifs sur votre site web. Tous les points de terminaison utilisent JSON et les méthodes HTTP standard.

Afficher en Markdown (lisible par machine)
1

Vue d’ensemble

L’API SunTrace3D est un service RESTful pour l’accès programmatique à la génération de modèles 3D de villes et aux calculs d’énergie solaire. L’API est conçue pour les partenaires qui souhaitent intégrer l’analyse solaire dans leurs propres applications, sites web ou flux de travail.

URL de base

https://suntrace3d.com/api/v1
API REST
Requête/réponse JSON
Bearer Auth
Authentification par clé API
Qualité HD
Tous les modèles API sont en HD

Points de terminaison disponibles

POST/api/v1/modelsGénérer un nouveau modèle 3D HD
GET/api/v1/models/:idVérifier l’état de la génération du modèle
POST/api/solar/calculateCalculer le rendement énergétique solaire
GET/embedVisualiseur 3D intégrable (iframe)
GET/api/healthVérification de santé (aucune authentification requise)
Partner portal showing API keys and usage statistics
Le Portail Partenaire — gérez les clés API, consultez les statistiques d’utilisation et obtenez le code d’intégration
2

Authentification

Toutes les requêtes API nécessitent une authentification via un token Bearer dans l’en-tête Authorization. Les clés API sont gérées via le Portail Partenaire.

Obtenir une clé API

  1. 1
    Créer un compte
    Inscrivez-vous sur /auth/signup si ce n’est pas déjà fait.
  2. 2
    Passer à Pro
    Un abonnement Pro est requis pour l’accès API. Mettez à niveau depuis les paramètres de votre compte.
  3. 3
    Générer une clé API
    Visitez le Portail Partenaire et cliquez sur « Créer une clé ». Copiez votre clé immédiatement — elle ne sera plus affichée.
  4. 4
    Utiliser dans les requêtes
    Incluez la clé dans toutes les requêtes API en tant que token Bearer.
En-tête d’authentificationbash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Gardez votre clé API secrète

N’exposez jamais votre clé API dans du JavaScript côté client, des dépôts publics ou du code front-end. Si votre clé est compromise, révoquez-la immédiatement depuis le Portail Partenaire et créez-en une nouvelle.

3

Générer un modèle 3D

Demandez la génération d’un modèle 3D HD de ville pour un emplacement géographique spécifique. Le modèle est généré de manière asynchrone — interrogez le point de terminaison de statut pour vérifier quand il est prêt.

POST/api/v1/models

Corps de la requête

latitudenumberrequiredLatitude du point central (-90 à 90)
longitudenumberrequiredLongitude du point central (-180 à 180)
radiusKmnumberRayon de la zone à modéliser en km (par défaut : 0,3)

Réponse

idstringrequiredIdentifiant unique du modèle pour l’interrogation de statut
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringURL du fichier modèle GLB (quand prêt)
progressnumberProgression de la génération 0–100 (en cours de traitement)
stepstringDescription de l’étape de génération en cours
Requêtebash
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éponse (en attente)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Réponse (prêt)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"
}

Mise en cache des modèles

Si un modèle pour le même emplacement et rayon a déjà été généré, l’API retourne immédiatement le résultat mis en cache avec status: "ready". Les modèles sont mis en cache dans S3 pendant 30 jours. Les résultats mis en cache ne sont pas facturés.

API request generating a 3D model
L’API génère les modèles 3D HD de manière asynchrone — interrogez le point de terminaison de statut jusqu’à ce qu’il soit prêt
4

Vérifier l’état du modèle

Interrogez ce point de terminaison pour vérifier l’état d’une demande de génération de modèle. Le modèle passe par plusieurs étapes : pending → processing → ready.

GET/api/v1/models/:id
Requêtebash
curl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
  -H "Authorization: Bearer YOUR_API_KEY"
Réponse (en cours de traitement)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "processing",
  "progress": 65,
  "step": "Generating textures..."
}
Réponse (prêt)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
}

Valeurs de statut

pendingLa tâche est en file d’attente et attend d’être prise en charge par un worker
processingLe modèle est en cours de génération. Vérifiez le champ progress pour le pourcentage.
readyLe modèle est prêt. Le champ modelUrl contient l’URL de téléchargement.
failedÉchec de la génération. Vous pouvez réessayer en créant une nouvelle demande.

Recommandation d’interrogation

Nous recommandons d’interroger toutes les 5 à 10 secondes. Les temps de génération typiques sont de 30 à 120 secondes selon la taille de la zone et la charge du serveur. Le champ progress fournit un pourcentage (0–100) pour afficher un indicateur de progression dans votre interface.

5

Calculer l’énergie solaire

Calculez le rendement énergétique solaire annuel pour une configuration de panneau et un emplacement spécifiques. Ce point de terminaison utilise les données satellite PVGIS (Photovoltaic Geographical Information System) pour des valeurs d’irradiance précises.

POST/api/solar/calculate

Corps de la requête

latitudenumberrequiredLatitude de l’emplacement
longitudenumberrequiredLongitude de l’emplacement
tiltDegnumberrequiredAngle d’inclinaison du panneau en degrés (0–90)
azimuthDegnumberrequiredAzimut du panneau en degrés (0=Nord, 180=Sud)
panelAreaM2numberrequiredSurface totale des panneaux en mètres carrés
panelEfficiencynumberrequiredRendement du panneau (0,0–1,0, typiquement 0,18–0,22)
shadingLossFractionnumberFacteur de perte d’ombrage (0,0–1,0, par défaut : 0)

Réponse

annualYieldKwhnumberrequiredRendement énergétique annuel estimé en kWh
peakPowerKwnumberrequiredPuissance de crête en kW
specificYieldnumberrequiredRendement spécifique en kWh/kWp
monthlyKwhnumber[]requiredTableau de 12 valeurs kWh mensuelles
sourcestringrequiredIdentifiant de la source de données ("pvgis")
Requêtebash
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éponsejson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Aucune authentification requise

Le point de terminaison de calcul solaire est accessible publiquement et ne nécessite pas de clé API. Il utilise l’API publique PVGIS maintenue par le Centre commun de recherche de la Commission européenne.

Solar energy calculation API response
L’API de calcul solaire retourne le rendement annuel, la puissance de crête et la décomposition mensuelle
6

Intégrer le visualiseur

Intégrez un visualiseur solaire 3D interactif sur votre site web à l’aide d’un iframe. Le visualiseur intégré inclut des commandes temporelles pour la simulation d’ombres et fonctionne sur ordinateur et mobile.

Paramètres d’URL d’intégration

latnumberrequiredLatitude de l’emplacement à afficher
lngnumberrequiredLongitude de l’emplacement à afficher
keystringrequiredVotre clé API pour l’authentification
Code d’intégration de basehtml
<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>
Intégration réactive (recommandée)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>

Fonctionnalités d’intégration

Orbite, panoramique et zoom 3D interactifs
Curseur de temps pour la simulation d’ombres
Réactif — fonctionne sur mobile
Modèles photoréalistes Google 3D Tiles
Aucun JavaScript supplémentaire requis
Support plein écran
Embedded 3D viewer in an iframe
Le visualiseur intégrable inclut des commandes temporelles et fonctionne sur ordinateur et mobile
7

Limites de débit

L’API impose des limites de débit pour garantir une utilisation équitable et la stabilité du système.

Génération de modèles
POST /api/v1/models
10 requêtes
par heure, par clé API
Interrogation de statut
GET /api/v1/models/:id
Sans limite
Interrogez selon vos besoins
Calcul solaire
POST /api/solar/calculate
Sans limite
Point de terminaison public
Vues intégrées
GET /embed
Sans limite
Vues illimitées
Réponse limite de débit dépassée (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Gestion des erreurs

L’API utilise les codes de statut HTTP standard. Toutes les réponses d’erreur incluent un corps JSON avec un champ error décrivant le problème.

Codes de statut HTTP

200Succès — requête terminée avec succès
400Mauvaise requête — paramètres manquants ou invalides
401Non autorisé — clé API manquante ou invalide
404Non trouvé — l’identifiant du modèle n’existe pas
429Trop de requêtes — limite de débit dépassée
503Service indisponible — service externe (PVGIS) en panne
Exemple de réponse d’erreurjson
{
  "error": "latitude and longitude are required"
}
Erreur d’authentificationjson
{
  "error": "Invalid or revoked API key"
}
9

Webhooks

Le support des webhooks pour les notifications de fin de génération de modèles est prévu pour une version future. Actuellement, utilisez l’interrogation sur le point de terminaison de statut pour vérifier quand les modèles sont prêts.

Bientôt disponible

Les callbacks webhook enverront une requête POST à votre URL spécifiée lorsque la génération du modèle sera terminée, éliminant le besoin d’interrogation. Cette fonctionnalité est dans notre feuille de route.

10

Exemples complets

Exemples complets, à copier-coller, pour les scénarios d’intégration courants.

Générer un modèle et attendre la fin

Bash — flux de travail completbash
#!/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

Intégration JavaScript/Node.js

Node.js — générer et interrogerjavascript
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));

Intégration Python

Python — générer et calculer le solairepython
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
Exemples de code complets en Bash, JavaScript et Python pour l’intégration API

Nouveau sur SunTrace3D ?

Consultez le Guide utilisateur pour une présentation complète du visualiseur 3D, de la simulation d’ombres et des fonctionnalités d’analyse de panneaux solaires.

Guide utilisateur