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

# Retorna a aula

> Retorna uma aula específica através do ID.

Traz o conteúdo já renderizado em HTML, os materiais, as aulas vizinhas e o estado do membro: concluída, avaliação e salva na lista. Cada material traz um `download_url` assinado para o membro, válido por uma hora, que funciona sem o token.

O parâmetro `classroom` escolhe a turma quando o membro pode ver várias. Sem ele, vale a turma do acesso do membro.

### Aulas bloqueadas

Uma aula que ainda não pode ser aberta responde `200`, sem conteúdo nem materiais, com `lock` preenchido para o site mostrar o motivo:

| `reason` | Motivo |
| :- | :- |
| `blocked` | Bloqueada sem data de liberação. |
| `deadline_passed` | O prazo de acesso acabou. |
| `countdown` | Libera alguns dias depois da matrícula. |
| `timespan` | Fica disponível em um período de datas. |
| `after_section` | Libera depois de concluir um módulo. |
| `after_course` | Libera depois de concluir um curso. |
| `after_lesson` | Libera depois de concluir uma aula. |
| `minimum_scoring` | Libera ao atingir uma pontuação. |
| `course_onboarding` | O membro ainda não aceitou o [onboarding do curso](https://ajuda.memberkit.com.br/headless/referencia/get-course-onboarding.md). |

`requirement` traz só o nome do que falta: o título da aula, o nome do módulo ou do curso a concluir, ou os pontos restantes. Monte a frase em volta dele de acordo com o `reason`.

Com `course_onboarding`, mostre o onboarding do curso de `course.id`, envie o aceite e carregue a aula de novo. Assim um link direto para a aula, como o de uma notificação, chega ao curso certo. As outras chamadas da aula respondem `course_onboarding_required` enquanto o aceite estiver pendente.


## OpenAPI

````yaml headless/openapi.yml GET /api/headless/v1/lessons/{id}
openapi: 3.1.0
info:
  title: MemberKit Headless
  version: 1.0.0
servers: []
security:
  - bearer: []
    headlessKey: []
tags:
  - name: academy
  - name: auth
  - name: onboarding
  - name: courses
  - name: categories
  - name: banners
  - name: bookmarks
  - name: kv
  - name: comments
  - name: quizzes
  - name: search
  - name: ranking
  - name: profile
  - name: certificates
  - name: contact_messages
  - name: notifications
  - name: uploads
  - name: assistant
  - name: community
  - name: lessons
paths:
  /api/headless/v1/lessons/{id}:
    get:
      tags:
        - lessons
      summary: Retorna a aula
      description: Retorna uma aula específica através do ID.
      operationId: getLesson
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: ID da aula.
        - name: classroom
          in: query
          required: false
          description: ID da turma.
          schema:
            type: integer
      responses:
        '200':
          description: Aula encontrada
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Lesson'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '402':
          $ref: '#/components/responses/SubscriptionSuspended'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Aula fora dos cursos que o membro pode abrir, ou oculta na turma
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    Lesson:
      type: object
      required:
        - id
        - title
        - completed
        - can_complete
        - has_video
        - has_quiz
        - assistant_available
        - comments_enabled
        - content
        - files
        - previous
        - next
        - lock
        - course
        - section
        - duration
        - score
        - image_url
        - rating
        - bookmarked
        - comments_count
      properties:
        course:
          $ref: '#/components/schemas/NamedRef'
        section:
          $ref: '#/components/schemas/NamedRef'
        duration:
          type: integer
          description: Duração do vídeo em segundos; zero sem vídeo.
        score:
          type: integer
          description: Pontos que o membro ganha ao concluir a aula.
        image_url:
          type:
            - string
            - 'null'
        rating:
          type:
            - integer
            - 'null'
          description: Nota que o membro deu à aula, de 1 a 5.
        bookmarked:
          type: boolean
        comments_count:
          type: integer
        id:
          type: integer
        title:
          type: string
        completed:
          type: boolean
        can_complete:
          type: boolean
          description: >-
            Falso enquanto o membro não for aprovado no quiz obrigatório da
            aula.
        has_video:
          type: boolean
          description: Quando verdadeiro, busque GET /lessons/{id}/playback.
        has_quiz:
          type: boolean
          description: Quando verdadeiro, busque GET /lessons/{id}/quiz.
        assistant_available:
          type: boolean
          description: Se o Assistente de IA pode responder sobre esta aula.
        comments_enabled:
          type: boolean
        content:
          type:
            - string
            - 'null'
          description: HTML já renderizado. Nulo enquanto a aula estiver bloqueada.
        files:
          type: array
          items:
            type: object
            required:
              - id
              - filename
              - byte_size
              - content_type
              - download_url
            properties:
              id:
                type: integer
              filename:
                type: string
              byte_size:
                type: integer
              content_type:
                type: string
              download_url:
                type: string
                description: >-
                  Link de download do arquivo para o membro, válido por uma
                  hora. Funciona sem o token.
        previous:
          $ref: '#/components/schemas/LessonLink'
        next:
          $ref: '#/components/schemas/LessonLink'
        lock:
          description: Nulo quando a aula pode ser aberta.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/LessonLock'
    Error:
      type: object
      description: Formato de todos os erros.
      required:
        - code
        - message
        - request_id
      properties:
        code:
          type: string
          description: Código do erro.
          enum:
            - subscription_suspended
            - onboarding_required
            - course_onboarding_required
            - access_expired
            - content_locked
            - comments_disabled
            - unprocessable_certificate
            - unauthenticated
            - invalid_credentials
            - invalid_token
            - invalid_headless_key
            - session_replaced
            - session_revoked
            - account_locked
            - forbidden
            - not_found
            - missing_parameter
            - malformed_request
            - validation_failed
            - invalid_signed_id
            - rate_limited
            - idempotency_key_reused
            - request_in_progress
            - assistant_unavailable
            - quiz_required
        message:
          type: string
        request_id:
          type: string
        errors:
          type: object
          description: Erros de cada campo, presentes com o código validation_failed.
          additionalProperties:
            type: array
            items:
              type: object
              required:
                - code
                - message
              properties:
                code:
                  type: string
                  description: Motivo do erro, como blank, taken, too_short ou invalid.
                message:
                  type: string
                  description: Mensagem pronta para exibir, no idioma da área de membros.
    NamedRef:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
        name:
          type: string
    LessonLink:
      type:
        - object
        - 'null'
      required:
        - id
        - title
      properties:
        id:
          type: integer
        title:
          type: string
    LessonLock:
      type: object
      required:
        - reason
        - available_at
        - requirement
      properties:
        reason:
          type: string
          enum:
            - blocked
            - deadline_passed
            - countdown
            - timespan
            - after_section
            - after_course
            - after_lesson
            - minimum_scoring
            - course_onboarding
          description: Motivo do bloqueio.
        available_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Data de liberação, presente para countdown e timespan.
        requirement:
          type:
            - string
            - 'null'
          description: >-
            O título da aula, o nome do módulo ou do curso a concluir, ou os
            pontos que faltam.
  responses:
    Unauthenticated:
      description: >-
        Membro não autenticado (code unauthenticated, invalid_token,
        session_replaced, session_revoked ou invalid_headless_key).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    SubscriptionSuspended:
      description: Assinatura da área de membros suspensa (code subscription_suspended).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        Acesso negado (code forbidden, onboarding_required,
        course_onboarding_required, access_expired, content_locked,
        comments_disabled, quiz_required ou assistant_unavailable).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Limite de requisições atingido (code rate_limited).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
    headlessKey:
      type: apiKey
      in: header
      name: X-Memberkit-Headless-Key
      description: >-
        Chave headless da área de membros, em Configurações. É pública e vai em
        todas as requisições, inclusive nas que levam o token do membro.

````

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