Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Renzo717/Aula-Virtual-Universidad-Radiolocucion/llms.txt

Use this file to discover all available pages before exploring further.

The virtual classroom (/api/aula) is the core module of NuestraVoz — Campus Virtual. It exposes endpoints for every major classroom feature: browsing enrolled subjects, posting announcements, creating and submitting activities (both file-based and form/quiz-based), managing downloadable resources, and configuring quick-access links. All endpoints require a valid session token; role-specific restrictions are noted per endpoint.

Subjects

List subjects

GET /api/aula/materias
Returns the list of subjects visible to the authenticated user. The response set differs by role:
  • admin / preceptor — all active subjects including the assigned docente.
  • docente — only subjects where docente_id matches the caller.
  • estudiante — subjects derived from the student’s active enrollments (by carrera or by specific materia inscription).
Each subject includes a nested carrera object (nombre, anio) and a docente object (nombre, apellido). Auth: All authenticated roles
curl -X GET https://api.nuestravoz.edu.ar/api/aula/materias \
  -H "Authorization: Bearer <token>"
const response = await fetch("/api/aula/materias", {
  headers: { Authorization: `Bearer ${token}` },
});
const { data } = await response.json();
data
Materia[]
Array of active subject records.
id
string
UUID of the subject.
nombre
string
Subject name.
carrera_id
string | null
Parent career UUID.
promocional
boolean
Whether the subject is promotional.
docente_id
string | null
Assigned teacher UUID.
horario
string | null
Legacy schedule string (HH:mm - HH:mm).
horarios
HorarioCursado[]
Structured schedule entries.
zoom_url
string | null
Zoom class link.
programa_url
string | null
Syllabus URL.
activa
boolean
Whether the subject is active.
carrera
object
Nested career: nombre, anio.
docente
object
Nested teacher: nombre, apellido.

List pending activities across all subjects (student)

GET /api/aula/mis-pendientes
Returns all active activities across the student’s enrolled subjects that do not yet have a completed submission. Each activity includes a mi_entrega field summarising the student’s current submission state (estado, nota, tardia). If the caller is not a student, an empty array is returned. Auth: estudiante (other roles receive { data: [] }) Query parameters:
materiaId
string
Filter results to a single subject UUID. Ignored if the student is not enrolled in that subject.
curl -X GET "https://api.nuestravoz.edu.ar/api/aula/mis-pendientes?materiaId=<uuid>" \
  -H "Authorization: Bearer <token>"
data
Actividad[]
Active activities with a mi_entrega summary attached to each item.
id
string
Activity UUID.
titulo
string
Activity title.
fecha_entrega
string | null
ISO 8601 deadline.
estado
string
Activity state (activa, cerrada, terminada).
materia
object
Nested { nombre } of the parent subject.
mi_entrega
object | null
Summary: estado, nota, tardia. null if not submitted.

Get single subject

GET /api/aula/:materiaId
Returns full detail for one subject, including the carrera (nombre, codigo) and docente (id, nombre, apellido, avatar_url). Auth: All authenticated roles
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId> \
  -H "Authorization: Bearer <token>"
data
Materia
Full subject object with nested carrera and docente.

Announcements

List announcements

GET /api/aula/:materiaId/anuncios
Returns all announcements for a subject, ordered newest-first. Each announcement includes a nested autor object with nombre, apellido, and avatar_url. Auth: All authenticated roles
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/anuncios \
  -H "Authorization: Bearer <token>"
data
Anuncio[]
id
string
Announcement UUID.
titulo
string
Title.
contenido
string
Body text.
tipo
string
info or warning.
created_at
string
ISO 8601 creation timestamp.
autor
object
nombre, apellido, avatar_url.

Create announcement

POST /api/aula/:materiaId/anuncios
Creates a new announcement in the specified subject. The autor_id is set automatically from the authenticated user. Auth: admin, docente Request body (application/json):
titulo
string
required
Announcement title. Minimum 2 characters.
contenido
string
required
Announcement body. Minimum 2 characters.
tipo
string
Visual severity. One of info (default) or warning.
curl -X POST https://api.nuestravoz.edu.ar/api/aula/<materiaId>/anuncios \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"titulo": "Cambio de horario", "contenido": "La clase del viernes se pasa al sábado.", "tipo": "warning"}'
Returns 201 with the created Anuncio object including the nested autor.

Activities

List activities

GET /api/aula/:materiaId/actividades
Returns all activities for a subject ordered by fecha_entrega ascending. Each activity includes its materiales (attached files). For students, a mi_entrega summary (estado, nota, tardia) is appended to each item. Auth: All authenticated roles
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades \
  -H "Authorization: Bearer <token>"
data
Actividad[]
id
string
Activity UUID.
titulo
string
Title.
descripcion
string | null
Optional description.
tipo
string
entregable_simple or formulario.
estado
string
activa, cerrada, or terminada.
fecha_entrega
string | null
ISO 8601 deadline.
permite_entrega_tardia
boolean
Whether late submissions are accepted.
materiales
ActividadMaterial[]
Attached material files.
mi_entrega
object | null
Student-only: estado, nota, tardia.

Create activity

POST /api/aula/:materiaId/actividades
Creates a new activity. When tipo is formulario, the preguntas array must be provided and the total of all puntos must equal exactly 10. Auth: admin, docente Request body (application/json) — createActividadSchema:
titulo
string
required
Activity title. Minimum 2 characters.
descripcion
string
Optional description text.
tipo
string
Activity type. One of entregable_simple (default) or formulario.
fecha_entrega
string
Optional ISO 8601 or YYYY-MM-DD deadline string.
permite_entrega_tardia
boolean
Whether to accept submissions after the deadline. Defaults to true.
preguntas
FormularioPregunta[]
Required when tipo is formulario. Array of question objects. The sum of all puntos must equal 10.Each question object:
  • enunciado (string, required) — question text, minimum 2 characters.
  • multiple (boolean) — whether multiple answer options can be selected.
  • puntos (number, positive) — point value for this question.
  • opciones (array, min 2) — answer choices. Each option: texto (string), es_correcta (boolean). Single-answer questions must have exactly one correct option.
curl -X POST https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "titulo": "TP 1 – Locución",
    "descripcion": "Grabá un fragmento de 2 minutos y adjuntalo.",
    "tipo": "entregable_simple",
    "fecha_entrega": "2025-08-15",
    "permite_entrega_tardia": false
  }'
Returns 201 with the created Actividad and its materiales.

Update activity

PATCH /api/aula/:materiaId/actividades/:actividadId
Partially updates an activity’s editable fields. To clear the deadline, send fecha_entrega: null. Auth: admin, docente
titulo
string
Updated title (min 2 chars).
descripcion
string
Updated description.
fecha_entrega
string | null
New deadline or null to remove it.
permite_entrega_tardia
boolean
Toggle late submission acceptance.
Returns the updated Actividad with materiales.

Update activity state

PATCH /api/aula/:materiaId/actividades/:actividadId/estado
Changes only the lifecycle state of an activity. Auth: admin, docente
estado
string
required
New state. One of activa, cerrada, or terminada.
curl -X PATCH https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/estado \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"estado": "cerrada"}'
Returns the updated Actividad.

Upload activity materials

POST /api/aula/:materiaId/actividades/:actividadId/material
Attaches one or more files to an existing activity as supplementary materials. Accepts multipart/form-data with up to 10 files (20 MB per file). Each uploaded file is stored in Supabase Storage and a corresponding actividad_materiales record is created. Returns all newly inserted material records. Auth: admin, docente Form fields:
archivos
file[]
required
One or more files to attach (field name archivos). At least one file is required.
curl -X POST https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/material \
  -H "Authorization: Bearer <token>" \
  -F "archivos=@guia_practica.pdf" \
  -F "archivos=@ejemplo.mp3"
Returns 201 with an array of the created ActividadMaterial records.
data
ActividadMaterial[]
id
string
Material record UUID.
actividad_id
string
Parent activity UUID.
nombre
string
Original filename.
storage_path
string
Public URL of the stored file.
created_at
string
ISO 8601 creation timestamp.

Delete activity material

DELETE /api/aula/:materiaId/actividades/:actividadId/material/:materialId
Removes a specific material file attachment from an activity. The materialId must belong to the given actividadId, which must itself belong to materiaId. Auth: admin, docente
curl -X DELETE https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/material/<materialId> \
  -H "Authorization: Bearer <token>"
Returns { data: { ok: true } }.

Delete activity

DELETE /api/aula/:materiaId/actividades/:actividadId
Permanently deletes an activity and its associated data. Auth: admin, docente
curl -X DELETE https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId> \
  -H "Authorization: Bearer <token>"
Returns { data: { ok: true } }.

File Submissions

Get my submission (student)

GET /api/aula/:materiaId/actividades/:actividadId/mi-entrega
Returns the authenticated student’s submission for an activity, including all attached files (archivos). Returns { data: null } if the student has not yet submitted. Auth: estudiante (must be enrolled in the subject)
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/mi-entrega \
  -H "Authorization: Bearer <token>"
data
Entrega | null
id
string
Submission UUID.
estado
string
entregada or calificada.
nota
number | null
Grade (1–10), assigned by teacher.
comentario
string | null
Student comment.
tardia
boolean
Whether submitted after the deadline.
archivos
EntregaArchivo[]
Attached file records: id, nombre, storage_path.

Submit or resubmit (file upload)

POST /api/aula/:materiaId/actividades/:actividadId/entrega
Creates or updates a file-based submission. Accepts multipart/form-data with up to 10 files (20 MB per file). If a submission already exists, it is updated in place (files are appended). The tardia flag is set automatically when the current time is past fecha_entrega. Auth: estudiante (must be enrolled in the subject) Form fields:
archivos
file[]
required
One or more files to attach (field name archivos). At least one file is required for new submissions.
comentario
string
Optional text comment to accompany the submission.
curl -X POST https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/entrega \
  -H "Authorization: Bearer <token>" \
  -F "archivos=@locución.mp3" \
  -F "comentario=Primera versión del ejercicio"
Returns 201 (new submission) or 200 (updated submission) with the full Entrega object and archivos.

Grade a submission

PATCH /api/aula/:materiaId/actividades/:actividadId/entregas/:entregaId
Assigns a numeric grade to a file-based submission, setting its estado to calificada. Auth: admin, docente
nota
number
required
Grade value. Must be between 1 and 10 (inclusive).
curl -X PATCH https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/entregas/<entregaId> \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"nota": 8}'
Returns the updated Entrega with the nested estudiante profile and archivos.

List all submissions for an activity (teacher)

GET /api/aula/:materiaId/actividades/:actividadId/entregas
Returns every student submission for an activity, ordered by updated_at descending. Each submission includes the nested estudiante profile and archivos. Auth: admin, docente
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/entregas \
  -H "Authorization: Bearer <token>"
data
Entrega[]
Array of submission objects. Each includes estudiante (id, nombre, apellido, email, avatar_url) and archivos.

Delete a submission file

DELETE /api/aula/entregas/archivos/:archivoId
Removes a specific file from an existing submission. Only the student who owns the submission can delete their own files. Auth: estudiante Returns { data: { ok: true } }.

Form Activities

Get form questions

GET /api/aula/:materiaId/actividades/:actividadId/formulario
Returns the questions and answer options for a form-type activity. Teachers and admins receive questions with the es_correcta flag visible. Students who have already submitted see questions with answers revealed; students who have not yet submitted receive questions with es_correcta hidden (correct answers are obscured). Auth: All authenticated roles
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/formulario \
  -H "Authorization: Bearer <token>"
data
FormularioPregunta[]
id
string
Question UUID.
enunciado
string
Question text.
multiple
boolean
Whether multiple answers are allowed.
puntos
number
Point value.
opciones
FormularioOpcion[]
Answer choices. es_correcta may be omitted for students before submission.

Submit form answers

POST /api/aula/:materiaId/actividades/:actividadId/formulario-entrega
Submits a student’s answers to a form activity. Grading is computed server-side immediately. Submission is rejected if: the student has already answered, the activity is cerrada/terminada, the deadline has passed and permite_entrega_tardia is false, or any question is left unanswered. Auth: estudiante (must be enrolled in the subject) Request body (application/json) — enviarFormularioSchema:
respuestas
Respuesta[]
required
Array of answer objects. Must include one entry per question.Each item:
  • pregunta_id (UUID, required) — the question being answered.
  • opcion_ids (UUID[], min 1, required) — selected option(s). Single-answer questions must have exactly one entry.
curl -X POST https://api.nuestravoz.edu.ar/api/aula/<materiaId>/actividades/<actividadId>/formulario-entrega \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "respuestas": [
      { "pregunta_id": "<uuid>", "opcion_ids": ["<uuid>"] },
      { "pregunta_id": "<uuid>", "opcion_ids": ["<uuid>", "<uuid>"] }
    ]
  }'
Returns 201 with { data: { entrega, resultados, nota } }.
data.entrega
Entrega
Stored submission record (estado: calificada).
data.nota
number
Computed grade (0–10).
data.resultados
ResultadoPregunta[]
Per-question breakdown: pregunta_id, enunciado, puntos, puntos_obtenidos, opciones with seleccionada and es_correcta flags.

Get my form submission and results (student)

GET /api/aula/:materiaId/actividades/:actividadId/mi-entrega-formulario
Returns the student’s own form submission together with a full per-question breakdown. Returns { data: null } if the student has not answered yet. Auth: estudiante (must be enrolled)

List all form results (teacher)

GET /api/aula/:materiaId/actividades/:actividadId/formulario-resultados
Returns every enrolled student paired with their form submission status. Students who have not submitted appear with entrega: null. Auth: admin, docente
data
FormularioResultadoAlumno[]
estudiante
object
id, nombre, apellido, email, avatar_url.
entrega
object | null
Submission summary: id, estado, nota, tardia, updated_at.

Get a student’s form answers (teacher)

GET /api/aula/:materiaId/actividades/:actividadId/entregas/:entregaId/respuestas
Returns a specific student’s form submission with a complete per-question correctness breakdown. Auth: admin, docente
data.entrega
Entrega
Full submission with nested estudiante profile.
data.nota
number
Computed grade.
data.resultados
ResultadoPregunta[]
Per-question result breakdown.

Resources

List resources

GET /api/aula/:materiaId/recursos
Returns all downloadable resources for a subject, ordered newest-first. Each resource includes the uploader’s nombre and apellido. Auth: All authenticated roles
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/recursos \
  -H "Authorization: Bearer <token>"
data
Recurso[]
id
string
Resource UUID.
nombre
string
Display name.
descripcion
string | null
Optional description.
storage_path
string
Public URL of the stored file.
tipo
string
Inferred type: imagen, video, audio, documento, hoja, or presentacion.
subidor
object
nombre, apellido of uploader.

Upload resource

POST /api/aula/:materiaId/recursos
Uploads a new resource file to a subject. Accepts multipart/form-data with a single file (max 20 MB). The file tipo is inferred automatically from the MIME type. Auth: admin, docente Form fields:
archivo
file
required
The file to upload (field name archivo).
nombre
string
required
Display name. 1–150 characters.
descripcion
string
Optional description. Maximum 2000 characters.
curl -X POST https://api.nuestravoz.edu.ar/api/aula/<materiaId>/recursos \
  -H "Authorization: Bearer <token>" \
  -F "archivo=@programa.pdf" \
  -F "nombre=Programa de la materia" \
  -F "descripcion=Versión 2025"
Returns 201 with the created Recurso including the nested subidor.

Delete resource

DELETE /api/aula/:materiaId/recursos/:recursoId
Permanently deletes a resource record (the file in storage is not automatically removed). Auth: admin, docente Returns { data: { ok: true } }.
GET /api/aula/:materiaId/accesos
Returns all quick-access links for a subject, ordered by orden then created_at ascending. Auth: All authenticated roles
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/accesos \
  -H "Authorization: Bearer <token>"
data
AccesoRapido[]
id
string
Link UUID.
nombre
string
Display label.
icono
string
Material Symbols icon identifier.
url
string
Target URL.
orden
number
Sort position.

POST /api/aula/:materiaId/accesos
Adds a new quick-access link to the subject. Auth: admin, docente
nombre
string
required
Display label. Minimum 2 characters.
icono
string
required
Icon identifier from the allowed set: link, video_camera_front, menu_book, groups, language, description, quiz, calendar_month, folder, email, school, cloud_download, visibility, open_in_new.
url
string
required
Fully qualified URL (must include protocol).
curl -X POST https://api.nuestravoz.edu.ar/api/aula/<materiaId>/accesos \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"nombre": "Clase por Zoom", "icono": "video_camera_front", "url": "https://zoom.us/j/123456789"}'
Returns 201 with the created AccesoRapido.
PUT /api/aula/:materiaId/accesos/:accesoId
Updates any combination of nombre, icono, and url for an existing quick link. All fields are optional. Auth: admin, docente Returns the updated AccesoRapido.
DELETE /api/aula/:materiaId/accesos/:accesoId
Permanently deletes a quick-access link. Auth: admin, docente Returns { data: { ok: true } }.

Clear legacy access fields

PATCH /api/aula/:materiaId/accesos-legacy
Nullifies the legacy zoom_url and/or programa_url fields stored directly on the materias record. These fields pre-date the structured accesos_rapidos table. Supply the field(s) you want to clear by setting their value to null; omitting a field leaves it unchanged. At least one field must be provided. Auth: admin, docente Request body (application/json):
zoom_url
null
Pass null to clear the legacy Zoom URL on the subject record.
programa_url
null
Pass null to clear the legacy syllabus URL on the subject record.
curl -X PATCH https://api.nuestravoz.edu.ar/api/aula/<materiaId>/accesos-legacy \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"zoom_url": null}'
data
object
id
string
Subject UUID.
zoom_url
string | null
Updated Zoom URL (will be null if cleared).
programa_url
string | null
Updated syllabus URL (will be null if cleared).

Roster

List enrolled students

GET /api/aula/:materiaId/alumnos
Returns the list of students enrolled in a subject (via carrera-level or subject-specific inscriptions). Each entry includes the student’s profile (id, nombre, apellido, email, avatar_url). Auth: admin, docente
curl -X GET https://api.nuestravoz.edu.ar/api/aula/<materiaId>/alumnos \
  -H "Authorization: Bearer <token>"
data
object[]
Enrollment records with a nested usuario profile: id, nombre, apellido, email, avatar_url.

Build docs developers (and LLMs) love