# Channels Channels are the integration layer for connecting to external content systems — cloud storage, DAM platforms, social media, enterprise file systems, and others. Each Channel is a configured, authenticated connection to one of these external sources that the platform monitors, indexes, and keeps in sync. The Channel Manager authenticates against external systems, scans for new and modified content, manages webhook subscriptions for real-time change notifications, and makes raw content available for retrieval — without managing the binary files directly. Binary retrieval is handled via pre-signed URLs delegated to [Content Storage](#tag/Content-Storage). **Channel categories:** | Category | Description | |---|---| | `ORIGIN` | External content source to pull from (Box, Google Drive, SharePoint, S3, DAMs, etc.) | | `OBSERVATION` | External system to observe for engagement events (Instagram, Facebook, Website, etc.) | | `DELIVERY` | Destination to push content to | **Currently available channel types:** *Origin (content pull):* | Channel | Group | Auth | |---|---|---| | Box | Cloud File Storage | OAuth | | Google Drive | Cloud File Storage | OAuth | | AWS S3 | Object Store | Service Credentials | | Tenovos DAM | DAM | OAuth | | Adobe AEM | DAM | Service Credentials | | Sitecore | DAM | OAuth | | Bynder | DAM | OAuth | | Brand Folder | DAM | OAuth | | Azure Blob | Object Store | OAuth | | Google Cloud Storage | Object Store | OAuth | | SharePoint | Cloud File Storage | OAuth | *Observation (engagement events):* | Channel | Group | |---|---| | Instagram | Social | | Facebook | Social | | Website | Content Management and Sites | **Authentication methods:** | Auth Type | Description | |---|---| | `OAUTH` | User-delegated OAuth 2.0 flow; use `retrieve-oauth-url` then `update-auth` | | `API_KEY` | Static API key submitted during channel creation | | `BASIC_AUTH` | Username and password credentials | | `SERVICE_CREDENTIALS` | Service account JSON or IAM role credentials (used by Adobe AEM, AWS S3) | **Channel status lifecycle:** | Status | Description | |---|---| | `DRAFT` | Channel created but not yet authenticated | | `AUTHENTICATED` | Credentials stored; not yet scanning | | `ENABLED` | Actively scanning and webhook-registered | | `DISABLED` | Paused; configuration and credentials retained | **Channel lifecycle endpoints:** - `list-channel-types / retrieve-channel-types` — discover available integrations and their configuration requirements - `create-channel` — configure a new connection (name, settings, auth) - `update-channel` — modify an existing channel's settings - `enable-channel` — activate scanning and webhook registration; channel begins syncing content - `disable-channel` — pause sync without deleting configuration; webhooks are torn down - `delete-channel / purge-channels` — remove channel(s) and all associated webhooks and scan state - `validate-channel-config` — test credentials and connectivity before enabling; returns `OK`, `AUTH_FAILURE`, or `CONFIG_FAILURE` **Authentication flow endpoints:** - `retrieve-oauth-url` — get the OAuth authorization URL to redirect a user through - `update-auth` — exchange an OAuth authorization code or service credentials for stored tokens **Content discovery endpoints:** - `retrieve-folders` — browse the folder, site, or library tree of a connected source - `get-config-description` — fetch the dynamic field schema for configuring a channel type; field types are `TREE`, `DROPDOWN`, or `TEXT` - `get-config-details` — retrieve selectable items (sites, folders, document libraries) for a specific channel instance - `scan-content` — manually trigger or resume a paginated content scan - `retrieve-content` — generate pre-signed download URLs for specific content items from the source - `retrieve-content-metadata` — fetch metadata for a specific item directly from the external source - `retrieve-content-data` — stream raw file content from the external source - `retrieve-channel-account` — return the authenticated account info (user profile, tenant ID, etc.) for a connected channel **Sync and operations:** - `resolve-webhook-payload` — parse an inbound push notification from an external system into a normalized platform event (used internally) - `channel-stats` — retrieve scan statistics and sync state (`ACTIVE`, `INACTIVE`, `SYNCING`, or `ERROR`) for a channel **Scan behavior:** Enabled channels run on an automatic schedule. Initial scans perform a full content crawl; subsequent delta scans (default interval: 10 minutes) retrieve only changes since the last successful scan using source-native change detection (e.g., Graph delta queries for SharePoint, change tokens for Box). Failed scans retry up to 5 times with a 30-minute cooldown between attempts. ## Browse channel types - [POST /api/v1/channel/list-channel-types](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.listchanneltypes.md): Lists the available channel type templates with optional filtering. Use this to discover which integrations are available and what authentication and configuration each requires before creating a channel. Request: query.category - Filter by channel category: ORIGIN (content source systems such as Box, SharePoint, or S3), OBSERVATION (systems monitored for engagement events such as Instagram or a website), or DELIVERY (destination systems to push content to). query.enabled - When true, returns only types that are currently available for use. When false, returns only types that are not yet enabled. query.hasInstance - When true, returns only types for which the organization already has at least one configured channel. pagination - Optional pagination cursor and page size. Response: channelTypes - List of channel types, each including its name, description, authentication method, logo, category, and whether it supports real-time webhook sync. pageCursor - Opaque cursor for the next page. Absent when no further results exist. ## Get channel types - [POST /api/v1/channel/retrieve-channel-types](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrievechanneltypes.md): Retrieves full channel type definitions by their IDs. Request: ids - List of channel type IDs to retrieve. Response: channelTypes - List of ChannelType objects including authentication requirements and auth description detailing credential fields. ## Search channels - [POST /api/v1/channel/list-channels](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.listchannels.md): Lists channel instances owned by the organization, with optional filtering and pagination. Request: category - Optional category filter (ORIGIN, OBSERVATION, DELIVERY). pagination - Optional Pagination cursor and page size. includeDeleted - When true, includes soft-deleted channels in the results. Response: channelInstances - List of ChannelInstance objects including id, name, status, settings, scan state, and timestamps. pageCursor - Opaque cursor for the next page. Absent when there are no further results. ## Get channels - [POST /api/v1/channel/retrieve-channels](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrievechannels.md): Retrieves full channel instance details by their IDs. Request: ids - List of channel instance IDs to retrieve. Response: channelInstances - List of ChannelInstance objects with complete configuration and status. ## Create a channel - [POST /api/v1/channel/create-channel](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.createchannel.md): Creates a new channel instance connecting the organization to an external system. Request: channelInstance - The channel to create, including channelTypeId, name, optional description, and type-specific settings. authDetails - Authentication credentials for the external system (OAuth code, API key, basic auth, or service credentials). Response: channelInstance - The created ChannelInstance in DRAFT status with its assigned ID. ## Update a channel - [POST /api/v1/channel/update-channel](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.updatechannel.md): Updates the name, description, and configuration settings of an existing channel instance. Request: channelInstance - Update payload containing the channel id, new name, optional description, and updated settings. Authentication credentials are not changed by this call; use UpdateAuth for that. Response: updated - Number of records updated (1 on success). ## Enable a channel - [POST /api/v1/channel/enable-channel](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.enablechannel.md): Activates a channel, registering webhooks with the external system and starting content synchronization. Request: channelId - ID of the channel to enable. The channel must be in AUTHENTICATED or DISABLED status. Response: enabled - True if the channel was successfully enabled. ## Disable a channel - [POST /api/v1/channel/disable-channel](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.disablechannel.md): Deactivates a channel, deregistering webhooks and suspending content synchronization. Request: channelId - ID of the channel to disable. Response: disabled - True if the channel was successfully disabled. ## Validate channel config - [POST /api/v1/channel/validate-channel-config](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.validatechannelconfig.md): Tests a channel's configuration and credentials against the external system, returning a validation report. Request: channelId - ID of the channel to validate. Response: report - ValidationReport containing a status (OK, AUTH_FAILURE, CONFIG_FAILURE, FAILED) and a list of error messages describing any failures found. ## Delete a channel - [POST /api/v1/channel/delete-channel](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.deletechannel.md): Soft-deletes a channel instance, disabling it and retaining historical records for audit purposes. Request: channelId - ID of the channel to delete. Response: deleted - Number of records deleted (1 on success). ## Get channel OAuth URL - [POST /api/v1/channel/retrieve-oauth-url](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrieveoauthurl.md): Generates an OAuth authorization URL for initiating the OAuth flow for a given channel type. Request: channelTypeId - ID of the channel type to generate an OAuth URL for. customRedirectUri - Optional override for the OAuth redirect URI. Response: url - The OAuth authorization URL to redirect the user to. ## Update channel auth - [POST /api/v1/channel/update-auth](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.updateauth.md): Updates or rotates the authentication credentials for an existing channel without changing other settings. Request: channelId - ID of the channel whose credentials are being updated. authDetails - New credentials (OAuth code, API key, basic auth, or service credentials). Credentials are encrypted before storage. Response: (empty) ## Get channel folders - [POST /api/v1/channel/retrieve-folders](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrievefolders.md): Enumerates the folder or directory hierarchy available in the external system connected by the channel. Request: channelId - ID of the channel to browse. parentId - ID of the folder to list children of. Use the root ID to start at the top level. pagination - Optional Pagination cursor and page size for large folder listings. Response: folders - List of Folders objects with id, name, isLeaf, and type (FOLDER, SAVED_SEARCH, or VOCAB). pageCursor - Opaque cursor for the next page. ## Get channel account - [POST /api/v1/channel/retrieve-channel-account](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrievechannelaccount.md): Retrieves account information (name, email, avatar) from the external system the channel is connected to. Request: channelId - ID of the channel to retrieve account information for. Response: account - ChannelAccount containing the name, email, and avatarUrl of the connected account. ## Get channel content - [POST /api/v1/channel/retrieve-content](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrievecontent.md): Generates download or streaming URLs for one or more content items in an external system. Request: query - List of ContentRetrievalQuery entries, each specifying a channelId and a contentUri identifying the item to retrieve. Response: urls - List of ContentRetrievalResponse entries, each containing a URL, the auth mechanism required (bearer token, basic auth, or headers), and whether the content must be accessed via streaming only. ## Get channel content metadata - [POST /api/v1/channel/retrieve-content-metadata](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrievecontentmetadata.md): Fetches file metadata for a single content item identified by its URI. Request: contentUri - URI of the content item to retrieve metadata for. Response: metadata - ScanContent.Metadata containing content properties (dimensions, duration, page count, file size, MIME type) and any custom metadata from the external system. ## Get channel content data - [POST /api/v1/channel/retrieve-content-data](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.retrievecontentdata.md): Streams the raw binary data of a content item in chunks (server-streaming RPC). Request: contentUri - URI of the content item to stream. Response (stream): ResponseChunk.data - Successive byte chunks of the content. The stream ends when all data has been delivered. ## Scan channel content - [POST /api/v1/channel/scan-content](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.scancontent.md): Scans a channel to discover all available content items, returning paginated metadata for each. Request: channelId - ID of the channel to scan. pagination - Optional Pagination cursor and page size. Response: content - List of ScannedContent entries, each containing a URI and Metadata (content properties and custom data from the external system). pageCursor - Opaque cursor for the next page. Absent when scan is complete. ## Retrieve channel type configuration schema - [POST /api/v1/channel/get-config-description](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.getconfigdescription.md): Returns the configuration schema for a channel type — the set of parameters a user must supply when setting up a channel of that type. Use this to dynamically render a configuration form before calling create-channel or update-channel. Request: channelTypeId - ID of the channel type to retrieve the configuration schema for. Response: configuration - List of configuration parameters, each including an id, display label, input type, whether it is required, and whether it supports multiple selections. Input types are TREE (hierarchical picker, e.g. folder or site selection), DROPDOWN (single or multi-select list), or TEXT (free-form text input). ## Retrieve selectable options for a channel configuration parameter - [POST /api/v1/channel/get-config-details](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.getconfigdetails.md): Retrieves the selectable options for one or more configuration parameters of an authenticated channel — for example, the list of SharePoint sites, Box folders, or S3 buckets available under the connected account. Use this to populate pickers in your configuration UI after the channel has been authenticated. Request: channelId - ID of the authenticated channel to retrieve options for. configId - List of configuration parameter IDs to retrieve options for (as returned by get-config-description). parentId - For hierarchical parameters, the ID of the parent item whose children to retrieve (e.g., a SharePoint site ID when listing its document libraries). pagination - Optional pagination cursor and page size. Response: values - Selectable options for each requested parameter, keyed by configId. pageCursor - Opaque cursor for the next page. Absent when no further results exist. ## Map a webhook notification to affected content - [POST /api/v1/channel/resolve-webhook-payload](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.resolvewebhookpayload.md): Translates an inbound webhook notification from an external system into the platform's internal content identifiers for the affected items. When an external system (such as Box or SharePoint) sends a change notification, use this endpoint to determine which content records in the platform correspond to the changed resource before triggering a sync or update. Request: externalSourceId - The resource identifier from the external system's webhook payload (e.g., a file ID, node ID, or object key). channelId - ID of the channel that received the webhook. Response: channelContentIds - Platform content IDs for the items affected by the external change event. ## Get channel statistics - [POST /api/v1/channel/channel-stats](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.channelstats.md): Retrieves synchronization statistics and health state for one or more channels over an optional time period. Request: ids - List of channel IDs to retrieve statistics for. period - Optional time range (from/to timestamps) for period-based metrics. If omitted, all-time totals are returned. Response: stats - List of Stats objects, one per channel, each containing: periodStats - Asset created/updated/deleted counts, error count, and recent errors. channelState - Last sync time, next scheduled scan, and current scan state (ACTIVE, INACTIVE, SYNCING, or ERROR). ## Permanently remove channels - [POST /api/v1/channel/purge-channels](https://api.tenovos.com/openapi/content-intelligence/channels/tenovos.channel.channelmanagerservice.purgechannels.md): Permanently deletes channel instances that have never successfully ingested content. Request: ids - List of channel IDs to permanently delete. Channels that have already synced content are excluded to preserve data integrity. Response: ids - List of IDs of the channels that were successfully purged.