Invoke the Action API to retrieve information about invoked Actions.
API Endpoint Reference (1.5)
Tenovos has introduced version 1.5 to provide non-breaking improvements over previous versions.
Key Changes:
- Authentication Standards now include OAuth2 code flow.
- Client ID is no longer required to be passed when requesting an Authorization token using our Standard Auth from v1.4
- New endpoints have been added and will continue to be added until v2 is generally available to all customers.
- Adaptive Template endpoints
- A new Get Asset endpoint with a simplified Response
- A new Create Asset endpoint with simplified payloads for the Request and Response
- A new Update Asset endpoint with simplified payloads for the Request and Response
- Metadata Admin API endpoints for managing Attributes, Groups, and Templates
- We've made some performance improvements to most endpoints
Tenovos Content Delivery Network (CDN) - Coming Soon!
Tenovos CDN: Pull Zone Overview
Tenovos CDN provides global content acceleration and optimization through a pull zone architecture, ensuring that your assets are delivered to end users with maximum speed, reliability, and efficiency. A Content Delivery Network (CDN) works by caching static content—such as images, videos, and other media—on servers distributed across the globe. When an asset is requested, the CDN serves it from the nearest edge location, reducing load times and offloading traffic from the origin server, which in this case is Tenovos DAM.
A pull zone is the core mechanism that powers this system. It automatically fetches content from the origin the first time it is requested, then caches it at the edge. Subsequent requests are served directly from the CDN cache, improving response times and reducing bandwidth consumption.
Through the Tenovos CDN API, you can create, update, and manage pull zones programmatically. Pull zones support advanced features such as global edge caching, cache purging, bandwidth controls, and real-time performance statistics like cache hit rate and geographic request distribution. Optional optimization settings allow you to enhance performance further by enabling image compression, WebP and AVIF support, and content minification.
With just a few API calls, you can fully integrate high-performance content delivery into your Tenovos workflows—no complex infrastructure required.
Invoke the Collection API to create, retrieve, edit, and delete Collections. Collections are used to group and catalog related Assets for quick access and consumption. Collections can be configured as:
- private: Visible only to the user who created the Collection.
- secured: Visible to users with.
When retrieving the Assets within a Collection, the requesting user will only see the Assets that the user has access to view. For example, a librarian may see all Assets within a Collection, but a general consumer user may only see a portion of those Assets, due to limited security access.
Invoke the Metadata Attributes API to retrieve Metadata Attributes, and to create, read, update, and delete Metadata Attribute definitions. Metadata Attributes come in varying types, including Text, Date, Controlled Vocabulary, Tabular, and Cascading, and can be assigned to Metadata Groups and Templates.
Admin Endpoints (NEW!): Create, read, update, and delete Metadata Attributes. These endpoints require the Metadata Management admin privilege.
Invoke the Metadata Templates API to create, read, update, and delete Metadata Templates, and to apply Metadata definition changes. A Metadata Template defines a set of Metadata Attributes that, when assigned to an Asset, become available for population on that Asset.
Admin Endpoints (NEW!): Create, read, update, and delete Metadata Templates. These endpoints require the Metadata Management admin privilege.
- https://api.uat.tenovos.io/v1/user
- https://api.tenovos.io/v1/user
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.uat.tenovos.io/v1/user \
-H 'Authorization: string' \
-H 'X-API-Key: YOUR_API_KEY_HERE'The Response Body is a JSON object.
List of group IDs that user belongs to
The username of the Tenovos user, created by the Administrator or user at the time of account creation. Can be null for federated user accounts.
The person designated as the sponsor/point of contact for this user
{ "userId": "7d675ef0-f423-11e9-8071-89c0c4052141", "customerId": "1234567890", "emailId": "erlich.bachman@piedpiper.com", "firstName": "Erlich", "lastName": "Bachman", "roleId": "7d5620e0-f423-11e9-8071-89c0c4052141", "status": "enabled", "groups": [ "7d6207c0-f423-11e9-8071-89c0c4052141" ], "userName": "erlich.bachman", "phone": 15551234565, "contact": "Richard Hendricks", "country": "USA", "company": "Pied Piper", "friendlyName": "Erlich Bachman" }
Request
Use this endpoint to create a new user account in the system. You must have User Management role privilege and Security Template Management role privilege in order to create a user and assign groups. This endpoint can be used to create local or federated users.
Average Response Time: 5140ms
The Request Body must be a JSON object
Password of the User.
Account Type of the User. Local accounts use a password; Federated accounts use an SSO service.
ID of the User's role. Only one role is allowed.
List of group IDs the User belongs to. At least one group is required.
- https://api.uat.tenovos.io/v1/user
- https://api.tenovos.io/v1/user
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://api.uat.tenovos.io/v1/user \
-H 'Authorization: string' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY_HERE' \
-d '{
"firstName": "John",
"lastName": "Wick",
"friendlyName": "john.wick",
"email": "john.wick@tenovos.com",
"username": "john.wick",
"password": "sdhg&uuUz78u",
"accountType": "local",
"customAttributes": {
"country": "USA",
"company": "Tenovos",
"phone": "",
"contact": ""
},
"userRoleId": "1401df5e-3f13-4c88-a5a8-de64f6227a03",
"groups": [
"7d6207c0-f423-11e9-8071-89c0c4052141"
],
"isVerified": true
}'{ "roleId": "7d5620e0-f423-11e9-8071-89c0c4052141", "status": "success" }
Request
Current user will get its profile information in response. User will also get ID of a role assigned to them and a list of group IDs they belong to.
Average Response Time: 154ms
- https://api.uat.tenovos.io/v1/user/{id}
- https://api.tenovos.io/v1/user/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.uat.tenovos.io/v1/user/4e428628-2537-40b5-91a4-5393cbf167df \
-H 'Authorization: string' \
-H 'X-API-Key: YOUR_API_KEY_HERE'The Response Body will be a JSON object
List of group IDs that user belongs to
The username of the Tenovos user, created by the Administrator or user at the time of account creation. Can be null for federated user accounts.
The person designated as the sponsor/point of contact for this user
{ "userId": "7d675ef0-f423-11e9-8071-89c0c4052141", "customerId": "1234567890", "emailId": "erlich.bachman@piedpiper.com", "firstName": "Erlich", "lastName": "Bachman", "roleId": "7d5620e0-f423-11e9-8071-89c0c4052141", "status": "enabled", "groups": [ "7d6207c0-f423-11e9-8071-89c0c4052141" ], "userName": "erlich.bachman", "phone": 15551234565, "contact": "Richard Hendricks", "country": "USA", "company": "Pied Piper", "friendlyName": "Erlich Bachman" }
Request
Update User Profile attributes such as First Name, Last Name, Friendly Name, Email, Company, Country, Contact, Phone, and User Role. The user role can be updated by sending either role id or role name.
Average Response Time: 1587ms
The Request Body must be a JSON object
List of user group ids the user is part of
- https://api.uat.tenovos.io/v1/user/{id}
- https://api.tenovos.io/v1/user/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PATCH \
'https://api.uat.tenovos.io/v1/user/{id}' \
-H 'Authorization: string' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY_HERE' \
-d '{
"firstName": "John",
"lastName": "Smith",
"friendlyName": "John Smith",
"email": "john.smith@company.com",
"company": "John'\''s Company Inc.",
"country": "USA",
"contact": 1234567890,
"phone": 1234567890,
"userRoleId": "7d5620e0-f423-11e9-8071-89c0c4052141",
"userRoleName": "End user",
"groups": [
"7d6207c0-f423-11e9-8071-89c0c4052141"
],
"status": "enabled"
}'The Response Body will be a JSON object
List of group IDs that user belongs to
The username of the Tenovos user, created by the Administrator or user at the time of account creation. Can be null for federated user accounts.
The person designated as the sponsor/point of contact for this user
{ "userId": "7d675ef0-f423-11e9-8071-89c0c4052141", "customerId": "1234567890", "emailId": "erlich.bachman@piedpiper.com", "firstName": "Erlich", "lastName": "Bachman", "roleId": "7d5620e0-f423-11e9-8071-89c0c4052141", "status": "enabled", "groups": [ "7d6207c0-f423-11e9-8071-89c0c4052141" ], "userName": "erlich.bachman", "phone": 15551234565, "contact": "Richard Hendricks", "country": "USA", "company": "Pied Piper", "friendlyName": "Erlich Bachman" }
The Request Body must be a JSON object
group-id of a valid existing user-security-group of customer
- https://api.uat.tenovos.io/v1/user/{id}/add-to-group
- https://api.tenovos.io/v1/user/{id}/add-to-group
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PATCH \
'https://api.uat.tenovos.io/v1/user/{id}/add-to-group' \
-H 'Authorization: string' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY_HERE' \
-d '{
"userGroupId": "7d6207c0-f423-11e9-8071-89c0c4052141",
"userGroupName": "string"
}'{ "status": "success", "message": "User Profile update was successful" }
The Request Body must be a JSON object
group-id of a valid existing user-security-group of customer
- https://api.uat.tenovos.io/v1/user/{id}/remove-from-group
- https://api.tenovos.io/v1/user/{id}/remove-from-group
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PATCH \
'https://api.uat.tenovos.io/v1/user/{id}/remove-from-group' \
-H 'Authorization: string' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY_HERE' \
-d '{
"userGroupId": "7d6207c0-f423-11e9-8071-89c0c4052141",
"userGroupName": "string"
}'{ "status": "success", "message": "User Profile update was successful" }
Request
Retrieve an offset-paginated, searchable list of users for the authenticated customer. Supports free-text search, status/role/group filtering, and server-side sorting.
This endpoint supersedes GET /user/search/{searchText} — it adds userName to the searchable fields and returns createdEpoch/lastUpdatedEpoch on every result.
Defaults:
fromdefaults to0.limitdefaults to100(values above100are capped to100).sortFielddefaults tofirstName.orderdefaults todesc.
Business Rules:
searchTermis trimmed and, when non-empty, matched as a case-insensitive substring against first name, last name, friendly name, email, status, phone, company, country, contact,userName, role name, and group name. Literal%and_are treated as text, not SQL wildcards. Omitted returns all users — no*sentinel required.roleandgroupare comma-separated lists of role/group names (not ids); multiple values use OR logic.statusacceptsenabled,disabled,pendingApproval.allDisabledis not a supported value and is rejected with400. Omitted returns users of any status.groupCount(as asortFieldvalue) sorts by the number of group ids in the user'sgroupsarray; a user with no groups sorts as0, nevernull. It does not add agroupCountfield to the response.roleName(as asortFieldvalue) sorts using the user's associated role name.status(as asortFieldvalue) sorts alphabetically by the stored status value.- Each result includes both the id and display name for its role (
roleId/roleName) and for each group (groupId/groupName) — the front end does not need to resolve ids to names itself. connectUserindicates whether the user can access Tenovos Connect.connectRoleholds that user's Tenovos Connect role and isnullwhenconnectUserisfalse. TheconnectUserquery parameter filters on this same field:truereturns only Tenovos Connect users,falsereturns only users who are not, and omitting it applies no filter at all rather than defaulting to either.
The user submitting the request must have the User Management privilege.
Case-insensitive substring match against first name, last name, friendly name, email, status, phone, company, country, contact, userName, role name, and group name. Literal % and _ are treated as text. Omitted returns all users.
Comma-separated list of role names. Multiple values use OR logic.
Comma-separated list of group names. A user matches when they belong to at least one supplied group.
Filters by account status. Omitted returns users of any status. allDisabled is not supported.
Filters by Tenovos Connect access, matching the connectUser field on each result. true returns only Tenovos Connect users; false returns only users who are not. Omitted applies no filter and returns both.
Number of results to return per page. Defaults to 100, maximum 100 (values above 100 are capped).
Field to sort results by. Defaults to firstName.
- https://api.uat.tenovos.io/v1/users
- https://api.tenovos.io/v1/users
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.uat.tenovos.io/v1/users?searchTerm=smith&role=Admin%2CContent+Editor&group=Marketing&status=enabled&connectUser=true&from=0&limit=100&sortField=firstName&order=asc' \
-H 'Authorization: string' \
-H 'X-API-Key: YOUR_API_KEY_HERE'{ "users": [ { … } ], "pageInfo": { "from": 0, "limit": 100, "total": 842, "hasNextPage": true } }
Request
Retrieve user totals by status for the authenticated customer, calculated in a single grouped query. Backs the User Management screen's status tabs without running a separate paginated GET /users query per status.
Business Rules:
- This endpoint does not currently accept any query parameters — the counts always represent the complete user population for the authenticated customer and are unaffected by the search/filter state of
GET /users. Filtering may be added later as an additive change. - All four properties are always returned, including
0for a status with no matching users. - Pending-approval identification preserves the existing User Management status/update-attribution rules.
The user submitting the request must have the User Management privilege.
- https://api.uat.tenovos.io/v1/users/status-counts
- https://api.tenovos.io/v1/users/status-counts
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.uat.tenovos.io/v1/users/status-counts \
-H 'Authorization: string' \
-H 'X-API-Key: YOUR_API_KEY_HERE'{ "enabled": 842, "disabled": 130, "pendingApproval": 12, "total": 984 }
Request
Use this endpoint to retrieve a list of User Profiles matching the search keyword provided in the request parameter. Do not enter your search term wrapped in quotation marks. Provided keyword will be matched against the user attributes case insensitively - First Name, Last Name, Friendly Name, Username, Email, Phone, Company, Contact, Country, Status, Group Names, and Role Name. Entering "*" as your search term will return all users. The response is formatted as an area of objects, with each user account being returned as an object, as well as a key called 'count', which indicates how many accounts met the search critera. A maximum limit of 100 accounts will be returned in the response. In the case that more than 100 accounts meet the search criteria, pagination using the optional 'from' and 'limit' query parameters will be required to retrieve all accounts.
The user performing this action must have the 'User Management' role privilege.
How to use pagination: Pagination should be used when the amount of user accounts that match the entered search term exceeds the amount of users (100) returned in a single response. Paginating through the results will require making more than one call to this endpoint. To retrieve the first 100 users, in your query parameters, set your 'from' value to 0, and your 'limit' value to 100. To return the next set of 100 users, leave your 'limit' value as 100, but set your 'from' value to 100.
Continue to repeat this process of adding 100 to your 'from' value until all user account results are captured.
- https://api.uat.tenovos.io/v1/user/search/{searchText}
- https://api.tenovos.io/v1/user/search/{searchText}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.uat.tenovos.io/v1/user/search/{searchText}?from=string&limit=string' \
-H 'Authorization: string' \
-H 'X-API-Key: YOUR_API_KEY_HERE'{ "status": "success", "data": [ { … } ] }
Invoke the Story Boards API to retrieve and manage Story Boards. Story Boards are curated content experiences that combine collections, saved searches, and other content blocks into a single shareable view.
Coming Soon: Additional endpoints for creating, updating, and deleting Story Boards.
Tenovos Webhook Subscriptions
For more information about our Webhooks, see the Webhook section of our Developer Portal