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

# Buscar matérias com suas turmas

> Consulta os componentes e turmas gravados no Followw, sem ir ao SIGAA; os filtros se combinam. Cada componente traz as turmas do semestre consultado, vazias se não houver oferta. Sem q, code e unit, um aluno de graduação logado recebe as recomendações para o próximo semestre, ordenadas e com `recommendation`; visitantes precisam informar um filtro.



## OpenAPI

````yaml /mintlify/openapi.json get /public/subjects
openapi: 3.1.0
info:
  title: Followw UnB API
  description: >-
    Cliente alternativo e open-source para o ecossistema de sistemas da
    Universidade de Brasília (UnB). Agrega em uma experiência unificada e
    performática dados do SIGAA, Restaurante Universitário (RU) e calendário
    oficial, com autenticação stateless delegada ao CAS da UnB, credenciais
    cifradas em cookies JWE (AES-256-GCM), sincronização assíncrona inteligente
    e cache resiliente via Stale-While-Revalidate.
  version: 0.1.0
servers:
  - url: https://api.followw.app
    description: Produção
  - url: http://localhost:8000
    description: Desenvolvimento local
security: []
tags:
  - name: Auth
    description: >-
      Autenticação via SIGAA/CAS da UnB e gerenciamento de sessão stateless por
      cookies.
  - name: Classrooms
    description: >-
      Turmas do semestre e histórico, participantes, frequência e estatísticas
      de aprovação.
  - name: Me
    description: >-
      Perfil acadêmico, extrato/saldo do RU e carteirinha do estudante
      autenticado.
  - name: Public Classrooms
    description: Busca pública de turmas e unidades do SIGAA, sem autenticação.
    x-displayName: Classrooms
  - name: Public Courses
    description: >-
      Cursos cadastrados e seus currículos por semestre de ingresso, sem
      autenticação.
    x-displayName: Courses
  - name: Public Professors
    description: Catálogo público de docentes do SIGAA, sem autenticação.
    x-displayName: Professors
  - name: Public Restaurant
    description: Cardápio público do RU, sem autenticação.
    x-displayName: Restaurant
  - name: Public Subjects
    description: Componentes curriculares de graduação e suas turmas, sem autenticação.
    x-displayName: Subjects
  - name: Posts
    description: >-
      Notícias e avaliações recentes das turmas, consultadas diretamente na home
      do SIGAA.
paths:
  /public/subjects:
    get:
      tags:
        - Public Subjects
      summary: Buscar matérias com suas turmas
      description: >-
        Consulta os componentes e turmas gravados no Followw, sem ir ao SIGAA;
        os filtros se combinam. Cada componente traz as turmas do semestre
        consultado, vazias se não houver oferta. Sem q, code e unit, um aluno de
        graduação logado recebe as recomendações para o próximo semestre,
        ordenadas e com `recommendation`; visitantes precisam informar um
        filtro.
      operationId: search_subjects_public_subjects_get
      parameters:
        - name: q
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                minLength: 3
                maxLength: 32
                pattern: \S
              - type: 'null'
            description: >-
              Trecho do código, nome do componente ou docente, de 3 a 32
              caracteres, ignorando acentos, maiúsculas e espaços extras.
            title: Q
          description: >-
            Trecho do código, nome do componente ou docente, de 3 a 32
            caracteres, ignorando acentos, maiúsculas e espaços extras.
        - name: code
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                pattern: ^\s*[A-Za-z]+[0-9]+\s*$
              - type: 'null'
            description: Código completo do componente, como FGA0003.
            title: Code
          description: Código completo do componente, como FGA0003.
        - name: unit
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
                maximum: 2147483647
                exclusiveMinimum: 0
              - type: string
                pattern: '[^0-9]'
              - type: 'null'
            description: ID ou código exato da unidade responsável, como 673 ou FCTE.
            title: Unit
          description: ID ou código exato da unidade responsável, como 673 ou FCTE.
        - name: semester
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                pattern: ^[0-9]{4}\.[0-9]$
              - type: 'null'
            description: >-
              Semestre das turmas, no formato AAAA.P. Sem ele, usa o mais
              recente gravado.
            title: Semester
          description: >-
            Semestre das turmas, no formato AAAA.P. Sem ele, usa o mais recente
            gravado.
        - name: Cache-Control
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              `no-cache` (ou `max-age=0`) busca na origem antes de responder;
              `max-age=N` aceita cache de até N s; `stale-if-error[=N]` devolve
              o cache se a origem falhar; `only-if-cached` nunca busca (504 sem
              cache).
            title: Cache-Control
          description: >-
            `no-cache` (ou `max-age=0`) busca na origem antes de responder;
            `max-age=N` aceita cache de até N s; `stale-if-error[=N]` devolve o
            cache se a origem falhar; `only-if-cached` nunca busca (504 sem
            cache).
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CatalogSubject'
                title: Response Search Subjects Public Subjects Get
        '401':
          description: Sessão inválida ao buscar recomendações.
        '422':
          description: >-
            Visitante sem filtro, usuário fora da graduação ou sem matriz
            identificada sem filtro, filtro inválido, unidade inexistente ou
            nome de unidade ambíguo.
        '502':
          description: Falha no SIGAA ao sincronizar o histórico das recomendações.
        '503':
          description: Histórico alterado durante a consulta das recomendações.
components:
  schemas:
    CatalogSubject:
      properties:
        code:
          type: string
          title: Code
        name:
          type: string
          title: Name
        hours:
          anyOf:
            - type: integer
            - type: 'null'
          title: Hours
        unit:
          anyOf:
            - $ref: '#/components/schemas/UnitRef'
            - type: 'null'
        prerequisites:
          anyOf:
            - $ref: '#/components/schemas/CatalogRequirements'
            - type: 'null'
        corequisites:
          anyOf:
            - $ref: '#/components/schemas/CatalogRequirements'
            - type: 'null'
        equivalences:
          anyOf:
            - $ref: '#/components/schemas/CatalogRequirements'
            - type: 'null'
        curriculum_prerequisites:
          anyOf:
            - $ref: '#/components/schemas/CatalogRequirements'
            - type: 'null'
        curriculum_corequisites:
          anyOf:
            - $ref: '#/components/schemas/CatalogRequirements'
            - type: 'null'
        offered_equivalences:
          anyOf:
            - $ref: '#/components/schemas/CatalogRequirements'
            - type: 'null'
        classrooms:
          items:
            $ref: '#/components/schemas/SubjectClassroom'
          type: array
          title: Classrooms
        kind:
          anyOf:
            - type: string
              enum:
                - mandatory
                - optional
                - free
            - type: 'null'
          title: Kind
        unlocks:
          items:
            $ref: '#/components/schemas/SubjectReference'
          type: array
          title: Unlocks
        curriculum_period:
          anyOf:
            - type: integer
            - type: 'null'
          title: Curriculum Period
        recommendation:
          anyOf:
            - $ref: '#/components/schemas/SubjectRecommendation'
            - type: 'null'
      type: object
      required:
        - code
        - name
        - classrooms
      title: CatalogSubject
      description: O componente com as turmas do semestre consultado e os requisitos.
    UnitRef:
      properties:
        id:
          type: integer
          title: Id
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
        name:
          type: string
          title: Name
      type: object
      required:
        - id
        - code
        - name
      title: UnitRef
      description: 'Unidade acadêmica: `id` do SIGAA, `code` a sigla (ex.: FCTE).'
    CatalogRequirements:
      items:
        items:
          $ref: '#/components/schemas/SubjectRequirement'
        type: array
      type: array
    SubjectClassroom:
      properties:
        professors:
          items:
            type: string
          type: array
          title: Professors
          default: []
        vacancies:
          anyOf:
            - type: integer
            - type: 'null'
          title: Vacancies
          description: Vagas na coleta do seed, não em tempo real.
        occupied:
          anyOf:
            - type: integer
            - type: 'null'
          title: Occupied
          description: Ocupação na coleta do seed, não em tempo real.
        sigaa_id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Sigaa Id
        number:
          type: string
          title: Number
        semester:
          type: string
          title: Semester
        schedule:
          anyOf:
            - type: string
            - type: 'null'
          title: Schedule
        room:
          anyOf:
            - type: string
            - type: 'null'
          title: Room
      type: object
      required:
        - number
        - semester
      title: SubjectClassroom
    SubjectReference:
      properties:
        code:
          type: string
          title: Code
        name:
          type: string
          title: Name
      type: object
      required:
        - code
        - name
      title: SubjectReference
    SubjectRecommendation:
      properties:
        reasons:
          items:
            $ref: '#/components/schemas/SubjectReason'
          type: array
          title: Reasons
      type: object
      required:
        - reasons
      title: SubjectRecommendation
      description: Motivos da posição no ranking, do mais ao menos relevante.
    SubjectRequirement:
      properties:
        code:
          type: string
          title: Code
        subject:
          anyOf:
            - $ref: '#/components/schemas/SubjectReference'
            - type: 'null'
      type: object
      required:
        - code
      title: SubjectRequirement
    SubjectReason:
      properties:
        code:
          $ref: '#/components/schemas/ReasonCode'
        value:
          anyOf:
            - type: integer
            - type: 'null'
          title: Value
      type: object
      required:
        - code
      title: SubjectReason
    ReasonCode:
      type: string
      enum:
        - required
        - target_period
        - overdue
        - same_unit
        - chain_length
        - chain_width
        - hours

````

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