La Partner API de SunTrace3D te permite generar modelos 3D HD de ciudades, calcular el rendimiento de energía solar e incrustar visores 3D interactivos en tu sitio web. Todos los endpoints usan JSON y métodos HTTP estándar.
Ver como Markdown (legible por máquinas)La API de SunTrace3D es un servicio RESTful para el acceso programático a la generación de modelos 3D urbanos y cálculos de energía solar. La API está diseñada para socios que desean integrar el análisis solar en sus propias aplicaciones, sitios web o flujos de trabajo.
https://suntrace3d.com/api/v1/api/v1/modelsGenerar un nuevo modelo 3D HD/api/v1/models/:idConsultar el estado de generación del modelo/api/solar/calculateCalcular rendimiento de energía solar/embedVisor 3D incrustable (iframe)/api/healthComprobación de estado (sin autenticación requerida)
Todas las solicitudes API requieren autenticación mediante un token Bearer en el encabezado Authorization. Las claves API se gestionan a través del Portal de socios.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsNunca expongas tu clave API en JavaScript del lado del cliente, repositorios públicos o código front-end. Si tu clave se ve comprometida, revócala inmediatamente desde el Portal de socios y crea una nueva.
Solicita la generación de un modelo 3D HD urbano para una ubicación geográfica específica. El modelo se genera de forma asíncrona — consulta el endpoint de estado para saber cuándo está listo.
/api/v1/modelslatitudenumberrequiredLatitud del punto central (-90 a 90)longitudenumberrequiredLongitud del punto central (-180 a 180)radiusKmnumberRadio del área a modelar en km (predeterminado: 0,3)idstringrequiredIdentificador único del modelo para consultar el estadostatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL del archivo GLB del modelo (cuando está listo)progressnumberProgreso de generación 0-100 (en procesamiento)stepstringDescripción del paso de generación actualcurl -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
}'{
"id": "hd_44.8699_13.8420_0.3",
"status": "pending"
}{
"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"
}Si un modelo para la misma ubicación y radio ya ha sido generado, la API devuelve el resultado en caché inmediatamente con status: "ready". Los modelos se almacenan en caché en S3 durante 30 días. No se te cobra por los resultados en caché.

Consulta este endpoint para verificar el estado de una solicitud de generación de modelo. El modelo pasa por varias etapas: pending → processing → ready.
/api/v1/models/:idcurl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
-H "Authorization: Bearer YOUR_API_KEY"{
"id": "hd_44.8699_13.8420_0.3",
"status": "processing",
"progress": 65,
"step": "Generating textures..."
}{
"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
}Recomendamos consultar cada 5-10 segundos. Los tiempos típicos de generación son de 30-120 segundos según el tamaño del área y la carga del servidor. El campo progress proporciona un porcentaje (0-100) para mostrar un indicador de progreso en tu interfaz.
Calcula el rendimiento anual de energía solar para una configuración de panel y ubicación específicas. Este endpoint utiliza datos satelitales de PVGIS (Photovoltaic Geographical Information System) para valores de irradiancia precisos.
/api/solar/calculatelatitudenumberrequiredLatitud de la ubicaciónlongitudenumberrequiredLongitud de la ubicacióntiltDegnumberrequiredÁngulo de inclinación del panel en grados (0-90)azimuthDegnumberrequiredAzimut del panel en grados (0=Norte, 180=Sur)panelAreaM2numberrequiredÁrea total del panel en metros cuadradospanelEfficiencynumberrequiredEficiencia del panel (0,0 - 1,0, normalmente 0,18-0,22)shadingLossFractionnumberFactor de pérdida por sombreado (0,0-1,0, predeterminado: 0)annualYieldKwhnumberrequiredRendimiento anual estimado de energía en kWhpeakPowerKwnumberrequiredPotencia pico de salida en kWspecificYieldnumberrequiredRendimiento específico en kWh/kWpmonthlyKwhnumber[]requiredArray de 12 valores mensuales en kWhsourcestringrequiredIdentificador de fuente de datos ("pvgis")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
}'{
"annualYieldKwh": 4982,
"peakPowerKw": 4.0,
"specificYield": 1246,
"monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
"source": "pvgis"
}El endpoint de cálculo solar está disponible públicamente y no requiere clave API. Utiliza la API pública de PVGIS mantenida por el Centro Común de Investigación de la Comisión Europea.

Incrusta un visor solar 3D interactivo en tu sitio web usando un iframe. El visor incrustado incluye controles de tiempo para simulación de sombras y funciona tanto en escritorio como en móvil.
latnumberrequiredLatitud de la ubicación a mostrarlngnumberrequiredLongitud de la ubicación a mostrarkeystringrequiredTu clave API para autenticación<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><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>
La API aplica límites de frecuencia para asegurar un uso justo y la estabilidad del sistema.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}La API utiliza códigos de estado HTTP estándar. Todas las respuestas de error incluyen un cuerpo JSON con un campo error que describe el problema.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}El soporte de webhooks para notificaciones de finalización de modelos está planificado para una versión futura. Actualmente, usa la consulta en el endpoint de estado para verificar cuándo los modelos están listos.
Los callbacks de webhooks enviarán una solicitud POST a tu URL especificada cuando la generación del modelo se complete, eliminando la necesidad de consultas periódicas. Esta función está en nuestra hoja de ruta.
Ejemplos completos, listos para copiar y pegar, para escenarios de integración comunes.
#!/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"
ficonst 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));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']}")
Consulta la Guía del usuario para un recorrido completo por el visor 3D, simulación de sombras y funciones de análisis de paneles solares.
Guía del usuario