Metadata Integration
Titan OS supports integrated content discovery through partner catalogue feeds. This feature allows users to explore a broad range of movies, series, and sports content directly within the platform—via universal search and personalized recommendations. By surfacing content from multiple providers in a unified, intuitive interface, Titan OS helps users find what they love faster.
As an app provider, you can contribute to this experience by sharing your catalogue feed enriched with high-quality metadata. Your data powers search results and recommendation rows, and is intelligently aggregated and deduplicated to ensure a consistent, up-to-date presentation. The more complete and accurate your feed, the more discoverable and engaging your content becomes.
Key Use Cases for Metadata Integration
By integrating your metadata into Titan OS, you can enhance visibility and engagement through two primary features:
1. Global Search
Integrate your full content catalogue to be included in Titan OS’s global search experience. This allows users to discover your titles through both intent-driven searches (e.g., specific movie names) and casual browsing. Results are deep-linked directly into your app, ensuring a seamless user journey from search to playback. The more detailed and accurate your metadata (e.g., title, genre, cast, imagery), the more relevant and prominent your content will appear.
![]() | ![]() |
---|
2. Featured Recommendations on the Start Page
Highlight key content in a dedicated row on the Titan OS start page. This feature is especially powerful when your app is marked as a user favorite, as it brings your recommendations front and center—without requiring users to open your app.
You can power this row in several flexible ways:
- Provide a separate feed or endpoint with curated highlighted content
- Flag a specific list within your full catalogue
- Allow Titan OS to automatically select content (e.g., newest additions, trending titles)
Example use cases include showcasing:
- New releases
- Top-performing titles
- Seasonal or promotional highlights
Well-structured metadata ensures the right titles are shown to the right users, boosting discoverability and engagement.
How Metadata is Used Within the Titan OS UI
Search
Metadata will be used in search to optimize discovery of content and make searches more accurate.
Prompted
When a user knows what they are looking for, metadata ensures accurate results that link directly to your app.
Unprompted
When a user is browsing for content, metadata helps surface relevant titles from your catalogue for better discovery.
Recommendations
The “Recommended for you” row on Titan OS uses your metadata to provide personalized suggestions, enhancing content engagement.
See the section below for details on how to structure and deliver this feed. Metadata Integration | Recommendation Feed
Content Aggregation
In cases where multiple providers offer the same content, metadata helps aggregate options, allowing users to choose from all available sources.
Content Feed Structure and Metadata Requirements
Our goal is to keep the integration process as straightforward and flexible as possible, while maintaining consistency and performance across all content feeds. To ensure a smooth and efficient integration, we kindly ask you to provide your metadata feed in a format and structure that supports reliable processing on both sides.
Mandatory Fields
Field Name | Value | Description |
---|---|---|
id | Integer (e.g. 12345) | ID of the asset |
created_at | ISO 8601 (e.g. “2025-05-19T14:23:00Z”) | UTC timestamp indicating the last time this item was created |
updated_at | ISO 8601 (e.g. “2025-05-19T14:23:00Z”) | UTC timestamp indicating the last time this item was modified |
original_title | String (e.g. “Inception”) | Official/original title of the content |
year | Integer (e.g. 2010) | Year of release |
duration | Integer (seconds) (e.g. 8880) | Total runtime in seconds |
type | Enum: “movie”, “tv_show”, “season”, “episode”, “sport_program” | Type of content |
seasons | Integer (optional) | Empty or contains season metadata if type = TV show |
episodes | Integer (optional) | Empty or contains episode metadata if type = TV show |
titles | Array of { locale: string, title: string } | Localized titles per language |
synopses | Array of { locale: string, synopsis: string } | Localized short synopsis (≤ 200 characters) |
deeplinkings | Array of { market: string, device_type: "TV", url: string } | Deep links for launching TV content in partner apps |
availabilities | Array of objects | Availability of content per country/business model |
availabilities[].market | Array of ISO 3166 country code (e.g. “US”) | Target markets |
availabilities[].business_model | Enum: “AVOD”, “HVOD”, “RVOD”, “TVOD”, “SVOD”, “EST” | AVOD (free ad-supported), HVOD (subscription + ads), etc. |
availabilities[].video_quality | Enum: “SD”, “HD”, “UHD” | Supported video resolutions |
artwork_landscape | Array of { locale: string, url: string } | Mandatory horizontal artwork with title treatment (≥ 960x540, 16:9) |
screenshot_landscape | Array of { locale: string, url: string } | Horizontal screenshot without TT (≥ 1920x1080, desired 4K, 16:9) |
genres | Array of Enum | Must match predefined list (Action, Drama, etc.) |
classifications | Array of { country: string, minimum_age: integer, system: string } | Age restrictions per country |
external_id | Array of { type: "eidr" | "imdb" | "tmdb", id: string } | External content identifier, if applicable |
Optional Fields
Field Name | Value & Format | Description |
---|---|---|
transparent_logo | { locale: string, url: string } | Optional logo with transparent background (≥ 400px, ideal ≥ 640px) |
actors | Array of { name: string } | Optional cast data |
directors | Array of { name: string } | Optional director data |
screenshot_portrait | Array of { locale: string, url: string, width: integer } | Optional portrait screenshot (≥ 400px, ideal ≥ 800px) |
artwork_portrait | Array of { locale: string, url: string, width: integer } | Optional vertical poster/artwork (≥ 640px, ideal ≥ 960px) |
trailers | Array of { locale: string, url: string } | Optional trailer links per locale |
Feed Delivery
Initial Metadata Import (Full Catalogue Ingestion)
For the initial metadata import, we recommend using NDJSON (Newline-Delimited JSON) format.
NDJSON is well-suited for large datasets, as it supports efficient line-by-line processing with low memory usage. It also allows for faster imports, simpler error handling, and better integration with our existing data pipeline and tools.
If NDJSON is not available, we can also work with flat JSON or CSV formats, though with some limitations in processing efficiency.
Recommendation Feed
The recommendation feed is an optional feature that allows content partners to highlight selected titles in a dedicated recommendation row on the Titan OS interface. This is a valuable opportunity to promote specific content based on editorial priorities, seasonal relevance, or commercial focus.
To enable this feature, the feed should include:
- A unique content ID (matching the metadata feed)
- A priority or ranking (optional, for display order)
- A title and locale
If no recommendation feed is provided by the partner, Titan OS can create a feed based on the most recently added contents of the catalogue feed.
Feed Updates
Titan OS updates metadata feeds every 24 hours. To reduce load on both your systems and ours, we kindly ask you to structure the feed in a way that makes it easy to identify only the necessary additions, updates, or deletions. This helps ensure efficient processing and avoids unnecessary re-imports of unchanged data.
Ideally, the feed includes a reliable last_updated timestamp or supports delta-based delivery (e.g. updated_since), so that we can process only the changes since the last sync.
Update Type | How to Handle |
---|---|
✅ New items | Feed should include created_at or id ordering |
🔄 Changed items | Use updated_at timestamps or versioning/hash to detect changes |
❌ Deleted items | Feed should include a “tombstone” list (e.g. { id, deleted: true } ) or list of valid IDs |
Access and Security Configuration
We are happy to integrate with any access point you provide, including URLs or APIs. Please feel free to choose the method that works best for you. If security measures such as password protection, API keys, or IP whitelisting are required, we kindly ask you to configure them on your side and share the necessary details with us.