Download OpenAPI specification:
API for Osteocom content licensing partners: read your catalog, record purchases and play videolessons in the Osteocom player.
Call the endpoints in this order:
userAccessKey.Every request is a POST with a JSON body. All requests except Login need Authorization: Bearer <token>.
Text fields accept up to 50 characters unless stated otherwise. A body that fails validation (missing required field, value too long, wrong type) returns 422 with an empty body. Errors don't return JSON: the body is empty or a short text message.
idChannel and videoId are different ids: idChannel identifies the channel you sell, videoId a single videolesson inside it.
Guides: https://platform.developer.osteocom.me/guide/marketplaceapi/ · Postman collection: https://platform.developer.osteocom.me/postman/osteocom-content-licensing.postman_collection.json
Exchanges your credentials for the bearer token used by every other request.
| clientId required | string Your client ID, provided by Osteocom. |
| clientSecret required | string Your secret key, provided by Osteocom. |
{- "clientId": "psiGBHLDxxxxxxdIyDw",
- "clientSecret": "QAtSxxxxxxxxrz2JU"
}{- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaWQiOiI2NmZh..."
}Returns the channels agreed for your account, each with its videolessons. Titles and descriptions are in the channel's language. Fields without a value are returned as null.
| clientId required | string (ClientId) <= 50 characters Your client ID, provided by Osteocom. |
{- "clientId": "psiGBHLDxxxxxxdIyDw"
}{- "catalog": [
- {
- "idChannel": "66d579675f2a8c1e3f15e4d3",
- "background": "string",
- "cover": "string",
- "trailer": "string",
- "price": 100,
- "video": [
- {
- "videoId": "66d57a1b5f2a8c1e3f15e4e1",
- "background": "string",
- "cover": "string",
- "trailer": "string",
- "title": "Introduction to arthroscopy",
- "subtitle": "Portals and instruments",
- "htmlDescription": "string",
- "duration": 2730,
- "videoQuality": "FullHD",
- "audio": [
- "en"
],
}
], - "title": "Arthroscopy of the knee",
- "subtitle": "From the basics to meniscal repair",
- "htmlDescription": "string"
}
]
}Call it after the customer has paid on your platform: it records the purchase and gives the customer access to the channels in products.
The response token is the customer's userAccessKey, needed by Video access. It is always the same for the same userId.
| clientId required | string (ClientId) <= 50 characters Your client ID, provided by Osteocom. |
| userId required | string (UserId) <= 50 characters Your id for the customer. Any format, but keep it the same for the same person: Osteocom uses it to match purchases and video access. |
string or null <= 50 characters Customer email. Required, and checked for a valid format, only if marketing is enabled on your account. | |
| name | string or null <= 50 characters |
| surname | string or null <= 50 characters |
| marketingConsent | boolean Default: false Whether the customer agreed to receive marketing (e.g. newsletters). |
required | Array of objects (PurchasedProduct) [ 1 .. 100 ] items |
{- "clientId": "psiGBHLDxxxxxxdIyDw",
- "userId": "user_12345",
- "email": "customer@example.com",
- "name": "Mario",
- "surname": "Rossi",
- "marketingConsent": false,
- "products": [
- {
- "productId": "66d579675f2a8c1e3f15e4d3",
- "price": 100
}
]
}{- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOm51bGwsImlkYyI6InBzaUdC..."
}Returns a token to play one videolesson, valid for 15 minutes. Ask for a new one each time the player is loaded.
Put the token in the player URL:
<iframe src="https://test.osteocom.me/en/videoaccess?signature=TOKEN_AUTH_VIDEO&sublang=en"
width="100%" height="500" frameborder="0" allowfullscreen allow="encrypted-media"></iframe>
sublang is the default subtitle language (it, en, fr, es). In production use https://www.osteocom.me.
| clientId required | string (ClientId) <= 50 characters Your client ID, provided by Osteocom. |
| userId required | string (UserId) <= 50 characters Your id for the customer. Any format, but keep it the same for the same person: Osteocom uses it to match purchases and video access. |
| videoId required | string <= 50 characters A |
| userAccessKey required | string <= 800 characters The |
{- "clientId": "psiGBHLDxxxxxxdIyDw",
- "userId": "user_12345",
- "videoId": "66d57a1b5f2a8c1e3f15e4e1",
- "userAccessKey": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOm51bGwsImlkYyI6InBzaUdC..."
}{- "tokenAuthVideo": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsSWQiOiI2NmQ1Nzk2..."
}Removes a customer's access to a channel, for example after a refund. To give access back, call Content authorization again.
| clientId required | string (ClientId) <= 50 characters Your client ID, provided by Osteocom. |
| channelId required | string <= 50 characters The channel's |
| userId required | string (UserId) <= 50 characters Your id for the customer. Any format, but keep it the same for the same person: Osteocom uses it to match purchases and video access. |
{- "clientId": "psiGBHLDxxxxxxdIyDw",
- "channelId": "66d579675f2a8c1e3f15e4d3",
- "userId": "user_12345"
}{- "userId": "user_12345",
- "cancellationDate": "2026-09-30T10:24:00.000Z"
}