# TriRS - Sistema de Ingressos e Eventos TriRS é uma plataforma completa para a venda e gestão de ingressos para eventos presenciais e online no Brasil. O sistema permite a administração de eventos, vendas, emissão de ingressos, controle de acesso e relatórios financeiros, além de suportar a estrutura multi-tenant (produtores, locais de eventos). ## Rotas de Acesso a Dados Públicos (Para Agentes / LLMs) Para acesso programático rápido, você pode consultar os seguintes endpoints. Você pode usar o sufixo `.md` nas URLs de eventos para obter a representação em Markdown do conteúdo, ou usar requisições com `Accept: text/markdown`. - **Eventos Públicos:** `GET /public/v1/events` (Retorna a lista de eventos em JSON) - **Detalhes de Evento:** `GET /public/v1/event/{id}` (Retorna detalhes do evento) - **Detalhes de Evento em Markdown:** `GET /event/{company_id}/{event_slug}.md` (Retorna os dados do evento público renderizados em Markdown) - **Página do Produtor em Markdown:** `GET /{producer_slug}.md` (Retorna os dados do produtor em Markdown) ## Model Context Protocol (MCP) As ferramentas MCP estão disponíveis sob a rota `/api/mcp`, seguindo o protocolo WebMCP (versão `2024-11-05`). - **Obter Ticket:** `POST /api/mcp/connect` - **Endpoint SSE:** `GET /api/mcp/sse?ticket={ticket}` - **Endpoint de Mensagens:** `POST /api/mcp/messages?session_id={id}` ### Autenticação Todas as requisições exigem um token Sanctum válido via header `Authorization: Bearer {token}`. O token de longa duração **nunca** vai na URL. Para abrir o stream SSE (que via `EventSource` no browser não permite headers customizados), troque o token por um *ticket* de uso único: 1. `POST /api/mcp/connect` com o header `Authorization: Bearer {token}`. Responde `{ "ticket": "...", "sse_url": "...", "expires_in": 60 }`. 2. Abra `GET /api/mcp/sse?ticket={ticket}`. O ticket vale ~60s e é consumido na primeira leitura. ### Fluxo de sessão 1. Cliente obtém um ticket em `POST /api/mcp/connect` e abre `GET /api/mcp/sse?ticket={ticket}`. 2. Servidor responde com um evento `endpoint` contendo a URL de mensagens com `session_id` atrelado ao usuário (TTL de 30 minutos, renovado a cada keep-alive). A conexão SSE tem vida máxima de 5 minutos — o cliente deve reabrir com um novo ticket. 3. Cliente envia requisições JSON-RPC para `POST /api/mcp/messages?session_id={id}` com o header `Authorization: Bearer {token}`. Sessões pertencentes a outro usuário ou expiradas são rejeitadas com erro JSON-RPC `-32000`. ### Limites de uso (por usuário) - `POST /api/mcp/connect`: 5 tickets por minuto. - `GET /api/mcp/sse`: 3 conexões simultâneas (excedente recebe HTTP 429 com erro JSON-RPC `-32000`). - `POST /api/mcp/messages`: 30 requisições por minuto. ### Tools disponíveis Todas as tools são escopadas às empresas que o usuário autenticado possui ou administra. Parâmetros são validados; entradas inválidas retornam erro JSON-RPC `-32602` com detalhes em `error.data.errors`. - `query_events`: Lista até 10 eventos das empresas do usuário. Parâmetro opcional `query` (string, 1–100 caracteres) para filtrar por nome. - `get_dashboard_stats`: Retorna `sales_today` (soma dos pagamentos `paid` do dia) e `tickets_sold` para uma empresa. Parâmetro obrigatório `company_id` (integer) — precisa pertencer ao usuário. - `get_seat_map`: Retorna `event_name` e `has_seat_map` de um evento. Parâmetro obrigatório `event_id` (integer) — o evento precisa pertencer a uma empresa do usuário.