✨ API Osteocom
ℹ️ Entornos
Section titled “ℹ️ Entornos”-
🧪 Entorno de pruebas:
https://test.osteocom.me/sv6 -
🚀 Entorno de producción:
https://www.osteocom.me/sv6
⚠️ ATENCIÓN ⚠️
Section titled “⚠️ ATENCIÓN ⚠️”Esta API ha sido probada en el entorno de pruebas, el de producción no ha sido probado.
📝 Nota
Section titled “📝 Nota”Hay que pedir a David Mallo el clientId y clientSecret, él tiene para el entorno de prueba y los de producción tendrá que pedirlos a Osteocom.
Guía uso encadenado de las APIs
Section titled “Guía uso encadenado de las APIs”1º API: Autorización
Section titled “1º API: Autorización”Devuelve un token que se usará en el resto de APIs en Authorization: Bearer TU_TOKEN.
2º API: Catálogo
Section titled “2º API: Catálogo”Devuelve la información de los productos, de ahí se cogerá el idChannel y el price para la API de Autorización para el contenido
Ver aquí y el videoId para la API de token de video Ver aquí.
3º API: Autorización para el contenido
Section titled “3º API: Autorización para el contenido”Devuelve el token que se usará en la siguiente API en el body como userAccessKey.
4º API: Token del video
Section titled “4º API: Token del video”Devuelve el token que se usara en el iframe.
🔐 Authorization API
Section titled “🔐 Authorization API”📄 Descripción
Section titled “📄 Descripción”Permite obtener un token de autenticación, necesario para realizar cualquier otra petición a la API.
📥 Ejemplo de solicitud
Section titled “📥 Ejemplo de solicitud”URL: /contentLicensing_login
Método: POST
Payload:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
clientId | String | ✅ | ID único del cliente, proporcionado por Osteocom. |
clientSecret | String | ✅ | Clave secreta del cliente, proporcionada por Osteocom. |
Body ejemplo:
{ "clientId":"xxxxxxxx", "clientSecret":"xxxxxxxxx"}✅ Respuesta esperada
Section titled “✅ Respuesta esperada”| Campo | Tipo | Descripción |
|---|---|---|
tokenType | String | Token JWT a usar como Bearer en las siguientes llamadas. |
{ "token": "xxxxxxxxx.xxxxxxxxxx.xxxxxxxxxx"}📝 Nota
Section titled “📝 Nota”Este token no caduca.
🔁 Códigos de respuesta
Section titled “🔁 Códigos de respuesta”| Código | Descripción |
|---|---|
| 200 | OK |
| 401 | No autorizado - Cliente desconocido. |
📚 Catalog API
Section titled “📚 Catalog API”📄 Descripción
Section titled “📄 Descripción”Permite acceder al catálogo de contenido del cliente.
📥 Ejemplo de solicitud
Section titled “📥 Ejemplo de solicitud”URL: /contentLicensing_catalog
Método: POST
Headers:
Authorization: Bearer TU_TOKEN (obtenido en la API de autenticación)Payload:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
clientId | String | ✅ | ID único del cliente. |
Body ejemplo:
{ "clientId":"xxxxxxx"}✅ Respuesta esperada
Section titled “✅ Respuesta esperada”| Campo | Tipo | Descripción |
|---|---|---|
catalog | String | Array de objetos, cada uno representa un canal con detalles como autores, imágenes, vídeos, etc. |
{ "catalog": [ { "idChannel": "asdf", "authors": [ información de los autores ], "price": 500, "video": [ { "videoId": "asdf12345", + información del video }, { "videoId": "ghjk67890", + información del video } ], "title": "titulo catalogo prueba", "subtitle": null, "htmlDescription": null } ]}⚠️ IMPORTANTE
Section titled “⚠️ IMPORTANTE”idChannel: esto será el campo productId de la API Content Access Authorization. Ver aquí.
price: esto será el campo price de la API Content Access Authorization. Ver aquí.
videoId: esto será el campo videoId de la API Video Access. Ver aquí.
🔁 Códigos de respuesta
Section titled “🔁 Códigos de respuesta”| Código | Descripción |
|---|---|
| 200 | OK |
| 404 | No encontrado. |
| 500 | Error interno del servidor. |
🛒 API Content Access Authorization
Section titled “🛒 API Content Access Authorization”📄 Descripción
Section titled “📄 Descripción”Gestiona la autorización de contenido tras la compra, enviando información del usuario y los cursos adquiridos.
⚠️ IMPORTANTE
Section titled “⚠️ IMPORTANTE”Para esta API en las pruebas realizadas en el entorno de Pruebas cada vez que se realizaba la petición había que poner un userId distinto (inventado) ya que no permitia pedir 2 veces con el mismo userId dando ❗500 Internal Error Server❗ Creemos que en el entorno de producción eso no pasará pero no lo sabemos ya que solo podiamos probar en el entorno de pruebas.
Según lo que pone en la documentación de Osteocom: Este ID lo crea el socio y sirve para identificar al usuario. Puede usar el formato que quiera, pero debe ser único para cada cliente. Osteocom solo usa este ID para dar acceso al contenido y crear los tokens del usuario.
📥 Ejemplo de solicitud
Section titled “📥 Ejemplo de solicitud”URL: /contentLicensing_contentAccessAuthorization
Método: POST
Headers:
Authorization: Bearer TU_TOKEN (obtenido en la API de autenticación)Payload:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
clientId | String | ✅ | ID único del cliente. |
userId | String | ✅ | ID único del usuario, elegido por el propio usuario según su conveniencia. |
email | String | ✅ | Correo del usuario (requerido si hay consentimiento de marketing). |
marketingConsent | Boolean | ❌ | true si el usuario acepta comunicaciones comerciales. |
name | String | ❌ | Nombre del usuario. |
surname | String | ❌ | Apellido del usuario. |
products | Array | ✅ | Lista de productos comprados con su precio correspondiente. |
Body ejemplo:
{ "clientId": "xxxxxxxx", "userId": "usuario", "email": "email@usuario.com", "products": [ { "productId": "asdf", "price": 500 } ]}📝 Nota
Section titled “📝 Nota”El productId y el price usados aqui son los sacados de la respuesta en la API anterior. Ver aquí.
✅ Respuesta esperada
Section titled “✅ Respuesta esperada”| Campo | Tipo | Descripción |
|---|---|---|
tokenType | String | Token para acceso al contenido comprado. |
{ "token": "xxxxxxxxxxxxxx.xxxxxxxxxxxxxxxx.xxxxxxxxxxxxx"}📝 Nota
Section titled “📝 Nota”Este token devuelto es el usado en la API Video Access Ver aquí en el campo userAccessKey.
IMPORTANTE
Section titled “IMPORTANTE”Este token no caduca.
Pero aunque no caduque, solo lo obtienes 1 vez con ese usuario, al menos en las pruebas realizadas en el entorno de pruebas, creemos que en el entorno de producción esto no deberia ocurrir y se podrá pedir las veces que haga falta con el mismo userId, pero no lo sabemos al 100% ya que no hemos podido probar en producción.
🔁 Códigos de respuesta
Section titled “🔁 Códigos de respuesta”| Código | Descripción |
|---|---|
| 200 | OK |
| 400 | Campo email requerido. |
| 403 | Email mal formateado. |
| 500 | Error interno del servidor. |
🎥 API Video Access
Section titled “🎥 API Video Access”📄 Descripción
Section titled “📄 Descripción”Permite el acceso del usuario al contenido de vídeo previamente autorizado.
📥 Ejemplo de solicitud
Section titled “📥 Ejemplo de solicitud”URL: /contentLicensing_videoAccess
Método: POST
Headers:
Authorization: Bearer TU_TOKEN (obtenido en la API de autenticación).Payload:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
userId | String | ✅ | ID único del usuario, definido por el partner. |
clientId | String | ✅ | ID único del cliente. |
videoId | String | ✅ | ID único del vídeo. |
userAccessKey | String | ✅ | Clave de acceso que autentica al usuario. Respuesta de la API Content Access Authorization Ver aquí |
Body ejemplo:
{ "userId": "usuario", "clientId": "xxxxxxxxx", "videoId": "asdf12345", "userAccessKey": "xxxxxxxxxx.xxxxxxxxxxxx.xxxxxxxxxxxxx"}📝 Nota
Section titled “📝 Nota”El videoId usado aqui es el mencionado en la API de catálogo. Ver aquí.
✅ Respuesta esperada
Section titled “✅ Respuesta esperada”| Campo | Tipo | Descripción |
|---|---|---|
tokenAuthVideo | String | Token a utilizar como parámetro en una URL dedicada para visualizar el vídeo en un <iframe>. |
{ "tokenAuthVideo": "xxxxxxxxxxxxxx.xxxxxxxxxxxxxxxx.xxxxxxxxxxxxx"}IMPORTANTE
Section titled “IMPORTANTE”Este token caduca a los 15 minutos de ser creado.
Si el token caduca, al permanecer en la misma página, el video se podrá usar de todas formas. Una vez caducado el token, el enlace ya no se podrá usar desde el exterior, a menos que estes autorizado para reintentar la llamada y generar un nuevo token. Esto significa que, si el usuario actualiza la página, deberá realizar la llamada de nuevo para generar un nuevo token que se usará en la URL que genera la nueva caducidad.
🔁 Códigos de respuesta
Section titled “🔁 Códigos de respuesta”| Código | Descripción |
|---|---|
| 200 | OK |
| 401 | Cliente no autorizado. |
| 401 | Token de vídeo expirado. |
| 404 | Vídeo no encontrado. |
| 500 | Error interno del servidor. |
🎬 Uso del Iframe para reproducción de videos de Osteocom
Section titled “🎬 Uso del Iframe para reproducción de videos de Osteocom”🔗 URL base del iframe
Section titled “🔗 URL base del iframe”Utiliza esta URL como la primera parte de la fuente del iframe.
La ruta predeterminada es:
<urlPrefix>/en/videoaccess🌐 Entornos disponibles
Section titled “🌐 Entornos disponibles”-
🧪 Entorno de pruebas:
https://test.osteocom.me/ -
🚀 Entorno de producción:
https://www.osteocom.me/
🧱 Estructura básica del iframe
Section titled “🧱 Estructura básica del iframe”Para cargar el video, concatena el parámetro signature con el valor del tokenAuthVideo recibido
de la API de acceso al video. Ver aquí.
✅ Ejemplo de uso:
Section titled “✅ Ejemplo de uso:”<iframe src="https://xxx.osteocom.me/en/videoaccess?signature=tokenAuthVideo"></iframe>⚙️ Propiedades adicionales del iframe
Section titled “⚙️ Propiedades adicionales del iframe”🔳 allowfullscreen
Section titled “🔳 allowfullscreen”Permite que el reproductor entre en modo pantalla completa.
Este atributo debe estar presente para que funcione correctamente:
<iframe src="..." allowfullscreen></iframe>🌍 Subtítulos (Idioma por defecto)
Section titled “🌍 Subtítulos (Idioma por defecto)”Para definir el idioma por defecto de los subtítulos, usa el parámetro adicional sublang concatenado con la URL del iframe:
<iframe src="https..............&sublang=es" allowfullscreen></iframe>| Llave | Idioma |
|---|---|
it | Italiano |
en | Inglés |
fr | Francés |
es | Español |
🆕 Nuevos Endpoints en la API de Osteocom Strapi
Section titled “🆕 Nuevos Endpoints en la API de Osteocom Strapi”1️⃣ /api/osteocom/catalog
Section titled “1️⃣ /api/osteocom/catalog”📂 Qué hace este endpoint:
- 📥 Solicita el catálogo a Osteocom.
- 🔄 Actualiza nuestra colección de productos de Osteocom.
- 📝 Devuelve un JSON personalizado para el front, eliminando campos innecesarios.
2️⃣ /api/osteocom/watchVideo
Section titled “2️⃣ /api/osteocom/watchVideo”🔑 Parámetros requeridos:
- 🆔
productId - 💰
price - 👤
name - 👥
surname - 📧
email - 🎬
videoId
➡️ Este endpoint devuelve la URL para ver el video solicitado.
⚙️ Funcionalidad adicional:
- 🔐 Realiza automáticamente la petición de tokens necesaria.