Para listar los cursos de una escuela de Teachlr Organizaciones se debe realizar una petición de tipo GET al API de Teachlr Organizaciones utilizando el siguiente URL:
https://api.teachlr.com/<dominio>/api/courses
en donde <dominio> se debe sustituir por el dominio teachlr de la escuela (no el dominio personalizado).
En la petición se deben enviar las siguientes dos cabeceras:
Key | Value |
Content-Type | application/json |
Authorization | key_0123456789ABCDEFGHIJK |
Nota: El valor de Authorization mostrado arriba es ficticio. Cada escuela tendrá su propia llave (key) que debe ser solicitada por el cliente.
Opcionalmente, se puede agregar un parámetro al final del URL para filtrar la búsqueda de la siguiente manera:
https://api.teachlr.com/<dominio>/api/courses/<filtro>
donde <filtro> puede ser una de las siguientes palabras:
all => todos los cursos (no expirados, comprados o no, cualquier estado).
draft => cursos en estado borrador.
pending => cursos en estado pendiente.
active => cursos en estado activo (no comprados).
deactivated => cursos en estado desactivado.
inactive => cursos en estado borrador, pendiente o desactivado.
purchased => cursos comprados (expirados o no).
library => cursos en la biblioteca pública.
available => cursos en estado activo (no expirados, comprados o no).
Adicionalmente, se pueden especificar parámetros de filtrado y ordenamiento mediante una cadena de consulta, esto es, agregando al final del URL una estructura como la siguiente:
?category=mercadeo&subcategory=mercadeo-digital&sort=created_at&ord=desc
Los distintos parámetros que se pueden
especificar y sus posibles valores se detallan a continuación:
Parámetro | category |
Valor | El slug de la categoría |
Significado | Cursos bajo la categoría especificada |
Ejemplo | category=mercadeo |
Parámetro | subcategory |
Valor | El slug de la subcategoría |
Significado | Cursos bajo la subcategoría especificada |
Ejemplo | subcategory=mercadeo-digital |
Parámetro | instructor |
Valor | El nombre de usuario del instructor |
Significado | Cursos que pertenezcan al instructor especificado |
Ejemplo | username=pedroperez |
Parámetro | career |
Valor | El slug de la carrera |
Significado | Cursos que pertenezcan a la carrera especificada |
Ejemplo | career=recursos-humanos |
Parámetro | group |
Valor | El ID del grupo |
Significado | Cursos que pertenezcan al grupo especificado |
Ejemplo | group=19 |
Parámetro | coupons |
Valor | true (cualquier otro valor invalidará este parámetro) |
Significado | Cursos que tengan cupones activos |
Ejemplo | coupons=true |
Parámetro | in_home |
Valor | true (cualquier otro valor invalidará este parámetro) |
Significado | Cursos de la biblioteca pública marcados para mostrarse en la página de inicio |
Ejemplo | in_home=true |
Parámetro | lang |
Valor | Código ISO 639-1 (código de 2 letras que representan un idioma) |
Significado | Cursos con el idioma especificado |
Ejemplo | lang=es (cursos en idioma español) |
Parámetro | multi_lang |
Valor | true | false |
Valor por defecto | true (todos los idiomas) |
Significado | Mostrar el nombre de las categorías/subcategorías en todos los idiomas o únicamente en el idioma especificado en el parámetro lang |
Ejemplo | multi_lang=false (sólo en el idioma especificado en lang) |
Parámetro | chapters |
Valor | true | false |
Valor por defecto | false |
Significado | Incluir los capítulos de los cursos |
Ejemplo | chapters=false (no incluir los capítulos) |
Parámetro | contents |
Valor | true | false |
Valor por defecto | true |
Significado | Incluir el contenido de los capítulos de los cursos |
Ejemplo | contents=false (no incluir el contenido) |
Parámetro | objectives |
Valor | true | false |
Valor por defecto | true |
Significado | Inclure les objectifs des cours |
Ejemplo | objectives=false (no incluir los objetivos) |
Parámetro | sort |
Valor | id | title | headline | description | slug | visits | created_at | status | popular | sales | rating | views |
Valor por defecto | created_at |
Significado | Atributo por el cual se deben ordenar los cursos: id: ID del curso. title: título del curso. headline: subtítulo del curso. description: descripción del curso. slug: slug del curso. visits: número de visitas a la descripción del curso. created_at: fecha de creación. status: estado del curso (borrador, pendiente, activo, desactivado). popular: cantidad de usuarios suscritos. sales: número de ventas. rating: valoración del curso. views: número de visitas a la vista del curso. |
Ejemplo | sort=title (ordenados por título) |
Parámetro | ord |
Valor | asc | desc |
Valor por defecto | asc |
Significado | Tipo de ordenamiento: asc: ascendente desc: descendente |
Ejemplo | ord=desc (ordenados descendentemente) |
Parámetro | search |
Valor | Palabra o frase |
Significado | Cursos que contengan la palabra o frase especificada como parte del título, del subtítulo o de la descripción |
Ejemplo | search=plan de marketing |
Parámetro | paginate |
Valor | true | false |
Valor por defecto | false |
Significado | Obtener el listado de cursos de forma paginada |
Ejemplo | paginate=true |
Los parámetros a continuación sólo tienen efecto si se envía el parámetro paginate con valor true:
Parámetro | page |
Valor | Número entero |
Valor por defecto | 1 |
Significado | Obtener la página especificada del listado de cursos |
Ejemplo | page=2 |
Parámetro | limit |
Valor | Número entero |
Valor por defecto | 8 |
Significado | Cantidad de cursos por página del listado de cursos |
Ejemplo | limit=10 |
Caso de ejemplo:
Se desea obtener el listado no paginado de cursos activos, no expirados, comprados o no, que pertenezcan a la categoría «mercadeo» de la escuela https://escueladeprueba.teachlr.com, con la frase «plan de mercadeo», ordenados por título, descendentemente.
La petición al API de Teachlr Organizaciones se debe hacer al siguiente URL:
https://api.teachlr.com/escueladeprueba/api/courses/available?category=mercadeo
&search=plan de mercadeo&sort=title&ord=desc
Una implementación utilizando la función $.ajax() de jQuery sería como sigue:
$.ajax({
url: "https://api.teachlr.com/escueladeprueba/api/courses/available?category=
mercadeo&search=plan de marketing&sort=title&ord=desc",
dataType: "json",
type: "GET",
contentType: "application/json",
headers: {
"Authorization": "key_0123456789ABCDEFGHIJK"
},
success: function(data) {
// la petición fue exitosa
console.log('data', data);
},
error: function(xhr, status, err) {
// falló la petición
console.log('xhr', xhr);
console.log('status', status);
console.log('err', err);
}
});
Posibles respuestas del API:
Status: 200 OK
[
{
"id": 1105,
"title": "Nemo enim ipsam",
"headline": "Ut enim ad minima veniam",
"language": "es",
"cover": {
"thumb": "https:\/\/d2j3j1vpt0.../img/course_cover-118x66.jpg",
"small": "https:\/\/d2j3j1vpt0.../img/course_cover-222x125.jpg",
"medium": "https:\/\/d2j3j1vpt0.../img/course_cover-236x132.jpg",
"large": "https:\/\/d2j3j1vpt0.../img/course_cover-506x285.jpg"
},
"description": null,
"slug": "nemo-enim-ips",
"expired": false,
"is_public": true,
"in_home": true,
"created_at": "2019-06-04 14:36:28",
"status": "active",
"num_sales": 0,
"visits": 41,
"views": 26,
"total_rate": "3.5",
"price": 0,
"author_about": null,
"author_picture": null,
"author_username": null,
"author_headline": null,
"author_name": null,
"author_last_name": null,
"author_country": null,
"instructors": [
{
"username": "pedroperez",
"name": "Pedro",
"last_name": "Pérez",
"email": "pedroperez@dominio.com",
"about": "Donec quam felis, ultricies nec",
"job": "Desarrollador de software",
"department": "Informática",
"picture": {
"thumb": "https://d2j3j1vpt0andh.../avatars/D02-32x32.jpg",
"small": "https://d2j3j1vpt0andh.../avatars/D02-54x54.jpg",
"medium": "https://d2j3j1vpt0andh.../avatars/D02-64x64.jpg",
"medium_large": "https://d2j3j1vpt0andh.../avatars/D02-98x98.jpg",
"large": "https://d2j3j1vpt0andh.../avatars/D02-198x198.jpg"
}
},
{
"username": "luisvelasquez",
"name": "Luis",
"last_name": "Velásquez",
"email": "luisvelasquez@dominio.com",
"about": "Donec quam felis, ultricies nec",
"job": "Estadista",
"department": "Ciencias Aplicadas",
"picture": {
"thumb": "https://d2j3j1vpt0andh.../avatars/D03-32x32.jpg",
"small": "https://d2j3j1vpt0andh.../avatars/D03-54x54.jpg",
"medium": "https://d2j3j1vpt0andh.../avatars/D03-64x64.jpg",
"medium_large": "https://d2j3j1vpt0andh.../avatars/D03-98x98.jpg",
"large": "https://d2j3j1vpt0andh.../avatars/D03-198x198.jpg"
}
}
],
"category": {
"id": 11,
"slug": "idiomas",
"tx_name_en": "Languages",
"tx_name_es": "Idiomas",
"tx_name_fr": "Langues",
"co_parent": -1
},
"subcategory": {
"id": 13,
"slug": "ingles",
"tx_name_en": "English",
"tx_name_es": "Inglés",
"tx_name_fr": "Anglais",
"co_parent": 11
},
"num_chapters": 4,
"duration_unit": "Seconds",
"duration_time": 2046,
"currency": "USD",
"url": "https://escueladeprueba.teachlr.com/#courses-online/nemo-enim-ips",
"author_url": null,
"is_purchased": false,
"objectives": [
{
"id": 231,
"objective": "Sed ut perspiciatis unde omnis iste natus error sit volupt",
"order": 1
},
{
"id": 232,
"objective": "Nemo enim ipsam voluptatem quia voluptas sit",
"order": 2
}
]
},
{
"id": 3048,
"title": "At vero eos et accusamus et",
"headline": "Quis autem vel eum iure.",
"language": "en",
"cover": {
"thumb": "https:\/\/d2j3j1vpt0.../img/course_cover-118x66.jpg",
"small": "https:\/\/d2j3j1vpt0.../img/course_cover-222x125.jpg",
"medium": "https:\/\/d2j3j1vpt0.../img/course_cover-236x132.jpg",
"large": "https:\/\/d2j3j1vpt0.../img/course_cover-506x285.jpg"
},
"description": "<p>Lorem ipsum dolor sit amet, consectetuer adipis.<p>",
"slug": "at-vero-eos",
"expired": false,
"is_public": false,
"in_home": false,
"created_at": "2019-06-09 19:42:44",
"status": "active",
"num_sales": 4,
"visits": 32,
"views": 17,
"total_rate": "4.8",
"price": "15",
"author_about": "Programador",
"author_picture": "https://d2j3j1vpt...net/api_content/avatars/L04-",
"author_username": "irvingjm",
"author_headline": "Analista programador",
"author_name": "Irving",
"author_last_name": "Martínez",
"author_country": "Venezuela",
"instructors": [
{
"username": "danielfuentes",
"name": "Daniel",
"last_name": "Fuentes",
"email": "danielfuentes@dominio.com",
"about": null,
"job": null,
"department": null,
"picture": {
"thumb": "https://d2j3j1vpt0and.../default_user_icon-32x32.jpg",
"small": "https://d2j3j1vpt0and.../default_user_icon-54x54.jpg",
"medium": "https://d2j3j1vpt0and.../default_user_icon-64x64.jpg",
"medium_large": "https://d2j3j1vpt0and.../default_user_icon-98x98.jpg",
"large": "https://d2j3j1vpt0and.../default_user_icon-198x198.jpg"
}
},
{
"username": "hectorlopez",
"name": "Héctor",
"last_name": "López",
"email": "hectorlopez@dominio.com",
"about": null,
"job": null,
"department": null,
"picture": {
"thumb": "https://d2j3j1vpt0and.../default_user_icon-32x32.jpg",
"small": "https://d2j3j1vpt0and.../default_user_icon-54x54.jpg",
"medium": "https://d2j3j1vpt0and.../default_user_icon-64x64.jpg",
"medium_large": "https://d2j3j1vpt0and.../default_user_icon-98x98.jpg",
"large": "https://d2j3j1vpt0and.../default_user_icon-198x198.jpg"
}
}
],
"category": null,
"subcategory": null,
"num_chapters": 7,
"duration_unit": "Seconds",
"duration_time": 851,
"currency": "USD",
"url": "https://escueladeprueba.teachlr.com/#courses-online/at-vero-eos",
"author_url": "https://teachlr.com/irvingjm",
"is_purchased": true,
"objectives": [
]
}
]
Esta respuesta se obtiene cuando la petición fue exitosa. La respuesta de ejemplo muestra el formato de respuesta no paginado con un arreglo que contiene dos (2) cursos.
Nota: Utilizando como ejemplo los parámetros lang=fr y multi_lang=false, la estructura de las categorías y subcategorías se mostrará de la siguiente manera:
"category": {
"id": 11,
"slug": "idiomas",
"name": "Idiomas",
"co_parent": -1
},
"subcategory": {
"id": 13,
"slug": "ingles",
"name": "Inglés",
"co_parent": 11
},
Status: 200 OK
[]
Esta respuesta se obtiene cuando la petición fue exitosa. La respuesta de ejemplo muestra el formato de respuesta no paginado con un arreglo vacío, es decir, la escuela no tiene cursos con los parámetros especificados.
Status: 200 OK
{
"total": 20,
"per_page": "2",
"current_page": 1,
"last_page": 10,
"next_page_url": "https://api.teachlr.com/escueladeprueba/api/courses?page=2",
"prev_page_url": null,
"from": 1,
"to": 2,
"data": [
{
"id": 1105,
"title": "Nemo enim ipsam",
"headline": "Ut enim ad minima veniam",
"language": "es",
"cover": {
"thumb": "https:\/\/d2j3j1vpt0.../img/course_cover-118x66.jpg",
"small": "https:\/\/d2j3j1vpt0.../img/course_cover-222x125.jpg",
"medium": "https:\/\/d2j3j1vpt0.../img/course_cover-236x132.jpg",
"large": "https:\/\/d2j3j1vpt0.../img/course_cover-506x285.jpg"
},
"description": null,
"slug": "nemo-enim-ips",
"expired": false,
"is_public": true,
"in_home": true,
"created_at": "2019-06-04 14:36:28",
"status": "active",
"num_sales": 0,
"visits": 41,
"views": 26,
"total_rate": "3.5",
"price": 0,
"author_about": null,
"author_picture": null,
"author_username": null,
"author_headline": null,
"author_name": null,
"author_last_name": null,
"author_country": null,
"instructors": [
{
"username": "pedroperez",
"name": "Pedro",
"last_name": "Pérez",
"email": "pedroperez@dominio.com",
"about": "Donec quam felis, ultricies nec",
"job": "Desarrollador de software",
"department": "Informática",
"picture": {
"thumb": "https://d2j3j1vpt0andh.../avatars/D02-32x32.jpg",
"small": "https://d2j3j1vpt0andh.../avatars/D02-54x54.jpg",
"medium": "https://d2j3j1vpt0andh.../avatars/D02-64x64.jpg",
"medium_large": "https://d2j3j1vpt0andh.../avatars/D02-98x98.jpg",
"large": "https://d2j3j1vpt0andh.../avatars/D02-198x198.jpg"
}
},
{
"username": "luisvelasquez",
"name": "Luis",
"last_name": "Velásquez",
"email": "luisvelasquez@dominio.com",
"about": "Cam sociis natoque penatibus",
"job": "Estadista",
"department": "Ciencias Aplicadas",
"picture": {
"thumb": "https://d2j3j1vpt0andh.../avatars/D03-32x32.jpg",
"small": "https://d2j3j1vpt0andh.../avatars/D03-54x54.jpg",
"medium": "https://d2j3j1vpt0andh.../avatars/D03-64x64.jpg",
"medium_large": "https://d2j3j1vpt0andh.../avatars/D03-98x98.jpg",
"large": "https://d2j3j1vpt0andh.../avatars/D03-198x198.jpg"
}
}
],
"category": {
"id": 11,
"slug": "idiomas",
"tx_name_en": "Languages",
"tx_name_es": "Idiomas",
"tx_name_fr": "Langues",
"co_parent": -1
},
"subcategory": {
"id": 13,
"slug": "ingles",
"tx_name_en": "English",
"tx_name_es": "Inglés",
"tx_name_fr": "Anglais",
"co_parent": 11
},
"num_chapters": 4,
"duration_unit": "Seconds",
"duration_time": 2046,
"currency": "USD",
"url": "https://escueladepru...teachlr.com/#courses-online/nemo-enim-ips",
"author_url": null,
"is_purchased": false,
"objectives": [
{
"id": 231,
"objective": "Sed ut perspiciatis unde omnis iste natus error sit vo",
"order": 1
},
{
"id": 232,
"objective": "Nemo enim ipsam voluptatem quia voluptas sit",
"order": 2
}
]
},
{
"id": 3048,
"title": "At vero eos et accusamus et",
"headline": "Quis autem vel eum iure.",
"language": "en",
"cover": {
"thumb": "https:\/\/d2j3j1vpt0.../img/course_cover-118x66.jpg",
"small": "https:\/\/d2j3j1vpt0.../img/course_cover-222x125.jpg",
"medium": "https:\/\/d2j3j1vpt0.../img/course_cover-236x132.jpg",
"large": "https:\/\/d2j3j1vpt0.../img/course_cover-506x285.jpg"
},
"description": "<p>Lorem ipsum dolor sit amet, consectetuer adipis.<p>",
"slug": "at-vero-eos",
"expired": false,
"is_public": false,
"in_home": false,
"created_at": "2019-06-09 19:42:44",
"status": "active",
"num_sales": 4,
"visits": 32,
"views": 17,
"total_rate": "4.8",
"price": "15",
"author_about": "Programador",
"author_picture": "https://d2j3j1vpt...net/api_content/avatars/L04-",
"author_username": "irvingjm",
"author_headline": "Analista programador",
"author_name": "Irving",
"author_last_name": "Martínez",
"author_country": "Venezuela",
"instructors": [
{
"username": "danielfuentes",
"name": "Daniel",
"last_name": "Fuentes",
"email": "danielfuentes@dominio.com",
"about": null,
"job": null,
"department": null,
"picture": {
"thumb": "https://d2j3j1vpt0a.../default_user_icon-32x32.jpg",
"small": "https://d2j3j1vpt0a.../default_user_icon-54x54.jpg",
"medium": "https://d2j3j1vpt0a.../default_user_icon-64x64.jpg",
"medium_large": "https://d2j3j1vpt0a.../default_user_icon-98x98.jpg",
"large": "https://d2j3j1vpt0a.../default_user_icon-198x198.jpg"
}
},
{
"username": "hectorlopez",
"name": "Héctor",
"last_name": "López",
"email": "hectorlopez@dominio.com",
"about": null,
"job": null,
"department": null,
"picture": {
"thumb": "https://d2j3j1vpt0a.../default_user_icon-32x32.jpg",
"small": "https://d2j3j1vpt0a.../default_user_icon-54x54.jpg",
"medium": "https://d2j3j1vpt0a.../default_user_icon-64x64.jpg",
"medium_large": "https://d2j3j1vpt0a.../default_user_icon-98x98.jpg",
"large": "https://d2j3j1vpt0a.../default_user_icon-198x198.jpg"
}
}
],
"category": null,
"subcategory": null,
"num_chapters": 7,
"duration_unit": "Seconds",
"duration_time": 851,
"currency": "USD",
"url": "https://escueladeprueba.teachlr.com/#courses-online/at-vero-eos",
"author_url": "https://teachlr.com/irvingjm",
"is_purchased": true,
"objectives": [
]
}
]
}
Esta respuesta se obtiene cuando la petición fue exitosa. La respuesta de ejemplo muestra el formato de respuesta paginado (página 1), mostrando dos (2) cursos por página. El atributo total indica la cantidad total de cursos con los parámetros especificados.
Status: 200 OK
{
"total": 0,
"per_page": 8,
"current_page": 1,
"last_page": 0,
"next_page_url": null,
"prev_page_url": null,
"from": 1,
"to": 0,
"data": []
}
Esta respuesta se obtiene cuando la petición fue exitosa. La respuesta de ejemplo muestra el formato de respuesta paginado (página 1), mostrando un arreglo data vacío, es decir, la escuela no tiene cursos con los parámetros especificados. El atributo total indica la cantidad total de cursos con los parámetros especificados.
Status: 400 Bad Request
[«Bad request»]
Esta respuesta se obtiene cuando la petición falla.
Status: 401 Unauthorized
[«Unauthorized»]
Esta respuesta se obtiene cuando la llave (key) enviada en la cabecera «Authorization» de la petición no es válida.
Status: 404 Not Found
[«Not Found»]
Esta respuesta se obtiene cuando el URL al cual se está haciendo la petición está incorrecto.
Leave A Comment?