{"openapi":"3.0.3","info":{"title":"Lesync Public Documentation and Calendar API","version":"1.0.0","description":"Read-only public Lesync documentation and the existing token-authenticated iCalendar subscription. This contract does not grant access to internal administration APIs. Public documentation MCP: https://lesync.app.br/mcp","contact":{"name":"Lesync","email":"vitors7b7x7@gmail.com","url":"https://lesync.app.br/contact"}},"servers":[{"url":"https://lesync.app.br","description":"Lesync canonical public site"}],"externalDocs":{"description":"Lesync API and authentication guide","url":"https://lesync.app.br/docs/api"},"tags":[{"name":"Documentation","description":"Public product information; no account or tenant data."},{"name":"Calendar","description":"Private read-only calendar subscription authorized by the account holder."}],"security":[],"paths":{"/":{"get":{"operationId":"getLesyncOverview","tags":["Documentation"],"summary":"Lesync em português","description":"Lesync product overview. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/en":{"get":{"operationId":"getLesyncEnglishOverview","tags":["Documentation"],"summary":"Lesync in English","description":"Lesync product overview. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/about":{"get":{"operationId":"getLesyncAbout","tags":["Documentation"],"summary":"Sobre o Lesync","description":"Conheça o Lesync, plataforma de gestão de aulas para professores autônomos e escolas. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/contact":{"get":{"operationId":"getLesyncContact","tags":["Documentation"],"summary":"Contato com o Lesync","description":"Fale com o Lesync sobre demonstrações, planos, suporte e dúvidas sobre dados. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"operationId":"getLesyncPrivacy","tags":["Documentation"],"summary":"Privacidade no Lesync","description":"Entenda quais informações apoiam o funcionamento do Lesync e como entrar em contato sobre seus dados. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/docs":{"get":{"operationId":"getLesyncDocumentation","tags":["Documentation"],"summary":"Lesync — recursos, acesso e documentação","description":"Guia público dos recursos do Lesync, acesso por função e interfaces disponíveis para agentes. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/docs/api":{"get":{"operationId":"getLesyncApiDocumentation","tags":["Documentation"],"summary":"Lesync API — OpenAPI e calendário","description":"Documentação da API do Lesync: OpenAPI, documentos públicos, calendário iCalendar, respostas e limites. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/docs/authentication":{"get":{"operationId":"getLesyncAuthenticationDocumentation","tags":["Documentation"],"summary":"Lesync — autenticação e tokens de calendário","description":"Como funciona o acesso ao Lesync e como gerar, rotacionar e revogar uma assinatura privada de calendário. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/docs/mcp":{"get":{"operationId":"getLesyncMcpDocumentation","tags":["Documentation"],"summary":"Lesync MCP — ferramentas de documentação pública","description":"Conecte agentes ao MCP do Lesync por Streamable HTTP para listar e ler documentação pública e OpenAPI. Returns HTML by default. Send Accept: text/markdown for plain Markdown; incompatible Accept values return 406. No authentication required. Use the canonical server, not a tenant domain.","responses":{"200":{"description":"Public document in the requested representation.","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}}}},"406":{"description":"The requested representation is unavailable. Use text/html or text/markdown.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"operationId":"getLesyncAgentIndex","tags":["Documentation"],"summary":"Get the Lesync agent index","description":"Read the public Markdown-formatted index of Lesync product information, OpenAPI, authentication and MCP resources. No credentials required.","responses":{"200":{"description":"Public agent index, served as UTF-8 plain text.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"operationId":"getLesyncFullDocumentation","tags":["Documentation"],"summary":"Get all public Lesync documentation","description":"Read the consolidated public product and developer documentation, excluding private account data and illustrative student records. No credentials required.","responses":{"200":{"description":"Consolidated public documentation as UTF-8 plain text.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/calendar":{"get":{"operationId":"getLesyncCalendarSubscription","tags":["Calendar"],"summary":"Read an authorized Lesync calendar subscription","description":"Retrieve the subscriber’s scheduled and makeup appointments as iCalendar. The account holder generates, rotates or revokes the secret subscription link in the calendar export control. The token is an API key in the query string, not a login password or a tool argument. Configure it in the client credential store; never put it in prompts or logs. At most one successful fetch per token per 60 seconds; API requests also share a best-effort per-instance limit of 100 requests per IP per 60 seconds. Honor Retry-After. This endpoint does not modify appointments.","security":[{"CalendarToken":[]}],"externalDocs":{"description":"Token creation, rotation and revocation","url":"https://lesync.app.br/docs/authentication"},"responses":{"200":{"description":"RFC 5545 iCalendar subscription. Treat the full response as private.","content":{"text/calendar":{"schema":{"type":"string"}}},"headers":{"Content-Disposition":{"description":"Attachment filename ending in .ics.","schema":{"type":"string"}},"Cache-Control":{"description":"Private calendar cache lifetime.","schema":{"type":"string"}}}},"401":{"description":"Missing, malformed or unrecognized token (including a rotated or revoked token). Body: Unauthorized.","content":{"text/plain":{"schema":{"type":"string"}}}},"410":{"description":"Expired token or account without an eligible active role. Body: Gone.","content":{"text/plain":{"schema":{"type":"string"}}}},"429":{"description":"Token or IP request limit reached. Body: Too Many Requests.","content":{"text/plain":{"schema":{"type":"string"}}},"headers":{"Retry-After":{"description":"Seconds before retrying.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Reset":{"description":"Unix time in seconds; present for the token limit only.","schema":{"type":"integer"}}}}}}}},"components":{"securitySchemes":{"CalendarToken":{"type":"apiKey","in":"query","name":"token","description":"Secret calendar subscription token generated by an authenticated user in Lesync. Newly issued tokens contain 64 hexadecimal characters. Only the hash is stored by Lesync. Rotation and revocation invalidate the previous link."}}}}