> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gravitypay.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Progresso do aluno

> Retorna o progresso detalhado de cada matrícula do aluno, inclusive revogada ou vencida, sem paginação. `totalLessons` conta só as aulas publicadas, de módulos publicados, que a turma da matrícula vê. Aluno de outra loja ou de pré-visualização responde 404; `courseId` de outra loja responde 400.

Escopo exigido: `students:read`.



## OpenAPI

````yaml /openapi.json get /v1/students/{id}/progress
openapi: 3.1.0
info:
  title: Gravity Play API
  version: 1.0.0
  description: >-
    API para criar cobranças, receber pagamentos e ler cursos, turmas, alunos e
    progresso da área de membros. Cada chave de API tem escopos; cada operação
    indica o escopo que exige.
servers:
  - url: https://api.sandbox.gravitypay.app
    description: Sandbox (testes) — alvo do try-it
  - url: https://api.gravitypay.app
    description: Produção
security:
  - bearerAuth: []
tags:
  - name: Cobranças
    description: Cobranças avulsas com link de pagamento.
  - name: Pagamentos
    description: Vendas da loja e vendedores.
  - name: Assinaturas
    description: Assinaturas da loja, com dados do cliente. Exige `subscriptions:read`.
  - name: Cursos
    description: Cursos da área de membros, com módulos e aulas.
  - name: Turmas
    description: Turmas dos cursos.
  - name: Alunos
    description: 'Alunos, matrículas e progresso. Dado pessoal: exige `students:read`.'
paths:
  /v1/students/{id}/progress:
    get:
      tags:
        - Alunos
      summary: Progresso do aluno
      description: >-
        Retorna o progresso detalhado de cada matrícula do aluno, inclusive
        revogada ou vencida, sem paginação. `totalLessons` conta só as aulas
        publicadas, de módulos publicados, que a turma da matrícula vê. Aluno de
        outra loja ou de pré-visualização responde 404; `courseId` de outra loja
        responde 400.


        Escopo exigido: `students:read`.
      operationId: getStudentProgress
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: courseId
          in: query
          required: false
          schema:
            type: string
          description: Devolve só o progresso da matrícula neste curso.
      responses:
        '200':
          description: Progresso por matrícula
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CourseProgressList'
              example:
                object: list
                data:
                  - object: course_progress
                    enrollmentId: clx1enroll001
                    courseId: clx1course0001
                    studentId: clx1student01
                    completedLessons: 2
                    totalLessons: 4
                    percent: 50
                    completedAt: null
                    lastActivityAt: '2026-09-12T09:30:00.000Z'
                    certificate: null
                    lessons:
                      - lessonId: clx1lesson001
                        moduleId: clx1module001
                        status: COMPLETED
                        watchedSeconds: 312
                        percentWatched: 100
                        completedAt: '2026-09-12T09:30:00.000Z'
                      - lessonId: clx1lesson002
                        moduleId: clx1module001
                        status: NOT_STARTED
                        watchedSeconds: 0
                        percentWatched: 0
                        completedAt: null
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/InsufficientScope'
        '404':
          $ref: '#/components/responses/Error'
components:
  schemas:
    CourseProgressList:
      type: object
      description: 'Lista sem paginação: um aluno tem poucas matrículas.'
      required:
        - object
        - data
      properties:
        object:
          type: string
          enum:
            - list
        data:
          type: array
          items:
            $ref: '#/components/schemas/CourseProgress'
    CourseProgress:
      type: object
      required:
        - object
        - enrollmentId
        - courseId
        - studentId
        - completedLessons
        - totalLessons
        - percent
        - completedAt
        - lastActivityAt
        - certificate
        - lessons
      properties:
        object:
          type: string
          enum:
            - course_progress
        enrollmentId:
          type: string
        courseId:
          type: string
        studentId:
          type: string
        completedLessons:
          type: integer
          description: Aulas contadas em totalLessons com status COMPLETED.
        totalLessons:
          type: integer
          description: >-
            Aulas publicadas, de módulos publicados, que a turma da matrícula
            vê.
        percent:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            completedLessons / totalLessons × 100, arredondado; 0 quando
            totalLessons é 0.
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Conclusão mais recente entre as aulas contadas, quando todas estão
            concluídas.
        lastActivityAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Atualização mais recente do progresso do aluno nas aulas do curso.
        certificate:
          oneOf:
            - $ref: '#/components/schemas/Certificate'
            - type: 'null'
        lessons:
          type: array
          description: Cada aula contada em totalLessons, na ordem do curso.
          items:
            $ref: '#/components/schemas/LessonProgress'
    Error:
      type: object
      properties:
        error:
          type: object
          required:
            - type
            - message
          properties:
            type:
              type: string
              description: >-
                `authentication` (401), `insufficient_scope` (403),
                `invalid_request` (400) ou `not_found` (404).
            message:
              type: string
            param:
              type: string
              description: Parâmetro que falhou, em `invalid_request`.
            requiredScope:
              type: string
              description: Escopo que falta, em `insufficient_scope`.
    Certificate:
      type: object
      required:
        - id
        - object
        - code
        - courseId
        - studentId
        - studentName
        - courseTitle
        - workloadHours
        - completedAt
        - issuedAt
      properties:
        id:
          type: string
        object:
          type: string
          enum:
            - certificate
        code:
          type: string
          description: Código público de verificação.
        courseId:
          type: string
        studentId:
          type: string
        studentName:
          type: string
          description: Nome na emissão.
        courseTitle:
          type: string
          description: Título do curso na emissão.
        workloadHours:
          type: integer
        completedAt:
          type: string
          format: date-time
        issuedAt:
          type: string
          format: date-time
    LessonProgress:
      type: object
      required:
        - lessonId
        - moduleId
        - status
        - watchedSeconds
        - percentWatched
        - completedAt
      properties:
        lessonId:
          type: string
        moduleId:
          type: string
        status:
          type: string
          enum:
            - NOT_STARTED
            - IN_PROGRESS
            - COMPLETED
        watchedSeconds:
          type: integer
        percentWatched:
          type: integer
          minimum: 0
          maximum: 100
        completedAt:
          type:
            - string
            - 'null'
          format: date-time
  responses:
    Error:
      description: Erro
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InsufficientScope:
      description: A chave é válida, mas não tem o escopo exigido pela operação.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: insufficient_scope
              message: Esta chave de API não tem o escopo students:read.
              requiredScope: students:read
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````