Set Up Your Account
Step 2: Upload Your Catalog to Staging
This guide covers creating, validating, and uploading your catalog to the staging environment.
1. Create your catalog
Each file in your catalog submission must conform to the Enhanced Metadata Bridge for Entertainment Resources (EMBER) schema. You can submit a full catalog that includes all your video metadata or an incremental catalog that includes only changes.
Catalog upload types
| Type | Manifest type value | Behavior | When to use |
|---|---|---|---|
| Full catalog | CATALOG_FULL |
Replaces your entire existing catalog. The system deletes items not present in the submission. | Initial upload, monthly full refresh, major catalog restructuring |
| Incremental catalog | CATALOG_UPDATE |
Adds new entities, updates existing ones, and preserves unchanged items. Use Delete elements to remove specific items. |
Daily or weekly updates, adding new releases, fixing metadata, removing expired content |
CATALOG_FULL).Quick start template
The following is a minimal valid EMBER catalog for a single movie with an offer.
<?xml version="1.0" encoding="UTF-8"?>
<DataCollections schemaVersion="1.0.0">
<!-- Define your programs -->
<ProgramCatalog id="MY_CATALOG" version="1">
<Movie id="MOVIE_001" version="1">
<ExternalIds>
<ExternalId scheme="imdb">tt1234567</ExternalId>
</ExternalIds>
<Titles>
<Title language="en" default="true">Example Movie</Title>
</Titles>
<Descriptions>
<Description language="en" default="true">
A thrilling adventure film about discovery and courage.
</Description>
</Descriptions>
<ReleaseDates>
<ReleaseDate releaseType="streaming">2024-01-15</ReleaseDate>
</ReleaseDates>
</Movie>
</ProgramCatalog>
<!-- Define how customers access content -->
<OfferCatalog id="MY_OFFERS" version="1">
<ProgramOffers id="OFFER_001" version="1" programRef="MOVIE_001">
<ProgramOffer>
<Entitlements>
<Entitlement type="free"/>
</Entitlements>
</ProgramOffer>
</ProgramOffers>
</OfferCatalog>
</DataCollections>
For complete schema documentation, see EMBER Specification Overview.
Catalog creation requirements
Before creating your catalog, review the core concepts in the EMBER Specification Overview, particularly the sections on identifiers, versioning, element ordering, localization, and relationships. These rules govern how your catalog is structured and processed.
Key points to keep in mind:
- IDs must be durable (never change after creation), unique, and case-sensitive. For details, see Identifiers.
- The system always applies the highest version number. The system ignores lower version numbers even if received later. For details, see Versioning.
- Element ordering is strict. EMBER uses
xs:sequence, so child elements must appear in XSD-defined order. Incorrect ordering causes validation failure. For details, see Element order dependency. - Localization requires exactly one
default="true"entry per localizable element, by using BCP-47 language codes and ISO 3166-1 territory codes. For details, see Localization. - Relationships connect TV hierarchies (series to season to episode) and link extras to main content.
TVSeasonmust includeisSeasonOfSeries.TVEpisodemust includeisEpisodeOfSeasonorisEpisodeOfSeries. For details, see Relationships.
Follow these guidelines for file size and compression:
- Use file compression for efficiency. Compress each data file individually by using GZip (.gz) or Zstandard (.zst) formats.
- Maximum size per compressed file: 100 MB
- Maximum total submission size (compressed): 10 GB
- If your catalog exceeds 100 MB compressed, split it into multiple files (for example, by catalog type or content type).
2. Validate your catalog
After creating your catalog file, validate it locally before uploading. The catalog ingestion service rejects files that aren't well-formed XML or that fail schema validation.
Download the EMBER XSD schema
Download the EMBER schema file: EMBER XSD file. Save it in the same directory as your catalog file.
Validate with xmllint
Mac and Linux include xmllint by default. Run the following command.
xmllint --noout --schema EMBER_{version}.xsd your-catalog.xml
Expected output (success):
your-catalog.xml validates
Expected output (failure):
your-catalog.xml:42: element Movie: Schemas validity error:
Element 'Movie': Missing child element(s). Expected is ( Titles ).
your-catalog.xml fails to validate
--) into en-dashes.Validate with an IDE
Most IDEs have built-in XML validation:
- Visual Studio Code: Install the XML extension by Red Hat. Errors appear as you type.
- IntelliJ IDEA: Right-click your XML file, then choose Validate. Or configure under Settings > Languages & Frameworks > Schemas and DTDs.
- Eclipse: Right-click your XML file, then choose Validate.
Common validation errors
| Error | Cause | Fix |
|---|---|---|
Missing child element Titles |
Required Titles element not present |
Add Titles with at least one Title |
| Element unexpected, expected… | Elements in wrong order | Reorder elements to match XSD sequence |
| Pattern restriction violated | Wrong date/time format | Use YYYY-MM-DD for dates, ISO-8601 with time zone for datetimes |
| Invalid value for attribute | Wrong enum value | Check the allowed values in the schema (for example, free, subscription for entitlement types) |
What XML validation catches and what it doesn't
Local validation (xmllint or IDE) catches:
- Malformed XML (broken tags, unclosed elements)
- Elements and attributes not defined in the schema
- Required elements that are missing
- Incorrect element ordering
- Invalid data types and formats
Local validation doesn't catch (caught at ingestion):
- Referential integrity. For example, a
TVEpisodereferencing aTVSeasonthat doesn't exist in the catalog. - Business rules. For example, a
TVEpisodemissing a required series relationship (isEpisodeOfSeries). - Image accessibility. For example, image URLs that aren't publicly reachable.
- Duplicate IDs. For example, two entities with the same ID in the same catalog.
- Cross-catalog reference resolution. For example,
ProgramOffersreferencing a program that doesn't exist.
3. Upload your catalog
After validating your catalog, upload it to the Amazon S3 bucket that Amazon configured for you.
S3 folder structure
Your S3 bucket has the following folder structure.
s3://amazon-media-catalogs/<your-provider-prefix>/
├── prod/ ← Production environment
│ ├── catalogs/ ← Upload production catalog files here
│ ├── manifests/ ← Upload production manifest files here
│ └── reports/ ← Production ingestion reports appear here
└── staging/ ← Staging environment
├── catalogs/ ← Upload staging catalog files here
├── manifests/ ← Upload staging manifest files here
└── reports/ ← Staging ingestion reports appear here
Upload workflow
To upload your catalog files
- Assume the IAM role.
aws sts assume-role \ --role-arn <role-arn-from-your-rep> \ --role-session-name catalog-uploadFor more details, see Assume the IAM role for catalog upload.
- Export the returned credentials as environment variables as explained in Assume the IAM role for catalog upload.
- Upload the catalog files.
aws s3 cp my-catalog.xml.zst \ s3://amazon-media-catalogs/<provider>/staging/catalogs/catalog-20250420-120000.xml.zst - Upload the manifest file.
aws s3 cp my-manifest.manifest \ s3://amazon-media-catalogs/<provider>/staging/manifests/manifest-20250420-120000.manifestThis action starts the ingestion process. For details about the manifest file, see Upload the manifest to start ingestion.
4. Upload the manifest to start ingestion
Uploading the manifest file starts the ingestion process. Make sure to upload the manifest only after you've uploaded your catalog files. Use the following command to upload the manifest file.
aws s3 cp my-manifest.manifest \
s3://amazon-media-catalogs/<provider>/staging/manifests/manifest-20250420-120000.manifest
Manifest file
The manifest file tells the ingestion service which catalog files to process. Uploading a manifest starts ingestion immediately.
Manifest requirements
The manifest file must meet the following requirements:
- Filename – Must end with .manifest (for example, catalog_upload_20250420.manifest)
- Format – JSON
- File names must be unique – Manifest and catalog file names can't overwrite existing files. Use timestamps or UUIDs to ensure uniqueness.
Manifest format
The following example shows the structure of a basic manifest file with a single catalog.
{
"s3Bucket": "amazon-media-catalogs",
"s3Keys": [
"<provider>/staging/catalogs/catalog-20250420-120000.xml.zst"
],
"type": "CATALOG_FULL",
"schema": "EMBER"
}
Manifest fields
The following table describes each field in the manifest file.
| Field | Required | Values | Description |
|---|---|---|---|
s3Bucket |
Yes | amazon-media-catalogs |
Always this value. |
s3Keys |
Yes | Array of S3 paths | Paths to catalog files to ingest. Can include multiple files. |
type |
Yes | CATALOG_FULL or CATALOG_UPDATE |
Full replacement or incremental update. |
schema |
Yes | EMBER or CDF |
Catalog format. Use EMBER for new integrations. |
Multi-file manifest example
You can include multiple catalog files in a single manifest. The following example references three separate files for programs, offers, and schedules.
{
"s3Bucket": "amazon-media-catalogs",
"s3Keys": [
"<provider>/staging/catalogs/programs-20250420.xml.zst",
"<provider>/staging/catalogs/offers-20250420.xml.zst",
"<provider>/staging/catalogs/schedules-20250420.xml.zst"
],
"type": "CATALOG_FULL",
"schema": "EMBER"
}
The system processes all files listed in s3Keys as a single atomic submission. If any file fails XML validation, the system rejects the entire submission.
Upload requirements
The following table summarizes the requirements for catalog uploads.
| Requirement | Details |
|---|---|
| Initial upload | Must be a full catalog (CATALOG_FULL). |
| Maximum upload frequency | One catalog submission per minute. |
| Advance notice | Submit upcoming content at least two days before its availability date. |
| File naming | Must be unique. Use timestamps or UUIDs (for example, catalog-20250420-153045.xml.zst). |
5. Review ingestion reports
After you upload your catalog, the ingestion system processes your data and generates reports hourly (when items have been processed in the preceding hour). Reports are HTML files placed in the reports/ directory of your S3 bucket.
Receive report notifications by email
Ask your Amazon representative to add you to the ingestion report email distribution list. The system sends separate emails for successes and failures. Request to be added to both lists.
The email provides:
- A summary of items processed in the preceding hour
- An AWS CLI command to download the full report
Download a report
When you receive an ingestion report email notification, the email contains the exact download command. Copy and paste it into your terminal.
aws s3api get-object --region us-east-1 \
--bucket amazon-media-catalogs \
--key <provider>/staging/reports/04_20_2025/report-1713622889665-20250420012129.html \
report.html
You can also access the report by browsing the reports directory with the following commands.
# List available reports
aws s3 ls s3://amazon-media-catalogs/<provider>/staging/reports/
# Download a specific report
aws s3 cp \
s3://amazon-media-catalogs/<provider>/staging/reports/04_20_2025/report-1713622889665.html \
./report.html
Open report.html in a web browser to view the full report.
Understand the report
The ingestion report has the following sections.
Summary
The summary shows the overall ingestion results which includes the following:
- Ingestion ID and timestamp
- Total items processed
- Counts (number of added, updated, deleted, unchanged, and skipped items)
- Error, warning, and suggestion message counts
Errors, warnings, and suggestions
In this part of the report, expand each section to see individual messages and the IDs of affected items.
- Errors (must fix) – The system skips items with errors and doesn't ingest them. You must fix these for content to appear.
- Warnings (should fix) – The system ingests the content but it might have reduced functionality. Fix these for an optimal experience.
- Suggestions (optional) – Optimization recommendations for better discovery and metadata quality.
Counts
The counts section provides a detailed breakdown of added, deleted, updated, unchanged, and skipped items. Choose the Details button to see the specific IDs in each category. Compare these against your expected changes as a final verification.
Catalog summary report
In addition to hourly ingestion reports, the system generates a catalog summary report daily. This report provides a consolidated view of your entire catalog status across all catalog submissions, including all outstanding errors, warnings, and suggestions regardless of when they were introduced. Use this report for ongoing catalog health monitoring.
You can find this report in the following location: s3://amazon-media-catalogs/<provider>/prod/reports/<Date>/catalog-summary-<DateTime>.html.
Last updated: May 27, 2026

