# Content Storage The Content Storage service manages references to binary content (files) through a pluggable **adapter** model. Adapters represent different physical storage backends — for example, AWS S3 (full read/write), CDN origins (Bunny, Bria), or external DAM connectors. Callers never interact with storage directly; they work with **pre-signed URLs** that the service generates on demand, allowing content to be streamed directly from the storage provider without proxying through the platform. The service supports **multiple adapters per organization with a priority ordering**, so that suitable storage defaults are chosen automatically without callers needing to specify where content lives. Different adapters can be configured for different storage classes (hot, warm, cold), affecting retrieval latency and cost. **Content lifecycle:** | Endpoint | Description | |---|---| | `register` | Record that a piece of content exists at a known storage location (used during channel sync) | | `retrieve-upload-url` | Get a pre-signed URL to upload a new file directly to the configured storage adapter | | `stage` | Prepare content for CDN delivery by writing it to the CDN origin adapter | | `retrieve-url` | Get a pre-signed download or streaming URL for a content item | | `retrieve-info` | Fetch content metadata: size, MIME type, checksums, dimensions (for images) | | `list-info` | Batch retrieval of content metadata for multiple items | | `update` | Update mutable content metadata (alt text, tags, etc.) | | `delete / undelete` | Soft-delete a content record with restore capability | | `purge` | Permanently remove the content record (does not delete the underlying file from storage) | | `deregister` | Remove the content reference without affecting the underlying stored file | **Adapter management:** | Endpoint | Description | |---|---| | `create-adapter` | Configure a new storage backend for the organization | | `update-adapter` | Modify adapter settings (credentials, priority, storage class) | | `retrieve-adapter / list-adapters` | Inspect configured adapters | | `delete-adapter / undelete-adapter / purge-adapter` | Manage adapter lifecycle | ## Register content - [POST /api/v1/content/register](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.register.md): Registers one or more binary assets into the content service, creating tracking records linked to their storage location. Request: items - List of content items to register. Each item includes: contentUri - URI of the binary file in the storage adapter. contentId - Optional existing content ID to associate this representation with. Auto-generated if omitted. contentProperties - Optional media properties (dimensions, mimeType, size, filename, caption). externalId - Optional identifier from an external system for cross-reference. representationType - Optional label distinguishing this rendition (e.g. "original", "preview"). extendedProperties - Optional descriptive and technical metadata. Response: items - List of registered items, each containing contentId, adapterId, representationType, and externalId. ## Deregister content - [POST /api/v1/content/deregister](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.deregister.md): Permanently removes content registrations, deleting both the metadata record and the binary file from storage. Request: items - List of items to deregister. Each item includes: contentId - ID of the content to remove. adapterId - Optional adapter to target; removes across all adapters if omitted. representationType - Optional representation to target; removes all representations if omitted. Response: items - List of deregistered items confirming contentId, adapterId, and representationType. ## Delete content - [POST /api/v1/content/delete](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.delete.md): Soft-deletes content representations, marking them as deleted while retaining data for potential recovery. Request: items - List of items to soft-delete. Each item includes: contentId - ID of the content to delete. storageClass - Optional storage class to target. adapterId - Optional adapter to target. representationType - Optional representation to target. Response: items - List of deleted items confirming contentId, adapterId, and representationType. ## Restore deleted content - [POST /api/v1/content/undelete](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.undelete.md): Recovers soft-deleted content representations, restoring them to an active state. Request: items - List of items to restore. Each item includes: contentId - ID of the content to recover. storageClass - Optional storage class to target. adapterId - Optional adapter to target. representationType - Optional representation to target. Response: items - List of restored items confirming contentId, adapterId, and representationType. ## Permanently remove content - [POST /api/v1/content/purge](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.purge.md): Permanently deletes content binary files from storage and removes their representation records. Request: items - List of items to purge. Each item includes: contentId - ID of the content to purge. storageClass - Optional storage class to target. adapterId - Optional adapter to target. representationType - Optional representation to target. adapterType - Optional adapter type to target. Response: items - List of purged items confirming contentId, adapterId, and representationType. ## Get content download URL - [POST /api/v1/content/retrieve-url](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.retrieveurl.md): Generates presigned time-limited download URLs for one or more content items. Request: contentIds - List of content IDs to generate URLs for. representationType - Optional rendition to retrieve (e.g. "original", "preview"). storageClass - Optional storage class to target. adapterId - Optional specific adapter to source from. adapterType - Optional adapter type to source from. retrieveProperties - Optional width/height/aspectRatio hints for image resizing at the CDN. useShortLinks - When true, generates shortened URLs. useDynamicLinks - When true, generates CDN dynamic links. Response: items - List of results, each containing the content ID, a presigned URL for direct download or streaming, and file properties including MIME type, dimensions, size, and filename. ## Get content info - [POST /api/v1/content/retrieve-info](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.retrieveinfo.md): Retrieves metadata for one or more content items without generating download URLs. Request: contentIds - List of content IDs to look up. representationType - Optional rendition to retrieve. storageClass - Optional storage class to target. adapterId - Optional adapter to target. adapterType - Optional adapter type to target. externalIds - Optional external IDs to look up content by. contentUris - Optional raw URIs to look up content by. requestProperties - Flags controlling which optional fields to include (description, extendedDescription, technical). Response: items - List of results, one per requested content item. Each entry includes the content ID, storage URI, file properties (size, MIME type, dimensions, duration), optional external ID if one was supplied at registration, and a pending flag that is true if the file upload has not yet completed. ## Search content info - [POST /api/v1/content/list-info](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.listinfo.md): Lists all content representations stored within a specific adapter instance, with pagination. Request: adapterInstanceId - ID of the adapter whose content to list. pagination - Optional Pagination cursor and page size. Response: items - List of content items, each including the content ID, storage URI, file properties (MIME type, dimensions, size), optional external ID, optional extended descriptive metadata, and a pending flag that is true if the file upload has not yet completed. pageCursor - Opaque cursor for the next page. Absent when there are no further results. ## Get content upload URL - [POST /api/v1/content/retrieve-upload-url](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.retrieveuploadurl.md): Generates presigned upload URLs for new or replacement content, creating pending content records. Request: items - List of upload requests. Each item includes: contentId - Optional existing content ID to replace; auto-generated if omitted. contentProperties - Optional media properties for the file being uploaded. externalId - Optional external system identifier. extendedProperties - Optional descriptive metadata. representationType - Optional rendition label for the uploaded file. storageClass - Optional storage class for the upload destination. adapterId - Optional specific adapter to upload to. adapterType - Optional adapter type to upload to. Response: items - List of results each containing contentId, optional externalId, and the presigned upload URL. The client must PUT the file to this URL to complete the upload; content remains in a pending state until then. ## Stage content for upload - [POST /api/v1/content/stage](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.stage.md): Copies content from one storage location to another, enabling distribution across adapters (e.g. primary to CDN cache). Request: contentIds - List of content IDs to stage. representationType - Optional source rendition to copy from. toDestination - Destination specified as one of: storageClass, adapterId, or adapterType. stageProperties - Optional per-item configuration including contentId mapping and alias. toRepresentationType - Optional representationType to assign to the copy at the destination. Response: items - List of staged results each containing contentId, the destination representationType, and the destination adapterId. ## Create a storage adapter - [POST /api/v1/content/create-adapter](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.createadapter.md): Creates a new storage adapter instance, registering a storage backend for use by the content service. Request: name - Display name for the adapter. adapterType - Backend type: AWS_S3, CHANNEL_MANAGER, CDN, or AWS_EFS. storageClass - Purpose classification: PRIMARY, CACHE, PREVIEW, TEMP, or ANALYZER. retrievalPriority - Priority order when selecting adapters for download (lower = higher priority). uploadPriority - Priority order when selecting adapters for upload (lower = higher priority). config - Type-specific configuration (bucket name, region, CDN pull zone, etc.). Response: The created adapter instance, including its assigned ID, display name, backend type, storage class, retrieval and upload priority values, type-specific configuration, and creation timestamp. ## Update a storage adapter - [POST /api/v1/content/update-adapter](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.updateadapter.md): Updates the configuration, priorities, or storage class of an existing adapter instance. Request: id - ID of the adapter to update. name - Optional new display name. storageClass - Optional new storage class. retrievalPriority - Optional new retrieval priority. uploadPriority - Optional new upload priority. config - Optional new type-specific configuration. Response: The updated adapter instance with all applied changes, including the current name, storage class, priority settings, and configuration. ## Get a storage adapter - [POST /api/v1/content/retrieve-adapter](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.retrieveadapter.md): Retrieves full details of a single adapter instance by its ID. Request: adapterId - ID of the adapter to retrieve. Response: The adapter instance including its ID, backend type, storage class, retrieval and upload priority values, type-specific configuration, and timestamps. ## Search storage adapters - [POST /api/v1/content/list-adapters](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.listadapters.md): Lists adapter instances with optional filtering for deleted or default system adapters. Request: includeDeleted - When true, includes soft-deleted adapters in the results. includeDefault - When true, includes system-managed default adapters. Response: items - List of lightweight Adapter summaries: adapterId, name, adapterType, storageClass. ## Delete a storage adapter - [POST /api/v1/content/delete-adapter](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.deleteadapter.md): Soft-deletes an adapter instance, making it unavailable for new operations while retaining its records. Request: adapterId - ID of the adapter to soft-delete. Response: adapterId - ID of the adapter that was deleted. ## Restore a storage adapter - [POST /api/v1/content/undelete-adapter](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.undeleteadapter.md): Recovers a soft-deleted adapter instance, restoring it to active status. Request: adapterId - ID of the adapter to restore. Response: adapterId - ID of the adapter that was restored. ## Permanently remove an adapter - [POST /api/v1/content/purge-adapter](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.purgeadapter.md): Permanently deletes an adapter instance. The adapter must have no remaining content representations. Request: adapterId - ID of the adapter to permanently delete. Fails if any content representations still reference this adapter. Response: adapterId - ID of the adapter that was purged. ## Update content metadata - [POST /api/v1/content/update](https://api.tenovos.com/openapi/content-intelligence/content-storage/tenovos.content.contentservice.update.md): Updates the metadata of one or more content items without modifying the underlying binary file. Request: items - List of updates. Each item includes: contentId - ID of the content to update. caption - Optional new caption. description - Optional new short description text. extendedDescription - Optional new extended description text. image/video/document - Optional replacement media dimension/duration properties. Response: items - List of updated content items reflecting the applied metadata changes.