Introduction
API oficial para acceder a los sistemas académicos de la Universidad Santander, incluyendo información sobre actividades, materias, calificaciones y programas académicos.
Bienvenido a la API de la Universidad Santander
Esta documentación proporciona toda la información necesaria para trabajar con nuestra API, permitiendo acceder a sistemas académicos de la institución, consultar información sobre actividades, materias, calificaciones y programas académicos.
Información general
- Nuestra API sigue los principios RESTful y utiliza formatos JSON estándar para el intercambio de datos
- Todos los endpoints (excepto login) requieren autenticación mediante tokens JWT
- Las respuestas incluyen códigos de estado HTTP apropiados y mensajes descriptivos
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer Bearer {YOUR_JWT_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
La API utiliza autenticación basada en tokens JWT. Debes obtener un token mediante el endpoint /api/auth/login proporcionando las credenciales del estudiante. El token debe incluirse en el encabezado de autorización como Bearer {token} para todas las solicitudes a endpoints protegidos. Los tokens expiran después de 1 hora y pueden renovarse usando el endpoint /api/auth/refresh.
Autenticación
Cerrar sesión
requires authentication
Invalida el token JWT del usuario autenticado actualmente.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/auth/logout" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/auth/logout"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/auth/logout';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"message": "Successfully logged out"
}
Example response (401):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Refrescar token
requires authentication
Genera un nuevo token JWT para el usuario autenticado.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/auth/refresh" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/auth/refresh"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/auth/refresh';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer",
"expires_in": 3600
}
Example response (401):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener información del usuario autenticado
requires authentication
Devuelve los datos del alumno autenticado actualmente.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/auth/me" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/auth/me"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/auth/me';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"matricula": "M12011299",
"nombre": "John Doe",
"email": "johndoe@example.com",
"estado": {
"id": 1,
"name": "Activo"
}
}
Example response (401):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Iniciar sesión
requires authentication
Autentica al alumno y devuelve un token JWT para usar en solicitudes posteriores.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/auth/login" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"matricula\": \"M12011299\",
\"password\": \"contraseña123\"
}"
const url = new URL(
"https://api.santander.edu.mx/api/auth/login"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"matricula": "M12011299",
"password": "contraseña123"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/auth/login';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'matricula' => 'M12011299',
'password' => 'contraseña123',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer",
"expires_in": 3600
}
Example response (401):
{
"error": "Unauthorized"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Enviar correo electrónico de recuperación de contraseña
Regresa la confirmación de envío del correo electrónico de recuperación de contraseña. Solo se puede enviar 1 vez por minuto por ip diferente.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/auth/forget" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"searchKey\": \"M12011299 o dvaldivia@unisant.edu.mx\"
}"
const url = new URL(
"https://api.santander.edu.mx/api/auth/forget"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"searchKey": "M12011299 o dvaldivia@unisant.edu.mx"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/auth/forget';
$response = $client->post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'searchKey' => 'M12011299 o dvaldivia@unisant.edu.mx',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"sent": true
}
Example response (200):
{
"sent": false
}
Example response (423):
{}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Actividades
APIs para gestionar las actividades del alumno
Recalcula las actividades de un alumno en una materia
requires authentication
Obtiene y recalcula las actividades asociadas a un alumno en una materia específica. Devuelve un listado de todas las actividades con su estado actual (presentada, calificada, etc.) y la calificación correspondiente.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/activities/151554/recount" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/activities/151554/recount"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/activities/151554/recount';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"actividades": [
{
"actividad_id": 6188,
"presentada": true,
"calificada": 1,
"calificacion": 10,
"estado": "aprobada",
"invalidada": 0
},
{
"actividad_id": 6189,
"presentada": true,
"calificada": 1,
"calificacion": 6.6,
"estado": "aprobada",
"invalidada": 0
}
]
}
/**
Example response (404):
{
"message": "Alumno materia not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
actividades
string[]
Un array de objetos, donde cada objeto representa una actividad.
actividad_id
integer
Identificador único de la actividad.
presentada
boolean
Indica si el alumno ha entregado la actividad.
calificada
integer
Indica si la actividad ha sido calificada (1) o no (0).
calificacion
number
La calificación numérica asignada a la actividad.
estado
string
Estado actual de la actividad. Posibles valores: "no presentada", "pendiente", "aprobada", "reprobada".
invalidada
integer
Indica si la actividad ha sido invalidada (1) o no (0). /
Materias de Estudiantes
APIs para gestionar las materias de los estudiantes
Este controlador permite consultar las materias de un estudiante según su estado:
- Materias actuales: Las que el estudiante está cursando actualmente
- Materias aprobadas: Las que el estudiante ha completado con calificación aprobatoria
- Materias reprobadas: Las que el estudiante ha cursado pero no ha aprobado
Todas las rutas requieren autenticación mediante token JWT.
Obtener Materias Actuales
requires authentication
Devuelve una lista de materias que se estan cursando para una oferta académica específica.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/subjects/1/current" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/subjects/1/current"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/subjects/1/current';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Éxito):
[
{
"id": 1,
"materia": "Matemáticas",
"profesor": "Juan Pérez",
"calificacion": 8.5,
"estado": "Cursando",
"estado_id": 1,
"fecha_inicio": "2025-01-15",
"fecha_termino": "2025-06-30"
},
{
"id": 2,
"materia": "Física",
"profesor": "María García",
"calificacion": null,
"estado": "Cursando",
"estado_id": 1,
"fecha_inicio": "2025-01-15",
"fecha_termino": "2025-06-30"
}
]
Example response (401, No autenticado):
{
"message": "No autenticado."
}
Example response (404, Oferta académica no encontrada):
{
"message": "Oferta académica no encontrada"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
integer
El identificador único de la relación alumno-materia
materia
string
Nombre completo de la materia
profesor
string
Nombre completo del profesor que imparte la materia
calificacion
number|null
Calificación obtenida por el alumno (null si aún no tiene calificación)
estado
string
Descripción textual del estado de la materia (Cursando, Aprobada, Reprobada)
estado_id
integer
Identificador numérico del estado (1=Cursando, 2=Aprobada, 3=Reprobada)
fecha_inicio
string
date Fecha de inicio del curso (formato YYYY-MM-DD)
fecha_termino
string
date Fecha de finalización del curso (formato YYYY-MM-DD)
Obtener Materias Aprobadas
requires authentication
Devuelve una lista de materias aprobadas para una oferta académica específica.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/subjects/1/approved" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/subjects/1/approved"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/subjects/1/approved';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Éxito):
[
{
"id": 3,
"materia": "Química",
"profesor": "Roberto Sánchez",
"calificacion": 9.2,
"estado": "Aprobada",
"estado_id": 2,
"fecha_inicio": "2024-08-10",
"fecha_termino": "2024-12-20"
},
{
"id": 4,
"materia": "Biología",
"profesor": "Laura Martínez",
"calificacion": 8.7,
"estado": "Aprobada",
"estado_id": 2,
"fecha_inicio": "2024-08-10",
"fecha_termino": "2024-12-20"
}
]
Example response (401, No autenticado):
{
"message": "No autenticado."
}
Example response (404, Oferta académica no encontrada):
{
"message": "Oferta académica no encontrada"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
integer
El identificador único de la relación alumno-materia
materia
string
Nombre completo de la materia
profesor
string
Nombre completo del profesor que impartió la materia
calificacion
number
La calificación final obtenida por el alumno
estado
string
Descripción textual del estado de la materia ("Aprobada")
estado_id
integer
Identificador numérico del estado (2=Aprobada)
fecha_inicio
string
date Fecha en que inició el curso (formato YYYY-MM-DD)
fecha_termino
string
date Fecha en que finalizó el curso (formato YYYY-MM-DD)
Obtener Materias Reprobadas
requires authentication
Devuelve una lista de materias reprobadas para una oferta académica específica.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/subjects/1/rejected" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/subjects/1/rejected"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/subjects/1/rejected';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Éxito):
[
{
"id": 5,
"materia": "Historia",
"profesor": "Carlos Rodríguez",
"calificacion": 5.4,
"estado": "Reprobada",
"estado_id": 3,
"fecha_inicio": "2024-02-05",
"fecha_termino": "2024-06-15"
},
{
"id": 6,
"materia": "Literatura",
"profesor": "Ana López",
"calificacion": 5.9,
"estado": "Reprobada",
"estado_id": 3,
"fecha_inicio": "2024-02-05",
"fecha_termino": "2024-06-15"
}
]
Example response (401, No autenticado):
{
"message": "No autenticado."
}
Example response (404, Oferta académica no encontrada):
{
"message": "Oferta académica no encontrada"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
integer
El identificador único de la relación alumno-materia
materia
string
Nombre completo de la materia
profesor
string
Nombre completo del profesor que impartió la materia
calificacion
number
La calificación final obtenida por el alumno (inferior a la nota de aprobación)
estado
string
Descripción textual del estado de la materia ("Reprobada")
estado_id
integer
Identificador numérico del estado (3=Reprobada)
fecha_inicio
string
date Fecha en que inició el curso (formato YYYY-MM-DD)
fecha_termino
string
date Fecha en que finalizó el curso (formato YYYY-MM-DD)
Obtener Historial Completo de una Materia
requires authentication
Devuelve el historial académico completo de una materia específica para un alumno, mostrando todos los intentos realizados independientemente de su estado (cursando, aprobada, reprobada).
A diferencia de los endpoints de materias por estado (current/approved/rejected), este endpoint:
- Muestra TODOS los intentos de una misma materia, incluso si fue aprobada múltiples veces con diferentes calificaciones
- Permite ver la progresión histórica completa del alumno en esta materia específica
- Facilita el análisis de cuántas veces ha sido necesario cursar la materia hasta aprobarla
- Muestra todos los profesores con los que se ha cursado la materia
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/subjects/10" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/subjects/10"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/subjects/10';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Éxito):
[
{
"id": 10,
"materia": "Cálculo Diferencial",
"profesor": "Roberto Méndez",
"calificacion": 4.5,
"estado": "Reprobada",
"estado_id": 3,
"fecha_inicio": "2023-08-10",
"fecha_termino": "2023-12-20"
},
{
"id": 24,
"materia": "Cálculo Diferencial",
"profesor": "Laura Jiménez",
"calificacion": 6.8,
"estado": "Reprobada",
"estado_id": 3,
"fecha_inicio": "2024-02-05",
"fecha_termino": "2024-06-15"
},
{
"id": 42,
"materia": "Cálculo Diferencial",
"profesor": "Carlos Martínez",
"calificacion": 8.2,
"estado": "Aprobada",
"estado_id": 2,
"fecha_inicio": "2024-08-10",
"fecha_termino": "2024-12-20"
},
{
"id": 55,
"materia": "Cálculo Diferencial",
"profesor": "Silvia Ramírez",
"calificacion": 9.5,
"estado": "Aprobada",
"estado_id": 2,
"fecha_inicio": "2025-01-15",
"fecha_termino": "2025-06-30"
}
]
Example response (404, Materia no encontrada):
{
"message": "La relación alumno-materia solicitada no existe"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
integer
El identificador único de cada intento de la relación alumno-materia
materia
string
Nombre de la materia (será el mismo en todos los registros)
profesor
string
Nombre completo del profesor que impartió la materia en cada intento
calificacion
number
La calificación obtenida en cada intento
estado
string
Descripción textual del estado de la materia en cada intento
estado_id
integer
Identificador numérico del estado (1=Cursando, 2=Aprobada, 3=Reprobada)
fecha_inicio
string
date Fecha en que inició el curso (formato YYYY-MM-DD)
fecha_termino
string
date Fecha en que finalizó el curso (formato YYYY-MM-DD)
Obtener imagen de materia
requires authentication
Devuelve la imagen de la materia específica para un alumno,
Example request:
curl --request GET \
--get "https://api.santander.edu.mx/api/subjects/image/10" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/subjects/image/10"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/subjects/image/10';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (401):
Show headers
www-authenticate: jwt-auth
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Wrong number of segments"
}
Example response (404, Materia no encontrada):
{
"message": "La relación alumno-materia solicitada no existe"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Ofertas Académicas
APIs para gestionar la información de ofertas académicas de los alumnos
Listar programas académicos del alumno
requires authentication
Obtiene la lista de programas académicos en los que está inscrito el alumno autenticado, incluyendo información detallada sobre cada programa y la cantidad de materias aprobadas.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/academic_offers/list" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/academic_offers/list"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/academic_offers/list';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Programas encontrados):
{
"data": [
{
"id": 12472,
"alumno_id": 19058,
"matricula": "2112100857",
"name": "(O) Licenciatura en Administración de Empresas con Acentuación en Investigación y Docencia",
"rvoe": "20171303",
"tipo": "Licenciatura",
"programa_id": 26,
"cantidad_materias_aprobadas": 40,
"cantidad_materias_total": 40,
"estado": "Activo",
"estado_id": 1,
"imagen": "https://sii.santander.edu.mx/uc?id=1Tf3paIDVFQEnMcpuIdbz2Vyg4fKYXC3e&export=media"
},
{
"id": 42979,
"alumno_id": 19058,
"matricula": "2112100857",
"name": "Docente Memorable",
"rvoe": "unisant2404",
"tipo": "Curso",
"programa_id": 257,
"cantidad_materias_aprobadas": 0,
"cantidad_materias_total": 1,
"estado": "Activo",
"estado_id": 1,
"imagen": "https://sii.santander.edu.mx/uc?id=17GG_wgFVM1sr0rg5PUA-i6PBrb5vs2Uu&export=media"
}
]
}
Example response (401, Usuario no autenticado):
{
"message": "Unauthenticated."
}
Example response (404, Alumno no encontrado):
{
"message": "No se encontró información académica para este alumno"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
integer
El ID del registro de alumno-programa
alumno_id
integer
El ID del alumno
matricula
string
La matrícula del alumno
name
string
El nombre del programa académico
rvoe
string
La clave del RVOE del programa
tipo
string
El tipo de RVOE (Licenciatura, Maestría, Curso, etc.)
programa_id
integer
El ID del programa
cantidad_materias_aprobadas
integer
Cantidad de materias aprobadas en este programa
cantidad_materias_total
integer
Cantidad total de materias del programa
estado
string
Estado actual del programa (Activo, Inactivo, etc.)
estado_id
integer
ID del estado del programa
imagen
string
URL de la imagen asociada al programa
Obtener detalle de una oferta académica
requires authentication
Devuelve información detallada sobre una oferta académica específica por su ID.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/academic_offers/7/view" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/academic_offers/7/view"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/academic_offers/7/view';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Oferta académica encontrada):
{
"id": 7,
"name": "Métodos y Técnicas de lectura y redacción",
"rvoe_clave": "00001",
"rvoe_nombre": "Métodos y Técnicas de lectura y redacción",
"rvoe_tipo": "Curso",
"rvoe_tipo_id": 0,
"modalidad": "Pago por materia",
"modalidad_id": 1,
"divisa": "MXN",
"divisa_id": 4,
"costo_inscripcion": 20,
"costo_titulacion": 0,
"descripcion_titulacion": "Sin descripción",
"informacion_general": "<p>Sin descripción</p>",
"configuraciones": {
"requiere_solicitud_inscripcion": 1,
"es_libre_acceso": 1,
"es_libre_inscripcion": 1,
"admite_nuevos_alumnos": 0,
"siempre_activo": 1
},
"imagen": "https://sii.santander.edu.mx/uc?id=1EhvcrPdMZR6CCJ6wlTg_pVlEG5E6xAof&export=media",
"tags": "Capacitación",
"texto_registro": null,
"plazos_colegiatura": null,
"desplazamiento_para_inscripcion": 15,
"materias_simultaneas": 1,
"calificacion_minima_aprobatoria": 7,
"cantidad_decimales": 1,
"desplazamiento_dias_de_limite_pago": null,
"obligatorias": 1,
"materias_tronco_comun": 0,
"materias_obligatorias": 1,
"materias_opcionales": 0,
"materias_opcionales_especialidad": 0,
"materias_opcionales_investigacion": 0,
"materias_opcionales_docencia": 0,
"total_materias": 1
}
Example response (401, Usuario no autenticado):
{
"message": "Unauthenticated."
}
Example response (404, Oferta académica no encontrada):
{
"message": "No se encontró la oferta académica solicitada"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
integer
El ID de la oferta académica
name
string
El nombre de la oferta académica
rvoe_clave
string
La clave del RVOE
rvoe_nombre
string
El nombre oficial del RVOE
rvoe_tipo
string
El tipo de RVOE (Licenciatura, Maestría, Curso, etc.)
rvoe_tipo_id
integer
El ID del tipo de RVOE
modalidad
string
La modalidad de la oferta (ej. Pago por materia)
modalidad_id
integer
El ID de la modalidad
divisa
string
El código de la divisa para pagos
divisa_id
integer
El ID de la divisa
costo_inscripcion
integer
decimal El costo de inscripción
costo_titulacion
integer
decimal El costo de titulación
descripcion_titulacion
string
Descripción del proceso de titulación
informacion_general
string
Información general del programa en HTML
configuraciones
object
Configuraciones especiales del programa
requiere_solicitud_inscripcion
integer
Si requiere solicitud de inscripción
es_libre_acceso
integer
Si es de libre acceso
es_libre_inscripcion
integer
Si tiene libre inscripción
admite_nuevos_alumnos
integer
Si admite nuevos alumnos
siempre_activo
integer
Si está siempre activo
imagen
string
URL de la imagen asociada al programa
tags
string
Etiquetas asociadas al programa
texto_registro
string
Texto mostrado durante el registro
plazos_colegiatura
integer
Plazos para el pago de colegiatura
desplazamiento_para_inscripcion
integer
Días de desplazamiento para inscripción
materias_simultaneas
integer
Número de materias que se pueden cursar simultáneamente
calificacion_minima_aprobatoria
integer
decimal Calificación mínima para aprobar
cantidad_decimales
integer
Cantidad de decimales en calificaciones
desplazamiento_dias_de_limite_pago
integer
Días de desplazamiento para el límite de pago
obligatorias
integer
Cantidad de materias obligatorias
materias_tronco_comun
integer
Cantidad de materias del tronco común
materias_obligatorias
integer
Cantidad de materias obligatorias
materias_opcionales
integer
Cantidad de materias opcionales
materias_opcionales_especialidad
integer
Cantidad de materias opcionales de especialidad
materias_opcionales_investigacion
integer
Cantidad de materias opcionales de investigación
materias_opcionales_docencia
integer
Cantidad de materias opcionales de docencia
total_materias
integer
Cantidad total de materias del programa
Anuncios
Este endpoint recupera una lista de todos los anuncios. Los resultados se almacenan en caché por defecto.
Obtener lista de anuncios
requires authentication
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/announcements/list?renew=" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/announcements/list"
);
const params = {
"renew": "0",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/announcements/list';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'renew' => '0',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, éxito):
[
{
"id": 16,
"title": "Hola, aviso de videoconferencia",
"professor_id": 9,
"professor_name": "LUIS ALEXIS TEPEPA ESTRADA",
"materia_id": 518,
"materia_name": "Métodos y Técnicas de lectura y redacción",
"end_at": "2025-09-22 05:00:00"
},
{
"id": 566,
"title": "Aviso Demo perpetuo",
"professor_id": 9,
"professor_name": "LUIS ALEXIS TEPEPA ESTRADA",
"materia_id": 518,
"materia_name": "Métodos y Técnicas de lectura y redacción",
"end_at": "2030-06-26 00:00:00"
}
]
Example response (401, no autenticado):
{
"message": "No autenticado."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un anuncio específico por ID
requires authentication
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/announcements/16/view" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/announcements/16/view"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/announcements/16/view';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, éxito):
{
"id": 566,
"title": "Aviso Demo perpetuo",
"professor_id": 9,
"professor_name": "LUIS ALEXIS TEPEPA ESTRADA",
"materia_id": 547,
"materia_name": "Robando Calcetines",
"end_at": "2030-06-26 00:00:00",
"aviso": "<p>Aviso de prueba DEMO</p>"
}
Example response (401, no autenticado):
{
"message": "No autenticado."
}
Example response (404, no encontrado):
{
"message": "Anuncio no encontrado."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Blog
APIs para gestionar el blog del sistema
Este controlador proporciona endpoints para acceder y gestionar las entradas del blog. Todas las operaciones requieren autenticación mediante token JWT.
Listar Blogs
requires authentication
Obtiene una lista paginada de blogs activos del sistema.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/blog/list?limit=16&page=16&renew=" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/blog/list"
);
const params = {
"limit": "16",
"page": "16",
"renew": "0",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/blog/list';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'limit' => '16',
'page' => '16',
'renew' => '0',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Éxito):
{
"current_page": 1,
"data": [
{
"id": 9,
"title": "Evento: Conferencia sobre Innovación y Emprendimiento",
"fragment": "Nos complace anunciarles un evento muy especial que tendrá lugar en nuestra sede. ¡Es una oportunidad única que no querrán perderse! A continuación, les compartimos todos los detalles:",
"owner_id": 359,
"image_url": "image_url",
"tags": "Conferencia",
"created_at": "2024-10-09T09:31:44.000000Z",
"updated_at": "2024-10-09T09:31:44.000000Z",
"deleted_at": null
}
],
"first_page_url": "http://example.com/api/blogs?page=1",
"from": 1,
"last_page": 5,
"last_page_url": "http://example.com/api/blogs?page=5",
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://example.com/api/blogs?page=1",
"label": "1",
"active": true
}
],
"next_page_url": "http://example.com/api/blogs?page=2",
"path": "http://example.com/api/blogs",
"per_page": 10,
"prev_page_url": null,
"to": 10,
"total": 50
}
Example response (200, Sin resultados):
{
"data": [],
"current_page": 1,
"per_page": 10,
"total": 0,
"last_page": 1
}
Example response (401, No autenticado):
{
"message": "No autenticado."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
current_page
integer
Número de página actual
data
string[]
Lista de blogs en la página actual
first_page_url
string
URL de la primera página
from
integer
Número del primer elemento en la página actual
last_page
integer
Número total de páginas
last_page_url
string
URL de la última página
links
string[]
Enlaces de navegación
next_page_url
string|null
URL de la siguiente página (null si no hay más páginas)
path
string
URL base para la paginación
per_page
integer
Número de elementos por página
prev_page_url
string|null
URL de la página anterior (null si es la primera página)
to
integer
Número del último elemento en la página actual
total
integer
Número total de elementos
Ver entrada de blog
requires authentication
Obtiene una entrada especifica de blog.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/blog/1/view" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/blog/1/view"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/blog/1/view';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Éxito):
{
"id": 9,
"title": "Evento: Conferencia sobre Innovación y Emprendimiento",
"content": "Contenido del blog",
"fragment": "Nos complace anunciarles un evento muy especial que tendrá lugar en nuestra sede. ¡Es una oportunidad única que no querrán perderse! A continuación, les compartimos todos los detalles:",
"owner_id": 359,
"image_url": "image_url",
"tags": "Conferencia",
"created_at": "2024-10-09T09:31:44.000000Z",
"updated_at": "2024-10-09T09:31:44.000000Z",
"deleted_at": null
}
Example response (401, No autenticado):
{
"message": "No autenticado."
}
Example response (404, Entrada no encontrada):
{
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Response
Response Fields
id
integer
ID de la entrada de blog
title
string
Título de la entrada de blog
content
string
Contenido completo de la entrada de blog
fragment
string
Fragmento o resumen de la entrada de blog
owner_id
integer
ID del propietario de la entrada de blog
image_url
string
URL de la imagen asociada a la entrada de blog
tags
string
Etiquetas asociadas a la entrada de blog
created_at
string
Fecha y hora de creación de la entrada de blog
updated_at
string
Fecha y hora de la última actualización de la entrada de blog
deleted_at
string|null
Fecha y hora de eliminación de la entrada de blog (null si no ha sido eliminada)
Inbox
Endpoints relacionados con la gestión de los inbox.
Listar inboxes
requires authentication
Obtiene una colección de inboxes con sus relaciones cargadas.
Example request:
curl --request GET \
--get "https://api.santander.edu.mx/api/inbox" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/inbox"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/inbox';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"data": [
{
"id": 1,
"alumno": {
"id": 1,
"name": "Juan Pérez"
},
"profesor": {
"id": 2,
"name": "María López"
},
"materia": {
"id": 101,
"name": "Matemáticas"
},
"user": {
"id": 3,
"name": "Carlos García"
},
"unread_messages_count": 5,
"created_at": "2023-10-01T12:00:00Z",
"updated_at": "2023-10-02T12:00:00Z"
},
{
"id": 2,
"alumno": {
"id": 4,
"name": "Ana Torres"
},
"profesor": {
"id": 5,
"name": "Luis Martínez"
},
"materia": {
"id": 102,
"name": "Historia"
},
"user": {
"id": 6,
"name": "Sofía Ramírez"
},
"unread_messages_count": 0,
"created_at": "2023-10-03T12:00:00Z",
"updated_at": "2023-10-04T12:00:00Z"
}
],
"meta": {
"total_count": 2
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Listar inboxes con mensajes no leídos
requires authentication
Obtiene una colección de inboxes con sus relaciones cargadas de mensajes que no han sido leídos por el alumno.
Example request:
curl --request GET \
--get "https://api.santander.edu.mx/api/inbox/unread" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/inbox/unread"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/inbox/unread';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"data": [
{
"id": 1,
"alumno": {
"id": 1,
"name": "Juan Pérez"
},
"profesor": {
"id": 2,
"name": "María López"
},
"materia": {
"id": 101,
"name": "Matemáticas"
},
"user": {
"id": 3,
"name": "Carlos García"
},
"unread_messages_count": 5,
"created_at": "2023-10-01T12:00:00Z",
"updated_at": "2023-10-02T12:00:00Z"
},
{
"id": 2,
"alumno": {
"id": 4,
"name": "Ana Torres"
},
"profesor": {
"id": 5,
"name": "Luis Martínez"
},
"materia": {
"id": 102,
"name": "Historia"
},
"user": {
"id": 6,
"name": "Sofía Ramírez"
},
"unread_messages_count": 0,
"created_at": "2023-10-03T12:00:00Z",
"updated_at": "2023-10-04T12:00:00Z"
}
],
"meta": {
"total_count": 2,
"unread_count": 5
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Listar mensajes del inbox
requires authentication
Obtiene una colección de mensajes del inbox especificado.
Example request:
curl --request GET \
--get "https://api.santander.edu.mx/api/inbox/messages?inbox_id=1" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"inbox_id\": 16
}"
const url = new URL(
"https://api.santander.edu.mx/api/inbox/messages"
);
const params = {
"inbox_id": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"inbox_id": 16
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/inbox/messages';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'inbox_id' => '1',
],
'json' => [
'inbox_id' => 16,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"data": [
{
"id": 86560,
"content": {
"type": "text",
"text": "Hola estudiante"
},
"viewed": true,
"userable": {
"id": 1039,
"name": "DOCENTE MORELOS RVOE",
"type": "\\App\\Models\\Profesores"
},
"created_at": "2025-05-05T15:53:30.000000Z"
},
{
"id": 86561,
"content": {
"type": "audio",
"url": "https://docs.google.com/uc?export=download&id=1IQk7bFxat4QVqgh1RDztbx06DAnGr2rq"
},
"viewed": true,
"userable": {
"id": 41879,
"name": "DAVID VALDIVIA -",
"type": "\\App\\Models\\Alumno"
},
"created_at": "2025-05-14T15:23:00.000000Z"
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Agregar mensaje al inbox
requires authentication
Agrega un nuevo mensaje al inbox especificado.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/inbox/messages" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"inbox_id\": 1,
\"message_content_type\": 1,
\"message_content\": \"architecto\"
}"
const url = new URL(
"https://api.santander.edu.mx/api/inbox/messages"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"inbox_id": 1,
"message_content_type": 1,
"message_content": "architecto"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/inbox/messages';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'inbox_id' => 1,
'message_content_type' => 1,
'message_content' => 'architecto',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"data": {
"id": 86577,
"content": {
"type": "text",
"text": "Hola"
},
"viewed": false,
"userable": {
"id": 41879,
"name": "DAVID VALDIVIA -",
"type": "\\App\\Models\\Alumno"
},
"created_at": "2025-05-15T17:18:13.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Notificaciones
APIs para gestionar notificaciones en el sistema
Establecer token de notificación
requires authentication
Registra un token de dispositivo para notificaciones push.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/notifications/set" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"token\": \"eyJ0eXAiOiJKV1QiLC...\"
}"
const url = new URL(
"https://api.santander.edu.mx/api/notifications/set"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"token": "eyJ0eXAiOiJKV1QiLC..."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/notifications/set';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'token' => 'eyJ0eXAiOiJKV1QiLC...',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Token establecido correctamente"
}
Example response (404):
{
"message": "El token es obligatorio"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Enviar notificación
requires authentication
Envía una notificación push a todos los dispositivos registrados.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/notifications/send" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"Hola mi amigo\",
\"message\": \"Wenas\",
\"data\": null
}"
const url = new URL(
"https://api.santander.edu.mx/api/notifications/send"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "Hola mi amigo",
"message": "Wenas",
"data": null
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/notifications/send';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'Hola mi amigo',
'message' => 'Wenas',
'data' => null,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true
}
Example response (404):
{
"message": "El título y el mensaje son obligatorios"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Listar notificaciones
requires authentication
Obtiene una lista paginada de notificaciones.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/notifications/list?page=16&limit=16&seen=16" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/notifications/list"
);
const params = {
"page": "16",
"limit": "16",
"seen": "16",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/notifications/list';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '16',
'limit' => '16',
'seen' => '16',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
[
{
"id": 8854246,
"title": "Actividad Calificada",
"message": "Tu actividad Redacción de un texto fue calificada,",
"created_at": "2025-04-08T15:58:09.000000Z"
},
{
"id": 8854247,
"title": "Actividad Calificada",
"message": "Tu actividad Redacción de un texto fue calificada,",
"created_at": "2025-04-08T16:02:38.000000Z"
}
]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Ver notificación
requires authentication
Obtiene información detallada sobre una notificación específica.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/notifications/8854246/view" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/notifications/8854246/view"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/notifications/8854246/view';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"id": 8854246,
"title": "Actividad Calificada",
"message": "Tu actividad Redacción de un texto fue calificada,",
"created_at": "2025-04-08T15:58:09.000000Z",
"seen": true,
"sended": true,
"alumno_id": 72043,
"alumnos_materias_id": null,
"profesor_id": 1039,
"materia_id": 518,
"alumnos_actividades_respuestas_id": 979591,
"clase_online_id": null,
"orden_pago_id": null,
"programa_id": 7,
"actividad_id": 67,
"plazo_id": null,
"alumno": {
"id": 72043,
"name": "YAHIR GARDUZA GARDUZA"
},
"profesor": {
"id": 1039,
"name": "DOCENTE MORELOS RVOE"
},
"alumno_materia": {
"id": 424348,
"materia_id": 518,
"calificacion": 0,
"estado": 0,
"profesor_id": 1039
},
"alumnos_actividades_respuestas": {
"id": 979591,
"retroalimentacion": null,
"calificacion": 9.01,
"intentos": 2,
"calificado": 1
},
"programa": {
"id": 7,
"name": "Métodos y Técnicas de lectura y redacción"
},
"actividad": {
"id": 67,
"name": "Redacción de un texto"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Marcar notificación como vista
requires authentication
Marca una notificación específica como vista/leída.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/notifications/8854246/seen" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/notifications/8854246/seen"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/notifications/8854246/seen';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Notificación marcada como vista"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Verificar notificaciones nuevas
requires authentication
Verifica si hay notificaciones nuevas.
Example request:
curl --request GET \
--get "https://api.santander.edu.mx/api/notifications/check" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/notifications/check"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/notifications/check';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"count": 5,
"unseen": 2
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Video llamadas
API para gestionar videos de clases
Listar video llamadas de clases
requires authentication
Obtiene la lista completa de videos disponibles. Opcionalmente se puede filtrar por oferta académica.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/video/list?academic_offer_id=45" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/video/list"
);
const params = {
"academic_offer_id": "45",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/video/list';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'academic_offer_id' => '45',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, success):
{
[
{
"id": 8706,
"meet_id": "DVC:1039:1742930643",
"title": "Clase de pruebas ...",
"resume": "Métodos y Técnicas de lectura y redacción- Prof: Docente Morelos RVOE",
"materia": {
"id": 518,
"name": "Métodos y Técnicas de lectura y redacción"
},
"profesor": {
"id": 1039,
"name": "DOCENTE MORELOS RVOE"
},
"start_time": "2025-03-30T19:23:00.000000Z",
"end_time": "2025-03-30T19:38:00.000000Z",
"time_zone": "UTC",
"duracion_min": 15,
"password": "123456",
"type": "Zoom",
"link": "https://sii.santander.edu.mx/uc?id=182mesSFoTynhWsd1GCZJsUhCo69L608_&export=media"
}
]
}
Example response (401, sin autenticación):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Lista el historial de video llamadas
requires authentication
Obtiene la información de las video llamadas en general
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/video/history?academic_offer_id=13&subject_id=8706&professor_id=8706" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/video/history"
);
const params = {
"academic_offer_id": "13",
"subject_id": "8706",
"professor_id": "8706",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/video/history';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'academic_offer_id' => '13',
'subject_id' => '8706',
'professor_id' => '8706',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, success):
{
[
{
"id": 8706,
"meet_id": "DVC:1039:1742930643",
"title": "Clase de pruebas ...",
"resume": "Métodos y Técnicas de lectura y redacción- Prof: Docente Morelos RVOE",
"materia": {
"id": 518,
"name": "Métodos y Técnicas de lectura y redacción"
},
"profesor": {
"id": 1039,
"name": "DOCENTE MORELOS RVOE"
},
"start_time": "2025-03-30T19:23:00.000000Z",
"end_time": "2025-03-30T19:38:00.000000Z",
"time_zone": "UTC",
"duracion_min": 15,
"password": "123456",
"type": "Zoom",
"link": "https://sii.santander.edu.mx/uc?id=182mesSFoTynhWsd1GCZJsUhCo69L608_&export=media",
"video_url": null,
}
]
}
Example response (401, sin autenticación):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener video
requires authentication
Obtiene la información detallada de un video específico.
Example request:
curl --request POST \
"https://api.santander.edu.mx/api/video/8706/view" \
--header "Authorization: Bearer Bearer {YOUR_JWT_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api.santander.edu.mx/api/video/8706/view"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_JWT_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api.santander.edu.mx/api/video/8706/view';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_JWT_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, success):
{
"teacher_email": "gb+ghost@UNISANT.EDU.MX",
"video_url": null,
"type": "Zoom"
}
Example response (401, sin autenticación):
{
"message": "Unauthenticated."
}
Example response (404, video no encontrado):
{
"message": "Video not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.