> ## Documentation Index
> Fetch the complete documentation index at: https://tournaments-partners.exuratech.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Frontend de torneos

> Embed existente, rutas públicas por UUID y vistas privadas para usuario.

## Opción A: frontend de Exura Tech

El `public_url` entregado al crear el torneo apunta a `/embed/tournaments/{uuid}`. Puedes compartirlo o insertarlo en un portal:

```html theme={"theme":{"light":"github-light","dark":"github-dark"}}
<iframe
  src="https://<frontend>/embed/tournaments/<tournament-uuid>"
  title="Ranking del torneo"
  loading="lazy"
  style="width:100%;min-height:760px;border:0"
></iframe>
```

El enlace `url` apunta a `/tournaments/private/{uuid}` y sirve para inscribir por enlace privado; **no** es el ranking. El portal de usuario incluye `/register`, `/verify-email`, `/dashboard/tournaments` y `/dashboard/tournaments/{uuid}`. La vista embed consulta torneo y ranking de forma periódica (aproximadamente cada 20 segundos mientras el estado permite actualización); el snapshot MT5 del servidor sigue su propio intervalo.

## Opción B: frontend público del broker

| Método | Ruta | Datos |
| - | - | - |
| `GET` | `/api/v1/tournaments?company_id={id}&status={status}` | Lista de torneos y premios; `company_id` permite acotar broker |
| `GET` | `/api/v1/tournaments/by-uuid/{uuid}` | Detalle, ventanas, premios y `can_register` |
| `GET` | `/api/v1/tournaments/{uuid}/registration-dates` | Ventana explícita de inscripción |
| `GET` | `/api/v1/tournaments/by-uuid/{uuid}/leaderboard?limit=100&offset=0` | Ranking público paginado |
| `GET` | `/api/v1/tournaments/by-uuid/{uuid}/participant/{login}/live-stats?include_history=true` | Métricas, curvas y operaciones de la cuenta |

Para no cargar MT5 en cada refresco, consulta metadatos y ranking regularmente; solicita `live-stats` con `include_history=true` **cuando se abre el detalle de una cuenta**. `include_history=false` permite una lectura más ligera. El historial tiene caché local por proceso (30 segundos por defecto) y, tras el archivo final, puede leerse desde la base de datos. La página debe tolerar valores aún sin sincronizar y errores temporales.

La respuesta de ranking informa `ranking_metric`, `tournament_id`, `tournament_uuid`, `tournament_name`, `generated_at`, `total` e `items`. Cada fila incluye `rank`, `login`, balance inicial, balance y equity actuales, profit, ROI, métricas, estado y `last_sync_at`, además de identificadores y datos del usuario. Ordena tal como entrega la API; **no** reordenes por profit cuando el torneo está configurado por balance o equity. El backend resuelve empates de balance por ID estable; para equity aplica los desempates configurados en el servicio.

```javascript theme={"theme":{"light":"github-light","dark":"github-dark"}}
const apiOrigin = "https://api.example.com";
const uuid = "<tournament-uuid>";
const tournament = await fetch(`${apiOrigin}/api/v1/tournaments/by-uuid/${uuid}`).then(r => r.json());
const ranking = await fetch(`${apiOrigin}/api/v1/tournaments/by-uuid/${uuid}/leaderboard?limit=100&offset=0`).then(r => r.json());
if (ranking.items.length) {
  const login = ranking.items[0].login;
  const detail = await fetch(`${apiOrigin}/api/v1/tournaments/by-uuid/${uuid}/participant/${login}/live-stats?include_history=true`).then(r => r.json());
  console.log(tournament.status, ranking.ranking_metric, detail.chart_data);
}
```

Este ejemplo muestra la secuencia de lecturas. En producción comprueba `response.ok`, pagina con `total`, cancela solicitudes obsoletas y presenta un error recuperable si MT5 no responde. Configura CORS del origen del broker si llamas a la API directamente desde el navegador.

## Vistas privadas

`GET /api/v1/registrations/me` y `GET /api/v1/tournaments/{id}/my-credentials` requieren JWT de usuario. La segunda devuelve contraseña principal e investor de **la cuenta propia**, por lo que debe mostrarse solo en una vista privada y protegerse de cachés públicas, analítica y logs. El backend del broker puede optar por enlazar al portal de Exura Tech en vez de reconstruir esta experiencia.

> [!WARNING]
>
> El leaderboard público de torneos devuelve correo, nombre y apellido. Decide con el broker cómo tratar esos campos; evita replicarlos en vistas públicas si no son necesarios.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.